#!/usr/bin/perl use strict; use warnings; use feature 'say'; use File::Basename qw(dirname); use Cwd qw(abs_path); use lib dirname( abs_path $0) . '/MYLIB'; use myvars qw(get_pass %VARSETS); say "PASS=".&get_pass(); say "DEBUG: Got variables set '$_' from file: $VARSETS{$_}" for (sort keys %VARSETS); #### package myvars; # still not a cromulent package name use strict; use warnings; use Exporter qw(import); our @EXPORT_OK = qw(get_pass %VARSETS); use feature 'say'; use Cwd qw(abs_path); use File::Basename qw(dirname); our %VARSETS; my $me = 'myvars.pm'; my $medir = dirname( abs_path $0 ). '/MYLIB'; opendir( my $dh, $medir ) || die "Can't opendir $_[0] $!"; my @list = grep { !/^\\./ &&/.pm$/ && !/^$me$/ && -f "$medir/$_" } sort readdir($dh); closedir $dh; our $env_db_pass =""; for my $file (@list){ my $fqfile=$medir . '/'. $file; my ( $varset ) = $file =~ /^([^-]+)/; if (-r $fqfile){ say "DEBUG: reading $fqfile"; if ($VARSETS{$varset}){ warn "ERROR($varset): Already have $VARSETS{$varset}, discarding $file\n"; # die? croak? use Carp; ? }else{ require "$fqfile"; $VARSETS{$varset} = $file; } }else{ say "DEBUG: skip $fqfile" } } say "myvars.pm: CREDENTIALS($env_db_pass)"; sub get_pass { return $env_db_pass; } 1; #### our $env_db_pass = 'devpass'; #### our $env_db_pass = 'prodpass'; #### DEBUG: reading /home/fbrm/CODE/PERL/monks/11158449/MYLIB/database-et.pm DEBUG: skip /home/fbrm/CODE/PERL/monks/11158449/MYLIB/database-pr.pm myvars.pm: CREDENTIALS(devpass) PASS=devpass DEBUG: Got variables set 'database' from file: database-et.pm #### reading /home/fbrm/CODE/PERL/monks/11158449/MYLIB/database-et.pm reading /home/fbrm/CODE/PERL/monks/11158449/MYLIB/database-pr.pm ERROR(database): Already have database-et.pm, discarding database-pr.pm at /home/fbrm/CODE/PERL/monks/11158449/MYLIB/myvars.pm myvars.pm: CREDENTIALS(devpass) PASS=devpass