首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何解决“未初始化的值$2在拼接(.)或字符串中的使用”

如何解决“未初始化的值$2在拼接(.)或字符串中的使用”
EN

Stack Overflow用户
提问于 2018-10-01 22:22:43
回答 1查看 336关注 0票数 0

下面是我的代码。我想在一行中打印数据$1和$2,并使用,将其拆分。为什么我不能打印数据?

代码语言:javascript
运行
复制
#!/usr/intel/bin/perl

use strict;
use warnings;

use IO::Uncompress::Gunzip qw(gunzip $GunzipError);

my $input = "par_disp_fabric.all_max_lowvcc_qor.rpt.gz";
my $output = "par_disp_fabric.all_max_lowvcc_qor.txt";

gunzip $input => $output
or die "gunzip failed: $GunzipError\n";

open (FILE, '<',"$output") or die "Cannot open $output\n";

while (<FILE>) {
  my $line = $_;
  chomp ($line);

  if ($line =~ m/^\s+Timing Path Group \'(\S+)\'/) {
    $line = $1;

    if ($line =~ m/^\s+Levels of Logic:\s+(\S+)/) {
      $line = $2;
    }
  }
  print "$1,$2\n";
}

close (FILE);
EN

回答 1

Stack Overflow用户

发布于 2018-10-01 22:44:54

你的程序的要点在这里:

代码语言:javascript
运行
复制
if ($line =~ m/^\s+Timing Path Group \'(\S+)\'/) {
  $line = $1;

  if ($line =~ m/^\s+Levels of Logic:\s+(\S+)/) {
    $line = $2;
  }
}

正则表达式捕获变量($1$2等)是在将字符串与包含捕获括号集的正则表达式进行匹配时设置的。第一个捕获括号设置$1的值,第二个捕获括号设置$2的值,依此类推。为了给$2赋值,您需要匹配一个包含两组捕获括号的正则表达式。

这两个正则表达式只包含一组捕获括号。因此,只会在每个匹配项上设置$1$2将永远不会被赋予一个值-导致您看到的警告。

您需要重新考虑代码中的逻辑。我不知道为什么你会认为$2在这里有价值。您的代码有点混乱,所以我无法提供更具体的解决方案。

然而,我可以给你一些更一般的建议:

  • 使用词法文件句柄和open()的三参数版本。

打开我的$fh,'<',$output周围的引号不需要"$output"

  • There。

open my $fh,'<',$output

  • 我知道你为什么要这么做,但是对于你读出来的文件来说,$output可能是一个容易混淆的名字。考虑更改它。

  • 始终在open()错误消息中包含$!

打开我的输出,'<',$output或die“无法打开‘$ $fh’:$!\n”;

  • 您的$line变量似乎不必要。为什么不将行数据保存在$_中,这将简化您的代码:

而(<$fh>) { chomp;#默认适用于$_,如果(/some regex/) {#默认适用于$_ #等等...} }

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52593229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档