请考虑以下Perl代码.
- #!/usr/bin/perl
- use strict;
- use warnings;
- $b="1";
- my $a="${b}";
- $b="2";
- print $a;
脚本显然输出1.我希望它是$b的当前值.
Perl中最聪明的方法是如何实现这样的懒惰评估?我希望${b}保持“未替代”,直到需要$a.
解决方法
我更想知道你为什么要这样做.根据您真正需要做的事情,您可以使用各种方法.
您可以将代码包装在coderef中,并仅在需要时对其进行评估:
- use strict; use warnings;
- my $b = '1';
- my $a = sub { $b };
- $b = '2';
- print $a->();
这种方法的一个变体是使用命名函数作为closure(这可能是最好的方法,在你的调用代码的更大的上下文中):
- my $b = '1';
- sub print_b
- {
- print $b;
- }
- $b = '2';
- print_b();
您可以使用对原始变量的引用,并根据需要取消引用它:
- my $b = '1';
- my $a = \$b;
- $b = '2';
- print $$a;