2013-06-27 46 views
4

我試圖處理每個字符的文件字符的輸入,但有一些1顯示出來,我不知道它們來自哪裏。考慮下面這個例子:當處理字符串字符時,神祕的'1'

文件input

First row; 
Second row; 

Third row; 

文件test.pl

#!/usr/bin/perl 

open FILE, "<input"; 

my @characters = split //, join //, <FILE>; 
for(@characters) { 
    print $_; 
} 

close FILE; 

我希望這個腳本只打印的input內容(儘管在一個相當複雜的方式 - 它只是一個例子)。然而,當我運行./test.pl,我得到這樣的輸出:

First row; 
1Second row; 
1 
1Third row; 

現在我的問題是:在哪裏這些1字從何而來?

+0

你有沒有嘗試在Perl調試器中運行它? –

+0

我以前不知道調試器,但現在用它搜索。它不會真的幫助我(除非我失去了一些東西),因爲我已經知道問題線是什麼。不過謝謝! –

回答

14

join //應該是join ''

//,簡稱$_ =~ m//,是一個匹配運算符。由於它匹配成功,它返回了真實值1

split的特殊之處在於它把split /.../類似於split qr/.../的東西。)

順便說一句,總是用use strict; use warnings;。這在這裏會很有用。

+0

謝謝!這很棘手 - 我試圖弄清楚這一點幾乎瘋了。我將立即添加'嚴格使用'和'使用警告'。 –

7

按照的perldoc爲join

Beware that unlike split, join doesn't take a pattern as its first argument.

查看更多在這裏:http://perldoc.perl.org/functions/join.html

的第一個參數更改爲字面空字符串""作品如您所願:

[[email protected] ~]$ cat test.pl 
#!/usr/bin/perl 

open FILE, "<input"; 

my @characters = split //, join "", <FILE>; 
for(@characters) { 
    print $_; 
} 

close FILE; 

[[email protected] ~]$ perl test.pl 
First row; 
Second row; 

Third row; 
+0

謝謝。希望我能接受兩個答案;另一個更快,但都是以他們自己的方式! –