我有一个带有模板的Perl模块(由模块模块处理)存储在文件末尾的__DATA__和__END__关键字之间.尝试使用模板生成文件时,生成的文件为空,没有警告或错误输出.调试之后,我发现DATA文件句柄在传递给Template模块之前实际上是空的.
此模块的先前版本能够从DATA正确读取模板,但我所做的任何更改都不应影响此部分代码.这些更改包含完全独立函数中的逻辑更改,并将以下use语句添加到模块:
use DBI;
use DBI::Const::GetInfoType;
use Switch;
Run Code Online (Sandbox Code Playgroud)
我已经尝试在perl模块上添加写权限(它最初是只读的)并删除了__END__关键字,因为我发现这不是必需的.不幸的是,DATA文件句柄仍然显示为空.
什么样的问题可能导致DATA文件句柄为空,并且这些问题中的任何一个都适用于我的情况?我使用的是perl v5.12.5.
在这种情况下,DATA文件句柄为空的原因归结为使用Switch模块.该模块使用源过滤器,该过滤器在处理过程中破坏DATA文件句柄.
替代方案包括使用if-elsif-else或使用given-when构造,尽管这是一个实验性功能,因此在更高版本的Perl中它可能不会表现相同.
编辑:这是上述问题的简单复制器:
# use Switch;
while(<DATA>) {
print($_);
}
__DATA__
One line of data
Second line of data
Run Code Online (Sandbox Code Playgroud)
没有"使用开关",你会看到打印出来的线条,但是没有打印出来.
| 归档时间: |
|
| 查看次数: |
185 次 |
| 最近记录: |