Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поиск строк в файле и хэши 
:(
    Опции темы
nitr
Дата 5.5.2006, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



Kannabismus, сказано же, что всё сам... это если в коде явно надо, то естественно, а это новый стиль, он не может стать хуже smile Ларри неидиот smile)) а если нравится старый, то юзай его smile 


--------------------
PM   Вверх
sharq
Дата 5.5.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 23
Всего: 28



Kannabismus
Цитата(Kannabismus @  5.5.2006,  16:03 Найти цитируемый пост)
в этом случае можно не закрывать файл, но это плохой стиль программирования. 
Все открытые хэндлы надо закрывать явно.  

Объяснять несколько раз я не собираюсь, не нравится - программируй как хочешь...

GoodBoy, не только.
Почитай perldoc perlref и perldoc perlreftut, сравни, потестируй, посмотри сколько памяти тратится и т.д.  

Это сообщение отредактировал(а) sharq - 5.5.2006, 17:06


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Kannabismus
Дата 5.5.2006, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Тим Тоуди



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 20.11.2005

Репутация: 1
Всего: 2



Не "open my" плохо, а незакрывать хэндлы! Объяснять несколько раз я не собираюсь smile 
PM   Вверх
korob2001
Дата 5.5.2006, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Дескрипторы всегда можно было не закрывать, но это считается плохим стилем. Зачем держать открытым дескриптор, если он больше не используется? Это допустимо только в том случае, если у тебя подпрограмма открывает файл, что-то делает с ним и на том её выполнение заканчивается. Например:
Код
sub save_to_file {
    my $message = shift;
    open my $fh, ">>", "messages.txt" or die $!;
    print $fh $message . "\n";
}

Здесь дескриптор закрывать не обязательно, так как он сразуже уничтожается, как только сделана запись в файл, т.е. закончилась лексическая область видимости переменной объявленной как my, в нашем случае $fh. Но  если нужно ещё что-то сделать, в теле подпрограммы и оно не имеет прямого отношения к фалу, то помоему гораздо разумнее закрыть его явно. Например:
Код
sub read_file {
    open my $fh, "<", "messages.txt" or die $!;
    print while <$fh>;
    close $fh;
    print <<"    MESS";
    Зачем здесь нужен открытый дескриптор
    когда его можно освободить?
    MESS
}

В данном случае просто выводится сообщение, но можно было бы конечно делать и что-нить другое. Вобщем если у тебя в начале программы открывается дескриптор и что-то делется с ним, а далее идёт код, который не имеет никакого отношения к файлу, то лучше его закрыть сразу же, когда в нём нет нужды. Потому как такой дескриптор будет уничтожен только тогда, когда закончится его область видимости, в примерах выше, это тело подпрограммы, но это может быть и тело всей программы, если дескриптор открывался как глобальный.
Это особенно нужно делать в том случае, когда файл блокируется, для того, что бы освободить очередь немедленно, как только зканчилась работа с файлом.    

Это сообщение отредактировал(а) korob2001 - 5.5.2006, 21:23


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
sharq
Дата 6.5.2006, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 23
Всего: 28



Kannabismus, читай внимательно, что я написал. 
Хендел нужно закрывать тогда, когда это действительно необходимо!
А в приведенном выше примере - это необходимость отпадает!



 


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0657 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.