英语法语西班牙语

OnWorks 网站图标

perl56delta - 云端在线

在 OnWorks 免费托管服务提供商中通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器运行 perl56delta

这是命令 perl56delta 可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


perl56delta - perl v5.6.0 的新功能

商品描述


本文档描述了 5.005 版本和 5.6.0 版本之间的差异。

核心 增强


口译员 克隆, 线程, 并发
Perl 5.6.0 开始支持运行多个解释器
同时在不同的线程中。 与 perl_clone() API 调用,其中
可用于选择性地复制任何给定解释器的状态,可以
在解释器中编译一段代码,克隆该解释器一次或多次,
并在不同的线程中运行所有生成的解释器。

在 Windows 平台上,此功能用于模拟 叉子() 在口译员层面。
有关详细信息,请参阅 perlfork。

此功能仍在进化中。 它最终旨在用于有选择地
在单独的解释器中克隆一个子程序和可从该子程序访问的数据
在单独的线程中运行克隆的子例程。 由于两者之间没有共享数据
解释器,很少或不需要锁定(除非符号表的部分是
明确共享)。 这显然是为了成为一个易于使用的替代品
现有线程支持。

可以使用以下命令启用对克隆解释器和解释器并发的支持
-Dusethreads 配置选项(有关如何在 Windows 上启用它,请参见 win32/Makefile。)
生成的 perl 可执行文件在功能上与构建时相同
-D 多重性,但 perl_clone() API 调用仅在前者可用。

-Dusethreads 默认启用 cpp 宏 USE_ITHREADS,进而启用 Perl
源代码更改在 op 树和它的数据之间提供了清晰的分离
操作。 前者是不可变的,因此可以在一个
解释器及其所有克隆,而后者被认为是本地的
解释器,因此为每个克隆复制。

请注意,如果您使用 -Dusemultiplicity Configure 选项构建 Perl 就足够了
希望运行多个 独立 解释器在不同的线程中并发。
-Dusethreads 只提供了额外的功能 perl_clone() API 调用和
对跑步的其他支持 克隆的 口译员同时进行。

注意:这是一个实验性功能。 实现细节是
可能会发生变化。

词汇上 范围 警告 类别
您现在可以使用以下命令在更精细的级别控制 perl 发出的警告的粒度
“使用警告”pragma。 警告和 perllexwarn 对此有大量文档
功能。

统一 UTF-8 支持
Perl 现在使用 UTF-8 作为其内部字符串表示。 “utf8”和
“字节”编译指示用于控制当前词法范围内的这种支持。 看
perlunicode、utf8 和字节了解更多信息。

预计此功能将快速发展以支持某种形式的 I/O 规则
可用于指定输入和输出数据的种类(字节或字符)。 直到
发生这种情况时,需要来自 CPAN 的额外模块来完成工具包
处理 Unicode。

注意:这应该被视为一个实验性功能。 执行
细节可能会发生变化。

帮助 内插 命名 字符
新的“\N”转义插入字符串中的命名字符。 例如,“嗨!
\N{WHITE SMILING FACE}" 评估为末尾带有 unicode 笑脸的字符串。

“我们的” 声明
“我们的”声明引入了一个可以最好理解为词法作用域的值
包中当前变量所在的全局变量的符号别名
宣布。 这主要用作“vars”编译指示的替代方法,但也提供
有机会为此类变量引入类型和其他属性。 见“我们的”
函数

帮助 字符串 代表 as a 向量 of 平凡的
“v1.2.3.4”形式的文字现在被解析为一个由字符组成的字符串
指定的序数。 这是另一种更易读的构造方法(可能
unicode) 字符串而不是内插字符,如“\x{1}\x{2}\x{3}\x{4}”。 这
如果有两个以上的序数,前导“v”可能会被省略,因此 1.2.3 被解析为
与“v1.2.3”相同。

以这种形式编写的字符串也可用于表示版本“数字”。 这很容易
使用任何
通常的字符串比较运算符“eq”、“ne”、“lt”、“gt”等,或执行按位字符串
使用“|”、“&”等对它们进行操作。

结合新的 $^V 魔法变量(包含 perl 版本作为
字符串),这样的文字可以作为一种可读的方式来检查你是否正在运行
Perl 的特定版本:

# 这也将在旧版本的 Perl 中解析
如果($^V 和 $^V gt v5.6.0){
# 支持的新功能
}

“require”和“use”也有一些特殊的魔法来支持这样的文字,但是这个
应避免使用特定的用法,因为它会导致下面的误导性错误消息
不支持向量字符串的 Perl 版本。 使用真实的版本号将
确保在所有版本的 Perl 中行为正确:

需要 5.006; # v5.6 的运行时检查
使用 5.006_001; # 编译时间检查 v5.6.1

此外,“sprintf”和“printf”支持 Perl 特定的格式标志 %v 来打印
任意字符串中的字符:

printf "v%vd", $^V; # 打印当前版本,例如“v5.5.650”
printf "%*vX", ":", $addr; # 格式化 IPv6 地址
printf "%*vb", " ", $bits; # 显示位串

有关其他信息,请参阅 perldata 中的“标量值构造函数”。

优化 Perl的 版本 编号 系统
从 Perl 5.6.0 版开始,版本号约定已更改为
在开源项目中更常见的“点分整数”方案。

v5.6.0 的维护版本将发布为 v5.6.1、v5.6.2 等。 下一个
v5.6.0 之后的开发系列将编号为 v5.7.x,从 v5.7.0 开始,并且
v5.6.0 之后的下一个主要生产版本将是 v5.8.0。

English 模块现在将 $PERL_VERSION 设置为 $^V(一个字符串值)而不是 $](一个
数值)。 (这是潜在的不兼容性。如果出现以下情况,请通过 perlbug 向我们发送报告
你受此影响。)

v1.2.3 语法现在在 Perl 中也是合法的。 请参阅“支持表示为
序数向量”了解更多信息。

为了应对新的版本控制系统使用至少三位有效数字
version 组件,用于增加 subversion 编号的方法也发生了变化
轻微地。 我们假设 v5.6.0 之前的版本一直在增加 subversion
组件以 10 的倍数表示。 v5.6.0 之后的版本会将它们增加 1。因此,
使用新符号,5.005_03与v5.5.30“相同”,第一次维护
v5.6.0 之后的版本将是 v5.6.1(应该被理解为相当于
旧格式的浮点值 5.006_001,存储在 $] 中)。

全新 句法 声明 子程序 属性
以前,如果您想将子例程标记为方法调用或需要
自动 锁() 当它被输入时,你必须用“use attrs”编译指示声明它
子程序的主体。 现在可以使用声明语法来完成,例如
这个:

sub mymethod : 锁定方法;
...
子方法:锁定方法{
...
}

子其他方法:锁定:方法;
...
子其他方法:锁定:方法{
...
}

(注意只有第一个“:”是强制性的,而“:”周围的空格是
可选的。)

自动分割文件SelfLoader.pm 已更新以保留存根的属性
他们提供。 查看属性。

文件 目录 手柄 能够 be 自动激活
类似于诸如“$x->[0]”之类的构造如何自动激活引用,处理构造函数
(打开(), 打开目录(), 管道(), 套接字对(), 系统打开(), 插座()接受()) 现在
如果传递给它们的句柄是未初始化的,则自动激活文件或目录句柄
标量变量。 这允许诸如“open(my $fh, ...)”和“open(local
$fh,...)" 用于创建可以方便地自动关闭的文件句柄
范围结束时,前提是没有其他引用它们。 这在很大程度上
在打开必须传递的文件句柄时消除了对 typeglobs 的需要,如
在以下示例中:

子我打开{
打开我的 $fh, "@_"
或者死“无法打开'@_':$!”;
返回 $fh;
}

