整理 (perl) return

Making a tidy (perl) return

这很可能是一个愚蠢的问题,但这里是:

在许多模块中,我有多个点 return 到调用脚本。但在实际 returning 之前,我需要做一些整理工作,例如将目录更改为父目录等。

我写了一个针对所有 return 点的子程序。但是,我能想到的唯一使用方法是

tidy_up();
return (LIST);

我想要一个接受 returning 值 LIST 的子程序,并且该子程序也 return 到调用脚本:

tidy_up_and_return(LIST);

这可能吗?

这可能不是个好主意。在调用者上下文中有很多微妙的问题等待发生。

但是 - return 实际上并不是子程序所需要的 - 如果没有 return 则子程序隐式地 return 是最后一次计算的结果。

#!/usr/bin/env perl

use strict;
use warnings;

sub parent { 
   my @results = ( "one", "two" ); 
   child ( @results, "some_other_value" ); 
}

sub child {
   return ( @_ ); 
}

print parent();

因为 child return 是参数 - 因为 parent 的最后一行是调用 child - 然后 parent 隐式 return 是 child.

的结果

不过我建议您不要这样做,因为我称之为糟糕的风格 - 未来的维护程序员不一定知道您在做什么。

您可以通过以下方式略微改进:

return child ( @results, "some_other_value" ); 

但请记住,您最终可能会在 return 上下文中遇到一些奇怪的情况 - 例如:

#!/usr/bin/env perl

use strict;
use warnings;

sub parent {
    my @results = ( "one", "two" );
    return child( @results, "some_other_value" );
}

sub child {
    return (@_);
}

my $result =  parent();
print $result;

对比

sub parent2 {
    my @results = ( "one", "two" );
    return ( @results, "some_other_value" );
}

my $result =  parent2();
print $result;

看起来很相似,但由于操作的上下文,结果并不相同。