Come posso ripetere una stringa N volte in Perl?
Domanda
In Python, se lo faccio:
print "4" * 4
Ottengo
> "4444"
In Perl, vorrei
> 16
C'è un modo semplice per fare il primo in Perl?
Soluzione
$ perl -e 'print "4"x4; print "\n"'
4444
L'operatore x è documentato in perldoc perlop . Qui binario significa un operatore che prende due argomenti, non composti da bit, comunque.
Binario " x " è l'operatore di ripetizione. Nel contesto scalare o se il l'operando di sinistra non è racchiuso tra parentesi, restituisce una stringa consistente dell'operando di sinistra ha ripetuto il numero di volte specificato da destra operando. Nel contesto dell'elenco, se l'operando di sinistra è racchiuso tra parentesi oppure è un elenco formato da "
qw / STRING /
" ;, ripete l'elenco. Se il giusto l'operando è zero o negativo, restituisce una stringa vuota o vuota elenco, a seconda del contesto.
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
ha lo scopo di eseguire il codice Perl dalla riga di comando:
$ perl --help Usage: perl [switches] [--] [programfile] [arguments] -e program one line of program (several -e's allowed, omit programfile)
Altri suggerimenti
In Perl, vuoi usare la " x " operatore.
Nota la differenza tra
"4" x 4
e
("4") x 4
Il primo produce una stringa ripetuta:
"4444"
quest'ultimo un elenco ripetuto:
("4", "4", "4", "4")
È molto simile in Perl
print "4" x 4;
FWIW, è anche stampa 4 x 4
in Perl.
In generale, in Perl, gli operatori sono monomorfi, cioè. hai diversi insiemi di operatori per la semantica delle stringhe, per la semantica numerica, per la semantica bit a bit, ecc., dove ha senso, e il tipo di operandi in gran parte non ha importanza. Quando applichi un operatore numerico a una stringa, la stringa viene prima convertita in un numero e ottieni l'operazione che hai richiesto (ad es. Moltiplicazione) e quando applichi un operatore stringa a un numero, viene trasformato in una stringa e ottieni l'operazione richiesta (es. ripetizione). Perl presta attenzione prima all'operatore e ai tipi di operandi solo secondo & # 8211; se davvero ripaga di tutto.
Questo è l'opposto di Python e della maggior parte delle altre lingue, in cui usi una serie di operatori, e i tipi di operandi determinano quale semantica otterrai effettivamente # # 8211; vale a dire. gli operatori sono polimorfici.
Tutte le risposte, date finora, non hanno menzionato il fatto che l'operatore x
non funziona solo sui valori letterali delle stringhe ma anche su variabili o espressioni di stringhe che creano stringhe:
$msg = "hello ";
print $msg x 2;
print ($msg x 2) x 2;
Se vuoi stampare 10 caratteri "A", puoi farlo anche
perl -e 'print "A" x 10'; echo
Esempio con output
user@linux:~$ perl -e 'print "A" x 10'; echo
AAAAAAAAAA
user@linux:~$