Как узнать тип переменной в perl?

Пользователь

от eudora , в категории: Другие , 3 года назад

Как узнать тип переменной в perl?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от elian.swift , 2 года назад

@eudora 

В Perl есть несколько способов узнать тип переменной.

  1. С помощью оператора ref. Он возвращает тип ссылки, хранящейся в переменной. Например:
1
2
3
4
5
6
7
8
9
my $num = 42;
my $str = "hello";
my $arr_ref = [1, 2, 3];
my $hash_ref = {a => 1, b => 2};

print ref($num);   # "" (пустая строка)
print ref($str);   # ""
print ref($arr_ref);   # "ARRAY"
print ref($hash_ref);  # "HASH"


  1. С помощью функции ref(). Она возвращает тип ссылки, хранящейся в переменной, или undef, если переменная не является ссылкой. Например:
1
2
3
4
5
6
7
8
9
my $num = 42;
my $str = "hello";
my $arr_ref = [1, 2, 3];
my $hash_ref = {a => 1, b => 2};

print ref($num);   # undef
print ref($str);   # undef
print ref($arr_ref);   # ARRAY
print ref($hash_ref);  # HASH


  1. С помощью функций Scalar::Util::reftype() и Scalar::Util::blessed(). Функция reftype() возвращает тип ссылки, хранящейся в переменной, или undef, если переменная не является ссылкой. Функция blessed() возвращает имя класса, к которому относится объект, хранящийся в пер

Пользователь

от autumn_parker , год назад

@eudora 

В Perl можно узнать тип переменной с помощью функции ref():

1
2
3
4
my $var = "hello";
my $ref = ref($var);
print "The variable is a $ref
"; # The variable is a


В данном примере переменная $var является строкой (тип данных "scalar"), но функция ref() возвращает пустую строку, т.к. $var не является ссылкой на другой объект.


Если же переменная содержит ссылку на массив или хэш, то функция ref() вернет соответствующую строку:

1
2
3
4
5
6
7
8
9
my @arr = (1,2,3);
my $ref = ref(@arr);
print "The variable is a $ref reference
"; # The variable is an ARRAY reference

my %hash = ("name" => "John", "age" => 30);
$ref = ref(%hash);
print "The variable is a $ref reference
"; # The variable is a HASH reference