foreach my $file (@filenames) { my $h = \%files; my @parts = split(/[-_.]/,$file); my $last = pop(@parts); foreach (@parts) { $h->{$_} ||= {}; $h = $h->{$_}; } $h->{$last} = 1; } #### foreach my $file (@filenames) { my $p = \\%files; my @parts = split(/[-_.]/,$file); $p = \(${$p}->{$_}) foreach @parts; ${$p} = 1; } #### foreach (@filenames) { my $p = \\%files; $p = \(${$p}->{$_}) foreach split /[-_.]/; ${$p} = 1; }