Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Perl:添加到哈希数组_Arrays_Perl_Hash - Fatal编程技术网

Arrays Perl:添加到哈希数组

Arrays Perl:添加到哈希数组,arrays,perl,hash,Arrays,Perl,Hash,我试图在散列中向数组添加值 foreach my $f (@files) { my $file = "$logDir/$f"; open my $info, $file or die "Could not open $file: $!"; while (my $line = <$info>) { chomp $line; if ($line =~ /CONN.*\[ID=(.*)\].*ID is(.*)/) { $b = $1;

我试图在散列中向数组添加值

foreach my $f (@files) {
  my $file = "$logDir/$f";
  open my $info, $file or die "Could not open $file: $!";
  while (my $line = <$info>) {
    chomp $line;
    if ($line =~ /CONN.*\[ID=(.*)\].*ID is(.*)/) {
      $b = $1;
      $a = $2;
      $a =~ s/^\s+//;
      $bHash{$b} = $a if (exists $aHash{$a});
    }
    elsif ($line =~ /succ.*\[ID=(.*)\].*/) {
      $b = $1;
      push(@{ $bHash{$b} }, "bSUCC") if (exists $bHash{$b});
    }
    elsif ($line =~ /fail.*\[ID=(.*)\].*/) {
      $b = $1;
      push(@{ $bHash{$b} }, "bFAIL") if (exists $bHash{$b});
    }
  }
  close $info;
}
有办法做到这一点吗

我还希望在扫描日志以获取更多数据时,尽可能继续向阵列中添加信息。我想使用事务ID作为密钥,并根据需要添加信息。这可能吗?有没有更好的方法来完成这项任务

编辑:我试图完成的是跨3个不同的日志文件编译有关事务的信息。我想在日志a、b或c中找到每个事务的以下内容:失败的成功,如果失败,它在哪里失败


一个事务由3个不同的应用程序处理,因此有3个不同的日志。不幸的是,应用程序a中的trans id与应用程序b和c中的不同。因此,我用日志a中的所有trans id构建了一个哈希,然后在日志b中有一个日志行,允许您查看用于日志a的trans id和用于日志b的trans id之间的链接。这就是为什么我要将b中的trans id与日志a中的哈希进行匹配。最后,我需要上面提到的每个transId的信息,sucs/fail等。

问题是,当您最初在
%bHash
中设置每个值时,您将其设置为字符串值,而不是arrayref:

      $bHash{$b} = $a if (exists $aHash{$a});
稍后,您将尝试通过解引用将值推送到“数组”上:

      push(@{ $bHash{$b} }, "bSUCC") if (exists $bHash{$b});
但是由于没有数组,只有一个字符串,Perl认为您正在尝试将字符串解引用到数组中。(我应该指出,这实际上是潜在合法的-如果
$a
是字符串
'foo'
,那么
@$a
意味着全局变量
@foo
-但这不建议,在
使用strict
的范围内不允许,显然不是您想要做的。我提到它只是因为er的文本ror消息认为这就是您尝试使用的功能。)

修复方法只是使用arrayref开始:

      $bHash{$b} = [$a] if (exists $aHash{$a});

因此,您可以安全地将值推送到数组中。

问题是,当您最初在
%bHash
中设置每个值时,您将其设置为字符串值,而不是arrayref:

      $bHash{$b} = $a if (exists $aHash{$a});
稍后,您将尝试通过解引用将值推送到“数组”上:

      push(@{ $bHash{$b} }, "bSUCC") if (exists $bHash{$b});
但是由于没有数组,只有一个字符串,Perl认为您正在尝试将字符串解引用到数组中。(我应该指出,这实际上是潜在合法的-如果
$a
是字符串
'foo'
,那么
@$a
意味着全局变量
@foo
-但这不建议,在
使用strict
的范围内不允许,显然不是您想要做的。我提到它只是因为er的文本ror消息认为这就是您尝试使用的功能。)

修复方法只是使用arrayref开始:

      $bHash{$b} = [$a] if (exists $aHash{$a});

因此,您可以安全地将值推送到数组中。

问题是,当您最初在
%bHash
中设置每个值时,您将其设置为字符串值,而不是arrayref:

      $bHash{$b} = $a if (exists $aHash{$a});
稍后,您将尝试通过解引用将值推送到“数组”上:

      push(@{ $bHash{$b} }, "bSUCC") if (exists $bHash{$b});
但是由于没有数组,只有一个字符串,Perl认为您正在尝试将字符串解引用到数组中。(我应该指出,这实际上是潜在合法的-如果
$a
是字符串
'foo'
,那么
@$a
意味着全局变量
@foo
-但这不建议,在
使用strict
的范围内不允许,显然不是您想要做的。我提到它只是因为er的文本ror消息认为这就是您尝试使用的功能。)

修复方法只是使用arrayref开始:

      $bHash{$b} = [$a] if (exists $aHash{$a});

因此,您可以安全地将值推送到数组中。

问题是,当您最初在
%bHash
中设置每个值时,您将其设置为字符串值,而不是arrayref:

      $bHash{$b} = $a if (exists $aHash{$a});
稍后,您将尝试通过解引用将值推送到“数组”上:

      push(@{ $bHash{$b} }, "bSUCC") if (exists $bHash{$b});
但是由于没有数组,只有一个字符串,Perl认为您正在尝试将字符串解引用到数组中。(我应该指出,这实际上是潜在合法的-如果
$a
是字符串
'foo'
,那么
@$a
意味着全局变量
@foo
-但这不建议,在
使用strict
的范围内不允许,显然不是您想要做的。我提到它只是因为er的文本ror消息认为这就是您尝试使用的功能。)

修复方法只是使用arrayref开始:

      $bHash{$b} = [$a] if (exists $aHash{$a});

这样您就有了一个可以安全地将值推送到的数组。

这根本不起作用,因为您正在将
$bHash{$b}
初始化到A事务ID,然后尝试将其推送到事务ID上,就好像它是数组引用一样。请显示您的数据文件格式,并准确描述您需要执行的操作。它看起来真的属于数据库。请学习如何正确格式化Perl,尤其是在提问之前。此外,决不能将
$a
$b
用作通用变量,首先是因为它们根本不是描述性的(这与您不应调用哈希
%bHash
的原因相同)第二个原因是Perl在内部使用它们,您可能会遇到访问冲突。添加了一些关于我存储信息的最终目标的详细信息。这根本不起作用,因为您正在初始化a事务ID的
$bHash{$b}
,然后尝试将其作为数组引用。请显示您的数据文件格式,并准确描述您需要执行的操作。它看起来真的属于数据库。请学习如何正确格式化Perl,尤其是在提问之前。此外,您决不能将
$a
$b
用作通用变量,首先是因为它们根本不是描述性的(这与您不应调用哈希
%bHash
的原因相同),其次是因为P在内部使用它们