2013-04-05 117 views
3

我是perl的新手,嘗試向我的腳本添加功能以捕獲鍵盤中斷和術語信號(如果拋出),然後發出操作系統命令來處理。在沒有信號拋出和腳本成功執行的情況下(注意END塊),還需要發出相同的OS命令和子文件。據我從研究和測試中可以看出,你必須爲每個信號註冊一個信號處理程序。在每種情況下,他們都需要觸發相同的子。這可能在一個$ SIG中做,或者我必須註冊兩個,每個信號一個?這是我的代碼。perl指向一個子程序的多個sig處理程序

sub issueKdestroy{ 
    system("kdestroy -q"); 
    exit(1); 
} 
$SIG{INT} = (\&issueKdestroy); 
$SIG{TERM} = (\&issueKdestroy); 
END{ 
    issueKdestroy(); 
} 

從測試中,這不起作用:

$SIG{'INT', 'TERM'} = (\&issueKdestroy); 

它不會承認INT或TERM在上面的代碼。 意見?

+3

'$ SIG {INT} = $ SIG {TERM} = \&issueKdestroy'? – mob 2013-04-05 16:19:04

+2

'$ SIG {$ _} = \&issueKdestroy for qw(INT TERM)'? – mob 2013-04-05 16:20:21

+2

'@SIG {'INT','TERM'} =(\&issueKdestroy)x 2'? – mob 2013-04-05 16:22:48

回答

2

$SIG{'INT', 'TERM'}是不是你的意思;分配值,這樣兩個密鑰,使用散列切片(並提供兩個值):

@SIG{'INT', 'TERM'} = (\&issueKdestroy, \&issueKdestroy); 

隨着$相反,你可以調用,允許多個按鍵被指定,但存儲在Perl4樣式風格多維數組仿真他們都在一個單一的哈希值,相當於:

$SIG{ join $;, 'INT', 'TERM' } 

其中$;chr(0x1c)默認。