2012-10-06 27 views
1

我認爲這會很簡單。我有兩個數組,我想用這些數組中的數字打印一個句子到一個文件中。我嘗試這樣做:Perl打印功能添加不需要的換行符到變量

chomp $array1[$x]; 
chomp $array2[$x]; 
print FILE "Number1: $array1[$x] \& Number2: $array2[$x] Some Words\n"; 

這給了我:

Number1: 0 
& Number2: 87.3 
Some Words 

(這裏的數字只是一個例子。)

任何想法,爲什麼發生這種情況? 我試過使用

$array1[$x] =~ s/\n//g; 
$array2[$x] =~ s/\n//g; 

以及,但它並沒有固定任何東西。 另外,如果我明確地放在這些額外的新行,像這樣:

print FILE "Number1: $array1[$x]\n \& Number2: $array2[$x]\n Some Words\n" 

我得到了相同的輸出,所以不需要的換行不被添加了。爲什麼?

+0

我們需要知道'$ array [1]'和'$ array [2]'是如何被填充的。你的「開放」是什麼樣子(如果你正在從文件中讀取)。該文件創建的操作系統是什麼?您使用什麼操作系統? – DavidO

+0

除非使用單引號打印,否則不需要轉義'&'。 – squiguy

+0

@DavidO文件是在Windows上創建的,腳本正在Linux上運行。 通過排序另一個數組(原始數據)來填充數組,該數組通過讀取文件來填充。在讀入「原始」之前,每一行都被「chomped」。 – CybeatB

回答

0

由於該文件是在Windows上創建的,因此可能有CRLF(即\r\n)行終止,而不僅僅是LFchomp將默認只刪除LF

這條線將刪除LF可選前述CR

$array1[$x] =~ s/\r?\n//; 

備選地,更改$/(默認的「輸入記錄分隔符」)來包含\r\n,在該點chomp應該正確剝離兩者。

+3

在Perl 5.10中引入'\ R'來刪除任何行結尾,就像旁註一樣。確切地說,你的正則表達式是做什麼的。 – squiguy