dzgn&concpt::jr*
 



Набор примери за ! контролни операции
  


Пример 0

 

Примерът демонстрира различни стойности на променливи, които се интерполират до стойности true или false. Важно е да се познава метода, по който Perl оценява булеви изрази, а именно, като разглежда крайната стойност като стрин в скаларен контекст.
 

source code ( example.0.pl ) output

#!/usr/bin/perl

# Двете оснвни false променливи
$false_string = "";
$another_false_string = "0";
# Други false променливи, които се оценяват като такива
# при "свеждане" до горните в стрингов контекст

$false_num = 0;
$another_false_num = 0.0000000000;
@false_array = ();
%false_hash = ();
$undef_false = undef;

# false в стрингов контекст е празния стринг
print "Empty string :" . defined ($undef_false) . ": is false\n";

# някои променливи, които се оценяват до true
$a_string = "adasd_";
$a_nonzero_string = "0.0";
print "TRUE!\n" if $a_nonzero_string;

@nonempty_array = (0);
%nonempty_hash = qw {1 one, 2 two};

Empty string :: is false
TRUE!

 

 

Пример 1

 

Примерът показва използването на if конструкция в различните и форми.
 

source code ( example.1.pl ) output
#!/usr/bin/perl

$true_var = "Perl Rulez!";
$false_var = undef;

# Стандартна if конструкция в префиксен запис
if ($true_var) {
    print "Perl RULEY!!!!!!\n";
};

# Стандартна if-else конструкция
if ($false_var) {
    print "BLAAAA!\n";
} else {
    print "Perl RULEY!!!!!!\n";
}

# if-elsif-else конструкция
if (()) {
    print "BLAAAA!\n";
} elsif ("0") {
    print "BLAAAA!\n";
} elsif($false_var) {
    print "BLAAAA!\n";
} else {
    print "Perl RULEY!!!!!!\n";
}

# if в постфиксен запис
print "Perl RULEY!!!!!!\n" if "false";

Perl RULEY!!!!!!
Perl RULEY!!!!!!
Perl RULEY!!!!!!

 

Пример 2

 

Примерът представя алтернативния на if оператор - unless. Той може да се използва по аналогичне начин във всички форми, в който се използва и if. Единствената разлика е, че първия блок се изпълнява в случай, че условието, което проверяв unless е false, а не true.

 

source code ( example.2.pl ) output
#!/usr/bin/perl

$true_var = "0.0";
$false_var = 0;
$opaaa = "Paraskeva vliza w staqta";

# "Емигранти" :)

#
Стандартна if-else конструкция
if ($true_var) {
    print "It wasn't me :)\n";
};
# if в постфиксна форма
print "It wasn't me :)\n" if !$false_var;

# unless изсква условието да е false, за да се изпълни
unless (not $opaaa) {
    print "I na shish da te wyrtqt, otrichaj do dupka!\n";
}
#
unless в постфиксен вариант
print "I na shish da te wyrtqt, otrichaj do dupka!\n" unless not $opaaa;

# unless + else също е позволено от Perl :)
unless ($opaaa) {
    print "Istina e...\n";
} else {
    print "I na shish da te wyrtqt, otrichaj do dupka!\n";

}

#
Както и unless-else-elsif :))
unless ($opaaa) {
    print "Istina e...\n";
} elsif ("0") {
    
print "Istina e...\n";

} else {
    print "I na shish da te wyrtqt, otrichaj do dupka!\n";
}

It wasn't me :)
I na shish da te wyrtqt, otrichaj do dupka!
I na shish da te wyrtqt, otrichaj do dupka!
I na shish da te wyrtqt, otrichaj do dupka!
I na shish da te wyrtqt, otrichaj do dupka!

 

Пример 3

 

Показва съкратената форма на if-elsе, ползваща оператора ? :. При него се оценява първия израз и ако е true се изпълнява изразът след въпросителната, а ако е falsе - изразът след двете точки.
 

source code ( example.3.pl ) output

#!/usr/bin/perl

# Стандартен if-else
if ("true") {
    print "true!\n";
} else {
    print "false!\n";
}

# Съкратен вариант на If-else с оператора ? :
"true" ? print "true\n" : print "false\n";
"0" ? print "true\n" : print "false\n";

true!
true
false

 


Пример 4

 

Логическите оператори "и" и "или" могат да се изпозлват в булеви изрази и за управление хода на програмата, емулирайки if-else конструкция.
 

source code ( example.4.pl ) output

