When I run this example now (Windows and Linux) I get:

P6opaque: no such attribute '$!encoded-string' on type Codeword in a Proxy when 
trying to get a value

instead of a segfault.  If I tweak the code as below to use subs instead of 
methods for the Proxy hooks it runs fine.  The P6opaque error seems reminiscent 
of a recent IRC conversation: 
https://irclog.perlgeek.de/perl6/2018-03-03#i_15879434 .  Between the IRC 
conversation and making it work by switching to subs I suspect it might be OK 
to merge this ticket with RT 126198 .

## codeword.p6

class Codeword {
    has Sub $.scrambler is rw;
    has $!string;
    has Str $!encoded-string;

    submethod BUILD {
        my sub scrambler { $^s.trans: 'a..mn..z' => 'n..za..m', :ii }
        $!scrambler = &scrambler;
    }

    method codeword returns Str is rw {
        return Proxy.new(
            FETCH => sub ($)      { $!encoded-string },
            STORE => sub ($,$s)    { $!encoded-string = $!scrambler($s) }
        );
    }
}

my $code = Codeword.new;
$code.codeword;
$code.codeword = 'abc';
say $code.codeword;

> prints
nop

Reply via email to