2011-07-05 31 views

回答

10
$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()设置字符串常量处理程序。

+0

为什么'“$ {\ $ i * 10}”;',对标量的引用不起作用? – Learning

+1

\具有更高的优先级,因此需要引用$ i并将其乘以10,然后使用该结果作为符号引用。您需要对整个表达式进行引用(然后对'$ {}'进行解引用):'“$ {\(EXPR)}”'。 – ysth

+0

你确定'\(EXPR)'没有被解释为引用一个数组,但它的计算结果与标量引用相同,因为它只有一个成员? – Learning

1

你可以尝试以下,

print "{". $i*10. "}"; 
+0

我想在引号内做到这一点。 – Learning

0

你试图访问一个哈希?

如果不是,那么只需使用:print“{”。($ i * 10)“}”;

2
$i = 5; 
print "${\($i*10)}"; 

不是我推荐那么做!

更新:它(或多或少),相当于:

$i = 5; 
$j = ($i * 10); 
$k = \$j; 
print "${$k}"; 
+0

太棒了,它是如何工作的? – Learning

+1

Perl将引用插入为'$ {EXPR}'和'@ {EXPR}',因此您只需编写一个表达式来返回所需值的引用。 – salva

11

我建议你使用的 “printf”:

printf("%s",$i*10); 

这就行了。

+4

有了所有其他选项,这个是正确的99.999%的时间。 – ysth

相关问题