0

プレフィルターを追加できる Perl スクリプトがあります。

if ($row->{'category'}  eq 'Software') { return undef; }

これは期待どおりに機能します。

しかし、私がこれを行う場合

if ($row->{'category'}  eq 'Software' &&  $row->{'title'} =~ m/EDU|OLP|Molp|MOLP|Media/) { return undef; }

私はそれを働かせることができません。エラーは発生しません。

最後の 1 時間オンラインで解決策を探しましたが、見つからないようです。

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'
    };
4

4 に答える 4

4

問題はここにあります:

$row->{'category'}  eq 'Software'

$row->{'category'} は実際には

'Software            '

それを念頭に置いて、これはうまくいくはずです:

$row->{'category'} =~ /^Software\s*$/
于 2013-03-14T12:41:18.163 に答える
3

問題は、ハッシュ フィールドのテキスト値の後にスペースが続くことです。たとえば を使用してハッシュを適切に構築している場合は、Text::CSV収集したデータを を使用して処理する必要があります。

s/\s+\z// for values %$row

それを尋問する前に。ただし、偽の空白が CSV データの誤ったデコードの結果である場合は、代わりにそれを修正する必要があります。

于 2013-03-14T12:41:57.770 に答える
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'})。ソースデータを確認し、パーサーを確認してください。

于 2013-03-14T12:13:25.020 に答える
-1

一致すると予想されるものと一致しないと予想されるサンプルデータを提供すると、それが役立ちます。

編集
サンプルデータに基づいて、正規表現を次のように変更します。

$row->{'title'} =~ /(EDU|OLP|Molp|MOLP|Media)/i
于 2013-03-14T12:13:06.923 に答える