in reply to finding next key in db_file

It sounds like you are looking for a linked list, specifically a doubly-linked list. perlfaq4 has "How do I handle linked lists?", which has a basic example of how you could construct a linked list. In addition, Chapter 3 of Mastering Algorithms with Perl has several examples of how to implement various types of linked lists. I searched CPAN but didn't find anything that looked promising (HTML::LinkList looked interesting, but I don't think it does what you're looking for here).

Update: OOP/Linked List Question may also be of help.

HTH

Replies are listed 'Best First'.
Re^2: finding next key in db_file
by sulfericacid (Deacon) on Aug 16, 2006 at 04:29 UTC
    Why not just hack it out with a loop?
    my $current = 5; my %hash = ( "1" => "one", "2" => "two", "3" => "three", "4" => "four", "5" => "five", "8" => "eight" ); while ($current) { $current++; if (exists $hash{$current}) { print "next: $hash{$current}"; last; } }

    Update: solution for finding the highest num

    my $highest = 0; foreach my $key (keys %hash) { if ($key > $highest) { $highest = $key; } } print "\nhighest number is: $highest";


    "Age is nothing more than an inaccurate number bestowed upon us at birth as just another means for others to judge and classify us"

    sulfericacid

      This approach could work, but it becomes less efficient as the number of gaps increase in both frequency and size. More importantly, it is also much trickier to insert a new element or change the order of the elements. I realize that neither insertion nor reordering were specified requirements in the OP, but I was trying to generalize the solution and anticipate future needs*. A linked list would handle those requirements easily.

      *I've never been part of a project that hasn't had some degree of feature creep, and this one seems likely. "Oh, good - we can delete pictures. Hey, can we add them, too?"

        All in all, this sounds more like a job for MySQL for the fun sorting and data integrity. I think this would work just fine if the user always checked what the last element was before creating a new element.

        You're right, it's not the most efficient way of going about it if there are large gaps.



        "Age is nothing more than an inaccurate number bestowed upon us at birth as just another means for others to judge and classify us"

        sulfericacid