我是Perl的新手并阅读有关参考文献的内容
我无法理解如何知道他所处理的变量是否为参考
例如,如果我理解正确,这个:
$b = $a
可以分配scalars
或references
。我们怎么知道它是什么?
在C
或C++
我们会通过函数签名(*a
的{{1}}或&a
)知道。但是在**a
中没有参数的签名
那么我们如何在代码中知道什么是引用而哪些不是?或者,如果它是对标量或数组或散列或其他引用的引用?
答案 0 :(得分:9)
答案 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是 未指定,将使用$ _。返回的值取决于事物的类型 参考是对...的引用。