#############################################################################
## Name:        Hole.pm
## Purpose:     Safe::World::Hole - Front end for Safe::Hole
## Author:      Graciliano M. P.
## Modified by:
## Created:     23/01/2004
## RCS-ID:      
## Copyright:   (c) 2004 Graciliano M. P.
## Licence:     This program is free software; you can redistribute it and/or
##              modify it under the same terms as Perl itself
#############################################################################

package Safe::World::Hole ;

use vars qw($VERSION @ISA) ;
$VERSION = '0.09';

@ISA = qw(Safe::Hole) ;

no warnings ;

###########
# REQUIRE #
###########

use Safe::Hole ;

##########
# SCOPES #
##########

my $Safe_Hole_call = \&Safe::Hole::call ;

########
# CALL #
########

sub call {
  my $this = shift ;
  if ( $Safe::Hole::VERSION == 0.09 ) { return $this->call_09_fix(@_) ;}
  else {
    &$Safe_Hole_call($this , @_) ; ## Can't use $this->SUPER::call(), since we won't find Safe::Hole::call in the scope!
  }
}

###############
# CALL_09_FIX #
###############

sub call_09_fix {
  my $this = shift ;
  my $coderef = shift ;
  my @args = @_ ;
  
  my (@r,$did_not_die) ;
  my $wantarray = wantarray ;
  
  package Safe::Hole::User ;
  
  my $inner_call = sub {
                     eval {
                       @_ = @args;
                       if ( $wantarray ) { @r = &$coderef ;}
                       else { @r = scalar &$coderef ;}
                       $did_not_die = 1 ;
                     }
                   };
  
  Safe::Hole::_hole_call_sv($this->{STASH},undef, $inner_call) ;
  
  die $@ unless $did_not_die ;
  return $wantarray ? @r : $r[0] ;
}

sub DESTROY {}

#######
# END #
#######

1;

__END__

=head1 NAME

Safe::World::Hole - Front end interface to Safe::Hole/0.08 , Safe::Hole/0.09 and Safe::Hole/0.10+

=head1 NOTE

This module is here just to handle and fix Safe::Hole/0.09.
Other versions of Safe::Hole will work fine.

B<Do not use this directly. See L<Safe::Hole>.>

=cut