В вашем скрипте три синтаксических ошибки:
Глобальному символу $ keys требуется явное имя пакета в строке 12 markov.pl.
Вы не объявили $ keys, и из-за «use strict» это фатальная ошибка.
Вы, вероятно, имели в виду:
my $index = rand(@keys);
Вторая ошибка:
Глобальному символу "$ prefixes" требуется явное имя пакета в строке 36 markov.pl.
это то же самое: вы имели в виду:
if (@prefixes == 2) {
Наконец, в строке 30 вы пропускаете точку с запятой после:
my @prefixes
Это сбивает с толку синтаксический анализатор и вызывает все другие ошибки и предупреждения.
Возможно, вы захотите прочитать документацию perldata , если не знаете, как использовать сигилы ($, @,%).