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