You make a lovely teddy bear

David Cantrell david at
Thu Mar 27 16:37:35 GMT 2014

I've been hunting down a really weird bug since yesterday morning.

I have a little utility method 'throw' that is basically a wrapper
around 'die', except that if you supply random text instead of an
exception object it reifies it, and that it also uses Devel::StackTrace
to stuff a stacktrace in to it as well.

I was getting errors about how Devel::StackTrace was trying to call a
method 'blessed' on an unblessed reference at line 80:

The 'blessed' function is quite clearly imported at the top of the file.
And then when I started splattering prints to STDERR and Data::Dumper
all over my code that just moaned about Dumper not existing and I got
very confused. So I started writing this to you all:

> I have this in a function (yeah yeah, obviously the 'use' happens at
> compile-time):
>   use Data::Dumper;local $Data::Dumper::Indent=1;
>   print STDERR Dumper(\@_);
> and I get out ...
>   Undefined subroutine &My::Module::Dumper called at ...
> But it DTRT if I call Data::Dumper::Dumper.
> What on earth could I have done that would prevent Data::Dumper's
> import() method from working?

Naturally, when whining at other people to do my homework for me I
wanted to reduce the problem to the smallest possible example. And in
doing so I found this, in the import() method of the module that was
loading my module:

  sub import {
      [page of weirdness]

  --> local $Exporter::ExportLevel = 1; <--

      [page of weirdness]

      require My::Module;
Naturally, the loopy-juice that messes with Exporter's guts is still in
effect later on - it has been insufficiently local()ized.

So I'd like to thank you all for being my teddy bear:

David Cantrell | Enforcer, South London Linguistic Massive

    Planckton: n, the smallest possible living thing

More information about the mailing list