Comment puis-je déterminer le type d'un bienheureux de référence en Perl?
En Perl, un objet est une référence à l'une de base de Perl, les types de données qui a été béni d'une classe donnée. Lorsque vous utilisez le ref() fonctionnent sur un sans être bénis de référence, on vous dit quel type de données de points de référence. Toutefois, lorsque vous appelez ref() sur un béni de référence, vous obtenez le nom du package de référence a été béni dans.
Je veux bien le type sous-jacent de la bienheureuse référence. Comment puis-je savoir cela?
Vous devez vous connecter pour publier un commentaire.
Scalar::Util::reftype()
est la solution la plus propre. LeScalar::Util
module a été ajouté à la Perl de base dans la version 5.7, mais est disponible pour les versions plus anciennes (5.004 ou plus) à partir de CPAN.Vous pouvez également sonde avec
UNIVERSAL::isa()
:Évidemment, vous pouvez également vérifier la
ARRAY
etSCALAR
types. Le module UNIVERSEL (qui sert de classe de base pour tous les objets) a été l'une des principales depuis Perl 5.003.Une autre façon -- facile, mais un peu sale -- est-à-stringify la référence. En supposant que la classe n'a pas surchargé stringification vous allez obtenir quelque chose ressemblant à
Class=HASH(0x1234ABCD)
, que vous pouvez analyser pour en extraire les données sous-jacentes type:Vous ne devriez probablement pas le faire. Le type sous-jacent d'un objet est un détail d'implémentation, vous ne devriez pas jouer avec. Pourquoi voudriez-vous savoir cela?
Et ma première réflexion a été: "les Objets en Perl sont toujours de hachage refs, de sorte que le hack?"
Mais, Scalar::Util::reftype est la réponse. Merci de mettre la question ici.
Voici un extrait de code pour le prouver.. (dans le cas où il est de toute utilisation de n'importe qui).
De sortie: