Я использую вызов sub в качестве аргумента другому Примеру кода замены:
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));
}
В примере выше, я ожидал бы, что оператор возврата в "isInString" оценит ко лжи ('' или undef или независимо от того, что это может быть в жемчуге), и это было бы передано в "Тест" как параметр № 1, су, которое Вы будете по существу иметь
Test(undef, 'second parameter', 'third parameter');
Это не то, что происходит все же. isInString возвращает пустой массив, и по существу что Вы получаете,
Test('second parameter', 'third parameter');
возврат из isInString в отладчике жемчуга дает:
контекст списка возвращается из основного:: isInString: пустой массив
Я предполагаю, что это - вещь контекста жемчуга, я могу присвоить скалярной переменной сначала, и она хорошо работает:
my $bool = isInString();
Test($bool, 'second parameter', 'third parameter');
отладчик дает - скалярный возврат контекста из основного:: isInString: ''
ОТРЕДАКТИРУЙТЕ я удалил весь parens с тем же результатом:
sub isInString {
my $searchFor = 'a';
my $searchIn = 'bcd';
return $searchFor && $searchIn && $searchIn =~ $searchFor;
}
Отладчик все еще дает:
контекст списка возвращается из основного:: isInString: пустой массив
Кто-то может объяснить, почему это возвращает контекст/пустой массив списка в этом сценарии?