Perl: Как мне распечатать результат массива хэшей на теле письма? - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть некоторые данные, хранящиеся в массиве хэшей, и я пытаюсь распечатать результаты в теле отправляемого электронного письма.Результаты будут напечатаны в командной строке при запуске сценария, однако тело письма останется пустым.

sub DailyInflow {
    my @inflow = SQLTableHash("select count(FOO), count(BAR), BAZ from table1 where days in (0,1) group by BAZ", $reportdbh);

    foreach my $inflow (@inflow) {
     print $inflow->{"BAZ"} . ": " . $inflow->{"COUNT(FOO)"}."\n";
        print "Total: " . $inflow->{"COUNT(BAR)"} . "\n";
    }
}

################### Send E-mail with CSV Attachment ##################

print "Sending Email ... \n" if $ENV{DEBUG};


my $subject = "Snapshot $reportdate"; 

SendEmail({
    FROM => 'user@email.com',
    TO => $args{EMAIL},
    SUBJECT => $subject,
    BODY =>DailyInflow()
        ATTACHFILES => [{
        Type => 'BINARY',
        Path => "$fullzipname",
        Disposition => 'attachment',
        Filename => "$zipname",
    }],
});

1 Ответ

1 голос
/ 16 апреля 2019

Ваша подпрограмма DailyInflow() должна выглядеть следующим образом:

sub DailyInflow {
    my @inflow = SQLTableHash("select count(FOO), count(BAR), BAZ from table1 where days in (0,1) group by BAZ", $reportdbh);

    my $string;
    foreach my $inflow (@inflow) {
        $string .= $inflow->{"BAZ"} . ": " . $inflow->{"COUNT(FOO)"}."\n";
        $string .= print "Total: " . $inflow->{"COUNT(BAR)"} . "\n";
    }

    return $string;
}

Но вы можете упростить это, интерполируя переменные внутри строк в двойных кавычках.

sub DailyInflow {
    my @inflow = SQLTableHash("select count(FOO), count(BAR), BAZ from table1 where days in (0,1) group by BAZ", $reportdbh);

    my $string;
    foreach my $inflow (@inflow) {
        $string .= "$inflow->{'BAZ}: $inflow->{'COUNT(FOO)'}\n";
        $string .= "Total: $inflow->{'COUNT(BAR)'}\n";
    }

    return $string;
}
...