Ваш код кажется правильным, что означает, что «test.txt» действительно не существует (или, если он есть, он не находится в рабочем каталоге).
Например, если у вас есть это:
/home/you/code/test.pl
/home/you/test.txt
И запустите ваш код следующим образом:
$ cd code
$ perl test.pl
Тогда ваш тестовый файл не будет найден.
Может помочь заставить ваш скрипт распечатать текущий рабочий каталог, прежде чем он что-либо сделает:
use Cwd;
print getcwd();
...