本周在 p5p 1999/10/31

很抱歉这份报告来得晚,但我家中的硬件出了些严重问题,直到修好电脑我才能够完成这份报告。幸运的是,这周交通不太拥堵。

注释

很难追踪所有发生的事情。和以前一样,如果有什么更正或补充,请告诉我。请将它们发送到 [email protected],其中 YYYYMM 是当前年份和月份。

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

glob 区分大小写

这次讨论从上周继续。Paul Moore 表示,他将会尝试解决 Windows 下新内置的 globber 的一些问题。(例如,\/ 的问题,当底层文件系统不区分大小写时该怎么做等。)了解更多。

问题似乎越来越棘手。例如,如何处理 glob("C:*")?在 Unix 系统上,你希望它在当前目录中查找以 C: 开头的文件。但在 Win32 系统上,你希望它在标记为 C 的磁盘上查找。不过,Paul 提交了一个部分补丁

我寻找 Sarathy 的评论,但没有看到。

Perl 在 UNICOS 下

Jarkko 确保Perl在 UNICOS 下工作,UNICOS 是运行在 Crays 上的 Unix 版本。但他的 Cray 即将退役,他需要其他人接管,或者给他访问 UNICOS 机器的权限。如果您能这样做,请与他联系。如果您不知道如何联系他,请与我联系。

新的 perlthread 手册页

Dan Sugalski 更新了他的 perlthread 手册页提案。

线程和显式解锁

上周关于 perlthread 手册页的讨论分为两个有趣的旁白。这是第一个:目前,当控制离开首次获取锁的动态作用域时,会释放锁。

通常这是你想要的,可以在正确的时间释放锁。Tuomas Lukka 建议还有一个显式的 unlock 函数来提前释放锁

Sarathy 表示,他更倾向于一个接口,可以让你将锁存储到变量中,就像它是对象一样;那么它的释放语义将与其他任何值相同。它将在变量被销毁时释放,无论是在块结束时还是通过显式的 undef了解更多。

线程和正则表达式

Rob Cunningham 报告说,他和麻省理工学院的 Brian Mancuso 正在修复正则表达式,这些表达式在多线程 Perl 中并不总是按预期工作。这显然非常重要。一个问题是全球变量,如 $1。如果有两个线程同时尝试写入 $1,结果将是回参考混乱。但还有大量其他全局变量被正则表达式引擎内部使用,用于存储当前状态和从 Perl 获取 /egismosx 标志等。所有这些都存在线程风险。

Rob: Brian报告说,Perl正则表达式代码很糟糕,否则我们现在早就完成了。

Ilya表示,当他有时间时,也计划删除大部分内部全局变量。

pack t 模板

首先是一个前言:Perl的开发版本中已经有了新的pack模板语法。通常,如果你要打包字符串数据的三字符,你会写类似这样的代码:pack "A3", $data。但是,如果你事先不知道会有多少数据呢?新特性是你可以写pack "N/A*", $data,然后pack会返回一个表示数据大小的N字节计数,紧接着是实际数据。然后你使用unpack和类似的模板来告诉它解包字节计数,然后从字符串中提取适当数量的数据。

Ilya有一个想法,即扩展这个功能,使得unpack函数实际上可以确定模板是什么。他说他只是把它提出来讨论,并不是试图让他的补丁包含在核心中。Ilya的想法是添加一个新的unpack指定符t,表示从输入字符串中提取一定数量的字符,然后使用这些字符作为解包其余字符串的模板。如果你写t12,那么字符串的下12个字符将是模板的其余部分。如果你写N/t,那么unpack将解包一个N得到一个数字n,然后像通常使用/一样,假装你写了Tn。Ilya还增加了一个小技巧:/本身是t/t的同义词。

现在这一切的目的是什么?字符串可以携带解包自身的指令。例如,假设你想发送四个字符串"a", "bc", "def", "ghij"。你希望与模板A1 A2 A3 A4一起发送这些字符串。如果你发送单个字符串"A1 A2 A3 A4abcdefghij",那么接收者可以使用模板t11来解包这个字符串。不幸的是,他们仍然需要知道模板本身将是11个字符长,但你可以通过添加A211在字符串的开始来解决这个问题,让接收者使用模板t2/t。这里的t2表示获取一个2字节的模板,即A2,然后根据该模板解包后续数据,所以它得到11。然后它使用11作为后续t的字节计数。不幸的是,接收者仍然需要知道初始模板是t2/t。但是,经过一些进一步的转换,如果你使用模板t和字符串"/A4t2/tA211A1 A2 A3 A4abcdefghij",那么接收者不需要知道数据格式,就可以检索所有数据。该提案还有其他部分,关于将引用嵌入到模板中。如果你想看整个提案,请点击此处。

