sanjeeb <> wrote:
> I have a application which multiple modules. Each module do some task.
> I have a signal handler defined in the main.pl which is the starting
> point to run the application.
> I want to define signal handler in each module which will do specific
> task and again raised a signal which will be handled by the global
> signal handler.
> The signal to be caught are same throughout, not specific to any class
> or the global handler.
> Scenario :
> application.pl define a a signal handler &globalhandler
> application.pl creates a object out of foo.pm and foo.pm defines
> a handle &foo_cleaner
> when the execution is under the context of foo.pm object , a
What do you mean with "the context of foo.pm object"?
> INT signal caught. It will clean up the required things populated
> by foo.pm and then raised the same signal from foo_cleaner. After
> raising the &globalhandler should be called means the global handler
> will be caught.
> I tried but didnt succeded.
> Do you have guys any idea whether there is some way out???
> Can i get two handlers with the same signal???
You can have only a single signal handler for each signal. So
if the signal has been dealt with by foo_cleaner() then it's
used up. Raising it again would only lead to foo_cleaner() being
called again as long as it's still installed as the handler for
that signal.
What you can do is to simply call global_handler() from
foo_cleaner(). You can figure out its address by inspecting
the value of $SIG{INT} before you install foo_cleaner() as
the new signal handler. I.e. do
my $old_handler = $SIG{ INT };
$SIG{ INT } = \&new_handler;
sub new_handler {
do_something;
&$old_handler( @_ );
}
Regards, Jens
--
\ Jens Thoms Toerring ___
\__________________________
http://toerring.de