Miko O'Sullivan wrote: > Just checking here: is PRE_LAST a separate and non-mutually exclusive > concept from LAST? I.e., would this make sense: > > foreach @arr -> $i { > PRE_LAST {print "before last loop\n"} > LAST {print "after last loop\n"} > print "$i\n"; > } > > If so, wouldn't look-aheads still result in chaos and > confusion for tied arrays?
Under the hypothetical PRE_LAST block, I'd expect your code to make sense. It it too much to ask, of the creator of a tied array, to implement their code in such a way that *reading* an element of that array does not have significant side-effects? If one is doing object oriented programming, then the concept of substitutability requires that I can use a subclass anywhere that I can use the base class. When I use an array, I expect to be able to read elements from it, at random, without breaking it. If a tied array does not permit me to read its elements without worrying about hideous side effects, then it is not an array. > If not, then I'd definitely disagree: to me, for's and > while's are just different flavors of "loop" and should > behave the same in every way possible. The great things about things that are different, is that they are permitted to differ. C<while> and C<foreach> are not synonyms. They have distinct characters. To me, the concept of PRE_LAST makes sense in the context of C<foreach>, and is easy to implement. In the case of a C<while>, or C<loop> loop, the concept may still make sense: but the details of the semantics need careful consideration. There's a great danger of analysis-paralysis if we cogitate on the difficult case. So perhaps we can first seek agreement on the easy case. Dave.