【发布时间】:2015-11-29 19:38:13
【问题描述】:
我在我的一个 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();
有没有办法实现这样的目标?
【问题讨论】:
-
一个简单但不起眼的技巧是将原始值存储在范围顶部的新变量中,做你的事情,然后在底部恢复原始值。
-
如果你可以在块内或块外调用不同的方法(具有不同的实现),这将起作用。
标签: perl oop scope lexical-scope