The following program fails:
use v5.36;
use IO::Compress::Zip qw();
use IO::Compress::Gzip qw();
use IO::Compress::Zip qw( :all );
say "ok";
"gzip" is not exported by the IO::Compress::Zip module
"$GzipError" is not exported by the IO::Compress::Zip module
Can't continue after import errors at a.pl line 4.
BEGIN failed--compilation aborted at a.pl line 4.
It fails because IO::Compress::Gzip accidentally modifies the $EXPORT_TAGS{all}->@* of other modules.
The fix is simple. Replace
%EXPORT_TAGS = %IO::Compress::RawDeflate::DEFLATE_CONSTANTS ;
push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ;
with
%EXPORT_TAGS = %IO::Compress::RawDeflate::DEFLATE_CONSTANTS ;
$EXPORT_TAGS{all} = [ @{ $EXPORT_TAGS{all} }, @EXPORT_OK ] ;
This replaces a shallow copy of the %EXPORTS_TAGS with a deeper one.
This bug was first reported on StackOverflow.