Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

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 $_ !!


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
Domain Nodelet?
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 lurking in the Monastery: (1)
As of 2021-09-18 05:17 GMT
Find Nodes?
    Voting Booth?

    No recent polls found