我有一个非常快速的问题。我有一个程序,其中包含许多从 main 运行的功能。最好的做法是先调用函数,然后调用 main,还是反过来?
例如:
sub myFunction {
#Do something
}
my $stuff = myFunction();
或者:
my $stuff = myFunction();
sub myFunction {
#Do something
}
抱歉,我没有接受任何正式培训,我在网上看到了两种方式。谢谢
最佳答案
我建议将您的代码放在底部。
第一期
后一个片段很差,因为 myFunction
在 $stuff
范围内,但不应该。不过,这很容易解决。
{
my $stuff = myFunction();
}
sub myFunction {
#Do something
}
好的,所以这不是一个大问题,因为我将所有顶级代码放在一个 block 中,即使它位于最后。这样对我来说看起来更干净,并且更容易转换为我可以
return
的sub .sub myFunction {
#Do something
}
sub main {
return 0 if is_nothing_to_do();
my $stuff = myFunction();
...
return 0;
}
exit(main(parse_args));
第 2 期
许多语言要求您在调用它们之前声明您的 subs。这在 Perl 中很少需要,尽管有几个场景需要它。带有原型(prototype)的潜艇就是其中之一。如果您想将代码放在顶部,则需要在此之前添加声明。
sub myFunction(&@);
{
my $stuff = myFunction { ... } ...;
}
sub myFunction(&@) {
#Do something
}
您可能永远不必这样做,因为不鼓励使用原型(prototype)的一些罕见用途,而其他情况甚至更罕见。
第 3 期
通过将顶级代码放在子例程之前,您可能会意外跳过初始化代码。
比较:
print my_counter(), "\n"; # Warns, then prints a blank line
...
{
my $counter = 1;
sub my_counter {
return $counter++;
}
}
...
和
...
{
my $counter = 1;
sub my_counter {
return $counter++;
}
}
...
print my_counter(), "\n"; # Prints 1
第 4 期
许多语言要求您在调用它们之前声明您的 subs,因此更多的人会更熟悉底层的顶级代码。
关于Perl 函数/子最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28995622/