Perlでは、ダブルクォーテーション("")や特定のテンプレート(例:heredoc)での変数の補間がサポートされています。スカラは次のように単純に補間されます:
my $name = 'Bob'; print "Hello, $name! "; # Hello, Bob!
配列はダブルクォーテーション内で補間された後、要素が$"(デフォルトはスペース)で区切られた文字列に変換されます:
my @items = ('a','b','c'); print "List: @items "; # List: a b c
ハッシュはキー=>値の形式で補間され、$;で区切られます。
my %h = (x => 1, y => 2); print "Hash: %h "; # Hash: x1y2(異なる場合もあり)
シングルクォーテーション(' ')内では、何も補間されません — 文字列はそのまま出力されます。
また、複雑な表現を中括弧を使って補間することもできます:
print "${name}_test "; # Bob_test
危険性としては、特殊文字の偶然の補間や、配列、ハッシュ、スカラの動作の違いがあります。
なぜ文字列 "Total: $total$val" は時々正しく動作しないのですか?
一般的な答え:"すべてそのまま補間される!"
正しい答え:
文字列 "Total: $total$val" は、変数 $total だけを正しく補間する可能性がありますが、変数 $val は認識されないか、Perl が間違った範囲を補間する可能性があります。変数名が似ている場合にあいまいさを避けるためには、中括弧を使用してください:
print "Total: ${total}${val} ";
歴史
歴史 1
レポートでは、合計の文字列は次のように表示されました:「合計: $sum руб。」。 $rub 変数がコードに追加された後、文字列は「合計: $sum$rub」となり、結果として補間は $sum のみで、$rub がスキップされ、警告が発生しました。誰も理解できませんでしたが、出力された空の文字列を見て初めて気付きました。
歴史 2
SQL クエリを生成する際に、@values を介しての配列の補間が join なしで使用されました:
"IN (@values)"。これにより、期待されるカンマ区切りのリストではなく、スペース区切りの文字列が生成されました。結果的に、SQL エラーと不正な選択が発生しました。
歴史 3
ハッシュのキーのリストを表示するために、%h を文字列「Keys: %h」に使用しました。これにより、キー-値の文字列が結合されてしまい、良いキーのリストが得られませんでした。正しくは、
join ", ", keys %hを行うべきでした。