2009-09-22 15 views
9

¿Hay alguna garantía de que la matriz de nombres de archivo devueltos desde un glob (por ejemplo, <*>) se ordenarán?¿Hay alguna garantía de que los resultados de globbing se clasifiquen en Perl?

No puedo encontrar que la ordenación se mencione de una forma u otra in the documentation, pero parece ser el caso en todos los directorios en los que lo he probado.

que estoy hablando con esta sintaxis:

@files = <*>; 

Si necesito los archivos que realizar la clasificación, sería el siguiente ser redundante?

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

's/$ archivos/@ archivos /'? El operador glob y las listas de retorno de la función de clasificación. – mob

+1

@mobrule gracias, arreglado. hago la mayor parte de mi trabajo en PHP, donde $ se usa en todos los tipos de variables. : - [ – Kip

Respuesta

22

En Perl 5.6.0 y posteriores, los nombres de archivo se ordenan:

A partir de v5.6.0, este operador se implementa utilizando el estándar Archivo :: extensión Glob.

- perldoc for glob

Por defecto, los nombres de las rutas se clasifican en orden ascendente ASCII.

- perldoc for File::Glob

Hay una captura:

Por defecto, los nombres de archivo se supone que mayúsculas y minúsculas

- perldoc for File::Glob

Tener dicho todo eso, puedes cambiar esto b ehavior para ordenar mayúsculas y minúsculas con

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

Tenga en cuenta que: a nivel mundial es redundante ya 5.6.0, pero esto va a funcionar en versiones anteriores también.

Alternativamente, si lo que desea es hacer una sola pegote con mayúsculas y la insensibilidad:

use File::Glob ':glob'; 

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

gracias, supongo que no noté lo poco sobre File :: Glob que se usa internamente ahora – Kip

Cuestiones relacionadas