This is a known deficiency for which we actually have TODO’d tests RT #124454 RT #124496
ObjAt currently just being a Str is a hack that will need to have some VM support to be fixable. > On 15 Aug 2016, at 15:48, Zefram (via RT) <[email protected]> > wrote: > > # New Ticket Created by Zefram > # Please include the string: [perl #128947] > # in the subject line of all future correspondence about this issue. > # <URL: https://rt.perl.org/Ticket/Display.html?id=128947 > > > >> ("a|Str|b" => "c").perl > "a|Str|b" => "c" >> ("a" => "b|Str|c").perl > :a("b|Str|c") >> ("a|Str|b" => "c").WHICH > Pair|Str|a|Str|b|Str|c >> ("a" => "b|Str|c").WHICH > Pair|Str|a|Str|b|Str|c >> ("a|Str|b" => "c").WHICH === ("a" => "b|Str|c").WHICH > True >> ("a|Str|b" => "c") === ("a" => "b|Str|c") > True >> ("a|Str|b" => "c") cmp ("a" => "b|Str|c") > More > > These two pairs are behaviourally distinct, as shown by their .perl > outputs, but they get the same .WHICH strings. Presumably as a result, > === claims them to be equivalent, though cmp correctly shows them to > be different. This is all very similar to [perl #128943] concerning > the Set class. Also, like Set.WHICH, Pair.WHICH on these pairs returns > plain strings as Str objects, rather than ObjAt objects. > > -zefram
