Perl с помощью sub звонит как аргумент другому sub - неожиданный контекст

Я использую вызов 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: пустой массив

Кто-то может объяснить, почему это возвращает контекст/пустой массив списка в этом сценарии?

5
задан Brian Tompsett - 汤莱恩 7 June 2015 в 11:01
поделиться