Nein,
das ist so nicht richtig.
$filename ist eine Variable; das $ gehört zur Variable.
Also entweder schreibst Du es so:
my $filename = '/var/log/mail.log.0';
open my $fh, '<', $filename or die "$filename: $!";
oder so:
open my $fh, '<', '/var/log/mail.log.0' or die "/var/log/mail.log.0: $!";
Den String hinter
die kannst Du individuell gestalten; mir persönlich ist es lieber, bei der Fehlermeldung auch den Dateinamen zu sehen, zu dem der Fehler gehört.
Zu Bevorzugen ist die erste Variante (die mit der Variable $filename), weil Du dadurch flexibler bist, solltest Du das Skript einmal anpassen müssen (Du musst dann nur die Zuweisung für $filename anpassen, und nicht jedes Vorkommen des Dateipfades suchen und anpassen).
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!