Hello Bart, well - your solution is of course very compact. I like it, really. But on the other hand it is not very robust.
Just think of three files ### file t1.pm package t1; require "t2.pm"; 1; ### file t2.pm package t2; require "t3.pm"; 1; ### file t3.pm package t3; use Socket; print "finally we're in package t3\n"; 1; ### end Drop t1.pm onto runtime builder and you get no output from the preceding solutions. You have to care for paths within the resulting %MyINC. e.g.: AutoLoader.pm => Festplatte:Projekte:MacPerl5.6.1b1:lib:AutoLoader.pm Festplatte:Projekte:MacPerl5.6.1b1:lib:auto:DynaLoader:dl_findfile.al => Festplatte:Projekte:MacPerl5.6.1b1:lib:auto:DynaLoader:dl_findfile.al Just searching for /^\s*(use|require)\b.*;/ in every module and eval it doesn't help in cases like use module qw( foo bar ); # a comment about use of blah require "a-module.pm" if $value; That's the reason for the effort I invested. MacJPerl has additional requirements. Then think of required modules which use their own AutoLoader modules. Reality is quite complicated. Keitarou wrote a nice module Mac::ResFork for clean adding of ResForks. This is handy too. Plus I want to finish this little project soon even or because I fear the dimishing general interest in MacPerl ... Best regards, Axel. Um 0:33 Uhr +0100 02.11.2001, schrieb Bart Lateur: >That's pretty much how I did it , too. However: my stuff is pretty >compact. I wonder if you haven't worked much too hard. ;-) > >Here's it all, the whole BEGIN block, replacing the one that was there. > >BEGIN { > exit unless @ARGV; > > #suppress warnings about redefining subroutines > #by 'eval(use...)': > local $^W; > > print "Checking for imported modules...\n"; ># START OF BART'S MODIFICATIONS > my @modules = $ARGV[0]; > my %inc; > while(my $source = shift @modules) { > open FILE, $source or die "Couldn't open file $source: $!"; > while (<FILE>) { > if(/^\s*(use|require)\b.*;/){ > eval($_); #read the %INC > } > } > close FILE; > foreach my $path (values %INC) { > $inc{$path}++ or push @modules, $path; > } > } ># END OF BART'S MODIFICATIONS > %MyINC = %INC; > @dynaLoaderModules = @DynaLoader::dl_modules; >}