package Iotta; use strict; use Carp; our $AUTOLOAD; #sub ieval { # my $self = shift; # my $expr = shift; # return eval "$expr"; #} sub new { my $self = {}; my $proto = shift; my $class = ref ($proto) || $proto; $self->{type}=""; #$self->{_public} = bless $self, $class; $self->initialize (@_); return $self; } sub initialize { } sub DESTROY { } sub AUTOLOAD { my $self = shift; my $type = ref ($self); my $name = $AUTOLOAD; my $ex = 0; my $priv = 1; my $err; $name =~ s/.*://; $ex = exists $self->{$name}; $priv = $name eq "priv"; if (!$ex || $priv) { $err = "cannot access nonexistent object member: $type->$name" unless $ex; $err = "cannot access private object member: $type->$name" if $priv; print STDERR "error: $err\n"; my $i = 0; while ($i < 128) { my @bt = caller ($i); my $bt = join (" - ", @bt); print STDERR "$bt\n" if $bt; $i ++; } die "Fatal error"; } if (@_) { return $self->{$name} = shift; } else { return $self->{$name}; } } sub main { } 1;