2012-08-06 26 views
8
while(<@thisArray>) 

¿Alguien sabe lo que haría exactamente? Estábamos teniendo una discusión sobre el mismo, ya que es el código suele ser algo como:while (<@array>) efectos para perl

while(<STDIN>) 
+0

Se supone que no debe hacer nada, ya que '@ array' no es un nombre de identificador de archivo, es el nombre de una matriz. – SexyBeast

Respuesta

6

<@thisArray> obras como glob(@thisArray). Por lo tanto, proporciona una lista de todos los archivos que coinciden con los miembros de la matriz.

Si un elemento de la matriz no coincide con un archivo, se devuelve el elemento en sí.

10

Se iterará a través de nombres de archivos que coincidan con los patrones en @thisArray.

Resultado de perl -MO=Deparse -e '1 while(<@thisArray>)' muestra que <> se convierte en glob:

use File::Glob(); 
'???' while defined($_ = glob(join($", @thisArray))); 

De glob Manual:

En contexto escalar, itera glob a través de tales expansiones nombre de archivo, volviendo undef cuando la lista se agota .

valor predeterminado para $" es el espacio, por lo tanto, múltiples patrones de @thisArray se unirán en una sola cadena y luego estar de todas formas vuelta por el espacio interior glob:

Tenga en cuenta que pegote divide sus argumentos en los espacios en blanco y trata a cada uno segmento como patrón separado.

+0

Muchas gracias. Lo estaba usando para contar, así que el recuento habría estado muy lejos. – Psyllex

5

Ver perlop:

Si lo que hay dentro de los paréntesis angulares es ni un gestor de archivo ni una variable escalar sencilla que contiene un nombre de gestor de archivo, typeglob o referencia typeglob, se interpreta como un patrón de nombres ser globbed

+1

+1 para enlace perlop – DVK