#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @lines; { local $/ = '/////XYZ/////'; #/ while () { s/^\\+\w+\\+//g; s/\/+\w+\/+$//g; push @lines, {map {split /:/, $_} split /\|/, $_}; } } print Dumper \@lines;