Citando Perl::Critic::Policy::InputOutput::ProhibitExplicitStdin
¿Por qué debería usar <ARGV> o <> en lugar de <STDIN> en Perl?
Perl tiene un gestor de archivo magia útil llamada * ARGV que comprueba la línea de comandos y si hay argumentos, se abre y lee los archivos como. Si no hay argumentos, * ARGV se comporta como * STDIN en su lugar. Este comportamiento es casi siempre lo que desea si desea crear un programa que lea de STDIN. Esto a menudo se escribe en una de las dos formas equivalentes siguientes:
while (<ARGV>) { # ... do something with each input line ... } # or, equivalently: while (<>) { # ... do something with each input line ... }
- ¿Es "sólo una convención" o hay algunas razones de peso para no usar
<STDIN>
?
me siento <STDIN>
hace que las intenciones de mi código más claro que el uso de <>
o <ARGV>
.
El flujo de mi código es como esto
my @inp = <STDIN>;
my $len = $inp[0];
...
for(my $i = 0; $i < ($len + 0); $i++) {
my @temp = split (' ', $inp[$i]);
...
}
Gracias. Si esta es la única razón, entonces siento que '' es mejor. –
Lazer
@Lazer: no es "mejor", impone restricciones sobre las formas en que puede usar el programa. ¿Por qué hacer eso innecesariamente? – Ether
Perl :: Critic se basa en el libro "Mejores prácticas de Perl", que simplemente dice: "Evita usar * STDIN, a menos que realmente lo digas". La justificación dada es una versión más larga de la respuesta anterior. Si realmente quiere decir que solo STDIN lo hará, no se aceptan argumentos de línea de comando, entonces use STDIN explícito. – jmanning2k