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

Perl 如何将打开的文件句柄作为函数的参数传递?,perl,file-io,Perl,File Io,我有一个从另一个模块调用函数的主脚本。我在主脚本中打开了一个文件,我想在调用的函数中使用附加到此文件的filehandle作为参数(我不想在函数中打开该文件,因为我将在同一文件上多次调用同一函数,所以每次打开它都没有意义) 在我的主要脚本中: open(my $IN_FILE, "<input.txt") or die "Can't open: $!\n"; open(my $OUT_FILE, ">output.txt") or die "Can't open: $!\n"; A

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

在我的主要脚本中:

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); 
但是,当我尝试运行脚本时,会出现以下错误:

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

是什么阻止我使用文件句柄?为什么它没有打开?如何解决此问题?

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

AnotherModule->ProcessDBU($IN_FILE, $OUT_FILE); 
应该是

AnotherModule::ProcessDBU($IN_FILE, $OUT_FILE); 
三个区别:

  • 方法调用搜索继承层次结构
  • 方法调用忽略原型,并且
  • 方法调用将invocant(
    ->
    的剩余部分)作为第一个参数传递

    • 您正在将函数作为方法调用

      AnotherModule->ProcessDBU($IN_FILE, $OUT_FILE); 
      
      应该是

      AnotherModule::ProcessDBU($IN_FILE, $OUT_FILE); 
      
      三个区别:

      • 方法调用搜索继承层次结构
      • 方法调用忽略原型,并且
      • 方法调用将invocant(
        ->
        的剩余部分)作为第一个参数传递

      啊,这是一个很容易解决的问题。我甚至不知道这两个方法之间有什么区别。方法调用将对象或类作为第一个参数传递给该方法。所以你在sub中的$IN_文件实际上是“AnotherModule”。啊,这是一个简单的修复。我甚至不知道这两个方法之间有什么区别。方法调用将对象或类作为第一个参数传递给该方法。所以你在sub中的$IN_文件实际上是“AnotherModule”。