Perl File :: Найти недокументированные глобалы - PullRequest
1 голос
/ 08 апреля 2011

$ File :: Find - мощный способ обхода дерева каталогов.

Я столкнулся с необходимостью определить (внутри функции wanted) верхний каталог, из которогоначался рекурсивный поиск. В этом perldoc упоминается $File::Find::topdir, который, кажется, содержит именно то, что мне было нужно.Итак, конкретный сценарий, который я писал сейчас, работает.

Однако мне было любопытно, есть ли больше документации по этому и другим глобальным ссылкам, упомянутым в том же абзаце:

$File::Find::topdir
$File::Find::topdev
$File::Find::topino
$File::Find::topmode
$File::Find::topnlink
$File::Find::fullname
$File::Find::prune

Или, альтернативно,не могли бы вы, ребята, прокомментировать любой из этих глобалов, если бы вы использовали его в своих собственных проектах написания сценариев.

Ответы [ 2 ]

1 голос
/ 08 апреля 2011

Если глобальные переменные не задокументированы, они не предназначены для публичного использования, и вам лучше не использовать их.

Верхние * переменные кажутся некоторыми из обычных метаданных файла, которые возвращаются системным вызовом stats (). (устройство, индекс, режим (т.е. права доступа), количество ссылок)

0 голосов
/ 11 июля 2016

$ File :: Find :: prune задокументирована и очень полезна. Это похоже на параметр -prune команды Unix find , который задается как «не спускайтесь в этот каталог».

File :: Find POD также документирует полное имя довольно хорошо:

  • Когда действуют «follow» или «follow_fast», существует также $File::Find::fullname. .... Существует переменная $File::Find::fullname, которая содержит абсолютный путь к файлу со всеми разрешенными символьными ссылками. Если ссылка является висячей символической ссылкой, тогда для полного имени будет установлено значение undef.

Что касается остальных - еще в начале 90-х, до того, как Perl5 появился вместе с удобными лексическими переменными, объектами и замыканиями (и до CPAN), perl поставлялся с предшественником File :: Find «find.pl» - и следовательно, все переменные пакета, которые File :: Find все еще использует. По какой-то причине «верхние» переменные остались в этом плохо документированном состоянии.

При вызове find(\&wanted, @directories_to_search) модули устанавливают $File::Find::topdir для каждого каталога в @directories_to_search, когда он проходит через них. Другие переменные top* относятся к атрибутам этого каталога верхнего уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...