Search code examples
perloopmoose

How can you create private/public variable and functions using Moose?


I am going through the Moose recipes and I still cannot see if I can create private variables and functions using it? Is it possible? If yes how to create them with Moose?


Solution

  • Like daxim points out, private methods have the "_" prefix. Because attributes (instance variables) generate getters methods (and if rw also setters methods) out of the box, you should do this:

    has 'myvariable' => (
        is       => 'ro',
        writer   => '_myvariable',
        init_arg => undef,
        # other options here
    );
    

    This way you can set this attribute within your class/instance and it's not settable from outside. If read-only access is too much, you can also mark it "private":

    has '_myvariable' => (
        is       => 'ro',
        writer   => '_set_myvariable'
        init_arg => undef,
        # other options here
    );