Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Perl中优雅地确定系统架构_Perl_Architecture - Fatal编程技术网

在Perl中优雅地确定系统架构

在Perl中优雅地确定系统架构,perl,architecture,Perl,Architecture,我正在寻找一种简单的方法来确定Perl5中的系统是32位还是64位。我已经前后阅读了perlvar手册页面,还没有发现包含系统CPU架构的变量(编译Perl的CPU架构将非常接近)。这是我最近的一次: chomp (my $arch = `uname -m`); 我想知道是否有更优雅的方式来确定这一点;我讨厌依赖backtick表达式,因为它们都是一个瓶颈,往往不安全,并且经常(尤其是本例)破坏跨平台兼容性。Perl没有理由不提供这些信息。请参阅模块 也许检查是否设置了$Config{'arc

我正在寻找一种简单的方法来确定Perl5中的系统是32位还是64位。我已经前后阅读了
perlvar
手册页面,还没有发现包含系统CPU架构的变量(编译Perl的CPU架构将非常接近)。这是我最近的一次:

chomp (my $arch = `uname -m`);
我想知道是否有更优雅的方式来确定这一点;我讨厌依赖backtick表达式,因为它们都是一个瓶颈,往往不安全,并且经常(尤其是本例)破坏跨平台兼容性。Perl没有理由不提供这些信息。

请参阅模块


也许检查是否设置了
$Config{'archname64'}
就足够了。

也许可以尝试一个CPAN模块,例如。

方法将确定操作系统的“比特度”。

您可以使用提供类似于uname实用程序的
uname
功能的模块

use POSIX ();

my ($sysname, $nodename, $release, $version, $machine) = POSIX::uname;
或者,在您的情况下:

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

基于此,你在做什么?如果您担心跨平台兼容性,那么它似乎是一个非常具体的问题,将极大地影响正确的答案。@ytsh:我不担心这个特定脚本中的跨平台兼容性;我只是概述了为什么我不喜欢使用反勾号。不过,你是对的。不过,基于这一点,你有什么不同的做法?这可能是一个“你真正想知道什么?”的问题。对于struct en/解码,您可能需要检查
$Config{alignbytes}
$Config{byteorder}
;如果您对整数范围感兴趣,您可能需要
$Config{intsize}
$Config{ivsize}
(我认为这是相对较新的)等等。