Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

   Рубрики
 
 
 
 

 Форуми
» SEO и оптимизация
» Всичко за PHP и Perl
» Всичко за C, C++ и .NET
» Всичко за Java и JSP
» Всичко за SQL и MySQL
» Всичко за XHTML и CSS
» Презентация на сайтове
 Логически оператори
  1. Логически оператори
  2. Логически оператори-2
     
Автор  eminem (05.02.2005 13:53)  съобщение до автора
Погледнат  2476 пъти  добави към любими
Оценка  добави коментар
Гласове  --  изпрати на приятел
Коментари  (0)  абонирай се за Perl
    Страница 1 / 2

 



Логически оператори са OR, NOT, AND и др.. Те всичките оценяват изрази. Оценените изрази връщат true (истина - 1) или false (лъжа - 0), в зависимост какъв критерии се използва за оценка от операторите.
or
or оператора работи както следва:
CODE
1
open STUFF, $stuff or die "Cannot open $stuff for read :$!";
Този код означава - ако операцията по отварянето на файла STUFF пропадне, тогава се спира прграмата. Друг пример:
CODE
1
2
$_=shift;
[i]^R[/i] or print "Doesn't start with Rn";
Ако регулярния израз върне лъжа (не е намерил ред започващ с R), тогава се изпълнява каквото е от лявата страна на or . Както знаете, shift изпълнвява действие върху @ARGV, ако не е зададена стойност, или върху @_ във подпрограма. Perl има два OR оператора. Единия ни е известния or, а другия е ||.
Приоритет: Кое се изпълнява първо
За да разберете разликата между двата оператора, трябва да поговорим за приоритета при изпълнението. Добър пример е следния:
CODE
1
perl -e"print 2+8
което както знаем ще изпечата 10. Но ако ние направим така:
CODE
1
perl -e"print 2+8/2
Сега, това 2+8 == 10, разделено на 2 ли е или може би 8/2 == 4, плюс 2 == 6?

Приоритет е кое ще се изпълни първо. В примера горе може да видите, че делението се извършва преди събирането. Следователно, делението има предимство пред събирането.

Може да използвате скоби за да е по-чисто и чсно, коя след коя команда да се изпълнява:
CODE
1
perl -e"print ((2+8)/2)
И така основната разлика между or и || е приоритета на изпълнение. В примера по-долу, ние се опитваме да присвоим на две променливи стойностите на два несъществуващи елемента на масив. Това ще пропадне:
@list=qw(a b c);

CODE
1
2
3
4
5
6
7
8
$name1 = $list[4] or "1-Unknown";

$name2 = $list[4] || "2-Unknown";

print "Name1 is $name1, Name2 is $name2n";

print "Name1 existsn" if defined $name1;
print "Name2 existsn" if defined $name2;
Изходът е интересен. Променливата $name2 е създадена с фалшива стойност. Обаче, $name1 не съществува. Причината е в приоритетите на операциите. or оператор има по малък приоритет от || .

Това означава, че or поглежда на входа от лявата страна. В този случай, това е $name1 = $list[4] . Ако той е истина, всичко е наред. Ако е лъжа, дясната страна се пресмята, и лявата страна се игнорира, все едно никога не е съществувала. В примера горе, когато лявата страна се открива че е лъжа, дясната се пресмята, която е "1-Unknown" която може да е истина, но води до някакво действие (изход).

В случая на || , който има по-висок приоритет, израза от лявата страна веднага се пресмята. В случая е $list[4]. Той е лъжа, така че веднага се пресмята кода от дясната страна на оператора. Но кода от лявата страна които не е изчислен, $name2 = не е забравен. Следователно израза се изчислява не $name2 = "2-Unknown".

Примера по-долу ще Ви помогне да си доизясните нещата:
CODE
1
2
3
4
5
6
7
8
9
@list=qw(a b c);

$ele1 = $list[4] or print "1 Failedn";
$ele2 = $list[4] || print "2 Failedn";

print <<PRT;
ele1 :$ele1:

ele2 :$ele2:

PRT
Друг пример:

CODE
1
2
3
4
5
6
7
8
9
10
@list=qw(a b c);

$name1 = $list[4] or "1-Unknown";

($name2 = $list[4]) || "2-Unknown";

print "Name1 is $name1, Name2 is $name2n";

print "Name1 existsn" if defined $name1;
print "Name2 existsn" if defined $name2;
Сега, ($name2 = $list[4]) е самостоятелен израз който се изчислява, а не само $list[4], така че ние получаваме същия резултат, ако бяхме използвали or .

Трети пример:
CODE
1
2
3
4
5
6
7
8
9
# $а е равно на $b, ако $b е истина, иначе $c
$a = $b || $c;

# $x е равно на $y, ако $х не е истина
$x ||= $y

# $а е равно на $b, ако $b е дефинирана, иначе $c
$a = defined($b) ? $b : $c;
And
Логическия оператор AND оценява два израза, и връща true само ако и двата са истина. Контраста е с OR, който връща истина само ако един или повече от два израза са истина. Perl има няколко AND оператора.

Първия вид AND е && :
CODE
1
2
3
4
5
6
7
8
9
10
11
@list=qw(a b c);

print "List is:@listn";

if ($list[0] eq 'x' && $list[2]++ eq 'd') {
print "Truen";
} else {
print "Falsen";
}

print "List is:@listn";
Изхода тук е лъжа. Ясно е, че $list[0] не съдържа x . AND оператора може да върне истина само ако и двата израза са истина, и така след като първия е лъжа perl решава, че няма смисъл да пресмята втория.



  Следваща страница >> 


Ключови думи: perl програмиране логически оператор


Още уроци от тази рубрика


 
  • Подобни теми от myLinks
 

 1 посетител чете този урок (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

 

 
  • Интересно от Софтуер
 



IT-PLACE.NET © 2004 - 2008