in reply to GREP value not initialized

For a couple additions to chrestomanci's advice:
  1. 1) I'd recommend that you use values instead of keys since you're ignoring the key data.
  2. 2) Also, be sure to use the $ anchor instead of ^ for the end of string boundary
foreach my $plf_vals (values %Hash_plfdata) { my ($base_p4path) = grep {m{/\Q$file_name\E}i && !m{\.plf$}} @$plf +_vals; print "BASE p4 path:$base_p4path\n"; }