检查perl中子例程中传递的变量类型

时间:2012-03-18 20:08:46

标签: perl subroutine

我想得到传递给子程序的变量类型。虽然谷歌搜索我遇到了以下解决方案,但这并没有给出满意的结果。 我的问题在下面的例子中说明

    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 个答案:

答案 0 :(得分:8)

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";
  }
}

答案 1 :(得分:2)

所以不要谷歌,那么。请改为阅读官方文档。

ref返回标量的空字符串。