[英]Perl grep always returns number of matches even in list context
我有一个列表的脚本
@names = ();
@x = ();
两个列表都与数据并行填充,因此,最后我有两个列表,其中包含同一索引中每个元素的名称和x值。 注意,有多个元素具有相同的x值。
我希望所有元素都具有特定的x值和代码
foreach my $x (0..4) {
my @ind = grep { $x[$_] == $x } 0..$#names;
print @ind . "\n";
}
但是,输出是
17
17
8
4
这正是x = 0,x = 1,......的元素数量
我想知道因为列表上下文中的grep应该返回一个匹配列表(这里是匹配元素的indizes)。
我在这做错了什么?
最好的祝福。
你的问题是这一行:
print @ind . "\n";
使用连接运算符时.
将两个参数放入标量上下文中,在标量上下文中,数组返回其大小,而不是其内容。
你想要的是使用逗号运算符:
print @ind , "\n";
或者更好的是,使用该功能say
:
say @ind;
如果你真正想要的是在一行中打印数字,用空格分隔:
say "@ind";
或者如果您想要以换行符分隔打印它们:
say for @ind;
在上述所有的, say
当然可以通过更换print
,并在最后一个新行。
您应该使用哈希数组将数据存储为一个单元。 在那里你填充做到这一点@x
和@names
。 (假设x值在$x
,名称在$name
。)
push @data, {
name => $name,
x => $x,
};
要在索引$i
处检索名称: $data[$i]{name}
要在索引$i
处检索x值: $data[$i]{x}
迭代数组:
for my $item_ref ( @data ){
my $name = $item_ref->{name};
my $x = $item_ref->{x};
# do something
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.