簡體   English   中英

Perl找不到對象方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM