Hallo Leute,
für folgendes Codebeispiel suche ich eine andere Lösung.
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
MYLOOP: while ( 1 ) {
open my $fh1, '<', "$file1" or do {
print STDERR "unable to open $file1: $!\n";
print STDERR "sleep for 3 seconds\n";
sleep 3;
print STDERR "wakeup\n";
next MYLOOP;
};
# irgendeine Verarbeitung
close $fh1;
open my $fh2, '<', "$file2" or do {
print STDERR "unable to open $file2: $!\n";
print STDERR "sleep for 3 seconds\n";
sleep 3;
print STDERR "wakeup\n";
next MYLOOP;
};
# irgendeine Verarbeitung
close $fh2;
open my $fh3, '<', "$file3" or do {
print STDERR "unable to open $file3: $!\n";
print STDERR "sleep for 3 seconds\n";
sleep 3;
print STDERR "wakeup\n";
next MYLOOP;
};
# irgendeine Verarbeitung
close $fh3;
}
Was mir hier nicht passt ist die
do { ... } Anweisung, sobald etwas in
dem Loop fehl schlägt. Ich würde das gerne mit einer Subroutine erledigen,
aber das scheint wohl deprecated zu sein.
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
MYLOOP: while ( 1 ) {
open my $fh1, '<', "$file1" or foobar($file1);
# irgendeine Verarbeitung
close $fh1;
open my $fh2, '<', "$file2" or foobar($file2);
# irgendeine Verarbeitung
close $fh2;
open my $fh3, '<', "$file3" or foobar($file3);
# irgendeine Verarbeitung
close $fh3;
}
sub foobar {
my $file = shift;
print STDERR "unable to open $file: $!\n";
print STDERR "sleep for 3 seconds\n";
sleep 3;
print STDERR "wakeup\n";
{
no warnings "exiting";
next MYLOOP;
}
}
Gibt es vielleicht auch noch andere Lösungswege für mich?
Für ein paar Tipps wäre ich dankbar.
Viele Grüße,
opi
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.