Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris

Re: Teaching Perl

by hardburn (Abbot)
on Apr 05, 2003 at 23:22 UTC ( #248354=note: print w/replies, xml ) Need Help??

in reply to Teaching Perl

Break it up peice by peice.

pair takes a "hash" and creates an AoA. Consider this code:

my @got = pair( . . . );

Where $i is any integer between 0 and scalar(@got), $got[$i][0] will contain the "hash" key, and $got[$i][1] will contain its value.

Taking the map statements in order of execution, the first one is:

my @got2 = map { [$_->[0],$_->[1],'meowmoo'] } @got;

@got2 is also an AoA, but this time containing three elements. The first two are exactly as they are in @got, and the thrid one is always 'meowmoo'.

The second map statement is a bit trickier:

my @got3 = map { &{$_->[1]}($_->[2]) ? $_->[0] : () } @got2;

This one needs to be broken up further:

&{$_->[1]} # Get the subroutine referanced in $got2[$i][1] ($_->[2]) ? # Pass in the value of $got2[$i][2] ('meowmoo') $_->[0] : # If the subroutine returned true, then # pass back the key of the "hash" associated # with that subroutine. () # Otherwise, return undef

@got3 is a simple array, and will contain ('cat', undef, 'cow'). Actually, I'd have to run the code to check if that undef is really there. Hopefully, this is a multiple-choice test and answers with and without the undef are not both present :) If I had to choose, I'd say that it would be.

I wanted to explore how Perl's closures can be manipulated, and ended up creating an object system by accident.
-- Schemer

Note: All code is untested, unless otherwise stated

Replies are listed 'Best First'.
Re: Re: Teaching Perl
by fokat (Deacon) on Apr 06, 2003 at 05:39 UTC

    I think you're 99.5% correct. A () is not the same as undef. Take a look...

    bash$ perl -e 'print join(",", ('meow', (), 'moo')), "\n";' meow,moo

    But the rest of the analysis is perfect, so a big ++ for you :)

    Best regards

    -lem, but some call me fokat

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://248354]
[ambrus]: Is this for work?
[Eily]: Discipulus try looking at $@
[Eily]: or count the parentheses :)
[Discipulus]: stupid me! I had to stay at home and do not code with the flu..
[holli]: bacause it's a syntax error
[Discipulus]: yes sorry forget and forgive me
[Eily]: for what it's worth I didn't go for the brightest solution either
[Eily]: I tried print eval '2+1/3*(2+2/5))' or print $@

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (5)
As of 2017-10-24 10:19 GMT
Find Nodes?
    Voting Booth?
    My fridge is mostly full of:

    Results (287 votes). Check out past polls.