Beat: Object Getter/Setter und undef

Beitrag lesen

Hi
Ich sitze gerade for einem Designproblem.

Ein Object Getter/Setter der einfachsten Art ist

  
sub midi {  
  my $score = shift;  
  if( $_[0] ){ $score->{midi} = $_[0] }  
  return $score->{midi};  
}  

nun sollte mein Getter/Setter aber folgendes erfüllen:

  
$ob->midi  
$ob->midi()  
# gibt den Inhalt aus $score->{midi} zurück  
  
$ob->midi("val")  
# setzt den Inhalt von $score->{midi}  
# und gibt den neuen Inhalt zurück  
  
$ob->midi(undef)  
# entfernt die Eigenschaft $score->{midi}  

obiges ist aber identisch mit
$ob->midi()
und ist deshalb ein einfacher Getter.

Ich könnte zwar folgendes Design wählen:
$ob->midi("")
Jedoch muss ich eine leeren aber definierte Wert vorhalten
so kommt das also nicht in Frage.

nun ist undef ja sowohl ein undefinierter Wert als auch ein Operator
undef $hash->{value} würde also den Wert auf undef setzen. Das iist mein Ziel.

Nun kann ich aber nicht schreiben:

undef $ob->midi();

Mir bleibt nur der Ausweg, eine Methode zu schreiben:

$ob->remove_midi

Wie kann ich das vermeiden?
Es handelt sich um einige Methoden die konsistent behandelt werden müssen.

mfg Beat

--
><o(((°>           ><o(((°>
   <°)))o><                     ><o(((°>o
Der Valigator leibt diese Fische