Greg McCarroll: 我期待在comp.lang.pack.misc上看到第一个CGI问题。

有几个人认为这太复杂了,或者他们看不到这一点,或者他们想看到一个实际世界的例子。(Ilya还没有提供一个。)Joshua Pritikin做出了我认为最中肯的评论:为什么不直接将Storable包含在核心发行版中呢?

CPAN 生日快乐!

CPAN首次上线时间为1995年10月26日14:28:58。谢谢你,Jarkko!

Elaine Ashton: 只有4年!人们不禁要问,接下来的4年将带来什么。

LWP 中的本地地址

人们一直向Gisle询问如何为LWPLocalAddr参数设置默认值。也就是说,他们希望能够指定一个默认的本地地址,该地址与出站LWP套接字绑定。Gisle可以将此作为LWP的新功能添加,但他认为将其直接放入IO::Socket::INET中会更普遍有用。他向该模块提交了一个补丁,如果未显式设置,则将从环境变量中默认设置LocalAddr参数。

这里有一些讨论,但在我看来,它似乎没有抓住Gisle试图做的事情的关键点。

ref 原型的回归

上周Jeff Pinyan发布了一个关于使用(;$)原型声明的函数行为的抱怨。他希望print f arg1, arg2被解析为如果他写了print f(arg1), arg2。目前,Perl会终止,并抱怨f得到了两个参数,而预期最多只有一个。关于这个问题的讨论上周被带偏了。

Mike Guy指出,当你尝试编写一个像rand一样行为的函数时,这个问题也会出现:据说rand的原型是($),但如果你使用该原型创建一个名为myrand的函数,那么print myrand, myrand;会因语法错误而终止,尽管print rand, rand;可以正常工作。

将原型添加到Perl是为了让用户函数能够获得与内置函数享有的语法优势。但一些函数仍然无法用原型来模仿。除了refrand之外,printftie也无法这样模仿。

$^O

Andy Dougherty正在修补Configure,以使其能够确定它正在运行的Linux类型,如果它在Linux上运行。这可能解决了上周Tom的问题。

sort 改进

Peter Haworth提交了其sort补丁的改进版本。他说他已经对几个简单的比较函数进行了基准测试,性能相当不错。(如果它较慢,你期望在简单比较函数中看到最大的差异。)你仍然不能使用XSUB作为排序比较函数,但Peter正在处理这个问题。重新阅读我上周说的。

补丁。

Shell.pm 增强。

Jenda Krynicky希望增强Shell.pm

[Shell.pm]目前允许你编写函数调用echo("hello", "world!"),如果没有已经定义echo函数,它将调用shell的echo命令。它还有一个new构造函数,该构造函数返回一个引用到函数,该函数调用shell命令。Jenda希望能够给构造函数一些额外的参数来告诉它丢弃STDERR,并能够预先提供参数给函数。

Jenda希望在开始之前获取一些关于这个建议的评论,但似乎没有人有话要说。

时区输出

Todd Olson抱怨说没有简单的方法可以获取当前时区的数值格式。(例如,使用-0400代替EDT或使用-0700代替PST。他指出,编写一个函数来计算这个值是浪费的:因为这个值已经存在于某个地方,因为它用于计算localtime()。Todd希望有人向POSIX模块的strftime函数添加另一个%转义符,该转义符将格式化和显示时区为数值格式。然而,他没有提供补丁。

Python 协会成立

Randal Schwartz重新发布了一个关于新Python联盟的公告。

哎呀

Sarathy这周没有说“哇”。

各种

大量错误报告、错误修复、非错误报告、问题、答案,以及一小部分垃圾邮件和垃圾信息。

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


马克-贾森·多米努斯

标签

反馈

这篇文章有什么问题吗?请在GitHub上为我们打开一个问题或拉取请求。