Я использую дополнительный вызов в качестве аргумента для другого дополнительного. Пример кода:
test(isInString(), 'second parameter', 'third parameter');
sub test {
my ($boolean, $second, $third) = @_;
print "boolean: $boolean\n second: $second\n third: $third\n";
}
sub isInString {
my $searchFor = 'a';
my $searchIn = 'bcd';
return ($searchFor && $searchIn && ($searchIn =~ $searchFor));
}
В приведенном выше примере я ожидал бы, что оператор return в "isInString" будет иметь значение false ('' или undef или что-то еще, что может быть в perl), и это будет передано в "Test" как параметр # 1 итак, у тебя по существу будет
Test(undef, 'second parameter', 'third parameter');
Это не то, что происходит, хотя. isInString возвращает пустой массив, и, по сути, вы получаете
Test('second parameter', 'third parameter');
возвращение из isInString в отладчике perl дает:
возвращение контекста списка из main :: isInString:
пустой массив
Я предполагаю, что это контекст Perl, я могу сначала назначить скалярную переменную, и она отлично работает:
my $bool = isInString();
Test($bool, 'second parameter', 'third parameter');
отладчик дает -
возвращение скалярного контекста из main :: isInString: ''
РЕДАКТИРОВАТЬ Я удалил все парены с одинаковым результатом:
sub isInString {
my $searchFor = 'a';
my $searchIn = 'bcd';
return $searchFor && $searchIn && $searchIn =~ $searchFor;
}
Отладчик по-прежнему выдает:
возвращение контекста списка из main :: isInString:
пустой массив
Может кто-нибудь объяснить, почему он возвращает контекст списка / пустой массив в этом сценарии?