http://qs321.pair.com?node_id=874259


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

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"; } }

Replies are listed 'Best First'.
Re^4: How not to use "our"?
by ikegami (Patriarch) on Nov 29, 2010 at 16:34 UTC

    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 );