Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re: Array of variables

by Jenda (Abbot)
on May 29, 2013 at 09:37 UTC ( [id://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

Jenda
Enoch was right!
Enjoy the last years of Rome.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (4)
As of 2024-04-19 23:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found