perl中$ name和($ name)变量之间的区别

ama*_*man 3 perl

我想知道是否有人可以解释之间的差异$name($name).

例如:

my @objects = ('specs','books','apple');
my ($fruit) = grep { $_ eq 'apple'} @objects;
Run Code Online (Sandbox Code Playgroud)

这给出了结果$fruit = 'apple'.但是,如果将第二个语句修改为:

$fruit = grep { $_ eq 'apple'} @objects;
Run Code Online (Sandbox Code Playgroud)

水果的价值评估为1.这是相关/具体的grep吗?

Que*_*tin 9

my $fruit = 分配标量上下文.

my ($fruit) =分配到列表上下文中(如果my @fruit =).

grep的文件说:

返回由表达式求值为true的元素组成的列表值.在标量上下文中,返回表达式为true的次数.

它在内部有效地使用wantarray来确定它应该给出什么类型的返回值.您可以在自己的子例程中使用它来获得类似的效果,但您可能不想这样做.