{
我的 $f = myopen("
打印 <$f>;
# $f 在这里隐式关闭
}

打开() - 更多 参数
If 打开() 传递三个参数而不是两个,第二个参数用作
mode 并且第三个参数被视为文件名。 这主要用于
防止传统双参数形式的意外魔术行为。 看
perlfunc 中的“打开”。

64 bit 支持
任何具有 64 位整数的平台

(1) 本机为 longs 或 ints
(2) 通过特殊的编译器标志
(3) 使用 long long 或 int64_t

能够使用“quads”(64位整数)如下:

· 代码中的常量(十进制、十六进制、八进制、二进制)

· 论据 八进制()十六进制()

· 论据 打印(), 打印输出()冲刺() (标志前缀 ll、L、q)

· 如此印刷

· 盒()解包() “q”和“Q”格式

· 在基本算术中:+ - * / %(注意:操作接近整数的极限
值可能会产生令人惊讶的结果)

· 在位算术中: & | ^ ~ << >> (注意:这些曾经被强制为 32 位宽
但现在在完整的原生宽度上运行。)

· 向量()

请注意,除非您遇到 (a) 情况,否则您必须使用以下命令配置和编译 Perl
-Duse64bitint 配置标志。

注意:配置标志 -Duselonglong 和 -Duse64bits 已被
已弃用。 使用 -Duse64bitint 代替。

64位实际上有两种模式:第一种是使用Configure实现的
-Duse64bitint 和第二个使用配置 -Duse64bitall。 不同之处在于
第一个是最小的,第二个是最大的。 第一个在更多的地方工作
第二。

“use64bitint”只完成将 64 位整数输入 Perl 所需的功能(这
可能意味着,例如,使用“long longs”)而您的记忆可能仍被限制为 2
千兆字节(因为您的指针可能仍然是 32 位)。 请注意名称“64bitint”
并不意味着您的 C 编译器将使用 64 位“int”(它可能,但它不会
必须):“use64bitint”意味着您将能够拥有 64 位宽的标量
值。

“use64bitall”一直尝试切换整数(如果可以的话),
longs(和指针)指向 64 位。 这可能会造成更多的二进制不兼容
Perl 比 -Duse64bitint:生成的可执行文件可能根本无法在 32 位机器中运行,或者
您可能必须重新启动/重新配置/重建您的操作系统才能支持 64 位。

像 Alpha 和 Cray 这样的原生 64 位系统既不需要 -Duse64bitint 也不需要 -Duse64bitall。

最后但并非最不重要的一点:请注意,由于 Perl 总是使用浮点数的习惯,
四边形仍然不是真正的整数。 当四边形溢出它们的极限时
(0...18_446_744_073_709_551_615 unsigned,
-9_223_372_036_854_775_808...9_223_372_036_854_775_807 signed), they are silently promoted
到浮点数,之后它们将开始失去精度(在较低的
数字)。

注意:64 位支持在大多数平台上仍处于试验阶段。
现有支持仅涵盖 LP64 数据模型。 特别是,
尚不支持 LLP64 数据模型。 64 位库和系统
许多平台上的 API 尚未稳定——您的里程可能会有所不同。

L大号 文件 支持
如果您的文件系统支持“大文件”(大于 2 GB 的文件),您
现在也可以从 Perl 创建和访问它们。

注意:默认操作是启用大文件支持,如果
平台上可用。

如果启用了大文件支持,并且您有一个 Fcntl 常量 O_LARGEFILE,则
O_LARGEFILE 自动添加到 系统打开().

请注意,除非您的文件系统还支持“稀疏文件”寻求无数
PB 可能是不可取的。

请注意,除了需要适当的文件系统来处理大文件外,您还可能
需要调整您的每个进程(或您的每个系统,或每个进程组,或每个用户-
group) 在运行尝试处理大文件的 Perl 脚本之前的最大文件大小限制,
特别是如果您打算编写此类文件。

最后,除了您的进程/进程组最大文件大小限制之外,您可能还有
阻止您(您的用户 ID 或用户组 ID)的文件系统的配额限制
使用大文件。

调整您的进程/用户/组/文件系统/操作系统限制不在范围内
Perl 核心语言。 对于流程限制,您可以尝试使用您的
在运行 Perl 之前,shell 的限制/限制/ulimit 命令。 BSD::Resource 扩展(不是
包含在标准 Perl 发行版中)也可能有用,它提供了
getrlimit/setrlimit 接口,可用于调整进程资源使用限制,
包括最大文件大小限制。

双打
在某些系统中,您可以使用长双精度来提高范围和精度
您的双精度浮点数(即 Perl 的数字)。 使用配置
-Duselongdouble 启用此支持(如果可用)。

“更多的 位”
您可以“配置 -Dusemorebits”来同时打开 64 位支持和 long double
支持。

品牌影响力提升 支持 种类() 子程序
具有“($$)”原型的 Perl 子程序和一般的 XSUB 现在可以用作排序
子程序。 在任何一种情况下,要比较的两个元素都正常传递
@_ 中的参数。 请参阅 perlfunc 中的“排序”。

对于非原型排序子程序,传递元素的历史行为
相比之下,全局变量 $a 和 $b 保持不变。

“种类 $代码参考 @富” 允许
种类() 之前不接受子程序引用作为比较函数
版本。 这是现在允许的。

文件 通配 实施 内部
Perl 现在使用 File::Glob 实现 地球仪() 操作员自动。 这个
避免使用外部 csh 进程以及与之相关的问题。

注意:这是目前的一个实验性功能。 接口和
实施可能会发生变化。

帮助 查看
除了“BEGIN”、“INIT”、“END”、“DESTROY”和“AUTOLOAD”之外,还有名为“CHECK”的子程序
现在很特别。 这些在编译期间排队并且行为类似于 END 块,
除了它们在编译结束而不是在执行结束时调用。
不能直接调用它们。

POSIX 字符 句法 [: :] 支持的
例如匹配字母字符使用 /[[:alpha:]]/. 有关详细信息,请参阅 perlre。

更好 伪随机 发电机
在 5.005_0x 及更早版本中,perl 的 RAND() 函数使用了 C 库 兰特(3) 功能。 作为
5.005_52,配置测试 德兰德48(), 随机()RAND() (按该顺序)并选择
它找到的第一个。

这些变化应该会产生更好的随机数 RAND().

优化 “qw//” 操作者
“qw//”运算符现在在编译时被评估为一个真正的列表,而不是被
替换为对“split()”的运行时调用。 这消除了令人困惑的不当行为
标量上下文中的“qw//”,它继承了从 分裂().

从而:

$foo = ($bar) = qw(abc); 打印 "$foo|$bar\n";

现在正确打印“3|a”,而不是“2|a”。

更好 最糟糕的情况 行为 of 哈希
对散列算法进行了一些小的更改,以改进
散列值中低位的分布。 预计这会产生更好的收益
重复序列的键的性能。

盒() 格式 'Z' 支持的
新的格式类型“Z”对于打包和解包以空字符结尾的字符串很有用。 看
在 perlfunc 中“打包”。

盒() 格式 变化 '! 支持的
新的格式类型修饰符 '!' 可用于打包和解包本机短裤、整数、
和渴望。 参见 perlfunc 中的“pack”。

盒() 解包() 支持 计数 字符串
模板字符“/”可用于指定要打包的计数字符串类型或
打开包装。 参见 perlfunc 中的“pack”。

评论 in 盒() 模板
模板中的“#”字符在行尾引入注释。 这个
便于记录 盒() 模板。

引用
在以前的 Perl 版本中,您不能缓存对象以允许删除它们
如果从缓存外部的最后一个引用被删除。 缓存中的引用将
持有对象的引用计数,对象永远不会被销毁。

另一个熟悉的问题是循环引用。 当一个对象引用自身时,
它的引用计数永远不会下降到零,并且它不会被销毁,直到
程序即将退出。

弱引用通过允许你“弱化”任何引用来解决这个问题,也就是说,让它不
计入引用计数。 当对对象的最后一个非弱引用是
删除,对象被销毁,所有对对象的弱引用都被销毁
自动取消定义。

要使用此功能,您需要来自 CPAN 的 Devel::WeakRef 包,其中包含
附加文件。

注意:这是一个实验性功能。 详细信息可能会发生变化。

二进制 数字 支持的
现在支持二进制数字作为文字、s?printf 格式和“oct()”:

$答案 = 0b101010;
printf "答案是:%b\n", oct("0b101010");

左值 子程序
子程序现在可以返回可修改的左值。 请参阅 perlsub 中的“左值子程序”。

注意:这是一个实验性功能。 详细信息可能会发生变化。

箭头 五月 be 省略 in 电话 通过 引用
Perl 现在允许在许多涉及子程序调用的结构中省略箭头
通过参考。 例如,“$foo[10]->('foo')”现在可以写成
“$foo[10]('foo')”。 这与省略箭头的方式非常相似
“$foo[10]->{'foo'}”。 但是请注意,箭头仍然需要
"FOO(10)->('bar')"。

布尔 分配 运营商 旨在 法律 左值
现在允许诸如“($a ||= 2) += 1”之类的结构。

存在() is 支持的 on 子程序 名称
存在() 内置现在适用于子程序名称。 一个子程序被认为存在
如果已声明(即使是隐式声明)。 有关示例,请参阅 perlfunc 中的“存在”。

存在() 删除() 旨在 支持的 on 排列 分子
存在()删除() 内置函数现在也适用于简单的数组。 行为是
类似于散列元素。

存在() 可用于检查数组元素是否已初始化。 这避免了
自动激活不存在的数组元素。 如果数组是绑定的,则 存在() 方法
在相应的捆绑包中将被调用。

删除() 可用于从数组中删除一个元素并返回它。 数组元素
在那个位置返回到它的未初始化状态,以便测试相同的元素
- 存在() 将返回假。 如果元素恰好是最后的元素,则
数组的大小也缩小到测试为真的最高元素 存在()
如果没有找到,则为 0。 如果数组是绑定的,则 删除() 对应的方法
绑定的包将被调用。

有关示例,请参阅 perlfunc 中的“exists”和 perlfunc 中的“delete”。

伪哈希 工作 更好
在伪散列中取消引用某些类型的引用值,例如“$ph->{foo}[1]”,
不小心被禁止了。 这已得到纠正。

当应用于伪哈希元素时, 存在() 现在报告是否指定值
存在,而不仅仅是密钥有效。

删除() 现在适用于伪哈希。 当给定一个伪哈希元素或切片时,它会删除
对应于键的值(但不是键本身)。 请参阅“伪哈希:
在 perlref 中使用数组作为散列”。

带有常量键的伪哈希切片现在针对编译时的数组查找进行了优化。

现在支持对伪哈希切片的列表分配。

“字段” pragma 现在提供了创建伪哈希的方法,通过 字段::新()
字段::phash(). 查看字段。

注意:伪哈希数据类型仍然是实验性的。
将自己限制在提供的界面元素上
fields pragma 将提供保护以防止将来发生任何更改。

自动表 冲洗 of 产量 缓冲区
叉子(), exec(), 系统(), qx//, 和管道 打开()s 现在刷新所有打开的文件的缓冲区
尝试操作时的输出。 这主要消除了令人困惑的缓冲
不知道 Perl 内部如何处理 I/O 的用户遭受的不幸。

这在某些平台(如 Solaris)上不受支持,其中适当正确的
fflush(NULL) 的实现不可用。

更好 诊断 on 无意义 文件句柄 操作
诸如“open( )”和“关闭( )”是编译​​时错误。试图
从仅为写入而打开的文件句柄中读取现在会产生警告(就像
写入只读文件句柄确实如此)。

其中 可能, 缓冲的 data 丢弃 骗了 输入 文件句柄
"open(NEW, "<&OLD")" 现在尝试丢弃之前读取的任何数据,并且
在复制句柄之前缓冲在“OLD”中。 在允许这样做的平台上,
对“NEW”的下一次读取操作将返回与相应操作相同的数据
“老的”。 以前,它会从以下磁盘的开头返回数据
改为封锁。

结束时间() 具有 魔法 as <>
如果尚未尝试从 "<>" 中读取,"eof()" 将返回 true。 “eof()”有
已更改为具有自己的一点魔力,它现在打开“<>”文件。

二进制模式() 能够 be 用过的 :crlf :生的 模式
二进制模式() 现在接受第二个参数,用于指定句柄的规则
题。 目前 DOS 支持这两个伪学科 ":raw" 和 ":crlf"-
衍生平台。 请参阅 perlfunc 中的“binmode”并打开。

“-T” 文件测试 认识 UTF-8 编码 as “文本”
用于“-T”文件测试的算法已得到增强,可以正确识别 UTF-8
内容为“文本”。

系统(), 反引号 打开 现在 反映 exec() 失败
在 Unix 和类似平台上, 系统(), qx() 和 open(FOO, "cmd |") 等,实现
通过 叉子()exec(). 当底层 exec() 失败,早期版本没有报告
错误正确,因为 exec() 碰巧处于不同的过程中。

子进程现在与父进程通信关于启动错误
外部命令,它允许这些结构返回它们通常的错误值和
设置 $!。

优化 诊断
在全球范围内不再抑制行号(在最有可能的情况下)
破坏阶段。

从在主线程以外的线程中运行的代码发出的诊断现在是
伴随着线程 ID。

诊断中嵌入的空字符现在实际显示。 他们过去常常截断
先前版本中的消息。

$foo::a 和 $foo::b 现在仅在以下情况下才免于“可能的错字”警告 种类() is
在包“foo”中遇到。

解析引号构造时遇到的无法识别的字母转义现在生成一个
警告,因为它们可能会在更高版本的 Perl 中采用新的语义。

许多诊断现在报告引发警告的内部操作,例如
孙:

在 (eval 1) 第 1 行的连接 (.) 中使用未初始化的值。
在 (eval 1) 第 1 行的打印中使用未初始化的值。

eval 中发生的诊断也可能报告文件和行号,其中
eval 所在的位置,除了 eval 序列号和行号之外
评估文本本身。 例如:

在 (eval 4)[newlib/perl5db.pl:1411] 第 2 行,在 EOF 处没有足够的标量参数

诊断 遵循 斯特德
诊断输出现在转到“STDERR”句柄指向的任何文件,而不是
总是转到底层 C 运行时库的“stderr”。

更多 一贯 执行时关闭 行为
在文件句柄上支持 close-on-exec 标志的系统上,现在为任何
创建的句柄 管道(), 套接字对(), 插座()接受(),如果这是由
可能有效的 $^F 值。 早期版本忽略为
使用这些运算符创建的句柄。 参见 perlfunc 中的“pipe”,perlfunc 中的“socketpair”,
perlfunc 中的“socket”,perlfunc 中的“accept”,perlvar 中的“$^F”。

系统写入() 便于使用
“syswrite()”的长度参数已成为可选。

更好 句法 检查 on 括号里的 一元 运营商
表达式如:

打印定义(&foo,&bar,&baz);
打印 uc("foo","bar","baz");
undef($foo,&bar);

曾经在早期版本中被意外允许,并产生不可预测的行为。
一些以这种方式使用时会产生辅助警告; 其他人默默地做错了
事情。

大多数期望单个参数的一元运算符的括号形式现在确保
不会使用多个参数调用它们,从而使语法如上所示
错误。 通常的行为:

打印定义的 &foo, &bar, &baz;
打印 uc "foo", "bar", "baz";
undef $foo, &bar;

保持不变。 见perlop。

运营商 支持 本地人 整数 宽度
位运算符 (& | ^ ~ << >>) 现在在完整的原生整数宽度上运行(精确的
其大小在 $Config{ivsize} 中可用)。 例如,如果您的平台是
本机 64 位,或者如果 Perl 已配置为使用 64 位整数,这些操作
适用于 8 个字节(与 4 位平台上的 32 个字节相反)。 为了便携性,请务必
屏蔽掉一元“~”结果中的多余位,例如“~$x & 0xffffffff”。

优化 安全 功能
更多潜在的不安全操作会污染其结果以提高安全性。

返回的“passwd”和“shell”字段 获取(), 获取pwnam()获取pwuid() 旨在
现在被污染了,因为用户可以影响他们自己的加密密码和登录shell。

修改的变量 读取(), 和返回的消息 msgrcv() (及其对象-
面向接口 IPC::SysV::Msg::rcv) 也被污染,因为其他不受信任的
进程可以出于恶意目的修改消息和共享内存段。

更多 实用 光字 原型 (*)
裸字原型已被合理化,以使其能够用于覆盖内置函数
接受裸词并以特殊方式解释它们,例如“要求”或“做”。

原型为“*”的参数现在将在子例程中作为简单的
标量或作为对 typeglob 的引用。 请参阅 perlsub 中的“原型”。

“要求” “做” 五月 be 被覆盖
“require”和“do 'file'”操作可以通过导入子程序在本地覆盖
相同的名称到当前包中(或通过将它们全局导入到
核心::全局::命名空间)。 覆盖“require”也会影响“use”,前提是
覆盖在编译时可见。 请参阅 perlsub 中的“覆盖内置函数”。

$^X 变量 五月 现在 它们在许多情况下都能提供类似的结果。 名称 不再 一种 字符
以前,$^X 是 ${"\cX"} 的同义词,但 $^XY 是一​​个语法错误。 现在变量
以控制字符开头的名称可以任意长。 然而,对于
兼容性原因,这些变量 必须 用大括号写成“${^XY}”
例如。 "${^XYZ}" 与 ${"\cXYZ"} 同义。 多于一个的变量名
控制字符,例如“${^XY^Z}”,是非法的。

旧的语法没有改变。 和以前一样,'^X' 可以是文字控制-X
字符或两个字符的序列 `caret' 加 `X'。 当省略大括号时,
变量名在控制字符之后停止。 因此“$^XYZ”仍然是同义词
像以前一样使用 "$^X . "YZ""。

和以前一样,词法变量的名称不能以控制字符开头。 作为
以前,名称以控制字符开头的变量总是被强制在
包“主要”。 所有这些变量都是为将来的扩展保留的,除了那些
以“^_”开头,用户程序可能会用到,保证不会获取
在 Perl 的任何未来版本中的特殊含义。

全新 变量 $^C 反映 “-C” 开关
$^C 有一个布尔值,它反映 perl 是否在仅编译模式下运行(即
通过“-c”开关)。 由于 BEGIN 块是在这种条件下执行的,因此
变量使 perl 代码能够确定仅在正常情况下才有意义的操作
运行是有保证的。 见 perlvar。

全新 变量 $^V 包含 Perl的 版本 as a 绳子
$^V 包含 Perl 版本号作为一个字符串组成的字符,其序数
匹配版本号,即 v5.6.0。 这可用于字符串比较。

有关示例,请参阅“支持表示为序数向量的字符串”。

可选 Y2K 警告
如果 Perl 是用定义的 cpp 宏“PERL_Y2KWARN”构建的,它会发出可选的警告
将数字 19 与另一个数字连接时。

在运行 Configure 时,必须特别启用此行为。 看 载点
自述文件.Y2K.

阵列 现在 时刻 插值 双引号 字符串
在双引号字符串中,现在无论如何都会插入数组。 之前的行为
perl 5 的版本是,如果数组已被插入,则数组将插入到字符串中
在编译字符串之前提到过,否则 Perl 会引发致命的编译 -
时间错误。 在 5.000 到 5.003 版本中,错误是

文字@example 现在需要反斜杠

在 5.004_01 到 5.6.0 版本中,错误是

在字符串中,@example 现在必须写为 \@example

这里的想法是让人们养成写“fred\@example.com”的习惯。
想要一个字面的“@”符号,就像他们总是写“给我回我的\$5”一样
他们想要一个字面意思的“$”符号。

从 5.6.1 开始,当 Perl 现在看到双引号字符串中的“@”符号时,它 时刻
尝试插入数组,无论该数组是否已被使用或
已经声明了。 致命错误已降级为可选警告:

字符串中@example 的可能意外插值

这警告你“[电子邮件保护]" 将变成 "fred.com" 如果你不这样做
反斜杠“@”。 看 http://perl.plover.com/at-error.html 有关更多详细信息
历史在这里。

@- @+ 提供 开始/结束 抵消 of 正则表达式 火柴
新的魔术变量@- 和@+ 分别提供起始和结束偏移量,
$&、$1、$2 等。请参阅 perlvar 了解详细信息。

模块 实用语


模块
属性
Perl 在内部用作 pragma 时,该模块还提供了一种获取
子程序和变量属性。 查看属性。

B Perl 编译器套件已为此版本进行了广泛的重新设计。 更多的
在 Compiler 下运行时,标准 Perl 测试套件通过,但仍然存在
实现生产质量编译的可执行文件的重要途径。

注意:编译器套件仍然是高度实验性的。 这
生成的代码可能不正确,即使它设法执行
没有错误。

基准
总体而言,Benchmark 结果表现出更低的平均误差和更好的计时精度。

您现在可以运行测试 n 秒而不是猜测正确的测试次数
运行:例如,timethese(-5, ...) 将运行每个代码至少 5 个 CPU 秒。 零作为
“重复次数”的意思是“至少 3 个 CPU 秒”。 输出格式有
也变了。 例如:

使用基准;$x=3;timethese(-5,{a=>sub{$x*$x},b=>sub{$x**2}})

现在将输出如下内容:

基准测试:运行 a、b,每个至少 5 个 CPU 秒......
a:5 挂钟秒(5.77 usr + 0.00 sys = 5.77 CPU)@ 200551.91/s (n=1156516)
b:4 秒挂钟(5.00 usr + 0.02 sys = 5.02 CPU)@ 159605.18/s (n=800686)

新功能:“每个至少 N 个 CPU 秒……”、“挂钟秒”和“@
操作数/CPU 秒(n=操作数)”。

时间这些() 现在返回对包含测试的 Benchmark 对象散列的引用
结果,键入测试名称。

时间这个() 现在返回 Benchmark 结果对象中的迭代字段而不是
0.

时间这些(), 时间这个(),并且新的 厘米这些() (见下文)也可以采用一种格式
'none' 的说明符以抑制输出。

新功能 计数() 就像 时间() 除了它需要一个 TIME 而不是
一个 COUNT。

新功能 厘米这些() 打印一个图表,比较返回的每个测试的结果
时间这些() 称呼。 对于每对可能的测试,百分比速度
显示差异(迭代/秒或秒/迭代)。

有关其他详细信息,请参阅基准测试。

字节加载器
ByteLoader 是用于生成和运行 Perl 字节码的专用扩展。 看
字节加载器。

常数
现在可以使用参考。

新版本还允许在常量名称中使用前导下划线,但不允许
双前导下划线(如“__LINE__”)。 不允许使用其他一些名称或
警告,包括 BEGIN、END 等。一些被强制进入 main 的名称:
曾经在某些情况下静默失败; 现在它们是致命的(在 main:: 之外)和
可选警告(在 main:: 内)。 检测常数是否具有的能力
添加了给定名称的设置。

见常数。

字符
此 pragma 实现了 "\N" 字符串转义。 参见字符名称。

数据::倾销者
可以指定“Maxdepth”设置以避免冒险进入深度数据
结构。 见数据::倾销者。

XSUB 的实现 倾倒() 如果“Useqq”设置,现在会自动调用
未使用。

转储“qr//”对象工作正常。

DB "DB" 是一个实验性模块,它向 Perl 的调试公开了一个干净的抽象
API。

数据库文件
DB_File 现在可以使用 Berkeley DB 版本 1、2 或 3 构建。参见
“ext/DB_File/Changes”。

开发::DProf
Devel::DProf,已添加 Perl 源代码分析器。 请参阅开发:: DProf 和
dprofpp。

开发::偷看
Devel::Peek 模块提供对 Perl 内部表示的访问
变量和数据。 是XS程序员的数据调试工具。

转储值
Dumpvalue 模块提供 Perl 数据的屏幕转储。

动力装载机
DynaLoader 现在支持 dl_unload_file() 在支持的平台上运行
使用卸载共享对象 关闭().

Perl 还可以选择性地安排卸载由
珀尔。 要启用此功能,请使用配置选项构建 Perl
“-Accflags=-DDL_UNLOAD_ALL_AT_EXIT”。 (如果您将 Apache 与
mod_perl。)

英语
$PERL_VERSION 现在代表 $^V(一个字符串值)而不是 $](一个数字
值)。

