可以在Perl中的哈希声明中使用子例程返回值(作为数组)吗?

jhe*_*ngs 2 perl grep hashtable subroutine

已经有一段时间了,为我生锈的问题道歉......

鉴于当前(工作)代码:

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);
Run Code Online (Sandbox Code Playgroud)

声明只是瞬态变量,以确保散列以数组引用结束.有没有办法巩固上面的方法来简单地使用哈希声明中的方法?

我试图得到类似于以下内容(非工作代码):

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

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

print Dumper(\%data);
Run Code Online (Sandbox Code Playgroud)

amo*_*mon 8

是的,只需使用匿名数组ref:

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

print Dumper(\%data);
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用`\ @ keywords`而不是`[@keywords]`.(前者引用原始数组,而后者生成数组的副本并引用副本.) (2认同)