Как я могу повторить строку N раз в Perl?

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

print "4" * 4

Я

> "4444"

в Perl, я бы вам

> 16

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

6 ответов


$ perl -e 'print "4"x4; print "\n"'
4444

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

двоичный" 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

и

("4") x 4

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

"4444"

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

("4", "4", "4", "4")

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

print "4" x 4;

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

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

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


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

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

Если вы хотите напечатать 10 символов "A"S, вы также можете сделать это

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

пример с выходом

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