Xaxi: Return-Wert von Subroutinen

Hallo,
kann mir jemand erklären, warum im 3. Beispiel nicht auch der Wert 5 als Ergebnis herauskommt? Ich hab doch nur die Routine up3 direkt
angegeben.

1.

sub up1{
    return 5
}
$erg1 = up1();
print "$erg1 = $erg1\n";    # ===> $erg1 = 5

2.

sub up2{
    sub up3 {return 5};
    return up3()
}
$erg2 = up2();
print "$erg2 = $erg2\n";    # ===> $erg2 = 5

3.

sub up4{
  return sub {
    return 5
  }
}
$erg4 = up4();
print "$erg4 = $erg4";      # ===> $erg4 = CODE(0x18329b4)

  1. Hallo Xaxi,

    in deinem 3. Beispiel gibst Du eine Referenz auf die anonyme Unterroutine "sub { return 5 }" zurück.

    Um diese anonyme Unterroutine zu dereferenzieren müsste der Befehl print "$erg4 = &$erg4" lauten. Allerdings ohne Gewähr und auch nicht getestet!

    Herzliche Grüße aus Weinsberg
    Helmut Weber

    --
    -------------------------------------------
    Mode ist eine Variable, Stil eine Konstante
    1. Hallo Helmut,

      Um diese anonyme Unterroutine zu dereferenzieren müsste der Befehl print "$erg4 = &$erg4" lauten. Allerdings ohne Gewähr und auch nicht getestet!

      Das wird so nicht funktionieren, in diesem Falle muss man den Konkatenationsoperator verwenden:

      print "\$erg4 = ".&$erg4; bzw.
      print '$erg4 = '.&$erg4;.

      Einen Hinweis hätte übrigens schon die Syntax-Highlighting-Funktion dieses Forums geliefert:

      print "\$erg4 = &$erg4;.

      Schöne Grüße,

      Johannes