Perl 对hash insideanother hash的引用在串联(.)或字符串中使用未初始化的值
我有一个对象Perl 对hash insideanother hash的引用在串联(.)或字符串中使用未初始化的值,perl,Perl,我有一个对象$burStageStats,我用数据填充它 my $additional_event_details = { 'status' => '\N', 'duration' => '\N', 'keyword' => $keyword }; my $statsHa
$burStageStats
,我用数据填充它
my $additional_event_details = {
'status' => '\N',
'duration' => '\N',
'keyword' => $keyword
};
my $statsHash = {
'time' => '\N',
'event_type' => 'INFO',
'backup_stage' => '\N',
'additional_event_details' => $additional_event_details
};
push (@burStageStats, $statsHash);
稍后,我循环并将这些值打印到BCP文件中
foreach my $backup (@{$burStageStats}) {
foreach my $backupStage ($backup) {
print BCP "$siteId\t" . $backupStage->{'time'} . "\t" .
$backupStage->{'event_type'} . "\t" .
$stageIdMap->{$backupStage->{'additional_event_details'}->{'backup_stage'}} . "\n";
}
}
我得到以下错误
在/data/ddp/current/analysis/TOR/bur/parseburLog第180行第11287行的串联(.)或字符串中使用未初始化的值
我想象它指向了我在这行中引用的方式
$stageIdMap->{$backupStage->{'additional_event_details'}->{'backup_stage'}} . "\t" .
但我不知道该如何正确地写这句话。代码可以工作,但我希望报告的错误明显减少。警告告诉我们,
$backupStage->{'additional\u event\u details'}->{'backup\u stage'}
返回一个值,该值在$stageIdMap
引用的哈希中不存在。e、 例如,如果$backupStage->{'additional_event_details'}->{'backup_stage'}
为'foo',则$stageIdMap->{'foo'}
缺失或未定义
鉴于问题顶部的示例数据,我注意到,$backupStage->{'additional_event_details'}->{'backup_stage'}
不存在于该示例数据中,$additional_event_details
哈希不包含backup_stage
键backup\u stage
位于$statsHash
中,而不是$backupStage->{'additional\u event\u details'}
。这似乎是根本问题,因为很有可能$stageIdMap->{unde}
(对于实际的unde
,而不是字符串“unde”)不存在
如果您提供一个简短的、自包含的示例程序,我们可以自己运行以查看实际问题,那么我们将能够提供更明确(可能更有用)的帮助。警告告诉我们,
$backupStage->{'additional\u event\u details'}->{'backup\u stage}
返回一个值,该值在$stageIdMap
引用的哈希中不存在。e、 例如,如果$backupStage->{'additional_event_details'}->{'backup_stage'}
为'foo',则$stageIdMap->{'foo'}
缺失或未定义
鉴于问题顶部的示例数据,我注意到,$backupStage->{'additional_event_details'}->{'backup_stage'}
不存在于该示例数据中,$additional_event_details
哈希不包含backup_stage
键backup\u stage
位于$statsHash
中,而不是$backupStage->{'additional\u event\u details'}
。这似乎是根本问题,因为很有可能$stageIdMap->{unde}
(对于实际的unde
,而不是字符串“unde”)不存在
如果您要提供一个简短的、自包含的示例程序,我们可以自己运行该程序来查看实际问题,那么我们将能够提供更明确(可能更有用)的帮助。您是否使用严格和警告?是的,这两种方法都使用,就像您前面的问题一样,你没能证明你的问题。如果你甚至不能描述这个问题,你怎么能希望解决它呢?请参阅了解如何执行此操作。为什么在foreach循环中使用
@{$BurstAgests}
而不是直接使用@BurstAgests
?是否使用严格和警告?是的,这两种方法都使用,就像前面的问题一样,您无法演示您的问题。如果你甚至不能描述这个问题,你怎么能希望解决它呢?请查看如何执行此操作。为什么在foreach循环中使用@{$burStageStats}
而不是直接使用@burStageStats
?