perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 22
Click for quality!




12.02.2012 / 02:08

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragArgumentübergabe auf der kommandozeile
Seitenanfang
Hab da ein problem mit der Argumentübergabe auf der kommandozeile

in meimem programm gibt es einige kommandozeilenargumente wie z.B. -o | --output auf welches eine pfad angabe folgt. wie kann ich jetz auf diesen pfad zugreifen wenn ich die option -o finde. Meine idee war :

foreach (@ARGV) {
$index++;
debug("gp: $index => $_");

if(/^-o$/ || /^--output$/) {
$index++; # go to the next argument
debug("gp: $index; $ARGV[$index]");
if($ARGV[$index] eq /^-.*/) {
erroranddie("No File Path is given.", 1);
}else{
$answer= $ARGV[$index];
splice(@ARGV, $index, 1);
}
}

aber irgendwie funktioniert das ganze nicht richtig. Ich weis nur nicht warum

Datum: 25.08.2008-09:19

Beitragre: Argumentübergabe auf der kommandozeile
Seitenanfang
Hallo!

>>if($ARGV[$index] eq /^-.*/) {
Ein RA wird mit dem Operator =~, nicht mit eq auf einen String angewendet.

Eine noch bessere Lösung ist es aber, den ganzen Quellcode zu löschen und stattdessen eines von vielen CPAN-Modulen speziell für diese Aufgabe zu nehmen. Getopt::OO (http://search.cpan.org/~sjsmith/Getopt-OO-0.07/lib/Getopt/OO.pm) sieht z.B. vielversprechend aus.

Grüße, Skrilax

Datum: 25.08.2008-18:38

Beitragre: Argumentübergabe auf der kommandozeile
Seitenanfang
Danke hab meinen fehler schon gefunden. Mit den ganzen perl modulen bin ich leider nicht so vertraut und desshalb auf gar nicht erst auf die idee gekommen, dass es dafür eines gibt. Klingt aber verlockend, mal sehen ob ich des nachträglich einfüge.

lg franzi

Datum: 26.08.2008-07:56

Beitragre: Argumentübergabe auf der kommandozeile
Seitenanfang
Getopt::Std und Getopt::Long sind Standardmodule fuer diese Aufgabe

#!/usr/bin/perl

use strict;
use warnings;

# Vorbelegung der Optionen
my %options = (
"output-file" => "out.file",
"title" => "Untitled",
);

GetOptions(\%options,
"output-file|output|o=s",
"title|t=s",
"verbose|v",
"debug|d+",

);


Das ist nur eine Anwendungsmoeglichkeit von Getopt::Long, die Optionen werden in einem Hash (%options) gespeichert, dafuer uebergibt man GetOptions() als erstes Argument eine Hashreferenz, alle folgenden Argumente beschreiben die Optionen.
Der Aufbau ist "<Optionsname> = <Optionstyp>", beim Optionsnamen koennen Alternativnamen angegeben werden (getrennt durch '|'), wie bei "output-file|output|o" so kann man --output-file, --output oder -o verwenden, der Wert wird im Hash mit dem ersten Namen als Schluesselnamen gespeichert, hier $options{'output-file'}.
Der Optionstyp (die Angabe hinter dem Ist-Gleich), gibt an welchen Wert die Option erwartet, fehlt die Angabe, wie z.Bsp. bei "verbose", ist es ein boolischer Wert, die Angabe von --verbose oder -v auf der Kommandozeile setzt $options{'verbose'} auf 1 (boolisch wahr).
Der Optionstyp "s" wie bei "output-file|output|o=s" erwartet einen String, "i" einen Integer, und so weiter.

Statt einen Hash kann man auch einzelne Variablen verwenden


GetOptions(
"output-file|output|o=s" => \$output-file,
"verbose|v" => \$verbose,
# ...
);

ich hab die Optionen jedoch lieber gesammelt in einen Hash, das macht die Sache einfacher.

Datum: 26.08.2008-13:02

-






-
-