Hi, I might be being a noob but reading the OP, aren't they wanting to call the 
value arbitrarily?  Meaning, e.g. an Ajax call in a web page could send a 
request to find out the time remaining in the sleep. 

I guess that the sleep (which will halt the script) needs to be invoked after 
forking a decrementing counter?  The decrementing counter will run 
asynchronously  and could be queried using Fork::Super bg_eval, but if you are 
asking this question that might be a stretch (it's not something I've used).  
As there is 'always more than one way to do it' I would use a fork and a file:

The simplest method, if it will do what you want would be to use an until loop 
to count down and do the sleeping, but you would need to decide up front 
whether you want to return a value (you could always write it to a file and 
call the contents of the file?).

Need more info on what you want to do with it, but on a basic level, this will 
work.  It passes the sleep time value to countdown and forks that process so 
the rest of the script can proceed. I put the actual 300 sec sleep at the 
bottom, but if you cat countdown.txt at any point it will tell you how long is 
left.  

#!/usr/bin/perl -w

use strict;

my $sleep_timer;
my $count_amount=('10');

if ( ! fork() ) {
            countdown($count_amount);
}   #### Fork the counting process

sub countdown   {
        $sleep_timer = shift;
        print_remaining($sleep_timer);  ##I've put the printing in a routine 
                                                                        ## as 
we need it in two places
        sleep 1;  ### Do the first second sleep before decrementing the counter
### That way it will get all the way down to zero

until ($sleep_timer == '0')     {
                $sleep_timer--;
                print_remaining($sleep_timer);###Pass the current count to our 
printing sub
                sleep 1;
        }
}

sub print_remaining     {
                my $counter = shift;
                open FH1 ,"+>countdown.txt";
                print FH1 "$sleep_timer";
                close FH1;
}

### The main part of the script will hold on until the time has 
sleep 10;
print "I waited $count_amount seconds to tell you this";


BEWARE using forks that you have some failsafe in place to stop the script 
being run multiple times, or the same sub will overwrite the counter file so 
the number will start to jump around all over the place.

Hope thats useful.

Ed

On 16 Sep 2013, at 00:49, "John W. Krahn" <jwkr...@shaw.ca> wrote:

> Shawn H Corey wrote:
>> On Sun, 15 Sep 2013 13:00:36 -0700
>> Unknown User<knowsuperunkn...@gmail.com>  wrote:
>> 
>>> If my perl script has a sleep for say 300 seconds, when the sleep is
>>> being run is there any way i can find the time remaining in the sleep
>>> say by sending a signal?
>>> 
>>> Thanks,
>> 
>> Not directly. You have to record the time before the sleep and then you
>> can measure how long the sleep lasted.
>> 
>>     my $started_sleep = time;
>>     sleep 300;
>>     my $time_asleep = time - $started_sleep;
> 
> Or just:
> 
> my $time_asleep = sleep 300;
> 
> 
> 
> John
> -- 
> Any intelligent fool can make things bigger and
> more complex... It takes a touch of genius -
> and a lot of courage to move in the opposite
> direction.                   -- Albert Einstein
> 
> -- 
> To unsubscribe, e-mail: beginners-unsubscr...@perl.org
> For additional commands, e-mail: beginners-h...@perl.org
> http://learn.perl.org/
> 
> 


--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to