I'm cleaning up code and removed the now deprecated Forecast::IO
module from my Perl script. When I did, I started getting this error:
[root@server cgi-bin]# perl Weather.pm
Undefined subroutine &B::perlstring called at /usr/local/share/perl5/Params/ValidationCompiler/Compiler.pm line 248.
Compilation failed in require at /usr/local/lib64/perl5/DateTime.pm line 13.
BEGIN failed--compilation aborted at /usr/local/lib64/perl5/DateTime.pm line 13.
Compilation failed in require at Weather.pm line 1340.
BEGIN failed--compilation aborted at Weather.pm line 1340.
Line 1340 where the error occurs is innocuously enough, use DateTime;
.
I wasn't sure what DateTime
could be up to that would cause it to be upset I wasn't using the unrelated Forecast::IO
module any longer, so I started taking apart the latter module to figure out what code was preventing the error. The essential part seems to be that Moo
is included in Forecast::IO
and it has at least one Moo has
declaration:
package Forecast::IO;
use Moo;
has testkey => ( is => 'ro' );
1;
For some reason, if that module with at least those lines exists, DateTime loads fine. Otherwise, the error I mentioned above occurs, choking on DateTime's line 13, use Carp;
. Even if I put use Moo; has testkey => ( is => 'ro' );
into my own module, it fails upon use DateTime
.
Even though I've used grep -r Forecast::IO
to traverse the codebase to look for some errant reference and come up empty. So, I decided to try to just load the DateTime module: perl -MDateTime
. That too produces the error:
[root@server cgi-bin]# perl -MDateTime
Undefined subroutine &B::perlstring called at /usr/local/share/perl5/Params/ValidationCompiler/Compiler.pm line 248.
Compilation failed in require at /usr/local/lib64/perl5/DateTime.pm line 13.
BEGIN failed--compilation aborted at /usr/local/lib64/perl5/DateTime.pm line 13.
Compilation failed in require.
BEGIN failed--compilation aborted.