gpt4 book ai didi

Perl DATA 文件句柄在读取时为空

转载 作者:行者123 更新时间:2023-12-01 04:53:46 25 4
gpt4 key购买 nike

我有一个 Perl 模块,其中在文件末尾的 __DATA__ 和 __END__ 关键字之间存储了一个模板(供 Template 模块处理)。尝试使用模板生成文件时,生成的文件为空,没有警告或错误输出。经过调试,发现DATA文件句柄在传递给Template模块之前其实是空的。

此模块的先前版本能够正确地从 DATA 读取模板,但我所做的任何更改都不应该影响这部分代码。这些更改包括完全独立的函数中的逻辑更改以及向模块添加以下使用语句:

use DBI;
use DBI::Const::GetInfoType;
use Switch;

我尝试在 perl 模块上添加写权限(它最初是只读的)并删除 __END__ 关键字,因为我发现这没有必要。不幸的是,DATA 文件句柄仍然显示为空。

什么样的问题会导致 DATA 文件句柄为空,这些问题是否适用于我的情况?我正在使用 perl v5.12.5。

最佳答案

在这种情况下 DATA 文件句柄为空的原因归结为 Switch 模块的使用。该模块使用 source filter它在处理过程中破坏了 DATA 文件句柄。

替代方法包括使用 if-elsif-else 或使用 given-when构造,虽然这是一个实验性的特性,所以它在 Perl 的更高版本中的行为可能不同。

编辑:这是上述问题的简单复制器:

# use Switch;

while(<DATA>) {
print($_);
}

__DATA__
One line of data
Second line of data

如果没有“使用开关”,您会看到打印出的行,但没有打印任何内容。

关于Perl DATA 文件句柄在读取时为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42160961/

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