Object::Pad review Yuki Kimoto's 2021-08-23 - Constructor argument customize

In this time, I review constructor argument customize. BUILDARGS can customize contructer argument. It is good enough for me. I think existing library that receive hash references as argument will have a slight performance penalty because a BUILDARGS function call.


Point->new($x, $y)

use strict;
use warnings;

use Object::Pad;
 
class Point {
   has $x :param = 0;
   has $y :param = 0;
   
   sub BUILDARGS {
     my ($class, $_x, $_y) = @_;
     
     return (x => $_x, y => $_y);
   }
 
   method move {
      my ($dX, $dY) = @_;
      $x += $dX;
      $y += $dY;
   }
 
   method describe {
      print "A point at ($x, $y)\n";
   }
}

{
  my $x = 5;
  my $y = 10;
  my $point = Point->new($x, $y);
  $point->describe;
}

Point->new({x => $x, y => $y})

use strict;
use warnings;

use Object::Pad;
 
class Point {
   has $x :param = 0;
   has $y :param = 0;
   
   sub BUILDARGS {
     my ($class, $args) = @_;
     
     return (%$args);
   }
 
   method move {
      my ($dX, $dY) = @_;
      $x += $dX;
      $y += $dY;
   }
 
   method describe {
      print "A point at ($x, $y)\n";
   }
}

{
  my $x = 5;
  my $y = 10;
  my $point = Point->new({x => $x, y => $y});
  $point->describe;
}

Leave a comment

About Yuki Kimoto

user-pic I'm Perl Programmer. I LOVE Perl. I want to contribute Perl community and Perl users.