Env Env 现在支持访问环境变量,如 PATH 作为数组变量。

Fcntl
添加了更多 Fcntl 常量:F_SETLK64、F_SETLKW64、O_LARGEFILE 用于大文件(更多
超过 4GB)访问(注意:O_LARGEFILE 会自动添加到 系统打开() 标志如果
已配置大文件支持,这是默认设置),Free/Net/OpenBSD 锁定
行为标志 F_FLOCK、F_POSIX、Linux F_SHLCK 和 O_ACCMODE:组合掩码
O_RDONLY、O_WRONLY 和 O_RDWR。 这 寻找()/系统搜索() 常量 SEEK_SET、SEEK_CUR、
和 SEEK_END 可以通过 ":seek" 标签获得。 这 修改()/STAT() S_IF* 常量
和 S_IS* 函数可以通过 ":mode" 标签获得。

文件::比较
A 比较文本() 功能已添加,允许自定义比较功能。
请参阅文件::比较。

文件::查找
File::Find 现在可以正常工作 通缉() 函数要么是自动加载的,要么是一个
象征性的参考。

导致 File::Find 在修剪 top- 时丢失工作目录的错误
级别目录已得到修复。

File::Find 现在还支持其他几个选项来控制其行为。 它可以
如果指定了“跟随”选项,则跟随符号链接。 启用“no_chdir”
选项将使 File::Find 在行走时跳过更改当前目录
目录。 “untaint”标志在启用污点检查的情况下运行时非常有用。

请参阅文件::查找。

文件::全局
这个扩展实现了 BSD 风格的文件通配。 默认情况下,它也会被使用
为内部实施 地球仪() 操作员。 请参阅文件::全局。

文件::规格
新方法已添加到 File::Spec 模块: 开发空() 返回名称
空设备(Unix 上的 /dev/null)和 临时目录() 临时目录的名称
(一般 / tmp目录 在 Unix 上)。 现在还有方法可以在绝对值和
相关文件名: 绝对2rel()rel2abs(). 与操作系统兼容
在文件路径中指定卷名, 分割路径(), 拆分目录()目录()
添加了方法。

文件::规范::函数
新的 File::Spec::Functions 模块为 File::Spec 提供了一个函数接口
模块。 允许速记

$fullname = catfile($dir1, $dir2, $file);

而不是

$fullname = File::Spec->catfile($dir1, $dir2, $file);

Getopt::长
Getopt::Long 许可已更改为允许 Perl 艺术许可以及
通用公共许可证。 它曾经只是 GPL,这妨碍了想要的非 GPL 应用程序
使用 Getopt::Long。

Getopt::Long 鼓励使用 Pod::Usage 来生成帮助消息。 例如:

使用 Getopt::Long;
使用 Pod::Usage;
我的 $man = 0;
我的 $help = 0;
GetOptions('help|?' => \$help, man => \$man) 或 pod2使用(2);
pod2使用(1) 如果 $help;
pod2usage(-ex​​itstatus => 0, -verbose => 2) 如果 $man;

__结尾__

=head1 名字

示例 - 使用 Getopt::Long 和 Pod::Usage

=head1 概要

示例 [选项] [文件 ...]

选项:
-help 简短的帮助信息
-man 完整文档

=head1 选项

=超过8

=项目B<-帮助>

打印简短的帮助消息并退出。

=项目B<-人>

打印手册页并退出。

=返回

=head1 描述

乙将读取给定的输入文件并做一些事情
对其内容有用。

=切割

有关详细信息,请参阅 Pod::Usage。

阻止非选项回调 <> 被指定为第一个的错误
参数已被修复。

要将字符 < 和 > 指定为选项起始符,请使用 ><。 但是请注意,
强烈反对更改选项启动器。

IO 写()系统写入() 现在将接受调用的单参数形式,因为
与 Perl 的一致性 系统写入().

您现在可以创建基于 TCP 的 IO::Socket::INET,而无需强制进行连接尝试。
这允许您配置其选项(例如使其非阻塞),然后调用
connect() 手动。

一个错误阻止了 IO::Socket::协议() 访问者从未返回
正确值已更正。

IO::Socket::connect 现在使用非阻塞 IO 而不是 警报() 做连接
超时。

