2015-03-19 37 views
0

我試圖將參數發送給一個函數,然後在該函數中,加入參數來創建一個字符串。加入參數 - Perl

我想

method send_data(\@args) { 
     my $string = join('%', @args); 
     print $string . '\n'; 
} 

send_data('test1', 'test2', 'test3'); 

的代碼,我知道我能做到這樣:

my @params = ('test1', 'test2', 'test3'); 
send_data(\@params); 

但我更喜歡第一種方法。如果沒有Method::Signatures,您可以這樣做:

sub send_data { 
    my (@args) = @_; 
    my $string = join('%', @args); 
    print $string . '\n'; 
} 

send_data('test1', 'test2', 'test3'); 

幫助?

+0

我沒有定期使用'method'語法,但是在我看來,簽名需要一個arrayref,但是您要發送一個參數列表。在你的第一個例子中,括號裏面的['test1','test2','test3']'可能有幫助嗎?無論如何,請編輯您的問題更加精確! – 2015-03-19 08:52:37

+1

@Biffen:不,它沒有。你正在考慮賦值給一個標量變量。 '我(@args)= @ _'和'my @args = @ _'表現完全一致。 – Borodin 2015-03-19 10:37:18

+0

@Borodin當然。 Mea culpa。 – Biffen 2015-03-19 10:48:43

回答

2

隨着Method::Signatures,如果你使用method,則第一個參數將被佔用作爲隱含$self變量只留下剩餘的參數@args

由於這個功能是不是你應該使用funcmethod在這種特殊情況下,而不是一類的一部分,沒有必要爲\之一:

func send_data(@args) { 
    my $string = join('%', @args); 
    print $string . '\n'; 
} 

send_data('test1', 'test2', 'test3'); 

注:這也將打印文本字符串\n - 如果你想要一個實際的換行符,你必須用來代替單引號。

+0

謝謝!這解決了它! – user2524169 2015-03-19 09:16:38