【问题标题】:Perl Scoping Array variable - for loopPerl 范围数组变量 - for 循环
【发布时间】:2020-01-19 05:31:59
【问题描述】:

我是 Perl 的新手。我的要求是在 for 循环内填充一个数组并在循环外使用变量。

foreach my $fp (glob("c/temp.txt"))
{
  open my $fh, "<", $fp or die "can't read open '$fp': $OS_ERROR";
  while (my $line = <$fh>)
  {
    chomp($line);
   my @array= split /[,\(\)]/, $line; 
  }
  close $fh or die "can't read close '$fp': $OS_ERROR";
 }

我需要在 foreach 循环之外使用值 @array。请提出一种方法。

【问题讨论】:

  • (1) 您显示的glob 评估为一个 项,即c:/temp.txt 字符串。也许你这样做是为了简单,但为什么不做一些更现实的事情,比如c:/*.txt (2) 当open 失败时,通常会查看$! 变量。如果 $OS_ERROR 涉及某些 cookie 重载等(并且它包含 $!),那就这样吧,否则你也应该打印 $!

标签: arrays perl split


【解决方案1】:

您需要在需要使用它的范围内声明您的数组。因此,如果您在循环之外需要它,请在循环之前声明它,并且它也可以在循环中使用。喜欢:

my @array;

foreach my $fp (glob("c/temp.txt"))
{
...
   @array= split /[,\(\)]/, $line; 
...
 }

【讨论】:

  • 如果他们想保留有关单个行的信息,请将 @array 的引用放在另一个数组上,my @lines; for(...) { ... my @ary = split ...; push @lines, \@ary }
猜你喜欢
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多