1

我是 Perl 的新手,正在阅读参考资料。
我不明白如何知道他处理的变量是否是参考。
例如,如果我理解正确,这:
$b = $a可能是分配scalarsreferences. 我们怎么知道它是什么?
In CorC++我们将通过函数签名(*aor &aof **a)知道。但是Perl没有参数的签名。
那么我们如何在代码中知道什么是引用,什么不是?或者如果它是对标量或数组或散列或其他引用的引用?

4

3 回答 3

9

Perl 有一个ref你可以使用的:

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

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

于 2013-05-12T09:10:57.513 回答
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)

所以答案是:你知道它是一个引用,因为你的文档指示你的函数的调用者传递一个引用。如果您传递的不是引用,并且它被用作引用,调用者将得到一个严格的错误,因为他们的错误。

于 2013-05-12T12:54:49.970 回答
1

ref功能是您正在寻找的。文档位于http://perldoc.perl.org/functions/ref.html

ref EXPR

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

于 2013-05-12T09:12:36.443 回答