$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ハンドラがoverloを返した場合文字列化時に評価を実行したadedプロキシオブジェクトですが、試してみる時間がありません。)
もう一つの方法は、overload :: constant()で文字列定数ハンドラを設定することです。
あなたはハッシュにアクセスしようとしていますか?
もしそうでなければ、単純に次のようにしてください:print "{"($ i * 10) "}";
なぜ "" $ {\ $ i * 10} ";"、スカラーへの参照が機能しないのですか? – Learning
\は優先順位が高いので、$ iを参照して10を掛けて、その結果をシンボリックリファレンスとして使用します。あなたは '' $ {\(EXPR)} ''の式全体を参照する(そして' $ {} 'で逆参照する)必要があります。 – ysth
'\(EXPR)'は配列の参照として解釈されませんが、メンバが1つしかないのでスカラーの参照と同じものを評価しますか? – Learning