Thanks to everyone who replied! Your suggestions cleaned out a block in my
mind, and I got it figured out. Here's what works, for those interested:
@allkeys = ('0' x (length(keys(%data)) - 1) . '1' .. (keys(%data)) . "");
- B
ps. Is there an easy way to test this versus the solution below, to see
which one is faster? I know it won't make much difference, but I was just
curious...
> Bryan R Harris wrote:
>> I'm having trouble with this, and I'm sure someone out there has a
>> really clever solution--
>>
>> I have a hash, %data, with, say, 32 elements.
>>
>> From that, I need an array going from 01 to 32, i.e. 01, 02, 03, 04,
>> etc.
>>
>> But if my hash had 750 elements, I'd want it to go from 001 to 750.
>>
>> I thought this should be easy, but I'm really struggling with it--
>>
>> This is the best I've come up with:
>>
>> @allkeys = ('0' x (length(keys(%data)) - 1) . '1' .. keys(%data));
>
> To generate a list from 1 to n, where the values are padded with zeroes to
> the length of the longest value, you can do something like:
>
> my $n = keys %data;
> my $l = length $n;
> my @arr = map sprintf("%0*d", $l, $_), 1 .. $n;
>
> But @arr is just a list of numbers. It has no particular correspondence to
> the actual keys in %data, so what are you trying to do?
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>