dzgn&concpt::jr*
 

набор примери за скалари


  


Пример 0
 

Примерът демонстрира най-простата програма на Perl. Редът, с който започва source-а, указва на операционата система (Unix, Linux, BSD), къде се намира интерпретатора на Perl. Windows не поддържа този синтаксис, така че този ред ще бъде възприет като обикновен коментар. Вместо него можете да изплзвате стандартния метод на асоцииране на файловете според разширението им (подразбиращото за Perl е .pl).
 

source code ( example.0.pl )

output
#!/usr/bin/perl

print "Hello, chixen!";

Hello, chixen!



Пример 1
 

Примерът илюстрира различните начини, по които могат да се дефинират числови стойности. Скаларните променливи съдържат скаларни данни, а те от своя страна биват числа, стрингове и reference-и. В Perl няма строго типизиране и числата не се делят на такива с паваща запетая и цели (както например в C/C++, Java).
 

source code ( example.1.pl ) output

#!/usr/bin/perl

# Цяло число
$scalar_variable = 1234;  
print $scalar_variable, "\n";

# Реално число
$scalar_variable = 1234.56;
print $scalar_variable, "\n";

# 12 по 10 на минус 24-та степен
$scalar_variable = -12e-24;
print $scalar_variable, "\n";

# Осмично цяло число
$scalar_variable = 0377;
print $scalar_variable, "\n";

# Шестнайсетично цяло число
$scalar_variable = -0xff;

print $scalar_variable, "\n";

# Грешно! Резултата е 2553, тъй като
# шестнайсетичните (и осмичните числа)
# биват само цели и точката се възприема като
# операцията "конкатенация на стринг"

$scalar_variable = 0xff.3;
print $scalar_variable, "\n";

1234
1234.56
-1.2e-023
255
-255
2553



Пример 2

 

Примерът демонстрира факта, че де факто всички операци над числа се извършват над числа с плаваща запетая (по подразборане Perl се компилира, като представя числата double float), което може да доведе до проблеми с точността (както в много други езици). В Perl 5.8.0 е направено много за приближаване на проблема до минимум. В случай, че искате да работите с големи числа или ви трябва голяма точност на операциите с плаваща запетая позваите някои от модулите Math::BigInt, Math::BigFloat и т.н.
 

source code ( example.2.pl ) output

#!/usr/bin/perl

# Макар резултата да е 2.7, всъщност той е
# доближена до него стойност

printf("%.20f\n", 5.1 - 2.4);

# print обикновено се "усеща" и извежда точната
# стойност

print 5.1-2.4;

2.69999999999999970000
2.7



Пример 3

 

Perl поддържа вградените операции за аритметиа над числа, с които сте свикнали от много други езици. В добавка операторът "**" (две звездички) повдига на степен, а оператора "++" (два плюса) приложен над стрингова комбинация от букви числа я увеличава с 1 в лексикографски смисъл.
 

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

# 2 ** (3 ** 4), тоест 2 на степен 81
# Някои оператори са дясно асо
циативни

print 2 ** 3 ** 4 , "\n";

$a = 3;
$b = ($a += 4);
print "a = $a, b=$b \n";

# Autoincrement && autodecrement
print ++($foo = 5), "\n";
print ++($foo = 'Az'), "\n";
print ++($foo = 'zz'), "\n";

2.41785163922926e+024
a = 7, b=7
6
Ba
aaa

 


Пример 4

 

Примерът показва ефекта от използване на функциите oct, hex и ord, използвани съответно за преобразуване на осмични числа (също шестнайсетични и двойчни) в дестични, шестнайсетични в деситични и получаване номера на даден символ според активната кодова таблица на системата.
 

source code ( example.4.pl ) output

#!/usr/bin/perl

# hex преобразува шестнайсетични числа в
# десетични, даже да не започват с 0x

print hex "0xFF", "\n";
print hex 'a', "\n";

# oct преобразува шестнайсетични, осмични и
# двойчни числа в десетични, но трябва да са
# записани правилно иначе резултата е 0

print oct '0xFF', "\n";
print oct "077", "\n";
print
oct "0b1111", "\n";
print oct 'a', "\n";
print ord('а');

255
10
255
63
15
0
97

 


Пример 5

 

Примерът демонстрира стандартните нaчини за дефиниране на стрингове и факта, че стринговете обрградени с двойни кавички интерполират променливите и специалните ескейп символи (като \n).
 

source code ( example.5.pl ) output

#!/usr/bin/perl

# Променливите не се интерполират
$single_quoted = '$string';
print $single_quoted . "\n";

$single_quoted = q { $string };

print $single_quoted . "\n";

# Променливите се интерполират
$double_quoted = "${single_quoted}i oshte neshto";
print $double_quoted . "\n";
$double_quoted = "joro\60 $single_quoted\n";
print $double_quoted;
$double_quoted = "joro\x30\n";
print $double_quoted;
$double_quoted = qq {$single_quoted};
print $double_quoted;


$string
 $string
 $string i oshte neshto
joro0 $string
joro0
 $string

 


Пример 6
 

Примерът илюстрира използването на "here-to" подхода (т.н. here-to документи) при въвеждане на стрингове, съставени от няколко реда.
 

source code ( example.6.pl )

output
#!/usr/bin/perl

$a_string = 'chixen';
# Променливите се интерполират
print <<HERE

$a_string
larodi
larodi
larodi
and chixen for free

HERE

chixen
larodi
larodi
larodi
and chixen for free

 

 

Пример 7
 

Примерът илюстрира използването на мултиплициращият оператор ' x '. С негова помощ се получава скаларен стринг, който съдържа N на брой повторения на левия аргумент, като N съответства на десния.
 

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


$a = " marin ";
print "triple chick bonus: ".($a x 3);

triple chick bonus: marin marin marin

 

Пример 8

 

Работа с функцията substr - отцепва част от стринг. Като първи параметър получава стринга, като втори - стартова позиция и като трети - броя символи, които трябва да се извадят. Функцията не афектира съдържанието на стринга.
 

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


$myString = "larodi string";
print "\n".substr($myString, 0, 4);
print "\n".substr($myString, 4, 2);
print "\n".$myString;

laro
di
larodi string

 

 

Пример 9

 

Демонстрация на разликите между chomp и chop. Ограничителят "<", който се появява в края на реда в изхода от примера насочва вниманието именну върху ефекта от chop и chomp.
 

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


$a = " let's chom(p) these munchie muncheezz     \n";
print $a;
chomp $a; print "chomp 1: $a < \n";
chomp $a; print "chomp 2: $a < \n";
chop  $a; print "chop  1: $a < \n";
chop  $a; print "chop  2: $a < \n";

# Грешно! Функцията връща отрязания символ,
# което в случай ще изтрие $а

$a = chop $a; print "chop  3: $a < \n";

chomp 1: let's chom(p) these munchie muncheezz <
chomp 2: let's chom(p) these munchie muncheezz <
chop 1: let's chom(p) these munchie muncheezz <
chop 2: let's chom(p) these munchie muncheez <
chop 3: z <

 

 

Пример 10

 

Променлива по подразбиране $_. Примери за използването и като аргумент по подразбиране. Примери за използване на функции hex, int, uc и reverse (в скаларен контекст).

 

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

$_ = "10a";

print;
print "\n";
print "\n".hex();
print "\n".int." ".uc;
print "\n".reverse();

Warning: Use of "int" without parens is ambiguous at ./example.10.pl line 11.
10a

266
10 10A
a01

 

 

 


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

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