#!/usr/bin/perl

%true_var = qw { 1 aintzu 2 tzwaintzu 3 draitzu 4 DRUN };
@false_var = ();

# При логическо или се оценява втория израз, само
# ако първият е false

(@false_var) || print "OR: Izpylnqwa se operatora\n";
(%true_var) || print "OR: NE SE Izpylnqwa operatora\n";

# При логическо и се оценява втория израз, само
# ако първият е ture

(@false_var) && print "AND: NE SE izpylnqwa operatora\n";
(%true_var) && print "AND: Izpylnqwa se operatora\n";

# Стандартен начин за следене за грешки с булев
# израз

print "trueeee!" || die "Error happended: $!";
print "trueeee!" || warn "Something strange going on: $!";

OR: Izpylnqwa se operatora
AND: Izpylnqwa se operatora
trueeee!trueeee!

 


Пример 5

 

Примерът демонстрира различните оператори за сравнение на стрингове и числа, и факта, че при позлването на оператори за сравнение на числа върху стрингове и обратно, може да възникнат бъгове. Въпреки това Perl позволява да сравнявате стрингове като числа (както и числа като стрингове), като просто ги разглежда в нужния контекст. На операторитe ==, >, >=, <, <= съответстват eq, gt, ge, lt, le за стрингове.
 

 

source code ( example.5.pl ) output
#!/usr/bin/perl

$one = "1";
$two = "dwe";

# Числата и стринговете се сравянват с различни
# оператори

print "$one e po-golqmo '>' ot $two\n" if $one > $two;
print "$one e po-golqmo 'gt' ot $two" if $one gt $two;
print "$one e rawno na $two" if $one eq $two;

1 e po-golqmo '>' ot dwe

 


Пример 6

 

Показва различните форми, в които може да се изпозлват операторите за предизвикване на цикъл while, do и until.

 

source code ( example.6.pl ) output
#!/usr/bin/perl

$true_var = 2;
$false_var = 0;

# Първо се проверява условието и ако е вярно се
# "влиза" в блока на цикъла

while ($true_var) {
    print "$true_var ";
    $true_var--;
};
print "\n";

# Първо се проверява условието и ако е false се
# "влиза" в блока на цикъла

until ($false_var) {
    print "$false_var ";
    $false_var++;
};
print "\n";

$true_var = 2;
$false_var = 0;

# Условието се проверява едва след като се мине
# през тялото на цикъла

do {
    print "$true_var ";
    $true_var--;
} while ($true_var);
print "\n";

# Условието се проверява едва след като се мине
# през тялото на цикъла

do {
    print "$false_var ";
    $false_var++;
} until ($false_var);
print "\n";

2 1
0
2 1
0

 

Пример 7

Демонстрира, че операотрите за цикъл могат да се изпозват и в постфиксна форма, стига да се поставят след прости конструкции.

 

source code ( example.7.pl ) output
#!/usr/bin/perl
$a = 5;
print "$a " until !($a--);
print "\n";

$b = 5;
print "$b " while ($b--);
print "\n";

$c = 5;
print --$c." " for (0..4);
print "\n";

4 3 2 1 0
4 3 2 1 0
4 3 2 1 0


Пример 8

Примера показва действието на операторите за сравнение <=> и cmp и функцията за сортиране на масиви sort. Забележете, че използването на двата различни оператора в резултат сортира масивите по различен начин.

 

source code ( example.8.pl ) output
#!/usr/bin/perl

# Сортиране с подразбираща се функция за
# сравнение

@array1 = ( 1, 2, 3, "sto" );
print join (' ', sort @array1 );
print "\n";

# Сортиране чрез сравняване в контекст на числа
@sortedArray1 = sort { $a <=> $b } @array1;
print join (' ', @sortedArray1 );
print "\n";

# Сортиране чрез сравняване в контекст на
# низове

@array2 = ( "aa", "bb", "cc", "D" );
print join ( ' ', sort { $a cmp $b } @array2 );
print "\n";

# "Сортиране" на хеш
%age = ( "murry" => 22, "jorro" => 19 );
@eldest = sort { $age{$b} <=> $age{$a} } keys %age;

print join (' ', @age{@eldest} );

 

1 2 3 sto
sto 1 2 3
D aa bb cc
22 19

 

Всичко това горе попада под ударите на Creative Commons License.
Задвижвано от
Movable Type 2.65

Най-добре се вижда с Firefox в 1024х768 или повече.