$self->{DES} ->{$id} = join("\t",@tmp[0 ..7]);
这一行是perl类中函数的一部分,其构造函数是
sub new {
my $class=shift;
my $self ={};
bless($self,$class);
return $self;
}
我解释它的方式是我们将id行存储为类变量DES,它是一个散列,其成员是$ id:。这是对的吗?
我还想澄清=~
运算符(它似乎总是在正则表达式之前)。据我所知,它基本上与python中的re.X
相同,其中X依赖于perl中正则表达式之后的标志(例如i)。这是对的吗?
答案 0 :(得分:6)
您的解释是正确的。 Perl将自动创建哈希内部哈希,类似于Python的defaultdict
子类,以创建更多默认值。使用常规dict和惯用Python,等效赋值将转换为:
def __init__(self, ...):
self.DES = {}
def foo(self, ...):
self.DES[id_] = "\t".join(tmp[:7])
引用的new
子是Python在库存__new__
中的作用:
def __new__(cls):
self = object.__new__(cls)
return self
bless
类似于分配给self.__class__
,除非您不需要在Python中执行此操作,因为object.__new__
已经创建了正确类的对象。该对象首先被创建为哈希(dict),因为在Perl中,大多数类对象都继承自哈希 - 与Python不同,其中对象通常包含一个词典,而不是从它继承。
=~
运算符等同于在自动编译的正则表达式模式上调用pattern.search
。仅当模式以re.X
结尾时,才会获得/x
语法。模式的其他选项可以在丰富的perlre
man page中找到。