我有一个非常简短的问题。我有一个带有许多从主函数运行的函数的程序。最佳实践是先定义函数,然后再在主函数中调用它们,还是相反?
例如:
sub myFunction {
#Do something
}
my $stuff = myFunction();
或者:
my $stuff = myFunction();
sub myFunction {
#Do something
}
非常抱歉,我没有接受过任何正式培训,我在网上看到过两种不同的做法。谢谢。
我有一个非常简短的问题。我有一个带有许多从主函数运行的函数的程序。最佳实践是先定义函数,然后再在主函数中调用它们,还是相反?
例如:
sub myFunction {
#Do something
}
my $stuff = myFunction();
或者:
my $stuff = myFunction();
sub myFunction {
#Do something
}
非常抱歉,我没有接受过任何正式培训,我在网上看到过两种不同的做法。谢谢。
myFunction
处于$stuff
的作用域内,但它不应该在那里。不过这很容易解决。{
my $stuff = myFunction();
}
sub myFunction {
#Do something
}
好的,这并不是一个大问题,因为我把所有顶层代码放在一个块中,即使它出现在最后。这样看起来更整洁,也更容易转换为子函数,从中我可以return
。
sub myFunction {
#Do something
}
sub main {
return 0 if is_nothing_to_do();
my $stuff = myFunction();
...
return 0;
}
exit(main(parse_args));
许多语言要求在调用子程序之前声明它们。但这在 Perl 中很少需要,尽管有一些情况下确实需要。具有原型的子程序就是其中之一。如果您想将代码放在顶部,甚至在那之前,您需要添加声明。
sub myFunction(&@);
{
my $stuff = myFunction { ... } ...;
}
sub myFunction(&@) {
#Do something
}
您可能很少需要这样做,因为除了一些罕见的原型用法外,其他情况都不鼓励使用,而其他场景甚至更加罕见。
如果将顶层代码放在子例程之前,可能会意外跳过初始化代码。
对比:
print my_counter(), "\n"; # Warns, then prints a blank line
...
{
my $counter = 1;
sub my_counter {
return $counter++;
}
}
...
and
...
{
my $counter = 1;
sub my_counter {
return $counter++;
}
}
...
print my_counter(), "\n"; # Prints 1
许多语言要求在调用函数之前声明它们,因此更多的人会更熟悉将顶层代码放在底部。
use strict;
use warnings;
exit main();
sub main {
do_this();
dont_do_that();
cant_you_read_the_signs();
return 0;
}
sub do_this {
....
}
...
将主要代码放在名为“main”的实际函数或块中可以帮助您避免在程序中使用全局变量。
sub listfiles
,这样你通常不需要实际阅读代码。如果你有很多子程序,你可能想创建一个模块或多个模块来创建一些结构。 - TLP