my $shared_memory_segment_created = 0; while (! $shared_memory_segment_created) { $shared_memory_segment_created = eval { tie %events, 'IPC::Shareable', { key => _rand_shm_key(), create => 1, exclusive => 1, protected => _shm_lock(), mode => 0600, destroy => 1 }; 1; }; } #### eval { require Devel::Trace::Subs; import Devel::Trace::Subs qw(trace); }; if (! defined &trace){ *trace = sub {}; } #### my $thing_ok = eval { do_something(); 1; }; if (! $thing_ok) { # code in eval failed, so return was undef if ($@ =~ /bad parameter/) { # if the die statement died because of a bad param, warn the user # otherwise carry on silently warn $@; } }