So würde nur die Möglchkeit bleiben mit eval in der Konstruktorphase diese Methoden zu erzeugen. Das hat aber, so meine ich, eine empfindliche Performance Einbusse.
Naja, das scheint mir für das Namensraumproblem nicht angemessen.
Sowas läßt sich mit der Technik, die z.b. in
Call::Accessor verwendet wird umsetzen.
#!/usr/bin/perl -w
use strict;
use constant NL => "\n";
package Accessor;
sub new {
my $proto = shift;
my $p = shift || 'x_';
my %dummy;
no strict 'refs';
foreach my $func (qw(a b c)) {
*{"${proto}::$p$func"} = sub {
my $self = shift;
$dummy{$func} = $_[0] if @_;
return $dummy{$func};
};
}
my $self = bless \%dummy, $proto;
}
package main;
my $y = new Accessor('y_');
$y->y_a('y accessor');
print $y->y_a(), NL;
my $x = new Accessor('x_');
$y->x_a('x accessor');
print $y->x_a(), NL;
Struppi.