Otro "modismo" Perl (Era Re: Serial CD 2)

Jose Rey jrey at linuxsis.net
Tue May 8 00:06:10 CDT 2001


From: Ernesto Hernandez-Novich <emhn at telcel.net.ve>
To: Perl Mongers Caracas <caracas-pm-list at pm.org>


> On Fri, 4 May 2001, Ernesto Hernandez-Novich wrote:
> > #!/usr/bin/perl
> > # Los IOCTLs tomados desde /usr/include/linux/cdrom.h
> > my $CDREADTOCHDR   = 0x5305;
> > my $CDREADTOCENTRY = 0x5306;
> > my $CDMSF          = 0x02;
> >

Yo pense que la línea tenia que ser interpretada en el contexto del
programa, sin embargo resulto tener significado propio y no muy difícil de
averiguar una vez leido el correspondiente manual de pack (no soy capaz de
rordar el churro de opciones de ninguna manera).

> > my $be = unpack("h*",pack("s",1)) =~ /01/;

de perlfunc:

pack("s",1)
hace pack de 1 en un short (16 bits), dependiente de la arquitectura

unpack("h*",x)
hace unpack de x como lo nibble first

Asi que incluso el nombre cuadra, $be == $BigEndian ya que en little endians
(i.e. intel) da 1000 y no hace match con /01/ mientras que en big endians
(i.e. motorola) da 0001 que si hace match con 01.

Esta chevere el test de la arquitectura.

>
> Obviamente, esta línea se puede eliminar del programa y no cambia
> para nada puesto que $be no se usa nunca en el programa, pero...
> ¿Qué estoy tratando de averigüar con ésta instrucción?
>
> Asuman que más adelante se hace algo como
>
> if ($be) {
>   /* Si es */

     # es big endian (motorola)

> } else {
>   /* No es */

     # es little endian (intel)

> }
>


------------------------------------------------------------------------
Enviar e-mail a <majordomo at pm.org> colocando en el cuerpo:
"UNSUBSCRIBE caracas-pm-list" para desuscribirse.
"INFO caracas-pm-list" para conocer las reglas de etiqueta.
------------------------------------------------------------------------



More information about the caracas-pm mailing list