1# 2# This library is no longer being maintained, and is included for backward 3# compatibility with Perl 4 programs which may require it. 4# 5# In particular, this should not be used as an example of modern Perl 6# programming techniques. 7# 8# Suggested alternative: FileCache 9 10# Open in their package. 11 12sub cacheout'open { 13 open($_[0], $_[1]); 14} 15 16# Close as well 17 18sub cacheout'close { 19 close($_[0]); 20} 21 22# But only this sub name is visible to them. 23 24sub cacheout { 25 package cacheout; 26 27 ($file) = @_; 28 if (!$isopen{$file}) { 29 if (++$numopen > $maxopen) { 30 local(@lru) = sort {$isopen{$a} <=> $isopen{$b};} keys(%isopen); 31 splice(@lru, $maxopen / 3); 32 $numopen -= @lru; 33 for (@lru) { &close($_); delete $isopen{$_}; } 34 } 35 &open($file, ($saw{$file}++ ? '>>' : '>') . $file) 36 || die "Can't create $file: $!\n"; 37 } 38 $isopen{$file} = ++$seq; 39} 40 41package cacheout; 42 43$seq = 0; 44$numopen = 0; 45 46if (open(PARAM,'/usr/include/sys/param.h')) { 47 local($_, $.); 48 while (<PARAM>) { 49 $maxopen = $1 - 4 if /^\s*#\s*define\s+NOFILE\s+(\d+)/; 50 } 51 close PARAM; 52} 53$maxopen = 16 unless $maxopen; 54 551; 56