Scalar::Util::reftype()
is the cleanest solution. The Scalar::Util
module was added to the Perl core in version 5.7 but is available for older versions (5.004 or later) from CPAN.
De asemenea, puteți să sondați cu UNIVERSAL :: isa()
:
$x->isa('HASH') # if $x is known to be an object
UNIVERSAL::isa($x, 'HASH') # if $x might not be an object or reference
Evident, ar trebui să verificați și tipurile ARRAY
și SCALAR
. Modulul UNIVERSAL (care servește ca clasă de bază pentru toate obiectele) a făcut parte din nucleu de la Perl 5.003.
Un alt mod - ușor, dar puțin murdar - este de a strânge referința. Presupunând că clasa nu a supraîncărcat stringificarea, veți primi ceva asemănător cu Class = HASH (0x1234ABCD)
, pe care îl puteți parsa pentru a extrage tipul de date care se află subiacent:
my $type = ($object =~ /=(.+)\(0x[0-9a-f]+\)$/i);