【发布时间】:2020-01-26 17:40:40
【问题描述】:
我在弄清楚如何正确编写返回多个值的子例程时遇到了一些问题。假设我们有一个具有以下格式的文件,我想从中解析值:
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});
}
谢谢! A.
【问题讨论】:
标签: perl parsing hash subroutine