我是一個Perl新手,目前正試圖理解上述錯誤消息。Perl:函數沒有足夠的參數
我有這段代碼(仍然主要用於測試pourposes)
#!/usr/bin/perl
use strict;
use warnings;
my %info = (autor => "Karryanna", jazyk => "cs");
vec([%info]);
sub vec
{
my ($hashref) = @_;
print $hashref->autor . "\n";
}
當我嘗試運行它,它給這個錯誤信息
Not enough arguments for vec at test.pl line 8, near "])"
當我試圖谷歌它,我發現this site,這只是讓我覺得,在子程序調用之前與&符號就足夠了。我試過了,它確實有幫助。
但是,當我後來遇到另一個問題時,使用谷歌搜索將我帶到this SO question。重點是答案的狀態
你應該調用沒有&的子例程,例如,填充(...),除非您特別想要覆蓋子的原型。如果你不知道原型是什麼,只是不要使用&。
我完全不知道Perl語境中的原型是什麼。 那麼 - 現實是怎樣的?我應該只使用&還是有其他可能更「乾淨」的解決方案?
謝謝! (順便說一句,如果我可能會問一些OT問題 - 我應該在調用它之後真的定義子例程嗎?這對我來說看起來很不自然,但是,我已經發現,恢復順序會使編譯器抱怨)
'vec'是一個內置函數。 – aschepler 2013-02-23 17:31:46
除了aschepler剛纔提到的'vec()'是一個內置函數(與你的子名稱衝突),你應該像這樣傳遞你的哈希引用:'vec(\%info)',否則你將擁有更復雜的哈希結構的問題。 – TLP 2013-02-23 17:33:48
我大概同意在這種情況下調用vec(\%info)會更好。但是,我想編輯子程序中的內容而不影響子程序之外的變量,我不得不像現在這樣調用它,它是正確的嗎? – Karryanna 2013-02-23 17:49:44