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

   Рубрики
 
 
 
 

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

 



Сега трябва да внимавате във следващите обяснения, защото после ще се връщате тук отново. Символът = е оператор за присвояване на стойност, не е оператор за сравнение. Следователно:
if ($x = 10) е винаги истина, защото на $x успешно се присвоява стойността 10.
if ($x == 10) сравнява две стойности, които може да не са равни.
И така ние сравнявахме до сега числа, но ние можем и сигурно ще се налага да сравняваме променливи.

CODE
1
2
3
4
5
6
7
$name = 'Mark';
$goodguy = 'Tony';
if ($name == $goodguy) {
print "Hello, Sir.n";
} else {
print "Begone, evil peon!n";
}

Нещо грешно има в кода. Нещо изглежда не е както трябва. Очевидно Mark е различно от Tony, тогава защо perl ги намира за равни? Те са равни -- числено. Ние трябва да ги тестваме като стрингове, а не като числа. За да направим това, просто заместете == със eq и евевнтуално горния код ще работи както трябва. Има два типа оператори за сравнение - за числа и за стрингове. Видяхте вече два такива, == и eq. Пробвайте този код:

CODE
1
2
3
4
5
6
7
8
$foo=291;
$bar=30;
if ($foo < $bar) {
print "$foo is less than $bar (numeric)n";
}
if ($foo lt $bar) {
print "$foo is less than $bar (string)n";
}

Операторът lt сравнява в контекста на стринг, и разбира се < сравнява в контекста на числа.
Азбучно, това е в контекста на стринг, 291 е след 30. Това е по кодовата таблица ASCII. Мотото на Perl е "Има повече от един начин да се направи" или TIMTOWTDI. Произнася се 'Tim-Toady'. Това ръководство не се опитва да Ви покаже всички начини за решаването на даден проблем. При писане на вашите програми ще ги откривате.
В следващата таблица са показани операторите за сравнение в Perl:
    Числен контекст    В контекста на стринг
Равно    ==    eq
Не равно    !=    ne
По-голямо от    >    gt
По малко от    <    lt
По-голямо или равно    >=    ge
По-малко или равно    <=    le
Повече за if
Пробвайте този код:
$age=25;
$max=30;

CODE
1
2
3
4
5
if ($age > $max) {
print "Too old !n";
} else {
print "Young person !n";
}

Лесно е да видите какво прави той. Ако израза е грешен, тогава все едно какво има в else - блока се изпълнява. Просто е. Но ако искате още един тест? Perl може и това.

CODE
1
2
3
4
5
6
7
8
9
10
11
12
elsif
$age=25;
$max=30;
$min=18;

if ($age > $max) {
print "Too old !n";
} elsif ($age < $min) {
print "Too young !n";
} else {
print "Just right !n";
}

Ако първия тест пропадне, вторият се преценява. Това се извършва докато има elsif, или else е достигната. Има голяма разлика между горния код и следващия по-долу:

CODE
1
2
3
4
5
6
7
if ($age > $max) {
print "Too old !n";
}

if ($age < $min) {
print "Too young !n";
}

Ако го стартирате ще Ви върне същия резултат - в този случай. Както и да е, но това е Лоша Практика в Програмирането. В този случай ние тестваме число, но представете си че тестваме стринг за да видим дали съдържат R или S. Възможно е стринга да съдържа и двете R и S. Така ще се преминат и двата 'if' теста. С използването на elsif ще избегнете този недостатък. При първото срещане на истина в elsif изявление то се изпълнява, като следващите не се изпълняват.



   


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


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


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

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

Еmail  
 

 

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



IT-PLACE.NET © 2004 - 2008