如果在一个子程序中需要调用另一个子程序的返回值时......

如果在一个子程序中需要调用另一个子程序的返回值时......

我写了两个子程序,在写第二个子程序的时候需要调用第一个子程序的一个返回值(该子程序的返回值是一个哈希的引用),我是否需要将该返回值传递给第二个子程序才能正常调用? 不能在第二个子程序中直接调用第一个子程序的返回值吗?

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

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

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


sub p2 {
express...

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

}
看了一会儿。。看懂你的意思了,直接调用就可以啊
比如@b = p2(p1($_));
这样是没有问题的吧?
还是我理解错了?
如下所示, (题外话:但发现不成功,只有将第一个子程序的返回传递给第二个子程序才行, 不知有何好的办法)
$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;

}

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

哦,看懂了,你想在子程序中直接使用全局变量
我这里可以成功的啊
我胡乱写了一通,你参考下

[Copy to clipboard] [ - ]
CODE:
use strict;        use warnings;
my $gg="hello\n";
my $hashref={"ab"=>"AB","cd"=>"CD"};
sub2(sub1($hashref));
pr();

sub sub1{
        my $hashref=shift;
        return $hashref;
}

sub sub2{
        my $hr=shift;
        print $hr->{cd},"\n";
}
sub pr
{print $hashref->{ab};
}

是不是可以把那个要传递的值 弄成全局变量啊???


QUOTE:
原帖由 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;
...

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

但不知是否可以,也许从理论上我已经错了,新手。