PERL - ВТОРА ЧАСТ

Оператори.Аритметични и логически оператори.
Приоритети на операторите.


Основната част от операторите в Perl са оператори за работа с числа (числови оператори). Операторите върху низове не са чак толкова много, но пък Perl предоставя множество функции за работа с низове. Хубавото в случая е, че Perl не прави особенна разлика между фукнции и оператори. Разликата е само в записа - в повечето случаи операторите се записват между аргументите си (например 5 - 3), а функциите - преди аргументите, които получават (print (5,3)). Числовите оператори се делят на аритметични и логически. Те са същите както тези на Java Script.Ако сте пропуснали тази глава етотаблицатас аритметичните оператори. Perl обаче добавя и оператор за повдигане на степен - оператора **:


#!/usr/bin/perl
#ex5.plx
use warnings;
print 2**4,"\n";

Приоритета на операторите с следния:

Опрератори работещи със списъци - това са например скобите.
Повдигане на степен - **.
Унарен минус - например -2.
Умножение, деление и делене по модул - *,/,%.
Събиране и изваждане - +,-.
Разгледаните оператори, работят така както го правим ние. Компютрите, обаче работят с двоични числа и Perl разбира се разполага с такива оператори (повече информация за булевата аритметика). Ето и таблица с тях:
Оператор Действие
& Побитово "и"
| Побитово "или"
^ Побитово "изключващо или"
~ Отрицание

Ето пример за използване на побитови оператори:
#!/usr/bin/perl
#ex6.plx
use warnings;
#51 = 00110011
#81 = 01010101
print "51 AND 81 is ",51 & 81,"\n";
#Result is 17 = 00010001
print "51 OR 81 is ",51 | 81,"\n";
#Result is 119 = 01110111
print "51 XOR 81 is ",51 ^ 81,"\n";
#Result is 105 = 01101001



Операторите за среавнение на числа са същите както и в Java Script. Това е таблицата с операторите за сравнение. Perl обаче добавя и един нов оператор, който не е точно оператор за сравнение, тъй като не връща стойност истина или лъжа. Той връща 0 ако двата аргумента са равни, 1 ако аргумента вляво е по - голям и -1 - ако аргумента отдясно е по - голям. Това е оператора <=>.
Логическите оператори на Perl отново същите както и на Java Scipt, които можете да намерите в тази таблица. Perl позволява и използването на and вместо оператора && , or вместо || и not вместо !.Специфичното на Perl е, че използва специална техника на тяхното изчисление наречена отложено изчисление. Тя се харектеризира в това, че щом perl (под Perl с малки букви ще имам впредвид интерпретатора на Perl ) научи отговора на въпроса, той спира по нататъшното изчисление на логическия израз. Например ако искаме да разберем дали x и y са едновременно истина и perl разбере, че х е лъжа, то той не изчислява y. Затова можем да напишем :

3>=10 and print "Three is more than ten";

и това ще работи. Това точно заради отложеното изчисление. В нашия случай 3 е по-голямо от 10 и условието е истина, затова perl проверява и второто условие, което ще доведе до отпечатване на текста. Обратно, ако вместо 3 сложим 11, то при проверката на първото условие perl ще разбере, че е лъжа и оттам, няма как цялото условие да истина. Затова perl ще спре и няма да провери второто условие и низа няма да бъде изпечатан.
Операторите за низове които ще разгледаме са само два. Първия е оператора за конкатенация, т.е. съединяването на няколко низа в един. Този оператор са записва като точка " .". Така, че вместо :


print "Three", "element", "string";


можете да напишете :


print "Three"."element"."string";


В този случай смисъла не е особенно голям (да не говорим, че втория метод е по - бавен), но понякога наистина ще ви се налага на съединявате низове. Втория оператор е оператора за повторение. Изпълнете следния пример :
#!/usr/bin/perl
#ex7.plx
use warnings;
print "Think ",x2,"/n";

>perl ex7.plx
Think Think


Сега ще научим повече за сравнението на низове. Трябва да знаете, че в някои случаи perl ще успее да сравни два низи и с операторите за сравнение на числа ==. Например сравнението "20" == "45", ще проработи, тъй като perl ще конвертира низовете в числа, но "apple" == "peach" ще даде предопредително съобщение. Това е така, защото в този случай perl сравнява низовете по азбучен ред. В действителност това е повече от азбучен ред - perl сравнява низовете по ASCII код. Например "Fish" се намира преди "facon", защото ASCII кода на "F" е 70, а на "f" - 102. Тук е времето да спомена за функцията ord(). Тя връща като резултат ASCII кода на символа, подаден й като аргумент. Да сравняваме низове с ord(), обаче не е особенно удачно за низ с повече от един символ. Затова Perl ни предоставя вградени оператори за това. Ето таблица с тях:



Оператор за сравнение на низове Еквивалентен оператор за сравнение на числа
lt <
gt >
eq ==
ne <>
ge >=
le <=
cmp <=>





С помоща на тези оператори можете да сравнявате низове с лекотата, с която сравнявате и числа. Съвета ми е използвайте операторите за сравнение на низове винаги когато работите с низове. В протичен случай , вашите резултати може да не са такива, каквито сте очаквали. Perl притежава още няколко много важни оператора, за някои от които ще научите по - късно, а тук само ще бъдат изборени :

Съкратения условен оператор x?y:z.
Операторите за диапазон ... и ...Задава диапазон от числа.
Операторът, който действа като запетая, но с малко по различни свойства =>. Използва се при хешовете.
Операторите !~ и =~ , които се използват за прилагане на регулярен израз върху низ.
Малко по - различно действие на наклонената черта \ .
Операторите >> и << , които известват битовете на едно двоично число вдясно или вляво.
Операторът -> , който се използва при референциите и обектното програмиране с Perl.
Последното за тази глава е пълния ред с приоритетите на операциите :

Оператори работещи със списъци.Пример за такъв оператор е са скобите.
Оператора ->
Повдигане на степен **
Операторите !, ~, \
=~, !~
*, /,%,x
+, -, .
<<, >>
<,>,<=,>=,lt,gt,le,ge
==, !=, <=>, eq, ne, cmp
&
|, ^
&&
||
.., ...
?:
, =>
not
and
or, xor
Не забравайте, че винаги когато искате да промените този ред може да използвате скоби. В следващата глава ще научите повече за променливите и работата със стандартия вход (клавиатурата) и стандартния изход (монитора).




източник:www.mgu.bg



/ Трябва да сте регистриран за да напишете коментар /