# XML::Grove::Sub - perldoc - [phpMan]

## NAME
    [XML::Grove::Sub](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3AGrove%3A%3ASub/markdown) - run a filter sub over a grove

## SYNOPSIS
     use [XML::Grove::Sub](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3AGrove%3A%3ASub/markdown);

     # Using filter method on [XML::Grove::Document](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3AGrove%3A%3ADocument/markdown) or [XML::Grove::Element](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3AGrove%3A%3AElement/markdown):
     @results = $grove_object->filter(\&sub [, ...]);

     # Using an [XML::Grove::Sub](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3AGrove%3A%3ASub/markdown) instance:
     $filterer = [XML::Grove::Sub](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3AGrove%3A%3ASub/markdown)->new();
     @results = $grove_object->accept($filterer, \&sub [, ...]);

## DESCRIPTION
    "[XML::Grove::Sub](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3AGrove%3A%3ASub/markdown)" executes a sub, the filter, over all objects in a grove and returns a list of
    all the return values from the sub. The sub is called with the grove object as it's first
    parameter and passing the rest of the arguments to the call to `filter()' or `accept()'.

## EXAMPLE
    The following filter will return a list of all `"foo"' or `"bar"' elements with an attribute
    `"widget-no"' beginning with `"A"' or `"B"'.

      @results = $grove_obj->filter(sub {
          my $obj = shift;

          if ($obj->isa('[XML::Grove::Element](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3AGrove%3A%3AElement/markdown)')
              && (($obj->{Name} eq 'foo')
                  || ($obj->{Name} eq 'bar'))
              && ($obj->{Attributes}{'widget-no'} =~ /^[AB]/)) {
              return ($obj);
          }
          return ();
      });

## AUTHOR
    Ken MacLeod, <ken@bitsko.slc.ut.us>

## SEE ALSO
### perl

    Extensible Markup Language (XML) <<http://www.w3c.org/XML>>

