NEVERMIND. I figured it out already. I was going to check the vars pragma manpage *before* I posted this question, but it slipped my mind.
For the record, in case anyone else wants to know:
package Foo;
use strict;
use vars qw/$BAR/;
$BAR = "baz";
package main;
print $Foo::BAR;
So, use vars declares 'global' variables (global to the package) that aren't private like my().
| [reply] [d/l] |
You can also initially declare them in a package:
use strict; # just to prove my point
package hidden;
$hidden::foo = "This is the first time I've been used.";
package main;
print $hidden::foo;
| [reply] [d/l] |
Close enough. 'use vars' just selectively excludes some variables from the 'use strict'.
So you can do the same by omitting 'use strict'.
Of course, the way in which you did it was much better...
| [reply] |
Perhaps you can encapsulate the package's variables as "getter" and "setter" methods (properties?).
For example:
sub thisvariable {
my $self = shift;
if (@_) { $self->{THISVARIABLE} = shift }
return $self->{THISVARIABLE};
}
Check out http://www.perl.com/pub/doc/manual/html/pod/perltoot.html
Of course, I'm kind of biased towards OOP anyway. | [reply] [d/l] |
You could also just bless the variable in your constructor:
package Foo;
use strict;
my $Bar = "Baz";
sub new
{
return bless { BAR => $Bar };
}
package main;
my $Foo = new Foo();
print $Foo->{'BAR'};
| [reply] [d/l] |
OO is great when you need it, but it is considerably slower, so I try to reserve creating method calls for situations where that sort of abstraction is needed. A good module will use both. For example, I like being able to:
use CGI::Pretty qw( param );
if ( defined( param('url') ) { #lets not waste any CPU here, this gets
+ called even when I'm index.cgi
#okay, this isn't the front page, lets see what we've got.
my $object = new CGI();
my $url = $object->('url');
# etc....
of course that could be optimized further by parsing out the url at the same time that we test for it, and setting it to 'index' if it's not there, but you get the idea.
That's part of the beauty of Perl; there is more than one way to do it.
I don't think Larry intended us to just pick our favorite way, but to use each of these ways, when the time is right. | [reply] [d/l] |