Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

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

blokhead


Comment on Re: Inconsistent for the sake of convenience
Select or Download Code
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?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (9)
As of 2014-10-20 23:02 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (92 votes), past polls