如何将打开的文件句柄作为函数的参数传递?

时间:2015-08-07 18:20:43

标签: perl file-io

我有一个主脚本从另一个模块调用一个函数。我在主脚本中打开一个文件,我想使用附加到此文件的文件句柄作为调用函数中的参数(我不想在函数中打开文件,因为我将调用相同的函数在同一个文件上多次,所以每次打开它都没有意义。)

在我的主要剧本中:

open(my $IN_FILE, "<input.txt") or die "Can't open: $!\n";
open(my $OUT_FILE, ">output.txt") or die "Can't open: $!\n";

AnotherModule->ProcessDBU($IN_FILE, $OUT_FILE); 

AnotherModule

sub ProcessDBU{
    my $IN_FILE = $_[0];
    my $OUT_FILE = $_[1];

    local $/ = ' ';

    while(<$IN_FILE>){
        SomeProcess();
    }
} 

但是,当我尝试运行脚本时,会发生以下错误:

readline() on unopened filehandle at AnotherModule.pm line 7.

什么阻止我使用文件句柄?为什么没有打开?我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:4)

您正在调用函数作为方法。

AnotherModule->ProcessDBU($IN_FILE, $OUT_FILE); 

应该是

AnotherModule::ProcessDBU($IN_FILE, $OUT_FILE); 

三个不同之处:

  • 方法调用搜索继承层次结构
  • 方法调用忽略原型,
  • 方法调用将调用者(->的左侧)作为第一个参数传递。