my $self; { my %hash; $self = bless(\%hash, $pkg); }
HTML/Template.pm
から引用されています。なぜなら、単純にbless $self,$pkg
ではありませんか?ここでそのトリックをどう理解していますか?
my $self; { my %hash; $self = bless(\%hash, $pkg); }
HTML/Template.pm
から引用されています。なぜなら、単純にbless $self,$pkg
ではありませんか?ここでそのトリックをどう理解していますか?
$self
はundef
あるので - ほぼ同等のようになります。
my $self ={}; { $self = bless($self, $pkg); }
または:あなたはundefをを祝福することはできません
ので:
$self = bless({}, $pkg);
編集コメントに答えるためにエラーCan't bless non-reference value at ...
が表示されます。ハードな参照のみが祝福されるかもしれないからです。これはPerl がオブジェクトのカプセル化を実施する方法です。 perlobj manpageを参照してください。
%hash
の範囲を囲むブロックに限定しようとしていたと思います。次の文で
my $self = bless {}, $pkg;
$hash = {};
^^^^^ ^^
referrer referent
:これは、以下のように書き換えることができる
$self = bless($hash, $pkg);
bless
はリファレントマーク(匿名ハッシュ)$hash
は($pkg
の対象であるものとして、参照しますHTML :: Templateクラス)。変数$hash
は変更されません。
bless
関数は、祝福された匿名ハッシュへの参照を返します。したがって、$self
は、祝福された匿名ハッシュ(参照先)への参照になります。
bless
関数の最初の引数は参照であるならば、それはそれは、ない変数自体恵まれている参照しているものであることを覚えておくことが重要です。
$self = bless($self, $pkg);
$self
doesnの」に何かを参照する - それはundef
です。祝福することはありません。これを試すのと同じことです:
$self = bless(undef, $pkg);
Bless My Referentsは、この主題の素晴らしい紹介です。
あなたはvarsが祝福できないことを意味するのですか? – Learning
私は 'undef'がハッシュリファレンスと同じではないことを意味します:) –
なぜ私は最初にそれを祝福して後で初期化できませんか? – Learning