Gesucht: Paket zur Optionenbehandlung

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.
frank [ Mo, 20 März 2006 19:21 ] [ ID #1238040 ]

Re: Gesucht: Paket zur Optionenbehandlung

Frank Küster <frank [at] kuesterei.ch> 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 <at> rezic <dot> de

tksm - Perl/Tk program for searching and replacing in multiple files
http://ptktools.sourceforge.net/#tksm
Slaven Rezic [ Mo, 20 März 2006 19:57 ] [ ID #1238041 ]

Re: Gesucht: Paket zur Optionenbehandlung

Mahlzeit!

Frank Küster <frank [at] kuesterei.ch> 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:<mitch [at] cgarbs.de>',y;:;\t;;print;_;_
Christian Garbs [ Di, 21 März 2006 00:23 ] [ ID #1238053 ]

Re: Gesucht: Paket zur Optionenbehandlung

Christian Garbs <mitch [at] cgarbs.de> wrote:

> Mahlzeit!
>
> Frank Küster <frank [at] kuesterei.ch> 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 [at] cfgDirs = (".","./debian","..","~");
my $cfgName = "tpm2license.cfg";

for my $cfgDir ( [at] 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.
frank [ Do, 23 März 2006 13:59 ] [ ID #1243484 ]
Perl » de.comp.lang.perl.misc » Gesucht: Paket zur Optionenbehandlung

Vorheriges Thema: Sudoku loesen / Mengenvariablen?
Nächstes Thema: Verzeichnisse rekursiv portabel kopieren