Le code PERL suivant a une inefficacité évidente;
while (<>) { if ($ARGV =~ /\d+\.\d+\.\d+/) {next;} ... or do something useful }
3 Réponses :
grep argv d'abord.
@ARGV = grep { $_ !~ /\d+\.\d+\.\d+/ } @ARGV; while (<>) { # do something with the other files }
Si, vous venez de filtrer @Argv comme vous feriez une autre liste.
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 *|'
La solution de Paul Roub est la meilleure si vous pouvez filtrer Si vous devez sauter un fichier après avoir commencé l'itération, P> @argv code> avant de commencer à lire tous les fichiers.
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;}} ' code>