Hello Perl community on SO. I am using Perl since a few years, but since I am following SO, I recognized that I know Perl not enough.

I wrote I quite big script over the past 4 years and tried to do this in OO style. I know that Perl<6 is not really OO.

So one point I don't like is that I have no data encapsulation, that means no Variables that are really private to a package ("class") (or maybe I don't know how to do it).

I have something like this (only a small part of my script)

package TAG;

sub new () {
    my $classname = shift;
    my $self      = {};

    bless( $self, $classname );
    $self->initialize();
    return $self;
}

sub initialize() {
    my $self = shift;

    # Only an example, I have a long list of items in this "class"
    $self->{ID}          = "NA"; 
}

sub setID() {
    ...
}

sub getID() {
    ...
}

In my main script I am using it then this way:

my $CurrentItem;
$CurrentItem = new TAG();

$CurrentItem->getID()

but

$CurrentItem->{ID} = "Something";

is also working, but I would prefer, that this is not possible.

Is there a way to get a better encapsulation of the data I am using in the "class", so that I am (or other users are) forced to use the get and set methods?

Edit
Report