$i = 5;
print "{$i*10}";
有时候我可能需要做类似上面的事情,但Perl并没有按照我想要的方式来解释它,而我只能用另一个变量来解释它。是否有一个窍门?在Perl中,有没有办法在引号内做简单的算术运算?
$i = 5;
print "{$i*10}";
有时候我可能需要做类似上面的事情,但Perl并没有按照我想要的方式来解释它,而我只能用另一个变量来解释它。是否有一个窍门?在Perl中,有没有办法在引号内做简单的算术运算?
$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处理函数返回一个可欣赏(但是我没有时间去尝试它)。
另一种方法是使用overload :: constant()设置字符串常量处理程序。
你试图访问一个哈希?
如果不是,那么只需使用:print“{”。($ i * 10)“}”;
为什么'“$ {\ $ i * 10}”;',对标量的引用不起作用? – Learning
\具有更高的优先级,因此需要引用$ i并将其乘以10,然后使用该结果作为符号引用。您需要对整个表达式进行引用(然后对'$ {}'进行解引用):'“$ {\(EXPR)}”'。 – ysth
你确定'\(EXPR)'没有被解释为引用一个数组,但它的计算结果与标量引用相同,因为它只有一个成员? – Learning