web-dev-qa-db-fra.com

Comment puis-je répéter une chaîne N fois en Perl?

En Python, si je fais ça:

print "4" * 4

Je reçois

> "4444"

En Perl, j'aurais

> 16

Existe-t-il un moyen facile de faire l'ancien en Perl?

55
izb
$ Perl -e 'print "4"x4; print "\n"'
4444

L'opérateur x est documenté dans perldoc perlop . Ici, binaire signifie un opérateur prenant deux arguments, non composés de bits, soit dit en passant.

Le "x" binaire est l'opérateur de répétition. Dans un contexte scalaire ou si l'opérande gauche n'est pas placé entre parenthèses, il renvoie une chaîne composée de l'opérande gauche répétée le nombre de fois spécifié par l'opérande droit. Dans le contexte d'une liste, si l'opérande de gauche est placé entre parenthèses ou s'il s'agit d'une liste formée par "qw/STRING/ ", il répète la liste. Si l'opérande de droite est nul ou négatif, il renvoie une chaîne vide ou une liste vide, selon le contexte.

       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 est destiné à exécuter du code Perl à partir de la ligne de commande:

 $ Perl --help 
 Utilisation: Perl [commutateurs] [-] [programfile] [arguments] 
 
 -E programme une ligne de programme (plusieurs -e est autorisé, omettre le fichier programme) 
94
Vinko Vrsalovic

En Perl, vous souhaitez utiliser l'opérateur "x".

Notez la différence entre

"4" x 4

et

("4") x 4

Le premier produit une chaîne répétée:

"4444"

ce dernier une liste répétée:

("4", "4", "4", "4")
41
bart

C'est très similaire en Perl

print "4" x 4;
16

FWIW, c'est aussi print 4 x 4 en Perl.

En général, en Perl, les opérateurs sont monomorphes, c'est-à-dire. vous avez différents ensembles d'opérateurs pour la sémantique des chaînes, pour la sémantique numérique, pour la sémantique au niveau du bit, etc., là où cela a du sens, et le type des opérandes n'a pas d'importance. Lorsque vous appliquez un opérateur numérique à une chaîne, la chaîne est d'abord convertie en nombre et vous obtenez l'opération que vous avez demandée (par exemple, la multiplication), et lorsque vous appliquez un opérateur de chaîne à un nombre, il est transformé en chaîne et vous obtenir l'opération que vous avez demandée (par exemple, répétition). Perl fait attention à l'opérateur en premier et aux types d'opérandes seulement en second - si cela leur fait vraiment attention.

C'est l'opposé de Python et la plupart des autres langages, où vous utilisez un ensemble d'opérateurs, et les types d'opérandes déterminent la sémantique que vous obtiendrez réellement - c'est-à-dire que les opérateurs sont polymorphes.

9

Si vous souhaitez imprimer 10 caractères "A", vous pouvez également le faire

Perl -e 'print "A" x 10'; echo

Exemple avec sortie

user@linux:~$ Perl -e 'print "A" x 10'; echo
AAAAAAAAAA
user@linux:~$ 
1
Charlotte Russell

Toutes les réponses, données jusqu'à présent, ont omis de mentionner que l'opérateur x ne fonctionne pas seulement sur les littéraux de chaîne mais également sur les variables de chaîne ou les expressions qui construisent des chaînes:

$msg = "hello ";
print $msg x 2;
print ($msg x 2) x 2;
1
Wolf