Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic

Re^4: Generate the perl sequence 1, 11, 111, ....

by blazar (Canon)
on Oct 11, 2008 at 10:10 UTC ( #716580=note: print w/replies, xml ) Need Help??

in reply to Re^3: Generate the perl sequence 1, 11, 111, ....
in thread Generate the perl sequence 1, 11, 111, ....

On the other hand, it looks to me that map is somewhat more magical than the examples in perlsub; if you call
map (sub { "1" x $_ }, (1..10));
it returns an array of coderefs (references to subroutines) which is not at all what is needed here.

I personally believe that indeed map and its sibling grep are more magical: precisely because as I wrote in my reply to the OP they accept an expression to be evaluated for each of the other parameters. But I don't understand what you mean with "which is not at all what is needed here" because your example does exaclty what I mean: I do expect it to return a list (not an array!) of coderefs. Only, it probably does not do what you expect in that those coderefs are... all the same coderef:

C:\temp>perl -E "say for map sub {1 x $_} => 1..3" CODE(0x182a944) CODE(0x182a944) CODE(0x182a944)

This is because $_ is a package variable and those anonymous subs are not closures: when you will use one of them, its $_ will be that in scope at the moment, not the one passed to map() when it was created. To obtain that you have to close over a lexical:

C:\temp>perl -E "say for map { my $x=$_; sub {1 x $x} } 1..3" CODE(0x23aa7c) CODE(0x182aef4) CODE(0x182ad74)

Alternatively, and this is the interesting point to be noted here, Perl 5.10 and highter support lexical $_:

C:\temp>perl -E "my $_; say for map sub {1 x $_} => 1..3" CODE(0x23a97c) CODE(0x182a9bc) CODE(0x183bbbc)
If you can't understand the incipit, then please check the IPB Campaign.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://716580]
[Dumu]: and incidentally, in case you're dying to know, it's multiple web browser bookmark format files...
[ambrus]: Seeking afterwards might also work fine, I think.

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (11)
As of 2017-11-20 18:07 GMT
Find Nodes?
    Voting Booth?
    In order to be able to say "I know Perl", you must have:

    Results (291 votes). Check out past polls.