ProgrammationDéveloppeur Perl Backend

Quels sont les moyens d'interpolation des variables et expressions dans les chaînes Perl, et que faut-il prendre en compte lors de leur utilisation ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse

Perl supporte deux formes de littéraux de chaîne - guillemets doubles (“) et guillemets simples (’). Dans les chaînes entre guillemets doubles, l'interpolation se produit : les variables et les caractères spéciaux comme , \t sont remplacés par leurs valeurs. Dans les guillemets simples, il n'y a pas d'interpolation - le contenu est pris au pied de la lettre.

Exemple :

my $name = "Alex"; print "Hello, $name! "; # Hello, Alex! print 'Hello, $name! '; # Hello, $name! # L'interpolation d'expressions est possible via des accolades : my $i = 10; print "i + 5 = @{[$i + 5]} "; # i + 5 = 15

Caractéristiques et subtilités :

  • N'oubliez pas d'échapper les variables si des lettres suivent, sinon Perl pensera qu'il s'agit d'une partie du nom de la variable.
  • Pour des expressions complexes, utilisez @{[ ... ]} à l'intérieur d'une chaîne avec interpolation - c'est un moyen sûr d'insérer le résultat d'une expression dans une chaîne.

Question piège

Dans quels cas les variables à l'intérieur d'une chaîne entre guillemets doubles ne seront-elles pas interpolées ?

Réponse : Lorsque la variable est échappée (\$var), à l'intérieur de guillemets simples, ou si la syntaxe avec des accolades est utilisée, mais pas à bon escient, ou que le nom de la variable n'est pas limité par des accolades et qu'il se produit une "collation" du nom de la variable avec des lettres.

my $world = 'earth'; print "Hello, $worlds! "; # ERREUR : La variable $worlds n'existe pas, et non $world + lettre s

Exemples réels d'erreurs dues à une méconnaissance des subtilités du sujet


Histoire

Dans un grand projet de journalisation, des chaînes avec des variables étaient utilisées :

my $file = '/tmp/data'; print LOG 'File: $file

';


Ils s'attendaient à voir le chemin du fichier, mais le texte littéral `$file` était enregistré dans le journal, car des guillemets simples étaient utilisés. Le problème a été remarqué après le lancement en production.

Histoire

Un développeur a inséré une variable à l'intérieur d'une chaîne sans accolades :

my $user = "bob"; print "User: $user21

";


Ils s'attendaient à ce que `bob21` soit affiché, mais l'interpréteur a commencé à chercher la variable `$user21` (qui n'existait pas). Cela a entraîné l'apparition d'une valeur vide dans les rapports.

Histoire

Pour afficher le résultat d'une expression à l'intérieur d'une chaîne, le code suivant était utilisé :

my $a = 3; print "Sum: $a+5

"; # S'attendait à : 'Sum: 8', reçu : 'Sum: 3+5'


En effet, l'interpolation ne prend en compte que les variables, les expressions sont insérées littéralement. Il faut travailler via @{[ ... ]}.