Question

En Python, si je le fais:

print "4" * 4

je reçois

> "4444"

En Perl, j'aurais

> 16

Existe-t-il un moyen simple de remplacer l'ancien en Perl?

Était-ce utile?

La solution

$ perl -e 'print "4"x4; print "\n"'
4444

L'opérateur x est documenté dans perlop . Par binaire, on entend ici un opérateur prenant deux arguments, qui ne sont pas composés de bits.

  

Binary " x " est l'opérateur de répétition. Dans un contexte scalaire ou si le   l'opérande gauche n'est pas entre parenthèses, il retourne une chaîne composée   de l'opérande gauche répété le nombre de fois spécifié par la droite   opérande. Dans le contexte de liste, si l'opérande gauche est entre parenthèses   ou est une liste formée par " qw / STRING / ", la liste est répétée. Si le droit   l'opérande est nul ou négatif, il retourne une chaîne vide ou un vide   liste, en fonction du 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
Usage: perl [switches] [--] [programfile] [arguments]
  
  -e program     one line of program (several -e's allowed, omit programfile)

Autres conseils

En Perl, vous souhaitez utiliser le & x; x " opérateur.

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")

C'est très similaire en Perl

print "4" x 4;

FWIW, c’est aussi imprimer 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 de chaîne, la sémantique numérique, la sémantique au niveau des bits, etc., là où cela a un sens et où le type des opérandes importe peu. 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). Lorsque vous appliquez un opérateur de chaîne à un nombre, il est transformé en chaîne. obtenir l'opération que vous avez demandée (par exemple, répétition). Perl se préoccupe d’abord de l’opérateur et des types d’opérandes d’autre part, si ce n’est en réalité leur en importe.

C’est le contraire de Python et de la plupart des autres langages, dans lesquels 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. les opérateurs sont polymorphes.

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

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

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:~$ 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top