CPAN: Variablen Referenz in Subs

Beitrag lesen

Hallo C-Programmierer!

Ich modernisiere zunächst deine Programmierpraktiken; Struppis Haltung zum ersten Thema ist mir nicht streng genug formuliert.

① Prototypes nicht mehr benutzen: http://stackoverflow.com/questions/297034 Perl::Critic verbietet dies auch.

② Argumente in einer Zeile entpacken: http://www.perl-community.de/bat/poard/thread/14780 Perl::Critic fördert dies auch.

③ Das direkte Verändern von Parametern ist sehr unperlig.
• Nachteile:
    ‣ Du handelst dir Probleme mit versteckten Zustand und Nebenwirkungen ein,
    ‣ vernichtest zukünftige Möglichkeiten der Compileroptimierung (Stichpunkt Unveränderlichkeit) und
    ‣ erhöhst das Risiko der Eintrittsvarianz beträchtlich.
• Vorteile: Keine.

Perl war schon immer in der Lage, mehrere Werte zurückzuliefern, also tue das.

――――

Bleibt das explizite dereferenzieren:

  
sub check_kunde {  
    my ($nummern_aref, $nummern_art) = @_; # kein Aliasing mehr, siehe perldoc perlsub  
    [...]  
    @{ $nummern_aref } blah blah $nummern_aref->[blah blah]  
    [...]  
    return $nummern_aref, $nummern_art;  
}  

Mehr ist mit Bordmitteln derzeit nicht drin. Wenn du aber magst, kannst du zusätzliche Module wie MooseX::Declare benutzen, welche die Syntax aufmöbeln und dank Funktionssignaturen das Entpacken von @_ unnötig machen.