Учебное пособие по CGI-программированию Страница 7. Полезные функции
|
Страница 7 из 30
Полезные функции. В Perl очень много различных функций ,как говорится на все случаи жизни,все о них я конечно не опишу,но обо многих. Начну с тех,которые больше относятся к операторам. Операция замены s/рег.выражение/строка/ игнорировать регистр - опция i глобальная(по всей строке) замена -опция g; Пример: $x="This is test"; $x=~s/ /_/g; print $x; #This_is_test
Очень полезная опция у s/// e -она означает что вторая строка не строка а выражение, результат которого и будет подставлен. Например,у вас есть файл в котором все записи о возрасте через год надо менять open OLD,"oldfile.txt" || die "Cannot open oldfile.txt $!\n"; open NEW,">newfile.txt" || die "Cannot open newfile.txt $!\n"; foreach(){ s/(\d+)(\s+год)/($1+1).$2/gie; s/(\d+)(\s+лет)/($1+1).$2/gie; print NEW $_; } close NEW; close OLD;
или более показательным примером послужит функция urldecode,которая будет встречатся в каждой вашей программе,обрабатывающей формы: sub urldecode{ local($val)=@_; $val=~s/\+/ /g; $val=~s/%([0-9A-H]{2})/pack('C',hex($1))/ge; return $val; }
Также важным удобством в Perl являются операции для работы с файлами для выполнения схожих функций в других языках приходиться проделывать огромную массу работы. Аргументами могут быть как Файловые переменные,так и строки,представляющие имя файла. Операция | Описание | Пример использоввания | -r | Доступен для чтения | unless(-r "myfile"){print "Cannot read myfile\n";} | -w | Доступен для записи | | -x | Для исполнения | | -o | Принадлежит пользователю | if(-o "index.htm"){chmod 0777,"index.htm";} | -R | Доступен для чтения реальным пользователем,а не только "эффективным". Имеет значения для set-uid -скриптов | if(-r FILE){unless(-R FILE){die "Its not allowed to read this\n";}} | -W | Доступен для записи реальным пользователем | | -X | Доступен для исполнения реальным пользователем | | -O | Принадлежит реальному пользователю | | -e | Файл или каталог Существует | unless(-e $htmlfile){ open HTML,">$htmlfile"; print HTMLFILE "<HTML><BODY></BODY></HTML>"; close HTMLFILE; } | -z | Существует,но имеет нулевую длину | if(-z 'tmpfile'){unlink 'tmpfile';} | -s | Размер файла в байтах | system "rar m -m5 archive.rar $myfile" if -s $myfile > 1000; | -f | Файл существует и является простым файлом | | -d | Файл существует и является каталогом | if(-d 'public_html'){chdir 'public_html';} | -l | Символической ссылкой | | -p | Каналом FIFO | | -u | Имеет бит установки пользователя | | -g | Имеет бит установки группы | | -k | Установлен sticky-бит | | -t | Является терминальным устройством | | -M | Время с последнего изменения (в днях) | while(defiled($file=glob('*'))){ if(-M $file >= 7.0){ unlink($file);#удаляем слишком старые файлы } } | -A | Время последнего доступа(в днях) | if(-A "$ENV{'HOME'}/public_html/index.html" < -A "$ENV{'HOME'}/.last"){print "Кто-то ходил на твою домашнюю страничку пока тебя не было!!!\n";} | -C | Время последнего обновления файлового индекса(в днях) | | | | | |