in reply to Use of uninitialized value $_ in pattern match (m//)?

What is your match trying to match against?

Usually, you have a variable to the left of the match statement. If you don't have that, Perl will use the default topic, $_ to match.

What is the value of $_ and where do you set it?

Replies are listed 'Best First'.
Re^2: Use of uninitialized value $_ in pattern match (m//)?
by fasoli (Beadle) on Feb 29, 2016 at 15:36 UTC

    Hi, thanks for your time! I am trying to match against filenames, from files that are in the path I specify. I modified my script to

    $match =~/MV(\d{4})/; $moved = $1; print "$moved \n";

    but although I initialise my $match outside of the loops, I still get the same error as described initially :(

      Try

      #!/usr/bin/perl/ use strict; use warnings; my $id = "AC"; my $root = '/home/results/initial/'; for my $i (2..3){ for my $k (1..3){ my $path = $root.sprintf "%s%04d/F%05d",$id,$i,$k; print "$path\n"; for (glob "$path/MV*"){ print "$1\n" if /MV(\d{4})/; } } }
      poj

      What is the value in $match?

      What do you expect the value in $match to be?

      As hippo already mentioned, you seem to be highly confused about how to read entries in a directory. See glob, or opendir and readdir.

      ... I still get the same error as described initially ...

      From the OP: '... I'm getting a "Use of uninitialized value $_ in pattern match (m//)" error.'
      If you're really still getting this exact "error" (a warning, actually), then you still have a
          /MV(\d{4})/;
      statement lurking somewhere in your code that is still trying to implicitly match against the  $_ variable which you have still not initialized. What line number is associated with the warning message? Look at (or near) that line for the offending statement.


      Give a man a fish:  <%-{-{-{-<