免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2200 | 回复: 4
打印 上一主题 下一主题

about splice [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-25 02:44 |只看该作者 |倒序浏览
#!/usr/bin/perl -w
use strict;
my @veg=qw(carrots corn);
splice (@veg,0,1);
print @veg,"\n";
splice (@veg,0,0,qw(peas));
print join(' ',@veg),"\n";
splice (@veg,-1,1,qw(barley,turnip));
print join(' ',@veg),"\n";
splice (@veg,1,1);
print join(' ',@veg),"\n";
输出结果为:
corn
peas corn
peas barley,turnip
peas
为什么最后个值是peas,而不是peas,turnip?

论坛徽章:
0
2 [报告]
发表于 2006-03-25 12:07 |只看该作者
splice ARRAY,OFFSET,LENGTH,LIST
Removes the elements designated by OFFSET and LENGTH from an
array, and replaces them with the elements of LIST, if any.

splice (@veg,1,1);  # remove $veg[1] ,替换为 LIST. 这里 LIST 没有设定,所以 splice 这里做的只是 remove $veg[1]

论坛徽章:
0
3 [报告]
发表于 2006-03-26 01:06 |只看该作者
按你的意思,结果应该是peas,turnip .
但实际上输出为peas.
example:
#!/usr/bin/perl -w
use strict;
my @ww=qw(peas barley turnip);
splice (@ww,1,1);
print join(' ',@ww);
输出结果为:
peas turnip
在这个例子中,结果输出正确。

#!/usr/bin/perl -w
use strict;
my @veg=qw(carrots corn);
splice (@veg,0,1);
print @veg,"\n";
splice (@veg,0,0,qw(peas));
print join(' ',@veg),"\n";
splice (@veg,-1,1,qw(barley,turnip));
print join(' ',@veg),"\n";
splice (@veg,1,1);
print join(' ',@veg),"\n";


为什么上面那个例子最后那条语句的输出会是peas呢?郁闷中!在执行splice(@veg,1,1);操作之前,@veg的值已被修改为
peas, barley,turnip 了。

[ 本帖最后由 hb12112 于 2006-3-26 01:08 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-03-26 07:28 |只看该作者
仔细读一下我写的

splice ARRAY,OFFSET,LENGTH,LIST
splice (@veg,1,1);  # remove $veg[1] ,替换为 LIST. 这里 LIST 没有设定,所以 splice 这里做的只是 remove $veg[1]

@veg 是 qw(peas barley,turnip), 只有两个元素, splice 这里把 $veg[1] 删掉了。@veg 变成 qw(peas)

论坛徽章:
0
5 [报告]
发表于 2006-03-26 16:11 |只看该作者
谢谢。明白了。
理解qw有问题了,他是以空格做为域分割的。
一直认为返回的是三个值,其实是两个值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP