Perl:如何强制64位Perl编译器要求运行程序

Perl:如何强制64位Perl编译器要求运行程序,perl,Perl,我想知道是否有办法强制程序只在x64位perl编译器中执行。如果程序在32位编译器中运行,它将抛出错误并退出。 类似于的东西需要5.10.0 我有一个程序,有很多64位整数处理要做。它们都是字符串格式,hex“0xxxxxxxxxxxxxxxxxxx”不能由32位编译器处理(在某些地方只支持53位)。我确实知道我们可以使用Math::BigInt,但我希望删除库的使用,因为脚本将在可能没有此库的其他系统中运行。尽管有很多关于编译器的讨论,但听起来您实际上想检查Perl的整数是否(至少)为64位。



我想知道是否有办法强制程序只在x64位perl编译器中执行。如果程序在32位编译器中运行,它将抛出错误并退出。

类似于
的东西需要5.10.0



我有一个程序,有很多64位整数处理要做。它们都是字符串格式,
hex“0xxxxxxxxxxxxxxxxxxx”
不能由32位编译器处理(在某些地方只支持53位)。我确实知道我们可以使用
Math::BigInt
,但我希望删除库的使用,因为脚本将在可能没有此库的其他系统中运行。

尽管有很多关于编译器的讨论,但听起来您实际上想检查Perl的整数是否(至少)为64位。为此,您可以使用以下方法:

use Config qw( %Config );

BEGIN { die("64-bit ints required.\n") if $Config{ivsize} < 8; }
使用配置qw(%Config);
如果$Config{ivsize}<8;},则开始{die(“需要64位整数。\n”)

BEGIN{die(“需要64位整数。\n”)如果长度(pack('j',0))<8;}


BEGIN{die(“需要64位整数。\n”)如果~0是的!在32位perl中进行了测试,效果很好。谢谢!你能解释一下这里发生了什么吗?@Arun,你不明白什么吗?~0@Arun,你检查过什么了吗?
~
形成了逐位求反,所以
~0
对于32位整数返回
0xFFFF\u FFFF
,对于64位整数返回
0xFFFF\u FFFF\u FFFF
。您知道为了可读性,逗号经常被大量使用(例如1234567)?Perl允许在数字文本中使用
BEGIN { die("64-bit ints required.\n") if length(pack('j', 0)) < 8; }
BEGIN { die("64-bit ints required.\n") if ~0 <= 0xFFFF_FFFF; }