
package Trace;

sub new {
  my ($class, $obj) = @_;

  if (ref $class) {
    $AUTOLOAD = "Trace::new";
#    unshift @_, $class;
    goto &AUTOLOAD;
  }

#  my $obj = shift;
  bless { TARGET => $obj, TCLASS => ref($obj) } => $class;
}

sub AUTOLOAD {
  my ($class, $method) = $AUTOLOAD =~ /(.*)::(.*)/;
  my $self = shift;
  my $target = $self->{TARGET};

  my $subr = $target->can($method);
  return unless $subr;

  my $argstr = join ", ", @_;
  print STDOUT "$self->{TCLASS}\->$method($argstr) called on object $target\n";
#  unshift @_, $target;
#  goto &$subr;
  return $target->$method(@_);
  die;
}


1;
