Package: libdatetime-locale-perl Version: 1:1.17-1 Severity: normal Hi,
When loading a DateTime / DateTime::Locale object which was previously serialized using Storable, DateTime::Locale::FromData::STORABLE_thaw fails if the code loading the Storable object does not import DateTime::Locale. To reproduce: > perl -MStorable -MDateTime::Locale -E 'my $loc = > DateTime::Locale->load("en-GB"); store(\$loc, "/tmp/whatever.db")'; > perl -MStorable -E 'my $loc_ref = retrieve("/tmp/whatever.db"); say > $$loc_ref->{code}' Expected behaviour: The second line outputs "en-GB" Actual behaviour: STORABLE_thaw throws an error: > Can't locate object method "load" via package "DateTime::Locale" at > /usr/share/perl5/DateTime/Locale/FromData.pm line 262 Workaround: Import DateTime or DateTime::Locale, e.g. > perl -MStorable -MDateTime::Locale -E 'my $loc = > DateTime::Locale->load("en-GB"); store(\$loc, "/tmp/whatever.db")'; > perl -MStorable -MDateTime::Locale -E 'my $loc_ref = > retrieve("/tmp/whatever.db"); say $$loc_ref->{code}' As far as I know, users should not be required to import DateTime::Locale when deserializing an object containing locales, so this looks like a bug to me. It can be fixed by importing the module in DateTime/Locale/FromData.pm: > diff --git a/lib/DateTime/Locale/FromData.pm b/lib/DateTime/Locale/FromData.pm > index fd9ab78a..7e6cd622 100644 > --- a/lib/DateTime/Locale/FromData.pm > +++ b/lib/DateTime/Locale/FromData.pm > @@ -4,6 +4,7 @@ use strict; > use warnings; > use namespace::autoclean; > > +use DateTime::Locale; > use DateTime::Locale::Util qw( parse_locale_code ); > use Params::ValidationCompiler 0.13 qw( validation_for ); > use Specio::Declare; Thank you for your work, Daniel -- System Information: Debian Release: buster/sid APT prefers unstable APT policy: (500, 'unstable') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 4.15.0-2-amd64 (SMP w/4 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US:en (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages libdatetime-locale-perl depends on: ii libfile-sharedir-perl 1.104-1 ii libnamespace-autoclean-perl 0.28-1 ii libparams-validationcompiler-perl 0.27-1 ii libspecio-perl 0.42-1 ii perl 5.26.1-5 ii perl-base [libscalar-list-utils-perl] 5.26.1-5 libdatetime-locale-perl recommends no packages. libdatetime-locale-perl suggests no packages. -- no debconf information