my $mind = ( 'a','little','confused' );
这是因为perldoc perlfaq4
解释了上面的行如下(重点补充):
Since you’re assigning to a scalar,the righthand side is in scalar
context. The comma operator (yes,it’s an operator!) in scalar context
evaluates its lefthand side,throws away the result,and evaluates
it’s righthand side and returns the result. In effect,that
list-lookalike assigns to$scalar
it’s rightmost value. Many people
mess this up because they choose a list-lookalike whose last element
is also the count they expect:06001
我理解这意味着在标量上下文中没有列表这样的东西.
但是,ikegami认为它是“result[s] in a list operator,so it is a list literal.”
那么,它是否是一个列表?
解决方法
在一行中:
my $x = ...;
…看到标量上下文,所以如果…是一个列表文字,那么你将在标量上下文中有一个列表文字:
my $x = (1,3);
但是列表文字不会产生列表,因为它包含的逗号运算符会看到标量上下文,然后导致它返回列表文字的最后一项,并在评估它们之后抛弃剩余的值.
就函数而言,函数本身可以看到它被调用的任何上下文,然后它被传播到返回的函数中的任何行.因此,您可以在标量,列表或无效上下文中使用函数,如果该子集的最后一行恰好是列表文字,则该列表文字将看到任何这些上下文并且将表现得恰当.
所以基本上这是术语的区别,列表文字引用实际源代码*中逗号分隔的值列表,列表引用放在perl堆栈上的值序列.
您可以编写具有返回值的子例程,这些返回值的行为类似于数组或类似于上下文的列表文字.
sub returns_like_array {my @x = 1..5; return @x} sub returns_like_list {my @x = 1..5; return @x[0 .. $#x]}
*或导致逗号分隔值列表的内容,如qw()或fat逗号=>或散列或数组切片.
您也可以在这里查看我的答案:How do I get the first item from a function that returns an array in Perl?,它详细介绍了列表.