web-dev-qa-db-ja.com

Perlで変数を連結する方法

Perlで変数を連結する別の方法はありますか?

誤って次のコード行を記述しました。

print "$linenumber is: \n" . $linenumber;

そして、その結果、次のような出力が得られました。

22 is:
22

私は期待していました:

$linenumber is:
22

それで私は疑問に思いました。二重引用符で囲まれた$linenumberを、変数への参照として解釈している必要があります(なんてクールなことでしょう)。

この方法を使用する際の注意点は何ですか?また、これはどのように機能しますか?

6
kentcdodds

二重引用符を使用すると、変数の補間が発生します。したがって、特殊文字はエスケープする必要があります。この場合、$をエスケープする必要があります。

print "\$linenumber is: \n" . $linenumber;

次のように書き直すことができます。

print "\$linenumber is: \n$linenumber";

文字列の補間を回避するには、一重引用符を使用します。

print '$linenumber is: ' . "\n$linenumber";  # No need to escape `$`
13

好き .=演算子メソッド:

#!/usr/bin/Perl
use strict;
use warnings;

my $text .= "... contents ..."; # Append contents to the end of variable $text.
$text .= $text; # Append variable $text contents to variable $text contents.
print $text; # Prints "... contents ...... contents ..."
5
Zon

Perlでは、二重引用符で作成された文字列はすべて補間されるため、変数はすべてその値に置き換えられます。他の多くの言語と同様に、$を印刷する必要がある場合は、エスケープする必要があります。

print "\$linenumber is:\n$linenumber";

OR

print "\$linenumber is:\n" . $linenumber;

OR

printf "\$linenumber is:\n%s", $linenumber;

スカラー補間

3
Hameed

コードをから変更した場合

print "$linenumber is: \n" . $linenumber;

print '$linenumber is:' . "\n" . $linenumber;

または

print '$linenumber is:' . "\n$linenumber";

印刷されます

$linenumber is:
22

変数名を出力したいときに役立つと思うのは、一重引用符を使用して、内部の変数が値に変換されないようにして、コードを読みやすくすることです。

2
Joe W

この応答を作成するときに、次の情報を説明する この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.

これはコミュニティに役立つと思ったので、これを聞いて自分の質問に答えています。他の役立つ回答は大歓迎です!

1
kentcdodds

$をバックスラッシュして、文字通りに印刷できます。

print "\$linenumber is: \n" . $linenumber;

それはあなたが期待していたものを印刷します。 Perlに変数名を補間させたくない場合は、一重引用符を使用することもできますが、その場合、"\n"は文字通り補間されます。

1
John Corbett