note
Rhys
While [Aristotle] posted a solution that more closely approximates the switch/case behavior, but - aside from the additional tests - isn't yours the better way to do it in Perl (meaning that it's a hell of a lot more readable as the number of cases grows)?
<p>
Or what about:
<code>
$accum = '';
for ( $var ) {
if ( $_ < 1 ) { last; } else { $accum = 'j'.$accum; }
if ( $_ < 2 ) { last; } else { $accum = 'i'.$accum; }
if ( $_ < 3 ) { last; } else { $accum = 'h'.$accum; }
if ( $_ < 4 ) { last; } else { $accum = 'g'.$accum; }
if ( $_ < 5 ) { last; } else { $accum = 'f'.$accum; }
if ( $_ < 6 ) { last; } else { $accum = 'e'.$accum; }
if ( $_ < 7 ) { last; } else { $accum = 'd'.$accum; }
if ( $_ < 8 ) { last; } else { $accum = 'c'.$accum; }
if ( $_ < 9 ) { last; } else { $accum = 'b'.$accum; }
$accum = 'a'.$accum;
}
</code>
Wouldn't that be similar, but provide a shortcut out (so we don't <i>always</i> run ten tests)? Also, <code>push</code>-ing onto an array and <code>join</code>-ing it at the end might be a little more flexible than the . operator...
<p>
Just musing (as usual)...
<p>
--J
<p>
<b>Update:</b> The examples using <code>goto</code> further down are even faster (fewer tests) and preserve the fallthrough <i>and</i> the ability to execute arbitrary code in each case (rather than literally doing string manipulation), but you get an earful from purists when you use <code>goto</code>. :-)
388880
388895