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.