При сбое сервера, Как составить список цепочек символических ссылок? (не мой вопрос) говорит о перечислении всех символических ссылок и их следовании. Чтобы сделать это выполнимым, давайте сначала рассмотрим один каталог.
Я хочу написать короткую утилиту, которая делает это. Выглядит просто, чтобы поместить пары из символических ссылок в хеш, а затем обработать хеш.
Но тогда у меня может быть что-то вроде:
ls -l
total 0
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 08:48 a -> b
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 08:48 b -> c
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 09:03 c -> a
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 09:17 trap -> b
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 09:17 x -> y
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 09:17 y -> b
, где очевидно, что a->b->c
- это цикл, и эта ловушка указывает на цикл, но чтобы знать, x
указывает на цикл, мне нужно немного следовать.
Одно хеш-представление:
a => b
b => c
c => a
trap => b
x => y
y => b
Но обратное представление лучше для разметки циклов с плохими начальными точками, как только я узнаю, что такое циклы.
Итак, вот несколько вопросов:
- Является ли хэш лучшей структурой для представления символических ссылок?
- Каков наилучший способ отделить граф файловой системы, чтобы отличить циклические компоненты от компонентов дерева с веткой с частями типа цикла?
- Есть ли лучший алгоритм, чем ручной поиск всех циклов из всех начальных точек?
- С точки зрения теории графов - это уже есть в CPAN ? Если нет, то какие хорошие вспомогательные модули?