Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re^2: How not to use "our"?

by Anonymous Monk
on Nov 29, 2010 at 12:48 UTC ( [id://874237]=note: print w/replies, xml ) Need Help??


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

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://874237]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (3)
As of 2024-04-19 18:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found