Buy Text links

Sell text links on your site

FACEBOOK.myspace.com-социальная сеть.Youtube.com-мой канал.Yahoo-мой канал.Yahoo-мой блог.Yahoo blog.
Google Scholar
Web Informer Buttonlose belly fat quicklyView Aleksander Grishkin's profile on LinkedIn wordpress.comPage Rank CheckerBPoster.netГлавная страница сайта.
Разместить на FriendFeedFACEBOOK.
Sign up for a free 30-day trial of HootSuite Pro
HootSuite - Social Media Dashboard
HootSuite - Social Media Management
Social Media Tools for Business
HootSuite - Social Media Tools for Business
HootSuite - Analyze and Grow Your Social Channels
Analyze and Grow Your Social Channels with HootSuite
HootSuite - Improve Your Social Media Efficiency
Глава 1

Рекурсивные подпрограммы

Язык Perl допускает, чтобы подпрограмма вызывала саму себя. Такая подпрограмма называется рекурсивной. При написании рекурсивных подпрограмм следует иметь в виду, что все переменные, значения которых изменяются внутри подпрограммы, должны быть локальными, т. е. объявленными при помощи функций my () или local (). В этом случае при каждом вызове подпрограммы создается Новая копия переменной. Это позволяет избежать неопределенности и замещения текущего значения переменной ее значением из следующего вызова подпрограммы.

Рекурсивные подпрограммы следует применять осторожно. Многие алгоритмы, являющиеся по сути итеративными, можно реализовать при помощи рекурсивной подпрограммы. Однако такая подпрограмма окажется неэффективной по времени выполнения и потребляемым ресурсам памяти. Вместе с тем, существуют задачи, решить которые можно только при помощи рекурсивных алгоритмов. В этом случае применение рекурсивных подпрограмм является не только вполне оправданным, но и необходимым. Одной из таких задач, которую операционная система решает постоянно, является рекурсивный просмотр дерева каталогов. Рассмотрим пример рекурсивной Peri-подпрограммы tree (), которая делает то же самое: просматривает дерево каталогов, начиная с каталога, заданного параметром подпрограммы, и выводит список файлов, содержащихся в каждом подкаталоге.

sub tree {

local (*ROOT);

my ($root)=$_[01;

opendi.r ROOT, $root;

my (@filelist) = readdir ROOT;

closedir ROOT;

for $x (gfilelist) {

if ($x ne "." and $x ne ".."){ $x=$root."/".$x; print " $x\n" if (-f $x); if (-d $x) {

print "$x:\n";

tree($x); } } } }

Здесь использованы встроенные подпрограммы Perl opendiro, ciosediro, readdiro, применяемые соответственно для открытия каталога, его закрытия и чтения содержимого. Подпрограмма tree о рекурсивно просматривает каталог, переданный ей в качестве параметра, и выводит имена вложенных подкаталогов и содержащихся в них файлов в следующем виде:

/home/httpd/cgi-bin: /home/httpd/html:

/home/httpd/html/index.html /home/httpd/html/manual:

/home/httpd/html/manual/LICENSE

/home/httpd/html/manual/bind. html

/home/httpd/html/manual/cgi_path.html

Hosted by uCoz