tjw*_*992 4 oop perl scope lexical-scope
我在我的一个Perl脚本中遇到了一个奇怪的问题.我有一个Perl对象.在某个范围内,我希望更改其中一个对象属性,但我希望在该属性离开范围后将其恢复为旧值.
例:
my $object = Object->new('name' => 'Bob');
{
# I know this doesn't work, but it is the best way
# I can represent what I amd trying to do.
local $object->name('Lenny');
# Prints "Lenny"
print $object->name();
}
# Prints "Bob"
print $object->name();
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这样的事情?
这可能没有您要求的那么多封装,但您可以local-ize哈希的属性.这输出"CarlLennyCarl"
sub Object::new { bless { _name => $_[1] }, $_[0] } }
sub Object::name { $_[0]->{_name} }
my $obj = Object->new("Carl");
print $obj->name;
{
local $obj->{_name} = "Lenny";
print $obj->name;
}
print $obj->name;
Run Code Online (Sandbox Code Playgroud)
您也可以local- 整个方法.这也输出"CarlLennyCarl":
sub Object::new { bless { _name => $_[1] }, $_[0] } }
sub Object::name { $_[0]->{_name} }
my $obj = Object->new("Carl");
print $obj->name;
{
local *Object::name = sub { "Lenny" };
print $obj->name;
}
print $obj->name;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
192 次 |
| 最近记录: |