---
name: "Web::Scraper::Filter"
section: "3pm"
platform: "linux"
package: "libweb-scraper-perl"
version: "0.38-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Web::Scraper::Filter"
---

# Web::Scraper::Filter(3pm)

Base class for Web::Scraper filters

## NAME

Web::Scraper::Filter - Base class for Web::Scraper filters

## SYNOPSIS

```
  package Web::Scraper::Filter::YAML;
  use base qw( Web::Scraper::Filter );
  use YAML ();
  sub filter {
      my($self, $value) = @_;
      YAML::Load($value);
  }
  1;
  use Web::Scraper;
  my $scraper = scraper {
      process ".yaml-code", data => [ 'TEXT', 'YAML' ];
  };
```

## DESCRIPTION

Web::Scraper::Filter is a base class for text filters in Web::Scraper. You can create your own text filter by subclassing this module.

There are two ways to create and use your custom filter. If you name your filter Web::Scraper::Filter::Something, you just call:

```
  process $exp, $key => [ 'TEXT', 'Something' ];
```

If you declare your filter under your own namespace, like 'MyApp::Filter::Foo',

```
  process $exp, $key => [ 'TEXT', '+MyApp::Filter::Foo' ];
```

You can also inline your filter function or regexp without creating a filter class:

```
  process $exp, $key => [ 'TEXT', sub { s/foo/bar/ } ];
  process $exp, $key => [ 'TEXT', qr/Price: (\d+)/ ];
  process $exp, $key => [ 'TEXT', qr/(?<name>\w+): (?<value>\w+)/ ];
```

Note that this function munges `$_` and returns the count of replacement. Filter code special cases if the return value of the callback is number and `$_` value is updated.

You can, of course, stack filters like:

```
  process $exp, $key => [ '@href', 'Foo', '+MyApp::Filter::Bar', \&baz ];
```

## AUTHOR

Tatsuhiko Miyagawa
