I'm trying to create a variable that exists in package space that is persistent without an instantiation of any objects. I'd like to accomplish something like a public static variable.
Here's a simplest case script:
#!/usr/bin/perl use strict; use lib '.'; use Bar; ### Before and after snapshots. print 'var before setting: (' . $Bar::package_variable . ")\n"; $Bar::package_variable = 'Ogopogo'; print 'var after setting: (' . $Bar::package_variable . ")\n"; ### From an object. my $obj = new Bar( ); print 'var from obj--unqualified: (' . $obj->{'unqualified'} . ")\n"; print 'var from obj--qualified: (' . $obj->{'qualified'} . ")\n"; print "\nAddresses:\n"; print '$Bar::package_variable '.\$Bar::package_variable."\n"; print '$obj->{"unqualified_ref"} '.\${$obj->{'unqualified_ref'}}."\n"; print '$obj->{"qualified_ref"} '.\${$obj->{'qualified_ref'}}."\n"; exit;
And the module it's using:
package Bar; our $package_var; sub new { my $class = shift; my $self = {}; bless $self, $class; $self->{'unqualified'} = $package_var; $self->{'qualified'} = $Bar::package_var; $self->{'unqualified_ref'} = \$package_var; $self->{'qualified_ref'} = \$Bar::package_var; return $self; } 1;
And the output of running the script:
Output of $>./foo.pl
Package var before setting: () Package var after setting: (Ogopogo) Package var from obj--unqualified: () Package var from obj--qualified: () Addresses: $Bar::package_variable SCALAR(0x815363c) $obj->{"unqualified_ref"} SCALAR(0x8188950) $obj->{"qualified_ref"} SCALAR(0x8188950)
Help!
Thanks =)
In reply to Accessibility of package-level variables by sirrobert
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |