Perl:如何获得';使用版本';数

Perl:如何获得';使用版本';数,perl,version,Perl,Version,在运行脚本时,是否有一个特殊变量或函数为我提供use VERSION(在本例中为5.12.0)的编号 #!/usr/bin/env perl use warnings; use 5.12.0; 其中任何一个都可以为您提供解释器的版本: $] Perl解释器的版本+patchlevel/1000。此变量可用于确定执行脚本的Perl解释器是否在正确的版本范围内。(助记符:这个版本的perl在右括号中吗?) $PERL\u版本 $^V Perl解释器的修订版、版本和子版本,表示为“版本”对象。 这

在运行脚本时,是否有一个特殊变量或函数为我提供
use VERSION
(在本例中为
5.12.0
)的编号

#!/usr/bin/env perl 
use warnings;
use 5.12.0;

其中任何一个都可以为您提供解释器的版本:

$]
Perl解释器的版本+patchlevel/1000。此变量可用于确定执行脚本的Perl解释器是否在正确的版本范围内。(助记符:这个版本的perl在右括号中吗?)

$PERL\u版本
$^V
Perl解释器的修订版、版本和子版本,表示为“版本”对象。
这个变量首先出现在perl 5.6.0中;早期版本的perl将看到一个未定义的值。在perl 5.10.0之前,$^V表示为V字符串

这些值将大于“use”行上的值:如果您需要精确的字符串,请咬紧牙关并将其插入变量中,如中所示:

 use 5.12.0; $WANTPERL='5.12.0';

在编译期间,您可以在提示变量(
${^H}
)(龙潜伏的地方)中四处搜索,并查看提示哈希(%{^H})(龙潜伏的地方,但以公开文档的方式),这将让您知道启用了哪些特定功能。我不知道如何确定是否需要特定的功能包或所有给定的功能:

perl -le "use feature qw(:5.12); BEGIN{print $^H;print foreach keys %^H}"
133376
feature_unicode
feature_say
feature_state
feature_switch

perl -le "use 5.12.0; BEGIN{print $^H;print foreach keys %^H}"
134914
feature_unicode
feature_say
feature_state
feature_switch

我只是快速检查了
feature.pm
code-版本本身并没有存储在任何地方。Alex的回答已经说明了如何测试通话中产生的特定功能

还请注意,
use VERSION
可以在多个位置调用(例如在模块中)

一个假设的选项是覆盖
使用
并在某处记录版本号以供检查

编辑:钩子方向的一些戳:

use version; # for version parsing
use subs 'require';
BEGIN {
    sub require {
        warn "use ",version->parse($_[0]);
        # ... emulate original require
    };
}

use 5.12.0;

这个有限的示例报告了指定的版本,但为了实际使用,它必须更加健壮。

您将如何处理这些信息?(只是好奇)添加到
--info
选项输出。
$]
从v5.6开始就被弃用了。另外,获取当前版本不是问题,而是Perl的预期版本。如果$]被弃用,那么我希望优秀的文档perldoc perlvar,use warnings会这样说(从v5.12.4开始就不是这样)。但是,如果您知道的更好,那么您应该提交一个文档补丁-尽管我怀疑您将$]与$[,这实际上是不推荐的。是的,我理解了这个问题,并根据我对这个主题的理解和知识给出了我认为可以接受的答案。我看到你有所不同-这是你的特权。-向下滚动,在Perl 5.6中查找不推荐的。你引用的链接来自5.14,因此看起来文档现在已修复。我我不知道“随机挑选”是什么意思,如果你有其他抱怨,把他们带到电子邮件中会很好,更不用说合适了。而且,我来这里不是为了“走远”.这可能是其他人所做的-你有关于他们成熟的消息吗?干杯。我想有人认为这并不能回答问题。这不是答案本身。我给你竖起大拇指。哎呀,我认为不可能覆盖“使用”(快速测试确实指向这个方向)“即使它在哪里,我也倾向于反对它。”AlienLifeForm-在这个方向上添加了一个简单的实验。