Perlで文字列をN回繰り返すにはどうすればよいですか?
質問
Pythonで、これを行う場合:
print "4" * 4
わかります
> "4444"
Perlでは、次のようになります
> 16
Perlで前者を実行する簡単な方法はありますか?
解決
$ perl -e 'print "4"x4; print "\n"'
4444
x演算子はperldoc perlop に文書化されています。ここで、バイナリとは、ビットで構成されていない、2つの引数を取る演算子を意味します。
バイナリ" x"繰り返し演算子です。スカラーコンテキストまたは 左のオペランドは括弧で囲まれていません。 右オペランドで指定された回数だけ繰り返された左オペランドの オペランド。リストコンテキストで、左のオペランドが括弧で囲まれている場合 または"
qw / STRING /
"で構成されるリストの場合、リストを繰り返します。右の場合 オペランドがゼロまたは負の場合、空の文字列または空を返します コンテキストに応じたリスト。
print ’-’ x 80; # Print row of dashes
print "\t" x ($tab/8), ’ ’ x ($tab%8); # Tab over
@ones = (1) x 80; # A list of 80 1’s
@ones = (5) x @ones; # Set all elements to 5
perl -e
は、コマンドラインからPerlコードを実行するためのものです。
$ perl --help Usage: perl [switches] [--] [programfile] [arguments] -e program one line of program (several -e's allowed, omit programfile)
他のヒント
Perlでは、" x"を使用します。演算子。
の違いに注意してください
"4" x 4
and
("4") x 4
前者は繰り返し文字列を生成します:
"4444"
後者は繰り返しリスト:
("4", "4", "4", "4")
Perlでも非常に似ています
print "4" x 4;
FWIW、それはPerlでも print 4 x 4
です。
一般に、Perlでは、演算子は単相です。文字列のセマンティクス、数値のセマンティクス、ビット単位のセマンティクスなど、意味のあるさまざまな演算子のセットがあり、オペランドのタイプはほとんど関係ありません。数値演算子を文字列に適用すると、文字列が最初に数値に変換され、要求した演算(乗算など)が取得されます。数値に文字列演算子を適用すると、文字列で、要求した操作(繰り返しなど)を取得します。 Perlは最初に演算子に注意を払い、オペランドのタイプは2番目にのみ–もし本当にそれが彼らに心を払うなら。
これはPythonと他のほとんどの言語の反対であり、1組の演算子を使用します。オペランドのタイプは、実際に取得するセマンティクスを決定します–すなわち。演算子はポリモーフィックです。
これまでに与えられたすべての答えは、演算子 x
が文字列リテラルだけでなく、文字列変数または文字列を構築する式でも機能することを言及するのを逃しました:
$msg = "hello ";
print $msg x 2;
print ($msg x 2) x 2;
10文字の「A」を印刷する場合は、これも実行できます
perl -e 'print "A" x 10'; echo
出力の例
user@linux:~$ perl -e 'print "A" x 10'; echo
AAAAAAAAAA
user@linux:~$