作者abliou (把青春freeze)
看板Perl
標題Re: [問題] Perl讀檔 in Windows
時間Sat Mar 19 00:41:16 2011
※ 引述《StarTouching (撫星)》之銘言:
: 找到原因了....
: 首先要先知道
: Windows的 command-line(亦即DOS) 按Enter時會送出\r\n
: 但是在txt中, 只有\n (也許整個非Dos環境都是如此)
: chomp預設只會篩掉\n,
: 所以如果從STDIN讀入(DOS輸入),
: 就會仍遺留下\r
: 改$/ = "\r\n"
: 可讓chomp篩掉\r\n
: 但$/也影響到Perl讀取字串的斷點
: 所以txt檔裡面只有\n 沒有\r,
: 那Perl就找不到斷點,
: 應該要把$/改回"\n"
: 結論: 在Windows 需要DOS輸入時, 才需要改 $/
: 不過這狀況其實不常用在實際應用,
: 多半在練習或debug才會用,
: 但正是因為如此, 初學者才更容易遇到這個問題而不知解決方法
看到這邊就想到大約兩年前的討論串 不過往上爬文已經找不到了
有一種方法叫做slurp 作法就是把$/設為undef
這樣在讀檔就會略過換行符號 把整個檔的內容放到字串中
這種方法用在網頁的tag處理很有用
因為在擷取網頁資料時都是在擷取兩個tag中間的資訊
所以無形中換行符號就變成一種問題
(當然在常規表示式中會有解決方案)
Perl中很多預設變數 在更改都會有用處跟用意 不過也要注意後面的影響
ps.我承認我蠻菜的 不過目前我用過的perl 都還沒碰過原po碰到的問題
--
如果青春注定要向前跑
他媽的...那我的出口在那?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.137.150.96
→ windincloud:我也沒遇過+1 可能我是用原生的perl in M$吧 03/19 13:30
推 StarTouching:我也不知道耶 但是確實改$/="\r\n"就解決 03/19 16:39
→ idicivik:沒遇過 +1 我用ActivePerl 也有用來讀檔 都沒有\r 的問題 03/19 23:14
推 StarTouching:那樓上你有試過<STDIN>嗎? 03/20 01:22
推 rkcity:我試過是正常的 03/21 22:28
推 idicivik:我目前大部分的 code 都是需要從外面 key in filename 的 03/21 23:34