整理 (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;
看起来很相似,但由于操作的上下文,结果并不相同。
这很可能是一个愚蠢的问题,但这里是:
在许多模块中,我有多个点 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;
看起来很相似,但由于操作的上下文,结果并不相同。