wie gesagt, man sollte das nicht über direkte variablen lösen, sondern über einen hash.
statt $var1 benutze $map{var1}. dann kannst du es im skript benutzen und automatisiert im text ersetzen.
alles andere erfordert bei globalen package-variablen fummelei mit der symboltabelle oder bei lexikalischen variablen sogar eval.
also nochmal: wenn es nur ein paar von vorneherein feststehende variablen sind, die zu erstzen sind, schreibe sie stattdessen in einen hash und du kannst den lösungsansatz von mir verwenden.
wenn es nur die eine variable ist, kannst du auch folgendes verwenden:
$line =~ s/\$var1\b/$var1/g;
aber erfahrungsgemäss kommen da irgendwann weitere variablen hinzu, und die willst du dann nicht alle manuell so ersetzen.
die lösung sieht dann so aus (strict muss hierfür abgeschaltet werden):
$text =~ s/\$(\w+)/${ $1 }/g;
an der stelle fängt dein programm an, schlecht wartbar zu werden.
setze bitte so früh wie möglich auf einen hash.
ich spreche da wirklich aus erfahrung.