本周在 p5p 1999/10/31
- 注释
glob
区分大小写- Perl 在 UNICOS 下
- 新的
perlthread
手册页 - 线程和显式解锁
- 线程和正则表达式
pack t
模板- CPAN 生日快乐!
LWP
中的本地地址ref
原型的回归$^O
sort
改进Shell.pm
增强。- 时区输出
- Python 协会成立
- 哎呀
- 各种
很抱歉这份报告来得晚,但我家中的硬件出了些严重问题,直到修好电脑我才能够完成这份报告。幸运的是,这周交通不太拥堵。
注释
很难追踪所有发生的事情。和以前一样,如果有什么更正或补充,请告诉我。请将它们发送到 [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询问如何为LWP
的LocalAddr
参数设置默认值。也就是说,他们希望能够指定一个默认的本地地址,该地址与出站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是为了让用户函数能够获得与内置函数享有的语法优势。但一些函数仍然无法用原型来模仿。除了ref
和rand
之外,printf
和tie
也无法这样模仿。
$^O
Andy Dougherty正在修补Configure
,以使其能够确定它正在运行的Linux类型,如果它在Linux上运行。这可能解决了上周Tom的问题。
sort
改进
Peter Haworth提交了其sort
补丁的改进版本。他说他已经对几个简单的比较函数进行了基准测试,性能相当不错。(如果它较慢,你期望在简单比较函数中看到最大的差异。)你仍然不能使用XSUB作为排序比较函数,但Peter正在处理这个问题。重新阅读我上周说的。
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上为我们打开一个问题或拉取请求。