返回Perl子例程

时间:2016-02-11 16:06:07

标签: perl reference scope

此代码之间的区别是什么:

sub createOutputFile {
    my $filepath = shift;
    open my $fh, '>', $filepath;
    return $fh;

当最后一行作为参考return \$fh返回时?

我知道$ fh存在于createOutputFile子例程的本地范围内,但是当我不使用引用时返回了什么?只要我使用不同的文件路径创建输出文件,当我使用引用时会遇到一些问题吗?

1 个答案:

答案 0 :(得分:3)

如果您返回参考,您将获得参考。这意味着

print $ref

将返回

REF(0x600077f10)  

您需要取消引用它才能获取文件句柄。离开子程序后它不会消失,因为它仍然是指向它的引用:你返回的那个(给定你将它分配给一个变量)。您可能知道,Perl使用引用计数,因此文件句柄不会被垃圾收集,直到没有引用它为止。

请注意,您无法在菱形运算符中使用解除引用(它被解释为glob),因此您必须使用变量

my $fh = $$fh_ref;
while (<$fh>) {

或直接致电readline

while (readline $$fh_ref) {

文件路径与返回文件句柄的方式完全无关。