---
name: "Embperl::Recipe"
section: "3pm"
platform: "linux"
package: "libembperl-perl"
version: "2.5.0-17"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/Embperl::Recipe"
---

# Embperl::Recipe(3pm)

base class for defining custom recipes

## NAME

Embperl::Recipe - base class for defining custom recipes

## SYNOPSIS

```
   EMBPERL_RECIPE "XSLT Embperl"
```

## DESCRIPTION

Embperl::Recipe provides basic features that are necessary for createing  your own recipes. To do so you have to create a class that provides a `"get_recipe"` method which returns a array reference that contains the description what to do.

### get\_recipe ($class, $r, $recipe)

- $class

  The class name

- $r

  The Embperl request record object (Embperl::Req), maybe a derived object when running under EmbperlObject.

- $recipe

  The name of the recipe

The function must return an array that describes the desired action. The array contains a tree structure of providers.

### Providers

- file

  read file data

  Parameter:

  - filename

    Gives the file to read

- memory

  get data from a scalar

  Parameter:

  - source

    Gives the source as a scalar reference

  - name

    Gives the name under which this item should be cache

- epparse

  parse file into a Embperl tree structure

  Parameter:

  - source

    Gives the source

  - syntax

    Syntax to use

- epcompile

  compile Embperl tree structure

  Parameter:

  - source

    Gives the source

- eprun

  execute Embperl tree structure

  Parameter:

  - source

    Gives the source

  - cache\_key

    See description of cacheing

  - cache\_key\_options

    See description of cacheing

  - cache\_key\_func

    See description of cacheing

- eptostring

  convert Embperl tree structure to string

  Parameter:

  - source

    Gives the source

- libxslt-parse-xml

  parse xml source for libxslt

  Parameter:

  - source

    Gives the xml source

- libxslt-compile-xsl

  parse and compile stylesheet for libxslt

  Parameter:

  - stylesheet

    Gives the stylesheet source

- libxslt

  do a xsl transformation via libxslt

  Parameter:

  - source

    Gives the parsed xml source

  - stylesheet

    Gives the compiled stylesheet source

  - param

    Gives the parameters as hash ref

- xalan-parse-xml

  parse xml source for xalan

  Parameter:

  - source

    Gives the xml source

- xalan-compile-xsl

  parse and compile stylesheet for xalan

  Parameter:

  - stylesheet

    Gives the stylesheet source

- xalan

  do a xsl transformation via xalan

  Parameter:

  - source

    Gives the parsed xml source

  - stylesheet

    Gives the compiled stylesheet source

  - param

    Gives the parameters as hash ref

### Cache parameter

- expires\_in

  - expires\_func

  - expires\_filename

  - cache

  ### Format

Heres an example that show how the recipe must be build:

```
  sub get_recipe
    {
    my ($class, $r, $recipe) = @_ ;
    my $param  = $r -> component -> param  ;
    my @recipe ;
    push @recipe, {'type'   =>  'file'      } ;
    push @recipe, {'type'   =>  'epparse'   } ;
    push @recipe, {'type'   =>  'epcompile', cache => 1 } ;
    push @recipe, {'type'   =>  'eprun'     }  ;
    my $config = $r -> component -> config  ;
    my $xsltproc = $config -> xsltproc ;
    my @stylesheet =
        (
        { type => 'file',  filename  => $config -> xsltstylesheet, },
        { type =>  $xsltproc . '-compile-xsl', cache => 1 },
        ) ;
    push @recipe, {'type'   =>  'eptostring' } ;
    push @recipe, {'type'   =>  $xsltproc . '-parse-xml', } ;
    push @recipe, {'type'   =>  $xsltproc,   stylesheet => \@stylesheet } ;
    return \@recipe ;
    }
```

This corresponds to the following diagramm (when xsltproc = xalan):

```
    +-------------------+   +--------------------+
    + file {inputfile}  +   +file{xsltstylesheet}+
    +-------------------+   +--------------------+
          |                         |
          v                         v
    +-------------------+   +-------------------+
    + xalan-parse-xml   +   + xalan-compile-xsl +
    +-------------------+   +-------------------+
          |                         |
          |                         |
          |         +-----------+   |
          +-------> + xalan     + <-+
                    +-----------+
```

Take a look at the recipes that comes with Embperl to get more ideas what can be done.
