Frédéric: &subroutine, &subroutine() od. subroutine()

Hi,

Ich habe gerade erfahren, dass man beim Aufruf von Subroutinen den "&" vorne gar nicht braucht.
Da drängt sich halt schon die Frage, was der Unterschied ist. Vieleicht gibt es kar keinen. Unter SelfHtml heisst es nur, man kann beides schreiben.
Und wie ist es mit den () hinten? Macht das auch ein Unterschied?

Also was ist zu empfehlen?

1. &subroutine
2. &subroutine()
3. subroutine()
4. subroutine (Darf man nicht, oder??)

Gruss,
Frédéric

  1. Moin Moin !

    1. &subroutine
    2. &subroutine()

    Perl4-Notation, nicht mehr zu empfehlen.

    1. subroutine()

    Perl5, meine Lieblingsnotation.

    1. subroutine (Darf man nicht, oder??)

    Doch, doch, darf man. Ist aber gelegentlich unübersichtlich.

    Steht in der Doku zu Perl aber auch drin. Lesen bildet.

    Alexander

    --
    <!--#include file="signature.html" -->
  2. Hallo Frédéric,

    Ich habe gerade erfahren, dass man beim Aufruf von
    Subroutinen den "&" vorne gar nicht braucht.

    Das & vor Subroutinen ist veraltete Perl4-Schreibweise.

    Da drängt sich halt schon die Frage, was der Unterschied
    ist. Vieleicht gibt es kar keinen.

    Doch, den gibt es. Ruft man

    '&routine;' auf, wird das aktuelle @_ (was immer auch drin
    sein mag) als Argumentenliste uebergeben. Mit '&routine();'
    bzw. '&routine(argumentenliste);' wird @_ korrekt gesetzt,
    ebenso bei 'routine;' und 'routine();'.

    1. subroutine()
    2. subroutine (Darf man nicht, oder??)

    Beide Schreibweisen sind erlaubt (bei 4 muss nur die
    Subroutine vorher schon bekannt sein) und sinnvoll. Das & ist
    veraltet und gefaehrlich, da es Nebeneffekte hat, die man uU.
    nicht sofort sieht.

    Gruesse,
     CK

    1. Hi,

      Vielen Dank ihr beiden.
      Juhe, jetzt darf ich mein Quellcode nach Aufrug von Subroutines suchen;)

      Gruss,
      Frédéric

  3. Hallo,

    Ergänzend zu den bisherigen Ausführungen hier noch einige 'Literaturhinweise':-)

    http://www.perldoc.com/perl5.6/pod/perlfaq7.html#What's-the-difference-between-calling-a-function-as--foo-and-foo()-
    http://www.perldoc.com/perl5.6/pod/perlsub.html

    Grüße
      Klaus