2010-07-11 17 views
6

Estoy buscando una manera simple de determinar si un sistema es de 32 o 64 bits desde Perl 5. He leído la página del manual perlvar hacia atrás y hacia adelante, y no he descubierto un variable que contiene la arquitectura de CPU del sistema (la arquitectura de CPU para la que se compiló Perl se acercará lo suficiente). Esto es lo más cercano que he venido:Arquitectura del sistema de determinación elegante dentro de Perl

chomp (my $arch = `uname -m`); 

Me preguntaba si había una manera más elegante de determinar esto; Odio confiar en las expresiones de contratiempo, ya que son a la vez un cuello de botella, tienden a ser inseguros, y con frecuencia (este ejemplo especialmente) rompen la compatibilidad multiplataforma. No hay razón por la cual Perl no debería tener esta información disponible.

+0

¿Qué haces en base a este? Si le preocupa la compatibilidad multiplataforma, parece que sería algo muy específico que influiría en gran medida en la respuesta adecuada. – ysth

+0

@ytsh: No me preocupa la compatibilidad multiplataforma en este script en particular; Solo estaba delineando por qué no me gustaba usar apoyos. Tienes razón, sin embargo. – amphetamachine

+0

Aún así, ¿qué haces de forma diferente en base a esto? – ysth

Respuesta

10

Consulte el módulo Config.

Quizás sea suficiente comprobar si $Config{'archname64'} es suficiente.

+7

Este podría ser uno de esos "¿qué es lo que realmente quieres saber?" preguntas Para struct en/decoding, es posible que desee inspeccionar '$ Config {alignbytes}' o '$ Config {byteorder}'; si está interesado en el rango entero, es posible que desee '$ Config {intsize}} o' $ Config {ivsize} '(que creo que es relativamente nuevo), etc., etc. – hobbs

0

Puede usar el módulo POSIX que proporciona una función uname similar a la utilidad uname.

use POSIX(); 

my ($sysname, $nodename, $release, $version, $machine) = POSIX::uname; 

O, en su caso:

my $arch = (POSIX::uname)[4]; 
Cuestiones relacionadas