ProgrammazioneSviluppatore Backend Perl

Quali sono i modi per interpolare variabili ed espressioni nelle stringhe Perl, e cosa bisogna tenere a mente quando si usano?

Supera i colloqui con l'assistente IA Hintsage

Risposta

Perl supporta due forme di letterali stringa — doppie (“) e singole (’). All'interno delle stringhe tra virgolette doppie avviene l'interpolazione: le variabili e i caratteri speciali come , \t vengono sostituiti con i loro valori. Nelle virgolette singole non c'è interpolazione — il contenuto viene considerato letterale.

Esempio:

my $name = "Alex"; print "Hello, $name! "; # Hello, Alex! print 'Hello, $name! '; # Hello, $name! # L'interpolazione delle espressioni è possibile tramite le parentesi graffe: my $i = 10; print "i + 5 = @{[$i + 5]} "; # i + 5 = 15

Caratteristiche e sfumature:

  • Non dimenticare di sfuggire le variabili se dopo di esse seguono lettere, altrimenti Perl penserà che fanno parte del nome della variabile.
  • Per espressioni complesse usa @{[ ... ]} all'interno della stringa con interpolazione – è un modo sicuro per inserire il risultato di un'espressione nella stringa.

Domanda trabocchetto

In quali casi le variabili all'interno della stringa tra virgolette doppie non verranno interpolate?

Risposta: Quando la variabile è sfuggita (\$var), all'interno di virgolette singole, oppure se viene utilizzata la sintassi con le parentesi graffe, ma non per scopo, oppure il nome della variabile non è delimitato da parentesi e avviene una "giunzione" del nome con lettere.

my $world = 'earth'; print "Hello, $worlds! "; # ERRORE: La variabile $worlds non esiste, ma non $world + lettera s

Esempi di errori reali a causa della mancanza di conoscenza delle sfumature dell'argomento


Storia

In un grande progetto si utilizzavano stringhe con variabili per il logging:

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

';


Si prevedeva di vedere il percorso del file, ma nel log andava il testo letterale `$file`, poiché venivano utilizzate le virgolette singole. Il problema è emerso dopo il lancio in produzione.

Storia

Uno sviluppatore ha inserito una variabile all'interno della stringa senza le parentesi graffe:

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

";


Ci si aspettava che fosse visualizzato `bob21`, ma l'interprete ha iniziato a cercare la variabile `$user21` (che non esisteva). Questo ha portato a un valore vuoto nei report.

Storia

Per visualizzare il risultato dell'espressione all'interno della stringa è stato utilizzato il seguente codice:

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

"; # Ci si aspettava: 'Sum: 8', si è ottenuto: 'Sum: 3+5'


Infatti, l'interpolazione considera solo le variabili, le espressioni vengono sostituite letteralmente. È necessario lavorare con @{[ ... ]}.