2013-07-10 9 views
6

Der Code verweisen:Wie der Rückgabewert eines perl sub

my $compare = List::Compare->new(\@hand, \@new_hand); 
print_cards("Discarded", $compare->get_Lonly()) if ($verbose); 

print_cards erwartet (Skalar, Bezug auf Array).
get_Lonly gibt Array zurück. Was ist die Syntax, um das in eine Referenz zu konvertieren, damit ich es an print_cards übergeben kann? \@{$compare->getLonly()} funktioniert beispielsweise nicht.

Danke!

Antwort

14

Sie wollen wahrscheinlich

print_cards("Discarded", [$compare->get_Lonly]) 

Subroutinen-Arrays nicht zurück, kehren sie eine Liste von Werten. Wir können eine Array-Referenz mit [...] erstellen.

Die andere Variante wäre eine explizite Array

if ($verbose) { 
    my @array = $compare->get_Lonly; 
    print_cards("Discarded", \@array) 
} 

Die erste Lösung ist eine Abkürzung davon zu machen.


Die @{ ... } ist ein Dereferenzierungsoperator. Es erwartet eine Array-Referenz. Das funktioniert nicht so, wie du denkst, wenn du ihm eine Liste gibst.

Verwandte Themen