perl isvaliddate function
Chris H
bsd-lists at bsdforge.com
Mon Oct 27 16:16:06 UTC 2014
On Sat, 25 Oct 2014 13:21:35 -0500 "B. Estrade" <estrabd at gmail.com> wrote
> On Sat, Oct 25, 2014 at 11:56 AM, Dan Langille <dan at langille.org> wrote:
>
> > I’m coding up a sanity check for FreshPorts. It will verify that field
> > that should be dates are dates.
> >
> > Feedback welcome. The system is already using the DATE module, so I’m
> > leveraging that.
> >
> > Pasted at http://dpaste.com/1H0Q8RR.txt but included below, because.
> >
> > $ cat test-date.pl
> > #!/usr/bin/perl
> >
> > use Date::Parse qw( str2time );
> >
> > sub IsValidDate($) {
> > my ($string) = @_;
> >
> > my $Date = str2time($string);
> >
> > return defined($Date);
> > }
> >
> > my $a = '2014-11-30 unless *coin ports remain unfixed';
> >
> > if (IsValidDate($a)) {
> > print "'$a' is a valid date\n";
> > } else {
> > print "'$a' is NOT a valid date\n";
> > }
> >
> > my $b = '2014-02-30';
> >
> > if (IsValidDate($b)) {
> > print "'$b' is a valid date\n";
> > } else {
> > print "'$b' is NOT a valid date\n";
> > }
> >
> > my $c = '2014-02-28';
> >
> > if (IsValidDate($c)) {
> > print "'$c' is a valid date\n";
> > } else {
> > print "'$c' is NOT a valid date\n";
> > }
> >
> >
> > $ perl test-date.pl
> > '2014-11-30 unless *coin ports remain unfixed' is NOT a valid date
> > '2014-02-30' is NOT a valid date
> > '2014-02-28' is a valid date
> > $
> >
> > —
> > Dan Langille
> >
> >
> Looks fine to just get it working. If you wanted to be more efficient, I
> believe there is a way to use the core POSIX::strfmtime in a way that would
> verify that the date you start with is the same date as the one returned
> after the format. This core function is also very useful for date addition
> and subtraction.
>
> I don't have time at this moment to create a proof of concept, but if
> you're interested let me know and I will when I have a minute.
>
> Cheers,
> Brett
>
I also felt inclined to recommend POSIX::strfmtime.
I also thought you might save some cycles modifying your conditional from:
if (IsValidDate($b)) {
print "'$b' is a valid date\n";
} else {
print "'$b' is NOT a valid date\n";
}
to:
unless (IsValidDate($b)) {
print "'$b' is NOT a valid date\n";
}
you could even introduce
my $ok = "Everything looks AOK";
at the beginning, and revise your whole script to close with
the $ok, unless any of the 'unless' s fired.
Just my 2¢. :)
--Chris
> _______________________________________________
> freebsd-hackers at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
More information about the freebsd-hackers
mailing list