Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Как сделать корректный скрипт?


Автор: Gooos 21.5.2006, 01:14
Скрипт состоит из двух файлов admin.pl и comments.pl, оба они работают с папкой /data, где находятся текстовые файлы с комментариями. 
Как правильно написать скрипт счётчика строк в .txt файле (counter.pl), что-бы он не конфликтовал с уже существующими скриптами admin.pl и comments.pl
При этом скрипт по вызову должен посчитать строки в определённом .txt файле и вывести результат на страницу через SSI.
Конечный результат работы скрипта должен быть такой: [ комментариев 15 ]
Есть вот такой скрипт: 

#!/usr/bin/perl
open(FILE, "file.txt");
@DATA=<FILE>;
close (FILE);
$count = @DATA;
print "$count";

Как написать строку открытия файла, если имена запрошенных файлов будут различны - open(FILE, "$file.txt"); ???
Можно ли разместить скрипт прямо с txt. файлами в папке /data, что-бы не прописывать 'opendir' - открытие /data?
И как правильно вызвать скрипт через SSI? <!--#include virtual="/cgi-bin/comment/data/counter.pl?file=faile_name"--> -???

P.S: я не програмист smile и не уверен в правильности скрипта. Помогите разобраться.
 

Автор: DiverD 21.5.2006, 10:20
Как написать строку открытия файла, если имена запрошенных файлов будут различны -

загнать в цикл foreach и поочередно открывать.

@list_file = qw(/usr/www/1.txt /usr/www/2.txt);
foreach(@list_file) {
open(FILE,"$_") or die "$!";
....
}

Можно ли разместить скрипт прямо с txt. файлами в папке /data, что-бы не прописывать 'opendir' - открытие /data?

можна итак, но не обязатьлено opendir, проста можна прописать пути к файлам если у тебя они не меняються. 

Автор: Gooos 21.5.2006, 15:18
diverd, я несовсем точно описал суть проблемы.

Через ssi надо вызвать скрипт, что-бы он посчитал кол-во строк в одном определённом .txt файле и вывел результат на страницу. Будет несколько вызовов с одной страницы, но к разным .txt (т.е. кол-во комментариев к разным статьям - заголовок статьи и кол-во комм., заголовок статьи_2 и кол-во комм. к ней, и т.д.) 

#!/usr/bin/perl
use strict;
use warnings;

my $filename = "$id.txt";
open(FILE, "<", "/pub/home/allegro7/cgi-bin/comment/data/" . $filename) or die "Could't open file $filename. $!";
my @data = <FILE>;
close(FILE);
print scalar(@data);

Такой вариант будет работать? И как правильно вызвать через ssi, может в скрипте надо чего указать?
Я вызывал так <!--#include virtual="/cgi-bin/comment/counter.pl?id=conv_smile"--> ...

Вот результат на странице: 
[an error occurred while processing this directive]
Запись в файле log_error: 
[Sun May 21 15:06:08 2006] [error] [client 84.17.27.189] Premature end of script headers: /pub/home/allegro7/cgi-bin/comment/counter.pl
[Sun May 21 15:06:08 2006] [error] [client 84.17.27.189] unable to include "/cgi-bin/comment/counter.pl?id=conv_smile" in parsed file /pub/home/allegro7/htdocs/index_test.html

smile 

Автор: nitr 21.5.2006, 19:29
open(FILE, "<". " но лучше по-другому ;)

open(FILE, "< /pub/home/allegro7/cgi-bin/comment/data/$filename")  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)