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

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

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 15:35 23.05.24 
Компютри и Интернет
   >> Perl
Всички теми Следваща тема *Кратък преглед

Тема Въпросче от новобранец - за променливи и т.н.нови  
Автор bira_more (бира)
Публикувано08.09.05 17:37



Буквално няма и месец от как се боря с Пърл - тоест може на воля да се хилите за тъпите ми въпроси.
Та към въпроса:
Каква е разликата между
my $creten=5
и
my ($creten)=5=7
То изреченията са по сложни де
Работил съм до сега с C/C++
А опита ми с Purl - е да променя някое готово скриптче да работи както аз бих искал - става.

Bеer? Mоre?




Тема Re: Въпросче от новобранец - за променливи и т.н.нови [re: bira_more]  
Авторlevel 9 (Нерегистриран)
Публикувано08.09.05 21:58



1voto e qsno
2roto e invalid - ne mojesh da promenqsh konstanti - nqmash opit s programiraneto principno, ne samo s Perl.



Тема Re: Въпросче от новобранец - за променливи и т.н.нови [re: level 9]  
Автор novobranec (може би?)
Публикувано08.09.05 22:18



Ти пък. Човека или нещо грешно е копнал или просто се лигави.
То е ясно че това дето пита е глупост и безсмислица и не става, обаче
$creten=$oligofren=$bastun=0 и
($creten,$oligofren,$bastun)=0
си е напълно вярно, както и това че в Perl всички променливи са тип UNKNOWN за разлика от C където всичко трябва да се дефинира предварително и сакън да не се отдели някой байт повече за променлива и малко повече редове в компилатора за определяне на типа на променливите.





Тема Е не си правнови [re: level 9]  
Автор bira_more (бира)
Публикувано09.09.05 17:04



Писал съм на C/C++ за ДОС и Виндовс
Писал съм на C за C8051F124 - 8051 съвместим 8 битов процесор.


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

В същност това е истинския въпрос.
Е да ама според мен ако беше:

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

Щеше да е същото.

До колкото разбрах от пърл за по малко от месец, при това между другите ми задължения, скобите биха имали смисъл само ако не е една променлива а са няколко.
Да не говорим че за мен по скоро
$agi_env{channel}
е константа, а не променлива
Знам ли какво точно означава тази конструкция?
Обикновено съм виждал
$agi_env->{channel}
Е в нормалните езици е друго:
Там имаш
int Kreten=5.
И там = е присвояване, в някои езици обаче = не е = а е ==.
както споменах в самото начало - новобранец съм в Пърл, и не съм наясно дори дали = си е = или е ==.

Bеer? Mоre?



Тема 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"


Тема Re: Е не си правнови [re: bira_more]  
Авторlevel 9 (Нерегистриран)
Публикувано17.09.05 03:46



ti pishi ako iskash na siriiski, tova ne pomaga, kogato te myrzi da chetesh manuals.
kolkoto i da e intuitiven, Perl ochakva da imash obshta predstava ot:

perlreftut Perl references short introduction
perldsc Perl data structures intro
perllol Perl data structures: arrays of arrays

perlrequick Perl regular expressions quick start
perlretut Perl regular expressions tutorial

perlboot Perl OO tutorial for beginners
perltoot Perl OO tutorial, part 1
perltooc Perl OO tutorial, part 2
perlbot Perl OO tricks and examples

perlstyle Perl style guide

perlcheat Perl cheat sheet
perltrap Perl traps for the unwary
perldebtut Perl debugging tutorial

ako li ne - prodyljavai s 'ostroumnite' hipotezi



Тема Re: Е не си правнови [re: level 9]  
Автор4iki (Нерегистриран)
Публикувано19.09.05 13:31



ти па кво се правиш на много умен кат си научил некъв наркомански език



Тема Re: Е не си правнови [re: level 9]  
Авторvader (Нерегистриран)
Публикувано14.10.05 15:53



deba 4ikijiite deba



Тема Re: Въпросче от новобранец - за променливи и т.н.нови [re: bira_more]  
Автор Ognen_Demon (Web-dev)
Публикувано20.10.05 15:14



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

my $abc; # taka deklarirame promenliwa

my ( $abc ) = 3 = 5;
# neprawilno, shte wurne greshka, shtoto '3' se iawiawa ako ne se
# luja anonimna konstanta na koiato se opitwame da priswoim stoinost
# '5'

my ( $abc ) = 3;
# taka deklarirame anonimen masiw, kam chiito nulew element se
# obrushtame sus skalarnata promenliwa $abc, koiato w sluchaia
# se iawiawa neshto kato pointer kam elementa
# i w posledstwie i priswoiawame stoinost '3';
# sled tozi red natatak $abc weche si e w chisto skalaren kontekst
# ...
# wsushtnost ne sam mnogo siguren dali niama da e po-prawilno da se
# kaje "obrushtame se kum promenliwata $abc w konteksta na masiw"
# no w Perl baia neshta ne sa towa koeto izglejdat :))

Междудругото конструкцията с анонимния масив е много често ползвана
за следната трикинка примерно ( поне аз най-вече за това я ползвам ):

- имаме масив @ar
- искаме от него да изкопчим конкретни елементи

my ( $a ) = @ar; # samo nulewia element
my ( $a, undef, $c ) = @ar; # nulewia i wtoria element

Ок. На пръв поглед това изглежда не-особено смислено. Ето пример от
самата практика - декларация на метод myMethod в клас,
който приема един параметър $a:

# Primeren metod
sub myMethod {
my ( $self, $a ) = @_;
} # end myMethod()

( От гледна точка на практиката така май се явява най-удобно. Иначе старите пърлари в нета не одобряват точно тази декларация на функции много много )

И един съвет от мен, макар че където и да прочетеш, ще те посъветват същото:

use strict;

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



Тема Здравей, мерси :)нови [re: Биpxaджия]  
Автор bira_more (бира)
Публикувано16.12.05 17:11



Така е боря се с Астериск.
Лошото е че нещо се оплетох като пате в калчища.
Самия Астериск си има някои бози - тоест трябва да се ръчкат сорсове на C - a някои от функциите му са на по хиляда реда - ужас.
След това - Pеrl - хубав език наистина.
Ама аз само променям готови файлчета - писани от Mark Spencer.
Накрая почнах да мешам и едни скриптове на PHP - веселба.

Още веднъж мерси за разясненията.

Bеer? Mоre?


Редактирано от bira_more на 16.12.05 17:21.




Всички темиСледваща тема*Кратък преглед
Клуб :  


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

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