in reply to Perl oddities
I'm not sure if this one counts as an oddity, or a bug.
I think it's defined behaviour, but I'm not sure.
substr() is implemented as an Lvalue subroutine, and it's a fatal error when assigned to incorrectly. I think means that when substr() is passed as a parameter, it gets treated like an Lvalue, since it can be assigned back to by modifying @_.
This code crashes on the subroutine call:
use strict; use warnings; my $x=""; foo( substr($x,2,1) ); # crashes here print "Alive!\n"; # not reached sub foo {}
This code doesn't:
use strict; use warnings; my $x=""; my $y=substr($x,2,1); # warns, doesn't crash foo($y); # no-op print "Alive\n"; # we get here just fine sub foo {}
I maintain that this is an odd behaviour, one way or the other. My hunch is that it counts as an "oddity" as opposed to a "bug": can the experts confirm or deny this?
--
Ytrew
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: substr oddity
by BrowserUk (Patriarch) on Mar 04, 2005 at 06:05 UTC | |
by Anonymous Monk on Mar 04, 2005 at 18:14 UTC | |
by BrowserUk (Patriarch) on Mar 04, 2005 at 18:24 UTC | |
by Anonymous Monk on Mar 04, 2005 at 19:05 UTC | |
by BrowserUk (Patriarch) on Mar 04, 2005 at 19:28 UTC | |
|
In Section
Meditations