使用逻辑或从 perl 中的数组中删除项目
Remove items from array in perl using logical OR
我有一个数组。我希望数组是这样的,它没有 $regex 的任何值(以逻辑或方式)。
我以否定的方式使用 grep 命令,但我认为这不能解决我的问题。非常感谢任何帮助。谢谢
#!/usr/bin/perl -w
use Data::Dumper;
my @array = ['hard_link is not present', 'dynamic variable', 'segfault'] ;
my $regex = qr/create_hard_link|Failed to reassign|Global variable/ ;
print Dumper(\@array) ;
my @wanted_array = grep {!$regex} @array ;
print Dumper(\@wanted_array);
它给我的输出是
$VAR1 = [
[
'hard_link is not present',
'dynamic variable',
'segfault'
]
];
$VAR1 = [];
与同名的命令行工具不同,grep
不采用正则表达式模式;它需要一个表达式,该表达式的计算结果为要保留的项目的真值。
$regex
有一个真值——编译后的正则表达式模式不会字符串化为 0
或空字符串——所以 !$regex
总是假的,所以 grep
过滤掉一切。您想要执行正则表达式匹配,因此您将需要正则表达式匹配运算符。
my @wanted_array = grep { !/$regex/ } @array;
还有第二个问题。
# An array that contains a single element: a reference to an anonymous array.
my @array = ['hard_link is not present', 'dynamic variable', 'segfault'];
应该是
# An array that contains a three strings.
my @array = ('hard_link is not present', 'dynamic variable', 'segfault');
首先,不要在脚本中使用 -w
(除非您是 2000 年之前的时间旅行者)。
始终以 use strict; use warnings;
.
开头您的 Perl 文件
您的代码中的问题是您使用 !$regex
作为过滤条件。 $regex
包含一个正则表达式对象,它是一个真值,所以否定它 returns 假。这就是为什么你最终得到一个空数组的原因。
修复:实际进行正则表达式匹配:
my @wanted_array = grep { !/$regex/ } @array;
(这使用匹配运算符 m//
(但如果您使用 /
作为分隔符,m
是可选的。)
另一个问题是你的 @array
只包含一个元素,它是(对另一个数组的)引用。
你想要
my @array = ('hard_link is not present', 'dynamic variable', 'segfault');
[ ... ]
是单个标量值。
我有一个数组。我希望数组是这样的,它没有 $regex 的任何值(以逻辑或方式)。 我以否定的方式使用 grep 命令,但我认为这不能解决我的问题。非常感谢任何帮助。谢谢
#!/usr/bin/perl -w
use Data::Dumper;
my @array = ['hard_link is not present', 'dynamic variable', 'segfault'] ;
my $regex = qr/create_hard_link|Failed to reassign|Global variable/ ;
print Dumper(\@array) ;
my @wanted_array = grep {!$regex} @array ;
print Dumper(\@wanted_array);
它给我的输出是
$VAR1 = [
[
'hard_link is not present',
'dynamic variable',
'segfault'
]
];
$VAR1 = [];
与同名的命令行工具不同,grep
不采用正则表达式模式;它需要一个表达式,该表达式的计算结果为要保留的项目的真值。
$regex
有一个真值——编译后的正则表达式模式不会字符串化为 0
或空字符串——所以 !$regex
总是假的,所以 grep
过滤掉一切。您想要执行正则表达式匹配,因此您将需要正则表达式匹配运算符。
my @wanted_array = grep { !/$regex/ } @array;
还有第二个问题。
# An array that contains a single element: a reference to an anonymous array.
my @array = ['hard_link is not present', 'dynamic variable', 'segfault'];
应该是
# An array that contains a three strings.
my @array = ('hard_link is not present', 'dynamic variable', 'segfault');
首先,不要在脚本中使用 -w
(除非您是 2000 年之前的时间旅行者)。
始终以 use strict; use warnings;
.
您的代码中的问题是您使用 !$regex
作为过滤条件。 $regex
包含一个正则表达式对象,它是一个真值,所以否定它 returns 假。这就是为什么你最终得到一个空数组的原因。
修复:实际进行正则表达式匹配:
my @wanted_array = grep { !/$regex/ } @array;
(这使用匹配运算符 m//
(但如果您使用 /
作为分隔符,m
是可选的。)
另一个问题是你的 @array
只包含一个元素,它是(对另一个数组的)引用。
你想要
my @array = ('hard_link is not present', 'dynamic variable', 'segfault');
[ ... ]
是单个标量值。