2011-07-05 34 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

相關問題