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

Ernesto Hernandez-Novich emhn at telcel.net.ve
Tue May 8 08:10:24 CDT 2001


On Tue, 8 May 2001, Jose Rey wrote:
> 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.

Absolutamente correcto.

> Esta chevere el test de la arquitectura.

Es una sugerencia de Tom Christiansen pre-Perl 5.6. A partir de 5.6 no hay
que preocuparse por "endianness" para las operaciones open() ni ioctl().

El programa está inspirado en un algoritmo modelo en C para hacer los
cálculos y los nombres de las variables están "copiados" con modificaciones
menores. La versión original en C si debía preocuparse por endianness pero
la forma de verificarlo tomaba seis líneas... y resulta que después de todo
ni siquiera hace falta en Perl.
-- 
Ernesto Hernández-Novich - Running Linux 2.4.2 i686 - Unix: Live free or die!
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS/E d+(++) s+: a C+++$ UBLAVHIOSC*++++$ P++++$ L+++$ E- W+ N++ o K++ w--- O-
M- V PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G++ e++ h r++ y+
-----END GEEK CODE BLOCK-----

------------------------------------------------------------------------
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