Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: Seeking the right way to override global variables

by Anonymous Monk
on Sep 26, 2014 at 14:01 UTC ( #1102137=note: print w/replies, xml ) Need Help??


in reply to Seeking the right way to override global variables

It is usually a good idea to put "global variables" into a Common module of some kind, perhaps which exposes an object that simply serves as the repository of those values. When you do it this way, it's always obvious that you're referring to a widely-used variable ... and it's therefore always obvious when and where it's being used throughout a potentially very-large application. Be sure to use strict; use warnings; everywhere.
  • Comment on Re: Seeking the right way to override global variables

Replies are listed 'Best First'.
Re^2: Seeking the right way to override global variables
by contra-sh (Acolyte) on Sep 26, 2014 at 15:06 UTC
    When you say :

    "It is usually a good idea to put "global variables" into a Common module of some kind, perhaps which exposes an object that simply serves as the repository of those values."

    Do you mean explicit package + object oriented?

    I already use a separate perl module and I'm thinking using explicit package name in addition. But I don't want to put object oriented programming with the rest of the code, which is not.

    But I fully agree with you that explicit package name is a better practice (even for small projects like mine, it doesn't hurt).

    And yes I already put use strict and use warnings everywhere :D

    Thank you for your answer.
      Then you could use a pseudo-object, for example storing your global variables in a lexical hashref in the const module, and have in that same module a get and a set functions to access the hash that you export. Something like this:
      use strict; use warnings; use Exporter; our @ISA = 'Exporter'; our @EXPORT = qw(get set); my $private_hash_ref = {VAR1 => "one", VAR2 => "two"}; sub get { my $key = shift; return $private_hash_ref->{$key};} sub set { my ($key, $value) = @_; $private_hash_ref->{$key} = $value;}
      And then in your main code or other module, you just use the set and get functions.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (4)
As of 2022-08-17 10:24 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?