use warnings; use strict; my %vars; while () { chomp; s/\$(\w+)/exists $vars{$1} ? $vars{$1} : die "Error: no env var $1\n"/ge; my ($key, $value) = split(/=/, $_); $vars{$key} = $value; } use Data::Dumper; $Data::Dumper::Sortkeys=1; print Dumper(\%vars); __DATA__ V1=/home/user V2=$V1/test V3=$V2/file.txt