in reply to scalar vs list context
Firstly, you've got to distinguish between lists and arrays. An array is basically a list identified an @-sign.
use strict; use warnings; # Assigning a list to an array. @a is now ('a', 'b', 'c'). my @a = ('a', 'b', 'c'); # Assigning an array to a list. $f is 'a'. my ($f) = @a; # Assigning a list to a list. $f2 is also 'a'. my ($f2) = ('a', 'b', 'c'); # Because we're assigning in scalar context, # the comma operator is used with its scalar # meaning. In scalar context comma means # "evaluate the left side, discard that, then # evaluate the right side". So $l is 'c'. # # "use warnings" will give us two errors here # because 'a' and 'b' are evaluated but never # used. my $l = ('a', 'b', 'c'); # Assigning an array to a scalar. $n is 3. my $n = @a; use Data::Dumper; print Dumper { '@a' => \@a, '$f' => $f, '$f2' => $f2, '$l' => $l, '$n' => $n, }; __END__ Output is: $VAR1 = { '@a' => [ 'a', 'b', 'c' ], '$n' => 3, '$l' => 'c', '$f2' => 'a', '$f' => 'a' };
|
|---|