8

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_ = _"
4

4 に答える 4

26

他の回答に加えて、変数を指定するための代替構文を使用できます。

print "i_ = ${i}_\n";

中括弧の使用法に注意してください:{および}変数名を指定します。疑問がある場合はいつでも、この構文を選択できます。

于 2011-08-21T11:18:54.920 に答える
18

$i_は有効な識別子であるため、その変数の値を出力しようとしています(まだ設定されていないため、設定されていますundef)。

オンにstrictしてwarnings

于 2011-08-21T11:06:50.480 に答える
7

マットは正しいです。値の直後にアンダースコアが本当に必要な場合は、バックスラッシュを使用してください"$i\_"

于 2011-08-21T11:11:18.047 に答える
3

常にこれらを使用してください:

use strict;
use warnings;
于 2011-08-21T12:31:39.033 に答える