Como posso repetir uma seqüência de N vezes em Perl?
Pergunta
Em Python, se eu fizer isso:
print "4" * 4
I get
> "4444"
Em Perl, eu ia ficar
> 16
Existe uma maneira fácil de fazer o primeiro em Perl?
Solução
$ perl -e 'print "4"x4; print "\n"'
4444
O operador x é documentado em perldoc perlop . meios aqui binários um operador toma dois argumentos, não composto de bits, pelo caminho.
Binary "x" é o operador de repetição. No contexto escalar ou se o operando à esquerda não está entre parênteses, ele retorna um string consistindo do operando esquerdo repetido o número de vezes especificado pelo direito operando. Em contexto de lista, se o operando esquerdo é colocado entre parênteses ou é uma lista formada por "
qw/STRING/
", ele repete a lista. Se o direito operando é zero ou negativo, ele retorna uma string vazia ou um vazio lista, dependendo do contexto.
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
pretende executar código Perl a partir da linha de comando:
$ perl --help Usage: perl [switches] [--] [programfile] [arguments] -e program one line of program (several -e's allowed, omit programfile)
Outras dicas
Em Perl, você quer usar o operador "x".
Observe a diferença entre
"4" x 4
e
("4") x 4
O primeiro produz uma seqüência repetida:
"4444"
este último uma lista repetida:
("4", "4", "4", "4")
É muito semelhante em Perl
print "4" x 4;
FWIW, é também print 4 x 4
em Perl.
Em geral, em Perl, os operadores são monomórfica, ie. você tem diferentes conjuntos de operadores para a semântica de cordas, para a semântica numéricos, para a semântica bit a bit, etc., em que faz sentido, eo tipo dos operandos em grande parte, não importa. Quando você aplica um operador numérico para uma string, a string é convertida para um número em primeiro lugar e você começa a operação que você pediu (ex. Multiplicação), e quando você aplicar um operador de string para um número, ele se transformou em uma corda e você obter a operação que você pediu (ex. repetição). Perl presta atenção ao operador em primeiro lugar e os tipos de operandos somente em segundo -. Se é que isso lhes paga qualquer mente em tudo
Este é o oposto de Python e outras linguagens, onde você usar um conjunto de operadores, e os tipos dos operandos determinar qual semântica você vai realmente começar - ie. operadores são polimórficos.
Todas as respostas, dadas até agora, faltou mencionar que o x
operador não funciona só em strings literais, mas também sobre as variáveis ??de cadeia ou expressões que as cordas de compilação:
$msg = "hello ";
print $msg x 2;
print ($msg x 2) x 2;
Se você quiser imprimir 10 caracteres s "A", você também pode fazer isso
perl -e 'print "A" x 10'; echo
Exemplo de saída com
user@linux:~$ perl -e 'print "A" x 10'; echo
AAAAAAAAAA
user@linux:~$