http://www.perlmonks.org?node_id=669551


in reply to How to pass a value from main program back to a module

Welcome to object-oriented programming. Your module represents an object. You could, for example, pass this config file name as an argument and have a config_file attribute. How you do OO programming is a good topic for trolling, but the basic idea is something like:

package Module; sub new { my ($pkg, %args) = @_; my $self = bless {}, $pkg; $self->init(\%args); return $self; } sub init { my ($self, $args) = @_; if (exists $args->{config_file}) { my $file = $args->{config_file}; if (-f $file) { $self->{config_file} = $args->{config_file}; } else { die "config file '$file' not found, blah\n"; } } # other initialization } # this kind of "accessor" thing is so boring and repetitious # that many people have made modules to handle it sub config_file { my ($self, $val) = @_; if (defined $val) { $self->{config_file} = $val; } return $self->{config_file}; } # the rest of the wonderful things your module does sub some_other_method { my ($self, $blah) = @_; .... open (my $fh, $self->{config_file}) || suicide; # you might have a data structure (like a hash) # to store the results of the configuration; # or better, you could look on CPAN to see if # someone already has done a configuration module # (as indeed they have) } 1;

There are probably at least a dozen things I did there that you can nitpick or do differently, but that's the general idea.