And, as you'll see soon enough, foo.pm reloads without any complaints, time and time again.
Not on my system it doesn't. The issue is that you effectively have:
{ # one scope no warnings; # but the eval generates an inner scope { # where this over-rides the outer scope no warnings # or $^W = 0 - the inner scope reigns supreme. use warnings; } }
This will remove the warnings from the reload.pm reloading itself but as noted this does not fix bar.
#!/usr/bin/perl use strict; use warnings; use reload; do { print "Hit Enter.\n"; reload::reload("foo"); foo::bar(); reload::reload("reload"); } while <STDIN>; package reload; use warnings; use strict; { no warnings; sub reload { my ($PM) = @_; delete $INC{"$PM.pm"}; eval "require $PM"; } } 1; package foo; use strict; use warnings; sub bar { print "Works\n" } 1; __DATA__ C:\>perl test.pl Hit Enter. Works Hit Enter. Subroutine bar redefined at foo.pm line 4, <STDIN> line 1. Works Hit Enter. Subroutine bar redefined at foo.pm line 4, <STDIN> line 2. Works Hit Enter. Subroutine bar redefined at foo.pm line 4, <STDIN> line 3. Works Hit Enter. Subroutine bar redefined at foo.pm line 4, <STDIN> line 4. Works Hit Enter. Subroutine bar redefined at foo.pm line 4, <STDIN> line 5. Works ^C C:\>
cheers
tachyon
In reply to Re: Reloading modules- suppressing warnings works sometimes?
by tachyon
in thread Reloading modules- suppressing warnings works sometimes?
by JPaul
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |