2010-09-30 121 views
0

这看起来非常微不足道,但它对我来说没有任何意义。Perl输出问题

我有下面的代码的这段:

foreach $i (@inputtext) 
{ 
@line = split(/\|/, $i); 
foreach $j (@line) 
{ 
    print "$j, "; 
} 
} 

的输入是三个以下行,相同的:

98465895 |不知道放在这里| 123随地车道|城市| ST | 55555 |数据1 | PASS1 |数据2 | PASS2 |数据3 | PASS3 |更多的东西

输出最终虽是这样的:

98465895,不知道放在这里,123在任何地方车道,城市,ST,55555,数据1,PASS1,数据2,PASS2,数据3,PASS3,更多的东西
,98465895,不知道放在这里,123在任何地方数据1,pass1,data2,pass2,data3,pass3,更多东西
,98465895,不知道这里有什么东西,在任何地方,城市,ST,55555,data1,pass1,data2,pass2 ,数据3,PASS3,更多的东西

没有合乎逻辑的理由,我可以看到,将创建一个底线打印语句中,抛逗号到下一行,搞乱了输出的下一行。任何人有任何建议?

感谢

+0

'use strict;使用警告;' – Ether 2010-09-30 21:55:24

回答

3

我们不能看到发生了什么从文件中读取。您是否在输入文字上拨打chomp来摆脱尾随的换行符?

而且,在做这for环加入用逗号领域,这样做:

print join(', ', @line); 
+0

是的,它可悲的是像一个愚蠢chomp声明一样简单... – ThePirateSheep 2010-10-01 12:48:57

2

我敢打赌$i包含您split前一个换行符。先尝试chomp

1

我不太确定什么此代码之前,但我敢打赌,这件事情是这样的:

open FILE, 'filename'; 
@inputtext = <FILE>; 

Perl是优化你接近不同的问题:

use strict; use warnings; # helps you avoid errors early 

open my $file, '<', 'filename' or die $!; 

while (<$file>) {     # loads the next line from $file into $_ 
    chomp;       # strip newline from $_ 
    print join ', ' => split /\|/; # split uses $_ without an arg 
    # or use split's output for anything else 
} 

如果您在子程序中使用此代码,请务必在while循环之前local $_;