Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: This could have DWIM better

by japhy (Canon)
on Mar 01, 2006 at 18:20 UTC ( [id://533719]=note: print w/replies, xml ) Need Help??


in reply to This could have DWIM better

Don't forget about $_ in your function.
BEGIN { *CORE::GLOBAL::length = sub(;$) { my $arg = @_ ? $_[0] : $_; defined($arg) ? CORE::length($arg) : undef; }; }

Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart

Replies are listed 'Best First'.
Re^2: This could have DWIM better
by ysth (Canon) on Mar 02, 2006 at 09:32 UTC
    Yikes, that's a bug(update: shows a bug in perl itself). The call to length should explicitly be passing $_, but it's not (update: passes nothing) when it is overridden. This causes a problem with lexical $_:
    $ perl5.9.4 -w BEGIN{ *CORE::GLOBAL::length = sub (;$) { my $arg = @_ ? $_[0] : $_; defined($arg) ? CORE::length($arg) : undef; } } $_ = "abc"; my $_; $_ = "defghi"; print length; __END__ 3
    This should print 6 whether length is overridden or not, but as is prints 3 when it is overridden.

    Update: after consideration, I think this is just a natural consequence of the ;$ prototype, and should be no longer a problem with a _ prototype (when someone implements that).

      Sounds like it's passing the package/global $_ instead of the lexical $_. I must've missed the memo on "lexical $_".

      Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
      How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart
        It's passing nothing. The bug is that the code calling length should always provide the argument.

        The memo.

Re^2: This could have DWIM better
by Aristotle (Chancellor) on Mar 01, 2006 at 18:25 UTC

    D’oh. Thanks.

    Makeshifts last the longest.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://533719]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others perusing the Monastery: (7)
As of 2024-04-19 11:24 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found