PML (PML Markup Lanuage)
use PML;
my $parser = new PML;
$parser->parse('/path/to/somefile');
my $output = $parser->execute;
PML is a powerful text preprocessor. It supports such things as variables, flow control and macros. After preprocessing a text file it returns the result to your Perl script. The power comes from the fact that you can even embed Perl code into the file that is getting processed.
PML was originaly designed to seperate a Perl CGI script and the HTML that it generates. What sets PML apart from other similar solutions is that it is not just a web solution using mod_perl. You can parse PML files from the command line using the supplied pml script or from within your Perl scripts using the PML Perl module.
If you do have mod_perl, you can use the supplied mod_pml Apache module to parse PML files from within the Apache web server.
<html> <head> <title>${title}</title> </head> <body> @if(${title}) { <h1>${title}</h1> } </body> </html>
Documentation is supplied with this module, in the doc directory.
language.html: describes the language. pml-modules.html: tells you how to write a PML module
pml-custom-app.html: tells you how to extend PML from within your application.
The following is an overview of the PML API
Arguments: 1) Class or PML Object to clone 2) Hash Reference (Optional) Returns: 1) A PML Object Description: new creates a new PML Object and returns the object to the caller. You can optionaly pass in a hash refernece, where the keys are PML variables to set and the values are the values to set those variables to.
Arguments: 1) PML Object 2) Filename or a reference to an array of lines Returns: 1) True if parse was successful Description: parse will parse the file or array that you give it. If there is an error, such as a syntax error, parse will throw an exception via die. Therefore if you want to catch the exception you should wrap the call to parse in an eval block and check $@. If $@ is true there was and error and the error message can be found in $@.
Arguments: 1) PML Object 2) A Hash Reference (Optional) Returns: 1) The text in the file after processing it Description: execute will process the file and return the post-processed text. You can optionaly pass in a reference to a hash, where the keys are PML variables to set and the values are the value to set them to. This is a good way so talk to your text file. You can call execute as many times as you wish. Each call will start afresh at the top of the parsed file.
Arguments: 1) PML Object -- or -- 2) Variable Name -- or -- 2) Variable Name 3) New Value -- or -- 2) Hash Reference Returns: 1) Depends on Arguments, see below. Description: The v method allows you to get and set PML variables. There are a few different ways to use v, and we will cover them all. Arguments: 1) PML Object In this case, you call v with only the object, no arguments. This will return an array of variable names. This is so you can see what variables are defined. Arguments: 1) PML Object 2) Variable Name This time you give a name of a variable. The v method will return the current value of that variable, or undef if it is not set. Arguments: 1) PML Object 2) Variable Name 3) Value Here, you give a variable name and the value to set it to. The v method will then set the give variable to the value you gave it. It should return the same value. Arguments: 1) PML Object 2) Hash Reference To limit method calls, you can give a hash reference where the keys are the variable to set and the values are the value to set those variables to. Returns 1.
Arguments: 1) PML Object 2) Regular Expression String or Object Returns: 1) Nothing Description: Used before the call to parse, this method will effect when parsing will start. When you call the parse method, it will search for the given regex, when that regex matches, parsing will begin on the NEXT line.
Arguments: 1) Class ie PML->register(...) 2) A Hash, keys are described below Returns: 1) An ID number to refer to your token Description: The register function is used to extend the PML syntax. You register a callback for a new PML function. When parsing the text, PML will call your parser-callback to assist parsing. When executing, PML will call your token-callback to process the token created by your parser-callback. Here is what you should pass to register: parse => A callback. Defaults to using the builtin autoparser token => A callback. You must give this. name => The name of the new PML function to add. type => See Types below Callbacks: A callback is a reference to a subroutine like this: \&myfunc -- or -- sub{} It can also be a reference to an array, where the first element is a reference to a subroutine and the remaining elements are passed to the subroutine as arguemnts after the standard arguments. Types: The types are constants in PML.pm. PML->ARG_ONLY This means that your new function will only take arguments, just like the builtin @set function. PML->BLOCK_ONLY This means that your new function only takes a block just like the builtin @perl function. PML->ARG_BLOCK This means that your new function takes arguments and a block, just like the builtin @if function.
Arguments: 1) PML Object 2) Boolean Flag (Optional) Returns: 1) Current Warning Flag Description: The warning method will set the warning flag to the one given, if one was given. It always returns the current value. If the flag is true, PML will print warnings to STDERR.
Arguments: 1) PML Object 2) True to allow use of stderr, false to disallow Returns: 1) Nothing Description: Sets the use_stderr flag for this object
To install PML, copy and paste the appropriate command in to your terminal.
cpanm
cpanm PML
CPAN shell
perl -MCPAN -e shell install PML
For more information on module installation, please visit the detailed CPAN module installation guide.