---
name: "Mason::Manual::Intro"
section: "3pm"
platform: "linux"
package: "libmason-perl"
version: "2.24-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Mason::Manual::Intro"
---

# Mason::Manual::Intro(3pm)

Getting started with Mason

## NAME

Mason::Manual::Intro - Getting started with Mason

## DESCRIPTION

A few quick examples to get your feet wet with Mason.  See Mason::Manual::Setup for how to use Mason to generate web sites.

## EXAMPLE 1

### Hello world (from command-line)

After installing Mason, you should have a `"mason"` command in your installation path (e.g. `"/usr/local/bin"`). Try this:

```
    % mason
    Hello! The local time is <% scalar(localtime) %>.
    ^D
```

(where '^D' means ctrl-D or EOF). You should see something like

```
    Hello! The local time is Wed Mar  2 17:11:54 2011.
```

The `"mason"` command reads in a Mason *component* (template), runs it, and prints the result to standard output. Notice that the tag

```
    <% scalar(localtime) %>
```

was replaced with the value of its expression. This is called a *substitution* *tag* and is a central piece of Mason syntax.

## EXAMPLE 2

### Email generator (from script)

The command line is good for trying quick things, but eventually you're going to want to put your Mason components in files.

In a test directory, create a directory `"comps"` and create a file `"email.mc"` with the following:

```
    <%class>
    has 'amount';
    has 'name';
    </%class>
    Dear <% $.name %>,
        We are pleased to inform you that you have won $<% sprintf("%.2f", $.amount) %>!
    Sincerely,
    The Lottery Commission
    <%init>
    die "amount must be a positive value!" unless $.amount > 0;
    </%init>
```

In addition to the substitution tag we've seen before, we declare two *attributes*, `"amount"` and `"name"`, to be passed into the component; and we declare a piece of initialization code to validate the amount.

In the same test directory, create a script `"test.pl"` with the following:

```
     1  #!/usr/local/bin/perl
     2  use Mason;
     3  my $interp = Mason->new(comp_root => 'comps', data_dir => 'data');
     4  print $interp->run('/email', name => 'Joe', amount => '1500')->output;
```

Line 3 creates a *Mason interpreter*, the main Mason object. It specifies two parameters: a *component root*, indicating the directory hierarchy where your components will live; and a *data directory*, which Mason will use for internal purposes such as class generation and caching.

Line 4 runs the template - notice that the `".mc"` extension is added automatically - passing values for the `"name"` and `"amount"` attributes.

Run `"test.pl"`, and you should see

```
    Dear Joe,
        We are pleased to inform you that you have won $1500.00!
    Sincerely,
    The Lottery Commission
```

## SEE ALSO

Mason::Manual::Tutorial, Mason::Manual

## AUTHOR

Jonathan Swartz \<swartz@pobox.com\>

## COPYRIGHT AND LICENSE

This software is copyright (c) 2012 by Jonathan Swartz.

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