ProgrammingバックエンドPerl開発者

Perlの文字列内で変数や式を補間する方法はありますか?それを使用する際に考慮すべき点は何ですか?

Hintsage AIアシスタントで面接を突破

回答

Perlは**二重引用符(")と一重引用符(')**の2種類の文字列リテラルをサポートしています。二重引用符内の文字列では、変数や特殊文字(例:\n, \t)がその値に置き換えられる補間が行われます。一重引用符内では補間は行われず、内容は文字通りに解釈されます。

例:

my $name = "Alex"; print "Hello, $name! "; # Hello, Alex! print 'Hello, $name! '; # Hello, $name! # 式の補間は中かっこを使用して可能: my $i = 10; print "i + 5 = @{[$i + 5]} "; # i + 5 = 15

特徴と注意点:

  • 変数の後に文字が続く場合、それをエスケープするのを忘れないでください。そうしないとPerlはそれを変数名の一部と解釈します。
  • 複雑な式には補間のある文字列内で@{[ ... ]}を使用してください。これは式の結果を文字列に挿入する安全な方法です。

トリックの質問

二重引用符内の文字列で変数が補間されないのはどのような場合か?

回答: 変数がエスケープされた(\$var)、一重引用符内である、または中かっこの構文が用途に合わず、変数名が中かっこで囲まれていないために名前が文字に結合される場合です。

my $world = 'earth'; print "Hello, $worlds! "; # エラー: $worldsという変数は存在せず、$worldと文字sが結合されたもの

知識不足による実際のエラーの例


ストーリー

大規模プロジェクトで、ログに変数を含む文字列を使用していました:

my $file = '/tmp/data'; print LOG 'File: $file

';


ファイルのパスが表示されることを期待していましたが、ログには文字列`$file`がそのまま書き込まれました。一重引用符が使用されたためです。この問題は本番環境で実行した後に気が付きました。

ストーリー

ある開発者が中かっこなしで文字列内に変数を挿入しました:

my $user = "bob"; print "User: $user21

";


`bob21`が表示されることを期待していましたが、インタープリタは変数`$user21`を探し始めました(それは存在しませんでした)。これにより、レポートに空の値が表示されました。

ストーリー

文字列内の式の結果を表示するために次のコードが使用されました:

my $a = 3; print "Sum: $a+5

"; # 期待される出力: 'Sum: 8', 実際の出力: 'Sum: 3+5'


実際、補間は変数のみを計算し、式はそのまま文字列に挿入されます。`@{[ ... ]}`を使用しなければなりません。