X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FRoute%2FUser.pm;fp=perl%2FRoute%2FUser.pm;h=eb9958dcff28999b25e3023f596a174aa643396f;hb=942cdc8c6434db4e2cf77b43ec26c0059768f853;hp=b9862e6de5f0b847a627a4af0279e2043cc85660;hpb=a98580704baeea87e9fcfe84838bd9bc2a28e57d;p=spider.git diff --git a/perl/Route/User.pm b/perl/Route/User.pm index b9862e6d..eb9958dc 100644 --- a/perl/Route/User.pm +++ b/perl/Route/User.pm @@ -49,16 +49,23 @@ sub new my $call = uc shift; my $ncall = uc shift; my $flags = shift; - confess "already have $call in $pkg" if $list{$call}; my $self = $pkg->SUPER::new($call); $self->{parent} = [ $ncall ]; $self->{flags} = $flags; - $list{$call} = $self; return $self; } +sub register +{ + my $self = shift; + + confess "already have $call in $pkg" if $list{$self->{call}}; + + $list{$call} = $self; +} + sub get_all { return values %list; @@ -104,17 +111,16 @@ sub delparent sub AUTOLOAD { no strict; - my ($pkg,$name) = $AUTOLOAD =~ /^(.*)::(\w+)$/; - return if $name eq 'DESTROY'; + + my $self = shift; + $name = $AUTOLOAD; + return if $name =~ /::DESTROY$/; + $name =~ s/.*:://o; confess "Non-existant field '$AUTOLOAD'" unless $valid{$name} || $Route::valid{$name}; - # this clever line of code creates a subroutine which takes over from autoload - # from OO Perl - Conway - *$AUTOLOAD = sub {$_[0]->{$name} = $_[1] if @_ > 1; return $_[0]->{$name}}; - goto &$AUTOLOAD; -# *{"${pkg}::$name"} = sub {$_[0]->{$name} = $_[1] if @_ > 1; return $_[0]->{$name}}; -# goto &{"${pkg}::$name"}; + *$AUTOLOAD = sub {@_ > 1 ? $_[0]->{$name} = $_[1] : $_[0]->{$name}}; + &$AUTOLOAD($self, @_); } 1;