作者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
1F:→ windincloud:我也没遇过+1 可能我是用原生的perl in M$吧 03/19 13:30
2F:推 StarTouching:我也不知道耶 但是确实改$/="\r\n"就解决 03/19 16:39
3F:→ idicivik:没遇过 +1 我用ActivePerl 也有用来读档 都没有\r 的问题 03/19 23:14
4F:推 StarTouching:那楼上你有试过<STDIN>吗? 03/20 01:22
5F:推 rkcity:我试过是正常的 03/21 22:28
6F:推 idicivik:我目前大部分的 code 都是需要从外面 key in filename 的 03/21 23:34