Perl引用。我们怎么知道它是一个?

时间:2013-05-12 09:07:31

标签: perl reference

我是Perl的新手并阅读有关参考文献的内容 我无法理解如何知道他所处理的变量是否为参考 例如,如果我理解正确,这个:
$b = $a可以分配scalarsreferences。我们怎么知道它是什么? 在CC++我们会通过函数签名(*a的{​​{1}}或&a)知道。但是在**a中没有参数的签名 那么我们如何在代码中知道什么是引用而哪些不是?或者,如果它是对标量或数组或散列或其他引用的引用?

3 个答案:

答案 0 :(得分:9)

Perl有ref你可以用它:

  

如果EXPR是引用,则返回非空字符串,否则返回空字符串。 [...]

返回的字符串(如果非空)将告诉您引用引用的对象类型。

答案 1 :(得分:4)

你问的是错误的问题。

虽然有一个名为ref的函数和另一个名为reftype的函数,但这些函数不是您应该使用的函数。

检查变量的类型是不好的,因为由于过载和魔法而无法实际使用它而无法有效地知道。

例如,假设您设计了一个接受引用或字符串的函数。这将是一个糟糕的设计,因为重载字符串化的对象都是。

一个好的接口会使用上下文来区分参数。例如,它可以根据参数的数量进行区分,

foo($point_obj)
   -vs-
foo(x => $x, y => $y)

基于其他参数的值,

foo(fh => $fh)
   -vs-
foo(str => $file_contents)

或基于名为

的功能选择
foo_from_fh($fh)
   -vs-
foo($file_contents)

所以答案是:你知道它是一个参考,因为你的文档指示你的函数的调用者传递一个引用。如果你传递的东西不是引用而且它被用作引用,那么调用者将会因错误而得到严格的错误。

答案 2 :(得分:1)

ref功能正是您所需要的。文档位于http://perldoc.perl.org/functions/ref.html

  

ref EXPR

     

如果EXPR是引用,则返回非空字符串,否则返回空字符串。如果EXPR是   未指定,将使用$ _。返回的值取决于事物的类型   参考是对...的引用。