我是 perl 的新手,我似乎找不到任何关于如何知道子例程是否采用参数的信息。
在其他语言(例如python、java等)中,很明显,一个方法/函数通常是这样的:
def my_func(arg1, arg2):
# do something
但是在 perl 中,它只是:
sub my_func {
my params = @_;
# do something
}
但我见过这样的例子,其中甚至没有包含 my params = @_,但是子例程被调用并传递了一个参数。
例如
sub my_func {
my $self = shift;
my $fieldstr = 'tbl'.$self->db_func.'*,';
my $sql = "SELECT $fieldstr FROM tbl".$self->db_func.'WHERE'.$self->...;
my $sth = $self->other_func->my_func($sql) or return undef;
}
所以我想知道是否有某种准则可以知道子例程是否采用参数?
最佳答案
请看my answer to a similar question .
Perl 非常灵活,因为子例程可以简单地忽略多余的参数,为丢失的参数提供默认值,或者死
如果参数完全是什么预期。
Perl 的作者,Larry Wall , 是一位语言学家,其背后的基本原理是子程序的行为类似于命令式动词;所以就像你可以说“拿木头”、“从棚子后面拿木头”,或者“用拖拉机”,你同样可以说
fetch($wood)
fetch($wood, $shed)
fetch($wood, $shed, $tractor)
甚至
fetch($wood, {from => 'shed', using => 'tractor'})
由子例程来确定需要什么。
应避免使用子例程原型(prototype),因为它们具有以不明显的方式改变代码行为的副作用。它们仅用于编写额外的语言结构;一个很好的例子是 Try::Tiny
.
关于perl - 如何知道perl子例程是否带参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26410459/