IO::Socket::accept 现在使用 选择() 而不是 警报() 做超时。

IO::Socket::INET->new 现在设置 $! 正确失败。 $@ 仍然设置为向后
兼容性。

JPL Java Perl Lingo 现在随 Perl 一起分发。 有关更多信息,请参阅 jpl/README。

lib“use lib”现在清除任何尾随的重复条目。 “no lib”删除所有命名的
条目。

数学::BigInt
bigint 现在支持按位运算“<<”、“>>”、“&”、“|”和“~”。

数学::复杂
访问器方法 Re、Im、arg、abs、rho 和 theta 现在也可以充当修改器
(存取器 $z->关于(), 增变器 $z->Re(3))。

类方法“display_format”和对应的对象方法
"display_format",除了只接受一个参数,现在还可以接受一个
参数哈希。 参数哈希的识别键是“样式”,对应于
旧的一个参数大小写,和两个新参数:“格式”,这是一个
打印输出()-style 格式字符串(默认通常为“%.15g”,您可以恢复到
默认通过将格式字符串设置为“undef”)用于复杂的两个部分
number 和“polar_pretty_print”(默认为 true),用于控制是否尝试
试图识别 pi (2pi, pi/2) 的小倍数和有理数
极坐标复数的参数(角度)。

潜在的破坏性变化是,在列表上下文中,这两种方法现在 回报
参数 哈希, 而不仅仅是“样式”参数的值。

数学::三角
一点点径向三角(圆柱和球面),径向坐标
转换,并添加了大圆距离。

Pod::解析器,Pod::InputObjects
Pod::Parser 是用于解析和选择 pod 文档部分的基类
来自输入流。 该模块负责识别 pod 段落和
输入中的命令并将解析的段落和命令交给用户定义
可以自由地解释或翻译它们认为合适的方法。

Pod::InputObjects 定义了 Pod::Parser 需要的一些输入对象,用于高级
除了名称和文本之外,Pod::Parser 用户还需要更多关于命令的信息。

从 Perl 5.6.0 版本开始,Pod::Parser 现在是官方认可的“基本解析器”
代码”推荐用于所有 pod2xxx 翻译器。Pod::Text (pod2text) 和
Pod::Man (pod2man) 已经转换为使用 Pod::Parser 并努力
转换 Pod::HTML (pod2html) 已经在进行中。 如有任何问题或意见
关于 pod 解析和翻译问题和实用程序,请使用
[电子邮件保护] 邮件列表。

有关更多信息,请参阅 Pod::Parser 和 Pod::InputObjects。

Pod::检查器,podchecker
根据 perlpod,此实用程序会检查 pod 文件的语法是否正确。 明显的
错误被标记为这样,而对于可能出现的错误打印警告
优雅地处理。 检查表尚未完成。 请参阅 Pod::Checker。

Pod::ParseUtils, Pod::查找
这些模块提供了一组主要用于 pod 翻译器的小工具。
Pod::Find 遍历目录结构并返回找到的 pod 文件,以及它们的
规范名称(如“File::Spec::Unix”)。 Pod::ParseUtils 包含 Pod::列表 (有用
用于存储 pod 列表信息), Pod::超链接 (用于解析“L<>”的内容
序列)和 Pod::缓存 (用于缓存有关 pod 文件的信息,例如链接节点)。

Pod::选择,Podselect
Pod::Select 是 Pod::Parser 的子类,它提供了一个名为“podselect()"
从输入流中过滤掉用户指定的原始 pod 文档部分。
podselect 是一个脚本,它提供对 Pod::Select 从其他脚本的访问
用作过滤器。 请参阅 Pod::Select。

Pod::使用情况,pod2usage
Pod::Usage 提供了函数“pod2usage()" 打印 Perl 的使用信息
基于其嵌入式 pod 文档的脚本。 这 pod2usage() 功能一般是
对所有脚本作者都很有用,因为它允许他们编写和维护单一源
(pods)用于文档,从而消除创建和维护冗余的需要
使用消息文本包含 Pod 中已有的信息。

还有一个 pod2usage 脚本,可以从其他类型的脚本中使用
从 pod 打印使用消息(即使对于嵌入了 pod 的非 Perl 脚本)
注释)。

有关详细信息和示例,请参阅 Pod::Usage。

Pod::Text 和 Pod::Man
Pod::Text 已被重写为使用 Pod::Parser。 尽管 pod2text() 仍然可用
为了向后兼容,该模块现在有一个新的首选接口。 看
Pod::Text 了解详情。 新的 Pod::Text 模块很容易子类化以进行调整
到输出,以及两个这样的子类(Pod::Text::Termcap 用于手册页样式的粗体和
使用 termcap 信息加下划线,Pod::Text::Color 使用 ANSI 颜色进行标记
序列)现在是标准的。

pod2man 已经变成了一个模块 Pod::Man,它也使用了 Pod::Parser。 在里面
处理,与节标题中的引号相关的几个突出错误,引用
代码转义,嵌套列表已得到修复。 pod2man 现在是一个包装脚本
围绕这个模块。

SDBM_文件
一个 EXISTS 方法已添加到此模块(和 sdbm_exists() 已添加到
底层 sdbm 库),所以现在可以调用存在于 SDBM_File 绑定的哈希和
得到正确的结果,而不是运行时错误。

一个错误,当碰巧读取多个磁盘块时可能导致数据丢失
从数据库中单个 拿来() 已修复。

系统::系统日志
Sys::Syslog 现在使用 XSUB 从 syslog.h 访问设施,因此它不再需要
syslog.ph 存在。

系统::主机名
Sys::Hostname 现在使用 XSUB 来调用 C 库的 gethostname() or 名() 如果他们
存在。

术语::ANSI颜色
Term::ANSIColor 是一个非常简单的模块,用于提供对
大多数 ANSI 终端都支持 ANSI 颜色和突出显示转义序列
模拟器。 它现在包含在标准中。

时间::本地
时间本地()时间() 用于在以下情况下静默返回虚假结果的函数
日期超出机器的整数范围。 他们现在始终如一 发牢骚() 如果
日期落在不受支持的范围内。

Win32
对于返回的所有函数,列表上下文中的错误返回值已更改
值列表。 以前这些函数返回一个包含单个元素的列表
“undef”如果发生错误。 现在这些函数返回这些空列表
情况。 这适用于以下功能:

Win32::FsType
Win32::获取操作系统版本

其余函数保持不变,即使在错误中也继续返回“undef”
列出上下文。

已添加 Win32::SetLastError(ERROR) 函数作为对
Win32::GetLastError() 功能。

新的 Win32::GetFullPathName(FILENAME) 返回完整的绝对路径名
标量上下文中的 FILENAME。 在列表上下文中,它返回一个包含两个元素的列表
完全限定的目录名和文件名。 参见 Win32。

加载器
XSLoader 扩展是 DynaLoader 的更简单替代方案。 请参阅 XSLoader。

DBM 过滤器
所有 DBM 模块都添加了一个名为“DBM 过滤器”的新功能——DB_File,
GDBM_File、NDBM_File、ODBM_File 和 SDBM_File。 DBM 过滤器添加了四种新方法
每个 DBM 模块:

过滤器存储键
过滤器存储值
过滤器获取键
过滤器获取值

这些可用于在键值对写入之前过滤键值对
数据库或刚从数据库中读取它们之后。 请参阅 perldbmfilter 了解更多信息
信息。

实用语
“use attrs”现已过时,仅用于向后兼容。 它已经
替换为“sub:attributes”语法。 请参阅 perlsub 中的“子程序属性”和
属性。

词法警告编译指示,“使用警告;”,控制可选警告。 见 perllexwarn。

“使用文件测试”来控制文件测试的行为(“-r”“-w”...)。 目前只有一个
subpragma 实现,“使用文件测试‘访问’;”,使用 ACCESS(2) 或等同于
检查权限而不是使用 统计(2) 像往常一样。 这在文件系统中很重要
有 ACL(访问控制列表): 统计(2) 可能会说谎,但是 ACCESS(2) 知道得更好。

“open” pragma 可用于指定句柄构造函数的默认规则(例如
打开()) 和 qx//. 两个伪学科 ":raw" 和 ":crlf" 目前是
在 DOS 衍生平台上受支持(即 binmode 不是空操作)。 也可以看看
"二进制模式() 可用于设置 :crlf 和 :raw 模式”。

公用事业 更改


德普罗普
“dprofpp”用于显示使用“Devel::DProf”生成的配置文件数据。 请参见 dprofpp。

查找2perl
“find2perl”实用程序现在使用 File::Find 模块的增强功能。 这
支持 -depth 和 -follow 选项。 Pod 文档也包含在
脚本。

H2XS
“h2xs”工具现在可以与“C::Scan”(可从 CPAN 获得)结合使用
自动解析现实生活中的头文件。 “-M”、“-a”、“-k”和“-o”选项是
新。

半透明
“perlcc”现在支持 C 和字节码后端。 默认情况下,它从
简单的 C 后端而不是优化的 C 后端。

对非 Unix 平台的支持已得到改进。

文件
“perldoc”已经过重新设计以避免可能的安全漏洞。 默认情况下不会让
本身以超级用户身份运行,但您仍然可以使用 -U 切换到尝试让它下降
特权第一。

