请帮助我理解以下代码段:
my $count = @array;
my @copy = @array;
my ($first) = @array;
(my $copy = $str) =~ s/\\/\\\\/g;
my ($x) = f() or die;
my $count = () = f();
print($x = $y);
print(@x = @y);
答案 0 :(得分:2)
符号=
被编译为两个赋值运算符之一:
=
的左侧(LHS)是某种聚合,则使用列表赋值运算符。以下内容被视为汇总:
(...)
)@array
)@array[...]
)%hash
)@hash{...}
)my
,our
或local
运算符之间有两个区别。
这两个运算符的运算环境不同。
标量赋值在标量上下文中评估其两个操作数。
# @array evaluated in scalar context.
my $count = @array;
列表分配在列表上下文中评估其两个操作数。
# @array evaluated in list context.
my @copy = @array;
# @array evaluated in list context.
my ($first) = @array;
两个运算符的返回值不同。
标量分配...
...将其LHS评估为左值。
# The s/// operates on $copy.
(my $copy = $str) =~ s/\\/\\\\/g;
...以左值评估其LHS。
# Prints $x.
print($x = $y);
列表分配...
...会计算为其RHS返回的标量数量。
# Only dies if f() returns an empty list.
# This does not die if f() returns a
# false scalar like zero or undef.
my ($x) = f() or die;
# $counts gets the number of scalars returns by f().
my $count = () = f();
...将其LHS返回的标量评估为左值。
# Prints @x.
print(@x = @y);