in reply to Peeling the Peelings

I came up with this:
sub prop3 { my $str = shift; my $level = shift || 0; return $str unless $level; # 3rd update my @str = split(/[()]/, $str); splice @str, 0, $level; my $out = join('(', @str); $out .= ')' x ( @str - 1 ); return $out; }
But it's actually about 10% slower than the original. Go figure.


update: more testing - it really is slower. Very aggravating to me, since it looks like good clean code to me.


update again: Also came up with this, which is somewhat quicker, but uglier:
sub getpropstr { local $_ = shift; my $level = shift || 0; if ( $level == -1 ) { /([^()]+)\)+$/; return $1 } while ( $level-- > 0) { chop; s/^[^(]+\(//; } return $_; }
3rd update: line commented w/ '3rd update' in my first routine makes it closer to the same speed as the OP's original.

--Bob Niederman, http://bob-n.com