eingaben evaluieren, aber die soll funktionieren

14/11/2007 - 11:38 von Frank Kulow | Report spam
Hallo NG,

eval <>;


sub s1
{
print "s1:";
open(HD,"<lkj") or die "e$!";
print "open";
}



hat den Nachteil, dass, wenn z.b. s1 eingebeben wird, bei fehler "die"
nicht ausgeführt wird.


Variante 2:

sub s1
{
print "s1:";
open(HD,"<lkj") or die "e$!";
print "open";
}
sub s2
{
print "s2:";
open(HD,"<lk2") or die "e$!";
print "open";
}

%h=('s1',\&s1,
's2',\&s2);

$i= <>;
chomp($i);

&{$h{$i}};


hat den Nachteil, dass der Hash %h gepflegt werden muss.

Gibt es eine Möglichkeit, die Nachteile zu vermeiden?

Danke Frank
 

Lesen sie die antworten

#1 Frank Seitz
14/11/2007 - 11:52 | Warnen spam
Frank Kulow wrote:

eval <>;

sub s1
{
print "s1:";
open(HD,"<lkj") or die "e$!";
print "open";
}

hat den Nachteil, dass, wenn z.b. s1 eingebeben wird, bei fehler "die"
nicht ausgeführt wird.



die() wird schon ausgeführt, aber du testest nach dem eval()
nicht drauf. Variable: $@.

Variante 2:


[...]

hat den Nachteil, dass der Hash %h gepflegt werden muss.



Der Weg ist sauberer. Eingaben ungeprüft auszuführen,
ist IMO nicht die tolle Idee.

Grüße
Frank
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Ähnliche fragen