dzgn&concpt::jr*
 



Набор примери за @масиви
  


Пример 0

 

Демонстрира стандартните начини за дефиниране и модифициране на масив.
 

source code ( example.0.pl ) output

#!/usr/bin/perl

# Празен списък
@array = ();
print @array, "\n";

@array = ('one', "two", 'three', 4);
# В списъчен контекст print извежда един след друг елементите
# на масива

print @array, "\n";

$array[0] = 'zero';
print @array, "\n";

@array = qw {one two three four};

print @array, "\n";

onetwothree4
zerotwothree4
onetwothreefour

 

 

Пример 1

 

Ефект при използването на функция reverse и масив.
 

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

# reversе обръща реда на елементите
@array = qw { gore dolu };
print @array, "\n";

@array = reverse @array;
print @array
, "\n";

goredolu
dolugore

 

Пример 2

 

Въведение във функцията join. Функцията създава скалар, който представлява налепени един за друг елементите на даден списък. Като първи параметър получава скаларен стринг, определящ разделителя, който следва да се използва при слепване на елементите от списъка, подаван като втори аргумент.

 

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


@single = ( 1, 2, 3, 4 );
print join (" :: ", @single);

1 :: 2 :: 3 :: 4

 

Пример 3

 

Детайлни примери с join и map. Представяне на функцията map - като първи параметър получава поредица от операции, затворени от фигурни скоби в своеобразен програмен блок. map последователни итерира върху елементите на списък, подаван като втори аргумент, като всеки елемент на списъка се подава на програмния блок през променливата $_. Резултатът от изпълнението на map е нов списък, елементите на който приемат стойността генерирана от последната операция в програмния блок. map е най-общо казано функция, която предоставя механизъм за трансформиране на едно множество в друго без загуба на елементи и със запазване на индексите.
 

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

@single = ( 1, 2, 3, 4 );
print join (" :: ", @single);

@triple = map { 3 * $_ } @single;
print "\n".join (" :: ", @triple);

@triple = map { 3 x $_ } @single;
print "\n".join (" :: ", map { " > $_ < " } @triple );

print "\n".join (" :: ", map {
                             $a = 10;
                             $a *= 20;
                             print " > inside [ $_ ] < ";
                             $a / $_
                            } @triple );

1 :: 2 :: 3 :: 4
3 :: 6 :: 9 :: 12
> 3 < :: > 33 < :: > 333 < :: > 3333 < > inside [ 3 ] < > inside [ 33 ] < > inside [ 333 ] < > inside [ 3333 ] <
66.6666666666667 :: 6.06060606060606 :: 0.6006006#!/usr/bin/perl


@lines = `dir c:`;
print join (' line: ', @lines );601 :: 0.06000600060006

 


Пример 4

 

Прост пример, който демонстрира комбинация от обратен апостроф " ` " и join. По традиция от shell програмирането, в perl стринга затворен в обратни апострофи се приема за shell команда и бива изпълняван като такава. Резултатът се връща в списък, всеки ред от който отговаря на ред от изхода от изпълнения стринг-команда.
 

source code ( example.4.pl ) output

#!/usr/bin/perl


@lines = `dir`;
print join (' line: ', @lines );

example.0.pl example.11.pl example.14.pl example.4.pl example.7.pl
line: example.1.pl example.12.pl example.2.pl example.5.pl example.8.pl

 


Пример 5

 

Примерът има за цел да филтрира само уникалните елементи от даден списък. За целта се използва функцията grep в комбинация с помощен асоциативен масив. grep е мощна вградена функция имаща поведение подобно на инструментът греп от unix shell средата. Като първи елемент grep получава програмен блок или логически израз, който в крайна сметка се очаква да върне истина (true) или лъжа (false). Итерирайки по елементите на списък, който се получава като втори аргумент, grep предава на програмния блок през променливата $_ стойността на всеки елемент. Крайната стойност (true или false), която се получава при изпълнение на блока, определя дали grep да филтрира или да остави съответния елемент. Когато стойността е true, елементът присъства в крайния списък генериран от работата на grep, в противен случай - не.
 

 

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


%saw = ();
@in = ( 1, 1, 2, 3, 4, 6, 6, 7, 8, 9 );
@out = grep(!$saw{$_}++, @in);

print join (' ', @out );
print "\n".join ("\n", map { $_." => ".$saw{$_} } @out );

