2017-07-27 7 views
0

AUTOLOADを使用して未定義のメソッドを取得できますが、クラスインスタンスで未定義の変数をキャプチャする方法はありますか?Perl - クラス内の未定義キーをキャプチャしていますか?

package Example; 
sub new { 
    my ($class) = @_; 
    my $self = {}; 
    bless($self, $class); 
    return $self; 
} 
sub AUTOLOAD { 
    print("hello\n"); 
} 


use Example; 
my $exp = Example->new(); 
$exp->methodname; # prints "hello" 
$exp->{fieldname}; # currently undefined 
+0

存在しないか、値がundefinedを返します 'undef'なので、あなただけ使用することができていないキーを['defined'](https://perldoc.perl.org/functions/defined.html)。 –

+2

特殊な処理が必要な場合は、(直接ハッシュにアクセスするのではなく)アクセサを提供してください。 – ikegami

答えて

1

あなたのクラスtied hash

package Example::Tie; 
sub TIEHASH { 
    my ($pkg,@list) = @_; 
    bless { @list }, $pkg; 
} 

sub FETCH { 
    my ($tied,$key) = @_; 
    if (!defined($tied->{$key})) { 
     warn "$key is undefined!"; 
    } 
    $tied->{$key}; 
} 

sub STORE { 
    my ($tied,$key,$val) = @_; 
    $tied->{$key} = $val; 
} 

package Example; 

sub new { 
    my ($pkg,@list) = @_; 
    my $self = {}; 
    tie %$self, 'Example::Tie', @list; 
    bless $self, $pkg; 
} 

########### 

package main; 
my $exp = Example->new(); 
print $exp->{fieldname}; 

出力ラップすることができます:

fieldname is undefined! at 45357987.pl line 10. 
関連する問題