# a unique SessionID for the query already available # in package global $session my $cache_file = $session.'_cache.yaml'; my $result_set; if (-f $cache_file && -r $cache_file && -s $cache_file) { # we already ran this query (session), and we have a cache! $result_set = YAML::LoadFile($cache_file); } else { $result_set->{data} = run_dbQuery(); $result_set->{start} = 0; } display_results( $result_set->{data}, $result_set->{start}, 20 ); $result_set->{start} += 20; YAML::DumpFile($cache_file, $result_set); #---- display_results : shows slice of result set ---- sub display_results { my ( $data, $start, $length ) = @_; die "Data Set is not an ARRAY ref" unless ref $data eq 'ARRAY'; my $endpoint = ( $start+$length > @$data ? @$data-1 : $start+$length-1 ); show_toBrowser( @$data[$start..$endpoint] ); }