Perl数组在循环外获取值

时间:2014-06-04 04:43:14

标签: perl

我创建了一个脚本,其中我将现有记录存储在一个数组中,然后将记录与最新文件记录进行比较,如果存在则从数组中删除记录。 现在我可以比较和打印我的记录但是当我试图调试/打印剩余的列表时。一旦所有循环都关闭,它就像需要全局语法一样抛出错误。这意味着脚本无法读取阵列外部数组中存在的剩余列表。

例如: 我有100条记录,我把它放在一个数组中。现在,当新的记录进程时,它将查看数组中的值是否匹配,它将从数组中删除记录。因此,最后记录匹配的内容将被删除,remaining_record数组将保留在新记录文件中不存在的那些记录中。

if ( grep { $new_record eq  $Current_record } @array ) {
  DEBUG( "DEBUG: record found in existing array" );
  my @remaining_record = splice(@array, $new_record, 1);
}

现在,当我尝试在脚本结束时调试剩余记录时,脚本正在寻找全局变量并且看起来是空的。

my @remaining_record;
my $size = @remaining_record;
for ($n=0; $n < $size; $n++) {
    DEBUG( "DEBUG: Remaining records $remaining_record[$n][0]" );
}

1 个答案:

答案 0 :(得分:1)

my @remaining_record;
my $size = @remaining_record;

my移除@remaining_record;,否则会创建名为@remaining_record的新空数组。

或者将旧数组的剩余数据分配给remaining_record,如

my @remaining_record = @array_with_remaining_data;

修改您的程序,如下所示。

my @remaining_record;
if ( grep { $new_record eq  $Current_record } @array ) {
  DEBUG( "DEBUG: record found in existing array" );
  @remaining_record = splice(@array, $new_record, 1);
}

my $size = @remaining_record;
for (my $n=0; $n < $size; $n++) {
    print "DEBUG: Remaining records $remaining_record[$n]";
}