Re: Faster perl operation?

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: Joseph Sinclair
Date:  
To: Main PLUG discussion list
Subject: Re: Faster perl operation?
Joshua Zeidner wrote:
> On 1/17/07, Jerry Davis <> wrote:
>>
>> On Wednesday 17 January 2007 19:34, Kevin Brown wrote:
>> > I'm working on a small script (so far only about 1000 lines long) and
>> > I'm finding that I'd like a faster way to do:
>> >
>> > $variable = "." x ($start - 1);
>> >
>> > which is incredibly slow since it is creating sometimes on the order of
>> > 100,000 to 3,000,000 (yes, Million) periods to fill up the needed
>> string.
>>
>> if you do this more than once in the code, or in a loop;
>> why don't you set up a variable at the top of your program that has the
>> needed
>> dots for the maximum number you would need -- lets say 3,000,000.
>>
>> then wherever you want n number of dots, just do $variable =
>> substr($dots,
>> 1,
>> n). this should be much faster.
>
>
>
> Jerry, I had the same idea, but are you sure that this operation will not
> allocate a new buffer and copy the entire string( essentially eliminating
> the benefit )?
>
> jmz
>

---
It probably will.

The simplest method I can think of to speed it up is to do something like this:
$count = ($start - 1)
$remainder = $count % 10000
$base = "." x 10000
$variable = $base x ($count / 10000)
$tail = "." x $remainder
$variable = $variable . $tail

That should reduce the number of string reallocations by a factor of roughly 10,000.

==Joseph++

>
> jerry
>>
>> >
>> > I've tried using:
>> > sprintf +("%s" x ($start - 1)), ".";
>> >
>> > but I must not have the syntax correct as it doesn't create the needed
>> > "." characters.
>> >
>> > Any thoughts on what is wrong with the sprintf syntax or what else I
>> > could try to speed this up?


---------------------------------------------------
PLUG-discuss mailing list -
To subscribe, unsubscribe, or to change you mail settings:
http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss