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

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

Creating custom subclasses of Mason's classes

## NAME

Mason::Manual::Subclasses - Creating custom subclasses of Mason's classes

## DESCRIPTION

You can subclass the following Mason classes for your application:

```
    Mason::CodeCache
    Mason::Compilation
    Mason::Component
    Mason::Component::ClassMeta
    Mason::Component::Import
    Mason::Component::Moose
    Mason::Interp
    Mason::Request
    Mason::Result
```

and arrange things so that Mason always uses your subclass instead of its default class.

Note: if you want to create a general purpose modification to Mason to use in multiple applications, you should probably create a plugin instead of a subclass.

## CREATING A SUBCLASS

A subclass should look something like this:

```
    package My::Mason::Interp;
    use Moose;
    extends 'Mason::Interp';
    # put your modifications here
    1;
```

## LETTING MASON KNOW ABOUT YOUR SUBCLASSES

There are two ways to let Mason know about your subclasses: by naming convention, and by parameters to `"Mason->new"`.

### By naming convention

First, create a subclass of Mason itself:

```
    package My::Mason;
    use Moose;
    extends 'Mason';
    1;
```

and use that in place of `"Mason"` in construction:

```
    my $interp = My::Mason->new();
```

Now, you can place any subclasses under 'My::Mason' and they'll automatically be picked up. e.g.

```
    My::Mason::Compilation
    My::Mason::Interp
    My::Mason::Request
```

## By constructor parameter

You can specify your subclasses via "base\_\*" parameters to `"Mason->new()"`. e.g.

```
    my $interp = Mason->new(
         base_compilation_class => 'My::Mason::Compilation',
         base_interp_class => 'My::Mason::Interp'
         base_request_class => 'Some::Other::Mason::Request'
    );
```

See "CUSTOM MASON CLASSES" in Mason::Interp for a complete list.

## SEE ALSO

Mason

## 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.
