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