Элегантно определяемая архитектура системы в Perl - PullRequest
6 голосов
/ 11 июля 2010

Я ищу простой способ определить, является ли система 32- или 64-битной изнутри Perl 5. Я прочитал страницу руководства perlvar вперед и назад и не обнаружил переменную, которая содержитархитектура процессора системы (архитектура процессора, для которой был скомпилирован Perl, подойдет достаточно близко).Это самое близкое, к чему я пришел:

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

Мне было интересно, есть ли более элегантный способ определить это;Я ненавижу полагаться на выражения backtick, поскольку они оба являются узким местом, имеют тенденцию быть небезопасными и часто (особенно в этом примере) нарушают кроссплатформенную совместимость.Нет никаких причин, по которым в Perl эта информация еще не была доступна.

Ответы [ 4 ]

10 голосов
/ 11 июля 2010

См. Модуль Config.

Возможно, будет достаточно проверить, установлен ли $Config{'archname64'}.

7 голосов
/ 12 июля 2010

Sys::Info::OS->bitness метод будет определять "битность" вашей ОС.

2 голосов
/ 11 июля 2010

Возможно, попробуйте модуль CPAN, например https://metacpan.org/pod/Devel::CheckOS.

0 голосов
/ 25 июня 2014

Вы можете использовать модуль POSIX , который обеспечивает функцию uname, аналогичную утилите uname.

use POSIX ();

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

Или, в вашем случае:

my $arch = (POSIX::uname)[4];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...