Much fun was spent today tracking down a mysterious bug. I even had fun shoving a coderef into @INC to find out what was loading the errant module. I've now reproduced a minimal test case. Once I put it together, the bug was clear, but before that, there were many red herrings. Here's a minimal test case.
package Package1;
use base 'Exporter';
our @EXPORT_OK = qw/this that/;
our %EXPORT_TAGS = ( all => [qw/this that/], );
sub this { 'this' }
sub that { 'that' }
1;
And another package:
package Package2;
use base 'Exporter';
use Package1 ':all';
our @EXPORT_OK = ( @Package1::EXPORT_OK, 'foobar' );
our %EXPORT_TAGS = %Package1::EXPORT_TAGS;
push @{ $EXPORT_TAGS{all} } => 'foobar';
sub foobar { 'foobar' }
1;
Do you see the bug? That was very, very annoying, but fortunately the fix is easy. If you see the bug, post it as a spoiler.