Можно ли пропустить целый файл с помощью < > оператор?

StackOverflow https://stackoverflow.com/questions/1422127

  •  07-07-2019
  •  | 
  •  

Вопрос

Следующий код Perl имеет очевидную неэффективность;

while (<>)
{
if ($ARGV =~ /\d+\.\d+\.\d+/) {next;}
... or do something useful
}

Код будет проходить через каждую строку файла, который нам не нужен.

По размеру файлов, на которых выполняется этот конкретный скрипт, вряд ли это будет заметно, но ради обучения; Как мне удалить весь файл < > работает и перейти к следующему?

Цель этого заключается в том, что, поскольку сервер запускает этот скрипт, хранит старые версии приложений с номером версии в имени файла, меня интересует только текущая версия.

Это было полезно?

Решение

grep ARGV первым.

@ARGV = grep { 

grep ARGV первым.

<*> !~ /\d+\.\d+\.\d+/ } @ARGV; while (<>) { # do something with the other files }

Другие советы

Решение Пола Руба лучше всего, если вы можете отфильтровать @ARGV до того, как начнете читать какие-либо файлы.

Если вам нужно пропустить файл после начала его итерации,

while (<>) {
    if (/# Skip the rest of this file/) {
        close ARGV;
        next;
    }
    print "$ARGV: 

Решение Пола Руба лучше всего, если вы можете отфильтровать @ARGV до того, как начнете читать какие-либо файлы.

Если вам нужно пропустить файл после начала его итерации,

<*>"; }

Ответ Пола Руба работает для получения дополнительной информации, см. раздел «Операторы ввода-вывода» на man-странице perlop , Упоминается схема использования grep, а также несколько других вещей, связанных с < >.

Обратите внимание на упоминание ARGV: : readonly о таких вещах, как:

perl dangerous.pl 'rm -rfv *|'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top