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


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

print "4" * 4

Я

> "4444"

в Perl, я бы вам

> 16

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

6   51  

6 ответов:

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

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

двоичный" 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 операторы мономорфны, т. е. у вас есть разные наборы операторов для Строковой семантики, для числовой семантики, для побитовой семантики и т. д. там , где это имеет смысл и тип операндов в основном не имеет значения. Когда вы применяете числовой оператор к строке, строка сначала преобразуется в число, и вы получаете операцию, которую вы просили (например. умножение), и когда вы применяете строковый оператор К a номер, он превратился в строку, и вы получаете операцию, которую вы просили (например. повторение.) 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

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

[email protected]:~$ perl -e 'print "A" x 10'; echo
AAAAAAAAAA
[email protected]:~$