use strict; use warnings; use Test::More; use DateTime::Format::Builder; SKIP: { my @three = map { "DateTime::Format::$_" } qw( HTTP Mail IBeat ); my @fails; for my $mod (@three) { eval "require $mod"; push @fails, $mod if $@; } skip "@fails not installed.", 3 if @fails; eval qq|package DateTime::Format::Fall;| . join( "", map { "use $_;\n" } @three ) . q| use DateTime::Format::Builder ( parsers => { parse_datetime => [ | . join( "", map { qq|sub { eval { $_->parse_datetime( \$_[1] ) } },\n| } @three ) . q| ]}); 1; |; die $@ if $@; my $get = sub { eval { DateTime::Format::Fall->parse_datetime( $_[0] ) ->set_time_zone('UTC')->datetime; }; }; for ( '@d19.07.03 @704', '20030719T155345Z' ) { my $dt = $get->($_); is $dt, "2003-07-19T15:53:45", "Can parse [$_]"; } for ('gibberish') { my $dt = $get->($_); ok( !defined $dt, "Shouldn't parse [$_]" ); } } done_testing();