Moin Moin!
Zugabe:
Wie käme ich da an die Syntax
$ob->remove->hashkey
?
Was sieht Perl dort ohne Source-Filter?
Rufe die Methode "remove" des Objektes "$ob" auf.
Rufe die Methode "hashkey" des von "remove" gelieferten Objekts bzw. der gelieferten Klasse auf.
Die "remove"-Methode könnte eine Instanz einer fast komplett leeren Klasse liefern, die in einer AUTOLOAD-Methode den Namen der aufgerufenen Methode benutzt, um aus $ob einen Hash-Key zu löschen. Dazu muß die Instanz entweder $ob enthalten oder eine Callback-Methode / Callback-Funktion in $ob aufrufen.
#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
{
package SomeClass;
sub new
{
my $proto=shift;
return bless {},ref($proto)||$proto;
}
sub midi
{
my $self=shift;
if (@_) {
my $v=shift;
if (defined $v) {
$self->{'midi'}=$v;
return $self;
} else {
delete $self->{'midi'};
return $self;
}
} else {
return $self->{'midi'};
}
}
sub remove
{
my $self=shift;
return bless [ $self ],'KillerClass';
}
sub killer_callback
{
my ($self,$name)=@_;
delete $self->{$name};
return $self;
}
}
{
package KillerClass;
sub AUTOLOAD
{
our $AUTOLOAD;
my $self=shift;
my $name=$AUTOLOAD;
$name=~s/'/::/g;
$name=~s/.+:://;
return $self->[0]->killer_callback($name);
}
sub DESTROY { }
}
{
package main;
use Data::Dumper;
my $o=SomeClass->new();
$o->midi(42);
print Dumper($o);
$o->remove->midi();
print Dumper($o);
}
und wäre das sinnvoll?
Jedenfalls extrem ungewohnt und sehr umständlich.
Was passiert, wenn Du zwar remove aufrufst, aber den Methodenaufruf bei der zurückgelieferten Hilfsklassen-Instanz vergißt?
Alexander
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".