我正在尝试将值添加到哈希中的数组。
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;
}
我根据 a 的事务 id 和 b 的事务 id 将两个日志文件链接在一起,它们都位于 b 日志的单个日志行中。
第一条if
语句对此进行检查,并%bHash
使用 b->ID = a->Id 进行填充。
然后我正在寻找 b 的交易是成功还是失败。如果我看到一个成功行,我将获取事务 ID,如果该 ID 存在,%bHash
那么我想将“bSucc”消息推送到数组的末尾,即%bHash
有 bSid -> aSid, bSucc。
我收到以下错误/警告消息:
Can't use string ("7747395") as an ARRAY ref while "strict refs" in use at ./report.pl line 54, <$info> line 833.
有没有办法做到这一点?
如果可能,我还想继续向数组添加信息,因为我扫描日志以获取更多数据。我想使用事务 ID 作为密钥,并根据需要添加信息。这可能吗?有没有更好的方法来完成任务?
编辑:我想要完成的是在 3 个不同的日志文件中编译有关事务的信息。我想为每个事务找到以下内容:失败的成功,如果失败,它在哪里失败,在日志 a、b 或 c 中?
一个事务由 3 个不同的应用程序处理,因此有 3 个不同的日志。不幸的是,应用程序 a 与应用程序 b 和 c 中的 trans id 不同。所以我用 log a 中的所有 trans id 构建了一个哈希,然后在 log b 中有一个 log 行,它允许您查看用于 log a 的 trans id 和用于 log b 的 trans id 之间的链接。这就是为什么我将来自 b 的 trans id 与来自 log a 的哈希进行匹配。最终,我想要上面提到的每个 transId 的信息,成功/失败等。