读取时 Perl DATA 文件句柄为空

Perl DATA filehandle is empty when read

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

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

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

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

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

本例中DATA文件句柄为空的原因在于使用了Switch模块。这个模块通过使用 source filter 来工作,它在处理过程中破坏了数据文件句柄。

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

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

# use Switch;

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

__DATA__
One line of data
Second line of data

如果没有 "use Switch",您会看到打印出来的行,但没有打印任何内容。