NAME
Prty::Parameters - Verarbeitung von Programm- und Methodenparametern
BASE CLASS
METHODS
Klassenmethoden
extract() - Extrahiere Optionen und Argumente
Synopsis
# Optionswerte an Variablen zuweisen
$argA = $class->extract(1,$encoding,\@params,$n,@optRef);
# Optionen und Werte per Optionsobjekt zurückgeben
($argA,$opt) = $class->extract(0,$encoding,\@params,$n,@optVal);
Arguments
- $varMode (0 oder 1)
-
Der erste Parameter entscheidet, ob die Optionswerte an ein Optionsobjekt (0) oder an Variablen (1) zugewiesen werden.
- $encoding
-
Programm-Parameter müssen ggf. dekodiert werden. Dies geschieht, wenn mit diesem Parameter ein Encoding vereinbart wird. Sollen die Parameter nicht dekodiert werden, was bei der Verarbeitung von Methodenparametern typischerweise der Fall ist, wird
undef
angegeben. - @params
-
Parameterliste, z.B. @ARGV oder @_.
- $n
-
Anzahl der maximal zu extrahierenden Argumente (Argument = Parameter, der nicht mit einem Bindestrich beginnt). Die Anzahl der tatsächlich extrahierten Argumente kann niedriger sein, wenn weniger Argumente vorhanden sind. Sind mehr Argumente in @params vorhanden, bleiben die überzähligen Argumente in @params stehen.
undef
bedeutet eine unbegrenzte Anzahl. - @optVal
-
Liste der Optionen (Option = Parameter, der mit einem Bindestrich beginnt) und ihrer Defaultwerte. Optionen und ihre Werte, die in der Liste nicht vorkommen, werden nicht extrahiert.
- @optRef
-
Wie @optVal, nur dass anstelle des Defaultwerts eine Variablenreferenz angegeben ist. An diese Variable wird der Optionswert zugewiesen.
Returns
- $opt
-
Hash-Objekt mit den Optionen aus @params gemäß @optVal.
- $argA
-
Array-Objekt mit den (maximal $n) Argumenten aus @params.
Description
Extrahiere Argumente und Optionen aus der Parameterliste @params. Enthält die Parameterliste mehr Argumente oder Optionen als vorgegeben sind, bleiben diese in @params stehen. Dies eröffnet die Möglichkeit, Argumente und Optionen über mehrere Aufrufebenen sukzessive zu verarbeiten.
Fehlerbehandlung
Die Methode kennt keine Fehler. Überzählige Argumente oder Optionen, die nicht in der Optionsliste @optVal (bzw. @optRef) vorkommen, bleiben in @params, werden also nicht extrahiert. Die Anzahl der Argumente $n ist eine maximale Anzahl, die unterschritten werden kann.
Es obliegt dem Aufrufer, durch Tests auf @params und @$argA zu prüfen, ob beim Aufruf des Programms oder der Methode zu viele Parameter (= @params wurde nicht komplett geleert) oder zu wenige Parameter (= @$argA enthält nicht genügend Elemente) übergeben wurden.
Eine mögliche Wrapper-Methode für eine finale Parameterverarbeitung, die bei zu wenig/zu vielen Argumenten oder nicht vereinbarten Optionen eine Exception wirft:
sub parameters {
my ($self,$varMode,$encoding,$paramA,$minArgs,$maxArgs) =
splice @_,0,6;
my ($argA,$opt) = Prty::Parameters->extract($varMode,
$encoding,$paramA,$maxArgs,@_);
if (@$paramA) {
die "ERROR: Unexpected parameter(s): @$paramA\n";
}
elsif (@$argA < $minArgs) {
die "ERROR: Too few arguments\n";
}
if ($varMode) {
return wantarray? @$argA: $argA;
}
return ($argA,$opt);
}
VERSION
1.125
AUTHOR
Frank Seitz, http://fseitz.de/
COPYRIGHT
Copyright (C) 2018 Frank Seitz
LICENSE
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.