Bei ersterem kann ich dir nicht helfen.
Mit
use FindBin qw/$Bin/;
print $Bin;
kannst du dir ausgeben lassen wo das Skript liegt, welches aufgerufen wurde.
Aber zu deiner 2. Frage kann ich dir helfen.
Wenn du eine Datei öffnest kannst du Fehler abfangen. Dieses Abfangen kannst du auch für die robuste Programmierung nutzen, bei der du einfach weiter machst.
Das geht natürlich nur, wenn du den Inhalt der Datei nicht brauchst.
Hier ein Beispiel:
use FileHandle;
my $fh = new FileHandle;
my $file = "test.datei";
if ($fh->open("< $file")) {
print $fh->getline();
$fh->close();
}else{
# hier kommst du hin, wenn die Datei nicht geöffnet werden konnte.
# normalerweise steht dann sowas wie die "cannot open file: " . $!; hier
}