数组 – 如何在Perl中不使用循环来过滤数组?

前端之家收集整理的这篇文章主要介绍了数组 – 如何在Perl中不使用循环来过滤数组?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在这里,我试图仅过滤没有子字符串世界的元素,并将结果存储回同一个数组。在Perl中这样做的正确方法是什么?
$ cat test.pl
use strict;
use warnings;

my @arr = ('hello 1','hello 2','hello 3','world1','hello 4','world2');

print "@arr\n";
@arr =~ v/world/;
print "@arr\n";

$ perl test.pl
Applying pattern match (m//) to @array will act on scalar(@array) at
test.pl line 7.
Applying pattern match (m//) to @array will act on scalar(@array) at
test.pl line 7.
Syntax error at test.pl line 7,near "/;"
Execution of test.pl aborted due to compilation errors.
$

我想把数组作为参数传递给一个子程序。

我知道一种方式将是这样的东西

$ cat test.pl 
use strict;
use warnings;

my @arr = ('hello 1','world2');
my @arrf;

print "@arr\n";

foreach(@arr) {
    unless ($_ =~ /world/i) {
       push (@arrf,$_); 
    }
}
print "@arrf\n";

$ perl test.pl
hello 1 hello 2 hello 3 world1 hello 4 world2
hello 1 hello 2 hello 3 hello 4
$

我想知道是否有办法没有循环(使用一些简单的过滤)。

解决方法

那将是grep():
#!/usr/bin/perl

use strict;
use warnings;

my @arr = ('hello 1','world2');
my @narr = ( );

print "@arr\n";
@narr = grep(!/world/,@arr);
print "@narr\n";

猜你在找的Perl相关文章