my $ini = Config::Tiny->new; $ini->{$_} = $config{$_} for keys %config; #### #!/usr/bin/env perl use 5.011; # implies strict + feature 'say' use warnings; use Data::Dumper; use Config::Tiny; use FindBin; use lib $FindBin::Bin; use config2; use constant { INIFILE => 'example3.ini', ENCODING => 'utf8' }; sub create { say Dumper \%config; #next line is equivalent to subsequent 2 lines my $ini = bless \%config, 'Config::Tiny'; #my $ini = Config::Tiny->new; #$ini->{$_} = $config{$_} for keys %config; $ini->write(INIFILE, ENCODING); say 'created ', INIFILE; } sub show { say 'reading ', INIFILE; my $ini = Config::Tiny->read(INIFILE, ENCODING); my %config = %$ini; #line 38 say Dumper \%config; } create() unless -e 'example3.ini'; show() ----------- #!/usr/bin/perl -w use 5.011; use lib "template_stuff"; use utils2; my $return = make_ini(); say "return is $return"; __END__ ------------- package utils2; require Exporter; use utils1; our @ISA = qw(Exporter); our @EXPORT = qw( archive make_ini create show); sub make_ini { use 5.011; # implies strict + feature 'say' use warnings; #thx soonix use Data::Dumper; use Config::Tiny; use FindBin; use lib $FindBin::Bin; use config2; use constant { INIFILE => '1.example.ini', ENCODING => 'utf8' }; sub create { use Path::Tiny; use config2; my $ini_path=path("/home/bob/Documents", "INIFILE"); say Dumper \%config; #next line is equivalent to subsequent 2 lines my $ini = bless \%config, 'Config::Tiny'; #my $ini = Config::Tiny->new; #$ini->{$_} = $config{$_} for keys %config; $ini->write( $ini_path, ENCODING ); say 'created ', $ini_path; return $ini_path; } sub show { say 'reading ', INIFILE; my $ini = Config::Tiny->read( INIFILE, ENCODING ); my %config = %$ini; #line 38 say Dumper \%config; } create() unless -e $ini_path; show() } sub archive { use strict; use warnings; use 5.010; use Path::Tiny; use config2; # old way of getting values my $sub_hash = "my_github"; my $email = $config{$sub_hash}->{'email'}; my $password = $config{$sub_hash}->{'password'}; my $tempdir = Path::Tiny->tempdir('backup_XXXXXX'); say "temp dir is $tempdir"; my $scratch_file = $tempdir->child( 'batch_01', '1.manifest.txt' )->touchpath; say "scratch_file is $scratch_file"; my $parent = $scratch_file->parent; say "parent is $parent"; chdir $tempdir unless $tempdir->subsumes( Path::Tiny->cwd ); system("pwd"); use Data::Dumper; print Dumper \%config; my $b = "dummy"; return $b; } 1; #### $ ./1.initialize.pl Global symbol "$ini_path" requires explicit package name (did you forget to declare "my $ini_path"?) at template_stuff/utils2.pm line 47. BEGIN not safe after errors--compilation aborted at template_stuff/utils2.pm line 53. Compilation failed in require at ./1.initialize.pl line 5. BEGIN failed--compilation aborted at ./1.initialize.pl line 5. $