|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Denis Poznyakov 2:5020/400 04 Aug 2003 18:22:58 To : Sergey Ermakov Subject : Re: include -------------------------------------------------------------------------------- > Имеется парсер файлов, который обрабатывает директиву include.. > Он открывает файл, читает его, находит эту директиву, открывает файл по > указанному пути и читает его.. Затем закрывает и возвращается к исходному > файлу.. При этом используются два хендлера (MAIN и TEMP, к примеру).. > > Как бы организовать чтение include из второго открытого файла и вообще > говоря, сделать цепочку вложенных файлов бесконечной?.. Ведь для этого > потребуется иметь динамически формируемый файловый хендлер, не так ли?.. >>start++++++++++++++++ #!/usr/bin/perl my $put_dir='D:/path2file'; $temp=$ARGV[0]; $temp=~ s/\\/\//ig; $full_src=getfile($temp); $full_name=substr($temp,rindex($temp,'/')+1); $full_name=~ s/\.(.{2,})/\.collect\.$1/i; print "PUT TO: $put_dir\/$full_name\n"; open TT, ">$put_dir\/$full_name";print TT $full_src;close TT; sub getfile { my ($filename,$dpath)=@_; $filename=~ s/\\/\//ig; my $filepath; if ($dpath) { $filepath=$dpath; } else { $filepath=substr($filename,0,rindex($filename,'/')+1); # print $filepath,"\n"; $filename=substr($filename,rindex($filename,'/')+1); # print $filename,"\n"; } if ($filename=~ /\//) { $filepath.=substr($filename,0,rindex($filename,'/')+1); $filename=substr($filename,rindex($filename,'/')+1); } print $filepath||'N/A',"\t $filename\n"; my $file_src=''; { my $n=$/; $/=undef; open(TT, $filepath.$filename) or die $!; $file_src=<TT>; close TT; $/=$n; } while ($file_src=~ /<\!--\#include(\s+)(virtual|file)=(\"|\'|)(.*?)(\"|\'|)(\s+|)-->/im) { $file_src=~ s/<\!--\#include(\s+)(virtual|file)=(\"|\'|)(.*?)(\"|\'|)(\s+|)-->/getfile($ 4,$filepath)/eim } $file_src=~ s/^\'(.*?)$//igm; $file_src=~ s/\n{2,}/\n/igm; return qq~ <!--******************* $filepath.$filename >>*******************--> $file_src <!--*******************<< $filepath.$filename *******************--> ~; } <<end++++++++++++++++ некогда написаный скриптец, ему параметром передавалось имя файла и внутрях указывалась дира как абсолютный путь к файлам для подключения ..все было написано побыстряку, так что на всякого рода стрикты не обращайте внимания (ломает окультуривать) еще можно посмотреть CGI::SSI =================================== Denis Poznyakov http://www.pvdlab.net pvdenis@yahoo.com | pvdenis@pvdlab.net icq: 5915230 phone: +375-29-6257816 =================================== --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/65770dbaedf4.html, оценка из 5, голосов 10
|