我有一个原型这样的子程序:子程序与哈希和可选的标量参数
sub printFoo(%) {
my (%hashFoo)[email protected]_;
# do stuff with the hash
}
但我想在这样的第二标参数可选通:
sub printFoo(%;$) {
my (%hashFoo,$optionalArg)[email protected]_;
# do stuff with the hash and the optional arg
}
我明白,在警告模式下,这是一个禁忌,但我不知道为什么。
我想我可以使用全局变量标志,但任何关于如何优雅地完成这种类型的函数签名的建议?
您可以将引用传递给散列而不是散列本身 –
原型不是用于创建函数签名,而是让函数具有类似于内置函数的行为。关于原型的一般建议是不要使用它们。该函数将把所有@_变成%hashFoo。您可以检查@_的长度并在将其解包到%hashFoo之前弹出可选参数。 – xxfelixxx
最简洁的解决方案是将可选参数包含在(foo => bar,baz => 123,special => 3)params的其余部分中,并且专门处理特殊参数(如果它是没有通过) – xxfelixxx