Как я могу повторить строку 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")
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:~$