suppose you have @a= qw(1 2 3 4);
you are writting print "\n @a"; this will print 1 2 3 4.
if you are trying to write like...
$p= @a, then it will give you count of array i.e. 4
so it does not mean that if we write @a as index inside array would give the value of 4th index of array. Basically if we write code.. $b[@a] with return nothing because bare @a return complete set of value which is not a valid index and that is passing as index in @b so of course will return blank.
Perl syntax can be tricky. Does this help? Or just further confuse?
Update: I guess it confused one Monk, because I got a down vote.
I am genuinely trying to be helpful here.
When you write: $y[@x], you are accessing a single element of @y with the index of the scalar value of @x.
Note: using $a and $b or @a or @b is in general not a good idea as the $a and $b variables have special meaning to Perl and are used in sort. Better is to use: x,y,z.
However: "@a return complete set of value" this is not correct. What @a would mean is context specific.
my @x= qw(1 2 3 4);
my @y= qw(7 8 9 10 11 12 13 14);
my $num = $y[@x]; # @x evaluates here to the number "4"!!!
# the number of elements in @x
# As said before this is a VERY unusual
# It looks weird because it is weird.
# As mentioned above more normal would be
# $y[@x-1] or $y[$#x]
# I'm not saying that $y[@x] cannot have a defined,
# value but just that it is "strange" absent other
# context and would be worthy of a comment in the
print "The number in y is: $num\n"; #the 5th thing in @y!! WHOA!
#print $x[@y]; # ERROR: Use of uninitialized value in print
# this is because: $x is undefined!
# However consider this:
# here [@x] means something completely different
push @y, [@x]; # this means: assign new memory,
# copy @x into that new memory ,
# push a reference to that memory
# onto @y
print Dumper \@y;
The number in y is: 11 ### the 5th thing in @y
$VAR1 = [