'不能在Perl中使用未定义的值作为文件句柄引用'错误

时间:2010-11-17 07:04:03

标签: perl

运行perl脚本时出现此错误:

  

不能在scr第44行使用未定义的值作为文件句柄引用。

第44行:

open my $fh, "|-", "mail", "-s", $subject, $owner, "-c", $sendto
    or die "$0: could not start mail: $!";

一切看起来都不错。错误是什么意思?

2 个答案:

答案 0 :(得分:3)

我认为错误消息有误。这段代码:

open my $fh, '|-', 'perl', '-v' or die "$!\n";

因错误消息

而死亡
  

不能将未定义的值用作文件句柄引用...

在Perl 5.6.1下,但随着

而死亡
  

列表形式的管道未实施...

在Perl 5.12.1下(在Win32上)。

“列表表单”表示将程序及其参数指定为单独的值。单值表单在两个版本上运行:

open my $fh, '|-', 'perl -v' or die "$!\n";

答案 1 :(得分:1)

这是一个非常古老的perl,我猜这个版本不支持词法文件句柄,所以“打开我的$ fh”将无法正常工作,因为古代perl将会看到,基本上,open undef和因此错误消息。可能的解决方案:

  • 将你的perl升级为青铜时代。
  • 请改用旧学校open FH语法。
  • 使用gensym生成可用作文件句柄的符号。
  • 使用普通IO::*的{​​{1}}类之一。