проверить тип переменной, передаваемой в подпрограмме в Perl - PullRequest
3 голосов
/ 19 марта 2012

Я хочу получить тип переменной, передаваемой в подпрограмму. Во время поиска в Google я наткнулся на решение ниже, но это не дает удовлетворительных результатов.Моя проблема проиллюстрирована в следующем примере

    sample("test");
    sample(\%a);

    sub sample {
      my ($argv1) = @_;
      if(ref($argv1) eq "STRING") {
        print "string\n";
      }
      elsif(ref($argv1) eq "HASH") {
        print "HASH\n";
      }

    }

Ответы [ 2 ]

8 голосов
/ 19 марта 2012

ref никогда не выдает «STRING».(Ну, если вы не создадите класс STRING и не благословите объект.) Нормальная строка не является ссылкой, поэтому ref возвращает ложное значение:

sample("test");
sample(\%a);

sub sample {
  my ($argv1) = @_;
  if(not ref($argv1)) {
    print "string\n";
  }
  elsif(ref($argv1) eq "HASH") {
    print "HASH\n";
  }
}
2 голосов
/ 19 марта 2012

Так что не гуглите тогда. Вместо этого прочтите официальную документацию.

ref возвращает пустую строку для скаляров.

...