The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Venus::Sealed - Sealed Class

ABSTRACT

Sealed Class for Perl 5

SYNOPSIS

  package main;

  use Venus::Sealed;

  my $sealed = Venus::Sealed->new('012345');

  # $sealed->get;

  # '012345'

DESCRIPTION

This package provides a mechanism for sealing object and restricting and/or preventing access to the underlying data structures. This package can be used directly but is meant to be subclassed.

INTEGRATES

This package integrates behaviors from:

Venus::Role::Buildable

Venus::Role::Catchable

Venus::Role::Proxyable

Venus::Role::Throwable

Venus::Role::Tryable

METHODS

This package provides the following methods:

get

  get(any @args) (any)

The get method can be used directly to get the sealed value set during instantiation, but is meant to be overridden in a subclass to further control access to the underlying data.

Since 3.55

get example 1
  # given: synopsis

  package main;

  my $get = $sealed->get;

  # "012345"
get example 2
  package Example;

  use Venus::Class;

  base 'Venus::Sealed';

  sub __get {
    my ($self, $init, $data) = @_;

    return $data->{value};
  }

  sub __set {
    my ($self, $init, $data, $value) = @_;

    return $data->{value} = $value;
  }

  package main;

  my $sealed = Example->new("012345");

  my $get = $sealed->get;

  # "012345"

set

  set(any @args) (any)

The set method can be used directly to set the sealed value set during instantiation, but is meant to be overridden in a subclass to further control access to the underlying data.

Since 3.55

set example 1
  # given: synopsis

  package main;

  my $set = $sealed->set("098765");

  # "098765"
set example 2
  package Example;

  use Venus::Class;

  base 'Venus::Sealed';

  sub __get {
    my ($self, $init, $data) = @_;

    return $data->{value};
  }

  sub __set {
    my ($self, $init, $data, $value) = @_;

    return $data->{value} = $value;
  }

  package main;

  my $sealed = Example->new("012345");

  my $set = $sealed->set("098765");

  # "098765"

AUTHORS

Awncorp, awncorp@cpan.org

LICENSE

Copyright (C) 2022, Awncorp, awncorp@cpan.org.

This program is free software, you can redistribute it and/or modify it under the terms of the Apache license version 2.0.