Gaurav Dadhania
Gaurav Dadhania

Reputation: 5337

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?

Upvotes: 6

Views: 1747

Answers (2)

nxadm
nxadm

Reputation: 2079

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
);

Upvotes: 10

daxim
daxim

Reputation: 39158

Prefix an identifier with an _ to mark the function/variable etc. as private. This is documented in perlstyle in the section about scope, about in the middle of the document.

This is respected by sane programmers and some tools (source parsers/documentation), but not enforced by the compiler. See perlmodlib#NOTE.

Upvotes: 10

Related Questions