作者frank1983 (What?)
看板Perl
标题Re: [问题] 骆马书第三章第三题
时间Tue May 12 03:17:06 2009
※ 引述《Shickerd (希)》之铭言:
: 大家好,我是perl的初学者,在写骆马书第三题时碰到一个因难。
: 本题的解答程式码如下:
: chomp(@lines = <STDIN>);
: @sorted = sort @lines;
: print "@sorted\n";
: 当我在命令列下执行这个档案时,我输入下列字串:
: ddd
: aa
: zzz
: Ctrl-Z
: 然後会出现
: zzz
: 这与原先预想的不同。
: 当我把chomp给去掉之後(也就是变成@lines=<STDIN>),再次执行这个档案。
: 结果就变成
: aa
: ddd
: zzz
: 这与预想的差不多。
: 我想请问究竟为什麽,加上chomp之後,只会印出串列中的最後一个值?
: 谢谢!
chomp 会移除字尾与特殊变数 $/ 相符的字串 (预设为 "\n")
我猜你是使用 ActivePerl:在 MS Windows 下换行符号为 "\r\n"
所以 chomp 只删除 "\n",却留下了 "\r" (归位字元)
这会使游标移至行首,但是并没有换行,
使得下一个输出值会覆盖掉原本的输出的字串
你可以利用 $/ = "\r\n" 同时删除 "\r" 和 "\n" 字元
或是不用 chomp 直接使用 regex:
$_ =~ s/\r?\n$// for @lines;
来删除每一行的换行符号
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.230.108
1F:推 Shickerd:喔,原来如此,我了解了,谢谢你^^ 05/19 16:58