in reply to Re^2: getting a regex to return an array of matches?
in thread getting a regex to return an array of matches?

Never do
my $var = ... if ...;,
my $var = ... unless ...;,
my $var = ... for ...;,
my $var = ... foreach ...; or
my $var = ... while ...;

Split them into two statements, like
my $var; $var = ... if ...;.

Update: Well, this is bothering me. I can't remember why, and I can't find an example where the above fails.

Update: diotalevi, which I believe has a knowledge of Perl guts, mentions: "my() has a runtime effect. You *always* (unless you're doing something freakish) want that to happen. The my $var STATEMENT-MODIFIER allows the runtime part of my() to potentially not happen." In other words, it sounds like doing any of the above leaves perl in an unstable state.

Replies are listed 'Best First'.
Re^4: getting a regex to return an array of matches?
by rmexico (Novice) on Feb 14, 2006 at 18:52 UTC
    not following here?
    my $var = $1 if ($filecontents =~ /SOME_REGEX(.*?)$/g); if($var) { ... proceed w/ usage of $var }
    why pre-declare, then use?
      Because my with a conditional is buggy (and makes no sense). In your case, the following will do nicely:
      my ($var) = $filecontents =~ /SOME_REGEX(.*?)$/g; if (defined $var) { ... proceed w/ usage of $var }
      Now the warning resides in perlsyn, and it says
      NOTE: The behaviour of a "my" statement modified with a statement modifier conditional or loop construct (e.g. "my $x if ...") is undefined. The value of the "my" variable may be "undef", any previously assigned value, or possibly anything else. Don't rely on it. Future versions of perl might do something different from the version of perl you try it out on. Here be dragons.
      So don't do that!! :)

      'my' buggy... and my $cache = undef if undef; hit upon that.

      MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!"
      I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README).
      ** The third rule of perl club is a statement of fact: pod is sexy.