2013-05-12 35 views
1

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

回答

9

Perl有一个ref,您可以使用为:

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

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

+0

所以通常用这个来检查类型?但是引用什么类型? – Jim 2013-05-12 09:12:23

+0

我不知道“常见”,但是如果您需要知道某件事是否引用了其他内容,那么这是您使用的功能。 Re:你编辑的评论:点击链接。 – Mat 2013-05-12 09:13:19

+0

@Jim,不,这不常见。你不应该使用它。 – ikegami 2013-05-12 12:44:45

1

ref功能就是你要找的。文档可在http://perldoc.perl.org/functions/ref.html

ref EXPR

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

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) 

所以答案是:您知道这是一个参考,因为您的文档指示您的函数的调用者传递参考。如果您通过了除引用之外的其他内容并将其用作引用,则调用者将因其错误而导致严格的错误。

+0

谢谢ikegami,指出非问题! – innaM 2013-05-13 11:19:21

相关问题