我有一个Perl脚本,我可以在其中添加预过滤器。
if ($row->{'category'} eq 'Software') { return undef; }
这可以按预期工作。
但如果我这样做
if ($row->{'category'} eq 'Software' && $row->{'title'} =~ m/EDU|OLP|Molp|MOLP|Media/) { return undef; }
我无法让它发挥作用。我没有任何错误。
我花了最后一小时在线寻找解决方案,但我似乎无法找到它。
我也尝试过and
而不是&&
。
这是Data::Dumper
$row
输出
$VAR1 = {
'manufacturer_model' => 'FQC-02310 ',
'junk' => '42.03',
'manufacturer' => 'Microsoft ',
'model' => 'MSWIN81 ',
'price' => '28.02',
'title' => 'Win Pro SA EDU NL ',
'category' => 'Software ',
'stock' => '251'
};
答案 0 :(得分:4)
问题在于:
$row->{'category'} eq 'Software'
因为$ row-> {'category'}实际上是
'Software '
考虑到这一点,这应该有效:
$row->{'category'} =~ /^Software\s*$/
答案 1 :(得分:3)
问题是您的哈希字段在文本值后面有尾随空格。如果要正确构建哈希,例如使用Text::CSV
,则必须使用
s/\s+\z// for values %$row
在询问之前。但是,如果虚假空白是CSV数据解码错误的结果,那么你应该修改它。
答案 2 :(得分:0)
$row->{'category'} = 'Software';
$row->{'title'} = 'Blank Media';
if (
$row->{'category'} eq 'Software'
&& $row->{'title'} =~ m/EDU|OLP|Molp|MOLP|Media/
) { print "OK!\n"; }
打印“OK!”在我看来,您的数据不是您所期望的(您在$row->{'title'}
中遇到问题)。检查您的源数据,检查您的解析器。
答案 3 :(得分:-1)
如果您提供了您希望匹配但不匹配的示例数据,那将有所帮助。
修改
根据示例数据,我将您的正则表达式更改为:
$row->{'title'} =~ /(EDU|OLP|Molp|MOLP|Media)/i