我有一个主脚本从另一个模块调用一个函数。我在主脚本中打开一个文件,我想使用附加到此文件的文件句柄作为调用函数中的参数(我不想在函数中打开文件,因为我将调用相同的函数在同一个文件上多次,所以每次打开它都没有意义。)
在我的主要剧本中:
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.
什么阻止我使用文件句柄?为什么没有打开?我该怎么做才能解决这个问题?
答案 0 :(得分:4)
您正在调用函数作为方法。
AnotherModule->ProcessDBU($IN_FILE, $OUT_FILE);
应该是
AnotherModule::ProcessDBU($IN_FILE, $OUT_FILE);
三个不同之处:
->
的左侧)作为第一个参数传递。