Perl 函数/子最佳实践

标签 perl

我有一个非常快速的问题。我有一个程序,其中包含许多从 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/

相关文章:

arrays - perls,数组,数组的可变长度

perl - 从远程服务器获取文件并将数据附加到本地服务器文件中

regex - Perl Regex - 打印匹配的值

Perl/TCL 中的正则表达式

perl - Perl 中的这个语句有什么问题?

perl - 如何创建一个内存类,然后将其包含在 Perl 中?

arrays - 不使用 foreach 删除数组值中的一部分

perl - 如何在 Perl 条件中检测无法访问的代码,它总是评估为假?

perl - 如果没有分配给任何变量,对象是否可访问?

mysql - mySQL 有连接时间限制吗?