2015-09-28 23 views
-1
#!/usr/bin/perl 

use strict; 
use warnings; 

my $sender; 
my $receiver; 
my @sender; 
my @receiver; 

open (FILE, "enron.csv"); 

while (<FILE>) { 
    ($sender, $receiver) = split(/,/, $_); 
    push @sender, $sender; 
    push @receiver, $receiver; 
} 

print @sender; 
print @receiver; 

我正在阅读的文件是电子邮件地址:对于每一行,有两个地址用逗号分隔。我想将逗号的左侧和右侧的地址存储在两个单独的数组中。如何将字符串推入数组并在换行符中打印它们中的每一个?

我遇到的问题是,当我打印@sender时,所有地址都链接在一起。它们之间没有空白或换行符。

对于@receiver,一切正常。每个地址都有自己的路线。 (Newline在地址的每一端。)

如何解决@sender?

谢谢。

+0

大概就像'打印加入 “\ n”,@发件人' – KeepCalmAndCarryOn

+0

你知道我为什么要打印吗?发送者和接收者以相同的方式,但结果的格式是不同的? –

+1

@NoahSong:因为接收者从输入文件中获取“\ n”,而发件人不是。因此,您需要在发件人的代码中明确添加“\ n”,以便在打印时看到与收件人相同的结果。 – Anand

回答

1

@receiver中的项目包含来自输​​入文件的换行符。我首先通过在你的循环中调用chomp来消除它。然后,打印变得

print map { "$_\n" } @sender; 
print map { "$_\n" } @receiver; 

print "$_\n" for @sender; 
print "$_\n" for @receiver; 

use feature qw(say); 

say for @sender; 
say for @receiver; 
0

我想我知道答案。

我必须为每个已经包含换行符的接收器chomp。

1

或者使用列表分隔

$" = "\n"; 
print "@sender\n"; 
print "@receiver\n"; 
相关问题