【发布时间】:2014-02-17 23:21:55
【问题描述】:
我是 Perl 的初学者,但必须开发一些脚本来解析 TCP-dump。 在这里(我将其截断并仅留下相关代码):
我收到以下错误: 线程 1 异常终止:TestThread1.pl 第 16 行的共享标量值无效, 这是因为这个字符串: %input = (%input, $fix_ClOrdID => [$FrameTime_epoch,$fix_MsgType]);
从我读过的许多类似主题中,我了解到我无法使用 threads::shared 共享嵌套引用。而且我还找到了一些解决方法。但由于缺乏经验,我无法为我的案例应用示例。
您能否建议如何修复我的脚本以使其正常工作!
use threads;
use threads::shared;
my %input:shared = ();
threads->new(\&FixParser)->detach();
sub FixParser{
open(InFile, 'myFix.dmp') || die;
while(InFile>){
($FrameTime_epoch,$fix_MsgType,$fix_ClOrdID) = split(';',);
if(exists($input{$fix_ClOrdID})){
$ExecDelay=$FrameTime_epoch-$input{$fix_ClOrdID}[0];
print "MsgType: $input{$fix_ClOrdID}[1] ExecDelay: $ExecDelay us\n";
delete($input{$fix_ClOrdID});
}
else{
%input = (%input, $fix_ClOrdID => [$FrameTime_epoch,$fix_MsgType]);
}
}
}
【问题讨论】:
-
您是否从应用程序中复制/粘贴了实际代码?我不禁注意到您没有
use strict; use warnings;,并且列出的代码无法编译。例如,我只是盯着它看,但这条线while(InFile>)应该是while(<InFile>)。尝试添加use strict; use warnings;并修复这些错误。如果仍有问题,您应该再次询问。
标签: multithreading perl hash multidimensional-array