Co próbuję zrobić, to pobrać klucz pary klucz-wartość w haszyszu, ponieważ wszystko, co mam z pliku, w którym czytam, jest wartością.Perl - Jak znaleźć klucz hasha, jeśli znasz wartość?
Kod produkuje coś takiego:
12345
welcome.html
Kod dla tej części brzmi:
my %bugs;
my $bug;
open(FH, '-|', "lynx -dump '$queryurl'") or die "Could not lynx $queryurl: $!";
while (<FH>)
{
if (/<bz:id[^>]*>([^<]*)</)
{
$bug = $1;
}
if (/<bz:url[^>]*>([^<]*)</)
{
my $url = $1;
$bugs{$url} = $bug;
$bug = undef;
}
}
close(FH);
# for debugging purposes
foreach my $bug (keys %bugs)
{
print "$bugs{$bug} $bug\n";
}
exit;
Następnie gdzieś w pliku o nazwie bad.txt
mam wyjścia jak:
Documents that failed: daerror 6 0 6 welcome.html
Kod do czytania tego pliku jest:
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 $badfile\n";
}
my $type = $1;
my $testdoc = $2;
}
Ale mam już nazwę pliku wyodrębnione z tego za pomocą wyrażenia regularnego.
[^] + można również zapisać jako \ S + Można również użyć 'm' i ustawić $ typ i $ testdoc wszystko w jednym wierszu. 'my ($ type, $ testdoc) = $ _ = ~ m/^ (\ S +) \ S + \ S + \ S + (\ S +) \ S + $ /; die "Nieprawidłowa linia $ _ w $ badfiles \ n", chyba że zdefiniowano $ type && defined $ testdoc; '. – mrk