Pregunta

El siguiente código Perl tiene una ineficiencia obvia;

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

El código pasará por cada línea del archivo que no queremos.

En el tamaño de los archivos en los que se ejecuta este script en particular, es poco probable que esto haga una diferencia notable, pero por el bien del aprendizaje; ¿Cómo puedo desechar todo el archivo < > está funcionando y pasar al siguiente?

El propósito de esto es porque el servidor en el que se ejecuta este script almacena versiones antiguas de aplicaciones con el número de versión en el nombre del archivo, solo me interesa la versión actual.

¿Fue útil?

Solución

grep ARGV primero.

@ARGV = grep { 

grep ARGV primero.

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

Otros consejos

La solución de

Paul Roub es mejor si puede filtrar @ARGV antes de comenzar a leer cualquier archivo.

Si tiene que omitir un archivo después de haber comenzado a iterarlo,

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

Paul Roub es mejor si puede filtrar @ARGV antes de comenzar a leer cualquier archivo.

Si tiene que omitir un archivo después de haber comenzado a iterarlo,

<*>"; }

La respuesta de Paul Roub funciona para obtener más información, consulte La sección de operadores IO de la página de manual de perlop . Se menciona el patrón de uso de grep, así como algunas otras cosas relacionadas con < > ;.

Tome nota de la mención de ARGV: : solo lectura con respecto a cosas como:

perl dangerous.pl 'rm -rfv *|'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top