免费注册 查看新帖 |

Chinaunix

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

如果在一个子程序中需要调用另一个子程序的返回值时...... [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-19 14:17 |只看该作者 |倒序浏览
我写了两个子程序,在写第二个子程序的时候需要调用第一个子程序的一个返回值(该子程序的返回值是一个哈希的引用),我是否需要将该返回值传递给第二个子程序才能正常调用? 不能在第二个子程序中直接调用第一个子程序的返回值吗?

如下所示, (题外话:但发现不成功,只有将第一个子程序的返回传递给第二个子程序才行, 不知有何好的办法)
$a = p1($_);

@b = p2($c);
#######################

sub  p1 {
express...
return $hashref;
}


sub p2 {
express...

$d = $a->{key};
.....
return @e;

}

论坛徽章:
0
2 [报告]
发表于 2007-10-19 14:42 |只看该作者
看了一会儿。。看懂你的意思了,直接调用就可以啊
比如@b = p2(p1($_));
这样是没有问题的吧?
还是我理解错了?

论坛徽章:
0
3 [报告]
发表于 2007-10-19 16:23 |只看该作者
如下所示, (题外话:但发现不成功,只有将第一个子程序的返回传递给第二个子程序才行, 不知有何好的办法)
$a = p1($_);

@b = p2($c);  ##$c和$a没有什么关系,但如果不能在后面直接调用第一个子程序的返回值,就只能将这里写成 @b = p2($c,$a), 这样写程序是work的。
#######################

sub  p1 {
express...
return $hashref;
}


sub p2 {
express...

$d = $a->{key}; #本意是想在这里直接调用$a引用,将其反引用的一个value传递给$d. 由于$a 是一个全局变量,所以,没有通过参数传递,但发现不成功,只能用@b = p2($c,$a)。
.....express.......借助$d获得最后的@e
return @e;

}

想知道是不是没有其它的办法了。

[ 本帖最后由 lipch 于 2007-10-19 16:25 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-10-19 16:38 |只看该作者
哦,看懂了,你想在子程序中直接使用全局变量

论坛徽章:
0
5 [报告]
发表于 2007-10-19 16:44 |只看该作者
我这里可以成功的啊
我胡乱写了一通,你参考下

  1. use strict;        use warnings;
  2. my $gg="hello\n";
  3. my $hashref={"ab"=>"AB","cd"=>"CD"};
  4. sub2(sub1($hashref));
  5. pr();

  6. sub sub1{
  7.         my $hashref=shift;
  8.         return $hashref;
  9. }

  10. sub sub2{
  11.         my $hr=shift;
  12.         print $hr->{cd},"\n";
  13. }
  14. sub pr
  15. {print $hashref->{ab};
  16. }
复制代码

论坛徽章:
0
6 [报告]
发表于 2007-10-19 17:27 |只看该作者
是不是可以把那个要传递的值 弄成全局变量啊???

论坛徽章:
0
7 [报告]
发表于 2007-10-19 21:15 |只看该作者
原帖由 perljoker 于 2007-10-19 16:44 发表
我这里可以成功的啊
我胡乱写了一通,你参考下

use strict;        use warnings;
my $gg="hello\n";
my $hashref={"ab"=>"AB","cd"=>"CD"};
sub2(sub1($hashref));
pr();

sub sub1{
        my $hashref=shift;
...


实际这样作也是将子函数的值传递给了另一个子函数,我是问能否在子函数中直接凋用另一个子函数的返回值。相当于子函数的返回值是一个全局标题,在另一个子函数直接调用样。

但不知是否可以,也许从理论上我已经错了,新手。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP