Perl中的任何函数是否与C#中的GetType()类似?

时间:2011-01-18 20:51:42

标签: perl

我一直在学习Perl,发现它与我所知道的其他OOP语言非常不同。 我试图翻译一个C#代码,如:

class Car{}, class CarList{}, class Program{}

和方法(伪代码):

if (var.GetType() == Car)
{
}
else if (var.GetType == CarList) 
{
}

如何在没有GetType函数的情况下在perl中编写它,或者是否有一个?

2 个答案:

答案 0 :(得分:11)

在很多Perl代码中,如果您正在寻找对象类的确切名称,那么ref运算符就是您想要的。由于如果值不是引用,它是未定义的,您需要在使用字符串比较之前检查该值。

if(ref $var) {
    if(ref($var) eq 'Car') {
        # ...
    } elsif(ref($var) eq 'CarList') {
        # ...
    }
}

你更有可能想要像C#的is运营商这样的东西。这将是isa UNIVERSAL方法,它由所有对象继承。来自http://perldoc.perl.org/UNIVERSAL.html的文档的示例:

use Scalar::Util 'blessed';

# Tests first whether $obj is a class instance and second whether it is an
# instance of a subclass of Some::Class
if ( blessed($obj) && $obj->isa("Some::Class") ) {
    ...
}

答案 1 :(得分:3)

ref应该是您所需要的。