imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 25.10.2005, 21:33     # 1
Gike
сошел
 
Регистрация: 03.06.2002
Сообщения: 662

Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)
Question perl , значение переменной в подпрограме

я наверно отупел ....

есть програма
Код:
my $urla='AAAAA';
show();
exit;

my $urla='BBBBB';

sub show {
if($urla eq ''){print 'pusto'}else{print $urla;}
}
выводит:
pusto

если строчку
my $urla='BBBBB';
убрать , то нормально выводит:
AAAAA


скажите пожалуйста, таких как я лечат?
Gike вне форума  
Старый 25.10.2005, 21:58     # 2
Naked
::VIP::
 
Аватар для Naked
 
Регистрация: 15.05.2005
Адрес: Питер
Сообщения: 1 194

Naked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked СэнсэйNaked Сэнсэй
так а разве глобальные переменные можно в процедуре вызывать. Это же разная область видимости...
__________________
Чтобы воля стала действующим началом, тело должно быть совершенным.
Naked вне форума  
Старый 26.10.2005, 08:41     # 3
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Убери 'my' и переменная станет глобальной, а сейчас она - локальная.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума  
Старый 26.10.2005, 17:15     # 4
Gike
сошел
 
Регистрация: 03.06.2002
Сообщения: 662

Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)
это да, но без my $urla='BBBBB'; все нормально работает
Gike вне форума  
Старый 26.10.2005, 18:48     # 5
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Gike
А вот так работает:
Код:
my $urla='AAAAA';
show();
exit;

$urla='BBBBB';

sub show {
if($urla eq ''){print 'pusto'}else{print $urla;}
}
Я просто не понимаю, зачем два раза объявлять (описывать) переменную?.. Объявил один раз и юзай дальше без 'my' - сие обозначение служит только для первоначального объявления переменной и области ее видимости.

З.Ы. Вот кое-что на эту тему: http://forum.woweb.ru/print10409.html
Там, правда, ничего не сказано про то, что не надо дублировать описание, но моя интуиция подсказывает: "Этого делать не стоит - может глюкнуть". Может я не прав, но считаю так...
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума  
Старый 26.10.2005, 19:05     # 6
rontommy
Добряк Модератор
ГлавБюстАтценка АН ИМХО.ВС
 
Аватар для rontommy
 
Регистрация: 14.10.2002
Адрес: Старый оценщик, НИИ ГлавБюстАтценка АН ИМХО.ВС
Пол: Male
Сообщения: 4 010

rontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербог
rontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербог
Цитата:
Ghost:
Я просто не понимаю, зачем два раза объявлять (описывать) переменную?
А я не понимаю, зачем объявлять (описывать) переменную после "exit" ?
Этот код все равно выполняться не будет.
__________________
Лень - это когда видишь необходимость что-то делать, но не хочется, а влом - это когда что-то хочется, но не видишь необходимости это делать.
rontommy вне форума  
Старый 26.10.2005, 19:20     # 7
Gike
сошел
 
Регистрация: 03.06.2002
Сообщения: 662

Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)
объявлять 2 раза ненужно
случайно получилось и 2 часа искал в чем проблема
на то что оно 2 объявлено внимания не обращал

ссылку гляну
спасибо
PS глянул и ничего полезного ненашел всеравно спасибо

Цитата:
rontommy:
Этот код все равно выполняться не будет.
и я так думал, однако дело портит...

Последний раз редактировалось Gike; 26.10.2005 в 19:44.
Gike вне форума  
Старый 26.10.2005, 19:46     # 8
rontommy
Добряк Модератор
ГлавБюстАтценка АН ИМХО.ВС
 
Аватар для rontommy
 
Регистрация: 14.10.2002
Адрес: Старый оценщик, НИИ ГлавБюстАтценка АН ИМХО.ВС
Пол: Male
Сообщения: 4 010

rontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербог
rontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербогrontommy Гипербог
Цитата:
Gike:
и я так думал, однако дело портит
Дело в том, что PERL - интерпретатор и при запуске скрипта сначала весь код "компилируется" а уже потом выполняется. Видимо на этапе компиляции и происходит ссылка на адрес переменной, которая еще не объявлена и ее значение в подрограмме соответственно будет пустое.
__________________
Лень - это когда видишь необходимость что-то делать, но не хочется, а влом - это когда что-то хочется, но не видишь необходимости это делать.
rontommy вне форума  
Старый 26.10.2005, 19:58     # 9
Gike
сошел
 
Регистрация: 03.06.2002
Сообщения: 662

Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)
Цитата:
rontommy:
происходит ссылка на адрес переменной, которая еще не объявлена
2 раза объявлена

кстати вот так
Код:
my $urla='AAAAA';

my $urla='BBBBB';

show();
exit;

sub show {
if($urla eq ''){print 'pusto'}else{print $urla;}
}
выводит BBBBB

Последний раз редактировалось Gike; 26.10.2005 в 20:10.
Gike вне форума  
Старый 03.11.2005, 08:08     # 10
y13
Newbie
 
Регистрация: 05.10.2004
Сообщения: 35

y13 Путь к славе только начался
Так, понял
use warnings; спасёт мир.
Всё происходит по простой причине, perl ругается на то, что мол какого хрена вы ещё раз переменную объявили и делает $urla = undef;
"my" variable $urla masks earlier declaration in same scope at test.pl line 7."

Последний раз редактировалось y13; 03.11.2005 в 08:15.
y13 вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 02:31.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.