Как я могу повторить строку N раз в Perl?
Вопрос
В Python, если я сделаю это:
print "4" * 4
я получил
> "4444"
В Perl я бы получил
> 16
Есть ли простой способ сделать первое в Perl?
Решение
$ 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, он также печатает 4 x 4
на Perl.
В общем, в Perl операторы мономорфны, т.е. у вас есть разные наборы операторов для семантики строк, для числовой семантики, для побитовой семантики и т. д., где это имеет смысл, и тип операндов в значительной степени не имеет значения. Когда вы применяете числовой оператор к строке, строка сначала преобразуется в число, и вы получаете запрошенную операцию (например, умножение), а когда вы применяете строковый оператор к числу, она превращается в строка, и вы получите операцию, которую вы просили (например, повторение). Perl сначала обращает внимание на оператор, а типы операндов - только на второе. если это действительно окупается.
Это противоположность Python и большинства других языков, где вы используете один набор операторов, а типы операндов определяют, какую семантику вы действительно получите & # 8211; то есть. операторы полиморфны.
Во всех ответах, приведенных до сих пор, не было упоминания о том, что оператор x
работает не только со строковыми литералами, но также со строковыми переменными или выражениями, которые строят строки:
$msg = "hello ";
print $msg x 2;
print ($msg x 2) x 2;
Если вы хотите напечатать 10 символов "A", вы также можете сделать это
perl -e 'print "A" x 10'; echo
Пример с выводом
user@linux:~$ perl -e 'print "A" x 10'; echo
AAAAAAAAAA
user@linux:~$