【问题标题】:Perl array get value outside loopPerl数组在循环外获取值
【发布时间】:2014-06-04 12:57:46
【问题描述】:

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

例如: 我有 100 条记录放在一个数组中。现在,当新记录处理时,它将查看数组中的值是否匹配,它将从数组中删除记录。因此,最后匹配的记录将被删除,剩余记录数组将保留在新记录文件中不存在的记录中。

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]" );
}

【问题讨论】:

  • 全局符号“@remaining_record”需要明确的包名在

标签: perl


【解决方案1】:
my @remaining_record;
my $size = @remaining_record;

要么从@remaining_record; 中删除my,否则它将创建名为@remaining_record 的新空数组。

或者将剩余数据的旧数组赋值给remaining_recordlike

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]";
}

【讨论】:

  • 感谢您的回复,但我已经尝试了这两种方式。脚本没有采取外部循环@remaining_record;没有我的。全局符号“@remaining_record”需要明确的包名称...希望你明白我的意思。我想在所有数据都得到处理后最后调试列表并且我想打印剩余的列表。
  • 在循环外声明my @remaining_record;,使其范围不限于您的if块。
  • 提供完整的脚本。我看看还有什么问题。
  • 即使我尝试在 n 前面使用 my "for (my $n " 但同样的消息.. :(
  • 提供完整的脚本。你在其他地方做错了什么。
猜你喜欢
  • 1970-01-01
  • 2017-12-11
  • 2016-10-17
  • 2012-02-29
  • 2017-08-15
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 2015-12-26
相关资源
最近更新 更多