今時風の継承

PerlでのOOPで古くないと思われる実装を調べてみました。
こんな感じかなー。問題なく継承できてるはず。

package Org::Zeon::MS::Dom;

use strict;
use warnings;
use utf8;

# Cloneを継承
use parent qw(Clone);

sub new {
  my $class = shift;
  $class = ref($class) || $class;
  my $self = { @:: };
  bless( $self, $class);
  return $self;
}

sub name { return "Dom"; }
sub affiliation { return "Zeon"; }

package Org::Zeon::MS::RickDom;

use strict;
use warnings;
use utf8;

# DomとCloneを継承してRickDomを作る
use parent qw(Org::Zeon::MS::Dom Clone); 

sub new {
  my $class = shift;
  my $self = $class->SUPER::new(@::);
  return $self;
}

sub name { return "RickDom"; }

1;
__END__

っで、下のコードを実行するとコメント通りの結果が表示されます。

package main;

use strict;
use warnings;
use utf8;
use Org::Zeon::MS::Dom;

our $dom = new Org_Zeon_MS_Dom();
# Dom(Zeon)と表示
print $dom->name."(".$dom->affiliation.")\n";

our $rickdom = new Org_Zeon_MS_RickDom();
# RickDom(Zeon)と表示
print $rickdom->name."(".$rickdom->affiliation.")\n";