---
name: "HTTP::Proxy::BodyFilter::simple"
section: "3pm"
platform: "linux"
package: "libhttp-proxy-perl"
version: "0.304-5"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/HTTP::Proxy::BodyFilter::simple"
---

# HTTP::Proxy::BodyFilter::simple(3pm)

A class for creating simple filters

## NAME

HTTP::Proxy::BodyFilter::simple - A class for creating simple filters

## SYNOPSIS

```
    use HTTP::Proxy::BodyFilter::simple;
    # a simple s/// filter
    my $filter = HTTP::Proxy::BodyFilter::simple->new(
        sub { ${ $_[1] } =~ s/foo/bar/g; }
    );
    $proxy->push_filter( response => $filter );
```

## DESCRIPTION

HTTP::Proxy::BodyFilter::simple can create BodyFilter without going through the hassle of creating a full-fledged class. Simply pass a code reference to the `"filter()"` method of your filter to the constructor, and you'll get the adequate filter.

### Constructor calling convention

The constructor can be called in several ways, which are shown in the synopsis:

- single code reference

  The code reference must conform to the standard **filter()** signature:

  ```
      sub filter {
          my ( $self, $dataref, $message, $protocol, $buffer ) = @_;
          ...
      }
  ```

  It is assumed to be the code for the `"filter()"` method. See HTTP::Proxy::BodyFilter for more details about the `"filter()"` method.

- name/coderef pairs

  The name is the name of the method (`"filter"`, `"begin"`, `"end"`) and the coderef is the method itself.

  See HTTP::Proxy::BodyFilter for the methods signatures.

## METHODS

This filter "factory" defines the standard HTTP::Proxy::BodyFilter methods, but those are only, erm, "proxies" to the actual CODE references passed to the constructor. These "proxy" methods are:

- **filter()**

  - **begin()**

  - **end()**

  Two other methods are actually HTTP::Proxy::BodyFilter::simple methods, and are called automatically:

- **init()**

  Initialise the filter instance with the code references passed to the constructor.

- **can()**

  Return the actual code reference that will be run, and not the "proxy" methods. If called with any other name than `"begin"`, `"end"` and `"filter"`, calls `"UNIVERSAL::can()"` instead.

There is also a method that returns a boolean value:

- **will\_modify()**

  The `"will_modify()"` method returns a scalar value (boolean) indicating if the filter may modify the body data. The default method returns a true value, so you only need to set this value when you are *absolutely* *certain* that the filter will not modify data (or at least not modify its final length).

  Here's a simple example:

  ```
      $filter = HTTP::Proxy::BodyFilter::simple->new(
          filter => sub { ${ $_[1] } =~ s/foo/bar/g; },
          will_modify => 0,    # "foo" is the same length as "bar"
      );
  ```

## SEE ALSO

HTTP::Proxy, HTTP::Proxy::BodyFilter.

## AUTHOR

Philippe "BooK" Bruhat, \<book@cpan.org\>.

## COPYRIGHT

Copyright 2003-2015, Philippe Bruhat.

## LICENSE

This module is free software; you can redistribute it or modify it under the same terms as Perl itself.
