¿Cómo creo un objeto que devuelve valores diferentes en contextos escalares diferentes?
Pregunta
Quiero devolver un valor diferente en el contexto de la cadena y el contexto numérico como
Solución
Vea el módulo Scalar :: Util
, específicamente la función dualvar ()
:
use Scalar::Util qw(dualvar);
my $scalar = dualvar 10, "Hello";
my $twelve = $scalar + 2; # $twelve = 12
my $greeting = $scalar . " world"; # $greeting = "Hello world"
Scalar :: Util
es parte de la distribución central, y debería estar disponible en cualquier lugar donde tenga Perl.
Otros consejos
Si bien puedo proponer casos en los que esto sería útil (tal vez números romanos), sería mejor crear un objeto con un entero y un atributo de cadena. Use el atributo apropiado en el contexto apropiado.
Esto le brinda la flexibilidad adicional de poder sobrecargar las operaciones con 'usar sobrecarga'. En un ejemplo de Números romanos, dualvar funcionará hasta que desee agregar 2 números romanos juntos.