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



#!/COMMUNITY

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




11.02.2012 / 23:55

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


Beitragperl sub und ARGV
Seitenanfang
hi

ich habe hier in meine n perl script so einige
sub eingebaut .

jetzt mochte ich , um die subs besser testen zu koennen,
das ganze perl script auf rufen mit parameter.

sprich ARGV[0]

wenn ich das ganze dann mit

if ( $ARGV[0] =~ /help/i ) {
help
}

verarbeite funktioniert das auch , ist aber aufwendig das ich ja jedes sub modul dann seperat abfragen muss.

wenn ich aber nun das so mache
if ($#ARGV !=0 ) {
$ARGV[0]
}

bekomme ich fehlermeldungen .

ARGV entspricht dann einem name von einem sub.

holger

Datum: 23.03.2007-09:37

Beitragre: perl sub und ARGV
Seitenanfang
Welcher Fehlermeldung erhälst du denn?

Im Regelfall verwendet man für solche Zwecke einen Actionhandler


my %actions = (
'help' => \&show_help,
'search' => \&do_search,
'list' => \&do_list,
);

# setzte Standardaktion
$actions{'default'} = $actions{'help'};

my $action = $ARGV[0] || 'default';

if( (exists $actions{$action}) && (ref($actions{$action}) eq 'CODE') ) {

$actions{'default'}->();
}
else {
warn "Action doesn't exists!\n";

# startet Defaultaction (z.Bsp.: show_help)
$actions{'default'}->();
}

sub show_help {
# ...
}

sub do_search {
# ...
}

sub do_list {
# ...
}

Code nicht getestet, soll nur Problemlösung skitzzieren.

Datum: 24.03.2007-19:27

Beitragre: perl sub und ARGV
Seitenanfang
hi
das habe ich mir fast gedacht , hatte sogar sowas
in der art schon eingebaut.
jedoch habe ich gehofft das es eine "einfacherer"
loesung gibt.

die nicht ein permanentes hierher pflegen der
sub-name bzw commando beinhaltet.

holger

Datum: 26.03.2007-13:13

Beitragre: perl sub und ARGV
Seitenanfang
Es wäre auch möglich Subroutinen indirekt über eine Variable die den Namen der Sub enthält aufrufen, ohne dass zuvor der Namen einer Sub zugeordnet werden muss.
Es wäre aber ein schlechtes Beispiel wenn ich den Code hier präsentieren würde, da diese Methode nicht zu empfehlen ist. Bei interesse lässt sich das aber in der Perl-Dokumentation perlsub nachlesen.

Datum: 26.03.2007-14:36

Beitragre: perl sub und ARGV
Seitenanfang
Funktioniert nicht bei mir.

Mein Code:


my %actions = ('start' => \&start, 'daten' => \&daten);
my $action = $query{'action'} || 'start';
$actions{$action}->();

"start" ist dabei die default-Routine. Ich habe den Routinencheck weggelassen, weil alle Routinen existieren und überprüft wurden.

Ich bekomme den Fehler "Can't use an undefined value as a SCALAR reference at ... (Zeile der ersten print-Anweisung der Routine start)"

Wo hab ich denn den Fehler?

Datum: 27.03.2007-11:16

Beitragre: perl sub und ARGV
Seitenanfang
Die Fehlermeldung sagt es doch, du verwendest eine undefinierte Variable und versuchst sie zu dereferenzieren. Also prüfe warum die Variable in der Zeile der Fehlermeldung undefiniert ist.

Musst du beim Aufruf von 'start' event. Argumente mit übergeben?

Datum: 27.03.2007-14:33

Beitragre: perl sub und ARGV
Seitenanfang
Nachträglich möchte ich noch auf das Modul CGI::Application hinweisen, das ein Framework für diesen Zweck bereitstellt.

Datum: 27.03.2007-14:36

-






-
-