Используют ли файловые тесты `$ _` или` _` в заданном… при переключении? - PullRequest
3 голосов
/ 31 марта 2011

При использовании операторов проверки файлов результаты stat() кэшируются в _, поэтому, если вы хотите выполнить несколько тестов, вам не нужно делать больше системных вызовов.

if (-f $file_) {
  say 'readable' if -r _;
  say 'writable' if -w _;
}

Если я использую их в given…when, они используют _ или $_?

given ($file) {
  when (! -f) {}
  when (-r) {say 'readable';continue}
  when (-w) {say 'writable';continue}
  ....
}

У меня сложилось впечатление, что это будет использовать $_. Это правда? Кроме того, поскольку given…when не имеет провала по умолчанию, необходимо использовать continue для просмотра других совпадений.

Вероятно, этот случай лучше разрешается с помощью if с и использует меньше печатания, чем с given…when. Но слишком заманчиво посмотреть, сможете ли вы соответствовать given…when при рефакторинге вашего программного обеспечения. ; -)

Ответы [ 2 ]

5 голосов
/ 31 марта 2011

Это то, во что он отступил:

sub {
    use warnings;
    use strict 'refs';
    BEGIN {
        $^H{'feature_unicode'} = q(1);
        $^H{'feature_say'} = q(1);
        $^H{'feature_state'} = q(1);
        $^H{'feature_switch'} = q(1);
    }
    my $file = shift @_;
    given ($file) {
        when (not -f $_) {
            ();
        }
        when (-r $_) {
            say 'readable';
            continue;
        }
        when (-w $_) {
            say 'writable';
            continue;
        }
    }
}

Так что он не показывает умного соответствия в кодах операций.

0 голосов
/ 31 марта 2011

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

$_ является значением по умолчанию для большинства других операторов проверки файлов, но не для всех.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...