Aprendiendo Perl, el reto: Encontrar duplicados
Javier Tiá
javier.tia en gmail.com
Jue Abr 5 21:34:16 PDT 2012
2012/4/5 Marcelo E. Magallon <marcelo.magallon en gmail.com>:
> Curiosamente en Learning Perl el primer ejemplo de open es con
> barewords y solo dos argumentos, y luego de eso pasan muchas
> páginas antes de siquiera mencionar open con referencias. Esto
> de hecho ha sido motivo de discusión aquí y allá y brian d foy
> dice que primero que nada, uno no puede ignorar el hecho que
> open con barewords existe, y que si la gente quiere aprender
> Perl tiene que saber que eso existe, aún cuando ellos mismos
> nunca vayan a escribir ni una sola vez open de esa forma.
En la edición 4th de Learning Perl, es la que tengo, todos los
ejemplos vistos usan barewords. Uso mayormente Perl v5.8.
>> Esta parte me resulta confusa.
>> Puedo usar "get_hash('el cielo pintado de azul')" o
>> "get_hash($foo)" que esperaría el mismo resultado, pero si uso
>> "get_hash" o "get_hash()" me da error.
>
> Mea culpa, no me expliqué bien. El problema al que yo me
> pretendía referir no está en la llamada a get_hash, está en la
> implementación:
>
> sub get_hash($)
> {
> open(FILE, $_);
> return Digest::MD5->new->addfile(*FILE)->hexdigest;
> }
>
> ese "$_" en open se refiere a la variable $_ en el sitio de la
> llamada:
>
> $hashes{$File::Find::name} = get_hash($_) if -f $_;
>
> y lo que quise decir es que el argumento de get_hash es
> completamente ignorado. En get_hash el primer argumento de la
> función sería $_[0], y la expresión más idiomática es:
>
> my $filename = shift;
> open(FILE, $filename);
> return Digest::MD5->new->addfile(*FILE)->hexdigest;
>
> La razón por la que te da error al tratar de usar get_hash o
> get_hash() es porque el prototipo dice que esa función debe ser
> llamada con un argumento escalar.
Escribiéndole así:
sub get_hash
{
my $filename = shift;
open(FILE, $filename);
return Digest::MD5->new->addfile(*FILE)->hexdigest;
}
Se vería mejor y sería otra razón para no usar prototipo :)
Corríjeme Marcelo si estoy equivocado, pero me parece estar viendo
como buena práctica: NO usar prototipos.
Saludos,
Javier
Más información sobre la lista de distribución Costarica-pm