Quiq::Option - Verarbeitung von Programm- und Methoden-Optionen
Quiq::Object
$opt = $class->extract(@opt,\@args,@keyVal); # Options-Objekt $class->extract(@opt,\@args,@keyVal); # Options-Variablen
Entferne die Optionen nicht aus der Argumentliste.
Im Falle von -mode=>'strict' (dem Default), wird eine Exception ausgelöst, wenn eine unbekannte Option vorkommt. Im Falle von -mode=>'sloppy' wird das Argument stillschweigend übergangen.
-mode=>'strict'
-mode=>'sloppy'
Argumentliste aus Schlüssel/Wert-Paaren, bei denen die Schlüssel nicht mit einem Bindestrich (-) beginnen. Eine Unterscheidung zwischen Optionen und Argumenten gibt es nicht.
Wirf im Falle eines Fehlers eine einzeilige Fehlermeldung als Exception.
Extrahiere die Optionen @keyVal aus der Argumentliste @args und weise sie im Void-Kontext Variablen zu oder im Skalar-Kontext einem Optionsobjekt.
Schreibweisen für eine Option
Eine Option kann auf verschiedene Weisen angegeben werden.
Als Programm-Optionen:
--log-level=5 (ein Argument) --logLevel=5 (mixed case)
Als Methoden-Optionen:
-log-level 5 (zwei Argumente) -logLevel 5 (mixed case)
Die Schreibweise mit zwei Bindestrichen wird typischerweise bei Programmaufrufen angegeben. Die Option besteht aus einem Argument, bei dem der Wert durch ein Gleichheitszeichen vom Optionsnamen getrennt angegeben ist.
Die Schreibweise mit einem Bindestrich wird typischerweise bei Methodenaufrufen angegeben. In Perl ist bei einem Bindestrich kein Quoting nötig. Die Option besteht aus zwei Argumenten.
Beide Schreibweisen sind gleichberechtigt, so dass derselbe Code sowohl Programm- als auch Methodenoptionen verarbeiten kann.
Ist -properties=>1 gesetzt, ist die Argumentliste eine Abfolge Schlüssel/Wert-Paaren ohne Bindestrich als Options-Kennzeichen:
-properties=>1
a 1 b 2 c 3
Instantiierung eines Options-Objekts:
sub meth { my $self = shift; # @_: @args my $opt = Quiq::Option->extract(\@_, -logLevel => 1, -verbose => 0, ); ... if ($opt->verbose) { ... } }
Das gelieferte Options-Objekt $opt ist eine Quiq::Hash-Instanz. Die Schlüssel haben keine führenden Bindestriche. Eine Abfrage des Optionswerts ist per Methode möglich:
$verbose = $opt->verbose;
Setzen von Options-Variablen:
sub meth { my $self = shift; # @_: @args my $logLevel = 1; my $verbose = 0; Quiq::Option->extract(\@_, -logLevel => \$logLevel, -verbose => \$verbose, ); ... if ($verbose) { ... } }
Optionen bei Programmaufruf:
$ prog --log-level=2 --verbose file.txt
Optionen bei Methodenaufruf:
$prog->begin(-logLevel=>2,-verbose=>1,'file.txt');
Abfrage einer Option:
$logLevel = $opt->logLevel;
Abfrage mehrerer Optionen:
($verbose,$logLevel) = $opt->get('verbose','logLevel');
@opts|$optA = $class->extractAll(\@arr);
Extrahiere alle Option/Wert-Paare aus @arr und liefere diese als Liste zurück. Im Skalarkontext liefere eine Referenz auf die Liste.
$class->extractMulti(@opt,\@arr,$key=>$ref,...);
Übergehe unbekannte Optionen.
Extrahiere aus Array @arr die Werte zu den angegebenen Schlüsseln $key und weise diese an die Variablen-Referenzen $ref zu. Die Methode liefert keinen Wert zurück.
Eine Referenz kann eine Skalar- oder eine Arrayreferenz sein. Im Fall einer Skalarreferenz wird der Wert zugewiesen. Im Falle einer Array-Referenz werden mehrere aufeinanderfolgende Werte in dem Array gesammelt.
Für das Hinzufügen einer Default-Option, siehe Beispiel.
# Optionen my @select; my @from; my @where; my $limit; unshift @_,'-select'; # Default-Option Quiq::Option->extractMulti(\@_, -select => \@select, -from => \@from, -where => \@where, -limit => \$limit, ); unless (@from) { die "FROM-Klausel fehlt\n"; } unless (@select) { @select = ('*'); }
1.157
Frank Seitz, http://fseitz.de/
Copyright (C) 2019 Frank Seitz
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Quiq, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Quiq
CPAN shell
perl -MCPAN -e shell install Quiq
For more information on module installation, please visit the detailed CPAN module installation guide.