facebook LinkedIn
Google Book Search
Прегледи

Увод в програмирането на Perl Скалари и основни оператори

от Курс за ССОК

Увод в програмирането на Perl
Лекция #2 Скалари и основни оператори

Съдържание

Пример 1 - „Hello, world!“ на Perl

#!/usr/bin/perl
#hello_world.pl
#Prints a Hello World statement

print „Hello, world\n“;
  • # дава началото на коментар; всичко след него до края на реда е коментар
  • добре е програмите да са добре документирани, но не повече от необходимото
  • #! се нарича shebang конструкция; след нея се дава пътеката до Perl интерпретатора на съответната система (задължително се слага в началото на всяка програма)
  • print е стандартна вградена функция; по подразбиране работи със стандартното устройство за изход;
  • \ сигнализира началото на escape последователност (индикира че след него има някакъв специален символ). Някои от основните escape последователности са:
    • \n - нов ред.
    • \t - хоризонтална табулация.
    • \r --> премества курсора в началото на текущия ред(carriage return)
    • \$ --> escape последователност за $
    • \\ --> escape последователност за \.
    • \“ --> двойни кавички
    • \' --> двойни кавички
  • Всички програми на Perl трябва да се поставят във файл с разширение .pl
  • Когато се стартира програмата със командата perl тя преминава през два ключови етапа:
    • Компилация до операционен код(op codes)
    • Ако компилацията завърши успешно, операционният код се интерпретира по време на етапа на изпълнение от интерпретатора на Perl. Той интерпретира програмата, изпълнявайки по един операционен код в един момент.
  • -c flag (компилира и тества за синтактични грешки).

Пример 2 - Отпечатване

Следващия пример илюстрира разнообразието на Perl синтаксиса за реализиране на отпечатване:

#!/usr/bin/perl
#hello_print.pl
#Prints a few lines

print(„1. From the East to the West TU is the best\n“);
print „2. From the East to the West TU is the best\n“;
print „3. From the East to“, „ the West TU is „, „ the best\n“;
print „4. From the East to the West“;
print „ TU is the best\n“;
print „5. From the East to the West TU is the best\n“;
print „6. From the\n East to the West\n TU is\n the best\n“;


  • Първият print показва, че функцията може да бъде използвана както без скоби, така и със скоби
  • Втория print показва, че интервалите между името на функцията и аргументите й се пренебрегват
  • Третия print показва, че функцията може да приема както един така и повече от един аргумент. Ако има повече от един аргумент, те впоследствие се сливат
  • Всяка последователност от оператори, терминирана с ; се нарича твърдение (statement).

Пример 3 - Събиране

#!/usr/bin/perl
#simple_addition.pl
#Accepts 2 nums from user and sums them

print „Enter the first number: “;
$first = <STDIN>;
chomp($first);

print „Enter the second number: “;
$second = <STDIN>;
chomp($second);

$sum = $first + $second;
print(„The sum is: $sum\n“);
  • Всяка променлива има име, тип, и стойност
  • $first и $second са скаларни променливи. Скаларната променлива реферира местоположение в паметта на компютъра, където може да се запазва стойност за употреба на по късен етап
  • Типовия идентификатор $ определя, че променливата е скалар.
  • Операторът = е оператор за присвояване, записва в $first и $second стойностите, зададени от потребителя
  • STDIN е съкращение за standard input(стандартен вход)
  • Изпълнението на програмата спира докато докато се изчаква въвеждане
  • Потребителя въвежда желаната стойност и натиска Enter. Тогава стойността на $first ще е въведеното число плюс escape последователността за нов ред (например „45\n“)
  • Именно защото искаме да елиминираме този нов ред накрая, ползваме функцията chomp, която премахва новия ред накрая, ако има такъв
  • Perl прави разлика между малки и големи букви(case-sensitive)

