On Feb 28, 2:22 am, [EMAIL PROTECTED] (Myf White) wrote: > Hi everyone, > > I think my question relates to STDOUT rather than Time::Piece but I'm not > sure. > > I am trying to use Time::Piece to process and convert a string which may be > a bit dodgy. What I can't understand is how to capture the problem. The > following code only captures the problem with the second test in the > $EVAL_ERROR ($@). The problem with the first one ("garbage at end of string > in strptime: ...") just goes to the screen - but I need to be able to handle > it. > > This is a snippet of code to show what I mean: > > # # # # # # # > #!/usr/bin/perl > use strict; > use warnings; > > use Time::Piece; > > my @tests = ( '28 FEB 2008 stuff at the end to see what Time::Piece does', > 'blah 28 FEB 2008' ); > my $format = '%d %h %Y'; > > foreach my $i ( 0..$#tests ) { > print "\nTEST $i\n"; > eval { > my $date_object= Time::Piece->strptime($tests[$i], $format); > print $date_object->dmy("/") . "\n"; > }; > if ($@) { > print "eval error: $@"; > }} > > # # # # # # # > > The output from running this is: > > $ perl test.pl > > TEST 0 > garbage at end of string in strptime: stuff at the end to see what > Time::Piece does at C:/Perl/site/lib/Time/Piece.pm line 470. > 28/02/2008 > > TEST 1 > eval error: Error parsing time at C:/Perl/site/lib/Time/Piece.pm line 470. > $
Looks to me like Time::Piece is just printing a warning rather than die()ing on that particular error. I'd suggest simply turning warnings into errors for the duration of your eval{ }: eval { local $SIG{__WARN__} = sub { die @_ }; my $date_object= Time::Piece->strptime($tests[$i], $format); print $date_object->dmy("/") . "\n"; }; Paul Lalli -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/