Почему вы изменяете переменную и ждете ее в бесконечном цикле?
Не было бы лучше, если бы вы вызывали эту подпрограмму напрямую из обработчика сигнала?
$ SIG {WINCH}= sub {print STDERR "WINCH! \ n"; выбрать ();};
Этот обработчик находится в главном разделе вашего модуля, он выполняется во время выполнения, а не во время выполнения, и только если вы используете use not require.
Возможно, это работает в модуле
local $size_changed;
BEGIN{
$SIG{WINCH} = sub { $size_changed = 1; };
}
Просто предположение: попробуйте использовать Perl :: Unsafe :: Signals.
use Perl::Unsafe::Signals;