2012-08-30 45 views
2

它已經有一段時間,所以道歉,爲我的生鏽問題...Perl中的哈希聲明中是否可以使用子程序返回值(作爲數組)?

鑑於目前的(工作)代碼:

my @keywords = ('foo', 'bar', 'kan', 'moo', 'ban', 'noob');  
my @good = grep { /oo/ } @keywords; 
my @bad = grep { !/oo/ } @keywords; 

my %data = (
    keywords => \@keywords, 
    good => \@good, 
    bad => \@bad 
); 

print Dumper(\%data); 

的聲明都只是短暫的變量,以確保哈希與結束數組引用。有沒有一種方法可以將上述內容合併到哈希聲明中的方法中?

我想在類似於以下(非工作代碼)的東西到達:

my @keywords = ('foo', 'bar', 'kan', 'moo', 'ban', 'noob');  

my %data = (
    keywords => \@keywords, 
    good => grep { /oo/ } @keywords, 
    bad => grep { !/oo/ } @keywords 
); 

print Dumper(\%data); 
+2

替補不能返回數組,只是一個標量列表。如果你想要一個散列元素來包含對數組的引用,那麼你必須創建兩個元素,這就是'[]'所做的。 – ikegami

+0

您可以使用qw()函數創建帶引號的列表,例如'qw(foo bar)'而不是'foo','bar''。 – TLP

回答

8

是,只需使用匿名數組引用

my %data = (
    keywords => [@keywords], 
    good => [grep { /oo/ } @keywords], 
    bad => [grep { !/oo/ } @keywords], 
); 

print Dumper(\%data); 
+0

好悲傷......「生鏽」並沒有開始解釋它。謝謝。 – jheddings

+2

您可以使用'\ @關鍵字'而不是'[@keywords]'。 (前者引用原始數組,而後者創建數組的副本並引用副本。) – cjm