Perl的 调试
添加了许多错误修复和增强功能 perl5db.pl,Perl 调试器。 帮助
文件已重新排列。 新命令包括“< ?”、“> ?”和“{ ?” 列出
目前的行动,“男人 文档页” 在某些 perl 文档集上运行您的文档查看器,并支持
引用的选项。 帮助信息已重新排列,如果出现以下情况,应该可以再次查看
你正在使用 作为你的寻呼机。 堵塞了一个严重的安全漏洞——你应该
立即删除之前安装的所有旧版本的 Perl 调试器
从您的系统中释放,一直回到 perl3,以避免被它咬住。

优化 文档


许多特定于平台的自述文​​件现在是 perl 安装的一部分。 看
perl 获取完整列表。

perlapipod
公共 Perl API 函数的官方列表。

perlboot.pod
面向对象的 Perl 初学者教程。

perlcompile.pod
使用 Perl 编译器套件的介绍。

perldbmfilter.pod
关于如何使用 DBM 过滤器工具的文档。

perldebug.pod
所有与运行 Perl 调试器无关的材料,加上所有低级胆量
有可能破坏调试器的临时用户的风险的细节已从
旧联机帮助页到下面的下一个条目。

perldebguts.pod
这个新的联机帮助页包含与 Perl 无关的非常低级的材料
调试器,但与调试 Perl 本身略有关系。 它还包含一些神秘的
调试过程如何工作的内部细节,可能只有他们感兴趣
Perl 调试器的开发人员。

perlfork.pod
关于的注意事项 叉子() 目前可用于 Windows 平台的仿真。

perlfilter.pod
编写 Perl 源过滤器的介绍。

perlhack.pod
一些关于破解 Perl 源代码的指南。

perltern.pod
Perl 源代码中的内部函数列表。 (列表当前为空。)

perllexwarn.pod
有关词法范围警告类别的介绍和参考信息。

perlnumber.pod
有关在 Perl 中表示的数字的详细信息。

perlopentut.pod
使用教程 打开() 有效。

perlrefutt.pod
介绍参考文献要点的教程。

perltootc.pod
关于管理对象模块的类数据的教程。

足足类动物
讨论有朝一日可能在 Perl 中支持的最常见的功能。

perluunicode.pod
Perl 中 Unicode 支持特性的介绍。

性能 增强


简易 种类() 运用 { $a <=> $b } 喜欢 旨在 优化
许多常见 种类() 使用简单内联块的操作现在优化为更快
性能。

优化 任务 词法 变量
赋值语句的 RHS 中的某些操作已优化为直接设置
LHS 上的词法变量,消除了冗余的复制开销。

更快 子程序 电话
内部如何处理子程序调用的微小变化提供了边际改进
在性能上。

删除(), 每个(), values() 哈希 迭代 旨在
返回的哈希值 删除(), 每个(), values() 和列表上下文中的哈希是
散列中的实际值,而不是副本。 这导致明显更好
性能,因为它在大多数情况下消除了不必要的复制。

装置 配置 建设


-杜斯线程 手段 东西 不同
-Dusethreads 标志现在通过以下方式启用实验性基于解释器的线程支持
默认。 要获得 5.005 中的实验线程的味道,您需要
使用“-Dusethreads -Duse5005threads”运行配置。

从 v5.6.0 开始,解释器线程支持仍然缺乏创建新线程的方法
来自 Perl(即“使用线程;”将不适用于解释器线程)。 “使用线程;”
当您为配置指定 -Duse5005threads 选项时继续可用,错误
和所有。

注意:对线程的支持仍然是一项实验性功能。
接口和实现会发生突然和剧烈的变化。

全新 配置 标志
可以通过运行 Configure 在 Configure 命令行上启用以下新标志
带有“-Dflag”。

使用多重性
usethreads useithreads(新的解释器线程:还没有 Perl API)
usethreads use5005threads(5.005 中的线程)

use64bitint(等于现在已弃用的“use64bits”)
使用64bitall

使用longdouble
使用更多位
使用大文件
使用袜子(仅支持 SOCKS v5)

螺纹度 64位 现在 更多 大胆
允许使用线程和使用 64 位的配置选项现在更多
大胆的意思是他们不再有已知的操作系统的明确列表
线程/64 位功能。 换句话说:如果您的操作系统具有必要的
API 和数据类型,您应该能够继续使用它们,用于线程
配置 -Dusethreads,对于 64 位,通过 Configure -Duse64bitint 或
如果您的系统具有 64 位宽数据类型,则隐式。 另请参阅“64 位支持”。

双打
一些平台有“long doubles”,浮点数的范围甚至比
普通的“双打”。 要为 Perl 的标量启用 long double,请使用 -Duselongdouble。

-Dusemorebits
您可以使用 -Dusemorebits 启用 -Duse64bitint 和 -Duselongdouble。 也可以看看
“64 位支持”。

-Duse大文件
一些平台支持能够处理大文件的系统 API(通常,
大于 XNUMX GB 的文件)。 如果您要求,Perl 将尝试使用这些 API
-Duse大文件。

有关详细信息,请参阅“大文件支持”。

安装usrbinperl
您可以使用“配置 -Uinstallusrbinperl”,这会导致 installperl 跳过安装
perl 也作为 /usr/bin/perl。 如果您不想修改,这很有用 / usr / bin 对于一些
原因或其他但有害,因为许多脚本假设在 /usr/bin/perl 中找到 Perl。

袜子 支持
您可以使用“Configure -Dusesocks”,这会导致 Perl 探测 SOCKS 代理协议
库(v5,不是 v4)。 有关 SOCKS 的更多信息,请参阅:

http://www.socks.nec.com/

“-一个”
您可以使用配置“-A”开关“后期编辑”配置变量。 编辑
在平台特定的提示文件被处理之后但之前发生
实际的配置过程开始。 运行“Configure -h”以找出完整的“-A”
语法。

品牌影响力提升 装置 目录
丰富了安装结构,提高了维护保养的支持
多个版本的 perl,为供应商提供的模块、脚本和
联机帮助页,并简化对本地添加的模块、脚本和联机帮助页的维护。 看
有关完整详细信息,请参阅 INSTALL 文件中有关安装目录的部分。 为了
大多数用户从源代码构建和安装,默认值应该没问题。

如果您之前使用“Configure -Dsitelib”或“-Dsitearch”来设置特殊值
库目录,您可能希望考虑使用新的“-Dsiteprefix”设置
反而。 此外,如果您希望重新使用早期版本的 perl 中的 config.sh 文件,
您应该确保检查 Configure 是否为新目录做出了明智的选择。
有关完整的详细信息,请参阅安装。

平台 具体的 变化


支持 平台
· Thread 扩展现在支持 Mach CThreads(NEXTSTEP、OPENSTEP)。

· 现在支持 GNU/Hurd。

· 现在支持狂想曲/达尔文。

· 现在支持 EPOC(在 Psion 5 上)。

· cygwin 端口(以前的cygwin32)得到了很大的改进。

DOS
· Perl 现在适用于 djgpp 2.02(和 2.03 alpha)。

· 环境变量名称不再转换为大写。

· 不正确的反引号退出代码已得到修复。

· 这个端口继续使用它自己的内置通配符(不是 File::Glob)。

OS390 (开放版 MVS)
此版本中未更新对此 EBCDIC 平台的支持。 有
难以协调 Perl 将 UTF-8 标准化作为其内部表示
对于带有 EBCDIC 字符集的字符,因为两者不兼容。

目前还不清楚未来的版本是否会更新对这个平台的支持,但是
可能性存在。

VMS
对配置、构建、测试和安装进行了大量修订和扩展
适应核心变化和 VMS 特定选项的过程。

扩展 %ENV 处理代码以允许运行时映射到逻辑名称、CLI 符号和 CRTL
环境数组。

子进程调用代码的扩展以接受文件规范作为命令“动词”。

添加到 Perl 命令行处理使用默认文件类型和识别的能力
Unix 风格的“2>&1”。

扩展 File::Spec::VMS 例程,并集成到 ExtUtils::MM_VMS。

ExtUtils::MM_VMS 的扩展,更灵活地处理复杂的扩展。

Unix 语法路径开头的裸词可能被视为文本,而不仅仅是逻辑
名称。

Perl 内部使用的几个逻辑名称的可选安全翻译。

杂项错误修复和新核心代码移植到 VMS。

很高兴地感谢许多贡献 VMS 补丁、测试、
和想法。

Win32
Perl 现在可以模拟 叉子() 在内部,使用运行在不同环境中的多个解释器
并发线程。 必须在构建时启用此支持。 见 perlfork
详细资料。

当给定一个只包含驱动器名的路径名时,例如“A:”, 打开目录()
STAT() 现在使用驱动器的当前工作目录而不是驱动器根目录。

记录了 Win32:: 命名空间中的内置 XSUB 函数。 参见 Win32。

$^X 现在包含正在运行的可执行文件的完整路径名。

A Win32::GetLongPathName() 提供功能来补充 Win32::GetFullPathName()
Win32::GetShortPathName(). 参见 Win32。

POSIX::uname() 得到支持。

system(1,...) 现在返回真正的进程 ID 而不是进程句柄。 杀() 接受
任何真实的进程 ID,而不是严格地从 system(1,...) 返回值。

为了更好地与 Unix 兼容,现在可以使用“kill(0, $pid)”来测试
进程存在。

支持“外壳”模块。

添加了对在 Windows 95 中在 command.com 下构建 Perl 的更好支持。

默认情况下以二进制模式读取脚本以允许 ByteLoader(和过滤机制
在一般情况下)正常工作。 为了兼容性,DATA 文件句柄将设置为 text
如果在包含 __END__ 或
__DATA__ 令牌; 如果不是,则 DATA 文件句柄将以二进制模式保持打开状态。 早些时候
版本总是以文本模式打开 DATA 文件句柄。

地球仪() 运算符是通过“File::Glob”扩展实现的,它支持 glob
C shell 的语法。 这增加了灵活性 地球仪() 运营商,但有
对于依赖于较旧的 globbing 语法的程序,这可能是兼容性问题。 如果你
想要保持与旧语法的兼容性,您可能想要运行 perl
“-MFile::DosGlob”。 有关详细信息和兼容性信息,请参阅 File::Glob。

特性 错误 固定


on 空的
$/ 设置为“undef”,“slurping”一个空文件返回一个零长度的字符串(而不是
在 $/ 设置为“undef”后第一次读取 HANDLE 时,就像过去一样)。
进一步阅读产生“undef”。

这意味着以下内容会将“foo”附加到一个空文件(它过去什么都不做):

perl -0777 -pi -e 's/^/foo/' empty_file

的行为:

perl -pi -e 's/^/foo/' empty_file

不变(它继续将文件留空)。

“评估 '……'” 改善
行号(反映在 呼叫者() 和大多数诊断)在“eval '...'”中是
在此处涉及文档的地方通常不正确。 这已得到纠正。

出现在“eval '...'”中的变量的词法查找
他们自己在“eval '...'”中被称为正在寻找词法的错误位置。 这
词法搜索现在正确地在子程序的块边界处结束。

在 "eval {...}" 中使用 "return" 导致 $@ 在没有时无法正确重置
eval 内发生异常。 这已被修复。

当它们作为替换出现时,这里的文件的解析曾经有缺陷
“eval 's/.../.../e'”中的表达式。 这已被修复。

ALL / 全部 汇编 错误 旨在 true 错误
在编译时遇到的一些“错误”是在出现警告时必然生成的
最终终止该计划。 这使更多此类错误能够在
单次运行,而不是在遇到的第一个错误时硬停止。

报告此类错误的机制已重新实现以排队编译时
错误并在编译结束时将它们报告为真正的错误而不是作为
警告。 这修复了错误消息以警告形式泄漏的情况
在运行时使用“eval STRING”编译代码时,也允许此类错误
使用 "eval "..."" 可靠地捕获。

含蓄地 关闭 文件句柄 旨在 更安全
有时会隐式关闭文件句柄(就像它们被本地化时一样,而 Perl
在退出范围时自动关闭它们)可能会无意中设置 $? 或 $!。 这
已更正。

宠物行为研究 of 名单 is 更多 一贯
当获取一个文字列表的切片(而不是数组或散列的切片)时,Perl
如果结果碰巧由所有 undef 值组成,则用于返回一个空列表。

新行为是在(且仅当)原始列表为空时生成一个空列表。
考虑以下示例:

@a = (1,undef,undef,2)[2,1,2];

旧的行为会导致 @a 没有元素。 新行为确保
它有三个未定义的元素。

特别注意,以下情况的切片行为保持不变:

@a = ()[1,2];
@a = (getpwent)[7,0];
@a = (anything_returning_empty_list())[2,1,2];
@a = @b[2,1,2];
@a = @c{'a','b','c'};

见perldata。

"(\$)" 原型 $foo{a}
标量引用原型现在可以正确地允许该插槽中的哈希或数组元素。

“去 &sub" 自动加载
“goto &sub”构造在 &sub 碰巧自动加载时正常工作。

“-裸词” 允许 “用 整数”
以“-”开头的裸词的自动引用在以前的版本中不起作用
启用了“整数”编译指示。 这已被修复。

故障 in 破坏()
当析构函数中的代码抛出异常时,它在早期版本的
Perl,除非有人碰巧在析构函数之后查看 $@
碰巧跑了。 当启用警告时,此类故障现在作为警告可见。

语言环境 虫子 固定
打印输出()冲刺() 先前将数字语言环境重置回默认的“C”语言环境。
这已被修复。

根据本地数字区域设置格式化的数字(例如使用十进制逗号
而不是小数点)导致“不是数字”警告,即使在操作时
访问这些数字会产生正确的结果。 这些警告已被取消。

内存 泄漏
“eval 'return sub {...}'”构造有时可能会泄漏内存。 这已被修复。

非文件句柄构造函数的操作用于在无效时泄漏内存
文件句柄。 这已被修复。

修改@_ 的构造可能无法释放@_ 中的值,从而导致内存泄漏。
这已得到纠正。

子程序 存根 after 失败 子程序 电话
当在子程序中找不到子程序时,Perl 有时会创建空的子程序存根。
包裹。 这种情况阻止了后来的方法查找进入基本包。
这已得到纠正。

污点 失败 “-U”
在不安全模式下运行时,污点违规有时会导致静默失败。 这
已修复。

结束 “-C” 开关
用于运行 BEGIN 的先前版本 当 Perl 在仅编译模式下运行时,END 会阻塞。
由于这通常不是预期的行为,因此不再执行 END 块
当使用“-c”开关时,或者编译失败时。

有关在编译阶段结束时如何运行的信息,请参阅“支持 CHECK 块”。

潜力 泄漏 数据 文件句柄
使用“__DATA__”标记为包含
令牌。 程序有责任在完成读取后关闭它。

这个警告现在在文档中得到了更好的解释。 见perldata。

全新 or 更改 诊断


"%s" 变量 %s 掩盖了同一 %s 中的先前声明
(W misc) 在当前作用域中重新声明了“我的”或“我们的”变量,或者
语句,有效地消除了对前一个实例的所有访问。 这是
几乎总是一个印刷错误。 请注意,较早的变量仍将存在
直到作用域结束或直到所有指向它的闭包都被销毁。

“我的子”尚未实施
(F) 词法作用域的子程序尚未实现。 还是不要尝试了。

“我们的”变量 %s 重新声明
(W misc) 你似乎已经在当前声明了同一个全局
词法范围。

'! 仅在键入 %s 后才允许
(F) '!' 被允许进入 盒()解包() 只有在某些类型之后。 见“包”
函数

/ 无法计数
(F) 你有一个解包模板,指示一个计数长度的字符串,但你也有
为字符串指定了显式大小。 参见 perlfunc 中的“pack”。

/ 必须后跟 a、A 或 Z
(F) 你有一个解包模板,指示一个计数长度的字符串,它必须是
后跟字母 a、A 或 Z 中的一个以指示要使用的字符串类型
打开包装。 参见 perlfunc 中的“pack”。

/ 后必须跟 a*、A* 或 Z*
(F) 你有一个包模板指示一个计数长度的字符串,目前唯一的
可以计算长度的东西是 a*、A* 或 Z*。 参见 perlfunc 中的“pack”。

/ 必须遵循数字类型
(F) 您有一个包含“#”的解包模板,但这并没有遵循某些
数字解包规范。 参见 perlfunc 中的“pack”。

/%s/: 无法识别的转义 \\%c 已通过
(W regexp) 您使用了 Perl 无法识别的反斜杠字符组合。
这种组合出现在一个内插变量或一个以“'”分隔的正则中
表达。 从字面上理解这个角色。

/%s/: 无法识别的转义符 \\%c 在字符类中通过
(W regexp) 您使用了 Perl 无法识别的反斜杠字符组合
在字符类中。 从字面上理解这个角色。

/%s/ 应该写成“%s”
(W 语法)您使用了 Perl 期望找到字符串的模式,如
“加入”的第一个参数。 Perl 会处理匹配结果的真假
以 $_ 为字符串的模式,这可能不是您的想法。

%s() 调用太早,无法检查原型
(W 原型) 在解析器看到一个原型之前,你已经调用了一个具有原型的函数
它的定义或声明,并且 Perl 无法检查调用是否符合
原型。 您需要为
有问题的子例程,或在调用之前移动子例程定义以获取
适当的原型检查。 或者,如果您确定您正在调用
功能正常,您可以在名称前放置一个&符号以避免警告。
请参阅 perlsub。

%s 参数不是 HASH 或 ARRAY 元素
(F) 论据 存在() 必须是散列或数组元素,例如:

$foo{$bar}
$ref->{"susie"}[12]

%s 参数不是 HASH 或 ARRAY 元素或切片
(F) 论据 删除() 必须是散列或数组元素,例如:

$foo{$bar}
$ref->{"susie"}[12]

或散列或数组切片,例如:

@foo[$bar, $baz, $xyzzy]
@{$ref->[12]}{"susie", "queue"}

%s 参数不是子例程名称
(F) 论据 存在() 因为“exists &sub”必须是一个子程序名,而不是一个
子程序调用。 “exists &sub()”会产生这个错误。

%s 包属性可能与未来的保留字冲突:%s
(W 保留) 使用小写属性名称,它具有特定于包的处理程序。
有一天,这个名字可能对 Perl 本身有意义,即使它现在还没有。
也许您应该改用大小写混合的属性名称。 查看属性。

(清理中)%s
(W misc) 这个前缀通常表示一个 破坏() 方法提出了指示
例外。 由于系统通常在任意点调用析构函数
在执行期间,通常是很多次,警告只发出一次
对于任何数量的失败,否则会导致相同的消息
重复。

使用“G_KEEPERR”标志调度的用户回调失败也可能导致
这个警告。 请参阅 perlcall 中的“G_KEEPERR”。

<> 应该是引号
(F) 你写了“需要” 当你应该写“需要‘文件’”时。

尝试加入自己
(F) 你试图从内部加入一个线程,这是一项不可能完成的任务。 你
可能加入了错误的线程,或者您可能需要移动 加入() 给其他人
线程。

错误评估的替换模式
(F) 您已经使用 /e 开关来评估替换的替换,但是 perl
在要评估的代码中发现语法错误,很可能是意外的右括号
'}'。

重新分配() 忽视
(S) 一个内部程序称为 重新分配() 在从未有过的事情上 malloc()ed
首先。 必须的,但可以通过设置环境变量来禁用
"PERL_BADFREE" 为 1。

在条件中找到裸字
(W 裸字) 编译器在它期望一个条件的地方发现了一个裸字,它
通常表示一个 || 或 && 被解析为最后一个参数的一部分
先前的构造,例如:

打开 FOO || 死;

它也可能表示一个拼写错误的常量被解释为一个裸词:

使用常量 TYPO => 1;
if (TYOP) { 打印 "foo" }

“strict” pragma 有助于避免此类错误。

二进制数 > 0b11111111111111111111111111111111 非便携
(W 便携式) 您指定的二进制数大于 2**32-1 (4294967295) 和
因此在系统之间不可移植。 有关可移植性的更多信息,请参阅 perlport
关注。

位向量大小 > 32 不可移植
(W 可移植)使用大于 32 的位向量大小是不可移植的。

prime_env_iter 中的缓冲区溢出:%s
(W internal) VMS 特有的警告。 当 Perl 准备迭代时
%ENV,它遇到了一个太长的逻辑名称或符号定义,所以它是
截断为显示的字符串。

无法检查脚本“%s”的文件系统
(P) 由于某种原因,您无法检查脚本的文件系统是否有 nosuid。

无法为“%s”中的非标量 %s 声明类
(S) 目前,只有标量变量可以在一个特定的类限定符中声明
“我的”或“我们的”声明。 语义可以扩展到其他类型的变量
在未来。

无法在“%s”中声明 %s
(F) 只有标量、数组和散列变量可以声明为“我的”或“我们的”变量。
它们必须具有普通标识符作为名称。

不能忽略信号 CHLD,强制默认
(W 信号) Perl 检测到它正在使用 SIGCHLD 信号(有时
称为 SIGCLD)已禁用。 由于禁用此信号会干扰正确的
确定子进程的退出状态,Perl 已将信号重置为其
默认值。 这种情况通常表明父程序下
Perl 可能在运行(例如 cron)时很粗心。

不能修改非左值子程序调用
(F) 用于左值上下文的子程序应该这样声明,见
perlsub 中的“左值子程序”。

无法读取 CRTL 环境
(S) VMS 特有的警告。 Perl 试图从 CRTL 中读取 %ENV 的元素
内部环境阵列,发现阵列丢失。 你需要弄清楚
找出您的 CRTL 错放其环境或定义的位置 PERL_ENV_TABLES (见 perlvms)所以
没有搜索那个环境。

无法删除 %s: %s,正在跳过文件
(S) 您在未创建备份文件的情况下请求了就地编辑。 Perl 无法
删除原始文件以将其替换为修改后的文件。 文件被留下
未修改。

无法从左值子例程返回 %s
(F) Perl 检测到试图返回非法左值(例如临时或只读
values) 来自用作左值的子程序。 这是不允许的。

不能削弱非引用
(F) 你试图削弱一些不是参考的东西。 只有参考可以
被削弱。

字符类 [:%s:] 未知
(F)字符类[::]语法中的类未知。 见 perlre。

字符类语法 [%s] 属于字符类
(W unsafe) 字符类构造 [: :]、[= =] 和 [。 。] 去 字符
类,[] 是构造的一部分,例如:/[012[:alpha:]345]/. 备注
[= =] 和 [. .] 目前尚未实施; 他们只是占位符
未来的扩展。

常量不是 %s 引用
(F) 常量值(可能使用“use constant”编译指示声明)正在
取消引用,但它相当于错误的引用类型。 该消息表明
预期的引用类型。 这通常表示语法错误
取消引用常量值。 请参阅 perlsub 和常量中的“常量函数”。

常数(%s):%s
(F) 解析器在尝试定义重载时发现不一致
常量,或者在尝试查找“\N{...}”转义中指定的字符名称时。
也许您忘记加载相应的“重载”或“字符名”pragma? 看
字符和重载。

CORE::%s 不是关键字
(F) CORE:: 命名空间是为 Perl 关键字保留的。

已定义(@array)已弃用
(D) 定义() 通常对数组没有用,因为它检查未定义的
纯量 价值。 如果要查看数组是否为空,只需使用 "if (@array) { # not
空}”例如。

