Использование дескриптора файла typeglob не рекомендуется, потому что, если вы не обращаете внимания, это может привести к нескольким проблемам. Например: если вы создаете рекурсивную функцию, которая использует один и тот же глобус типа, вы получите некоторые предупреждения при попытке закрыть дескриптор файла, если не создадите ограниченный во времени глобус на основе пакета. Лексические переменные попадают в область, в которой они определены, в то время как область действия typeglob предназначена для полного пакета, в котором она определена.
Для резюме:
Если вы хотите остаться с дескриптором файла typeglob, обязательно создайте ограниченный во времени глобус на основе пакета:
...
local *FH;
open FH, '<', $filepath or die(sprintf('Could not open %s: %s', $filepath, $!));
...
иначе, используйте лексическую переменную
...
open my $fh, '<', $filepath or die(sprintf('Could not open %s: %s', $filepath, $!));
...