我有一個原型這樣的子程序:子程序與哈希和可選的標量參數
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