ProgrammatieBackend Perl-ontwikkelaar

Welke manieren van interpolatie van variabelen en uitdrukkingen in Perl-strings zijn er, en waar moet men rekening mee houden bij het gebruik ervan?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord

Perl ondersteunt twee vormen van stringliteral — dubbele (“) en enkele (’) aanhalingstekens. Binnen strings met dubbele aanhalingstekens vindt interpolatie plaats: variabelen en speciale symbolen zoals , \t worden vervangen door hun waarden. In enkele aanhalingstekens is er geen interpolatie — de inhoud wordt letterlijk genomen.

Voorbeeld:

my $name = "Alex"; print "Hello, $name! "; # Hello, Alex! print 'Hello, $name! '; # Hello, $name! # Interpolatie van een uitdrukking is mogelijk via accolades: my $i = 10; print "i + 5 = @{[$i + 5]} "; # i + 5 = 15

Kenmerken en details:

  • Vergeet niet variabelen te escapen als er letters achter komen, anders denkt Perl dat dit deel uitmaakt van de variabele naam.
  • Gebruik @{[ ... ]} voor complexe uitdrukkingen binnen een string met interpolatie – dit is een veilige manier om het resultaat van een uitdrukking in de string in te voegen.

Vraag met een val

In welke gevallen zullen variabelen binnen een string met dubbele aanhalingstekens niet geïnterpoleerd worden?

Antwoord: Wanneer de variabele is geescaped (\$var), binnen enkele aanhalingstekens, of als de syntaxis met accolades wordt gebruikt, maar niet correct, of als de variabele naam niet door accolades wordt begrensd en er "samensmelting" van de variabele naam met letters plaatsvindt.

my $world = 'earth'; print "Hello, $worlds! "; # FOUT: Er is geen variabele $worlds, alleen $world + de letter s

Voorbeelden van echte fouten door gebrek aan kennis over de details van het onderwerp


Verhaal

In een groot project werden strings met variabelen gebruikt voor logging:

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

';


Men verwachtte het pad naar het bestand te zien, maar in de log werd de letterlijke tekst `$file` weggeschreven, omdat er enkele aanhalingstekens werden gebruikt. Het probleem werd ontdekt na de lancering in productie.

Verhaal

Een ontwikkelaar voegde een variabele in de string in zonder accolades:

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

";


Men verwachtte dat `bob21` werd weergegeven, maar de interpreter begon naar de variabele `$user21` te zoeken (die er niet was). Dit veroorzaakte een lege waarde in de rapporten.

Verhaal

Voor het weergeven van het resultaat van een uitdrukking binnen een string werd deze code gebruikt:

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

"; # Verwacht: 'Sum: 8', gekregen: 'Sum: 3+5'


Inderdaad, interpolatie beschouwt alleen variabelen, uitdrukkingen worden letterlijk ingevoegd. Men moet werken via @{[ ... ]}.