It was pretty obvious why it was taking so long; I dumped the @show array out and found out my grep was matching everything. I checked the regular expression, but it was clean; same one I'd used before.
m/^$searchterm/was what I'm matching with.
The problem, then, was $searchterm. Check check check, all the code revolving around $searchterm was straight from the original. I'd hashed out all those little problems long ago, I'd thought.
Then I took a look at my sub fix(). Fix is supposed to return the searchterm with case changes so it'll match the database properly. A few prints later, I realize fix is returning nothing, so the searchterm is nothing, so the grep matches every single stinkin' line.
The page loads in under a second now, quick and pretty. Everything's laid out where it should be.
I decided on a name for this mess (I always tried to avoid calling it anything before), the GUICE. Greg's Unique-Item Commerce Engine. Pronounced like 'grease', if it were spelt 'gwease'. If I ever get smart, I may even be able to make it workable. I doubt anybody except game shops will ever need it, though: Most situations where you deal with unique items for sale that I can think of (diamonds, artwork), the thing is so valuable that you can afford to negotiate each sale individually. Magic cards are *not*. (The tentative lowest sale price for anything we're going to sell is a dollar, and the highest is still under US$300.00, so the situation is fairly unique to cheaper collectibles.)
If it's ever released in some fashion, it will SPECIFICALLY state that NO ONE may EVER sell Beanie Babies with it, under penalty of loss of all assets to me.
As if I'm ever going to get it that clean or that well-made. *shrug* Oh well. I guess I'll find out...