已定义(%hash)已弃用
(D) 定义() 通常对散列没有用,因为它会检查未定义的
纯量 价值。 如果你想查看散列是否为空,只需使用 "if (%hash) { # not
空}”例如。

没有产生有效的标题
请参阅服务器错误。

(你的意思是“本地”而不是“我们的”?)
(W misc) 请记住,“我们的”不会本地化声明的全局变量。 你有
在同一个词法范围内再次声明它,这似乎是多余的。

文档不包含数据
请参阅服务器错误。

输入有效 %s 失败
(F) 在 "use filetest" pragma 下,切换真实有效的 uids 或
gids 失败。

正则表达式中的 false [] 范围“%s”
(W regexp) 字符类范围必须以文字字符开始和结束,而不是
另一个字符类,如“\d”或“[:alpha:]”。 您的错误范围中的“-”是
解释为文字“-”。 考虑引用“-”、“\-”。 见 perlre。

文件句柄 %s 打开仅用于输出
(W io) 您试图从仅为写入而打开的文件句柄中读取。 如果你打算
它是一个读/写文件句柄,你需要用“+<”或“+>”或“+>>”打开它
而不是用“<”或什么都没有。 如果您只想从文件中读取,请使用“<”。
请参阅 perlfunc 中的“打开”。

群() 在关闭的文件句柄 %s
(W 关闭) 您尝试使用的文件句柄 群() 自己关闭了一段时间
在此之前。 检查您的逻辑流程。 群() 对文件句柄进行操作。 你是
试图打电话 群() 在同名的dirhandle上?

全局符号“%s”需要明确的包名
(F) 您已经说过“使用严格的变量”,这表明所有变量必须是
词法范围(使用“my”),预先使用“our”声明,或显式
有资格说明全局变量在哪个包中(使用“::”)。

十六进制数 > 0xffffffff 不可移植
(W 便携式) 您指定的十六进制数大于 2**32-1 (4294967295)
因此在系统之间不可移植。 有关可移植性的更多信息,请参阅 perlport
关注。

格式错误的 CRTL 环境值“%s”
(W internal) VMS 特有的警告。 Perl 试图读取 CRTL 的内部
环境数组,遇到一个没有用于分隔的“=”分隔符的元素
键值。 元素被忽略。

prime_env_iter 中格式错误的消息:|%s|
(W internal) VMS 特有的警告。 Perl 尝试读取逻辑名称或 CLI
准备迭代 %ENV 时的符号定义,但没有看到预期的
键和值之间的分隔符,因此该行被忽略。

非法的二进制数字 %s
(F) 您在二进制数中使用了 0 或 1 以外的数字。

非法二进制数字 %s 被忽略
(W 位)您可能试图在二进制数中使用 0 或 1 以外的数字。
二进制数的解释在有问题的数字之前停止。

vec 中的位数非法
(F) 中的位数 向量() (第三个参数)必须是从 1 到 XNUMX 的幂
32(或 64,如果您的平台支持)。

%s 中的整数溢出
(W 溢出) 您指定为一个的十六进制、八进制或二进制数
文字或作为论据 十六进制() or 八进制() 对你的架构来说太大了,并且有
已转换为浮点数。 在 32 位架构上,最大的
无溢出可表示的十六进制、八进制或二进制数为 0xFFFFFFFF,
分别为 037777777777 或 0b11111111111111111111111111111111。 注意 Perl
透明地将所有数字提升为浮点表示
内部——在后续操作中可能会丢失精度误差。

无效的 %s 属性:%s
子程序或变量的指示属性未被 Perl 或
用户提供的处理程序。 查看属性。

