Mr.T has asked for the wisdom of the Perl Monks concerning the following question:
Hi,
I am looking for a nice efficient way to convert: 1 to 001; 2 to 002; 3 to 003; ... 10 to 010; ... 60 to 060; etc...
Thanks
Re: Help with number conversion
by gav^ (Curate) on Apr 03, 2002 at 05:28 UTC
|
$fixed = sprintf('%03d', $num);
Hope this helps...
gav^ | [reply] [d/l] |
Re: Help with number conversion
by wmono (Friar) on Apr 03, 2002 at 05:24 UTC
|
$number = 1;
$number = "0".$number until length $number >= 3;
print $number,"\n";
Hope that helps..
| [reply] [d/l] |
|
$number = 1;
$number = "0".$number until length $number >= 3;
print $number,"\n";
I'm sure merlyn just wanted you to know that although this works as expected, there are better alternatives. To many, "Matt Wright" is a synonym for "clumsy code that does however do what it's supposed to do" (not to be taken literally: merlyn didn't ask if you went to school with clumsy code :)).
Your approach is directly instructing Perl to do what you want it to do. If you feel comfortable with that, you should do it that way. But often there is some efficiency in both coding and run time to be gained when you use Perl's core functions. In this case, it'd be $number = sprintf '%03d', $number;, which is approximately 2.5 times as fast.
Learn about sprintf. It can be very confusing at first, but the %-notation is easy to get used to.
U28geW91IGNhbiBhbGwgcm90MTMgY
W5kIHBhY2soKS4gQnV0IGRvIHlvdS
ByZWNvZ25pc2UgQmFzZTY0IHdoZW4
geW91IHNlZSBpdD8gIC0tIEp1ZXJk
| [reply] [d/l] |
|
I very rarely find the need to delte any content. If anything, you should not be ashamed of your (you posted it here) code, but come back 2-3-6 months from now and see if it makes you chuckle (I often revisit ancient code for just this reason ~ if anything me style has changed quite a bit)
I also find myself quoting this time and (crazyinsomniac) Re^2: monastic wargames time again, and it's good advice (I try to take it myself very often)
Hi all y'all,
Now lokee her'.
All y'all peoples gettin' offended, don't!
Grow som' brains and grow som' brass.
When speakin' expect to be spoken to, even if you' gettin yelled at!!
Suck it up. And finally, fix that short fuse, relax and be nice, you'll live longer.
We all experience such criticism at one point or another, and whether it is warranted or not, it's irrelevant: discussion is good (good for code, and, well, good for pretty much anything -- as a general strategy, discussion rocks).
btw - I ++ed merlyn ~ he wasn't rude ~ i didn't care to vote for you
| [reply] |
|
| [reply] [d/l] |
|
$number = 42;
s/.*/"s||000$number|&&join'',reverse chop,chop,chop"/eieio;
print;
cheers
tachyon
s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print
| [reply] [d/l] |
|
|
Re: Help with number conversion
by petdance (Parson) on Apr 03, 2002 at 05:48 UTC
|
Why is "efficient" important here?
Efficient in what way?
xoxo,
Andy
--
<megaphone>
Throw down the gun and tiara and come out of the float!
</megaphone>
| [reply] |
|
Well "efficient" is subjective here I think.
Does he mean "wins when you Benchmark"?
Or does he mean "least number of bytes of
source to accomplish a task"? Or perhaps even
"the most elegant and understandable solution"?
All of which are laudable goals, at different
times and for different reasons, which may of
course have conflicting solutions. Though yes,
in general the first definition is what is
intended. Just some rambling thoughts...
UPDATE:
Just wanted to expand on this, when I first started
I focused primarily on the second form. For
three reasons a) I had a small disk quota
b) I did not know how to optimize for the first
(and still am not great at it) c) I thought this
was optimizing for the first. I figured "the
smaller the source the less in memory, the less to
handle etc. etc." Which is all of course mostly
irrelevant. Insert bit about premature optimization
here. Thought this might be some interesting
background into how some approach things.
--
perl -pe "s/\b;([st])/'\1/mg"
| [reply] |
|
|