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.