免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3706 | 回复: 11

匿名数组参数传递,为什么取不到呢? [复制链接]

论坛徽章:
0
发表于 2010-03-22 15:50 |显示全部楼层
看PERL实例精解,如下习题:

模块:
sub add_course {
$s=shift;
#这样使用正确得到结果 $n=shift; print "@$n","\n";
# 这样使用反而得不到结果:
@a=@_;
print $a[0]->[0] ; 得到C++,正确。

}

调用时,传递参数
$a->add_course(["C++","JAVA",]);

模块中用:
@a=@_;
print $a[0]->[0] ; 得到C++,正确
模块中用
$a=@_;
print @$a;什么也得不到,为什么呢?

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
发表于 2010-03-22 16:56 |显示全部楼层
$a=@_;是在scalar context,$a得到的是@_里面的元素数量

论坛徽章:
0
发表于 2010-03-22 17:08 |显示全部楼层
同意楼上

论坛徽章:
0
发表于 2010-03-22 17:12 |显示全部楼层
本帖最后由 xiaojao 于 2010-03-22 17:29 编辑
$a=@_;是在scalar context,$a得到的是@_里面的元素数量
yybmsrs 发表于 2010-03-22 16:56



    这里的$a得到的肯定不是元素个数,而是一个地址,@_的地址。

按书中例子,当传递参数时,第一个是调用的名,可以shift掉,余下的来的@_应该是一个匿名数组,可以使用$a来存放其地址啊。可是,打印不出来。
而使用@a时,必须用$a[0]->[0]才得到正确结果,而不是$a[0]

论坛徽章:
0
发表于 2010-03-22 17:49 |显示全部楼层
你@{$a}  看可以不。。

论坛徽章:
0
发表于 2010-03-22 18:07 |显示全部楼层
你@{$a}  看可以不。。
yzlp20szlg 发表于 2010-03-22 17:49



打出来还是:    ARRAY(0x277034)
print \@{$a};  这个也不行。

论坛徽章:
0
发表于 2010-03-22 21:27 |显示全部楼层
我这里一切正常。或者楼主可以试下$s->[0];

论坛徽章:
0
发表于 2010-03-22 21:40 |显示全部楼层
这里的$a得到的肯定不是元素个数,而是一个地址,@_的地址。

按书中例子,当传递参数时,第一 ...
xiaojao 发表于 2010-03-22 17:12



    不要那么肯定  呵呵

2楼的解释说对的

论坛徽章:
0
发表于 2010-03-23 09:01 |显示全部楼层
本帖最后由 toniz 于 2010-03-23 09:11 编辑

     \@_  这样才是地址

论坛徽章:
0
发表于 2010-03-23 10:06 |显示全部楼层
回复 9# toniz


    谢谢了,确实二楼说的对。$a=@_得到1。
那如果如下面的这种方式:

$a=\@_ #得到地址, print $a得到ARRAY(0x277034)
可为什么print $$a[0]得不到第一个元素,
必须这样写:print $$a[0]->[0];  才得到预期的C++呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP