gpt4 book ai didi

perl - $/是否有可能支持正则表达式?

转载 作者:行者123 更新时间:2023-12-04 10:07:51 24 4
gpt4 key购买 nike

报价 perlvar :

... the value of $/ is a string, not a regex. awk has to be better for something. :-)



不难想到这样的功能会有用的情况 - 解析具有可变长度记录的文件是我多次遇到的经典用例。

到目前为止,我从来没有遇到过将整个文件加载到内存中并执行以下操作的问题:
my @records = split /my_regex/, <> ;

但由于显而易见的原因,这种技术不能用于可用内存不足的情况。事实上,很多时候不需要同时存储所有记录。

这让我回到 $/ .

我觉得奇怪的是该语言没有为 $/ 提供正则表达式支持.这是故意设计的吗?是根本不可能实现吗?在缺乏漂亮功能的情况下,还有哪些其他解决方法可以被视为最佳实践?

最佳答案

甚至尝试也没有多大意义。很多时候,如果不阅读它的末尾,您将无法判断是否已到达该行的末尾。这在交互情况下可能非常糟糕。

例如,假设您有以下程序:

local $/ = qr/\n|\r\n?/;  # Handle Windows, Unix and old MacOS line endings.
while (1) {
print "Please enter a command: ";
my $cmd = <>;
$cmd =~ s{$/\z}{};
process($cmd);
}

看起来很简单,对吧?其实支持 qr/\n|\r\n?/可能是此请求的第一个原因。好吧,即使是那个简单的代码也有严重的缺陷。假设我使用 MacOS 行尾 (CR, ^M,\r)
 $ processor
Please enter a command: foo^M
[hangs]

程序挂起是因为在输入另一个字符之前,它无法判断我是给它一个 MacOS 行尾(CR、^M、\r)还是 Windows 行尾(CRLF、^M^J、\r\n)。

我必须输入第二个命令来处理第一个,第三个命令来处理第二个,等等。这没有任何意义。

关于perl - $/是否有可能支持正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19159052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com