¿Cómo creo un objeto que devuelve valores diferentes en contextos escalares diferentes?

StackOverflow https://stackoverflow.com/questions/800436

  •  03-07-2019
  •  | 
  •  

Pregunta

Quiero devolver un valor diferente en el contexto de la cadena y el contexto numérico como $! lo hace. Sé que puedo averiguar si estoy en una lista o contexto escalar con wantarray, pero ¿hay alguna manera en Perl puro para determinar en qué contexto escalar estoy? Supongo que también hay una respuesta en XS y estoy dispuesto a aceptar esa respuesta si no hay forma de hacerlo en Perl puro.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top