高手进,赐教!谢



QUOTE:
原帖由 windows.li 于 2007-9-7 14:33 发表
@fields = split /:/, “:::a:b:c:::”; #得到(“”, “”, “”, “a”, “b”, “c”);
我想弄明白一点:后面产生的3个空字符被丢弃了,这里"丢弃"的含义是指:
(1)运行结果末尾的空字符只是打印出来我们肉眼看不到,但本身是存在那3个空字符的?或
(2)程序运行结果到"c"就结束了,程序运行结果中根本不存在后面有3个空字符?
那么这里$#fields等于多少啊?
如果是(1)正确,那么$#fields=9.
如果是(2)正确,那么$#fields=6.

1. 那个例子里明确地说明了你【得到(“”, “”, “”, “a”, “b”, “c”)】这样一个数组
  你理解这句话的含义了么?
2. 抛开这个不提,就算如你所说,即使(1)正确,$#fileds也得不到9,即使(2)正确,$#fields也得不到6。
  $#fields是指的@fields这个数组的当前最大索引,而不是数组元素的个数。
3. 最好从头仔仔细细看完一遍learning perl
4. 如楼上所说,自己写程序测试测试远比你在这里提问得到回答要有效得多。
在perl群*欣兄弟的耐心帮助下,小弟终于走出了自己设置的怪圈.

@fields = split /:/, “:::a:b:c:::”; #得到("","","","a","b","c");
@fields = split /:/, “:::a:b:c: : :”; #得到("","","","a","b","c","","");
上面两行代码是有区别的!
小弟就是被空格给忽悠了,呵呵!写在这里,以后可以自己查阅.
谢谢上面所有朋友的帮助,偶收获不小,谢谢您了!
### 接着楼上的, 咱们输出一下就清楚了 ###

foreach (@fields) {
    ($_) ? (print "$_\n") : (print "empty\n");
}