С perlfaq5: «Как выбрать случайную строку из файла?»
За исключением загрузки файла в базу данных или предварительного индексирования строк в файле, есть несколько вещей, которые вы можете сделать.
Вот алгоритм отбора проб из книги верблюдов:
srand;
rand($.) < 1 && ($line = $_) while <>;
Это имеет значительное преимущество в пространстве перед чтением всего файла. Вы можете найти доказательство этого метода в Искусство компьютерного программирования , том 2, раздел 3.4.2, Дональдом Э. Кнут.
Вы можете использовать модуль File :: Random, который предоставляет функцию для этого алгоритма:
use File::Random qw/random_line/;
my $line = random_line($filename);
Другой способ - использовать модуль Tie :: File, который обрабатывает весь файл как массив. Просто получите доступ к элементу случайного массива.