我試圖在Perl中使用OO。我做了如下瑣碎類:爲什麼我不能在新的裏面初始化成員變量?
#/usr/bin/perl
package Tools::Util;
use strict;
use warnings;
my $var;
sub new {
my ($class, $arg) = @_;
my $small_class = {
var => $arg,
};
return bless $small_class;
}
sub print_object {
print "var = $var\n"; #this is line 20
}
1;
這是一個測試腳本:
#!/usr/bin/perl
use strict;
use warnings;
use Tools::Util;
my $test_object = new Tools::Util("Some sentence");
$test_object->print_object();
use Data::Dumper;
print Dumper($test_object);
結果我得到的是:
Use of uninitialized value $var in concatenation (.) or string at Tools/Util.pm line 20.
var =
$VAR1 = bless({
'var' => 'Some sentence'
}, 'Tools::Util');
我不明白這一點。我認爲Perl中的對象是哈希值,所以我可以在沒有$
的情況下使用相同的名稱訪問/初始化成員變量。爲什麼在這種情況下,$var
未初始化,但我轉儲包含該值的散列?
我應該如何使用/初始化/處理成員變量以及我在這裏誤解了什麼?
幾乎可以確定你想要'祝福$ OBJ,$ class'而不僅僅是'祝福$ obj'。 – pilcrow
sidenote,'bless $ small_class,$ class;'更適合繼承,'Tools :: Util-> new(「Some sentence」)'優於間接語法。 –