use strict; open(IN, "<", "data.txt"); my @in = ; close(IN); open(OUT, ">", "out.txt"); my $out = ""; foreach my $in (@in) { chomp($in); if ($in =~ m/^(.*?)\\(.*?)\s*$/) { $out .= " $2"; } else { if ($out ne "") { print OUT "$out\n"; } $in =~ m/^(.*?)\s*$/; $out = $1; } } print OUT "$out\n"; close(OUT); #### $source{_source}->[0] #### $source{_source}->[0][0]#dedicate 0 to myself #### $source{_source}->[0][1]#my 1st child #### use Data::Dumper; use strict; my %source; $source{_source} = []; $source{_source}->[0] = []; $source{_source}->[0][0] = "section1";#myself $source{_source}->[0][1] = "section11";#1st child $source{_source}->[0][1] = "section12";#2nd child print Dumper(\%source);