chmod wirft keine Exception im Fehlerfall, daher macht eval hier nicht, was du denkst, was es macht. Entweder du benutzt autodie, um Exceptions zu erzeugen, oder änderst deinen Code.
my $file_name = 'chmod.txt';
for my $mode (0777, 0604) {
chmod $file_name, $mode or warn "could not change mode $mode: $!\n";
}