在foreach循环中分配变量

时间:2013-01-21 21:04:24

标签: perl

我真的不明白如何将此代码的输出分配给每行输出的变量或只是一个大块变量。我使用Mail :: POP3Client,如果这有帮助。我想要分配变量的输出是“print”$ _ \ n“if / ^(From | Subject):/ i;”

my $count = $pop->Count();
if ($count < 0) {
    print $pop->Message();
} elsif ($count == 0) {
    print "no messages\n";
} else {
    print "$count messsages\n\n";

    for my $i (1 .. $count) {
        foreach ($pop->Head($i)) {
            print "$_\n" if /^(From|Subject):/i;
        }
        print "\n";
    }
}

2 个答案:

答案 0 :(得分:3)

您有两种选择,具体取决于您希望如何处理数据

定义变量并连续追加

my $from = '';
...
foreach ($pop->Head($i)) {
    $from .= "$_\n" if (/^(From|Subject):/i);
}

这将为您提供一个包含所有FromSubject的大字符串。 或者您定义一个数组并附加到此数组的末尾

my @from;
...
foreach ($pop->Head($i)) {
    push @from, $_ if (/^(From|Subject):/i);
}

这将产生一个数组,其中每个元素包含一个FromSubject行。

根据Mail::POP3Client,如果您要删除POP服务器上的所有邮件

for my $i (1 .. $count) {
    $pop->Delete($i);
}
在关闭之前

应标记所有要删除的邮件。当您最终关闭连接时,

$pop->Close();

将处理所有待处理的删除。

答案 1 :(得分:2)

预先制作一个数组,称为@mystuff。不是print "$_\n" if /^(From|Subject):/i;,而是push(@mystuff, $_) if /^(From|Subject):/i;。最后,您将在foreach中打印出一系列正在打印的内容。