读取时Perl DATA文件句柄为空

时间:2017-02-10 13:48:44

标签: perl filehandle

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

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

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

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

什么样的问题可能导致DATA文件句柄为空,并且这些问题中的任何一个都适用于我的情况?我使用的是perl v5.12.5。

1 个答案:

答案 0 :(得分:8)

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

备选方案包括使用if-elsif-else或使用given-when构造,尽管这是一个实验性功能,因此在以后的Perl版本中它的行为可能不同。

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

void insert(const string &word, size_t letter_no = 0);

如果没有"使用Switch",您会看到打印出来的线条,但是没有打印出来。