Perl-как найти ключ хэша, если вы знаете значение?
то, что я пытаюсь сделать, это получить ключ пары значений ключа в хэше, потому что все, что у меня есть из файла, в котором я читаю, это значение.
код выдает что-то вроде этого:
12345
welcome.html
код для этой части:
my %bugs;
my $bug;
open(FH, '-|', "lynx -dump '$queryurl'") or die "Could not lynx $queryurl: $!";
while (<FH>)
{
if (/<bz:id[^>]*>([^<]*)</)
{
$bug = ;
}
if (/<bz:url[^>]*>([^<]*)</)
{
my $url = ;
$bugs{$url} = $bug;
$bug = undef;
}
}
close(FH);
# for debugging purposes
foreach my $bug (keys %bugs)
{
print "$bugs{$bug} $bugn";
}
exit;
затем, где-то еще в файле под названием bad.txt
Я получаю выход, как:
Documents that failed:
daerror 6 0 6 welcome.html
код для чтения этого файла:
my $badfile = "$dir/bad.txt";
open(FH, "<$badfile") || die "Can not open $badfile: $!";
# ignore first line
<FH>;
while (<FH>)
{
chomp;
if (!/^([^ ]+) [^ ]+ [^ ]+ [^ ]+ ([^ ]+) [^ ]+$/)
{
die "Invalid line $_ in $badfilen";
}
my $type = ;
my $testdoc = ;
}
но у меня уже есть имя файла, извлеченное из этого с помощью регулярного выражения.
3 ответов
Если вы не используете %bugs
хэш для чего-либо еще, просто измените:
$bugs{$url} = $bug;
в:
$bugs{$bug} = $url;
тогда у вас будет хэш с правильными ключами для ваших запросов.
вы можете сделать перевернутую копию исходного хэша с помощью reverse
оператор, а затем сделайте" нормальный " поиск (будет работать правильно, только если значения в исходном хэше уникальны).
подробнее по этой теме, включая обработку повторяющихся значений в perlfaq4:как найти элемент хэша по значению