This sort of thing is trivial with a thread, a queue and some shared variables:

#! perl -slw use strict; use 5.010; use threads; use threads::shared; use Thread::Queue; sub tprint { my $tid = threads->tid; state $sem :shared; lock $sem; print "$tid: ",@_; } our $PERIOD //= 60; my %db :shared; my $Q = new Thread::Queue; async { while( my( $expiry, $id ) = split ':', $Q->dequeue ) { my $now = time; sleep ( $expiry - $now ) if $now < $expiry; if( $db{ $id } == $expiry ) { lock %db; delete $db{ $id }; tprint "User:$id expired:$expiry; deleted"; } else { tprint "User:$id recently active; reprieved"; } } }->detach; while( sleep 1 ) { my $id = int rand 100; my $expiry = time() + $PERIOD; if( exists $db{ $id } ) { tprint "Existing user:$id active; expiry extended until $expir +y"; } else { tprint "New user:$id added; expiry $expiry"; } lock %db; $db{ $id } = $expiry; $Q->enqueue( "$expiry:$id" ); } __END__ C:\test>889439 -PERIOD=10 0: New user:81 added; expiry 1298316449 0: New user:30 added; expiry 1298316450 0: New user:6 added; expiry 1298316451 0: New user:0 added; expiry 1298316452 0: New user:23 added; expiry 1298316453 0: New user:72 added; expiry 1298316454 0: New user:22 added; expiry 1298316455 0: New user:61 added; expiry 1298316456 0: New user:91 added; expiry 1298316457 0: New user:75 added; expiry 1298316458 1: User:81 expired:1298316449; deleted 0: New user:15 added; expiry 1298316459 1: User:30 expired:1298316450; deleted 0: New user:24 added; expiry 1298316460 1: User:6 expired:1298316451; deleted 0: New user:49 added; expiry 1298316461 1: User:0 expired:1298316452; deleted 0: Existing user:49 active; expiry extended until 1298316462 1: User:23 expired:1298316453; deleted 0: New user:87 added; expiry 1298316463 1: User:72 expired:1298316454; deleted 0: New user:19 added; expiry 1298316464 1: User:22 expired:1298316455; deleted 0: New user:40 added; expiry 1298316465 1: User:61 expired:1298316456; deleted 0: New user:13 added; expiry 1298316466 1: User:91 expired:1298316457; deleted 0: New user:78 added; expiry 1298316467 1: User:75 expired:1298316458; deleted 0: New user:98 added; expiry 1298316468 1: User:15 expired:1298316459; deleted 0: New user:53 added; expiry 1298316469 1: User:24 expired:1298316460; deleted 0: New user:20 added; expiry 1298316470 1: User:49 recently active; reprieved 0: New user:44 added; expiry 1298316471 1: User:49 expired:1298316462; deleted 0: New user:99 added; expiry 1298316472 1: User:87 expired:1298316463; deleted 0: New user:97 added; expiry 1298316473 1: User:19 expired:1298316464; deleted 0: Existing user:20 active; expiry extended until 1298316474 1: User:40 expired:1298316465; deleted 0: New user:24 added; expiry 1298316475 1: User:13 expired:1298316466; deleted 0: New user:70 added; expiry 1298316476 1: User:78 expired:1298316467; deleted 0: New user:87 added; expiry 1298316477 1: User:98 expired:1298316468; deleted 0: New user:42 added; expiry 1298316478 1: User:53 expired:1298316469; deleted 0: New user:79 added; expiry 1298316479 1: User:20 recently active; reprieved 0: New user:56 added; expiry 1298316480 1: User:44 expired:1298316471; deleted 0: New user:48 added; expiry 1298316481 1: User:99 expired:1298316472; deleted 0: Existing user:79 active; expiry extended until 1298316482 1: User:97 expired:1298316473; deleted Terminating on signal SIGINT(2)

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

In reply to Re: tracking transient data in memory by countdown timer by BrowserUk
in thread tracking transient data in memory by countdown timer by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.