フォーマットされた SQL のブロックを追加したい文字列があります。ヒアドキュメントを使用して追加する方法はありますか? または、ヒア ドキュメントを使用して新しい文字列を作成し、それを既存の文字列に追加する必要がありますか?
3 に答える
あなたはおそらく言うことができます
$str = <<EOH;
$str
more stuff here
EOH
しかし、Perl はそれを次のように最適化します。
$str .= <<EOH;
more stuff here
EOH
次のように別の変数を設定する必要はありません。
$str1 = <<EOH;
more stuff here
EOH
$str .= $str1;
; 古い Perl でも、前の 2 つは問題なく動作するはずです (一方、非常に古い Perl 5 では、動作しないケースがいくつかありました。特にprint <<EOH;
、ヒア ドキュメントの内容が失われていました)。
ここでのドキュメントは非常に柔軟性があり、通常の文字列リテラルを使用するほとんどの状況で使用できます。これらは、関数呼び出しまたは複合式の一部として使用できます。
my $inner_str = 'middle text';
my $full_str = <<FIRST_BLOCK . "$inner_str\n" . <<SECOND_BLOCK;
This text is at the start of the string.
And so is this.
FIRST_BLOCK
This text ends the first assignment to the string.
SECOND_BLOCK
Perlがヒアドキュメントを解析するために使用するルールは、いくつかの非常に奇妙な動作を可能にします。ヒアドキュメントが見つかると、現在の行はその行が終了するまで解析され続けます。次に、perlは現在の式の解析を停止し、終了トークンが見つかるまでヒアドキュメントの読み取りを開始します。その行で開始されたすべてのヒアドキュメントの終了トークンが見つかると、式に中断がなかったかのように解析が再開されます。
$full_str .= <<THIRD_BLOCK . "$inner_str
This text is "appended" to the string.
THIRD_BLOCK
" . <<LAST_BLOCK;
This text ends the string.
LAST_BLOCK
print $full_str;
文字列は、ヒアドキュメントTHIRD_BLOCKの本体の前で始まり、ヒアドキュメントTHIRD_BLOCKの後で終わりますが、その内容は含まれていないことに注意してください。
ヒアドキュメントの構文は非常に柔軟ですが、式ごとに1つのヒアドキュメントのみを使用することをお勧めします。式は単純にしてください。1つの式に複数のヒアドキュメントが必要な場合、または複雑な式に1つ必要な場合は、最初にヒアドキュメントを変数に割り当て、その変数を式で使用します。
はい、できます。
$sql = "select something";
print <<END
Line 1
Line 2
Line 3
END
. $sql;
出力:
Line 1
Line 2
Line 3
select something