![]() |
Модераторы: ginnie, korob2001 |
![]() ![]() ![]() |
|
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 6 Всего: 49 |
Уважаемый burakov, еще раз хочу обратить Ваше внимание на
Надо передать имя файла не внутри модуля (класса), а внутри объекта (экземпляра класса). Лучше это делать используя в качестве основы класса массив или хэш, тогда все данные, уникальные именно для этого объекта надо помещать в этом массиве (хеше). -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
shamber |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 1 Всего: 18 |
а зачем объявлять, лучше его в самом начале сохранить в хэш, а потом удалить, так надежнее если в самом конце удалять то используйте DESTROY пример показал ginnie PS может так лучше?
Это сообщение отредактировал(а) shamber - 22.8.2008, 16:04 |
||||
|
|||||
burakov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
Добрый день.
вообщем за выходные я разобрался в ответах,примерах ![]() а вот на конструкцию my $str = <$self->{file}> PERL ругается. Очевидно ему не нравится большое количество <->> вот таких вот значков а как же тогда сказать ему чтобы он читал из файла?
|
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 6 Всего: 49 |
Уважаемый burakov, попробуйте
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
burakov |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
Спасибо,
я через так
попробовал - получилось, НО а все таки без дополнительного присваивания my $str = <$fh>; никак нельзя ? ибо не всегда это вот присваивание уместно. я об него споткнулся, сейчас покажу
вот например если делать open не на $self->{fh}, на $fh, то $self->{fh} остается закрытым дескриптором. Обо что я собственно и стукнулся . поэтому ж и вопрос. может както можно вывернуться и указать перлу чтобы он делал <> непосредственно из $self->{file}??? или тут ничего не поделаешь? (по моему это вопрос чисто синтаксиса написания (не понимает <->>), поскольку логика перла в строке open ($self->{fh}, $self->{file}); работает отлично) Спасибо. |
||||
|
|||||
ginnie |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 6 Всего: 49 |
Уважаемый burakov, не могли бы Вы объяснить, как должен изменится $self->{fh} при вызове функции open() во фрагменте
По теме: с <> по-другому нельзя (см. http://perldoc.perl.org/perlop.html, раздел I/O Operators), можно попробовать
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||
|
|||||
burakov |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
добрый день
по поводу
вот если вот так вот сделать, как в примере выше, а потом попытаться поработать с дескриптором, то получить строку из файла не удается типа get_str() ругается - ну я так понял на закрытый дискриптор или неопределенный дискриптор. а вот если сделать вот так
т.е. сделать open непосредственно на $self->{fh} то все нормально. УЖ не знаю с чем это связано... я так для себя по простому объяснил, что типа просто $fh чем то отличается от open ($fh ......) поэтому и спросил как убрать лишнее присваивание, чтобы лишний раз не путаться. Огромное спасибо за ответы. |
||||
|
|||||
ginnie |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 6 Всего: 49 |
Уважаемый burakov,
обязательно надо разобраться, если хотите заниматься разработкой на Perl. Проблема с первым фрагментом в том, что сначала происходит присваивание, а затем вызов open(). В хэш попадает значение undef, а ссылка на файловый дескриптор после open() остается только в переменной $fh. Чтобы работало правильно надо присваивание делать после open().
стало понятнее? -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||
|
|||||
burakov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
Да стало понятнее.....
присвоить $self->{fh} после open - как то до меня сразу не дошло. --- я тему пока не закрываю, еще поразбираюсь с классом который рекурсивно сканирует каталоги, спрошу чего нибудь спасибо. |
|||
|
||||
shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 1 Всего: 18 |
burakov, вопрос только в том, зачем вам плодить переменные. почему сразу не
|
|||
|
||||
burakov |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
добрый день,
все таки если не сделать
то без присвоения $self->{fh} переменной код не сработает переменная $fh нужна впоследствии, для чтение строки из файла, посколько perl не понимает синтаксиса типа.
вот ginnie посоветовал воспользоваться функцией readline(), чтобы не плодить переменные. |
||||
|
|||||
burakov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
Добрый день.
спрошу еще о сканировании каталогов. захотелось создать кнопочку "СТОП", которая бы делала DESTROY. на сканирование каталогов ну т.е. прерывала сканирование каталогов в нужный для пользователя момент. ну вообщем нарисовал я такую кнопочку приделал к ней DESTROY. но при нажатии такого вот четкого конкретного дестроя на чтение каталога не происходит. т.е. если несколько раз понажимать, подергать эту кнопочку, то в какой то момент сканирование каталогов все таки останавливается. тогда я подумал, что наверное если это вот сканирование выделить в отдельный процесс. и потом делать Kill на вот этот вот отдельный процесс (и хотя я работаю в windows Kill у меня тоже работает) то это более четко прекратит сканирование каталогов. только как сказать перлу, чтобы он запустил сканирование каталогов в отдельном процессе? fork попробовал - получается вроде как два сканирования сразу - не подходит.... как правильно реализовать мою СТОП-идею? Спасибо. |
|||
|
||||
shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 1 Всего: 18 |
почитайте про треды, на форуме может они вам помогут
|
|||
|
||||
burakov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
форуме про это дело мало
нашел вот http://nopox.wordpress.com/2007/10/06/mult...eading-in-perl/ наворочено блин с тредами этими. Ну а все таки, к черту потоки эти. Дестрой то должен закрыть дескриптор - отчего ж тогда тогда ж так неустойчиво все отрабатывает??? |
|||
|
||||
shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 1 Всего: 18 |
burakov, вы приведите ваш скрипт. Сложно сказать, что у вас там происходит. Телепатия сегодня не работает
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl: Системное программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |