本周p5p 2000/06/25

备注

您可以通过发送空消息到 [email protected]. 订阅此摘要的电子邮件版本。

请将更正和补充发送到 [email protected],其中 YYYYMM 是当前年份和月份。

本周的报告稍微晚了一些,因为我去了圣地亚哥Usenix,然后我去了匹兹堡的YAPC(可能是在这个大陆上唯一一个愚蠢到尝试做两件事的人)然后我回到了费城,并被开车送往华盛顿DC参加派对,然后乘火车回来。

我本想说列表上的一周很安静。但并非如此。这只是一个低流量的一周。一点也不安静;各种有用和有趣的内容都被发布,信号与噪声比异常高。

本周被命名为“Doug MacEachern 和 Simon Cozens”的一周。感谢 Doug 和 Simon,以及本周为异常高的信号与噪声比做出贡献的每个人。

方法查找加速

对上周 Doug 补丁的更多讨论。

上一期摘要

上周,一些人指出,如果存在在运行时修改 @ISA 的代码,它将失败;Sarathy 建议一个语法定义,保证不会发生这种情况。Nick 建议使用 use base 可以做到这一点。

Doug 提交了一个更新的补丁。

更新后的补丁

为了您的欣赏,Simon Cozens 写了一个关于补丁及其工作方式的详细解释,包括许多关于 Perl 内部的细节。如果您对 Perl 内部(您应该这样做)感兴趣,则强烈建议您阅读。

解释

我非常希望在未来运行类似类型的其他文章。这应该被理解为向人们请求他们贡献文章。它们不必像 Simon 的那样完整或详细。

非常感谢,Simon。

tr///CUtr///UC 已移除

一直在处理行纪律特性的 Simon,移除了Larry 已经决定是一个坏主意并且应该被消除的讨厌的 tr///CU 功能。

is_utf8_string

Simon 还添加了一个名为 is_utf8_string 的函数,用于检查一个字符串以确保它是有效的 UTF8。计划是如果 Perl 正在读取一个被认为是 UTF8 的文件,它可以在在最终标量上设置 UTF8 标志之前检查输入。

字节顺序标记回归

Simon 提交了一个改进的补丁。这个补丁只是让词法分析器使用 tell() 来查看假定的字节顺序标记是否位于文件的开始处。

新的补丁

上一期摘要

pack("U")

几周前,关于这应该做什么有所讨论。

上一期摘要

Simon提交了一个补丁,实现了Larry的一个想法:在包模板开头放置一个U表示pack的结果是一个UTF8字符串;其他任何字符表示字节字符串。这意味着(例如)您可以在任何模式的开始处放置U0来强制它产生UTF8;如果想要以U开头但结果为字节字符串,请在开头添加一个不执行任何操作的C0

补丁内容。

词法变量和 eval()

Yitzchak Scott-Thoennes报告了关于这些特性之间相互作用的多个谜题,包括

        { my $x; sub incx { eval '++$x' } }

在这里,incx似乎增加了词法变量;他期望它增加全局变量。(理由:词法变量应该被优化掉。)

Rick Delaney在clp.misc中的Ilya的相关文章中提到了。

Yitzchak说,子程序中的代码不应能够更改更外层的词法变量,除非它是一个闭包,而这里的incx不是闭包。Rick提出了以下反例

        my $Pseudo_global = 2;

        sub double {
          my ($x) = @_;
          eval '$x * $Pseudo_global';
        }

讨论似乎没有结论。没有提供补丁。

我说我之前对此类情况下的Scheme和Common Lisp的行为做了一些研究,并将汇总报告回来,但我还没有这么做。

FILEGV

关于FILEGV宏有一些讨论。当Perl编译操作树时,行和文件信息存储在GV中。或者更确切地说,曾经是这样;现在,如果您使用ithreads编译,它只是使用字符串。有一些宏,如*FILEGV,用于访问这个GV,但据Sarathy说,它们主要用于获取文件名,而且有一个更直接的宏家族,如*FILE,可以直接获取文件名。Doug MacEachern想在B::Graph中使用原始宏,尽管我不确定原因;Sarathy说,可能是B::Graph需要修复。

perlhacktut

Simon贡献了名为perlhacktut的文档的前半部分,这是一篇关于修改Perl核心的教程。它讲述了如何入门以及需要阅读的内容,概述了Perl的庞大子系统,并开始讨论Perl的基本数据类型和操作树。

如果您对Perl内部感兴趣(您应该感兴趣),那么这是一篇强烈推荐的阅读材料。(哎呀,这听起来很熟悉。)

初稿。

perlutil.pod

