our @days = qw(Sun Mon Tue Wed Thu Fri Sat);
-sub regexp {
+sub regexp ($;$) {
my $self = shift;
my $delim = qr/:?\:|\/|-/; # "non memory" cluster: no backreference
my $format = (@_) ? _recognize_format(shift) : ( $self->{'dateformat'} || _prefformat() );
return qr/^(\d{1,2})$delim(\d{1,2})$delim(\d{4})(?:\s{1}(\d{1,2})\:?(\d{1,2})\:?(\d{1,2}))?/; # everything else
}
-sub dmy_map {
+sub dmy_map ($$) {
my $self = shift;
- my $val = shift or return;
- my $dformat = $self->{'dateformat'} or return;
+ my $val = shift or return undef;
+ my $dformat = $self->{'dateformat'} or return undef;
my $re = $self->regexp();
my $xsub = $dmy_subs{$dformat};
$debug and print STDERR "xsub: $xsub \n";
if ( $val =~ /$re/ ) {
- my $aref = eval {$xsub};
+ my $aref = eval $xsub;
if ($dformat eq 'rfc822') {
$aref = _abbr_to_numeric($aref, $dformat);
pop(@{$aref}); #pop off tz offset because we are not setup to handle tz conversions just yet
sub _abbr_to_numeric {
my $aref = shift;
my $dformat = shift;
-
- my ($month_abbr, $day_abbr); # keep perlcritic happy ;)
- ($month_abbr, $day_abbr) = ($aref->[4], $aref->[3]) if $dformat eq 'rfc822';
+ my ($month_abbr, $day_abbr) = ($aref->[4], $aref->[3]) if $dformat eq 'rfc822';
for( my $i = 0; $i < scalar(@months); $i++ ) {
if ( $months[$i] =~ /$month_abbr/ ) {
return $self->init(@_);
}
-sub init {
+sub init ($;$$) {
my $self = shift;
my $dformat;
$self->{'dateformat'} = $dformat = ( scalar(@_) >= 2 ) ? $_[1] : _prefformat();
return $self;
}
-sub output {
+sub output ($;$) {
my $self = shift;
my $newformat = (@_) ? _recognize_format(shift) : _prefformat();
return ( eval { POSIX::strftime( $posix_map{$newformat}, @{ $self->{'dmy_arrayref'} } ) } || undef );
}
-sub today { # NOTE: sets date value to today (and returns it in the requested or current format)
+sub today ($;$) { # NOTE: sets date value to today (and returns it in the requested or current format)
my $class = shift;
$class = ref($class) || $class;
my $format = (@_) ? _recognize_format(shift) : _prefformat();
return $class->new()->output($format);
}
-sub _recognize_format {
+sub _recognize_format($) {
my $incoming = shift;
( $incoming eq 'syspref' ) and return _prefformat();
( scalar grep ( /^$incoming$/, keys %format_map ) == 1 ) or croak "The format you asked for ('$incoming') is unrecognized.";
return $incoming;
}
-sub DHTMLcalendar { # interface to posix_map
+sub DHTMLcalendar ($;$) { # interface to posix_map
my $class = shift;
my $format = (@_) ? shift : _prefformat();
return $posix_map{$format};
With no argument, format returns the object's current date_format. Otherwise it attempts to
set the object format to the supplied value.
-Some previously desireable functions are now unnecessary. For example, you might want a
+Some previously desirable functions are now unnecessary. For example, you might want a
method/function to tell you whether or not a Dates.pm object is of the 'iso' type. But you
can see by this example that such a test is trivial to accomplish, and not necessary to
include in the module:
Perhaps you want to force data obtained in a known format to display according to the user's system
preference, without necessarily knowing what that preference is. For this purpose, you can use the
-psuedo-format argument "syspref".
+pseudo-format argument "syspref".
For example, to print an ISO date (from the database) in the <systempreference> format: