Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister

Re: Array of variables

by Jenda (Abbot)
on May 29, 2013 at 09:37 UTC ( #1035798=note: print w/replies, xml ) Need Help??

in reply to Array of variables

There are two places in Perl that may confuse people to think arrays contain variables. While @array = ($one, $two, $three); does make copies of the values of those variables for my $x ($one, $two, $three) { doesn't make copies, but rather aliases $x to the variables one at a time:

my $one = 1; my $two = 2; my $three = 3; my @arr = ($one, $two, $three); $arr[0] += 10; print "\$one = $one\n"; # still 1 for my $x ($one, $two, $three) { $x += 0.5; } print "\$one = $one\n"; # changed to 1.5 for my $x (@arr) { $x += 0.1; } print "\$one = $one\n"; # still 1.5, no link between $arr[0] and $one

So arrays contain values, but for loops through the "things" specified in the list you specify and if that "thing" is a variable, you can change it.

There is an exception though. The @_ array used for parameters to subroutine calls:

my $one = 1; my $two = 2; my $three = 3; sub direct { $_[0] += 10; $_[1] += 9; } sub indirect { my ($a,$b,$c) = @_; $a += 99; $b += 99; } print "\$one = $one\n"; # 1 direct($one, $two, $three); print "\$one = $one\n"; # changed to 11. $_[0] was an alias to $one. indirect($one, $two, $three); print "\$one = $one\n"; # still 11. The $a was assigned a copy of the +value. It's not an alias

Enoch was right!
Enjoy the last years of Rome.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1035798]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (5)
As of 2016-12-10 19:35 GMT
Find Nodes?
    Voting Booth?
    On a regular basis, I'm most likely to spy upon:

    Results (164 votes). Check out past polls.