Perl での文字列補間中に変数名にアンダースコアが続くと正しく評価されないのはなぜですか?
my $i = 3;
print "i = $i\n"; # works, prints "i = 3"
print "_i = _$i\n"; # works, prints "_i = _3"
print "i_ = $i_\n"; # FAILS, prints "i_ = "
print "_i_ = _$i_\n"; # sort of works, prints "_i_ = _"
Perl での文字列補間中に変数名にアンダースコアが続くと正しく評価されないのはなぜですか?
my $i = 3;
print "i = $i\n"; # works, prints "i = 3"
print "_i = _$i\n"; # works, prints "_i = _3"
print "i_ = $i_\n"; # FAILS, prints "i_ = "
print "_i_ = _$i_\n"; # sort of works, prints "_i_ = _"
他の回答に加えて、変数を指定するための代替構文を使用できます。
print "i_ = ${i}_\n";
中括弧の使用法に注意してください:{
および}
変数名を指定します。疑問がある場合はいつでも、この構文を選択できます。
$i_
は有効な識別子であるため、その変数の値を出力しようとしています(まだ設定されていないため、設定されていますundef
)。
オンにstrict
してwarnings
。
マットは正しいです。値の直後にアンダースコアが本当に必要な場合は、バックスラッシュを使用してください"$i\_"
。
常にこれらを使用してください:
use strict;
use warnings;