### 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

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

Create A New User
Node Status?
node history
Node Type: note [id://1035798]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (5)
As of 2018-06-20 02:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
Should cpanminus be part of the standard Perl release?

Results (116 votes). Check out past polls.

Notices?