behavior of m// operator

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
According to the documentation this program should print nothing since
m// uses the last successful pattern match from m//, split, etc. However
on my linux box it prints 1:

#!/usr/bin/perl -w

$a = "a";
$b = "b";
split /a/,$a;
print $b =~ m//;

Is the documentation wrong?


Re: behavior of m// operator

Quoted text here. Click to load it

No, it is correct.  `print' emits 1 because the succeeding match
operation ($b =~ m//) succeeded (m// essentially matches a `null'
string, which $b has:

,----[ perl -de 0 ]
| Loading DB routines from version 1.28
| Editor support available.
| Enter h or `h h' for help, or `man perldebug' for more help.
| main::(-e:1):   0
|   DB<1> ($a, $b) = ( qw(a b) )
|   DB<2> x split /a/ => $a
|   empty array
|   DB<3> print $b =~ m//
| 1
|   DB<4> x $b =~ m//
| 0  1
|   DB<5>

Because you used `=~', m// tries to match from $b, not from $a (really
$_) as you would expect.

  I like the idea of 256 bits, though: 32 for the (Unicode) character leaves
  room for 224 Bucky bits, which ought to be enough for anyone.
                -- Roland Hutchinson, in alt.folklore.computers

Re: behavior of m// operator

Quoted text here. Click to load it

My docs don't explicitly say whether the regex used in a split counts
as previously "matched" or not in this context.  Experimentally, it looks
to me like it does not.


-------------------- http://NewsReader.Com/ --------------------
The costs of publication of this article were defrayed in part by the
payment of page charges. This article must therefore be hereby marked
advertisement in accordance with 18 U.S.C. Section 1734 solely to indicate
this fact.

Site Timeline