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. |