houseabsolute / DateTime-TimeZone

Time zone object base class and factory
https://metacpan.org/release/DateTime-TimeZone/
Other
9 stars 25 forks source link

Misleading diagnostic during constructor eval #16

Open autarch opened 7 years ago

autarch commented 7 years ago

Migrated from rt.cpan.org #98588 (status was 'stalled')

Requestors:

From gmarler@bloomberg.net on 2014-09-03 15:02:22:

I noticed this when I missed one of the dependencies (List::AllUtils) that was added in v1.71, at which point all attempts to create a DateTime::TimeZone object failed with this message:

'Cannot determine local time zone'

Turns out this message is seriously misleading.

Tracing through the debugger, I came across this eval, which in v1.74 is located at line 74 of lib/DateTime/TimeZone.pm:

    my $e = do {
        local $@;
        local $SIG{__DIE__};
        eval "require $real_class";
        $@;
    };

If the class being require'ed isn't available, you should get the actual message returned, like so:

Can't locate List::AllUtils in @INC ...

But you don't. Fixing this would probably eliminate a lot of confusing bug reports against this module.

autarch commented 7 years ago

From drolsky@cpan.org (@autarch) on 2014-09-13 19:56:07:

On Wed Sep 03 11:02:22 2014, gmarler@bloomberg.net wrote:

I noticed this when I missed one of the dependencies (List::AllUtils) that was added in v1.71, at which point all attempts to create a DateTime::TimeZone object failed with this message:

'Cannot determine local time zone'

Turns out this message is seriously misleading.

Tracing through the debugger, I came across this eval, which in v1.74 is located at line 74 of lib/DateTime/TimeZone.pm:

my $e = do { local $@; local $SIG{DIE}; eval "require $real_class"; $@; };

If the class being require'ed isn't available, you should get the actual message returned, like so:

Can't locate List::AllUtils in @INC ...

But you don't. Fixing this would probably eliminate a lot of confusing bug reports against this module.

That's the message I get. I'm using Perl 5.10.1 & 5.16.3, so either this is a problem with your version of Perl or something else is going on.

Can you come up with a test to replicate this bug?

autarch commented 7 years ago

From gmarler@bloomberg.net on 2014-09-13 20:58:42:

I got it with 5.18.1. not quite sure how I would test for that, but I'll give it some thought.


Sent from Bloomberg Professional for Android

----- Original Message ----- From: Dave Rolsky via RT bug-DateTime-TimeZone@rt.cpan.org At: Saturday, September 13, 2014 15:56

<URL: https://rt.cpan.org/Ticket/Display.html?id=98588 >

On Wed Sep 03 11:02:22 2014, gmarler@bloomberg.net wrote:

I noticed this when I missed one of the dependencies (List::AllUtils) that was added in v1.71, at which point all attempts to create a DateTime::TimeZone object failed with this message:

'Cannot determine local time zone'

Turns out this message is seriously misleading.

Tracing through the debugger, I came across this eval, which in v1.74 is located at line 74 of lib/DateTime/TimeZone.pm:

my $e = do { local $@; local $SIG{DIE}; eval "require $real_class"; $@; };

If the class being require'ed isn't available, you should get the actual message returned, like so:

Can't locate List::AllUtils in @INC ...

But you don't. Fixing this would probably eliminate a lot of confusing bug reports against this module.

That's the message I get. I'm using Perl 5.10.1 & 5.16.3, so either this is a problem with your version of Perl or something else is going on.

Can you come up with a test to replicate this bug?