Учебное пособие по CGI-программированию - Полезные функции
ОГЛАВЛЕНИЕ
Полезные функции.
В Perl очень много различных функций ,как говорится на все случаи жизни,все о них я конечно не опишу,но обо многих. Начну с тех,которые больше относятся к операторам. Операция замены s/рег.выражение/строка/ игнорировать регистр - опция i глобальная(по всей строке) замена -опция g; Пример: $x="This is test";
Очень полезная опция у s/// e -она означает что вторая строка не строка а выражение, результат которого и будет подставлен. Например,у вас есть файл в котором все записи о возрасте через год надо менять
$x=~s/ /_/g;
print $x; #This_is_test open OLD,"oldfile.txt" || die "Cannot open oldfile.txt $!\n";
или более показательным примером послужит функция urldecode,которая будет встречатся в каждой вашей программе,обрабатывающей формы:
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;sub urldecode{
Также важным удобством в Perl являются операции для работы с файлами для выполнения схожих функций в других языках приходиться проделывать огромную массу работы. Аргументами могут быть как Файловые переменные,так и строки,представляющие имя файла.
local($val)=@_;
$val=~s/\+/ /g;
$val=~s/%([0-9A-H]{2})/pack('C',hex($1))/ge;
return $val;
}
Операция | Описание | Пример использоввания |
-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 | Время последнего обновления файлового индекса(в днях) | |