I think this will do what you want.
use strict;
use warnings;
use YAML;
my %hosts;
my $current_host;
while ( my $line = <DATA> ) {
chomp $line;
if ( my ($host) = $line =~ /\[(\w+)\]/ ) {
$current_host = $host;
push @{ $hosts{$current_host} }, $host;
}
elsif ( my ($dir) = $line =~ /"([^"]+)"/ ){
push @{ $hosts{$current_host} }, $dir;
}
}
print Dump \%hosts;
__DATA__
[msservername1]
"/etc/like"
"/etc/whatever"
[msservername2]
"/etc/whatever"
__END__
---
msservername1:
- msservername1
- /etc/like
- /etc/whatever
msservername2:
- msservername2
- /etc/whatever
I don't put the result in @mshost1, @mshost2 etc since I don't know how many there will be and it is bad practice to generate them on the fly. Instead I've put them in a hash keyed on the host name.