ProgrammierungBackend Perl Entwickler

Welche Möglichkeiten zur Interpolation von Variablen und Ausdrücken in Perl-Strings gibt es und was sollte man bei deren Verwendung beachten?

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort

Perl unterstützt zwei Formen von String-Literalen — doppelte (“) und einfache (’) Anführungszeichen. Innerhalb von Strings in doppelten Anführungszeichen findet eine Interpolation statt: Variablen und spezielle Symbole wie , \t werden durch ihre Werte ersetzt. In einfachen Anführungszeichen gibt es keine Interpolation — der Inhalt wird wörtlich interpretiert.

Beispiel:

my $name = "Alex"; print "Hello, $name! "; # Hello, Alex! print 'Hello, $name! '; # Hello, $name! # Die Interpolation von Ausdrücken ist möglich durch geschweifte Klammern: my $i = 10; print "i + 5 = @{[$i + 5]} "; # i + 5 = 15

Besonderheiten und Feinheiten:

  • Vergessen Sie nicht, Variablen zu escapen, wenn nach ihnen Buchstaben folgen, sonst denkt Perl, dass dies ein Teil des Variablennamens ist.
  • Für komplexe Ausdrücke verwenden Sie @{[ ... ]} innerhalb des Strings mit Interpolation – das ist eine sichere Methode, um das Ergebnis eines Ausdrucks in den String einzufügen.

Fangfrage

In welchen Fällen werden Variablen innerhalb eines Strings in doppelten Anführungszeichen nicht interpoliert?

Antwort: Wenn die Variable escapiert ist (\$var), innerhalb einfacher Anführungszeichen ist, oder wenn die Syntax mit geschweiften Klammern verwendet wird, aber nicht wie vorgesehen, oder der Variablenname nicht durch Klammern begrenzt ist und eine "Verkettung" des Variablennamens mit Buchstaben geschieht.

my $world = 'earth'; print "Hello, $worlds! "; # FEHLER: Variable $worlds existiert nicht, sondern ist $world + Buchstabe s

Beispiele aus der Praxis für Fehler aufgrund unzureichenden Wissens zu diesem Thema


Geschichte

In einem großen Projekt wurden Strings mit Variablen für das Logging verwendet:

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

';


Man erwartete den Pfad zur Datei zu sehen, aber im Log landete der wörtliche Text `$file`, da einfache Anführungszeichen verwendet wurden. Das Problem wurde nach dem Start in der Produktion bemerkt.

Geschichte

Ein Entwickler setzte eine Variable innerhalb eines Strings ohne geschweifte Klammern ein:

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

";


Man erwartete, dass `bob21` ausgegeben wird, aber der Interpreter begann, die Variable `$user21` zu suchen (die nicht existierte). Dadurch entstand ein leerer Wert in den Berichten.

Geschichte

Zur Anzeige des Ergebnisses eines Ausdrucks innerhalb eines Strings wurde folgender Code verwendet:

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

"; # Erwartet: 'Sum: 8', erhalten: 'Sum: 3+5'


Tatsächlich betrachtet die Interpolation nur Variablen, Ausdrücke werden wörtlich eingegeben. Man muss durch @{[ ... ]} arbeiten.