簡體   English   中英

在 Perl 中,有沒有辦法在引號內進行簡單的算術運算?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM