use strict; use warnings; use Data::Dumper; my $rec = q{}; my %HoA = (); while () { next if m{^#}; chomp; if (m{^==(\w+)==}) { $rec = $1; } else { push @{$HoA{$rec}}, $_; } } print Data::Dumper->Dump([\%HoA], ['*HoA']); print qq{\n}; foreach my $server (keys %HoA) { foreach my $unc (@{$HoA{$server}}) { print qq{$server: $unc\n}; } } __DATA__ ########## Server 1 UNC's ######################## ==SERVER1== \\server1\share1\tld0\sub-dir1\sub-dir2 \\server1\share1\tld0\sub-dir2\sub-dir2 \\server1\share2\tld1\dir1\subdir2\subdir3 \\server1\share2\tld1\dir1\subdir2\subdir4 ########## Other Server UNC's ######################## ==REMOTESERVER1== \\remoteserver1\share1\tld1\dir1\subdir2\subdir4 ==REMOTESERVER2== \\remoteserver2\share1\tld1\dir1\sub dir 3\sub dir 5\report's \\remoteserver2\share1\tld1\dir2\sub dir 4\sub dir 6\reports ###### No Entries Below This Line ######