Учебное пособие по CGI-программированию - Полезные функции

ОГЛАВЛЕНИЕ

Полезные функции.

В 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Время последнего обновления файлового индекса(в днях)