bradcathey has asked for the wisdom of the Perl Monks concerning the following question:
Fellow Monasterians:
I have an array where I want to eliminate all the elements between, and including, the two starting and ending elements. So, in my example below, I'd like to end up with a @array of one 1{ two } three six, eliminating 2{ four five }. I found a way (thanks to Q&A), but it looks rather clunky (and I get a "Use of initiated value" in my second regex test). Is there a shorter way, like grep or map (though I like this one because it doesn't create a new array)? Golf anyone?
#!/usr/bin/perl -w use strict; my @array = qw( one 1{ two } three 2{ four five } six ); my $i = 0; my $start; while ( $i <= $#array ) { if ($start && $array[$i] =~ /}/) { splice @array, $i, 1; undef $start; $i++; } if ($start || $array[$i] =~ /2{/) { $start = 1; splice @array, $i, 1; } else { $i++; } } print @array;
Thanks all!
Update: fixed spelling and clarity
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: A better way to splice between 2 elements in array
by Aristotle (Chancellor) on Aug 07, 2004 at 21:01 UTC | |
by bradcathey (Prior) on Aug 07, 2004 at 21:14 UTC |