public
Created

  • Download Gist
Animal2.pm
Perl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
# NOTE: This is simply an example of a legacy blessed-hash object.
# I do not recommend using it.
package Animal2;
use strict;
 
sub new {
my $class = shift;
my $self = {};
$self->{_name} = shift;
bless($self, $class);
return $self;
}
 
sub name {
my $self = shift;
if (@_) { $self->{_name} = shift }
return $self->{_name};
}
 
1;
Camel.pm
Perl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
package Camel;
use Moose;
use MooseX::NonMoose;
extends 'Animal2';
 
has 'humps' => ( is => 'ro', isa => 'Num' );
 
# Make sure Moose::Object parent gets a hashref with 'humps' in it
around BUILDARGS => sub {
my $orig = shift;
my $class = shift;
# We expect this to be called with: Camel->new($name, $optional_humps)
# so @_ contains a name, and possibly a number of humps.
my $camel_name = shift;
my $camel_humps = shift;
 
my $moose_args = {};
$moose_args->{humps} = $camel_humps if defined $camel_humps;
 
# Give Moose constructor what it wants
return $class->$orig($moose_args);
};
 
# Make sure Animal2 parent only gets a name
sub FOREIGNBUILDARGS {
my $class = shift;
my $name = shift;
my $humps = shift; # We are going to ignore this.
 
# Whatever we return will be sent to Animal2->new()
return $name;
}
 
no Moose;
__PACKAGE__->meta->make_immutable;
example2_2.pl
Perl
1 2 3 4 5 6
#!/usr/bin/perl
use Modern::Perl;
use Camel;
 
my $c = Camel->new("Samuel Camel", 2);
say $c->name, " has ", $c->humps, " humps";

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.