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

Qualcuno sa cosa farebbe esattamente? Stavamo solo avendo una discussione su di esso in quanto è il codice è di solito qualcosa come:while (<@array>) effetti per perl

while(<STDIN>) 
+0

Non si deve fare nulla, poiché '@ array' non è un nome di filehandle, è il nome di un array. – SexyBeast

risposta

6

<@thisArray> opere come glob(@thisArray). Quindi fornisce un elenco di tutti i file che corrispondono ai membri dell'array.

Se un elemento dell'array non corrisponde a un file, viene restituito l'elemento stesso.

10

Esso itererà attraverso i nomi dei file corrispondenti ai modelli in @thisArray.

Risultato di perl -MO=Deparse -e '1 while(<@thisArray>)' mostra che <> viene convertito in glob:

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

Da glob manuale:

In un contesto scalare, itera glob attraverso tali espansioni nomefile, restituendo undef quando la lista è esaurita .

valore predefinito per $" spazio, quindi più pattern da @thisArray ricomposte in un'unica stringa e poi spacco indietro di spazio all'interno glob:

noti che glob divide i suoi argomenti spazi e tratta ciascuno segmento come modello separato.

+0

Grazie mille. Lo stavo usando per un conteggio quindi il conteggio sarebbe stato lontano. – Psyllex

5

Vedi perlop:

Se ciò che è all'interno delle parentesi angolari è né un filehandle nè una semplice variabile scalare contenente un nome filehandle, typeglob, o riferimento typeglob, viene interpretato come un modello nome file per essere globbed

+1

+1 per collegamento perlop – DVK