免费注册 查看新帖 |

Chinaunix

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

perl函数参数传递的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-17 17:57 |只看该作者 |倒序浏览
RT
请教一个perl函数参数传递的问题。刚看到javascript的传址和传值的问题。对于数字等基本类型的变量在传递给函数时是传值操作即函数中的运算不会影响变量的值。
但是在perl中同样进行测试发现变量传递给函数其原始值被函数更改。
请问是否在函数参数传递的时候都是按照变量的引用来传递的。
print $b这一行输出的值是1,也就是$b=$a这一段仅仅是值拷贝而不是引用

#!/usr/bin/perl  -w
use strict;
my $a=1;
my $b=$a;





sub add_to_total {
        ($a,$b)   = @_;
        $a+=$b;
}

&add_to_total($a,$b);
print $a . "\n";                  #输出2
print $b . "\n";                 #输出1

论坛徽章:
3
摩羯座
日期:2013-09-04 12:01:36申猴
日期:2013-10-23 12:12:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34
2 [报告]
发表于 2013-06-18 09:03 |只看该作者
本帖最后由 grshrd49 于 2013-06-18 09:04 编辑
  1. my ($a,$b)   = @_;
复制代码
结果就完全不一样了 , 所以命名规范和作用域很重要
这只有10行代码要是10万行代码, 楼主就等死把

论坛徽章:
0
3 [报告]
发表于 2013-06-18 09:21 |只看该作者
回复 2# grshrd49
可能我的意思没有表述得很明白,我的意思是在函数中对函数外的全局变量进行操作。而my ($a,$b)相当于另外定义新的变量。
下面的例子可能更能表达我的意思。
#!/usr/bin/perl  -w
use strict;
#此脚本是为了测试perl是否有传值的概念,测试结果为无。简单变量传递给函数操作会改变函数的原始值
my $a=1;
my $b=$a;

sub add_to_total {
        $_[0]+=$_[1]
}

&add_to_total($a,$b);
print $a . "\n";              #输出2
print $b . "\n";              #输出1



   

论坛徽章:
3
摩羯座
日期:2013-09-04 12:01:36申猴
日期:2013-10-23 12:12:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34
4 [报告]
发表于 2013-06-18 09:30 |只看该作者
本帖最后由 grshrd49 于 2013-06-18 09:31 编辑
yinsong198611 发表于 2013-06-18 09:21


别把自己绕进去了, perl本来就是很自由的, 你可以限制自己的脚本代码 也可以自由自在.
主要看你用perl做什么勒
百行内的脚本 ,当然越简单越好, 只要运行正常就ok拉
要是当作项目或者产品,当然要规矩多多
就好比你说的传值, 你现在可能只是想把a b用个函数做个简单的操作, 不想再 在这个函数中多加变量,ok perl可以满足你的要求
你觉得呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP