[英]In Perl,is there a way to do simple arithmetic inside quotes?
$i = 5;
print "{$i*10}";
有時我可能需要做上面的事情,但是 Perl 並沒有按照我想要的方式解釋它,我只能用另一個變量來做。有竅門嗎?
我建議你使用“printf”:
printf("%s",$i*10);
這樣就行了。
$i = 5;
print "${\($i*10)}";
或者
print "@{[$i*10]}";
這些插入一個“變量”,它是包含適當類型的引用的代碼塊的取消引用(第一個實例中的標量,第二個實例中的數組)。
另一種方法是使用一個虛擬 hash 始終將鍵作為值返回:
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 的重載代理 object,這可能會更好,但我沒有時間嘗試它。)
另一種方法是使用重載::constant() 設置字符串常量處理程序。
$i = 5;
print "${\($i*10)}";
不是我建議這樣做!
更新:它(或多或少)相當於:
$i = 5;
$j = ($i * 10);
$k = \$j;
print "${$k}";
你可以嘗試以下,
print "{". $i*10. "}";
您是否嘗試訪問 hash?
如果沒有,那么只需使用: print "{".($i*10)"}";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.