[Rio-pm] Duvida overload

Donato Azevedo donatoaz em gmail.com
Sábado Julho 18 14:56:39 PDT 2009


Ola pessoal,

Eu tenho uma estrutura de dados da seguinte forma:

$VAR1 = bless( {
                 'Rect' => bless( {
                                    'gennum' => '0',
                                    'value' => [
                                                 bless( {
                                                          'gennum' => '0',
                                                          'value' => '670.761',
                                                          'type' => 'number',
                                                          'objnum' => '1038'
                                                        }, 'CAM::PDF::Node' ),
                                                 bless( {
                                                          'gennum' => '0',
                                                          'value' => '400.151',
                                                          'type' => 'number',
                                                          'objnum' => '1038'
                                                        }, 'CAM::PDF::Node' ),
                                               ],
                                    'type' => 'array',
                                    'objnum' => '1038'
                                  }, 'CAM::PDF::Node' ),
               }, 'AnnotationWrapper' );

e eu queria uma forma de transparentizar o acesso aos 'values' dos
CAM::PDF::Nodes que estao numa lista no 'value' do objeto acessado por
'Rect'
que eu pudesse tratar $var1->Rect como uma array mesmo e fazer coisas do tipo
print for ( $var1->Rect );
ou
${$var1->rect}[$pos] = 100;

alguem tem alguma ideia de como fazer isto? AnnotationWrapper é uma
classe minha. O acesso a elementos do tipo lista esta sendo feito de
forma indexada, ou seja, para acessar elementos de Rect eu faço
$var1->Rect(1) e para atribuir: $var1->Rect(1, $num);

package AnnotationWrapper;

sub new {
	my $class = shift;
	my $self = shift;

	bless $self, $class;
}

for my $scalar_type_node ( qw( Subj F T Type M CreationDate CA NM Subtype ) ) {
	*{$scalar_type_node} = sub :lvalue {
		my $self = shift;
		$self->{$scalar_type_node}->{value} = shift if @_;
		$self->{$scalar_type_node}->{value};
	};
}

for my $list_type_node ( qw( Rect ) ) {
	*{$list_type_node} = sub :lvalue {
		my $self = shift;
		if ( my $pos = shift ) {
			${$self->{$list_type_node}->{value}}[$pos]->{value} = shift if @_;
		}
		${$self->{$list_type_node}->{value}}[$pos]->{value};
	};
}


Donato Azevedo


Mais detalhes sobre a lista de discussão Rio-pm