标量与列表赋值运算符
Scalar vs List Assignment Operator
请帮助我理解以下片段:
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);
符号=
被编译为两个赋值运算符之一:
- 如果
=
的左侧 (LHS) 是某种聚合,则使用 列表赋值运算符 (aassign
)。
- A 标量赋值运算符 (
sassign
) 否则使用。
以下被认为是聚合:
- 括号中的任何表达式(例如
(...)
)
- 数组(例如
@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;
返回值
这两个运算符的不同之处在于 return。
标量赋值...
... 在标量上下文中将其 LHS 计算为左值。
# The s/// operates on $copy.
(my $copy = $str) =~ s/\/\\/g;
...在列表上下文中将其 LHS 计算为左值。
# Prints $x.
print($x = $y);
列表赋值...
... 在标量上下文中计算由其 RHS 编辑的标量数 return。
# 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();
... 在列表上下文中计算标量 return 由其 LHS 作为左值。
# Prints @x.
print(@x = @y);
请帮助我理解以下片段:
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);
符号=
被编译为两个赋值运算符之一:
- 如果
=
的左侧 (LHS) 是某种聚合,则使用 列表赋值运算符 (aassign
)。 - A 标量赋值运算符 (
sassign
) 否则使用。
以下被认为是聚合:
- 括号中的任何表达式(例如
(...)
) - 数组(例如
@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;
返回值
这两个运算符的不同之处在于 return。
标量赋值...
... 在标量上下文中将其 LHS 计算为左值。
# The s/// operates on $copy. (my $copy = $str) =~ s/\/\\/g;
...在列表上下文中将其 LHS 计算为左值。
# Prints $x. print($x = $y);
列表赋值...
... 在标量上下文中计算由其 RHS 编辑的标量数 return。
# 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();
... 在列表上下文中计算标量 return 由其 LHS 作为左值。
# Prints @x. print(@x = @y);