$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