# SPUG: Rebuked...

Steve Laybourn otter101 at hotmail.com
Tue Jan 4 13:09:20 CST 2000

```Hello again!
All right. I consider myself severely rebuked for posting such a crummy bit
of code. But how am I gonna learn if I don't ask about it?

Ken McGlothlen was nice enough (I think) to give me the sort of
grab-that-guy-by-the-collar-and-shake-some-sense-into-him wake-up call and
tell me why my code was inefficient. I more or less paraphrase him now:

>So here's my rewrite of your function:
(My turn to see if I have the interpretation of this correct):
>
>	sub Cur {
>	    my( \$ix ) = shift;

---Let local variable \$ix equal the first element of the default array @_,
which in this case also equals \$_. Hmmm, clever, that. How would you handle
more than one element going in to the array? @_[0], at _[1], etc.?

>	    \$ix = sprintf( "%.2f", \$ix );

---This bit puzzles me a little. I understand the rounding function
represented by the "%.2f" (you described it earlier, I'm looking into that
further), but wouldn't assigning the result to \$ix write over the current
value of \$ix, thusly eliminating the whole dollar part of \$ix?

>	    1 while \$ix =~ s/(.*\d)(\d\d\d)/\$1,\$2/g;

---OK, I really had to think this one out, but here goes:
---If the regular expression evaluates to true, then do the operation. Hmmm,
I had wanted to work with up to nine digits and two decimal places, so
would:
---1 while \$ix=~ s/(.*\d)(\d\d\d)(\d\d\d)/\$1,\$2,\$3/g;
---be more or less correct? The "1 while ..." statement is completely new to
me. A long time ago I would have thought it to be a label or a line number.

>	    return( "\\$\$ix" );

---Prefix the result with a dollar sign and return the string.

>	}
>
>Does that help?
---Indeed it does. Sounds like I could save lots of time and variable space
doing it this way.

Again, I apologize for not being terribly good at Perl, but if I had known
that people were going to actually answer back in this group, I would have
joined long ago and learned to code a lot more responsibly than this!

Thanks again. I'll be sure to irritate you again very soon.

Be seeing you...
Steve Laybourn

______________________________________________________
Get Your Private, Free Email at http://www.hotmail.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
POST TO: spug-list at pm.org        PROBLEMS: owner-spug-list at pm.org