本周p5p 1999/12/19
- 注释
- 元信息
- 更多 5.005_63 结果
$^H
和%^H
- Perl RPMs
- Ilya 的补丁开发继续
- 在信号处理器中关闭 Filhandle
pad_findlex
需要递归- 转换指定器错误
- 简单的测试
eof()
在输入的开头- 缺少
$VERSION
- 过度魔法的范围运算符
Array::Virtual
- 重新加载使用 fields 的模块
- 新改进的
File::Find
- 各种
注释
元信息
您可以通过发送空消息到 [email protected]
. 订阅此摘要的电子邮件版本。
请将更正和补充发送到 [email protected]
,其中 YYYYMM
是当前年份和月份。
更多 5.005_63 结果
Sarathy 的公告 包含了更改列表和 5.005_64 的重大 TODO 列表。
通常会有一些错误报告紧随新版本的发布,主要涉及编译和配置问题。
$^H
和 %^H
Stéphane Payrard 抱怨说,尽管 %^H
在 perldiag
中被提到,但它没有在 perlvar
中描述。Ilya 抗议说,除非你实际上使用 %^H
,否则你不能获得该诊断,在这种情况下,他假设你理解诊断。尽管如此,他还是提供了 文档补丁,讨论了 $^H
和 %^H
在 perlvar
中的用法。我认为这个补丁对于想要成为 Perl 专家的人来说是必读的。
Perl RPMs
Johann Vromans 提供了 Perl 5.005_63 的 RPM。
Elaine Ashton 建议将其发送到 Red Hat,这引发了一场关于是否应该广泛宣传 Perl 实验性开发版本 RPM 存在的讨论——担心初学者会来抓取 RPM 并在自己的系统上安装 Perl 开发版本,然后因为无法正常工作而感到困惑和沮丧。
Sarathy 表示,他将与未来的开发版本一起分发 RPM,这样测试 Perl 开发版本的人也可以测试 RPM。
在这个过程中,一个名叫 Pixel 的人说,他或她为 Linux-Mandrake 制作了 `hackperl 包’。我不知道这是什么,但使用 Mandrake 的人可能会对此感兴趣,可以 阅读这条消息。
Randy J. Ray 提到,他试图将 RPM C 库制作成 Perl 模块,但没有成功,因为 h2xs
无法解析 rpm.h
。也许有人愿意看看这个问题。
Bennett Todd 致力于开发 Perl 模块的自动 RPM 打包器。详细信息在此。 Andy Dougherty 建议谨慎行事
Andy: 确实,在一切都定下来之前,从各种“供应商”那里获得有价值的反馈和讨论会更好,以确保我们做的是合理的事情,并且不会让人们对他们不断与系统作斗争感到不满。我对任何感兴趣的人都很乐意讨论这些问题。
这是一个相当长的讨论,其中大部分我都没有跟得上,因为我对 RPMs 不是非常熟悉。使用 Red Hat 系统的人可能会觉得这很有启发。
讨论包括了一个关于 Perl 5.6 中版本号文字支持的偏题。您将能够编写 v5.3.40
,它将被编译成您编写了 "\x{5}\x{3}\x{28}"
的样子;这意味着(例如)v5.3.40 lt v5.29.12
是真的。这个讨论的根源在这里。
Ilya 的补丁开发继续
这已经成为我最喜欢的报告部分,因为即使一周中剩下的时间都是一些无聊的废话或不相关的唠叨,但伊利亚部门总是有有趣的事情发生。非常感谢伊利亚和萨拉西不断为我提供源源不断的有趣技术内容。
修改 xsubpp
上周Sarathy拒绝将伊利亚对xsubpp
的改进加入其中,除非他也提供了一种关闭它的方法。伊利亚做了这件事。现在有一个环境变量可以关闭它。
在信号处理器中关闭 Filhandle
托马斯·斯特罗姆伯格报告了一个有趣的bug。他有一个通过它向管道写入的文件句柄。在这个文件句柄上的close
会等待管道另一端的命令终止。当他的程序做这件事时,它会收到一个闹钟信号。汤姆想要终止程序并清理。如果他简单地从信号处理器返回,那么close
调用将重新启动,程序再次挂起。所以他试图在信号处理器中关闭文件句柄;这使得Perl转储核心。
他提供了一个示例测试程序,但没有人讨论,可能是因为示例程序在管道的另一端使用了/bin/pax
,或者可能是因为每个人都知道Perl的信号处理器是无望的。无论如何,我通过将/bin/pax
改为sleep 10
来演示了这个问题。
pad_findlex
需要递归
皮克斯先生或女士报告了关于词法闭包的bug。这里有一个演示
for (1..5) {
my $t = $_;
push @subs, sub { sub { $t }};
}
for (@subs) {
print "-- ", &{&$_};
}
这应该打印出--1--2--3--4--5
,但不幸的是,错误的$t
被闭包捕获了。如果您仍然不确定这是一个bug,请注意,将sub { sub { $t }}
改为sub { $t; sub { $t }}
会产生正确的行为。(感谢Randy J. Ray和Jeff Pinyan指出这一点。)
拉里预测萨拉西将在重写5.005_64的垫子代码的过程中修复这个问题。萨拉西保持沉默。
转换指定器错误
尼古拉斯·克拉克报告了5.005_63的一个测试失败:警告测试#247产生了
/[a\b]/: Unrecognized escape \ in character class passed through at - line 3.
而不是。
/[a\zb]/: Unrecognized escape \ in character class passed through at - line 3.
这似乎不是一个大问题,不是吗?我最初将它放在了“不感兴趣”文件夹中。罗宾·巴克尔追踪了这个问题。实际上,保留丢失的z
字符的变量实际上是一个UV
(无符号长整型)。但是它被使用%c
转换指定符的printf
‘ed。在一个小端机器上,这可能会正常工作。
现在你知道我们为什么有回归测试了。
罗宾提交了一个非常有趣的补丁,它使整个Perl代码的printf
格式检查成为可能。他发现了一些潜在的问题。
简单的测试
迈克·麦芬提交了一个没有报告的perlbug
报告;我们只有他的Perl配置。
弗朗索瓦·德萨梅尼恩:哇!这真的是我见过的最简单的Perl程序!
但后来发现这真的很有趣:汉斯·穆尔德指出,如果您运行Perl测试工具并告诉它执行没有测试,它将以除以零的错误退出。汉斯为此提交了一个补丁。
eof()
在输入的开头
拉尔夫·科尔多伊提交了这个补丁。我迟来地为拉尔夫·科尔多伊颁发“12月1999年新Perl观察者”奖项。谢谢,拉尔夫。
缺少 $VERSION
迈克尔·施恩发布了一个包含八十个没有设置$VERSION
的标准模块的列表。他提出修改它们,让它们的版本为1.00。萨拉西反对
萨拉西:我们真正需要的是一种机制来附加有关模块的元信息(例如,以结构化pod/XML的形式)。如果正确实现,这将允许模块“发布”它们的接口,以进行运行时类型发现和其他类似COM/CORBA的功能。
在这个过程中,Ask Bjørn Hansen 提到了一些我认为非常有价值且应该更为人所知的事情:`CPAN.pm` 模块有一个 `wh` 命令。试一试。
过度魔法的范围运算符
Tom Phoenix 发现,神奇的范围生成运算符 `..
` 即使它的第二个参数是数字,也是神奇的。
@items = "0" .. -1;
print scalar(@items);
这会打印出 100,因为字符串 `"0"
` 会自动增加,直到它的长度大于 `"-1"
` 的长度。他提供了一个补丁。
Array::Virtual
Tim Bunce 转发了一条来自 Andrew Ford 的消息,Andrew 正在开发一个 `Array::Virtual
` 模块,它将使他能够将 Perl 数组绑定到一个非常稀疏的内存映射数组。大部分讨论显然都在模块邮件列表上进行。这个模块已经处于“想法”阶段很长时间了。人们就它的适当调用接口进行了讨论。更多信息请参见:这里。
重新加载使用 fields 的模块
显然这不起作用——《code>fields.pm 尝试两次将字段名插入到 `%FIELDS
` 数组中。《a href="http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1999-12/msg00446.html">John Tobey 提供了一个补丁。
然而,没有讨论。
新改进的 File::Find
Johan Vromans 报告称,新的改进版 `File::Find
` 在 `/
` 上不起作用,因为它将目录名规范化为空字符串。哎呀。
各种
大量错误报告、错误修复、非错误报告、问题以及答案。还有垃圾邮件。
此外,我们还收到了一个来自名为 `################################################################################@cso.fmr.com
` 的人的 `perlbug
` 报告。
直到下次见面,我仍然是,您谦卑而顺从的仆人,
标签
反馈
这篇文章有什么问题吗?请通过在 GitHub 上打开一个问题或拉取请求来帮助我们。