Home
Search Perl pages
Subjects
By activity
Professions, Sciences, Humanities, Business, ...
User Interface
Text-based, GUI, Audio, Video, Keyboards, Mouse, Images,...
Text Strings
Conversions, tests, processing, manipulation,...
Math
Integer, Floating point, Matrix, Statistics, Boolean, ...
Processing
Algorithms, Memory, Process control, Debugging, ...
Stored Data
Data storage, Integrity, Encryption, Compression, ...
Communications
Networks, protocols, Interprocess, Remote, Client Server, ...
Hard World Timing, Calendar and Clock, Audio, Video, Printer, Controls...
File System
Management, Filtering, File & Directory access, Viewers, ...
|
|
|
As with most things in Perl,
TMTOWTDI. What is a ``static variable'' in other
languages could be either a function-private variable (visible only within
a single function, retaining its value between calls to that function), or
a file-private variable (visible only to functions within the file it was
declared in) in Perl.
Here's code to implement a function-private variable:
BEGIN {
my $counter = 42;
sub prev_counter { return --$counter }
sub next_counter { return $counter++ }
}
Now prev_counter() and next_counter() share a
private variable $counter that was initialized at compile
time.
To declare a file-private variable, you'll still use a my(),
putting it at the outer scope level at the top of the file. Assume this is
in file Pax.pm:
package Pax;
my $started = scalar(localtime(time()));
sub begun { return $started }
When use Pax or require Pax loads this module, the variable will be initialized. It won't get
garbage-collected the way most variables going out of scope do, because the
begun() function cares about it, but no one else can get it.
It is not called $Pax::started because its scope is unrelated to the
package. It's scoped to the file. You could conceivably have several
packages in that same file all accessing the same private variable, but
another file with the same package couldn't get to it.
Source: Perl FAQ: Perl Language Issues Copyright: Copyright (c) 1997 Tom Christiansen and Nathan Torkington. |
Next: What's the difference between dynamic and lexical (static) scoping? Between local() and my()?
Previous: How can I pass/return a {Function, FileHandle, Array, Hash, Method, Regexp}?
(Corrections, notes, and links courtesy of RocketAware.com)
Up to: PERL
Rapid-Links:
Search | About | Comments | Submit Path: RocketAware > Perl >
perlfaq7/How_do_I_create_a_static_variabl.htm
RocketAware.com is a service of Mib Software Copyright 2000, Forrest J. Cavalier III. All Rights Reserved. We welcome submissions and comments
|