Forum Webscript.Ru

Программирование => Perl => Тема начата: glebushka от 31 Марта 2002, 12:43:15

Название: Поясните кусочек кода, плиз!
Отправлено: glebushka от 31 Марта 2002, 12:43:15
Вот разбираю чужой скрипт, вот не понимаю, чтобы значило:
sub showfile() {
open(TXT, "html/".@_[0]);
while() { print $_; }
close(TXT);
}
Какой файл он пытается открыть? Откуда? Вообщем ХЕЛП!
Название: Поясните кусочек кода, плиз!
Отправлено: glebushka от 31 Марта 2002, 12:47:05
Да, и ещё, что значит строчка в начале скрипта?
$| = 1;
К чему бы это?
Название: Поясните кусочек кода, плиз!
Отправлено: Боря Елкин от 31 Марта 2002, 15:11:29
по идее  @_ - массив данных передаваемый функции. Но тогда должно быть не @_[0], а $_[0].
$|=1 - вывод перла не "буферизуется" (или как там), а сразу отдается клиенту, по мере поступления.
Название: Поясните кусочек кода, плиз!
Отправлено: glebushka от 01 Апреля 2002, 18:53:23
Цитировать
по идее @_ - массив данных передаваемый функции. Но тогда должно быть не @_[0], а $_[0].

Так что всё таки что этот кусочек скрипта делает?
Название: Поясните кусочек кода, плиз!
Отправлено: lodevar от 01 Апреля 2002, 18:55:51
Цитировать
Так что всё таки что этот кусочек скрипта делает?
По идее должен выводить содержимое файла, имя которого передается функции в качестве аргумента.
Название: вота
Отправлено: Green Kakadu от 01 Апреля 2002, 19:02:38
&showfile(file.txt);#что открыть

Откроет и выведет содержимое html/file.txt
Название: Поясните кусочек кода, плиз!
Отправлено: glebushka от 01 Апреля 2002, 20:02:08
А вносить "исправления и добавления":) Бори Елкина, или нет? Что скажете?
Название: Поясните кусочек кода, плиз!
Отправлено: glebushka от 01 Апреля 2002, 20:03:43
Цитировать
&showfile(file.txt);#что открыть

Дык в скрипте это без file.txt, там нет параметров!
Это тогда какой файл он читает и выводит?
Название: Поясните кусочек кода, плиз!
Отправлено: lodevar от 01 Апреля 2002, 20:32:31
Цитировать
А вносить "исправления и добавления" Бори Елкина, или нет? Что скажете?
Можно вносить, а лучше сделать

sub your_sub
{
 my $first_var=$_[0];
 ....
}

Так то оно безопаснее будет!

Цитировать
Это тогда какой файл он читает и выводит?
Если не передается в кач-ве параметра имя файла, стало быть ничего он и не выведет кроме ошибки, типа

"html/" файл не найден!
Название: Поясните кусочек кода, плиз!
Отправлено: Боря Елкин от 01 Апреля 2002, 20:59:22
sub showfile() {
return unless @_;
my $fname=shift;
 if (open(TXT, "html/$fname")){
  while() { print $_; }
  close(TXT);
 }
}
Название: Поясните кусочек кода, плиз!
Отправлено: Green Kakadu от 02 Апреля 2002, 09:37:55
Цитировать
Если не передается в кач-ве параметра имя файла, стало быть ничего он и не выведет кроме ошибки, типа

не-а
если вызов такого вида &showfile()  то передается $_
А вообще,  glebushka ты не самый лучший пример для "понимания" выбрал - кривоватый он ;) лучше купи книгу по Перл, посмотри Cookbook - там примеры полезнее для перловарения
Название: Поясните кусочек кода, плиз!
Отправлено: Green Kakadu от 02 Апреля 2002, 09:40:58
Боря Елкин
;) если уж писать return unless @_;
То по логике стоило бы проверить еще и то, что передано, прежде чем открывать. Это я к тому, что если уж предохраняться, то полумерами не стоит обходиться :)
Название: Поясните кусочек кода, плиз!
Отправлено: Боря Елкин от 02 Апреля 2002, 11:27:05
Green Kakadu
Да нет, если ничего не передали, то зачем что-то пробовать открывать, вот и все. А так конечно... ;)
Название: Поясните кусочек кода, плиз!
Отправлено: Green Kakadu от 02 Апреля 2002, 12:56:32
Цитировать
Да нет, если ничего не передали, то зачем что-то пробовать открывать,

а если ничего не передали ;)  то зачем подпрограмму вызывать?
Название: Поясните кусочек кода, плиз!
Отправлено: Боря Елкин от 02 Апреля 2002, 14:05:39
Green Kakadu

Цитировать
а если ничего не передали  то зачем подпрограмму вызывать?


К примеру, нас много, я пишу эту процедуру. Кто там и что там будет проверять перед ее вызовом, я не знаю
Название: Поясните кусочек кода, плиз!
Отправлено: glebushka от 02 Апреля 2002, 19:08:15
Цитировать
вообще, glebushka ты не самый лучший пример для "понимания" выбрал - кривоватый он  лучше купи книгу по Перл, посмотри Cookbook - там примеры полезнее для перловарения

Ты будешь смеяться, но этот скрипт я взял не для "понимания", а для увелечения функциональности этого самого скрипта:).
Он и до моего "редактирования" грязно ругался при выполнении, теперь же орёт благим матом:).