0

我有一个子程序,当一切顺利时会返回两个哈希值。但是命令的子结帐输出,如果它与某个模式匹配,则返回“-1”。无论如何要检查我调用它的子程序的返回吗?

有点像:

if (RETURN_VALUE == -1){
   do something}
   else
   go as normal with the hashes
4

3 回答 3

3

一个函数怎么会返回两个哈希值

如果您的意思是hashrefs,检查将非常简单:

my ($h1,$h2) = myFunction();
if ( !ref($h1) || (ref($h1) ne "HASH"))
{
   die 'error';
}
于 2011-07-01T12:37:37.333 回答
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";
}
于 2011-07-01T12:58:13.963 回答
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
}
于 2011-07-01T12:36:17.233 回答