What if you delete the %INC entry (delete $INC{'Blah/Blah.pm'} for removing Blah::Blah) before the second require ... In my experiments (*), that allows me to have the require work again:
./lib/Blah/Blah.pm:
package Blah::Blah;
use 5.012; # strict, //
use warnings;
$| = 1;
print "Loading Blah::Blah at " . scalar(localtime) . "\n";
1;
./example.pl:
#!perl
use 5.012; # strict, //
use warnings;
use lib './lib';
$| = 1;
require Blah::Blah;
print "example separator\n";
delete $INC{'Blah/Blah.pm'};
print "entry deleted\n";
sleep(2);
require Blah::Blah;
print "example separator\n";
output:
Loading Blah::Blah at Thu Apr 7 06:17:19 2022
example separator
entry deleted
Loading Blah::Blah at Thu Apr 7 06:17:21 2022
example separator
Edit: add footnote: *: well, at the command line; I admit I didn't try in a pp executable |