perl中if ( not defined $ARGV[1] )的含义解决方法

perl中if ( not defined $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。