Вопрос

В 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:~$ 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top