Je veux retourner une valeur différente dans un contexte de chaîne et un contexte numérique comme le fait $!
. Je sais que je peux savoir si je suis dans une liste ou un contexte scalaire avec wantarray, mais y a-t-il un moyen en Perl pur de déterminer le contexte scalaire dans lequel je suis? Je suppose qu'il y a aussi une réponse dans XS et je suis prêt à prendre cette réponse s'il n'y a aucun moyen de le faire en Perl pur.Comment créer un objet qui renvoie des valeurs différentes dans différents contextes scalaires?
4
A
Répondre
13
Vérifiez le module Scalar::Util
, en particulier 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 de base, et devrait être avaliable partout où vous avez Perl.
2
Bien que je puisse proposer des cas où cela serait utile (peut-être des chiffres romains), vous feriez mieux de créer un objet avec un entier et un attribut de chaîne. Utilisez l'attribut approprié dans le contexte approprié. Cela vous donne la flexibilité supplémentaire de pouvoir surcharger les opérations avec 'surcharge d'utilisation'. Dans un exemple de chiffres romains, dualvar fonctionnera jusqu'à ce que vous vouliez ajouter 2 chiffres romains ensemble.
Merci, ça fait exactement ce dont j'ai besoin. J'ai vraiment besoin de passer par le Core à nouveau. Il y a trop de bonnes choses que j'ai oubliées/jamais connues. –