IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   perl , значение переменной в подпрограме (http://www.imho.ws/showthread.php?t=94781)

Gike 25.10.2005 21:33

perl , значение переменной в подпрограме
 
я наверно отупел ....

есть програма
Код:

my $urla='AAAAA';
show();
exit;

my $urla='BBBBB';

sub show {
if($urla eq ''){print 'pusto'}else{print $urla;}
}

выводит:
pusto

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


скажите пожалуйста, таких как я лечат?

Naked 25.10.2005 21:58

так а разве глобальные переменные можно в процедуре вызывать. Это же разная область видимости...

Ghost 26.10.2005 08:41

Убери 'my' и переменная станет глобальной, а сейчас она - локальная. ;)

Gike 26.10.2005 17:15

это да, но без my $urla='BBBBB'; все нормально работает

Ghost 26.10.2005 18:48

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
Там, правда, ничего не сказано про то, что не надо дублировать описание, но моя интуиция подсказывает: "Этого делать не стоит - может глюкнуть". Может я не прав, но считаю так...

rontommy 26.10.2005 19:05

Цитата:

Ghost:
Я просто не понимаю, зачем два раза объявлять (описывать) переменную?
А я не понимаю, зачем объявлять (описывать) переменную после "exit" ?
Этот код все равно выполняться не будет.

Gike 26.10.2005 19:20

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

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

Цитата:

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

rontommy 26.10.2005 19:46

Цитата:

Gike:
и я так думал, однако дело портит
Дело в том, что PERL - интерпретатор и при запуске скрипта сначала весь код "компилируется" а уже потом выполняется. Видимо на этапе компиляции и происходит ссылка на адрес переменной, которая еще не объявлена и ее значение в подрограмме соответственно будет пустое.

Gike 26.10.2005 19:58

Цитата:

rontommy:
происходит ссылка на адрес переменной, которая еще не объявлена
2 раза объявлена

кстати вот так
Код:

my $urla='AAAAA';

my $urla='BBBBB';

show();
exit;

sub show {
if($urla eq ''){print 'pusto'}else{print $urla;}
}

выводит BBBBB

y13 03.11.2005 08:08

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


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

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