[英]Perl Can't locate object method
這是我第一次使用perl(v5.28.1)。 我收到錯誤消息:
'Can't locate object method "load" via stepReader (perhaps you forgot to load 'stepReader')'.
當我在文件中打印某些內容時,它可以工作,但是以某種方式找不到我的方法。
我在名為src
的子目錄中有stepReader.pm
**
example.pm
use lib 'src/';
use stepReader;
@ISA = ('stepReader');
my $class = stepReader->load('assets/glasses.STEP');
stepReader.pm
package src::stepReader;
use strict;
use warnings;
sub load {
# Variable for file path
my $filename = @_;
# Open my file
open(my $fh, '<:encoding(UTF-8)', $filename)
or die "Could not open file '$filename' $!";
# Print the file!
while (my $row = <$fh>) {
chomp $row;
print "$row\n";
}
return bless {}, shift;
}
print "test if this works!";
1;
輸出:
Can't locate object method "load" via package "stepReader" (perhaps you forgot to load "stepReader"?) at example.pm line 6.
test if this works!
我懷疑這很容易,但是我希望有人可以幫助我。 提前致謝
直接的問題是您的代碼中沒有名為stepReader
類,只有src::stepReader
:
package src::stepReader;
也就是說,該函數稱為src::stepReader::load
,而不是stepReader::load
。 將包聲明更改為:
package stepReader;
同樣,以小寫字母開頭的模塊名稱被非正式地保留給實用程序。 對於普通模塊,慣例是使用大寫字母:
package StepReader;
(並重命名文件StepReader.pm
以進行匹配)。
參數解包也壞了:
# Variable for file path my $filename = @_;
這會將@_
數組置於標量上下文中,從而提供元素數。 您要改為分配列表(在左側帶有括號),並且方法調用將調用方作為隱式的第一個參數傳遞:
my ($class, $filename) = @_;
...
return bless {}, $class;
或者:
my $class = shift;
my ($filename) = @_;
要么
my $class = shift;
my $filename = shift;
您應該始終use strict; use warnings;
來啟動文件use strict; use warnings;
use strict; use warnings;
或同等學歷。 目前在example.pm
丟失了:
use strict;
use warnings;
use lib 'src';
use StepReader;
# This line is not needed, but if it were:
# our @ISA = ('StepReader');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.