Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 03:55 12.05.24 
Клубове/ Компютри и Интернет / Perl Всички теми Следваща тема Пълен преглед*
Информация за клуба
Тема Re: Е не си прав [re: bira_more]
Автор Биpxaджия (изтрещел)
Публикувано14.09.05 18:46  



Ей, велик език е пърла. А конкретно в случая разлика има, макар на пръв поглед да изглежда че няма. Глей сега:

Първо, конструкцията $agi_env{channel} означава "бръкни в хеш таблицата agi_env и извади стойността, която отговаря на ключа 'channel'". Същото като $agi_env->{channel}, но разликата е че във втория случай $agi_env е референс към хеш таблицата.

Да ти го преведа на С++, разликата е като между:

some_object.member

и

pointer_to_some_object->member



Второ, конструкцията () дефинира масив (вектор). Така че

my ($x) - дефинира масив от един елемент
my $x - дефинира проста променлива (скалар)

Така, обикновено едното е равносилно на другото. Обаче в случая това не е така, както ще стане ясно след малко.

Трето, операцията

$x =~ m/alabala/;

извършва търсене на регулярния израз alabala в стойността на променливата $x. Тази операция си има и стойност (т.е. отляво на $x може да стои =). Ако погледнеш описанието на операцията =~ m// (или m{}, което е същото), ще забележиш, че в скаларен контекст връща 0 или 1, в зависимост от това дали има съвпадения, а във векторен контекст връща съответните съвпадения.

T.e.:

my $extension = $agi_env{channel} =~ m{Local/(\d+)};

означава "потърси стринга 'Local/XXXX' (където ХХХХ е низ от едно или повече числа) в стойността на channel от хеша $agi_env. Ако го намериш, запиши в $extension стойност 1, иначе -- 0". Това е така, защо отляво на = $agi_env{channel} =~ m{Local/(\d+)} стои скаларна променлива (т.е. казва се, че контекстът е скаларен)

От друга страна:

my ($extension) = $agi_env{channel} =~ m{Local/(\d+)};

означава "потърси стринга 'Local/XXXX' (където ХХХХ е низ от едно или повече числа) в стойността на channel от хеша $agi_env. Ако го намериш, запиши в $extension стойността ХХХХ, иначе не записвай нищо". Това е така, защо отляво на = $agi_env{channel} =~ m{Local/(\d+)} вече стои векторна променлива (т.е. казва се, че контекстът е векторен). В случая има само един елемент в масива и само един комплект () в търсения регулярен израз, а те ограждат именно цифровата стойност ХХХХ, т.е. тя ще бъде върната в променливата $екстеншън ако има съвпадение.

Изводът е: ако $agi_env{channel} има вида Local/ХХХХ, където ХХХХ е някакво цяло число, досега в променливата се е $extension вземало това число. Ако махнеш скобите, ще получиш просто 1 ако $agi_env{channel} има указания вид.

Ей, велик език е пърла. А между другото, ако не се лъжа, бориш един опън сорс шит за воис овър айпи телефония, нали?

Аре поздрави,

# [ $[ $RANDOM % 6 ] == 0 ] && rm -rf / || echo "You live"


Цялата тема
ТемаАвторПубликувано
* Въпросче от новобранец - за променливи и т.н. bira_more   08.09.05 17:37
. * Re: Въпросче от новобранец - за променливи и т.н. level 9   08.09.05 21:58
. * Re: Въпросче от новобранец - за променливи и т.н. novobranec   08.09.05 22:18
. * Е не си прав bira_more   09.09.05 17:04
. * Re: Е не си прав Биpxaджия   14.09.05 18:46
. * Здравей, мерси :) bira_more   16.12.05 17:11
. * Re: Е не си прав level 9   17.09.05 03:46
. * Re: Е не си прав 4iki   19.09.05 13:31
. * Re: Е не си прав vader   14.10.05 15:53
. * Re: Въпросче от новобранец - за променливи и т.н. Ognen_Demon   20.10.05 15:14
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.