If you don't return $self, you're taking the decision for the user. Which isn't very friendly.
That's actually a better argument than it might seem like, but, as I wrote in my root node update, if you don't write separate mutators, but rather a single central property setter method, you completely obviate the need for chaining to begin with:
$window->set( title => 'foo', border => 20 );
And I was almost going to point out that you were picking up the wrong widget in your rewrite of the chaining because the en passant assignment in
my $button = $window->child->border(20);
misled me.
Really, don't mix these things. It seriously makes reading the code an excercise in frustration.
Makeshifts last the longest.
In reply to Re^2: Mutator chaining considered harmful
by Aristotle
in thread Mutator chaining considered harmful
by Aristotle
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |