У меня возникла небольшая проблема с выяснением того, как правильно синтаксис подпрограммы, которая возвращает несколько значений. Скажем, у нас есть файл в следующем формате, из которого я хочу проанализировать значения:
Id: Animal1
Loc: Area1
Similarity: 15/20
Id: Animal2
Loc: Area2
Similarity: 19/20
Id: Animal3
Loc: Area3
Similarity: 13/20
Поскольку у меня есть несколько файлов, которые я хочу запустить в одном скрипте, я хотел прочитать их в виде подпрограммы. Однако моя команда полностью портит порядок вывода. Любые идеи о том, какая ошибка в моем коде может быть причиной этого?
Вот код, который работает, когда он не в формате подпрограммы, начиная после того, как я открываю файл:
open($fh, "<", $animal1) || die "Could not open file $animal1/n $!";
while (<$fh>) {
chomp;
if($_ =~ /Id:\s+(\S+)/){
$id= $1;
}
if($_ =~ /Loc:\s+(\S+)/){
$loc{$id}= $1;
}
if($_ =~ /Similarity:\s+(\S+)/){
$simil{$id}= $1;
}
}
foreach $id(keys %loc){
print "The $animal is found in $loc{$animal} and is $simil{$animal} similar\n";
}
close $fh;
Рассматриваемый код:
open($fh, "<", $animal1) || die "Could not open file $animal1/n $!\n";
while (<$fh>) {
chomp;
($animal, $loc{$animal}, $simil{$animal})= parse_key_file($_);
}
foreach $animal(keys %loc){
print "The $animal is found in $loc{$animal} and is $simil{$animal} similar\n";
}
sub parse_key_file {
if($_ =~ /Id:\s+(\S+)/){
$id= $1;
next;
}
if($_ =~ /Loc:\s+(\S+)/){
$loc{$id}= $1;
next;
}
if($_ =~ /Similarity:\s+(\S+)/){
$simil{$id}= $1;
next;
}
return ($id, $loc{$id}, $simil{$id});
}
Благодарю вас ! А.