Perl,懒洋洋地评估字符串

Mik*_*ike 7 string perl lazy-evaluation

请考虑以下Perl代码.

#!/usr/bin/perl

use strict;
use warnings;

$b="1";

my $a="${b}";

$b="2";

print $a;
Run Code Online (Sandbox Code Playgroud)

脚本显然输出1.我希望它是现在的价值$b.

Perl中最聪明的方法是如何实现这样的懒惰评估?我希望在需要${b}之前保持"未替代" $a.

Eth*_*her 15

我更想知道你为什么要这样做.根据您真正需要做的事情,您可以使用各种方法.

您可以将代码包装在coderef中,并仅在需要时对其进行评估:

use strict; use warnings;

my $b = '1';
my $a = sub { $b };
$b = '2';
print $a->();
Run Code Online (Sandbox Code Playgroud)

这种方法的一个变体是使用一个命名函数作为闭包(这可能是最好的方法,在你的调用代码的更大的上下文中):

my $b = '1';
sub print_b
{
    print $b;
}

$b = '2';
print_b();
Run Code Online (Sandbox Code Playgroud)

您可以使用对原始变量的引用,并根据需要取消引用它:

my $b = '1';
my $a = \$b;
$b = '2';
print $$a;
Run Code Online (Sandbox Code Playgroud)