Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env perl
- use 5.010;
- use utf8;
- use strict;
- use warnings;
- use autodie;
- my $j = do {
- package MyJObject;
- use overload '""' => sub { shift->to_string };
- my %num_to_string = (
- 1 => 'one',
- 2 => 'two',
- 3 => 'three',
- 4 => 'four',
- 5 => 'five',
- 6 => 'six',
- 7 => 'seven',
- 8 => 'eight',
- 9 => 'nine',
- 0 => 'zero',
- );
- sub new {
- my ( $self, $val ) = @_;
- my $obj = bless { _val => 0 }, ref $self ? ref $self : $self;
- $obj->val($val);
- return $obj;
- }
- sub clone {
- my $self = shift;
- return $self->new( $self->val );
- }
- sub val {
- my ( $self, $val ) = @_;
- if (defined $val) {
- if ($val =~ /^\d+$/) {
- $self->{_val} = $val;
- }
- else {
- $self->{_val} = 0;
- }
- }
- return $self->{_val};
- }
- sub to_string {
- my $self = shift;
- return join '-', map { $num_to_string{$_} } split //, $self->val;
- }
- sub equal_to {
- my ( $self, $obj ) = @_;
- return !$self->_compare($obj);
- }
- sub not_equal_to {
- my ( $self, $obj ) = @_;
- return !$self->equal_to($obj);
- }
- sub less_than {
- my ( $self, $obj ) = @_;
- return $self->_compare($obj) == -1;
- }
- sub greater_than {
- my ( $self, $obj ) = @_;
- return $self->_compare($obj) == 1;
- }
- sub less_than_or_equal_to {
- my ( $self, $obj ) = @_;
- return $self->less_than($obj) || $self->equal_to($obj);
- }
- sub greater_than_or_equal_to {
- my ( $self, $obj ) = @_;
- return $self->greater_than($obj) || $self->equal_to($obj);
- }
- sub _compare {
- my ( $self, $obj ) = @_;
- return $self->val <=> $obj->val;
- }
- sub debug {
- my $self = shift;
- return $self->val . ": $self";
- }
- __PACKAGE__->new;
- };
- say $j->debug;
- $j->val(13579);
- say $j->debug;
- my $i = $j->new(24680);
- say $i->debug;
- my $k = $j->clone;
- say $k->debug;
- say "$j and $k are same" if $j->equal_to($k);
- say "$j and $i are not same" if $j->not_equal_to($i);
- say "$i is greater than $j" if $i->greater_than($j);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement