免费注册 查看新帖 |

Chinaunix

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

Perl subroutine中参数列表的取值,很智能,还是多管闲事? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-16 16:38 |只看该作者 |倒序浏览
sub maxf{
    my ($ava, @str) = @_;
    print "The parameter is: @_. \n";
    print "After passed, the variable is: $ava.\n";
    print "the list is: @str.\n";
}

&maxf (qw\There are strings to be passed\);

输出:
The parameter is: There are strings to be passed.
After passed, the variable is: There.
the list is: are strings to be passed.

1. 为什么不让$ava为T(传递的列表的第一个字母)?
2. 为什么将截取后的列表赋值给@str,而不是将整个列表赋值给@str?
3. 这方面有什么明确的规定吗?

论坛徽章:
0
2 [报告]
发表于 2009-12-16 16:42 |只看该作者
qw\There are strings to be passed\ 是一个列表 There 是它的第一个元素。。。 与智能没关系。

论坛徽章:
0
3 [报告]
发表于 2009-12-16 16:44 |只看该作者
1. 为什么不让$ava为T(传递的列表的第一个字母)?
2. 为什么将截取后的列表赋值给@str,而不是将整个列表赋值给@str?
3. 这方面有什么明确的规定吗?



1. 因为你传的参数是一个list,T不是list的第一个元素。
2. 这是基本的list赋值操作,@_的第一个元素赋值给$avr,剩余的元素赋值给@str,左边和右边都是list,位于list上下文里。
3. perl就是这样设计的啦~ 读Learning Perl,不明白再读programming Perl,再不明白asking here,最后去问larry wall.

论坛徽章:
0
4 [报告]
发表于 2009-12-16 16:50 |只看该作者

论坛徽章:
0
5 [报告]
发表于 2009-12-16 16:58 |只看该作者
如果你想要$ava值为T,这样应该就是了:

  1. sub maxf{
  2.     my ($tmp, @str) = @_;
  3.     my $ava = substr($tmp, 0, 1);
  4.     unshift @str, substr($tmp, 1);
  5.     print "The parameter is: @_. \n";
  6.     print "After passed, the variable is: $ava.\n";
  7.     print "the list is: @str.\n";
  8. }
复制代码

论坛徽章:
0
6 [报告]
发表于 2009-12-16 17:05 |只看该作者

回复 #3 兰花仙子 的帖子

仙子姐姐,看完learning perl后,是看intermediate perl 还是 programming perl ?

论坛徽章:
0
7 [报告]
发表于 2009-12-16 17:08 |只看该作者

回复 #6 gaochong 的帖子

我认为intermediate perl容易懂一点。
看完这本后再看mastering perl.
programming perl仅作参考。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP