Silke: Referenzen

Hallo,
in der folgenden Beschreibung habe ich die ersten beiden Zeilen verstanden.
Kann mir jemand die Bedeutung (vielleicht mit Beispiel) der beiden letzten erläutern?
Danke
Silke

referenzieren         $ref = @var
anonym referenzieren $ref = [ 1,2,3 ]
anonyme Referenzkopie $ref = [ @var ]
anonym erstellen $ref = ( 1,2,3 )

  1. Hallo,

    anonym erstellen $ref = ( 1,2,3 )

    Wo hast Du denn das her? Egal, teste mal:

    my $ref = ( 1,2,3 );
    print "$ref\n";

    Die 3, die da ausgegeben wird, ist jedenfalls keine Referenz.

    Erklärung:

    Mit der Zeile
    my $ref = ( 1,2,3 );

    wird nacheinander an $ref erst die 1, dann die 2 und dann die 3 zugeweisen. Weil: auf der rechten Seite steht eine Liste (1,2,3) und links ein Skalar. In solchem Kontext passt eine Liste nicht auf ein Skalar.

    Viele Grüße vom Buzzer

    1. Hallo,

      anonym erstellen $ref = ( 1,2,3 )

      Wo hast Du denn das her? Egal, teste mal:

      Aus dem Internet: http://www.rolandgeyer.at/kurse/german/perlsrc/ps023.html

      1. Hallo,

        anonym erstellen $ref = ( 1,2,3 )

        Wo hast Du denn das her? Egal, teste mal:

        Aus dem Internet: http://www.rolandgeyer.at/kurse/german/perlsrc/ps023.html

        Ok, dann sei mal so lieb und schreiben dem Autor eine nette Mail ;-)

        Viele Grüße vom Buzzer

  2. Hallo Silke,

    anonyme Referenzkopie $ref = [ @var ]

    Hier wird nicht wirklich die Referenz kopiert. Hier wird eine Referenz auf eine neue, anonyme Liste erstellt mit den Elementen von @var. Das ist im Prinzip das gleiche wie $ref = [1,2,3] nur eben nicht mit explizit angegebenen Elementen.

    anonym erstellen $ref = ( 1,2,3 )

    Das hier ist einfach falsch. Es hat zwar den von Buzzer beschriebenen Effekt, da Perl quasi aus allem irgend etwas macht, aber wenn man Warnungen aktiviert, bekommt man für die ersten beiden Zahlen "Useless use of a constant in void context". Nur die letzte Zahl wird in dem Kontext also irgendwie verwendet. Man kann in Perl allerdings solche Sachen machen:
    ($a, $b, $c) = (1,2,3);
    oder auch:
    ($a, @b) = (1,2,3);

    Grüße

    Daniel