in reply to Re^2: Dereferenced Arrays
in thread Dereferenced Arrays

The first issue here is what is "poo". Let's assign "poo" to a variable before we try to call a sub named "poo_sub".
#!/usr/bin/perl -w use strict; use Data::Dumper; my @poo = ( [1..4], ["goo", "doo", "moo"], [6..9] ); print Dumper (\@poo); #here the Dumper module is used (it is VERY handy) to #show the structure of @poo. __END__ $VAR1 = [ [ 1, 2, 3, 4 ], [ 'goo', 'doo', 'moo' ], [ 6, 7, 8, 9 ] ];
The [....] are anonymous array references. A list is well, a list of things. In this case @poo is a list of anon ref's to other lists. There is some distinction between list and an array, but in general this is just Perl internals and for the purpose of understanding what a "@var" is, makes no difference.

So let's call a subroutine with the list of 3 things in @poo:

#!/usr/bin/perl -w use strict; use Data::Dumper; my @poo = ( [1..4], ["goo", "doo", "moo"], [6..9] ); #first we just have 3 things, just pass 'em! 3 things in the call! poo (@poo); sub poo { my ($lref1, $lref2, $lref3) = (my @lrefs) = @_; #yes can do this, here we don't need individual ref's #just shown to demo that you can do that... foreach (@lrefs) { dump_lref ($_); } } sub dump_lref { my $lref = shift; #same as $lref = @_; here print "@$lref\n"; } __END__ prints: 1 2 3 4 goo doo moo 6 7 8 9
Now let's say that we don't want to pass the 3 things in the @poo list, we just want to pass a reference to the @poo list:
#!/usr/bin/perl -w use strict; use Data::Dumper; my @poo = ( [1..4], ["goo", "doo", "moo"], [6..9] ); #now just pass a ref to the @poo list ..... poo (\@poo); sub poo { my $ref_of_ref_to_list = shift; foreach my $lref (@$ref_of_ref_to_list) #@does one level of de-ref { dump_lref($lref); } } sub dump_lref ###WHOA same sub we used before! { my $lref = shift; #same as $lref = @_; here print "@$lref\n"; } __END__ prints: 1 2 3 4 goo doo moo 6 7 8 9
WHOA! same printout!

I think that I should mention that unlike some other languages, @list, $list, %list, sub list{} are all different things.

Replies are listed 'Best First'.
Re^4: Dereferenced Arrays
by ikegami (Patriarch) on Aug 19, 2009 at 02:40 UTC
    sub dump_lref ###WHOA same sub we used before! {

    I've never seen anyone so excited by code reuse before! :)

      ;-) Just was trying to show that deference one level of an additional level of indirection is the same thing as before. I am glad that somebody got at least some humor value out my attempt! :-)

      Update: Kidding aside, I am genuinely trying to help. If the OP still has questions, I would be glad to try to help.