Struppi: Class::Accessor

Beitrag lesen

Hallo alle

ich versuch's auch mal hier. Ich hab ein etwas kniffliges Perl Problem. Und zwar nutze ich das Modul Class::Accessor um ein Objekt zu erzeugen auf das ich mit Funktionen auf die Werte zugreife.

eigentlich klappt das auch, aber im Prinzip nur einmal, ich will aber zur Laufzeit Objekte mit unterschiedlichen Feldern erzeugen, doch das geht so nicht. Hier ein beispiel:

#!/usr/perl/bin -w
use strict;

package Foo;
use base qw(Class::Accessor);

use Carp;
sub new
{
    my $proto = shift;
    my $fields = shift || croak("Kein parameter");

my $class = ref($proto) || $proto;
    my $new = bless {
    }, $class;
    Foo->mk_accessors($new, @$fields);

return $new;
}
package main;

my $t = new Foo([qw/a b c/]);
my $t2 = new Foo( [qw/d e f/] );

$t2->b(22);

Eingentlich soll hier ein Fehler erzeugt werden, da in $t2 das feld b nihct existieren soll.

Soweit ich jetzt dahinter steige ist das Problem, diese Zeile:
    Foo->mk_accessors($new, @$fields);

Hier muss statt 'Foo' eigentlich $new stehen, was aber nicht geht, da $new natürlich nicht diese funktion 'mk_accessors()' kennt.

Jetzt weiß ich nicht mehr weiter. Ich denke mal, das ich noch eine Klasse definieren muss, aber mir ist nicht klar wie.

Struppi.