Можно ли пропустить целый файл с помощью < > оператор?
-
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 *|'