Paul Archer wrote: > 4:09pm, Ramprasad A Padmanabhan wrote: > > And the problem is not simply a puzzle, nor is it homework. If you had read > my post more carefully, you would see that I am 1) *teaching* the class, and > 2) want to be able to show off one concept (the range operator) before we > have talked about another concept (the 'reverse' statement).
Even more reason, if you are in the position of a teacher, not to use the range operator for this purpose. It is simply inappropriate. Unless there is only a certain subset of elements in the array for which you want to do magic, the foreach (@array_name) format communicates intent much more clearly. I'm a little surprised that no one has yet posted what seems to me the most direct and transparent soltion: [note the sample does make use of the range operator in a more appropriate context] Greetings! E:\d_drive\perlStuff>perl -w my @keeper = (1..15); { my @temp; push @temp, pop @keeper while @keeper; @keeper = @temp; } print "$_ " for @keeper; ^Z 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 I like the above because: 1. It is transparent. You can "see" the data being moved. 2. It is process efficient. Each element is moved only once, and an array name is redirected. It does what it takes--no more and no less. 3. It minimizes memory demands painlessly. The original storage for @keeper is returned to the store when it is re-assigned, and @temp disappears entirely outside the {...} closure, leaving @keeper pointing to the reversed array. Hmmm... On second thought, I'm not sure about process efficiency here, Perl may re-copy the whole array in the assignment. In which case, the more efficient and elegant solution would use references: Greetings! E:\d_drive\perlStuff>perl -w my $keeper = [1..15]; { my $temp = []; # " = []" Not strictly neccesary. The first push() would autovivify @$temp push @$temp, pop @$keeper while @$keeper; $keeper = $temp; } print "$_ " for @$keeper; print "\n"; ^Z 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 As a side exercise, you might have your students add the implicit parens. Joseph -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]