[quote=vayu,12.05.2006, 10:45]
1
2
3 use strict;
4 use warnings;
5
6 my @output = qx(/sbin/ifconfig -a 2>&1);
7 foreach(@output) {
8 print $_;
9 }
waren backticks nicht "veraltet"? :D[/quote]
Nun, ich finde die Verwendung von
qx viel zu unsicher, um externe
Programme aufzurufen. Viel sicherer wäre es, wenn man mit waitpid etc.
arbeiten würde...
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
use strict;
use warnings;
use IPC::Open3;
my @errors;
my $command = '/sbin/ifconfig -a';
my $pid = open3(\*CHLD_STDIN, \*CHLD_STDOUT, \*CHLD_STDERR, $command) or die "Fehler: $command kann nicht ausgefuehrt werden - $!";
# CHLD_IN wird geschlossen, da wir die Optionen schon mitgegeben haben.
# Nach dem close von CHLD_IN faengt ifconfig an zu arbeiten...
close CHLD_STDIN;
# es wird STDOUT des Prozesses ausgelesen und verarbeitet
while (<CHLD_STDOUT>) {
# irgendeine Verarbeitung
print;
}
close CHLD_STDOUT;
# Mit $/ wird der gesamte Inhalt von CHLD_STDERR auf einmal
# eingelesen. Das ganze in einem extra Block, damit $/ nicht
# global veraendert wird.
{
local $/;
@errors = <CHLD_STDERR>;
}
close CHLD_STDERR;
# Prozess wieder einsammeln.
waitpid($pid,0);
# Ausgabe des Status.
printf "Status: %i\n", ($? ? $? / 256 : $?);
if (@errors) {
print "Aufgetretene Fehler:\n";
print for @errors;
}
IPC::Open3
greez,
opi\n\n
<!--EDIT|opi|1147486539-->
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.