Okay, I think I'm there, but I'd like to check I'm not doing anything dangerous, and I have one mystery...
Here's the code (I've included the contents of the FP files at the end).
use strict;
{
package FP;
sub foo{};
}
package GP;
{
sub subtest1{return 'Global Test 1';}
sub subtest2{return 'Global Test 2';}
}
package LP;
{
sub subtest1{return 'Local Test 1';}
}
{
package AP;
use base qw(FP LP GP);
}
#delete_FP(0);
my $FP = 'test1.lib';
require $FP;
print "test1.lib\n";
print GP::subtest1() . "\n"; # uses GP
print FP::subtest1() . "\n"; # use FP subs defined in test1.lib
print AP->subtest1() . "\n"; # as previous
print AP->subtest2() . "\n"; # uses GP as this sub only defined there
print AP->subtest3() . "\n"; # this sub won't exist in a moment...
delete_FP($FP);
$FP = 'test2.lib';
require $FP;
print "\ntest2.lib\n";
print FP::subtest1() . "\n"; # uses FP subs defined in test2.lib
print AP->subtest1() . "\n"; # as previous
print AP->subtest3() . "\n"; # this sub now doesn't exist...
sub delete_FP{
no strict 'refs';
my $class = 'FP';
my $symtab = $class . '::';
# Delete all symbols except other namespaces
for my $symbol (keys %{$symtab}) {
next if $symbol =~ /\A[^:]+::\z/;
delete $symtab->{$symbol};
}
delete $INC{$_[0]} if $_[0]; # in theory not nec. but tidier and all
+ows us to require the same lib again?
return 1;
}
__END__
#test1.lib file
use strict;
package FP;
sub subtest1{
return 'FP Test 1';
}
sub subtest3{
return 'FP Test 3';
}
1;
#test2.lib file
use strict;
package FP;
sub subtest1{
return 'FP Test 2';
}
1;
One mystery - there is a commented out call to delete_FP at line 24. If I don't comment this out, I get an error when I get to "print FP::subtest1()" on line 30, although the subsequent call to delete_FP seems to work fine - any ideas?
map{$a=1-$_/10;map{$d=$a;$e=$b=$_/20-2;map{($d,$e)=(2*$d*$e+$a,$e**2
-$d**2+$b);$c=$d**2+$e**2>4?$d=8:_}1..50;print$c}0..59;print$/}0..20
Tom Melly, pm (at) cursingmaggot (stop) co (stop) uk
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|