Je cite Perl::Critic::Policy::InputOutput::ProhibitExplicitStdin
Pourquoi devrais-je utiliser <ARGV> ou <> au lieu de <STDIN> dans Perl?
Perl a un descripteur de fichier magique utile appelé * ARGV qui vérifie la ligne de commande et s'il y a des arguments, ouvre et lit les fichiers comme. S'il n'y a pas d'arguments, * ARGV se comporte comme * STDIN à la place. Ce comportement est presque toujours ce que vous voulez si vous voulez créer un programme qui lit à partir de STDIN. Ceci est souvent écrit dans l'une des deux formes équivalentes suivantes:
while (<ARGV>) { # ... do something with each input line ... } # or, equivalently: while (<>) { # ... do something with each input line ... }
- Est-il « juste une convention » ou sont-il des raisons solides de ne pas utiliser
<STDIN>
?
Je me sens <STDIN>
fait plus clair de mon code intentions que d'utiliser <>
ou <ARGV>
.
Le flux de mon code est comme celui-ci
my @inp = <STDIN>;
my $len = $inp[0];
...
for(my $i = 0; $i < ($len + 0); $i++) {
my @temp = split (' ', $inp[$i]);
...
}
Merci. Si c'est la seule raison, alors je pense que "" est meilleur. –
Lazer
@Lazer: ce n'est pas "mieux", c'est imposant des restrictions sur la façon dont vous pouvez utiliser le programme. Pourquoi le faire inutilement? – Ether
Perl :: Critic est basé sur le livre "Perl Best Practices", qui stipule simplement: "Évitez d'utiliser * STDIN, à moins que vous ne le pensiez vraiment." La justification donnée est une version plus longue de la réponse ci-dessus. Si vous voulez vraiment dire que seul STDIN le fera, aucun argument de ligne de commande accepté - alors utilisez explicitement STDIN. – jmanning2k