10
votes

Puis-je sauter un fichier entier avec l'opérateur <>?

Le code PERL suivant a une inefficacité évidente;

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


0 commentaires

3 Réponses :


15
votes

grep argv d'abord.

@ARGV = grep { $_ !~ /\d+\.\d+\.\d+/ } @ARGV;

while (<>)
{
  # do something with the other files
}


1 commentaires

Si, vous venez de filtrer @Argv comme vous feriez une autre liste.



9
votes

Réponse Fonctionne Pour plus d'informations, voir Section des opérateurs IO de la page Perlop Man . Le modèle d'utilisation de Grep est mentionné ainsi que quelques autres choses liées à .

Prenez note de la mention de argv :: Readonly concernant des choses comme: p>

perl dangerous.pl 'rm -rfv *|'


0 commentaires

20
votes

La solution de Paul Roub est la meilleure si vous pouvez filtrer @argv avant de commencer à lire tous les fichiers.

Si vous devez sauter un fichier après avoir commencé l'itération, xxx


1 commentaires

J'aime ça. De cette façon, vous pouvez facilement rechercher des fichiers dans un répertoire par mot-clé: perl -e '@ argv = <"*">; tandis que (<>) {if (/ recherchéword /) {dites $ argv; fermer argv;}} '