Perl:从数组中删除具有特殊字符的元素

时间:2014-06-28 16:33:22

标签: perl

当数组中的元素是设备名称或IP地址时,我可以从数组中删除元素,但是当下面的元素名称中的特殊字符命令不起作用时。

请建议,因为我已经尝试了2-3种方式而且都没有工作......

例如,如果密钥值为network或ip 100.100.100.100,则逻辑工作正常,但当密钥名称为net-switch或router-net时,它不会删除。

option1 

@array = eval { grep { $_ != $Key } @array1; };

Option2
@array = eval{ grep { $_->[0] ne "$Key" } @array1; }; 


2014/06/29 11:14:56 $VAR1 = [
          '100.2.2.3-0-2',
          '100.4.7.1-0-2',
          '100.2.120.2-0-2',
          '100.1.2.29-3-2',
          'network-0-2',
          'switch-1-1',
          'network-0-2',
          'router45',
           ];

谢谢,

2 个答案:

答案 0 :(得分:3)

!=是数字not equal运算符,但由于您要测试字符串不等式,请使用ne运算符

my @array = grep { $_ ne $Key } @array1;

答案 1 :(得分:0)

use warnings;
use strict;

my @array = (
          '100.2.2.3-0-2',
          '100.4.7.1-0-2',
          '100.2.120.2-0-2',
          '100.1.2.29-3-2',
          'network-0-2',
          'switch-1-1',
          'network-0-2',
          'router45',
           );

# my $key = '100.2.2.3-0-2'; # Either of these will work 
my $key = 'network-0-2';

my @keep;
foreach (@array){
    push @keep, $_ unless $_ eq $key;
}

print Dumper \@keep;

100.2.2.3-0-2
100.4.7.1-0-2
100.2.120.2-0-2
100.1.2.29-3-2
switch-1-1
router45