In Perl, what is the difference between accessing an array element using @a[$i] as opposed to using $a[$i]?

后端 未结 3 951
臣服心动
臣服心动 2020-12-04 02:19

Basic syntax tutorials I followed do not make this clear:

Is there any practical/philosophical/context-dependent/tricky difference between accessing a

3条回答
  •  隐瞒了意图╮
    2020-12-04 02:33

    $a[...]   # array element
    

    returns the one element identified by the index expression, and

    @a[...]   # array slice
    

    returns all the elements identified by the index expression.

    As such,

    • You should use $a[EXPR] when you mean to access a single element in order to convey this information to the reader. In fact, you can get a warning if you don't.
    • You should use @a[LIST] when you mean to access many elements or a variable number of elements.

    But that's not the end of the story. You asked for practical and tricky (subtle?) differences, and there's one noone mentioned yet: The index expression for an array element is evaluated in scalar context, while the index expression for an array slice is evaluated in list context.

    sub f { return @_; }
    
    $a[ f(4,5,6) ]     # Same as $a[3]
    @a[ f(4,5,6) ]     # Same as $a[4],$a[5],$a[6]
    

提交回复
热议问题