Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

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"

sulfericacid


Comment on Re: Re: Re: Re: Re: DB_File, not saving
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.

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.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://275409]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (6)
As of 2014-09-18 22:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (126 votes), past polls