# Perl >= 5.10
my $pid=fork() // die "Can't fork: $!";
# Perl < 5.9 manually
my $pid=fork(); defined($pid) or die "Can't fork: $!";
# 123456789012345
# 15 extra characters
# Perl < 5.9 + your module
my $pid=def_or_call(fork(),sub { die "Can't fork: $!" });
# 123456789012345678
# 18 extra characters -- oops!
# And you should never forget to wrap die in a sub ...
# Perl < 5.9 + your module with defined_or_die
# (remember to check if arguments are ALWAYS evaluated left-to-right!)
# (or find a better solution ...)
my $pid=def_or_die(fork(),"Can't fork: $!");
# 12345
# just 5 extra characters - 10 less than manually
# and no wrapper needed
####
sub def_or_die
{
my ($v,$msg)=@_;
return def_or_call($v,sub {
require Carp;
die Carp::some_magic_helper_function($msg);
});
}
##
##
sub def_or_carp
{
my ($v,$msg)=@_;
return def_or_call($v,sub {
require Carp;
Carp::please_ignore_these_wrappers();
Carp::carp($msg);
});
}
##
##
sub def_or_carp
{
my ($v,$msg)=@_;
return def_or_call($v,sub {
if (exists $INC{'CGI/Carp.pm'}) {
# CGI::Carp loaded
CGI::Carp::please_ignore_these_wrappers();
CGI::Carp::carp($msg);
} else {
require Carp;
Carp::please_ignore_these_wrappers();
Carp::carp($msg);
}
});
}