Как я могу повторить строку N раз в Perl? - PullRequest
54 голосов
/ 10 ноября 2008

В Python, если я сделаю это:

print "4" * 4

Я получаю

> "4444"

В Perl я бы получил

> 16

Есть ли простой способ сделать первое в Perl?

Ответы [ 6 ]

94 голосов
/ 10 ноября 2008
$ perl -e 'print "4"x4; print "\n"'
4444

Оператор x задокументирован в perldoc perlop . Здесь двоичный означает, что оператор принимает два аргумента, не состоящих из битов, между прочим.

Двоичный «х» является оператором повторения. В скалярном контексте или если левый операнд не заключен в скобки, он возвращает строку, состоящую из левого операнда повторяется количество раз, указанное правым операнд. В контексте списка, если левый операнд заключен в скобки или является списком, образованным "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)
40 голосов
/ 10 ноября 2008

В Perl вы хотите использовать оператор "x".

Обратите внимание на разницу между

"4" x 4

и

("4") x 4

Первый производит повторяющуюся строку:

"4444"

последний повторный список:

("4", "4", "4", "4")
16 голосов
/ 10 ноября 2008

Это очень похоже на Perl

print "4" x 4;
9 голосов
/ 10 ноября 2008

FWIW, это также print 4 x 4 в Perl.

В общем, в Perl операторы мономорфны, т.е. у вас есть различные наборы операторов для семантики строк, для числовой семантики, для побитовой семантики и т. д., где это имеет смысл, и тип операндов в значительной степени не имеет значения. Когда вы применяете числовой оператор к строке, строка сначала преобразуется в число, и вы получаете запрошенную операцию (например, умножение), а когда вы применяете строковый оператор к числу, она превращается в строку, и вы получить операцию, которую вы просили (например, повторение). Perl обращает внимание на оператора в первую очередь, а типы операндов - только во-вторых - если он действительно обращает на них внимание.

Это противоположность Python и большинства других языков, где вы используете один набор операторов, а типы операндов определяют, какую семантику вы фактически получите - т.е. операторы полиморфны.

1 голос
/ 26 июня 2017

Если вы хотите напечатать 10 символов «А», вы также можете сделать это

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

Пример с выводом

user@linux:~$ perl -e 'print "A" x 10'; echo
AAAAAAAAAA
user@linux:~$ 
1 голос
/ 07 мая 2015

Во всех ответах, данных до сих пор, не было упоминания о том, что оператор x работает не только со строковыми литералами, но также со строковыми переменными или выражениями, которые строят строки:

$msg = "hello ";
print $msg x 2;
print ($msg x 2) x 2;
...