Укажите обработчик сигнала Perl, используя номер, а не имя

Я хочу указать обработчик сигнала в Perl, но используя номер, а не имя. Возможно ли это в краткой форме? Отсутствие симметрии с убийством особенно бросается в глаза. Например, вместо

$SIG{USR2} = \&myhandler;

Я хотел бы сказать

$SIG{12} = \&myhandler;

Лучшее, что у меня есть на данный момент, это «использовать Config» и копаться в $Config{sig _name}, основываясь на коде в perldoc perlipc. Это многословно и кажется излишне сложным.

Обоснование :В последнее время я нуждался в этом в двух случаях.

1 :Меня запускает ошибочный родительский процесс, который неправильно устанавливает сигналы, которые я хочу игнорировать, и я хочу просто сбросить все настройки по умолчанию. напримерhttp://bugs.debian.org/cgi-bin/bugreport.cgi?bug=679630Целью может быть что-то простое и грубое, например:

foreach my $i (1..32) { $SIG{$i} = 'DEFAULT'; }

2 :Пишу тонкий, как -невидимый -как -возможный скрипт-оболочку. Если программа, которую я оборачиваю, завершается с сигналом, я хочу выйти с тем же сигналом. Однако я фиксирую несколько сигналов, поэтому мне нужно очистить свой собственный обработчик сигналов, чтобы убедиться, что я действительно выхожу, а не вхожу в свой обработчик сигналов.Моя цель — написать что-то краткое вроде этого:

$ret = system("./other-program");
$SIG{$ret & 127} = 'DEFAULT';
kill $ret & 127, $$;

5
задан Alan De Smet 23 July 2012 в 21:55
поделиться