Python でこれを行うと、次のようになります。
print "4" * 4
私は得る
> "4444"
Perlでは、私は得るだろう
> 16
Perlで前者を行う簡単な方法はありますか?
$ perl -e 'print "4" x 4; 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 program プログラムの 1 行 (複数の -e を使用できます。programfile は省略します)
Perl では、"x" 演算子を使用します。
の違いに注意してください
"4" x 4
と
("4") x 4
前者は繰り返される文字列を生成します:
"4444"
後者は繰り返しリスト:
("4", "4", "4", "4")
Perl と非常によく似ています。
print "4" x 4;
FWIW、それprint 4 x 4
はPerlにもあります。
一般に、Perl では、演算子は単相です。文字列セマンティクス、数値セマンティクス、ビットごとのセマンティクスなど、意味のある演算子のセットが異なり、オペランドの型はほとんど問題になりません。数値演算子を文字列に適用すると、最初に文字列が数値に変換され、要求した演算 (乗算など) が得られます。文字列演算子を数値に適用すると、文字列に変換され、要求した操作を取得します (例: 繰り返し)。Perl は最初に演算子に注意を払い、次にオペランドの型だけに注意を払います。
これは、Python や他のほとんどの言語とは逆で、1 セットの演算子を使用し、オペランドの型によって実際に取得するセマンティクスが決まります。演算子はポリモーフィックです。
これまでに与えられたすべての回答は、演算子x
が文字列リテラルだけでなく、文字列である変数または次のような文字列に評価される式でも機能することを言及していませんでした
use feature 'say';
my $msg = "hello ";
say $msg x 2;
say chr(33) x 3;
このような
hello hello
!!!
さらに重要なのは、式が文字列に変換されていない場合x
は、自動的に文字列に変換することです (その方法を教えてくれたggorlenに感謝します!)。たとえば
say 4 x 2;
say [$msg] x 2;
出力として次のような結果になります
44
ARRAY(0x30ca10)ARRAY(0x30ca10)