读取时Perl DATA文件句柄为空

Rob*_*ing 1 perl filehandle

我有一个带有模板的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.

Rob*_*ing 8

在这种情况下,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)

没有"使用开关",你会看到打印出来的线条,但是没有打印出来.

  • 我知道`Switch`很不愉快,但我不知道它与你的`DATA`部分搞混了.你有参考吗? (2认同)