Estou aprendendo Perl. Eu consegui usar grep
em um array e a sintaxe é muito simples, como este exemplo :
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";
}
No entanto, gostaria de saber se existe uma maneira igualmente simples de usar grep
em um hash sem codificar um loop para percorrer cada item no hash .
Aqui estão alguns dados de exemplo com a estrutura com a qual estou trabalhando. Antes de atribuir um URI, quero verificar se algum item já possui esse valor de uri. Por exemplo, quero atribuir ww1.example.com
a item v2rbz1568
, mas somente se nenhum outro item tiver um valor uri de ww1.example.com
. Como posso fazer isso com eficiência em 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
}
}
Estou usando perl 5, versão 30 no Linux.
Pelo menos duas opções:
map
função:Isso também é conveniente, pois você obtém
$item
diretamente como resultado da pesquisa, se deseja acessar a entrada já existente no hash além de apenas verificar se ela existe, por exemploprint "Index: ",$entries{$item}->{'index'},"\n";
Neste segundo caso, você terá que atualizar o índice manualmente toda vez que adicionar/atualizar/excluir URIs na "lista":