web-dev-qa-db-ja.com

Perlで文字列をN回繰り返すにはどうすればよいですか?

Pythonで、これを行うと:

print "4" * 4

私は得る

> "4444"

Perlでは、

> 16

Perlで前者を行う簡単な方法はありますか?

55
izb
$ 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 
使用法:Perl [スイッチ] [-] [プログラムファイル] [引数] 
 
 -eプログラムの1行をプログラムします(複数) -eは許可されますが、プログラムファイルを省略します)
94
Vinko Vrsalovic

Perlでは、「x」演算子を使用します。

の違いに注意してください

"4" x 4

そして

("4") x 4

前者は繰り返し文字列を生成します:

"4444"

後者は繰り返しリスト:

("4", "4", "4", "4")
41
bart

Perlでも非常によく似ています

print "4" x 4;
16

FWIW、それはprint 4 x 4 Perlで。

一般に、Perlでは、演算子は単相です。文字列のセマンティクス、数値のセマンティクス、ビット単位のセマンティクスなど、意味のあるさまざまな演算子のセットがあり、オペランドのタイプはほとんど関係ありません。数値演算子を文字列に適用すると、文字列は最初に数値に変換され、要求した演算(乗算など)を取得します。文字列演算子を数値に適用すると、文字列に変換されます。リクエストした操作を取得します(繰り返しなど)。 Perlは最初に演算子に注意を払い、オペランドのタイプは2番目にのみ注意を払います。

これはPythonおよび他のほとんどの言語では1組の演算子を使用し、オペランドのタイプによって実際に得られるセマンティクスが決まります。つまり、演算子は多態性です。

9

10文字の「A」を印刷する場合は、これも実行できます。

Perl -e 'print "A" x 10'; echo

出力の例

user@linux:~$ Perl -e 'print "A" x 10'; echo
AAAAAAAAAA
user@linux:~$ 
1

これまでに与えられたすべての答えは、演算子xが文字列リテラルだけでなく、文字列変数または文字列を構築する式でも機能することを言及するのを逃しました。

$msg = "hello ";
print $msg x 2;
print ($msg x 2) x 2;
1
Wolf