为什么grep不能在perl中的列表上工作

时间:2017-05-12 21:12:50

标签: arrays perl

在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操作?

2 个答案:

答案 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')