Replace 替代:替换评估

Replace 替代:替换评估,replace,eval,raku,subst,Replace,Eval,Raku,Subst,如果替换在变量中传递,第一个替换和第二个替换是否相等 #!/usr/bin/env perl6 use v6; my $foo = 'switch'; my $t1 = my $t2 = my $t3 = my $t4 = 'this has a $foo in it'; my $replace = prompt( ':' ); # $0 $t1.=subst( / ( \$ \w+ ) /, $replace ); $t2.=subst( / ( \$ \w+ ) /, { $repla

如果替换在变量中传递,第一个替换和第二个替换是否相等

#!/usr/bin/env perl6
use v6;

my $foo = 'switch';
my $t1 = my $t2 = my $t3 = my $t4 = 'this has a $foo in it';

my $replace = prompt( ':' ); # $0

$t1.=subst( / ( \$ \w+ ) /, $replace );
$t2.=subst( / ( \$ \w+ ) /, { $replace } );
$t3.=subst( / ( \$ \w+ ) /, { $replace.EVAL } );
$t4.=subst( / ( \$ \w+ ) /, { ( $replace.EVAL ).EVAL } );

say "T1 : $t1";
say "T2 : $t2";
say "T3 : $t3";
say "T4 : $t4";

# T1 : this has a $0 in it
# T2 : this has a $0 in it
# T3 : this has a $foo in it
# T4 : this has a switch in it

$replace
{$replace}
之间的唯一区别在于,第二个是返回变量值的块。这只是增加了一个间接层次,但结果是一样的。
更新:根据@raiph的评论编辑。

我很好奇你为什么写“返回变量本身”。我认为这是误导性的,并反映了,不明白为什么你没有写“回报价值”,这是实际发生的事情。在
my$replace=99;子项:()是rw{$replace};foo=42;比如说$replace;#42
{$replace}
中的
$replace
确实产生变量本身,而不是值,并且块返回变量本身,而不是它包含的值。但是在sid示例中的
{$replace}
中,
$replace
生成变量的值,因此块也返回该值,而不是变量本身。@raiph正确,返回值;在您的示例中,它实际上将一个可写容器返回到变量中。不管怎样,我还是会修改它。你的编辑在我看来仍然很奇怪。当变量(容器)不相关时,为什么要提到“变量本身”?这与
42
{42}
之间的区别完全相同。“在您的示例中,它实际上将一个可写容器返回到变量中。”在我的示例中,它们本质上是相同的<代码>我的$replace=99;子项:()是rw{$replace};假设$replace.WHERE==foo.WHERE;#正确。符号
$replace
已绑定到
my
中的新容器。然后
is rw
告诉P6将
{$replace}
中的
$replace
解释为容器(变量),而不是它所持有的值。