在join或string中使用未初始化的值

时间:2013-03-20 18:50:47

标签: perl

use strict;
use warnings;
my $dir = "/";
my @old = `ls -1rtA $dir`;
#print @old;
my #variable declaration
while(1){
        $oldlen = scalar @old;
        @new = `ls -1rtA $dir`;
        print @new;
        $newlen = scalar @new;
        if(@old ~~ @new)
        {

        }
        else
        {
            $diff=$oldlen+1;
            print "$diff \n";
            print "$list \n";
            #print "@new[$list] \n";
            #$op=$new[$list];
            print "$newlen \n";
            #pop @core,$op;
            print "@new[$diff..$newlen]";
            print @core;
        }
}

我收到以下错误:

print "@new[$diff..$newlen]";

的联接或字符串中使用未初始化的值

导致此问题的原因是什么?

错误是什么意思?

1 个答案:

答案 0 :(得分:2)

您已将$newlen设置为数组@new中的元素数,然后尝试访问$new[$newlen]@new的元素位于0$newlen - 1的索引处,因此$new[$newlen]超出了数组的末尾。您收到警告,因为此评估结果为undef且未初始化。

切片的起始索引存在同样的问题,应该读取

print "@new[$oldlen..$newlen-1]"