in reply to DWIM: autoloading classes
---package StupidAutoloader; use strict; use warnings; use Carp; our %Classes; sub import { my $class = shift; my @hierarchies = @_; %Classes = map {($_, undef)} @hierarchies; *UNIVERSAL::new = sub { my $proto = $_[0]; my $class = ref($proto) || $proto; croak "Could not find method new() in package '$class'." if ref($proto) or exists $INC{$class} or not in_hierarchy(\%Classes, $class); eval "use $class;"; croak "Error loading module '$class': $@" if $@; no strict 'refs'; goto &{"${class}::new"}; }; } sub in_hierarchy { my $h = shift; my $c = shift; return 1 if exists $h->{$c}; my @levels = split /::/, $c; my $accum; foreach (@levels) { $accum .= $_; return 1 if exists $h->{"${accum}::*"} } return 0; } 1;
#!/usr/bin/perl use strict; use warnings; use StupidAutoloader 'Data::*'; my $d = Data::Dumper->new([]); print "$d\n"; my $g = Data::Grouper->new(a => []); print "$g\n";
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: DWIM: autoloading classes
by Ovid (Cardinal) on Sep 17, 2003 at 14:17 UTC | |
by tsee (Curate) on Sep 17, 2003 at 23:14 UTC |