我是否可以使用新的5.12包版本语法,而不指定所需的Perl版本?

我对使用VERSION语法和Perl 5.12中引用的NAME VERSION语法的需求感到困惑.我预计必须同时指定:
use v5.12;

package MyPackage 0.01;

我看到的任何例子都是这样的.但是,由于意外(即复制&粘贴而不用注意),我发现,当我使用5.010甚至没有指定版本时,这个新的包版本语法工作.

底层的Perl安装是ActiveState 5.14,所以在这种情况下,解释器版本是唯一的要求?我的印象是,新功能总是需要使用VERSION语法,以帮助向后兼容.有没有例外?

解决方法

不是每个新功能都是功能.

使用VERSION语法这样做:

>当当前perl版本太低时抛出错误.
>从功能编译指示中导入适当的功能集.我的功能列表版本的perldoc页面

bundle    features included
--------- -----------------
:default  array_base

:5.10     say state switch array_base

:5.12     say state switch unicode_strings array_base

:5.14     say state switch unicode_strings array_base

:5.16     say state switch unicode_strings
           unicode_eval evalbytes current_sub fc

(实际上,array_base是在5.16中引入的,但是被添加到以前的bundle中,用于back-compat).
> 5.11.0以来,在当前范围内激活了严格的pragma.

一些修改是如此向后兼容,不需要提供一种方法来停用它们(这是功能说明).使用MODULE VERSION语法大部分是向后兼容的.因为版本和导入列表之间的逗号缺失

use MODULE VERSION LIST;

这不是一个问题(即这种语法以前是非法的).当LIST丢失时,导入方法将会收到Perl上不识别此语法的版本号.出口商模块处理这种情况,并检查模块版本.因此,通过出口商(大多数)提供进口的所有模块都是安全的.

相关文章

忍不住在 PerlChina 邮件列表中盘点了一下 Perl 里的 Web 应用框架(巧的是 PerlBuzz 最近也有一篇相关...
bless有两个参数:对象的引用、类的名称。 类的名称是一个字符串,代表了类的类型信息,这是理解bless的...
gb2312转Utf的方法: use Encode; my $str = "中文"; $str_cnsoftware = encode("utf-8...
  perl 计算硬盘利用率, 以%来查看硬盘资源是否存在IO消耗cpu资源情况; 部份代码参考了iostat源码;...
1 简单变量 Perl 的 Hello World 是怎么写的呢?请看下面的程序: #!/usr/bin/perl print "Hello W...
本文介绍Perl的Perl的简单语法,包括基本输入输出、分支循环控制结构、函数、常用系统调用和文件操作,...