Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling

Comment on

( #3333=superdoc: print w/replies, xml ) Need Help??

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

In reply to Re: Redefine package subroutines by Melly
in thread Redefine package subroutines by Melly

Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":

  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.
  • Log In?

    What's my password?
    Create A New User
    and the web crawler heard nothing...

    How do I use this? | Other CB clients
    Other Users?
    Others avoiding work at the Monastery: (7)
    As of 2018-10-20 08:10 GMT
    Find Nodes?
      Voting Booth?
      When I need money for a bigger acquisition, I usually ...

      Results (112 votes). Check out past polls.

      • (Sep 10, 2018 at 22:53 UTC) Welcome new users!