perl中if ( not defined $ARGV[1] )的含义
if ( not defined $ARGV[1] ){ $start = '20080101'; $end = '20200101';}else{ $start= $ARGV[0]; $end = $ARGV[1];}
use strict;use warnings;use Time::Local;my $start;my $end;if ( not defined $ARGV[1] ){ $start = '20080101'; $end = '20200101';}else{ $start= $ARGV[0]; $end = $ARGV[1];}open my $DAY, ">","days.dat";my $day= $start;while ( $day < $end){ my $today = getSeconds($day); my $yesterday = ($today - 24*60*60 ); print $DAY transDate($yesterday).' '.transDate($today)."\n"; $day = transDate($today + 24*60*60);}sub getSeconds{ my $date = shift; $date = timelocal ( 0, 0, 0, substr($date,6,2), substr($date,4,2) - 1, substr($date,0,4) ); ##若第三个参数没有则一直到string尾部 return $date;}sub transDate{ my $date = shift; my ( $sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst ) = localtime( $date ); $mon = $mon +1; if ( length( $mon ) == 1 && $mon <10 ) { $mon = '0'.$mon; } if ( $mday < 10 ) { $mday = '0'.$mday; } return ($year + 1900).$mon.$mday;}
# 如果没有指定第二个参数,设置默认的开始日期和结束日期# 有没有必要看怎么设计了,亦可以在没有结束日期的情况下(没有指定第二个参数)退出,给出提示# 因为下面的必须有结束日期才可以while ($day < $end)if ( not defined $ARGV[1] ) { $start = '20080101'; $end = '20200101';# 如果指定了第二个参数,结束日期 和 开始日期 都是用输入的参数} else { $start= $ARGV[0]; $end = $ARGV[1];}
[解决办法]
$ARGV[0]
$ARGV[1]
两个锚点文件,
依据它们处理源文件后会生成两个数据文件
[解决办法]
@ARGV里面存放的是从外部传进来的参数,$ARGV[1]就是第二个参数,如果没有第二个参数,也就是 "not defined $ARGV[1]"。
另外,你open文件写入后,没有close。