Simon还贡献了一份描述与Perl一起打包的实用程序文档,例如perldocpod2htmlroffitalla2p

Simon这一周非常忙碌。

perlutil

缺少方法

Martyn Pierce指出,如果您的代码如下

        Foo->new('...');

它可能因两个原因而失败:因为Foo类没有定义那个方法,或者因为您忘记在程序中放置use Foo。在这两种情况下,信息是

        Can't locate object method "new" via package "Foo" ...

Martyn建议在第二种情况下,可以添加一条备注

        (perhaps you forgot to load module "Foo"?)

然而,他没有提供补丁。

我也想知道为什么它说“对象方法”,很明显这是一个类方法。我也没有提供补丁。这对于想要开始修补的人来说是一个极好的第一个补丁。如果您对此感兴趣但不知道从何开始,请写信给我。

抑制原型不匹配警告

Doug MacEachern在Socket.pm中发现了大量只有预先声明一些自动加载的常量(如AF_INET)的子程序声明。这些声明的唯一目的是防止在运行时实际自动加载常量时出现“原型不匹配”警告。然后,他提出一个补丁来抑制警告,如果看起来子程序将在稍后自动加载,并从Socket.pm中删除了20K的常量子程序声明。

自动加载的常量未内联

Doug 还发现这些自动加载常量的值没有内联,因为使用它们的代码在子程序加载之前就已经编译了。Doug 为 Exporter.pm 产生了一个补丁,允许你在 use 行中指定一个以 + 符号开头的名称,以指示在模块加载时立即调用子程序(因此自动加载),这样它们就可以内联到后续代码中。

补丁内容。

lib.pm

Doug MacEachern 认为很遗憾 lib.pm 必须引入所有的 Config.pm,因此他将 lib.pm 重新编写为脚本,lib.pm.PL,在安装时生成真正的 lib.pm,并内联插入适当的 $CONFIG 变量值。

(目前许多其他工具,如 perlccpod2html,都是以这种方式生成的。在源目录中执行 ls */*.PL 以查看列表。)

use English

Barrie Slaymaker 贡献了一个补丁,现在你可以这样写

        use English '-no_match_english';

它将导入所有常规标点符号变量的所有长名称,除了 $`$&$',这些名称会减慢你的正则表达式。如果你不提供此标志,则这些变量将通过 eval 语句单独别名为。

这已经拖了很久了——我以为已经完成了。

有一个与某些不重要的风格问题有关的长期偏离,这个问题本应在私人电子邮件中完成,或者根本不完成。

IPC::Open3 中的数字打开

Frank Tobin 提交了一个补丁,允许 IPC::Open3 的用户请求打开的任何“文件”都是已经打开的文件描述符,这与常规 open 中的 open FH, "<&=3" 的方式类似。

正则表达式错误

Ian Flanigan 发现了一个令人沮丧的正则表达式引擎错误。

了解相关信息。

Foo 是 Foo 的子类

Johan Vromans 抱怨说

        my $r = "Foo";
        UNIVERSAL::isa($r, "Foo::");

返回 true。Johan 不喜欢 $r(它是一个字符串)被报告为类 Foo 的成员。有人指出,手册明确说明可以像类方法一样调用 UNIVERSAL::isa,以确定一个类是否是另一个类的子类,在这种情况下可以调用为

        Foo->isa('Foo')

这本质上与 Johan 的例子相同,并返回 true,因为类 Foo 是(平凡地)其自身的子类。

Johan 说“讨厌”。

README.hpux

Jeff Okamoto 更新了它。

这里是。

my __PACKAGE__ $obj

Doug MacEachern 提交了一个补丁来实现这一点。补丁在截止日期前刚刚到达,在过去的两天里已经有很多关于它的讨论,所以我将推迟讨论它,直到我的下一份报告。

如果你想在此之前查看它,这里就是。

asdgasdfasd

一个以 root 运行的匿名人士提交了一个错误报告(使用 perlbug),只说了“asdgasdfasd”。Martyn Pearce 回复说这不是错误,而是一个特性。

各种

一大堆错误报告、错误修复、非错误报告、问题、答案以及非常少量和垃圾邮件。但没有严重的争吵。

这是这个月的最后一天,所以我将总结一下:我在 junk 文件夹中填写了 97 条消息,在 misc 文件夹中填写了 311 条消息,在 45 个与特定主题相关的其他文件夹中填写了 329 条消息。

直到你下周,我仍然是,你谦卑而顺从的仆人,


Mark-Jason Dominus

标签

反馈

这篇文章有什么问题吗?请通过在 GitHub 上打开问题或拉取请求来帮助我们。