为什么perl调试器在调用新的Term :: ReadLine时会显示Term :: ReadLine :: Stub :: new?

时间:2011-07-29 02:54:34

标签: perl

Term::ReadLine::Stub::new(/usr/lib/perl5/5.8.8/Term/ReadLine.pm:243):

我希望看到Term::ReadLine::new,这通常是我new打包的时候。

任何人都知道原因吗?

1 个答案:

答案 0 :(得分:3)

这是继承。 Term :: Readline从顶部的package Term::ReadLine::Stub开始,然后在package Term::ReadLine之内,您会看到以下内容:

our @ISA;
if (defined &Term::ReadLine::Gnu::readline) {
  @ISA = qw(Term::ReadLine::Gnu Term::ReadLine::Stub);
} elsif (defined &Term::ReadLine::Perl::readline) {
  @ISA = qw(Term::ReadLine::Perl Term::ReadLine::Stub);
} elsif (defined $which && defined &{"Term::ReadLine::$which\::readline"}) {
  @ISA = "Term::ReadLine::$which";
} else {
  @ISA = qw(Term::ReadLine::Stub);
}

sub new()在Term :: ReadLine :: Stub中创建并继承到Term :: ReadLine中。

如果它实际上告诉你继承子的位置(就像它一样),调试器是最有用的。如果你被调试器指导到Term :: ReadLine,那么你不得不趟过所有的@ISA级别,直到找到一个定义了new()的程序。想象一下,对象系统中的泥潭允许多层继承(如Perl所做)和多重继承(如Perl所做)。