0

私は得ています:

Can't call method "test" without a package or object reference at 4.pl line 6.

理由はわかりませんが、何かアイデアはありますか?

ユーザー.pm

package Users; 
sub new{
    print "Created\n"; 
}
sub test{
    print "a";
}
1;

Test.pl

BEGIN {
  push @INC,"/home/baddc0re/Desktop/perl_test/";
}
use Users;
$user = new Users();
$user->test();
4

2 に答える 2

3

Perl でのオブジェクトの構築は、そのようには機能しません。コンストラクターは、bless関数を使用してオブジェクトに作成された参照を明示的に返す必要があります。実際、Perl では、これがコンストラクターを定義するものです。" new" はサブルーチンの別の名前であり、C++ とは異なり、名前付きの関数を呼び出してnewも Perl にオブジェクトの作成を強制しません。この特定の例でnewは、 は の戻り値を返すだけですprint。これはおそらく真の値であり、testこの値でメソッドを呼び出そうとすると、どのクラスにも bless されていないため失敗します。

于 2012-06-21T18:56:51.850 に答える
3

$users = Users->new()の代わりに構文を使用することをお勧めしますnew Users。メソッド内の値を祝福するのを忘れました。perldocnewを読んでください。perlootut

ユーザー.pm

package Users;

sub new {
    my $class = shift;

    my $self = {};
    bless $self, $class;
    return $self;
}

sub test {
    print "a";
}

1;

主要

use strict;
use Users;

my $users = Users->new();
print $users->test();
于 2012-06-21T18:59:50.630 に答える