2010-09-30 179 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 $_;