#!/usr/bin/perl
my
$outputProc
;
&ChoreOpt
;
&MainCore
;
exit
0 ;
sub
ChoreOpt {
$o
{
','
} //=
"\t"
;
$o
{
'+'
} //= 0 ;
$o
{s} //=
'%Y-%m-%d'
;
$o
{u} //=
'undef'
;
$outputProc
=
$o
{i} ?
$o
{
'~'
} ?
sub
($$@) {
&numdiff
(
$_
[1] ,
$_
[0]) ,
@_
[4 ..
$#_
] } :
sub
($$@) {
&numdiff
(
$_
[0] ,
$_
[1]) ,
@_
[4 ..
$#_
] } :
$o
{a} ?
$o
{
'~'
} ?
sub
($$@) {
&numdiff
(
$_
[1] ,
$_
[0]) ,
@_
[2 ..
$#_
] } :
sub
($$@) {
&numdiff
(
$_
[0] ,
$_
[1]) ,
@_
[2 ..
$#_
] } :
$o
{
'~'
} ?
sub
($$@) {
&numdiff
(
$_
[1] ,
$_
[0]) } :
sub
($$@) {
&numdiff
(
$_
[0] ,
$_
[1]) } ;
}
sub
MainCore {
while
( <> ) {
chomp
;
my
@F
=
split
/
$o
{
','
}/ ,
$_
, 3 ;
my
$D1
=
&DsYe2014
(
$F
[0] ) ;
my
$D2
=
&DsYe2014
(
$F
[1] ) ;
my
@res
=
$outputProc
-> (
$D1
,
$D2
,
@F
) ;
print
join
(
$o
{
','
} ,
@res
) ,
"\n"
;
}
}
sub
DsYe2014 ($) {
state
$mem
;
return
$mem
-> {
$_
[0] }
if
exists
$mem
-> {
$_
[0] } ;
state
$d0
= Time::Piece -> strptime (
"2014-12-31"
,
"%Y-%m-%d"
) ;
my
$d1
=
eval
{ Time::Piece -> strptime (
$_
[0] ,
$o
{s} ) } ;
$mem
-> {
$_
[0] } =
defined
$d1
? (
$d1
-
$d0
) / 86400 :
undef
;
}
sub
numdiff ( $$ ) {
defined
$_
[0] &&
defined
$_
[1] ?
$_
[0] -
$_
[1] +
$o
{
'+'
} :
$o
{u} }
sub
VERSION_MESSAGE {}
sub
HELP_MESSAGE {
$0 =~ s|.*/|| ;
$ARGV
[1] //=
''
;
while
( <DATA> ) {
s/\$0/$0/g ;
print
$_
if
$ARGV
[1] =~ /opt/ ? m/^\ +\-/ : s/^=head1(.*)\n/$1/ .. s/^=cut(.*)\n/$1/ ;
}
exit
0 ;
}