Just to pick a couple of nits in the interest of increasing
understanding...
In that poem, the "m mmm" could be replaced with
any bareword simply because the poem "won't run"
and without strict, throwing around barewords
is unlikely to cause compilation errors.
However, if "m mmm" was used in code to actually match
something (being a silly way of writing "m//m"), then you
could never replace it with "mmmm".
First, m//m is pretty silly code itself. The empty pattern
means "reuse the most recent successful regex", and testing
(since I so doubt it is documented that I didn't even look
for it) shows that when using the empty regex this way, any
options are ignored (including /g!); note that this might
be considered a bug and get fixed some day, so don't rely
on that behavior. So it boils down to being the same as
m//, m//mg, m//g, or any other similar code.
But if we wanted to the code to compile to the same
optree, then we could replace "=~ m mmm" with "=~ mmm"
(note only 3 "m"s, not 4) provided we either didn't
use strict or used a version of Perl that
doesn't give an error in this case. However, in the
absence of "=~", replacing "m mmm" with "mmm" will change
the code from m//m (which matches against $_ since there
is no "=~") to 'mmm' (which is simply a string constant)
unless something else gets in the way such as
strict or the declaration of a subroutine
named "mmm".
-
tye
(but my friends call me "Tye")
|