我正在学习 Perl。我已经能够grep
在数组上使用并且语法非常简单,比如这个例子:
use strict; use warnings;
my @names = qw(Foo Bar Baz);
my $visitor = <STDIN>;
chomp $visitor;
if (grep { $visitor eq $_ } @names) {
print "Visitor $visitor is in the guest list\n";
} else {
print "Visitor $visitor is NOT in the guest list\n";
}
但是,我想知道是否有一种同样简单的方法可以grep
在 hash 上使用而无需编写循环来遍历 hash 中的每个项目。
这是我正在使用的结构的一些示例数据。在分配 URI 之前,我想检查是否有任何项目已经具有该 uri 值。例如,我想分配ww1.example.com
给 item v2rbz1568
,但前提是没有其他项目的 uri 值为ww1.example.com
。我怎样才能在 Perl 中有效地做到这一点?
{
"0y7vfr1234": {
"username": "[email protected]",
"password": "some-random-password123",
"uri": "ww1.example.com",
"index": 14
},
"v2rbz1568": {
"username": "[email protected]",
"password": "some-random-password125",
"uri": "ww3.example.com",
"index": 29
},
"0zjk1156": {
"username": "[email protected]",
"password": "some-random-password124",
"uri": "ww2.example.com",
"index": 38
}
}
我在 Linux 上使用 perl 5,版本 30。
至少有两种选择:
map
函数:这也很方便,因为您可以
$item
直接作为查找的结果获得print "Index: ",$entries{$item}->{'index'},"\n";
在第二种情况下,每次在“列表”中添加/更新/删除 URI 时,您都必须手动更新索引: