On Wed, Apr 27, 2005 at 06:29:46PM +0200, Thomas Sandlaß wrote: > Patrick R. Michaud wrote: > >>my $matches = any( @x_chars ) eq any( @y_chars ); > >>my $match = $matches.pick; > > > >Perhaps the easiest way to explain the difficulty here is to note that > >executing a relational op (i.e. returning a boolean) value on a junction > >argument returns a junction of boolean values. > > Is that so? Does Perl6 have some fundamental law of junction preservation? > I would expect $matches to be either false or true---the junction values > are garbage collected.
I would certainly expect $matches to be false or true if the expression was invoked in a boolean context, but I'm not certain it can "auto-collapse" outside of that. In particular, we know that $x = any(0, 1); $y = $x + 1; # $y == any(1, 2) so a slightly different formulation of this would be: $w = any('a', 'b'); $x = $w eq 'b'; # $x == any(0, 1) $y = $x + 1; # $y == any(1, 2) I think the assignment to $x above shouldn't be collapsed directly to a simple false or true value until it's evaluated in a boolean context. Pm