在另一个哈希中引用哈希表示在串联(。)或字符串中使用未初始化的值

时间:2018-10-19 10:04:00

标签: perl

我有一个对象$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" .

但是我不确定如何正确地写那行。该代码有效,但我希望报告的错误明显更少。

1 个答案:

答案 0 :(得分:2)

警告告诉我们,$backupStage->{'additional_event_details'}->{'backup_stage'}返回的值在$stageIdMap引用的哈希中不存在。例如,如果$backupStage->{'additional_event_details'}->{'backup_stage'}为'foo',则$stageIdMap->{'foo'}丢失或未定义。

鉴于问题顶部的示例数据,我注意到该示例数据中不存在$backupStage->{'additional_event_details'}->{'backup_stage'}-$additional_event_details哈希不包含backup_stage键。 backup_stage位于$statsHash中,而不是$backupStage->{'additional_event_details'}中。这似乎可能是根本问题,因为很有可能$stageIdMap->{undef}(对于实际的undef,而不是字符串'undef')不存在。

如果您要提供一个简短的,自成体系的示例程序,我们可以亲自运行该程序以查看实际问题,那么我们将能够提供更多确定的(也许更有用的)帮助。