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