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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Возможно ли сделать переменные по умолчанию локаль 
:(
    Опции темы
Logo
Дата 4.10.2009, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 10



Возможно ли, чтобы переменные, для которых не указано my или our, были локальными, как в  python?
PM MAIL   Вверх
gcc
Дата 4.10.2009, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

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



Logo, локально это где? в функции или в классе (между классами)?

может быть как-то можно сделать...

я вижу это: написать некоторый метод, и в конструкторе инкапсулировать, определять область видимости
есть фукниця caller, чтобы смотреть где вызывается(вызывалась) переменная http://perldoc.perl.org/functions/caller.html

может есть модуль на cpan.org для инкапсуляции переменных...

можно поинтересоватся, зачем это вам надо?

Это сообщение отредактировал(а) gcc - 4.10.2009, 11:25
PM WWW ICQ Skype GTalk Jabber   Вверх
Logo
Дата 4.10.2009, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 10



Т.е. с лексической областью видимости, my, а не our.
Цитата

можно поинтересоватся, зачем это вам надо?

my требуется гораздо чаще чем our. 
PM MAIL   Вверх
gcc
Дата 4.10.2009, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

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



Logo, 

дело еще в том что my не обязательно писать, можно не писать вообще...

а в сложные ситуациях чтобы не запутаться с переменными и чтобы не сделать ошибки можно включить use Strict; потом выключить no Strict;

Это сообщение отредактировал(а) gcc - 4.10.2009, 12:46
PM WWW ICQ Skype GTalk Jabber   Вверх
Logo
Дата 4.10.2009, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 10



Цитата

дело еще в том что my не обязательно писать, можно не писать вообще...

В том-то и дело, что если my не писать, переменная будет our.
PM MAIL   Вверх
gcc
Дата 4.10.2009, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

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



да, будет "глобальная", наверное, но можно сделать область видиомсти чтобы одна переменная в одном модуле не была видна в других... в одном массиве определить можно по-моему...

а в чем проблема что если она будет глобальная? можно переопределить $str = ' ';   и $str = undef;  
 


Это сообщение отредактировал(а) gcc - 4.10.2009, 13:02
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 4.10.2009, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

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



Logo, 

можно использовать хэш или какую-то струкртуру, обявить только один раз (хэш), проблем не будет с обявлением переменных...
PM WWW ICQ Skype GTalk Jabber   Вверх
sir_nuf_nuf
Дата 4.10.2009, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Logo, нет, средствами perl так сделать нельзя. 
В принципе можно использовать source фильры для этого.
Но если немного поразмыслить то так делать плохо и не нужно.

Какие плюсы у этого ?
1) чуть чуть меньше кода.
Какие минусы ?
1) Ваш код будет не похож ни на что другое. Если вы будите читать не только свой код, то придется постоянно переключаться
2) Ваш код потом придется долго разбирать, т.к. люди уже привыкли к стандарту.
3) Вы получаете зависимость от source фильтра, который не факт что везде есть.
4) Понетциальный проблемы с eval.. 

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


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
Logo
Дата 4.10.2009, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 10



Цитата

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


Наоборот, использование лексических переменных есть признак хорошего кода, т.к. не засоряется глобальное пространство имен.
Зачем обявлять глобальной переменную, которая используются в одном конкретном месте?

В source фильтре насколько я понял с проходит пред обработка кода как текста перед выполнением... тогда да, найти и корректно обработать все переменные целая история.
PM MAIL   Вверх
sir_nuf_nuf
Дата 4.10.2009, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Logo @  4.10.2009,  16:57 Найти цитируемый пост)
Наоборот, использование лексических переменных есть признак хорошего кода, т.к. не засоряется глобальное пространство имен.
Зачем обявлять глобальной переменную, которая используются в одном конкретном месте?

вы меня не поняли.

Я согласен, что глобальные переменные нужно использовать очень ограниченно.

Но и лексические переменные разводить не нужно.

Если у вас появляется много лексических переменных - вероятно вы просто написали слишком длинную и грамоздкую функцию. Вам нужно разделить ее на более мелкие

P.S. я в последнее время вообще стараюсь придерживаться функционального стиля - интесивно использую map, grep циклы-суффиксы, тренарный опператор - ключевое слово my - встречается не более 2 - 3 раз в функции




--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
Logo
Дата 6.10.2009, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 10



Тем не менее есть переменные которые относятся к конкретному участку кода. К примеру из последней программы у меня my $response и my $request содержащие соответственно запрос и ответ LWP (и таких переменных больше, чем глобальных)
Типичный пример, итератор цикла, следовало бы писать так:
for(my $i=0; $i<100; $i) {}
Правда в случае с $i я все же ее как глобальную пишу, т.к. кроме циклов она ни где не используется.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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