无效的 %s 属性:%s
Perl 无法识别子例程或变量的指示属性,或
通过用户提供的处理程序。 查看属性。

正则表达式中的 [] 范围“%s”无效
现在明确显示违规范围。

属性列表中的分隔符 %s 无效
(F) 在元素之间看到冒号或空格以外的东西
属性列表。 如果前一个属性有一个带括号的参数列表,也许
该名单过早终止。 查看属性。

子程序属性列表中的分隔符 %s 无效
(F) 在 a 的元素之间看到了冒号或空格以外的东西
子程序属性列表。 如果前一个属性有一个带括号的参数
列表,也许该列表过早终止。

离开有效 %s 失败
(F) 在 "use filetest" pragma 下,切换真实有效的 uids 或
gids 失败。

返回 %s 的左值子程序尚未实现
(F) 由于当前实现的限制,数组和哈希值不能被
在左值上下文中使用的子例程中返回。 请参阅 perlsub 中的“左值子程序”。

方法 %s 不被允许
请参阅服务器错误。

\N{} 上缺少 %sbrace%s
(F) 双引号中字符名称字面量 "\N{charname}" 的语法错误
上下文。

管道打开时缺少命令
(W 管道)您使用了“open(FH,“| command”)”或“open(FH,“command |”)”结构,
但命令丢失或空白。

“我的子”中缺少名称
(F) 词法作用域子例程的保留语法要求它们具有
可以找到它们的名称。

没有为 -%c 指定 %s
(F) 指示的命令行开关需要一个强制参数,但你没有
指定一个。

“our”中的变量 %s 不允许使用包名
(F) 在“我们的”声明中不允许使用完全限定的变量名,因为
在现有语义下没有多大意义。 这种语法是为将来保留的
扩展。

-%c 后不允许有空格
(F) 指定命令行开关的参数必须紧跟在
开关,没有中间的空间。

没有UTC偏移信息; 假设本地时间是UTC
(S) VMS 特有的警告。 Perl 无法找到本地时区偏移量,因此
它假设本地系统时间等于 UTC。 如果不是,请定义
逻辑名称 系统$TIMEZONE_DIFFERENTIAL 转换为秒数
需要添加到 UTC 以获取本地时间。

八进制数 > 037777777777 非便携
(W 便携式) 您指定的八进制数大于 2**32-1 (4294967295) 和
因此在系统之间不可移植。 有关可移植性的更多信息,请参阅 perlport
关注。

另请参阅 perlport 以编写可移植代码。

恐慌:del_backref
(P) 在尝试重置弱引用时内部一致性检查失败。

恐慌:孩子 popen errno 阅读
(F) fork child 返回了一个关于它的 errno 的难以理解的消息。

恐慌:magic_killbackrefs
(P) 尝试将所有弱引用重置为内部一致性检查失败
一个东西。

“%s”列表周围缺少括号
(W 括号) 你说了类似的话

我的 $foo, $bar = @_;

当你的意思是

我的 ($foo, $bar) = @_;

请记住,“我的”、“我们的”和“本地”的绑定比逗号更紧密。

可能在字符串中意外插入 %s
(W 模棱两可) 过去 Perl 会尝试猜测你是否想要一个数组
插值或文字@。 它不再这样做; 数组现在是 时刻
插入到字符串中。 这意味着如果您尝试以下操作:

打印 ”[电子邮件保护]";

并且数组@example 不存在,Perl 将打印“fred.com”,即
可能不是你想要的。 要在字符串中获得文字“@”符号,请添加反斜杠
在它之前,就像你会得到一个字面的“$”符号一样。

可能的 Y2K 错误:%s
(W y2k) 您正在将数字 19 与另一个数字连接起来,这可能是一个
潜在的 2000 年问题。

pragma "attrs" 已弃用,请改用 "sub NAME : ATTRS"
(W deprecated) 你写了这样的东西:

子域
{
使用 attrs qw(locked);
}

您应该改用新的声明语法。

子节点:锁定
{
...

“use attrs” pragma 现在已过时,仅用于向后提供 -
兼容性。 请参阅 perlsub 中的“子程序属性”。

脚本头过早结束
请参阅服务器错误。

包溢出中的重复计数
(F) 您不能指定一个太大的重复计数,以至于它会溢出您的有符号整数。
参见 perlfunc 中的“pack”。

解包溢出中的重复计数
(F) 您不能指定一个太大的重复计数,以至于它会溢出您的有符号整数。
请参阅 perlfunc 中的“解包”。

重新分配() 已释放的内存被忽略
(S) 一个内部程序称为 重新分配() 在已经被释放的东西上。

参考已经很弱
(W misc) 你试图削弱一个已经很弱的参考。 这样做有
没有效果。

setpgrp 不能接受参数
(F) 您的系统具有 设置组() 来自 BSD 4.2,它不带参数,不像 POSIX
设置pgid(),它需要一个进程 ID 和进程组 ID。

零长度表达式上的奇怪 *+?{}
(W regexp) 你在一个不做任何事情的地方应用了正则表达式量词
意义,例如在零宽度断言上。 尝试将量词放在
断言代替。 例如匹配“abc”的方式,前提是后面跟着
三个重复的“xyz”是“/abc(?=(?:xyz){3})/”,而不是“/abc(?=xyz){3}/”。

未实现切换有效 %s
(F) 而在 "use filetest" pragma 下,我们无法切换 real 和 Effective
uids 或 gids。

此 Perl 无法重置 CRTL 环境元素 (%s)
这个 Perl 不能设置 CRTL 环境元素 (%s=%s)
(W internal) VMS 特有的警告。 你试图改变或删除一个元素
CRTL 的内部环境数组,但您的 Perl 副本不是用 CRTL 构建的
包含 设置环境() 功能。 你需要用一个 CRTL 重建 Perl,
或重新定义 PERL_ENV_TABLES (请参阅 perlvms)以便环境数组不是目标
产生警告的 %ENV 更改。

运行 %s 块为时已晚
(W void) 一个 CHECK 或 INIT 块在适当的运行时被定义,当
经营他们的机会已经过去了。 也许你正在加载一个文件
当您应该使用“use”代替时,请使用“require”或“do”。 或者也许你应该把
BEGIN 块中的“require”或“do”。

不明 打开() 模式“%s”
(F) 3-argument 的第二个参数 打开() 不在有效模式列表中:
“<”、“>”、“>>”、“+<”、“+>”、“+>>”、“-|”、“|-”。

未知进程 %x 向 prime_env_iter 发送消息:%s
(P) VMS 特有的错误。 Perl 在迭代之前读取 %ENV 的值
它,而其他人在 Perl 预期的数据流中插入了一条消息。 有人的
非常困惑,或者可能是为了恶意破坏 Perl 的 %ENV 人口
的目的。

无法识别的转义 \\%c 已通过
(W misc) 您使用了 Perl 无法识别的反斜杠字符组合。
从字面上理解这个角色。

属性列表中未终止的属性参数
(F) 词法分析器在解析属性时看到一个左括号字符
列表,但未找到匹配的右(右)括号字符。 您可以
需要添加(或删除)一个反斜杠字符以使您的括号平衡。 看
属性。

未终止的属性列表
(F) 词法分析器在一个开始时找到了一个简单的标识符以外的东西
属性,它不是分号或块的开头。 也许你终止了
上一个属性的参数列表过早。 查看属性。

子程序属性列表中未终止的属性参数
(F) 词法分析器在解析子程序时看到一个左括号字符
属性列表,但未找到匹配的右(右)括号字符。
您可能需要添加(或删除)一个反斜杠字符以使您的括号
平衡。

未终止子程序属性列表
(F) 词法分析器在 a 的开头找到了一个简单的标识符以外的东西
subroutine 属性,它不是分号或块的开头。 也许你
过早终止了前一个属性的参数列表。

CLI 符号“%s”的值太长
(W misc) VMS 特有的警告。 Perl 试图读取 %ENV 元素的值
从 CLI 符号表中,发现了一个长度超过 1024 个字符的结果字符串。
返回值已被截断为 1024 个字符。

版本号必须是常数
(P) 尝试将“use Module nn LIST”语句翻译成它的等效语句
“BEGIN”块发现与版本号的内部不一致。

全新 测试


库/属性
“sub : attrs”与旧的“use attrs”的兼容性测试。

库/环境
测试新环境标量功能(例如,“使用 Env qw($BAR);”)。

库/环境数组
测试新的环境数组功能(例如,“使用 Env qw(@PATH);”)。

库/io_const
IO 常量(SEEK_*、_IO*)。

库/io_dir
与目录相关的 IO 方法(新建、读取、关闭、倒带、绑定删除)。

库/io_multihomed
具有多宿主主机的 INET 套接字。

库/io_poll
IO 轮询().

库/io_unix
UNIX 套接字。

操作/属性
“my ($x,@y,%z) : attrs”和.

操作/文件测试
文件测试操作符。

操作/lex_assign
验证访问填充对象(词法和临时对象)的操作。

操作/exists_sub
验证“存在&sub”操作。

不相容 更改


Perl的 来源 不兼容性
请注意,任何已添加的新警告或已增强的旧警告都是
不需要 认为不兼容的变化。

由于必须通过“-w”开关或“警告”明确请求所有新警告
pragma,最终是程序员的责任来确保警告是
明智地启用。

CHECK 是一个新关键字
所有名为 CHECK 的子程序定义现在都是特殊的。 见“/”支持CHECK
块“”了解更多信息。

undef 列表切片的处理方式已更改
包含的列表切片的行为存在潜在的不兼容性
完全是未定义的值。 请参阅“列表切片的行为更加一致”。

$English::PERL_VERSION 的格式不同
English 模块现在将 $PERL_VERSION 设置为 $^V(一个字符串值)而不是 $](一个
数值)。 这是潜在的不兼容性。 如果出现以下情况,请通过 perlbug 向我们发送报告
你受此影响。

有关此更改的原因,请参阅“改进的 Perl 版本编号系统”。

形式 1.2.3 的文字解析不同
以前,包含多个点的数字文字被解释为
与一个或多个数字连接的浮点数。 现在这样的“数字”
解析为由指定序数组成的字符串。

例如,“print 97.98.99”在早期版本中用于输出97.9899,但现在
打印“abc”。

请参阅“支持表示为序数向量的字符串”。

可能改变了伪随机数生成器
依赖于复制一组特定伪随机数的 Perl 程序可能
由于改进了,现在产生不同的输出 RAND() 内置。 你可以
使用“sh Configure -Drandfunc=rand”获取旧行为。

请参阅“更好的伪随机数生成器”。

散列键的散列函数已更改
尽管 Perl 散列不保留顺序,但显然随机的顺序
迭代散列的内容时遇到的实际上是由
使用的哈希算法。 算法的改进可能会产生一个随机顺序
is 不同 从以前的版本开始,尤其是在迭代哈希时。

有关其他信息,请参阅“更好的哈希的最坏情况行为”。

“undef”在只读值上失败
对只读值(例如 $1)使用“undef”运算符的效果与
将“undef”分配给只读值——它会引发异常。

可以在管道和套接字句柄上设置 Close-on-exec 位
管道和套接字句柄现在也受所确定的 close-on-exec 行为的影响
通过特殊变量 $^F。

请参阅“更一致的 close-on-exec 行为”。

不支持将“$$1”表示为“${$}1”
Perl 5.004 弃用了 $$1 的解释以及内插的类似内容
字符串表示 "$$ . "1"",但仍然允许它。

在 Perl 5.6.0 及更高版本中,“$$1”始终表示“${$1}”。

删除(), 每个(), values() 和 "\(%h)"
操作值的别名,而不是副本

删除(), 每个(), values() 和列表上下文中的散列(例如“\(%h)”)返回
散列中的实际值,而不是副本(就像它们在早期版本中使用的那样)。
使用这些构造的典型习语复制返回的值,但这可以使
创建对返回值的引用时有显着差异。 中的键
迭代哈希时,哈希仍作为副本返回。

也可以看看 ”删除(), 每个(), values() 和哈希迭代更快”。

vec(EXPR,OFFSET,BITS) 强制执行 XNUMX 位 BITS 的幂
向量() 如果 BITS 参数不是有效的 XNUMX 的幂,则生成运行时错误
整数。

