Если URL-адреса меняются не очень часто, вы можете придумать несколько сложную работу, которую вы могли бы запускать периодически (по ночам?), Которая бы присваивала целые числа каждой записи на основе различных сайтов.
Что вы можете сделать, это написать процедуру, которая анализирует домен по URL-адресу (вы должны найти фрагмент кода, который делает это практически везде).
Затем вы создаете временную таблицу, которая содержит каждый уникальный домен плюс номер.
Затем для каждой записи в таблице URL-адресов вы просматриваете домен в своей временной таблице, присваиваете этой записи номер, сохраненный там, и добавляете большое число к номеру этой временной таблицы.
Затем для оставшейся части дня сортируйте по номеру.
Вот пример с пятью записями, которые вы использовали в своем вопросе:
URL-адрес:
Временная таблица:
example.com 1
stackoverflow.com 2
perl.org 3
Затем для каждого URL вы просматриваете значение во временной таблице и добавляете к нему 3 (потому что у него есть 3 различные записи):
Итерация 1:
URL-адрес:
http://www.example.com/some/file 1
http://www.example.com/some/other/file NULL
https://stackoverflow.com/questions/ask NULL
https://stackoverflow.com/tags NULL
http://use.perl.org/ NULL
Временная таблица:
example.com 4
stackoverflow.com 2
perl.org 3
Итерация 2:
URL-адрес:
http://www.example.com/some/file 1
http://www.example.com/some/other/file 4
https://stackoverflow.com/questions/ask NULL
https://stackoverflow.com/tags NULL
http://use.perl.org/ NULL
Временная таблица:
example.com 7
stackoverflow.com 2
perl.org 3
и так далее, пока не дойдете до
http://www.example.com/some/file 1
http://www.example.com/some/other/file 4
https://stackoverflow.com/questions/ask 2
https://stackoverflow.com/tags 5
http://use.perl.org/ 3
Для многих записей это будет медленно. И будет трудно работать со многими вставками / удалениями, но результатом будет безупречный порядок циклического перебора.