in reply to Reloading modules- suppressing warnings works sometimes?
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 Section
Seekers of Perl Wisdom