3

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初期化されていないのに、ダンプしたハッシュに値が含まれているのはなぜですか?
メンバー変数をどのように使用/初期化/処理する必要がありますか? ここで何が誤解されていますか?

4

2 に答える 2

4

$varレキシカルクラス変数であり、あなたの例では未定義です。

あなたはおそらく欲しい:

sub print_object {  
    my $self = shift;
    print "var = $self->{var}\n";
}
于 2013-10-18T20:49:14.977 に答える