Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

Re: Re: Re: Re: Re: DB_File, not saving

by sulfericacid (Deacon)
on Jul 17, 2003 at 21:47 UTC ( #275409=note: print w/replies, xml ) Need Help??

in reply to Re: Re: Re: Re: DB_File, not saving
in thread DB_File, not saving

You're right. This is a chat script (much like the chatterbox). It takes the latest 10 messages and prints to screen and it stores the rest for logs later on. I removed the unlink (no idea what it does/did but it was in the example I used) and the problem is still here (you probably knew that). I must be able to tie %chat to both objects otherwise it's useless, I'll look into using it as an array.

Thank you for your help!

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


  • Comment on Re: Re: Re: Re: Re: DB_File, not saving

Replies are listed 'Best First'.
Re: Re: Re: Re: Re: Re: DB_File, not saving
by jsprat (Curate) on Jul 18, 2003 at 00:36 UTC
    I must be able to tie %chat to both objects otherwise it's useless

    Pretty strong words, partner ;-) I think what you mean is that to pull this off you must be able to represent the data in a sorted manner.

    First off, sauoq was right on about IxHash.

    Second, diotalevi says to use $DB_BTREE. An excellent suggestion, as long as you use a sensible key - maybe date/time stamp - and be aware of the possibility of duplicates. It will always be sorted - it's stored in a balanced tree. The key your script uses is $cnt, but I don't see it being initialized anywhere (probably not a sensible key ;). Every message is stuffed into the same slot, overwriting the previous message.

    The most straightforward short-term solution for you IMO would be to use $DB_RECNO like so:

    # tie your array to the file tie @chat, 'DB_File', 'chat', O_CREAT | O_RDWR, 0644, $DB_RECNO; # push the message info onto the array push @chat, "Message number $_" for (1 ..20); # print the last five messages print join "\n", @chat[-5 .. -1]; __END__ output: Message number 16 Message number 17 Message number 18 Message number 19 Message number 20

    You'll be able to treat @chat like an ordinary array. As a bonus, you'll be able to view or modify the chat db file with any text editor.

Re: Re: Re: Re: Re: Re: DB_File, not saving
by diotalevi (Canon) on Jul 17, 2003 at 21:59 UTC

    No, its not useless. Instead of $DB_HASH which has no order, use $DB_BTREE which is sorted and eschew Tie::IxHash.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://275409]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (8)
As of 2018-06-25 16:09 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (127 votes). Check out past polls.