在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3427|回复: 6

[讨论] perl求助:子程序

[复制链接]
发表于 2015-1-16 15:13:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
perl语言入门第六版第四章的第一个练习题:
如下写法(子程序在结尾)是可以得出25的:
my @fred = qw{1 3 5 7 9};
my $fred_total = &total;
print "$fred_total.\n";
sub total {
      my $sum;
      foreach (@fred) {
              $sum += $_;
      }
      $sum;
}
问题:为什么将子程序放在开头没有结果?
是调用total时没有给定参数的原因么?如果是,为什么在foreach后面的@fred不可以指定到列表呢
 楼主| 发表于 2015-1-16 16:42:28 | 显示全部楼层
发现给定参数列表(@fred),用foreach(@_)后,无论子程序在开头还是结尾都可以正确输出25
my @fred = qw{1 3 5 7 9};
my $fred_total = &total(@fred);
print "$fred_total.\n";
sub total {
      my $sum;
      foreach (@_) {
              $sum += $_;
      }
      $sum;
}
发表于 2015-1-16 21:36:25 | 显示全部楼层
perl的函数不是c的函数。perl的函数能偷偷的看到函数外的变量。
 楼主| 发表于 2015-1-18 16:20:07 | 显示全部楼层
回复 3# gaojun927


   不明白这为什么是"子程序放在开头没结果,而放在结尾有结果"的答案,能详细点么
发表于 2015-1-21 16:02:57 | 显示全部楼层
回复 4# duke_wang

sub函数可以看到外面的my变量和our变量,因此不需要被当作参数传递也可以使用。但是如果你把my变量放在后面,又没有其他的our变量,函数会认为你使用的变量没有定义,默认为空。
如果你使用usr strict,perl就会报 变量未定义的错。
 楼主| 发表于 2015-1-21 16:46:40 | 显示全部楼层
回复 5# gaojun927


    谢谢,刚刚学习不久,慢慢理解下
发表于 2018-1-19 02:48:33 | 显示全部楼层
學習了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-18 12:40 , Processed in 0.019303 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表