# This Perl 5 exporting code...
require Exporter;
our @ISA = qw< Exporter >;
our @EXPORT = qw< foo >;
sub foo {...}
# ...becomes this in Perl 6:
sub foo(...) is export {...}
####
# Perl 5
sub get_foo {
my $self = shift;
my $ret = $self->{foo};
return lc $ret; # always normalize
}
sub set_foo {
my ($self, $to) = @_;
$to =~ s/\s+$//; # strip whitespace at the end
$self->{foo} = $to;
}
# Perl 6:
has $:foo;
sub foo() is rw {
return new Proxy:
FETCH => { lc $:foo },
STORE => -> $to is copy {
$to ~~ s/\s+$//;
$:foo = $to;
};
}
# And then:
say $obj.foo;
$obj.foo = "...";
# Notice: Standard assignment syntax!
# Assignments should look line assingments, not like method calls
##
##
has $.foo is rw;
##
##
subtype OddInt of Int where { $^n % 2 == 1 }
has OddInt $.foo is rw;
# And then:
$obj.foo = 12; # will die (at compile-time!)