in reply to Re: How not to use "our"?
in thread How not to use "our"?

Ah thanks for the link. The global variable he talks about is $total, whose value is subject to change. How about variables that contain constant values that are used by different modules? How do we make those variables common to modules that need them?

Replies are listed 'Best First'.
Re^3: How not to use "our"?
by wazoox (Prior) on Nov 29, 2010 at 14:50 UTC

    Simply build a function that returns the variables. Define values inside a function to make them inaccessible from outside. Something like this :

    #!/usr/local/bin/perl use strict; use warnings; package MyData; sub getData { my $data = { 'test' => 'yes', 'key' => 'value', 'some' => 'thing', 'array' => [ 1, 2, 3 ], }; my $key = shift; defined $data->{$key} ? return $data->{$key} : return; } package main; foreach my $testcase (qw(test key some bork)) { my $value = MyData::getData($testcase); if ($value) { print "Data for $testcase : $value \n"; } else { print "No such data : $testcase .\n"; } }

      How about variables that contain constant values

      Simply build a function that returns the variables.

      You could, but it's perfectly fine to export constants. I'd make them look like constants, though. In fact, I don't see why we couldn't make them actual constants.

      package PkgA; use strict; use warnings; use Exporter qw( import ); my %max_text_constants; my @max_text_constants; BEGIN { %max_text_constants = ( TINY_TEXT_MAX_LEN => 100, TEXT_MAX_LEN => 200, MEDIUM_TEXT_MAX_LEN => 500, LONG_TEXT_MAX_LEN => 2000, ); @max_text_constants = keys(%max_text_constants); } use constant \%max_text_constants; our @EXPORT_OK = ( @max_text_constants, ... ); our @EXPORT_TAGS = ( max_text => \@max_text_constants, ... all => \@EXPORT_OK, ); 1;
      use PkgA qw( LONG_TEXT_MAX_LEN ); use PkgA qw( :max_text ); use PkgA qw( :all );