【Perl】初心者コーナー Part19

このエントリーをはてなブックマークに追加
879nobodyさん
$tmp = `/usr/bin/whois -h $server $name.$domain |grep -i '$msg'`;
このような処理で万が一タイムアウトになった場合、次の処理に移り
たいのですが、実行しっぱなしになってしまいます。
通常どういった処理を行うのが良いのでしょうか。
880nobodyさん:03/03/15 17:51 ID:???
>>849>>850
ありがとうございました。
ただ私の環境はActivePerl-5.6.1.635なので
どうもできないようです。(forkできないから?)

execも引数を2個使うとなぜか機能しません。
○exec "コマンド 引数"
×exec "コマンド","引数"
もうさっぱりわかりません。

open FOO,"コマンド 引数|"
これだとFOOに結果が格納されたんですが
引数が外部の場合危ないですよね。
881nobodyさん:03/03/15 18:45 ID:???
恥ずかしい話だが。。。
漏れって「引数」をずっと「いんすう」って読んでたよ。
882845:03/03/15 19:28 ID:???
>>879
alarmでどうよ。

>>880
> 引数が外部の場合危ないですよね。

だから「チェックをしっかり」と書いてるんだけど…。
"$cmd $arg"と書かずに$cmd,@argと書いた意図を汲んでほしいな。
そもそも使いたいコマンドは何?引数はそんなに複雑なの?

引数が2つ以上のexecは引数が1つの時と挙動が変わるし、
第一システムコール使う関数は9x系とNT系で実装具合が違う。
駱駝本なりperldoc -f execなり読んでね。
883nobodyさん:03/03/15 20:20 ID:???
>881
私も昔そう呼んでたよ。気にするな。
884nobodyさん:03/03/15 20:52 ID:???
>>881
98SEが出るあたりまでずっとそう呼んでたよ。
885nobodyさん:03/03/15 21:18 ID:???
>>880
汚染チェックだけしっかりやっとけ
>>882
$cmd,@argでも' 'でjoinしている時点で
意図を汲みようがないと思われ
886nobodyさん:03/03/15 21:42 ID:???
>>879
$SIG{'ALRM'} = sub{ die 'timeout' };

eval{
alarm($timeout); # $timeout秒
$tmp = `/usr/bin/whois -h $server $name.$domain |grep -i '$msg'`;
alarm(0);
};
if ($@){
alarm(0);
($@ =~ /timeout/) or die;
# timeout!
}
# windowsではalarmが使えません。

>>880
windowsでは "-|"が使えません。