NAME
Quiq::Program - Basisklasse für Programme
BASE CLASSES
SYNOPSIS
Programm:
#!/usr/bin/env perl
use Quiq::Program;
exit Quiq::Program->run('MyProg')->exitCode;
# eof
Programm-Klasse:
package MyProg;
use base 'Quiq::Program';
sub main {
my $self = shift;
...
return;
}
# eof
Optionen und Argumente:
my ($error,$opt,$argA) = $self->options(
...
-help=>0,
);
if ($error) {
$self->help(10,"ERROR: $error");
}
elsif ($opt->help) {
$self->help;
}
elsif (@$argA != 1) {
$self->help(11,'ERROR: Falsche Anzahl Argumente');
}
my $myArg = shift @$argA;
...
METHODS
Programmsteuerung
run() - Führe Programm-Klassen aus
Synopsis
$prg = Quiq::Program->run($programClass,@options);
Options
Siehe Methode "new"()
exit() - Terminiere das Programm
Synopsis
$prg->exit;
$prg->exit($exitCode);
Description
Terminiere das Programm mit Exitcode $exitCode. Ist kein Exitcode angegeben, terminiere mit dem Exitcode der auf dem Programmobjekt gesetzt ist. Die Methode kehrt nicht zurück. Nach ihrem Aufruf wird die Methode "finish"() ausgeführt.
Getter/Setter
exitCode() - Liefere/Setze Exitcode
Synopsis
$exitCode = $prg->exitCode;
$exitCode = $prg->exitCode($exitCode);
name() - Name des Programms
Synopsis
$name = $this->name;
Description
Liefere den Namen des Programms. Der Programmname ist die letzte Pfadkomponente von $0.
Programmcode
main() - Hauptprogramm
Synopsis
$prg->main;
catch() - Fange und behandle unbehandelte Exception
Synopsis
$prg->catch($exception);
Description
Exception-Handler, der unbehandelte Exceptions der Anwendung fängt. Kann von der Programmklasse bei Bedarf überschrieben werden. Das Default-Verhalten ist, dass der Exception-Text auf STDERR ausgegeben und der Exitcode auf 99 gesetzt wird.
Das Programm terminiert nicht sofort, sondern die Methode "finish"() wird noch ausgeführt.
finish() - Abschließender Code vor Programmende
Synopsis
$prg->finish;
Umgebung
env() - Liefere/Setze Environment-Hash
Synopsis
$envH = $this->env;
$envH = $this->env(\%env);
argv() - Liefere/Setze Argument-Array
Synopsis
$argA|@args = $this->argv;
$argA|@args = $this->argv(\@argv);
stdin() - Liefere/Setze STDIN Filehandle
Synopsis
$fh = $this->stdin;
$fh = $this->stdin($fh);
stdout() - Liefere/Setze STDOUT Filehandle
Synopsis
$fh = $this->stdout;
$fh = $this->stdout($fh);
stderr() - Liefere/Setze STDERR Filehandle
Synopsis
$fh = $this->stderr;
$fh = $this->stderr($fh);
Character Encoding
encoding() - Standard-Encoding
Synopsis
$encoding = $prg->encoding;
Description
Liefere das Standard-Encoding, das in der Systemumgebung eingestellt ist. Im Konstruktor werden STDIN, STDOUT und STDERR auf dieses Encoding eingestellt, d.h. Eingaben und Ausgaben automatisch gemäß dieses Encodings gewandelt.
decode() - Dekodiere Zeichenkette gemäß Standard-Encoding
Synopsis
$str = $prg->decode($str);
encode() - Enkodiere Zeichenkette gemäß Standard-Encoding
Synopsis
$str = $prg->encode($str);
Parameter
parameters() - Argumente und Optionen des Programmaufrufs
Synopsis
($argA,$opt) = $prg->parameters($minArgs,$maxArgs,@optVal);
Arguments
- $minArgs
-
Mindestanzahl an Argumenten.
- $maxArgs
-
Maximale Anzahl an Argumenten.
- @optVal
-
Liste der Optionen und ihrer Defaultwerte.
Returns
- $opt
-
Hash-Objekt mit den Optionen.
- $argA
-
Referenz auf Array mit mindestens $minArgs und höchstens $maxArgs Argumenten.
Description
Liefere die Argumente und Optionen des Programmaufs. Sind weniger als $minArgs oder mehr als $maxArgs Argumente übergeben oder nicht deklarierte Optionen übergeben worden, wird eine Exception geworfen.
Optionen
options() - Verarbeite Programmoptionen (DEPRECATED)
Synopsis
($error,$optH,$argA) = $prg->options(@keyVal);
Description
FIXME: Veraltete Methode. Alle Stellen, wo die Methode options() genutzt wird, auf parameters() portieren.
opt() - Liefere Optionsobjekt oder Optionswerte
Synopsis
$val = $prg->opt($key); # [1]
@vals = $prg->opt(@keys); # [2]
$optH = $prg->opt; # [3]
Verzeichnisse
projectDir() - Projektverzeichnis
Synopsis
$dir = $prg->projectDir($depth);
Description
Liefere den Verzeichnispfad, der $depth Stufen oberhalb des Verzeichnisses endet, in dem das Programm installiert ist.
Der Installationspfad wird anhand von $0 ermittelt. Wurde das Programm mit einem relativen Pfad aufgerufen, wird dieser zu einem absoluten Pfad komplettiert.
Example
Wurde das Programm myprog unter dem Pfad
/opt/myapp/bin/myprog
installiert, dann liefert $prg->projectDir(1) den Pfad
/opt/myapp
als Projektverzeichnis.
Hilfe
help() - Gib Hilfetext aus und beende Programm
Synopsis
$self->help;
$self->help($exitCode);
$self->help($exitCode,$msg);
Description
Der Hilfetext wird aus der POD-Dokumentation des Programms generiert.
Ist $exitCode == 0, wird der Hilfetext auf STDOUT ausgegeben. Ist $exitCode != 0, wird der Hilfetext auf STDERR ausgegeben.
Ist $msg angegeben, wird die Hilfeseite oben und unten um Text $msg ergänzt (jeweils mit Leerzeile abgetrennt).
Ist $exitCode == 0 und STDOUT mit einem Terminal verbunden, wird der Hilfetext im Pager dargestellt (Environment-Variable $PAGER oder less).
Instantiierung
new() - Instantiiere Programm-Objekt
Synopsis
$prg = $class->new(@options);
Options
- -argv=>\@arr (Default: \@ARGV)
-
Setze Programm-Argumente auf @arr.
- -env=>\%hash (Default: \%ENV)
-
Setze Programm-Environment auf %hash.
- -stdin=>$fh (Default: \*STDIN)
-
Setze STDIN des Programms auf $fh.
- -stdout=>$fh (Default: \*STDOUT)
-
Setze STDOUT des Programms auf $fh.
- -stderr=>$fh (Default: \*STDERR)
-
Setze STDERR des Programms auf $fh.
VERSION
1.135
AUTHOR
Frank Seitz, http://fseitz.de/
COPYRIGHT
Copyright (C) 2019 Frank Seitz
LICENSE
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.