Quite possibly &load_game is being called before $cfg becomes a Config::Simple object.
[...] all of my variables are defined
our @player;
our $completed_quests = 0;
our $special_item = "none";
our @enemy;
our $class = "null";
our $cfg;
From that snippet, I see some of variables being declared but not defined, namely $cfg. Missing also from the snippet are the stages at which &load_game and &Config::Simple::new are being called.
$cfg->read("'$ENV{HOME}/.kenesis'")
What's with two kinds of quotes around file name? Is a file name actually being surrounded by single quotes (on the file system)?