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