Скаларни стойности и скаларни променливи

  • Скаларните стойности в Perl са най-простите съставни части на данните в Perl. Скаларна променлива е променлива, която има за стойност скаларна стойност
  • Скаларните стойности в Perl са числа, низове и препратки. Числена скаларна стойност може да бъде целочислена стойност, число с плаваща запетая. Низовете биват два вида също – ограничени с единични кавички и ограничени с двойни кавички. Разликата между двата вида е че в първия случай Perl не прави разширяване на променливи и escape последователности в низа(с изключение на /' и //) , а във втория – прави.


Аритметични оператори

  • Аритметичните оператори са бинарни оператори:
    • Събиране --> +
    • Изваждане --> -
    • Умножение --> *
    • Деление --> /
    • Деление по модул --> %
    • Повдигане на степен --> **
  • Операндите на % оператор трябва да са цели числа (ако не са, се отрязва дробната част. Например 11.2 % 4 дава 3)
  • При деление, независимо от аргументите резултата е винаги число с плаваща запетая.
  • Всички оператори са със лява асоциативност, освен повдигането на степен, което е с дясна асоциативност
  • Скоби могат да бъдат използвани за промяна на асоциативността на операторите.
  • Скобирането е със най-висок приоритет а след него повдигането на степен, след това умножението, делението, делението по модул(последните три са със равен приоритет), събиране, изваждане(също с равен приоритет).

Пример 4 - Аритметични оператори

#!/usr/bin/perl
#priority.pl
#Shows priority of arithmetic operations

$q = 5; $w = 2; $c = 4;
$d = 3; $e = 11; $f = 7;

$count = $q * $w % $c + $d / $f - $e;
print $count, „\n“;

Оператори за присвояване

  • Основния оператор за присвояване е =
  • Освен него, има редица други оператори за присвояване, комбиниращи присвояването с аритметична операция:
    • -=
    • +=
    • /=
    • *=
    • **=
    •  %=
  • Пример: $x += 5 е еквивалентно на $x = $x + 5;
  • $x = $y = 0; е еквивалентно на $x = ($y = 0);

Оператори за увеличаване и намаляване (increment/decrement)

  • Perl предоставя унарните оператори за увеличаване и намаляване на стойност ++ и --
  • Те имат две форми – префиксна и постфиксна. Когато се използват като част от израз в префиксния вид те участват с новата си стойност сед изпълнение на операцията по увеличаване/намаляване, а във постфиксния участват с първоначалната си стойност и чак след пресмятането на израза се извършва операцията по увеличаване/намаляване
  • Ползването на инкремент/декремент върху израз е синтактична грешка: ++($x + 1)

Пример 5 - Оператори за увеличаване и намаляване

#!/usr/bin/perl
#prefix_postfix.pl
#Shows usage of postfix/prefix operators

$var1 = 8;
$var2 = 8;

print $var1, „ “;
print $var1++, „ “;
print $var1, „\n“;

print $var2, „ “;
print ++$var2, „ “;
print $var2, „\n“;

Оператори за сравнение на числа

  • >
  • <
  • >=
  • <=
  • == тества за равенство
  •  != тества за неравенство
  • изключително важни за flow of control на програмата

Оператори за работа с низове

  • lt (less than)
  • gt (greater than)
  • le (less than or equal)
  • ge (greater than or equal)
  • eq (equal)
  • ne (not equal)
  • изключително важни за flow of control
  • сравняват стринговете лексикално, използвайки ASCII код (American Standard Code for Information Interchange)
  • оператор за конкатенация --> „.“ (точка)
  • оператор за мултиплициране на стринг --> „x“
  • инкремента работи и върху стрингове; пример: $var = „a“; $var++;
  • какво ще се случи ако $var = „aa“; $var++; ?

Пример 6 - Оператори за работа с низове

#!/usr/bin/perl
#strings_basic.pl
#Shows usage of postfix/prefix operators

$name = „Brandi“;
$welcome = „Welcome, „ . $name . „!“;

print $welcome, „\n“;

$dream = „sleep“ x 3;
print $dream, „\n“;

Числов и низов контекст

  • В повечето популярни езици променливите трябва да се декларират и да съдържат определен тип данни. Примерно int counter;. Те са силно типизирани езици. За разлика от тях скаларите в Perl могат да реферират както низ, така и число, т.е. Няма нужда от предекларация. Стойността на променливата се конвертира до число или низ автоматично, в зависимост от контекста в който е използвана. Добре е да се следи в какъв контекст се използва съответната променлива.
  • Няма нужда да ползваме chomp в числов контекст (защо?)
  • Неинициализирани или недефинирани променливи имат стойност undef, която има различна стойност в зависимост от контекста (0 или „“)
  • Стойността undef предизвиква warning, когато използваме -w flag на Perl.

Пример 7 - Числов и низов контекст

#!/usr/bin/perl
#context.pl
#illustrates undef, numeric and string context

$str = „Highest 10“;
$num = 10.0;

$sum = $num + $string; #what is sum?
print „Sum is: $sum\n“;

$concat = $num . $str; #what is concat?
print „Concat is: $concat\n“;

$sum2 = $concat + $sum; #what is sum2?
print „Sum2 is: $sum2\n“;

$undefSum = 10 + $someUndef;
print „10 + undef = $undefSum\n“;

print „The undef is $someUndef(end)\n\n“;

Сайтове и полезна информация

Задачи

Задача 1 Да се напише програма, която позволява на потребителя да въведе две числа и да се изчисли разликата, сбора и делимото им (да има проверка за делене на 0).

Задача 2 Да се напише програма, която приема едно число с 5 цифри (да се провери че е такова) от потребителя и да се изведе петата цифра 5 пъти, четвъртата 4 пъти, третата 3 пъти, втората 2 пъти, и първата веднъж.

Задача 3 Да се напише програма, която позволява на потребителя да въведе две числа, и да се провери (и изведе) ако някое е кратно на другото.

Задача 4 Да се напише програма, която приема от потребителя едно число (по голямо от 0) и един символ ( например *, @, или #) и извежда квадрат, изграден от въведения символ, който е празен отвътре.

Например за число 1 и за символ * трябва да се изведе:

*

За 2 и за символ * трябва да се изведе:

**
**

За 5 и за символ @ трябва да се изведе:

@@@@@
@   @
@   @
@   @
@@@@@

Забележка Може да ползвате само операторите и функциите, които са разгледани досега, т.е. употребата на конструкции за повторение, if/elsif/else, както и && и || отпадат.

Решения

  1. Задача 1 - http://code.google.com/p/alexx/source/browse/perl/perl-tu-zadachi/l2_z1.pl
  2. Задача 2 - http://code.google.com/p/alexx/source/browse/perl/perl-tu-zadachi/l2_z2.pl
  3. Задача 3 - http://code.google.com/p/alexx/source/browse/perl/perl-tu-zadachi/l2_z3.pl
  4. Задача 4 - http://code.google.com/p/alexx/source/browse/perl/perl-tu-zadachi/l2_z4.pl
Локални линукс групи RSS
Дискусии