$i = 5;
print "{$i*10}";
Run Code Online (Sandbox Code Playgroud)
有时我可能需要做上面这样的事情,但是Perl没有按照我想要的方式解释它,而且我只能用另一个变量来做.有一个技巧吗?
Nod*_*ody 11
我建议你使用"printf":
printf("%s",$i*10);
Run Code Online (Sandbox Code Playgroud)
那就行了.
yst*_*sth 11
$i = 5;
print "${\($i*10)}";
Run Code Online (Sandbox Code Playgroud)
要么
print "@{[$i*10]}";
Run Code Online (Sandbox Code Playgroud)
这些内插一个"变量",它是代码块的解引用,包含适当类型的引用(第一个实例中的标量,第二个实例中的数组).
另一种方法是使用一个虚拟散列,始终将键作为值返回:
use strict;
use warnings;
{
package Tie::Hash::Dummy;
use Tie::Hash;
use parent -norequire => 'Tie::StdHash';
sub FETCH { $_[1] }
tie our %Lookup, __PACKAGE__;
}
my $i = 5;
print "$Tie::Hash::Dummy::Lookup{$i*10}";
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用\N{}字符名称查找接口,虽然这将绑定来自不同位置的变量,并且在编译时(以及使用字符串eval,可能是安全问题):
my $i;
BEGIN { $i = 5 }
BEGIN { $^H{'charnames'} = sub { eval $_[0] } }
print "\N{$i*10}";
Run Code Online (Sandbox Code Playgroud)
(如果charnames处理程序返回一个在字符串化时执行eval的重载代理对象,这可能会更好,但我没有时间尝试它.)
另一种方法是使用overload :: constant()设置字符串常量处理程序.