perl 中@arr 内未初始化值的使用

itr*_*tro 1 perl

我有一个 Perl 脚本,它读取一个包含我的 SQL 文件的目录。

然后迭代这个数组并删除其中一个并将它们打印出来。

@sqlArray = glob('C:/Users/Geeks/Folder/*.sql');

print Dumper(@sqlArray );

if( $company ne 'Geeks'){
  my $index = 0;
  my $count = scalar @sqlArray ;
  $index++ until $sqlArray [$index] eq 'factura.sql' or $index==$count;
  splice(@sqlArray , $index, 1);
}

print Dumper(@sqlArray );
Run Code Online (Sandbox Code Playgroud)

我收到以下错误,我不知道它是怎么来的以及如何修复它?

Use of uninitialized value within @sqlArray in string eq at /.../software/Queries.pl line 97.
Run Code Online (Sandbox Code Playgroud)

欢迎任何想法,并提前致谢。

ike*_*ami 6

问题是您访问了数组末尾之外的一个元素。该数组的scalar(@sqlArray)元素编号从0to @sqlArray-1(又名$#sqlArray),但您可以进一步访问。


当您想从数组中删除元素时,请考虑grep.

@sqlArray = grep { $_ ne 'factura.sql' } @sqlArray
   if $company ne 'Geeks';
Run Code Online (Sandbox Code Playgroud)