[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