2012-11-05 5 views
6

Ich mag die grep Funktion verwenden, um eine Liste von Werten zu filtern, und einen Verweis auf die gefilterten Liste in eine Hash speichern. Was ich nach ist so etwas wie:Wie man einen Verweis auf die Liste von Perl grep zurück zu bekommen?

my $allValues = [ 
    'a', 
    'unwanted value', 
    'b', 
    'c', 
]; 

$stuff = { 
    'values' => grep { $_ ne 'unwanted value' } @$allValues 
}; 

Nur, wenn ich versuche, dass die %$stuff Hash ist:

 
$VAR1 = { 
      'b' => 'c', 
      'values' => 'a' 
     }; 

Gibt es eine Möglichkeit den anonymen Hash-Erstellung Code zu beheben, so dass ich stattdessen erhalten:

 
$VAR1 = { 
      'values' => [ 
         'a', 
         'b', 
         'c' 
         ] 
     }; 

Aber nicht durch eine lokale Variable erstellen oder ein Unterprogramm (in anderen Worten, alle in-line) nennen?

+1

Sie nicht einen Verweis auf eine Liste in Perl haben. Sie können nur einen Verweis auf ein Array haben. –

Antwort

11

versuchen mit:

$stuff = { 
    'values' => [ grep { $_ ne 'unwanted value' } @$allValues ] 
}; 
+1

Perfekt! Danke für die schnelle Antwort. –

+0

Wie funktioniert das? Enthält diese Lösung nur Bezug auf das Ergebnis der grep zurückgeben oder Speicher für das gesamte Array neu zuweisen? Ich mache mir Sorgen um die Leistung. – PolinaC

Verwandte Themen