Perlで変数を連結する別の方法はありますか?
誤って次のコード行を書きました。
print "$linenumber is: \n" . $linenumber;
その結果、次のような出力が得られました。
22 is:
22
私は期待していました:
$linenumber is:
22
それで、私は疑問に思いました。二重引用符内の を変数への参照として解釈する必要があり$linenumberます (すばらしい!)。
この方法を使用する際の注意事項とその仕組みは?
Perlで変数を連結する別の方法はありますか?
誤って次のコード行を書きました。
print "$linenumber is: \n" . $linenumber;
その結果、次のような出力が得られました。
22 is:
22
私は期待していました:
$linenumber is:
22
それで、私は疑問に思いました。二重引用符内の を変数への参照として解釈する必要があり$linenumberます (すばらしい!)。
この方法を使用する際の注意事項とその仕組みは?
二重引用符を使用すると、変数補間が発生します。したがって、特殊文字はエスケープする必要があります。この場合、次をエスケープする必要があります$。
print "\$linenumber is: \n" . $linenumber;
次のように書き換えることができます。
print "\$linenumber is: \n$linenumber";
文字列の補間を避けるには、一重引用符を使用します。
print '$linenumber is: ' . "\n$linenumber"; # No need to escape `$`
Perl では、二重引用符で構築された文字列は補間されるため、変数はその値に置き換えられます。を印刷する必要がある場合、他の多くの言語と同様に$、エスケープする必要があります。
print "\$linenumber is:\n$linenumber";
また
print "\$linenumber is:\n" . $linenumber;
また
printf "\$linenumber is:\n%s", $linenumber;
コードを変更した場合
print "$linenumber is: \n" . $linenumber;
に
print '$linenumber is:' . "\n" . $linenumber;
また
print '$linenumber is:' . "\n$linenumber";
それは印刷されます
$linenumber is:
22
変数名を出力したいときに役立つと思うのは、一重引用符を使用して、その中の変数が値に変換されないようにして、コードを読みやすくすることです。
をバックスラッシュし$て文字どおりに印刷できます。
print "\$linenumber is: \n" . $linenumber;
それはあなたが期待していたものを印刷します。Perl に変数名を補間させたくない場合は、単一引用符を使用することもできますが、その場合は"\n"文字どおりに補間されます。
この回答を作成する際に、次の情報を説明するこの Web ページを見つけました。
###################################################
#Note that when you have double quoted strings, you don't always need to concatenate. Observe this sample:
#!/usr/bin/perl
$a='Big ';
$b='Macs';
print 'I like to eat ' . $a . $b;
#This prints out:
# I like to eat Big Macs
###################################################
#If we had used double quotes, we could have accomplished the same thing like this:
#!/usr/bin/perl
$a='Big ';
$b='Macs';
print "I like to eat $a $b";
#Printing this:
# I like to eat Big Macs
#without having to use the concatenating operator (.).
###################################################
#Remember that single quotes do not interpret, so had you tried that method with single quotes, like this:
#!/usr/bin/perl
$a='Big ';
$b='Macs';
print 'I like to eat $a $b';
#Your result would have been:
# I like to eat $a $b
#Which don't taste anywhere near as good.
これはコミュニティに役立つと思ったので、これを尋ねて自分の質問に答えます。他の役立つ回答は大歓迎です!