On 5/24/05, Robert Citek <[EMAIL PROTECTED]> wrote: > > On May 24, 2005, at 3:14 PM, Jay Savage wrote: > > One thing that springs to mind is: > > > > perl -le ' > > $foo = "fee fie foe foo"; > > map {$i++; push @bar, $i if $_ eq "e"} split //, $foo; > > print join(":",@bar)' > > > > I'm not sure if it gains you anything, though: as you say, map is > > designed for lists. > > I like your idea. Unfortunately, the above works only in the special > case where the regular expression match is actually a single- > character, exact match. > > Regards, > - Robert
It works for your example case; if you have a different case in mind, there will be a different solution. There is rarely a "general case" in perl, especially if the goal is to keep the code a reasonable one-liner invoked with 'perl -le'. constructions using map in particular yeild very specific results. If you want to avoid while without using map you can also do something like the following: $_ = $foo; s/e/push @bar, pos/eg; Make sure to copy the variable, though; s/// will mangle it. Note, too, that /e(?{push @bar, pos})/g; should work, but seems to ignore the /g. HTH, --jay -------------------- daggerquill [at] gmail [dot] com http://www.engatiki.org -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>