#!/usr/bin/perl -w # Strict use strict; use warnings; # Test code my $psub = same_value_for_time_period(5); while (1) { my $x = $psub->(); printf "Value is %s\n", $x; sleep 1; } # Subroutines sub same_value_for_time_period { my ($duration) = @_; # Eg. 600 = 10 minutes my $start_time = time; my $value = get_new_value(); sub { my $now = time; if ($now - $start_time < $duration) { return $value; } else { $start_time = $now; $value = get_new_value(); } } } sub get_new_value { my $value; # Your code for creating a new value here ... $value = rand 1000; return $value; }