Comment créer un objet qui renvoie différentes valeurs dans différents contextes scalaires?

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

  •  03-07-2019
  •  | 
  •  

Question

Je souhaite renvoyer une valeur différente dans les contextes chaîne et numérique, telle que $! fait. Je sais que je peux savoir si je suis dans une liste ou dans un contexte scalaire avec wantarray, mais existe-t-il un moyen, en Perl pur, de déterminer le contexte scalaire dans lequel je me trouve? Je suppose qu’il existe également une réponse dans XS et je suis disposé à prendre cette réponse s’il n’ya aucun moyen de le faire en Perl pur.

Était-ce utile?

La solution

Découvrez le module Scalar :: Util , plus précisément la fonction 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 fait partie de la distribution principale et devrait être disponible partout où vous avez Perl.

Autres conseils

Bien que je puisse proposer des cas où cela pourrait être utile (peut-être des chiffres romains), il serait préférable de créer un objet avec un attribut entier et une chaîne. Utilisez l'attribut approprié dans le contexte approprié.

Cela vous donne la flexibilité supplémentaire de pouvoir surcharger des opérations avec une "surcharge d'utilisation". Dans un exemple à chiffres romains, dualvar fonctionnera jusqu’à ce que vous souhaitiez ajouter deux chiffres romains.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top