2013-05-16 42 views
0
#!/usr/bin/perl 
#Author Leo 
use Email::Address; 

#use strict; 
my $file = "/var/log/maillog"; 
my $string="msgif"; 
open(MAIL, $file); 
my @buffer =<MAIL>; 
close(MAIL); 
my $lines=grep(/$string/, @buffer); 

#print "@lines"; 

my @addresses = Email::Address->parse($lines); 
print $addresses[0]->address; 

這是我的代碼。我是perl的新手,我想知道如何使用Email::Address解析文件中的行,然後獲取電子郵件地址。如何使用電子郵件地址從perl文件中提取電子郵件

+4

如果你是新來PERL,爲什麼你的代碼,那麼老氣? – innaM

+0

@innaM:我的猜測 - 從不良資源中學習:-) –

回答

3

未經測試:

#!/usr/bin/perl 

use warnings; 
use strict; 

use Email::Address; 

open(my $fh, '<', '/var/log/maillog') 
    or die "Cannot open /var/log/maillog: $!"; 

while (<$fh>) { 
    next unless /msgif/; 

    my @addrs = Email::Address->parse($_); 

    foreach my $addr (@addrs) { 
    print "$addr\n"; 
    } 
} 

close($fh); 
+2

顯示'open'的三參數版本是好的,但不要忘記檢查成功'open my $ fh,'<',「。 ..「或死」不能讀......:$!「;'。 – dgw

+0

回答與您的筆記更新。 –

2

使用File::SlurpEmail::Find另一個想法。您可以定義您的搜索並將其實施到此。

use strict; 
use warnings; 
use Email::Find; 
use File::Slurp; 

my @addresses; 
my $wanted = Email::Find->new(
        sub { 
         my ($email, $old) = @_; 
         push @addresses, $email->format; 
         }); 

my $data = read_file('/var/log/maillog'); 
$wanted->find(\$data); 

print join("\n", @addresses); 
-2

或者你可以使用正則表達式來解析電子郵件..

相關問題