http://www.perlmonks.org?node_id=955057


in reply to Re: new to perl, syntax question
in thread new to perl, syntax question

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.

Replies are listed 'Best First'.
Re^3: new to perl, syntax question
by Marshall (Canon) on Feb 20, 2012 at 12:52 UTC
    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.

    #!/usr/bin/perl -w use strict; use Data::Dumper; 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 # formulation!!! # 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 # code. 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[8] 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; __END__ The number in y is: 11 ### the 5th thing in @y $VAR1 = [ '7', '8', '9', '10', '11', '12', '13', '14', [ '1', '2', '3', '4' ] ];