Guest
Public paste!

mhg

By: a guest | Feb 3rd, 2010 | Syntax: Perl | Size: 1.21 KB | Hits: 252 | Expires: Never
This paste has a previous version, view the difference. Copy text to clipboard
  1. package TestMoose;
  2. use Moose;
  3.  
  4. sub track_master {
  5.     my ( $orig, $self, $value ) = @_;
  6.  
  7.     return $self->$orig( $value ) if $value;
  8.  
  9.     my $out = $self->$orig();
  10.     return $out->( $self ) if ref $out eq 'CODE';
  11.  
  12.     return $self->$orig();
  13. }
  14.  
  15.     has color  => (
  16.         is      => 'rw',
  17.         default => 'red',
  18.     );
  19.  
  20.     has line_color     => (
  21.         is          => 'rw',
  22.         lazy        => 1,
  23.         default     => sub { sub { $_[0]->color } },
  24.     );
  25.     around line_color   => \&track_master;
  26.  
  27.     has font_color  => (
  28.         is          => 'rw',
  29.         lazy        => 1,
  30.         default     => sub { sub { $_[0]->color } },
  31.     );
  32.     around font_color   => \&track_master;
  33.  
  34. package main;
  35.  
  36. my $t = TestMoose->new;
  37.  
  38. # Should be red red red
  39. print join ' ', $t->color, $t->line_color, $t->font_color, "\n";
  40.  
  41. $t->color( 'green' );
  42.  
  43. # Should be green green green
  44. print join ' ', $t->color, $t->line_color, $t->font_color, "\n";
  45.  
  46. $t->line_color( 'pink' );
  47.  
  48. # Should be green pink green
  49. print join ' ', $t->color, $t->line_color, $t->font_color, "\n";
  50.  
  51. $t->color( 'blue' );
  52.  
  53. # Should be blue pink blue
  54. print join ' ', $t->color, $t->line_color, $t->font_color, "\n";