Forum Webscript.Ru

Программирование => Perl => Тема начата: YA от 21 Июня 2002, 07:52:22

Название: Константы в Perl
Отправлено: YA от 21 Июня 2002, 07:52:22
Продолжаю бороться за чистоту кода :)

Нужно ли вместо переменных, содержащих никогда неменяющееся значение:

$a="эта строка не изменится";
print $a;

использовать ссылку на значение-константу:

*a=\\"эта строка не изменится";
print $a;

?
Название: Константы в Perl
Отправлено: от 21 Июня 2002, 13:27:29
Немного не понял зачем тебе все эти извращения. Нужна константа используй
use constant A => \'Это константа\'
или
sub A() {\'Это константа\'}
Название: Константы в Perl
Отправлено: от 21 Июня 2002, 13:49:27
stah@banquet$ perl -e \'*q = \\"Это константа"; $q = "Не констана";\'
Modification of a read-only value attempted at -e line 1.

Если только для таких предупреждений, но опять же лучше use constant или sub q() {\'q\'}. Но надо отдать должное использование typeglobs выглядит более по-хакерски!!! :)

И еще не используй нигде переменные $a, $b Так как они зарезервированы.
Название: Константы в Perl
Отправлено: YA от 23 Июня 2002, 05:58:52
Цитировать
Немного не понял зачем тебе все эти извращения.
Ну почему же? По-моему это - sub A() {\'Это константа\'} - еще большее извращение.

Цитировать
use constant A => \'Это константа\'

Такая константа не будет интерполироваться.

Цитировать
Если только для таких предупреждений

Почему нет? Очень ценные предупреждения :)

Цитировать
И еще не используй нигде переменные $a, $b Так как они зарезервированы.

А вот это не понял... Кем/чем??? C какой версии? Первый раз слышу.
Название: Константы в Perl
Отправлено: от 24 Июня 2002, 11:50:49
use constant A => \'...\'; и  sub A() {\'..\'} практически одно и тоже.
Так вот sub A() оптимизируется во время компиляции в отличии от *q = \\\'...\';

Насчет ценных указаний, попробуй изменить A и тебя пошлют куда подальше.( чем не ценные указания :) )

Используй конкатенацию вместо интерполяции(она и работает быстрее)

Насчет зарезервированных переменных, посмотри на эти три кода:

stah@banquet$ perl -e \'use strict; $q = 1;\'
Global symbol "$q" requires explicit package name at -e line 1.
Execution of -e aborted due to compilation errors.

stah@banquet$ perl -e \'use strict; $a = 1;\'

stah@banquet$ perl -e \'use strict; $b = 1;\'

как ты думаешь почему последние 2 работают, а первый нет. Вот тебе и ответ на вопрос. perldoc -f sort
Название: Константы в Perl
Отправлено: YA от 26 Июня 2002, 00:34:52
Цитировать
Насчет ценных указаний, попробуй изменить A и тебя пошлют куда подальше.( чем не ценные указания  )
Так я и говорю: это полезно, когда на тебя ругаются :)
Цитировать
Используй конкатенацию вместо интерполяции(она и работает быстрее)
Знаю, но иногда ленюсь - символов больше :))
Цитировать
perldoc -f sort
- это освежило память, спасибо!