$i = 5;
print "{$i*10}";
有时我可能需要做上面这样的事情,但是Perl并没有按照我想要的方式解释它,而且我只能用另一个变量来解释它。有一个技巧吗?
答案 0 :(得分:11)
我建议你使用“printf”:
printf("%s",$i*10);
那就行了。
答案 1 :(得分:11)
$i = 5;
print "${\($i*10)}";
或
print "@{[$i*10]}";
这些内插一个“变量”,它是代码块的解引用,包含适当类型的引用(第一个实例中的标量,第二个实例中的数组)。
另一种方法是使用虚拟散列,始终将键作为值返回:
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}";
另一种方法是使用\N{}
字符名称查找接口,虽然这将绑定来自不同位置的变量,并且在编译时(以及使用字符串eval,可能是安全问题):
my $i;
BEGIN { $i = 5 }
BEGIN { $^H{'charnames'} = sub { eval $_[0] } }
print "\N{$i*10}";
(如果charnames处理程序返回一个在字符串化时执行eval的重载代理对象,那么可能可以更好地工作,但我没有时间尝试它。)
另一种方法是使用overload :: constant()设置字符串常量处理程序。
答案 2 :(得分:2)
$i = 5;
print "${\($i*10)}";
不是我建议那样做的!
更新:它(或多或少)等同于:
$i = 5;
$j = ($i * 10);
$k = \$j;
print "${$k}";
答案 3 :(得分:1)
您可以尝试以下方法,
print "{". $i*10. "}";
答案 4 :(得分:1)
您是否尝试访问哈希?
如果没有,那么只需使用:print“{”。($ i * 10)“}”;