Thread abgedrehtes problem mit switch: oder bin ich blind? (71 answers)
Opened by deepblack at 2004-06-16 21:56

steffenw
 2004-06-17 16:10
#83441 #83441
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Man muß bei if ... elsif ... else nicht jede Bedingung einzeln ausformulieren. Man kann auch gut gruppieren und während des Testens der Bedingung Variablen/Merker setzen. Hier ein primitives Beispiel:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!perl
# Beispiel - prüfen von Kommandos
use strict;
use warnings;

sub check_command {
if ((local $_ = shift) eq 'end') {
# Ende Nutzdaten
return '';
}
elsif (
# Kommandos verarbeiten
/^set\s+nr\s*=\s*(\d+)$/
or
/^set\s+typ\s*=\s*"([^"]+)"$/ and my $typ_flag = 1
) {
# verarbeitendes Programm für alle "set"-Kommandos
print $typ_flag ? qq~Typ "$1"~ : "Nummer $1", " wird gesetzt.\n";
} else {
# Fehlerbehandlung
return qq~Unbekanntes Kommando "$_" entdeckt.\n~;
}
undef;
}

for (
'set nr = 123',
'set typ="S4 Q"',
'Hallo',
'end',
'next',
) {
my $rc = check_command $_;
$rc and print "ERROR: $rc";
defined $rc and last;
}



Ergebnis:

Nummer 123 wird gesetzt.
Typ "S4 Q" wird gesetzt.
ERROR: Unbekanntes Kommando "Hallo" entdeckt.
$SIG{USER} = sub {love 'Perl' or die};

View full thread abgedrehtes problem mit switch: oder bin ich blind?