在Perl中,
my @lista = ['THE', 'KITE', 'RUNNER'];
my @listb = grep { $_ ne 'KITE' } @lista;
print "" . Data::Dumper->Dump(\@listb);
时不打印任何内容
my @lista = ('THE', 'KITE', 'RUNNER');
my @listb = grep { $_ ne 'KITE' } @lista;
print "" . Data::Dumper->Dump(\@listb);
打印一个包含' THE' '转轮'
为什么grep在[]
中定义数组时不起作用?
如何对[]
中定义的数组进行grep操作?
答案 0 :(得分:11)
[]
不返回数组;它返回对数组的引用。这样,@lista
只包含一个元素。您正在将该引用的字符串化(类似ARRAY(0x61dc18)
)与KITE
进行比较。看到这两个字符串完全不同,grep
会返回引用,并将其存储在@listb
中。
我想你想要以下内容:
my $array_a = ['THE', 'KITE', 'RUNNER'];
my @array_b = grep { $_ ne 'KITE' } @$array_a;
print Data::Dumper->Dump(\@array_b);
答案 1 :(得分:0)
[]
适用于数组,但()
返回一个arrayref。要使用数组,请改用use Data::Dumper;
my $lista = ['THE', 'KITE', 'RUNNER'];
my @listb = grep { $_ ne 'KITE' } @$lista;
print Dumper \@listb;
。
以下是您的计划的两个替代方案:
use Data::Dumper;
my @lista = ('THE', 'KITE', 'RUNNER');
my @listb = grep { $_ ne 'KITE' } @lista;
print Dumper \@listb;
OR
a = lambda x: input('Function in terms of x')