2011-11-07 7 views
9

Rozważmy następujący kod:Jak zmienić tablicę zwróconą z funkcji (np. Podziału) na odwołanie do tablicy?

@tmp = split(/\s+/, "apple banana cherry"); 
$aref = \@tmp; 

Poza tym jest nieeleganckie, powyższy kod jest nietrwały. Powiedzieć, że po nim tej linii:

@tmp = split(/\s+/, "dumpling eclair fudge"); 

Teraz $$aref[1] jest "Eclair" zamiast "banana".

Jak mogę uniknąć używania zmiennej temp?

koncepcyjnej, mam na myśli coś jak

$aref = \@{split(/\s+/, "apple banana cherry")}; 
+4

Funkcje nie mogą zwracać tablic. 'split' zwraca listę skalarów, tak jak każdy sub. – ikegami

Odpowiedz

19

Można to zrobić, jeśli chcesz tablicę-Ref:

my $aref = [ split(/\s+/, "apple banana cherry") ]; 
3

wyobraziłem go:

$aref = [split(/\s+/, "apple banana cherry")]; 
2

Podczas gdy ja lubię odpowiedź MU (i najpierw używałbym tego podejścia), należy pamiętać, że zmienne mogą być łatwo zdyszane, nawet bez korzystając z funkcji, wyobraź sobie:

my $aref = do { 
    my @temp = split(/\s+/, "apple banana cherry"); 
    \@temp; 
}; 
print join("-", @$aref), "\n"; 
# with warnings: Name "main::temp" used only once: possible typo at ... 
# with strict: Global symbol "@temp" requires explicit package name at ... 
print join("-", @temp), "\n"; 

Szczęśliwe kodowanie.

Powiązane problemy