Во-первых, $hash{"b"} = qw/a b c/;
будет хранить 'c'
в $hash{"b"}
, а не массив, вы могли иметь в виду $hash{"b"} = [ qw/a b c/ ];
, который будет хранить ссылку на массив в $hash{"b"}
. Это ключевой бит информации. Все, кроме скаляра, должно быть сохранено в качестве ссылки при назначении на скаляр. Существует функция с именем ref
, которая сообщит вам информацию о ссылке, но она передаст вам имя класса объекта, если ссылка была благословлена. К счастью, есть другая функция с именем reftype
, которая всегда возвращает тип структуры в Scalar::Util
.
#!/usr/bin/perl
use strict;
use warnings;
use Scalar::Util qw/reftype/;
my $rs = \4;
my $ra = [1 .. 5];
my $rh = { a => 1 };
my $obj = bless {}, "UNIVERSAL";
print "ref: ", ref($rs), " reftype: ", reftype($rs), "\n",
"ref: ", ref($ra), " reftype: ", reftype($ra), "\n",
"ref: ", ref($rh), " reftype: ", reftype($rh), "\n",
"ref: ", ref($obj), " reftype: ", reftype($obj), "\n";