2009-09-22 8 views
9

Esiste la garanzia che l'array di nomi di file restituiti da un glob (ad esempio <*>) verrà ordinato?È garantito che i risultati del globbing verranno ordinati in Perl?

Non riesco a trovare che l'ordinamento sia menzionato in un modo o nell'altro in the documentation, ma sembra che sia il caso in ogni directory in cui l'ho provato.

sto parlando con la seguente sintassi:

@files = <*>; 

Se ho bisogno i file da ordinare, sarebbe il seguito ridondante?

@files = sort(<*>); 
+0

's/$ file/@ file /'? Gli elenchi di restituzione dell'operatore glob e della funzione di ordinamento. – mob

+1

@mobrule grazie, risolto. faccio la maggior parte del mio lavoro in PHP, dove $ è usato su tutti i tipi di variabile. : - [ – Kip

risposta

22

In Perl 5.6.0 e successivi, i nomi dei file sono ordinati:

A partire dalla v5.6.0, questo operatore è implementato utilizzando lo standard File :: Glob estensione.

- perldoc for glob

Per impostazione predefinita, i percorsi sono ordinati in ordine crescente ASCII.

- perldoc for File::Glob

C'è un problema:

Per impostazione predefinita, i nomi dei file si presume essere case sensitive

- perldoc for File::Glob

Avere detto tutto questo, puoi cambiarlo b ehavior per ordinare caso insensibile con

use File::Glob qw(:globally :nocase); 

Nota che: a livello globale è ridondante poiché 5.6.0, ma questo funzionerà su versioni precedenti pure.

In alternativa, se si desidera solo per fare un singolo glob con il caso-insensibilità:

use File::Glob ':glob'; 

@files = bsd_glob('*', GLOB_NOCASE); 
+2

grazie, credo di non aver notato il bit su File :: Glob utilizzato internamente ora – Kip

Problemi correlati