perl中if ( not defined $ARGV[1] )的含义解决方法
perl中if ( not defined $ARGV[1] )的含义
请问$ARGV[1]不是参数吗 这句话怎么理解呢 有什么必要这么写吗
初看别人的程序 还不太了解
所有程序如下
------解决方案--------------------
- Perl code
if ( not defined $ARGV[1] ) { $start = '20080101'; $end = '20200101'; } else { $start= $ARGV[0]; $end = $ARGV[1]; }
请问$ARGV[1]不是参数吗 这句话怎么理解呢 有什么必要这么写吗
初看别人的程序 还不太了解
所有程序如下
- Perl code
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; }
------解决方案--------------------
- Perl code
# 如果没有指定第二个参数,设置默认的开始日期和结束日期 # 有没有必要看怎么设计了,亦可以在没有结束日期的情况下(没有指定第二个参数)退出,给出提示 # 因为下面的必须有结束日期才可以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。