2009-10-02 11 views
5

Casi universalmente, cuando la gente de Destino sobre SO (o en otro lugar) sobre Perl y la lectura de los archivos, si cualquier código que implica un viejo estilo abierto¿Debo usar un manejador de directorio léxico con opendir en Perl?

open FH, ">file.txt" or die "Can't open for write, $!"; # OLD way, do not use! 

se gritó por no usar un gestor de archivo léxica. Como todos sabemos,

open my $fh, ">", "file.txt" or die "Can't open for write, $!"; # new hotness 

es la forma correcta de abrir un identificador de archivo en Perl moderno. ¿Qué pasa con los manejadores de directorio? En algunas preguntas tan reciente, la gente ha planteado preguntas que implican opendir, y un código como

opendir DIR, "/directory" or die "Can't get the directory, wtf?! $!"; # ??? 

publicado El perldoc pages muestran

opendir(my $dh, $some_dir) || die "can't opendir $some_dir: $!"; 

como el ejemplo.

¿Deberíamos sugerirles a las personas que utilicen un manejador de directorio léxico para opendir también?

+1

Sería bueno si 'while (readdir $ dir) {...}' funcionara como 'while (readline $ file) {...}' –

+0

Mientras que en este caso, el ejemplo perldoc * does * do it "correcto", tenga en cuenta que los ejemplos deben mantenerse enfocados. Periódicamente, las personas sugieren realizar y agregar declaraciones léxicas o estrictas/advertencias a los ejemplos; esto en gran medida se derriba porque realmente oscurece el punto de código de ejemplo. Entonces, si el ejemplo hubiera sido opendir (DIRH, ...), eso no habría sido un argumento en contra de las manejaduras léxicas. – ysth

Respuesta

10

Definitivamente. El argumento para los manejadores de archivos léxicos para directorios es idéntico al de los archivos: el alcance del espacio de nombres actual.

4

Sí, los léxicos se prefieren para opendir y open.

3

Cuando tenga la oportunidad, corregiré todos esos ejemplos en los perldocs. Learning Perl ya usa los controladores léxicos en la quinta edición.

Cuestiones relacionadas