The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Prty::Parameters - Verarbeitung von Programm- und Methodenparametern

BASE CLASS

Prty::Object

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.