我有一个非常快速的问题。我有一个程序,有很多从main运行的函数。是最好的做法是首先使用main,然后是main的调用,或者反过来?
例如:
sub myFunction {
#Do something
}
my $stuff = myFunction();
或者:
my $stuff = myFunction();
sub myFunction {
#Do something
}
对于任何无知感到抱歉,我没有接受任何正式培训,我已经在网上看到了两种方式。感谢
答案 0 :(得分:8)
我建议将代码放在底部。
后一个片段很差,因为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++;
}
}
...
和
...
{
my $counter = 1;
sub my_counter {
return $counter++;
}
}
...
print my_counter(), "\n"; # Prints 1
许多语言要求您在调用潜艇之前声明潜艇,以便更多人更熟悉底层的顶级代码。
答案 1 :(得分:5)
无所谓,只要您能找到需要查找的代码即可。我通常喜欢这样设置我的代码:
use strict;
use warnings;
exit main();
sub main {
do_this();
dont_do_that();
cant_you_read_the_signs();
return 0;
}
sub do_this {
....
}
...
将主代码放在一个名为“main”的实际函数或块中,有助于防止使用全局变量污染程序。