The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
package TestChain;

use Class::AccessorMaker {
  one => "",
  two => {},
  three => [] };

1;

package TestChain::Priv;

use Class::AccessorMaker {
  one => "",
  two => {},
  three => [] };

1;

package main;

use Test::More tests => 8;
use strict;

my $test = TestChain->new();
ok($test->one(1)
	->two({key => "value"})
	->three([1,2]), 
	"chaining - OK");
is($test->one, 1, "1st value - OK");
is($test->two()->{key}, "value", "2nd value - OK");
is($test->three()->[1], 2, "3rd value - OK");

$test = TestChain::Priv->new();
ok($test->one(1)
	->two({key => "value"})
	->three([1,2]), 
	"Private chaining - OK");
is($test->one, 1, "1st private value - OK");
is($test->two()->{key}, "value", "2nd private value - OK");
is($test->three()->[1], 2, "3rd private value - OK");