ビルトインは、参照にパッケージ名のbless
タグを付けます。そのパッケージは、オブジェクトで呼び出されるメソッドを解決するために使用されます。したがって、明示的なパッケージがなくても、実行できます
my $obj = bless { x => 1}, 'Foo';
sub Foo::x {
my $self = shift;
return $self->{x};
}
print "1 == ", $obj->x, "\n";
に与えられたパッケージ名を引用する必要があることに注意してくださいbless
。
そうです、インポートされたクラスを含め、任意のクラスへの参照を bless できます。ただし、これはコンストラクターを実行せず、クラス/オブジェクト (クラス メソッドなど) と対話するメソッドのみを使用する必要があるオブジェクト指向の原則である「カプセル化」を破ることに注意してくださいnew
。
編集:完全修飾名
各グローバル変数には、パッケージ名と変数名で構成される完全修飾名があります。サブルーチンは、特別な種類の変数です。たとえば、次のようになります。
$Some::Package::var = 5;
sub Some::Package::give_var { return $Some::Package::var }
とほぼ同じものです
{
package Some::Package; # package declaration opens a new namespace
our $var = 5;
sub give_var { return $var }
}
したがって、パッケージで名前がsub Foo::x {...}
付けられたサブを宣言します。x
Foo