>>>>> "RM" == Rick Measham <[EMAIL PROTECTED]> writes:
>> DateTime-TimeZone-0.2503/Build.PL + 'DateTime' => 0, RM> If you do that, then you can't install it :) DateTime requires RM> that DateTime::TimeZone be installed before it will RM> install. So if you make DateTime::TimeZone require that RM> DateTime be installed, then neither can install. Ouch! Ok, this could be fixed by more documentation and clearer diagnostics. >> DateTime-TimeZone-0.2503/lib/DateTime/TimeZone.pm + die >> "Invalid time zone name: $p{name}\n$@" if $@; RM> This is a good suggestion, but returning $@ doesn't happen in RM> many (any?) (IIRC) other places in DateTime. Personally I'd RM> like to get back confess() rather than die .. then you know RM> where it went wrong. Here $@ is set by eval. There should not be more "other places". Replacing `die' with `confess' is orthogonal here. I guess most times the problem will be in missing DateTime.pm module. So that should be diagnosed clearly. You can check for more exact contents of $@: my $module_name = "Foo::Bar::Baz"; eval "require $module_name;"; if ($@){ # Foo::Bar::Baz ==> Foo/Bar/Baz.pm (my $module_filename = $module_name) =~ s,::,/,g; $module_filename .= ".pm"; if ($@ =~ /^Can't locate \Q$module_filename\E/)) { # the constructed module itself not found die "Timezone '$timezone_name' not found or invalid"; } else { # missing DateTime.pm, or typo in module, or something else die; # propagating $@ } } I use dynamically-constructed module names a lot, and always use this technology. RM> DateTime-TimeZone-0.2503/lib/DateTime/TimeZone.pm SYNOPSIS >> + use DateTime; + my $datetime = DateTime->now(); + my $offset >> = $tz->offset_for_datetime($datetime); RM> Rather than this, maybe we need to add a note to all modules RM> to signify that $datetime and $dt refer to DateTime.pm RM> objects. That's ok, but _something_ should be said about $datetime. I passed time() at first, and was surprised to see the diagnostics. Thanks, --alexm