Perl - 捕获类中未定义的键?

  • 本文关键字:未定义 Perl perl
  • 更新时间 :
  • 英文 :


我们可以用AUTOLOAD捕获未定义的方法,有没有办法在类实例中捕获未定义的变量?

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

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

你的类可以包装一个绑定的哈希

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.

最新更新