Учебное пособие по CGI-программированию - Работа с файлами

ОГЛАВЛЕНИЕ


функция open открывает файл
open ФАЙЛОВАЯ_ПЕРЕМЕННАЯ,"имя файла";  #открыть файл для чтения
open ФАЙЛОВАЯ_ПЕРЕМЕННАЯ,">имя файла"; #для записи
open ФАЙЛОВАЯ_ПЕРЕМЕННАЯ,">>имя файла";#для записи в конец
open ФАЙЛОВАЯ_ПЕРЕМЕННАЯ,"+<имя файла";#для чтения и записи
open ФАЙЛОВАЯ_ПЕРЕМЕННАЯ,"|комманда"; #направить информацию на вход программы
open ФАЙЛОВАЯ_ПЕРЕМЕННАЯ,"комманда|"; #считать информацию с выхода программы
open ФАЙЛОВАЯ_ПЕРЕМЕННАЯ,"|комманда|"; #и то и другое вместе
Что какается открытия файлов,то вам как програмистам все очевидно, но с коммандами тоже все здорово,что пояснит хороший пример(из практики):
open MAIL,"|mail Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.";#Пошлем информацию по почте
print MAIL "Hello\n";
print MAIL "...\n";
print MAIL "...\n";
close MAIL;
когда вы открыли файл вы можете считать из него строку в скалярную переменную Вот так:$str=<FILE>
избавиться от символа новой строки на конце поможет функция chomp, ведь этот символ может помешаться например в имени файла или при выводе на экран
print "Введите имя файла:";
$fname=<STDIN>;
chomp($fname);
open F,$fname || die "Cannot open $fname $!\n";
.....
Если также подставить списочную переменную,то получим список строк файла от текущей строки и до конца
print "Что искать:";
$search=<STDIN>;
chomp($search);
@L=<F>;
foreach(@L){
print if /$search/;
}
а можно и так:
print "Что искать:";
$search=<STDIN>;
chomp($search);
foreach(<F>){
print if /$search/;
}
бинарный файл можно читать и писать функциями sysread и syswrite:
sysread ФАЙЛОВАЯ_ПЕРЕМЕННАЯ,$скалярная_перемменая,сколько_байт
syswrite ФАЙЛОВАЯ_ПЕРЕМЕННАЯ,$скалярная_перемменая,сколько_байт
функции split и join: @Список=split /рег.выр/,$скаляр;
$скаляр=join строка,@Список;
#Разбить строку слов,разделенных пробелами в список вы можете
@WordList=split / /,$String;
#После обработки снова обьединить
$String=join ' ',@WordList;
Встроеные функции Perl можно вызывать со скобками или без (как вам удобно), скобки программисты указывают или для красоты,или чаще,что устранить возможную неоднозначность в выраженнии:
printf "x=%d",$x;
printf ("x=%d",$x);#аналогично
Надеюсь что я вас позабавил примерами функций ;).

Примеры применения Perl для различных нужд...

Следующая программа переводит текстовый файл в формат HTML (вспомните сколько хлопот вам доставит отлов во всем файле '<', '>' и '&' чтоб заменить их на &tl; , &gt; и &amp; а как неплохо чтоб автоматически все http://www.... превратились в <A xhref="http://www...." >http://www....</A>)

#!/usr/bin/perl
#txt2html
die "Usage: txt2html Infile OutFile\n" unless(@ARGV);
open IN,"$ARGV[0]" || die "Cannot open $ARGV[0] $! \n";
open OUT,">$ARGV[1]" || die "Cannot open $ARGV[1] $! \n";
while(<IN>){
s/&/&amp;/g;
s/</&lt;/g;
s/>/&gt;/g;
s/\n/<BR>\n/g;
s/(http:\/\/\S+)/<A xhref="$1">$1<\/A>/g;
print OUT $_;
}
close IN;
close OUT;