Perl: Как проверить, что возвращается из подпрограммы - PullRequest
0 голосов
/ 01 июля 2011

У меня есть подпрограмма, которая вернет два хэша, когда все пойдет хорошо.Но вывод команды sub checkouts и, если он соответствует определенному шаблону, он возвращает с «-1».Есть ли способ проверить возврат подпрограммы из того места, где я ее назвал?

Вроде как:

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

Ответы [ 3 ]

3 голосов
/ 01 июля 2011

Как одна функция может вернуть два хеша ?

Если вы имеете в виду hashrefs, проверка будет довольно простой:

my ($h1,$h2) = myFunction();
if ( !ref($h1) || (ref($h1) ne "HASH"))
{
   die 'error';
}
2 голосов
/ 01 июля 2011

Ваша функция должна возвращать ссылки на два хэша при успехе и ничего при ошибке. Тогда вы можете просто проверить истинность значения вызова функции.

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";
}
0 голосов
/ 01 июля 2011

Если вы вернете два (или любое число в этом отношении) хэша из подпрограммы, результатом будет один хеш.Вы не сможете отделить исходные хэши от результата обычным способом.Возврат хеш-ссылок не вызовет этой проблемы.

Предположим, 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
}
...