Alexander (HH): Object Getter/Setter und undef

Beitrag lesen

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".