Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Re: Inconsistent for the sake of convenience

by blokhead (Monsignor)
on Feb 17, 2009 at 18:30 UTC ( #744515=note: print w/ replies, xml ) Need Help??

in reply to Inconsistent for the sake of convenience

My favorite (or least favorite) is when Perl tries to be a functional language and treat the name of a function as a first-order value. In normal circumstances, if foo is a function name, and it's followed by a comma, the meaning is to call foo with no args and return the result. For example:

print lc, $/; ## ^^ ## call lc with no args, return the result:
But in places like map EXPR and grep EXPR, it can mean something very different. This is especially bizarre when foo is a built-in that modifies $_ when it is called with no args:
map chop, @items; ## ^^^^ ## calls map with first argument = sub{ chop; } ## doesn't change current value of $_ anyotherfunc chop, @items; ## ^^^^ ## calls anyotherfunc with first argument = result of chop($_) ## changes current value of $_ !!


Comment on Re: Inconsistent for the sake of convenience
Select or Download Code
Replies are listed 'Best First'.
Re^2: Inconsistent for the sake of convenience
by hobbs (Monk) on Feb 19, 2009 at 04:20 UTC
    That doesn't actually have anything to do really with function names -- map and grep take an expression, up to the comma, and lambda it, for instance map $_ * $_, 1 .. 10 or grep exists $stuff{$_}, @things. It's syntactic sugar for map BLOCK LIST and grep BLOCK LIST, which are already kind of sugary themselves... but it's consistent if you understand what it does.

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (4)
As of 2015-10-14 02:53 GMT
Find Nodes?
    Voting Booth?

    Does Humor Belong in Programming?

    Results (320 votes), past polls