Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re: Teaching Perl

by hardburn (Abbot)
on Apr 05, 2003 at 23:22 UTC ( [id://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?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others examining the Monastery: (8)
As of 2024-04-18 16:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found