explorer escribiste:A ver... no puede ser "molesto" si viene incluido en la distribución base de Perl.
Bueno, si molesto es un adjetivo poco feliz la discusión puede ser eterna, podemos decir ¿no retrocompatible?
explorer escribiste:Este módulo sobreescribe o secuestra la función del sistema stat(), para dar la posibilidad de acceder a los datos devueltos por el stat() normal, pero de una forma más cómoda, ergo deducen que quien pone un use File::stat; en su programa es porque no quiere acceder a la funcionalidad de la stat() integrada.
Claro, pero File::stat está integrado, es a mi entender algo como elegir entre say() y print() 'capado', salvando las distancias.
explorer escribiste:Lo de los problemas de versiones: hasta antes de Perl v5.12, teníamos que seguir haciendo lo que hemos hecho siempre, para comprobar si un fichero era legible, ejecutable o texto plano, era seguir usando los operadores -X. Pero a partir de Perl v5.12, eso ya se puede hacer con el propio objeto que devuelve File::stat. Así, un programa que hicieraUsing perl Syntax Highlightingmy $fichero = '/etc/crontab';
my($uid,$size) = (stat($fichero))[4,7];
my $es_legible = -r $fichero;
my $es_texto = -f $fichero;Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
ahora se puede reescribir asíCon lo que queda un poquito más claro (en lugar de un 4 y un 7, tenemos 'uid' y 'size', más gráficas).Using perl Syntax Highlightinguse File::stat;
my $fichero = '/etc/crontab';
my $st_fichero = stat($fichero);
my $uid = $st_fichero->uid;
my $size = $st_fichero->size;
my $es_legible = -r $st_fichero;
my $es_texto = -f $st_fichero;Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Se podrían seguir usando las opciones -X sobre $fichero, desde luego, pero File::stat da una posibilidad más. No quita posibilidades.
El problema ha venido porque yo he realizado el programa en mi Perl v5.12, sin darme cuenta de que, efectivamente, los operadores -X solo funcionan en esa versión con los objetos File::stat. Así que, una de dos: o pongo un use 5.012; al principio de mi programa o, mucho mejor, adoptamos tu solución de cambiar $estatus por $archivo.
Mi apreciación del caso no fue para buscar una solución alternativa, sin querer me topé con lo que yo llamaría incongruencia e ilegibilidad del código.
La opción uno use 5.012; no funciona en 5.10 como si fuera use features;.
En 5.12 no se puede sobreescribir:
Using perl Syntax Highlighting
- use strict;
- use warnings;
- use File::stat;
- my $fichero = '/etc/crontab';
- my $st_fichero = stat($fichero);
- eval { my $no_es_binario = ! -B $st_fichero; };
- warn $@ if $@;
- if (-r $fichero && (my($uid,$size) = (stat(_))[4,7])) {
- print "Uid: $uid Size: $size\n";
- }
- print "Es molestillo\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Efectivamente, sí quita posibilidades y no provee de otras para su reemplazo en formato de POO, obligándome a usar la forma ¿antigua? en ciertos casos, comenta el use File::stat; y el if se cumple, déjalo y comenta el if para que el warn se cumpla.
Lo sé, no es muy usada la sintaxis, pero...
...es molesto