我有一个子程序,当一切顺利时会返回两个哈希值。但命令的子检出输出如果匹配某个模式,则返回“-1”。无论如何要检查从我调用它的子程序的返回?
有点像:
if (RETURN_VALUE == -1){
do something}
else
go as normal with the hashes
答案 0 :(得分:3)
一个函数如何返回两个哈希?
如果您的意思是hashrefs
,检查会非常简单:
my ($h1,$h2) = myFunction();
if ( !ref($h1) || (ref($h1) ne "HASH"))
{
die 'error';
}
答案 1 :(得分:2)
您的函数应该在成功时返回对两个哈希的引用,并且在失败时返回任何内容。然后你可以检查函数调用的真值。
sub myfunc {
my %hash1;
my %hash2;
return (\%hash1, \%hash2);
}
my $ref1;
my $ref2;
unless (($ref1, $ref2) = myfunc()) {
print "Something went wrong\n";
} else {
print "OK\n";
}
答案 2 :(得分:0)
如果从子例程返回两个(或任何数字)哈希值,则结果将是单个哈希值。您将无法以正常方式将原始哈希与结果分开。返回哈希引用不会出现此问题。
假设foo()
在模式匹配时返回两个哈希引用,并在不匹配时返回-1。
my ( $value_1, $value_2 ) = foo;
if ( $value_1 == -1 ) {
# pattern did not match
}
else { # for strict checks: elsif ( ref $value_1 eq 'HASH' && ref $value_2 eq 'HASH' ) {
# pattern matched
}