ProgrammierungPerl-Entwickler

Beschreiben Sie die Besonderheiten der Arbeit mit Variablen in Perl. Was unterscheidet Skalare, Arrays und Hashes? Geben Sie Beispiele für die Verwendung jedes Typs.

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

Antwort

In Perl werden Variablen in Skalare ($), Arrays (@) und Hashes (%) unterteilt:

  • Skalare ($variable) – speichern einen einzelnen Wert (String, Zahl):

    my $name = "Ivan"; my $age = 30;
  • Arrays (@array) – eine Sammlung von geordneten Elementen (indexiert durch Zahlen):

    my @fruits = ("apple", "banana", "cherry"); print $fruits[1]; # banana
  • Hashes (%hash) – eine Sammlung von Schlüssel-Wert-Paaren (assoziatives Array):

    my %colors = (red => "#ff0000", green => "#00ff00"); print $colors{"red"}; # #ff0000

Bitte beachten Sie, dass für den Zugriff auf ein Element ein spezifisches Symbol je nach Typ der Variable verwendet wird:

  • $array[0] — Element des Arrays
  • $hash{"key"} — Wert des Hashes über den Schlüssel

Fangfrage

Was ist der Unterschied zwischen den Ausdrücken @array[1,2] und $array[1,2]?

Antwort:

  • @array[1,2] — gibt eine Liste von mehreren Elementen des Arrays zurück (Slice).
  • $array[1,2] — ist falsch und führt zu einem Fehler. Um auf mehrere Elemente des Arrays zuzugreifen, verwendet man nur den Slice @array[...].

Beispiel:

my @array = (10, 20, 30, 40); my @slice = @array[1,2]; # (20, 30)

Beispiele für reale Fehler durch Unkenntnis der Feinheiten des Themas


Geschichte

In einem Logging-Projekt griff ein Programmierer auf ein Element des Hashes über @colors{"red"} zu. Dadurch erhielt er keinen Wert des Hashes, sondern einen zufälligen Fehler, weil für einen einzelnen Wert $ und nicht @ benötigt wird.


Geschichte

In einem Dienst wurde bei der Iteration über die Indizes des Arrays vergessen, den richtigen Zugriff zu verwenden — anstelle von $array[$i] wurde @array$i verwendet, was zu Warnungen und falschen Ergebnissen führte.


Geschichte

In einem API-Projekt wurde eine Funktion beschrieben, die ein Array als $args entgegennimmt, beim Aufruf wurde jedoch ein Array ohne Skalar übergeben: func(@list). Es stellte sich heraus, dass die Elemente des Arrays auf diese Weise in eine Liste „entfaltet“ wurden und die Funktion nicht wie erwartet funktionierte. Richtig wäre gewesen, das Array als @args zu empfangen.