in reply to new to perl, syntax question

ikegami's post is technically correct.

However in the code that you presented, @name has nothing to do with @folder - this should be a "red flag"!
Something is missing here!

This uses the number of items in @name as an index into the @folder array.
While this could happen, it would be unusual absent other context.
I would be looking for some code that builds @folder based upon the elements in @name.

Update:
Furthermore, $var = $folder[@name]; would be unusual since Perl indicies are "zero-based".
$var = $folder[@name-1]; would I think, be more expected - another "red-flag".
You may sometimes see $#name instead of @name-1, but this means the same thing - the last index.

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

      #!/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' ] ];