1 2 3 4 6 7 8 9
1 => 2
2 => 1
3 => 1
4 => 1
6 => 2
7 => 1
8 => 1
9 => 1

 



Пример 6

 

Следния пример демонстрира използването на функциите shift, pop и push, които са основни при операции добавяне/изтриване на елементи от даден списък. shift екстрактва първия елемнт от списък предаден като аргумент. pop и push съответно създават механизъм за манипулиране на списъците като стекове - добавят и изваждат елементи от края на списъка.

В примера се демонстрира и получаване на индекса на последния елемент на даден списък (посредством $# в комбинация с името на списъка), получаване броя на елементите в списъка с помоща на scalar() и индексиране на списък отзад напред ( с помоща на отрицателни индекси ).
 

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


@nums = (0,1,2,3,4,5,6,7,8,9,10);

print "\n".shift(@nums);
print "\n".pop(@nums);

push (@nums, 20);

print "\n".$nums[$#nums];
print "\n".$nums[-1];
print "\n".$nums[scalar ( @nums ) ];
print "\n".$nums[scalar ( @nums ) -1 ];


0
10
20
20

20

 


Пример 7

 

Примерът представя операторите за цикъл for и foreach и различните конкструкции, в които те са валидни. Обръща се внимание и на операторите next и last за излизане от цикъл и форсиране на преход към следващия елемент (съответно еквивалентни на continue и break от C/C++).
 

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

for ( $i =0; $i < 10; $i++ )
{
    print $i." ";
}

print "\n";

@nums = (0,1,2,3,4,5,6,7,8,9,10);

for $i ( @nums )
{
    print $i." ";
}

print "\n";

foreach $i ( 0..10 )
{
    print $i." ";
}

print "\n";

foreach ( 0..10 )
{
    next if $_ < 2;

    print ;
    print " ";

    last if $_ > 5;
}

print "\n";
print "$_ " foreach ( 0..10 );

print "\n";
print "$_ " for ( @nums );

0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9 10
0 1 2 3 4 5 6 7 8 9 10
2 3 4 5 6
0 1 2 3 4 5 6 7 8 9 10
0 1 2 3 4 5 6 7 8 9 10

 


Пример 8

 

Примерът илюстрира използването на т.нар. списъчни отрязъци (array slices). С тяхна помощ лесно могат да бъдат избрани само определени елементи от даден списък като за целта вместо единичен индекс, в квадратните скоби след името на списъка се подава друг списък (или казано с други думи - задава се индексиращо множество). С помоща на индексиращото множество се определят именно онези елементи, до които се осъществява достъп.

Примерът демонстрира и използването на операторът "..", който в зависимост от левия и десния си аргумент генерира списък със последователни стойности. Ако вместо числа на ".." бъдат подадени стрингове се генерира списък с елементи съдържащи се между двата аргумента според възходяща лексикографска наредба.

 

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


@a = (1..30);
@b = (2..5);
print join ( "\n", @a[0..5, 7..9] );

print "\n";
print join ( "\n", @a[@b] );

1
2
3
4
5
6
8
9
10
3
4
5
6

 


Пример 9

 

Примерът представя операторите за цикъл while и do while и валидните конструкции, в които се използват.

 

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

@nums = qw { 23 32 4 346 45 73 2 412 } ;

do
{
    print $nums[$counter++];
    print "\t";
} while ( $nums[$counter] );

print "\n ";

while ( $#nums )
{
    print $#nums." : ".pop(@nums)."\n";

}

23    32    4    346    45    73    2    412
7 : 412
6 : 2
5 : 73
4 : 45
3 : 346
2 : 4
1 : 32


Пример 10

 

Примерът демонстрира оператора splice, който заменя определени елементи от масив от дадена позиция с дадено отместване, с елементите от друг масив. Резултатът от оператора са премахнатите елементи. В случай, че списъка съдържащ новите елементи е празен, то splice има ефекта на "отрязване" на посочените елементи от масива.

 

source code ( example.9.pl ) output

#!/usr/bin/perl

# Приближеното звучене на числата от 1 до 5 на
# корейски език

@nums = qw { hana tul set net tasot } ;
print join (' ', @nums) . "\n";

@in_english = qw { one two three };

# Заменя първите 3 числа с английския им
# еквивалент

@removed = splice (@nums,0,3,@in_english);

print join (' ', @nums) . "\n";
print join (' ', @removed) . "\n";

hana tul set net tasot
one two three net tasot
hana tul set

 

 


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

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