Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change

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]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (6)
As of 2017-01-23 23:55 GMT
Find Nodes?
    Voting Booth?
    Do you watch meteor showers?

    Results (199 votes). Check out past polls.