Al crear un objeto, es importante revisar por un lado que tengamos todos los parámetros requeridos, y por otro lado que no nos hayan invocado con algún parámetro que no sepamos manejar. Para esto, sugiero incluir en sus métodos constructores:
@necesarias = qw(color tamano tipo);
$temporal{$_} = validas{$_} = 1 foreach (keys(%$self));
$validas{$_} = 1 foreach (qw(textura temperatura));
foreach (@necesarias) {
if (defined $temporal{$_}) {
delete $temporal{$_};
} else {
die ``Me falta $_ !'';
}
}
if (@tmp2 = keys(%temporal)) {
die ``Elementos desconocidos: @tmp2'';
}