perl 为什么返回数组的最后一个元素?

np8igboo  于 2023-01-02  发布在  Perl
关注(0)|答案(2)|浏览(149)

我是Perl新手,发现Perl标量和列表相当混乱。
在下面的代码中,

$a = ("a", "b", "c");

print "$a \n";

结果将是“C
但如果我给予数组命名

@arr = ("a", "b", "c");
$a = @arr;

print "$a \n";

结果为3,即元素的数量
我认为第二个是规范,但我不明白为什么它在第一个上返回“c”。

byqmnocz

byqmnocz1#

上下文影响运算符返回的内容。

    • 一月一日**

这是一个列表赋值运算符,因为=的左边"看起来是列表的"。列表赋值运算符在列表上下文中计算它的右边。
列表上下文中的逗号运算符计算列表上下文中的每个操作数,并产生由其操作数产生的所有标量。

    • 一米二米一x**

这是一个标量赋值运算符,因为= "的左边看起来不像列表"。标量赋值运算符在标量上下文中计算它的右边。
标量上下文中的数组生成数组中的元素数。

    • 一米四分一秒**

这是一个标量赋值运算符,因为= "的左侧看起来不像列表"。标量赋值运算符在标量上下文中计算其右侧。
标量上下文中的逗号运算符计算void上下文中除最后一个操作数之外的所有操作数,然后计算标量上下文中的最后一个操作数。它生成由该最后一个操作数生成的标量。
这意味着

EXPR, EXPR2, EXPR3           # In scalar context

类似于

do { EXPR; EXPR2; EXPR3 }    # In scalar context

(Just没有词法作用域。)
参考:

ajsxfq5m

ajsxfq5m2#

阵列使用情况摘要

use strict;
use warnings;
use feature 'say';

my @array     = ( 'a', 'b', 'c', 'd' );
my $aref      = [ 'a', 'b', 'c', 'd' ];
my $elem      = ( 'a', 'b', 'c', 'd' );
my $last      = @array[-1];
my @slice     = @array[0,2..3];
my $count     = scalar @array;
my $index_max = $#array;

say "
    \@array     = @array        array
    \$aref      = $aref         array reference (holds address of anonymous array)
    \$elem      = $elem         last element of array (useless void context warnings)
    \$last      = $last         last element of array
    \@slice     = @slice        array slice 
    \$count     = $count        count array elements
    \$index_max = $index_max    max array index
    
    Note: array index starts with 0
";

产出

Useless use of a constant ("a") in void context at C:\temp\work\perl\examples\array_demo.pl line 7.
Useless use of a constant ("b") in void context at C:\temp\work\perl\examples\array_demo.pl line 7.
Useless use of a constant ("c") in void context at C:\temp\work\perl\examples\array_demo.pl line 7.

        @array     = a b c d            array
        $aref      = ARRAY(0x107a790)   array reference (holds address of anonymous array)
        $elem      = d                  last element of array (useless void context warnings)
        $last      = d                  last element of array
        @slice     = a c d              array slice
        $count     = 4                  count array elements
        $index_max = 3                  max array index

        Note: array index starts with 0

一些阵列教程:

相关问题