2011年1月18日星期二

Re: [PerlChina] 关于列表输出

你的程序是不是没给全? @line 哪儿来的?


print "please choose a way of output: by column or row?";

你说的按列和按行输出到底是要如何?
 
$li=<STDIN>;

这里的 $li 包含回车换行,后面做比较前记得  chomp $li;
 
if ($li eq 'column') {
 print @line;

print @line 会将@line的所有元素打印出来,一个接一个,比如 @line=(1,2,3), 输出就是  123
 
}else {
  @r=chomp(@line);

chomp(@line) 会对 @line 的所有元素起作用, 我猜测你这里是想将 chomp 后的@line中的元素赋值给@r, 但这里 @r 得到的不会是你想要的,这里的 @r 得到的是 chomp 对 @line 中元素进行操作后成功的次数,比如说 @line=("a\n", "bbb\n", "ccc\n", 123), 那么其中有三个元素结尾带 \n,那么 chomp 在作用于这三个元素时是成功的,所以此时 @r=chomp(@line) 就等于  @r=3

请参看 perldoc -f chomp
里面有说:

 If you chomp a list, each element is chomped, and the total
 number of characters removed is returned.
 
 
  print @r;}
我在输入a b c d e f 六个字符后,输出的结果是6,而不是这六个字符

看完上面的解释,你应该知道为什么此时输出的结果是6了吧? 

请将 perl 基本的语法再熟悉一下 :-)

--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

没有评论: