The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.


Treex::Tutorial::Scen - Treex::Scen:: scenario syntax and guidelines


version 2.20150928


Aside from the old scenario (.scen) files with the following syntax:

 # Some comment
 A2T::Block2 # Some other comment

Treex scenarios can now be represented as a separate Perl "Treex::Scen::" packages. This gives the user larger expressive power when creating various Treex scenarios:

Introducing parameters. The scenario can now be modifiing simply by passing defined scenario parameters.
Support of POD-style of documentation. The scenarios functionality can now be described in a well-aranged manner.
The scenario itself is now a Perl package. The scenarios can now easily be uploaded on CPAN.


You can write your scenario module in any way you find comfortable. There are only a few things your module must contain to become a Treex-readable scenario.

Your module should have a Treex::Scen:: prefix. You should also include these modules:

 package Treex::Scen::MyScenario;
 use Moose;
 use Treex::Core::Common;
 with 'Treex::Core::RememberArgs';

Another thing you should not forget is a BUILD subroutine (which can be empty):

 sub BUILD {
    my ($self) = @_;

    # Initialize your scenario


Finally, in order to be able to communicate with Treex, the module must contain get_scenario_string method:

 sub get_scenario_string {
    my ($self) = @_;
    my $scen = "";

        # Add desired treex blocks to the $scen

    return $scen;

The method should return a string, which follows the syntax of the ".scen" files . For example the following scenario


can be created in the following manner (of course you can use your own method):

 my $scen = join "\n",

Of course instead of treex blocks, you can list another Treex::Scen:: module in the $scen string.

Additionally, thanks to the Treex::Core::RememberArgs role we can define arguments for our scenario:

 has example_argument => (
     is => 'ro',
     isa => enum( [qw(value1 value2)] ),
     default => 'value1',
     documentation => 'example of an argument definition',

You can then modify get_scenario_string method to return a slightly different string depending on the value of the "example_argument". The argument can then be specified like this:

 treex Scen::MyScenario example_argument=value2


Dušan Variš <>


Copyright © 2011 by Institute of Formal and Applied Linguistics, Charles University in Prague

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