2010-01-29T19:23:46
biancaQuoteEine Subroutine kann mit einem expliziten & Präfix aufgerufen werden. Das & ist optional in neueren Perl-Versionen, genauso wie Klammern, wenn die Subroutine vorher deklariert wurde. Das & ist aber nicht optional, wenn man die Subroutine nur beim Namen nennen möchte, etwa als ein Argument für defined() oder undef(). Auch nicht optional ist es, wenn man einen indirekten Subroutinen- Aufruf machen möchte mit einem Subroutinen-Namen oder einer Referenz, d.h. wenn man &$subref() oder &{$subref}() benutzt, obwohl dieses Problem von der Notation $subref->() gelöst wird. Siehe perlref für Details zu diesem Thema.
google sagt dazu:
QuoteEin Unterprogramm kann aufgerufen werden unter Verwendung eines expliziten "&" eingeleitet werden. Das "&" ist optional in der modernen Perl, ebenso wie Klammern, wenn die Subroutine wurde vordeklarierte. Das "&" ist nicht optional, wenn nur der Benennung der Unterroutine wie wenn es als Argument an () definiert oder undef () verwendet. Auch ist es optional, wenn Sie zu einer indirekten Unterprogramm-Aufruf mit einer do - Unterprogramm Bezeichnung oder mit dem "& $ Subref ()" oder "& Subref) ($ ()" Konstrukte, obwohl die "$ Subref-> ()"-Schreibweise löst dieses Problem.
Siehe perlref, um mehr über das alles.
besonders hübsch finde ich den satz "Das "&" ist nicht optional, wenn nur der Benennung der Unterroutine wie wenn es als Argument an () definiert oder undef () verwendet."
mag jeder selber entscheiden, was er besser findet =)