in reply to How to grep for a filename for each of the keys of a hash

1: $filename is presumably a string, not a pattern, which you want to match; so you have to escape metacharacters first if you're going to use it in a regular expression: /\Q$filename\E/, for example, if you don't want to modify that variable with the quotemeta function or don't need the quoted version for anything else ($foo = quotemeta $foo; or my $foo_quoted = quotemeta $foo;</code>).

2:

Replies are listed 'Best First'.
Re^2: How to grep for a filename for each of the keys of a hash
by k_manimuthu (Monk) on Dec 13, 2010 at 05:43 UTC

    As per above comments you use the quotemeta function.
    And
    Insist of the below code

    grep (/$filename/i, $key) foreach my $key (keys %path_versions)

    You will try the below code. Here, you no need to use the foreach loop. You directly pass 'hash keys'.

    @array = grep (/$filename/, keys %path_versions);
      push @array = grep (/\Q$file_name\E/i, keys %pathname_versions);

      I am getting the below error when the above piece of code is executed,what does it mean?

      Type of arg 1 to push must be array (not list assignment)

        my @array = grep (/\Q$file_name\E/i, keys %pathname_versions);

        That's the right thing.

        s/ =/,/ in that code.