$0 liefert den Dateinamen des Skripts. Vielleicht wird dabei auch der Pfad mit übergeben? Müsste man mal ausprobieren...
Zu $0 gibt es eine "offizielle" Alternative aus den Modulen zu ActivePerl (meine Version ist 5.005 build 509):
use FindBin;
my $local = $FindBin::Bin;
Dann ist $local das Verzeichnis, in dem das ausgeführte Programm gespeichert ist.