in reply to How to use variables in @INC and "use" commands

You have a second problem.

$day = "sunday"; $userId= "mary"; BEGIN { push (@INC, "./dir_$day"); } ...

is processed as follows:

As you can see, $day is only given a value long after the BEGIN block uses them. It always amazes me that people are willing to come to PerlMonks to find a problem with their code when use warnings; would have told them. The two most useful tools:

use strict; use warnings;

Solution:

my $userId= "mary"; BEGIN { my $day = "sunday"; push (@INC, "./dir_$day"); } ...

All together:

#!/usr/bin/perl use strict; use warnings; BEGIN { my $day = "sunday"; my $userId = "mary"; push (@INC, "./dir_$day"); eval "use module_$userId qw( ); 1" or die $@; *diary = \%diary::diary; }

It doesn't make much sense to specify %diary on the use line do the alias via an assignment. That means the %diary on the use line is being ignored. You can fix that by using Exporter. Then you'd replace the last two lines with:

eval "use module_$userId qw( %diary ); 1" or die $@;

By the way, please don't include line numbers in posted code. We are quite able to count to fifteen. All it does is make it very hard to cut and paste.