Gesucht: Paket zur Optionenbehandlung

Gesucht: Paket zur Optionenbehandlung

am 20.03.2006 19:21:24 von frank

Hallo,

ich vermute mal, meine Suchstrategien sind nur suboptimal, denn dieses
Rad ist sicher schon neu erfunden:

Ich möchte in einem Skript eine Konfigurationsdatei (wenn vorhanden)
einlesen, die Werte daraus mit Kommandozeilenoptionen überschreiben
können, und notfalls auf hardkodierte Defaultwerte zurückfallen -
allerdings nicht bei allen, teilweise brauchts eine Fehlermeldung.

Die einzelnen Teile sind kein Problem (Getopt{::Long},
Config::TakeWhatYouWant), aber alles zusammenzubauen artet gerade in
Gefrickel aus, und ich denke mal, da gibt's doch sicher schon was...

TIA, Frank

--
> ich wusste mal einen Befehl, der die Ausgabe auf stdout noch zusätzlich
> in eine Datei umlenken konnte... Bitte helft mir auf die Sprünge.
"kaffee" war es nicht.

Re: Gesucht: Paket zur Optionenbehandlung

am 20.03.2006 19:57:32 von Slaven Rezic

Frank Küster writes:

> Hallo,
>
> ich vermute mal, meine Suchstrategien sind nur suboptimal, denn dieses
> Rad ist sicher schon neu erfunden:
>
> Ich möchte in einem Skript eine Konfigurationsdatei (wenn vorhanden)
> einlesen, die Werte daraus mit Kommandozeilenoptionen überschreiben
> können, und notfalls auf hardkodierte Defaultwerte zurückfallen -
> allerdings nicht bei allen, teilweise brauchts eine Fehlermeldung.
>
> Die einzelnen Teile sind kein Problem (Getopt{::Long},
> Config::TakeWhatYouWant), aber alles zusammenzubauen artet gerade in
> Gefrickel aus, und ich denke mal, da gibt's doch sicher schon was...
>

AppConfig. Ich kenne das Modul nicht selbst, aber es wird im Umfeld
von Template-Toolkit verwendet.

--
Slaven Rezic - slaven rezic de

tksm - Perl/Tk program for searching and replacing in multiple files
http://ptktools.sourceforge.net/#tksm

Re: Gesucht: Paket zur Optionenbehandlung

am 21.03.2006 00:23:16 von Christian Garbs

Mahlzeit!

Frank Küster wrote:

> Ich möchte in einem Skript eine Konfigurationsdatei (wenn vorhanden)
> einlesen, die Werte daraus mit Kommandozeilenoptionen überschreiben
> können, und notfalls auf hardkodierte Defaultwerte zurückfallen -
> allerdings nicht bei allen, teilweise brauchts eine Fehlermeldung.

Ich nutze AppConfig in ein bis drei Progrämmchen und habe damit ganz
gute Erfahrungen gemacht (irgendwo war mal ein blöder (Doku)Fehler oder
sowas, aber die aktuelle Version funktioniert bei mir problemlos).

Gruß,
Christian
--
sub _{print"\n"}_;for(;$s<9;++$s){$_='1E2018201E00001E2018201E00001E2018201'
..'E002020001C2222221400005CA2A2A27C02001C2222221C20003E0402 02201F2422221C00'
..'242A2A2A12002020001C2222221F20001C2A2A2A0C';while(s;(..); ;){printf'%c',hex
$1&1<<$s?40:32}_}$_=':::Christian Garbs:',y;:;\t;;print;_;_

Re: Gesucht: Paket zur Optionenbehandlung

am 23.03.2006 13:59:14 von frank

Christian Garbs wrote:

> Mahlzeit!
>
> Frank Küster wrote:
>
>> Ich möchte in einem Skript eine Konfigurationsdatei (wenn vorhanden)
>> einlesen, die Werte daraus mit Kommandozeilenoptionen überschreiben
>> können, und notfalls auf hardkodierte Defaultwerte zurückfallen -
>> allerdings nicht bei allen, teilweise brauchts eine Fehlermeldung.
>
> Ich nutze AppConfig in ein bis drei Progrämmchen und habe damit ganz
> gute Erfahrungen gemacht (irgendwo war mal ein blöder (Doku)Fehler oder
> sowas, aber die aktuelle Version funktioniert bei mir problemlos).

Ja, vielen Dank (auch an Slaven), mir gefällt AppConfig auch gut. Ob
die Version in Debian sarge die aktuelle ist, weiß ich nicht, aber
jedenfalls tut es bisher sehr schön, und der Code ist wirklich knapp und
leserlich. Bzw. er bietet sicherlich Gelegenheit, mich noch zu
belehren:

#!/usr/bin/perl

use strict;
use warnings;

use AppConfig;

my $config = AppConfig->new("master=s", "catalogue=s", "nocheckcatalouge");

my ($Master,$Catalogue,$Nocheckcatalogue);

# parse configurationfile, if present
my @cfgDirs = (".","./debian","..","~");
my $cfgName = "tpm2license.cfg";

for my $cfgDir (@cfgDirs) {
if ( -r "$cfgDir/$cfgName" ) {
print "Using configuration file $cfgDir/$cfgName\n";
$config->file("$cfgDir/$cfgName");
};
};

$config->getopt();

$Master = $config->master();

print "$Master\n";

Man sieht auch, dass es doch eine kleine Ungenauigkeit in der
Dokumentation gibt:

,----
| Multiple files may be passed to file() and should indicate the file
| name or be a reference to an open file handle or glob.
|
| $config->file($filename, $filehandle, \*STDIN, ...);
|
`----

Es wird leider nicht gesagt, in welcher Reihenfolge die Dateien gelesen
werden (und ich möchte mich lieber nicht darauf verlassen, dass es so
bleibt wie ich durch Ausprobieren herausfinde) und was passiert wenn
eine Datei nicht existiert.

Gruß, Frank
--
> ich wusste mal einen Befehl, der die Ausgabe auf stdout noch zusätzlich
> in eine Datei umlenken konnte... Bitte helft mir auf die Sprünge.
"kaffee" war es nicht.