Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: Wrong result for "length keys %$hashref"?

by ikegami (Patriarch)
on Mar 14, 2011 at 19:54 UTC ( [id://893134]=note: print w/replies, xml ) Need Help??


in reply to Wrong result for "length keys %$hashref"?

I prefer 0+ over scalar. It's a little more self-documenting.

my %h = (a=>1, b=>2); print 0+keys(%h), "\n"; my @a = qw( a b c ); print 0+@a, "\n";

Replies are listed 'Best First'.
Re^2: Wrong result for "length keys %$hashref"?
by saberworks (Curate) on Mar 14, 2011 at 21:56 UTC
    That's only more self-documenting if you already understand list vs. scalar context. If a junior programmer saw that they would say WTF and have no idea where to look next. If you used scalar, they might not know exactly what it did but they'd have a direct pointer to documentation that would explain exactly what the intent of the code was.
      If you used scalar, they might not know exactly what it did...

      A Perl programmer who doesn't understand scalar context has no business programming alone.

      With that said, this is one of the few places where using the explicit scalar operator makes sense.

      You're assuming code exists in isolation. I can't think of any code that needs the number of elements in a hash that would be unclear no matter how you spelled

      0+keys(%h)

      But that doesn't mean they're all equal.

      • The 0+ points out that something special is happening, whereas scalar() just looks like a function call. A function call that doesn't exist. There's not even an op for it.

      • The 0+ points out that a number is going to be returned, confirming what one might think keys is doing.

      If you used scalar, they might not know exactly what it did but they'd have a direct pointer to documentation that would explain exactly what the intent of the code was.

      I think they'd be better off reading the docs for keys, not scalar. The former lists the two possible return values for keys. The understanding of context will follow.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others scrutinizing the Monastery: (6)
As of 2024-04-23 20:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found