Использование простых модулей

Допустим, в вашей программе используется полное имя файла вида /usr/local/bin/perl, а вы хотите выделить из него базовое имя. К счастью, это делается просто, потому что базовое имя состоит из всех символов за последним знаком / (в данном примере только perl):

my $name = "/usr/local/bin/perl";
(my $basename = $name) =~ s#.*/##; # А вот и нет!

Как было показано ранее, сначала Perl выполняет присваивание в круглых скобках, а затем переходит к замене. Предполагается, что любая строка, завершаемая косой чертой (т. е. часть с именем каталога), заменяется пустой строкой, а в исходной строке остается только имя файла. Такое решение вроде бы работает. Но только «вроде бы» – в действительности здесь скрываются три проблемы.

Во-первых, имя файла или каталога в UNIX может содержать символ новой строки (случайно такие вещи обычно не происходят, но это не запрещено). Так как точка (.) в регулярных выражениях не совпадает с символом новой строки, для имени файла вида "/home/fred/flint-stone\n/brontosaurus" такое решение работать не будет – программа решит, что базовым именем является строка "flintstone\n/brontosaurus". Проблему можно решить включением флага /s (если вы не забудете об этом неочевидном и редком особом случае); тогда подстановка приобретает следующий вид: s#.*/##s.


Вторая проблема заключается в том, что это решение привязано к специфике UNIX. Оно предполагает, что в качестве разделителя каталога всегда используется косая черта, как в UNIX, а не обратная косая и не двоеточие, как в некоторых системах. Но третья (и самая серьезная) проблема заключается в том, что вы пытаетесь решить уже решенную задачу. Perl поставляется с несколькими модулями, которые расширяют возможности Perl и дополняют его функциональность. А если их окажется недостаточно, в CPAN имеется множество других полезных модулей, причем каждую неделю их число растет. Вы (а еще лучше ваш системный администратор) можете самостоятельно установить эти модули, если вам потребуется их функциональность.

В оставшейся части этого раздела мы рассмотрим примеры использования некоторых функций пары простых модулей, входящих в поставку Perl. (Эти модули способны на большее; наш обзор всего лишь демонстрирует общие принципы использования простых модулей.) К сожалению, мы не сможем рассказать все, что необходимо знать об использовании модулей вообще; для работы с некоторыми модулями необходимо разбираться в таких нетривиальных темах, как ссылки и объекты. Эти темы, как и способы создания модулей, подробно рассматриваются в «книге с альпакой». Впрочем, знакомства с этим разделом должно быть достаточно для того, чтобы вы смогли использовать многие простые модули. Дополнительная информация о некоторых интересных и полезных модулях приведена в приложении B.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
CGI.pm
Базы данных и DBI
Использование отдельных функций модуля
Модуль File::Basename
Модуль File::Spec

Вернуться в раздел: Perl / 10. Модули Perl