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

mad*_*dia 3 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";
      }

    }
Run Code Online (Sandbox Code Playgroud)

cjm*_*cjm 8

ref永远不会产生"STRING".(好吧,除非你创建一个STRING类并祝福一个对象.)普通字符串不是引用,所以ref返回一个false值:

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

sub sample {
  my ($argv1) = @_;
  if(not ref($argv1)) {
    print "string\n";
  }
  elsif(ref($argv1) eq "HASH") {
    print "HASH\n";
  }
}
Run Code Online (Sandbox Code Playgroud)