某些诊断输出的文本已更改
诊断中对内部 Perl 操作的大多数引用已更改为
更具描述性。 对于可能错误地依赖于
正确运行的诊断的确切文本。

“%@“ 已被删除
用于累积“背景”错误的未记录的特殊变量“%@”
(例如那些发生在 破坏()) 已被删除,因为它可以
可能导致内存泄漏。

带括号的 不是() 行为类似于列表运算符
“not”运算符现在属于“如果它看起来像一个函数,它的行为就像
功能”规则。

因此,括号形式可以与“grep”和“map”一起使用。 下列
构造以前曾经是一个语法错误,但现在它按预期工作:

grep not($_), @things;

另一方面,将“not”与文字列表切片一起使用可能不起作用。 下列
以前允许的构造:

不打印 (1,2,3)[0];

现在需要用额外的括号来写:

打印不((1,2,3)[0]);

当“not”后面没有括号时,行为不受影响。

裸字原型“(*)”的语义发生了变化
裸字原型“*”的语义已经改变。 Perl 5.005 总是强制的
typeglob 的简单标量参数,这在以下情况下没有用
子程序必须区分简单的标量和类型团。 新行为
是不要将裸字参数强制转换为 typeglob。 该值将始终可见
作为一个简单的标量或作为对 typeglob 的引用。

请参阅“更多功能的裸字原型 (*)”。

位运算符的语义在 64 位平台上可能已更改
如果您的平台是本机 64 位或 Perl 已配置为使用
64位整数,即$Config{ivsize}为8,可能存在潜在的不兼容
在按位数字运算符 (& | ^ ~ << >>) 的行为中。 这些运算符用于
在以前的版本中严格操作整数的低 32 位,但现在
在整个原生积分宽度上操作。 特别要注意一元“~”
将在具有不同 $Config{ivsize} 的平台上产生不同的结果。 为了
可移植性,一定要屏蔽掉一元“~”结果中多余的位,例如,
“~$x & 0xffffffff”。

请参阅“位运算符支持完整的本机整数宽度”。

更多的内置函数污染了他们的结果
如“改进的安全功能”中所述,可能存在更多污染源
Perl 程序。

为了避免这些新的污染行为,您可以使用配置选项构建 Perl
“-Accflags=-DINCOMPLETE_TAINTS”。 请注意,随后的 perl 二进制文件可能不安全。

C 来源 不兼容性
“PERL_POLLUTE”
发布 5.005 通过提供预处理器宏来继承旧的全局符号名称
用于扩展源兼容性。 从 5.6.0 版开始,这些预处理器
默认情况下,定义不可用。 您需要使用以下命令显式编译 perl
“-DPERL_POLLUTE”来获取这些定义。 对于仍在使用旧版本的扩展
符号,此选项可以通过 MakeMaker 指定:

perl Makefile.PL 污染=1

“PERL_IMPLICIT_CONTEXT”
这个新的构建选项为所有 API 函数提供了一组宏,以便
隐式解释器/线程上下文参数传递给每个 API 函数。 作为一个
结果,类似于“sv_setsv(foo,bar)”的内容相当于一个宏调用
实际上转换为“Perl_sv_setsv(my_perl,foo,bar)”之类的东西。 虽然这是
通常预计不会有任何重大的源兼容性问题,
需要考虑宏和实际函数调用之间的区别。

这意味着有 is 一个源兼容性问题由此产生,如果你
扩展尝试使用指向任何 Perl API 函数的指针。

请注意,上述问题与 Perl 的默认构建无关,其
接口继续匹配以前版本的接口(但受其他选项的限制
此处描述)。

有关详细信息,请参阅 perlguts 中的“背景和 PERL_IMPLICIT_CONTEXT”
使用此选项构建 Perl 的后果。

注意:无论何时构建 Perl 都会自动启用 PERL_IMPLICIT_CONTEXT
使用 -Dusethreads、-Dusemultiplicity 之一或两者之一。 它不是
旨在由用户此时启用。

“PERL_POLLUTE_MALLOC”
在 5.005 及更早版本中启用 Perl 的 malloc 会导致
系统的 malloc 系列函数将被 Perl 版本篡夺,因为
默认它们使用相同的名称。 除了在不支持的平台上引起问题
允许干净地替换这些功能,这也意味着系统版本
无法在使用 Perl 的 malloc 的程序中调用。 Perl 的早期版本
允许使用 HIDEMYMALLOC 和 EMBEDMYMALLOC 抑制此行为
预处理器定义

从 5.6.0 版开始,Perl 的 malloc 系列函数具有不同的默认名称
从系统版本。 您需要使用以下命令显式编译 perl
"-DPERL_POLLUTE_MALLOC" 以获得较旧的行为。 HIDEMYMALLOC 和 EMBEDMYMALLOC
没有效果,因为它们启用的行为现在是默认值。

注意这些函数做 不需要 构成 Perl 的内存分配 API。 见“内存
分配”在 perlguts 中以获取更多信息。

公链兼容 C 来源 API 更改
“PATCHLEVEL”现在是“PERL_VERSION”
cpp 宏“PERL_REVISION”、“PERL_VERSION”和“PERL_SUBVERSION”现在是
在 perl.h 中默认可用,并反映基本修订、补丁级别和
分别颠覆。 “PERL_REVISION”没有先前的等价物,而
“PERL_VERSION”和“PERL_SUBVERSION”以前作为“PATCHLEVEL”和
“颠覆”。

新名称造成的污染更少 CPP 命名空间并反映数字
已经成为惯例。 为了兼容性,旧名称仍然
支持时 补丁级别.h 被明确包含(如之前要求),所以有
没有源代码不兼容的变化。

二进制 不兼容性
通常,此版本的默认版本预计与以下二进制兼容
使用 5.005 版本或其维护版本构建的扩展。 但是,具体
由于使用的默认值发生变化,平台可能会破坏二进制兼容性
提示文件。 因此,请务必始终检查特定于平台的 README 文件
对于任何相反的注释。

usethreads 或 usemultiplicity 构建是 不需要 与相应的二进制兼容
建于 5.005。

在需要明确导出列表的平台上(AIX、OS/2 和 Windows,其中
其他),诸如解析器函数和运行时操作码之类的纯内部符号不是
默认导出。 Perl 5.005 用于导出所有函数,无论它们是否
是否被视为公共 API 的一部分。

有关公共 API 函数的完整列表,请参阅 perlapi。

已知的 问题


Thread test 失败
已知 lib/thr19.t 测试的子测试 20 和 5005 由于基本问题而失败
在 5.005 线程实现中。 这些不是新的失败——Perl 5.005_0x 有
相同的错误,但没有这些测试。

EBCDIC 平台 不需要 支持的
在 Perl 的早期版本中,EBCDIC 环境如 OS390(也称为 Open Edition
支持 MVS) 和 VM-ESA。 由于 UTF-8 (Unicode) 支持所需的更改,
Perl 5.6.0 不支持 EBCDIC 平台。

In 64 bit HP-UX 库/io_multihomed test 五月
如果 Perl 已配置为 64 位,则 lib/io_multihomed 测试可能会在 HP-UX 中挂起。
由于其他 64 位平台在此测试中没有挂起,因此怀疑 HP-UX。 所有其他
测试在 64 位 HP-UX 中通过。 测试尝试创建并连接到“多宿主”
套接字(具有多个 IP 地址的套接字)。

下一步 3.3 POSIX test 失败
在 NEXTSTEP 3.3p2 中的实现 时间(3) 在操作系统库中
有问题:%j 格式从零开始对一个月的天数进行编号,同时
对程序员来说合乎逻辑,将导致 lib/posix 测试的子测试 19 到 27 可能失败。

真64 (又名 数字输入型 优尼系统, 又名 DEC 操作系统/1) 库/sdbm test 失败 - GCC
如果使用 gcc 2.95 编译,lib/sdbm 测试将失败(转储核心)。 治疗方法是使用
vendor cc,它与操作系统一起提供并生成良好的代码。

UNICOS/MK CC 失败 ,我们将参加 配置 运行
在 UNICOS/mk 中,Configure 运行期间可能会出现以下错误:

猜测您的 C 编译器和预处理器定义了哪些符号...
CC-20 cc:错误文件 = try.c,行 = 3
...
yylook 79bad switch yylook 79bad switch yylook 79bad switch yylook 79#ifdef A29K
...
在“try.c”的编译中检测到 4 个错误。

罪魁祸首是UNICOS/mk的awk坏了。 幸运的是效果相当温和:Perl
本身不会受到错误的不利影响,只有 Perl 附带的 h2ph 实用程序,并且
现在很少需要这样做。

箭头 操作者 数组
当箭头运算符“->”的左参数是数组或“标量”运算符时
对数组进行操作时,必须认为操作的结果是错误的。 为了
例:

@x->[2]
标量(@x)->[2]

这些表达式将在 Perl 的某些未来版本中出现运行时错误。

实验 功能
如上所述,许多功能仍处于试验阶段。 接口和实现
这些功能可能会发生变化,在极端情况下,甚至可能会被删除
Perl 的一些未来版本。 这些功能包括:

线
统一
64位支持
左值子程序
弱引用
伪哈希数据类型
编译器套件
文件通配的内部实现
数据库模块
正则表达式代码构造:
“(?{代码})”和“(??{代码})”

过时的 诊断


字符类语法 [: :] 保留用于将来的扩展
(W) 在正则表达式字符类 ([]) 中以“[:”开头的语法
并以“:]”结尾是为将来的扩展保留的。 如果你需要代表
正则表达式字符类中的那些字符序列,只需引用
带反斜杠的方括号:“\[:”和“:\]”。

格式错误的逻辑名称 |%s| 在 prime_env_iter
(W) VMS 特有的警告。 准备执行时遇到逻辑名称
迭代 %ENV,这违反了管理逻辑名称的句法规则。 因为
无法正常翻译,被跳过,不会出现在%ENV中。 这
可能是良性事件,因为某些软件包可能会直接修改逻辑
命名表并引入非标准名称,或者它可能表明一个逻辑名称
表已损坏。

在字符串中,@%s 现在必须写为 \@%s
这个错误的描述曾经说:

(总有一天它会简单地假设一个没有反斜杠的@
插入一个数组。)

那一天已经到来,这个致命的错误已经被消除了。 它已被替换为
相反,非致命警告。 请参阅“数组现在总是插入双引号
字符串”的详细信息。

%s 上可能的优先级问题
(W) 编译器在它期望有条件的地方发现了一个裸字,这通常是
表示一个 || 或 && 被解析为前一个参数的最后一个参数的一部分
构造,例如:

打开 FOO || 死;

正则表达式太大
(F) 正则表达式的当前实现使用shorts作为地址偏移量
一个字符串内。 不幸的是,这意味着如果正则表达式编译为
超过 32767,它会爆炸。 通常当你想要一个正则表达式时
大,有一个更好的方法来做多个语句。 见 perlre。

使用“$$ " 表示 "${$} " 已弃用
(D) 5.004 之前的 Perl 版本误解了任何类型标记后跟“$”和一个
数字。 例如,“$$0”被错误地理解为“${$}0”而不是“${$0}”。
这个错误(大部分)在 Perl 5.004 中得到了修复。

然而,Perl 5.004 的开发者无法完全修复这个错误,因为在
至少有两个广泛使用的模块依赖于字符串中“$$0”的旧含义。 所以 Perl
5.004 仍然解释“$$ " 以旧的(损坏的)方式在字符串中;但它
生成此消息作为警告。 在 Perl 5.005 中,这种特殊处理将
停止。

报告仪表板 错误


如果你发现你认为是一个错误,你可以查看最近发布到
comp.lang.perl.misc 新闻组。 也可能有资料 http://www.perl.com/perl/
,Perl 主页。

如果您认为有未报告的错误,请运行 错误 程序包含在
你的释放。 确保将您的错误缩减为一个很小但足够的测试用例。 你的错误
报告,连同“perl -V”的输出,将被发送到 [电子邮件保护] 成为
由 Perl 移植团队分析。

使用 onworks.net 服务在线使用 perl56delta


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad