Janela Gtk3 usando técnicas orientadas a objetos Moose

Abaixo está uma apresentação de um modelo usado para iniciar um novo projeto Gtk3 usando Moose Object Oriented Techniques. A ideia é que a opção de atributo Moose intitulada lazy atrasará o construtor (ou geração de valor padrão) até que o método acessador seja chamado pela primeira vez. Por uma questão de conveniência e também de clareza, o método privado intitulado ooo (Ordem de Operações) chama os métodos acessadores dos atributos preguiçosos de Moose para fornecer um procedimento de construção de janela Gtk3 sensato. Membros privados são indicados com um sublinhado anterior. Este modelo também atua, convenientemente, como um módulo Perl 5.

use common::sense;

my $doc1;

package MyDocument {
use Moose;

use common::sense;

use feature 'say';
use feature 'state';
use feature 'switch';

use Gtk3 -init;

use namespace::autoclean;

has
'mw' => (
is => 'ro',
isa
=> 'Gtk3::Window',
default => sub { my $mw = Gtk3::Window->new ('toplevel') or die 'Regrettably, there was an incident with the width and height as it has not yet been defined as 2 whole integer values in between 240 and 8192'; return ($mw); },
);

has
'_f1' => (
is => 'ro',
isa
=> 'Gtk3::Frame',
lazy
=> 1,
default => sub { my $f1 = Gtk3::Frame->new ('Primary'); $self->mw->add($f1); return($f1); },
);

# Order of Operations
sub _ooo {
my $i;
($_) = @_;

$_
->_f1;
}

sub main {
my $i;
($_) = @_;

MainLoop;
}

__PACKAGE__
->meta->make_immutable;
}


$doc1
= MyDocument->new;
$doc1
->_ooo;
$doc1
->main unless caller;

1;

Este método usa técnicas de orientação a objetos Moose para fornecer uma janela Gtk3 tanto como um script quanto como um módulo.