Perl grep总是返回列表上下文中的匹配数

Nem*_*sis 3 perl grep list

我有一个列表的脚本

@names = ();
@x = ();
Run Code Online (Sandbox Code Playgroud)

两个列表都与数据并行填充,因此,最后我有两个列表,其中包含同一索引中每个元素的名称和x值.注意,有多个元素具有相同的x值.

我希望所有元素都具有特定的x值和代码

foreach my $x (0..4) {      
    my @ind = grep { $x[$_] == $x } 0..$#names;
    print @ind . "\n";
}
Run Code Online (Sandbox Code Playgroud)

但是,输出是

17
17
8
4
Run Code Online (Sandbox Code Playgroud)

这正是x = 0,x = 1,......的元素数量

我想知道因为列表上下文中的grep应该返回一个匹配列表(这里是匹配元素的indizes).

我在这做错了什么?

最好的祝福.

TLP*_*TLP 10

你的问题是这一行:

print @ind . "\n";
Run Code Online (Sandbox Code Playgroud)

使用连接运算符时.,将两个参数都放入标量上下文中,并在标量上下文中,数组返回其大小,而不是其内容.

你想要的是使用逗号运算符:

print @ind , "\n";
Run Code Online (Sandbox Code Playgroud)

或者更好的是,使用该功能say:

say @ind;
Run Code Online (Sandbox Code Playgroud)

如果你真正想要的是在一行中打印数字,用空格分隔:

say "@ind";
Run Code Online (Sandbox Code Playgroud)

或者如果您想要以换行符分隔打印它们:

say for @ind;
Run Code Online (Sandbox Code Playgroud)

在上述所有内容中,say当然可以print在最后用换行符替换.