Perl: განსხვავება გადახედვებს შორის

მასალა ვიკიპედიიდან — თავისუფალი ენციკლოპედია
[შეუმოწმებელი ვერსია][შეუმოწმებელი ვერსია]
შიგთავსი ამოიშალა შიგთავსი დაემატა
ბოტის დამატება: my:Perl
No edit summary
ხაზი 10: ხაზი 10:
პერლ-ზე დაწერილი Hello world-ის კანონიკური პროგრამა ასე გამოიყურება:
პერლ-ზე დაწერილი Hello world-ის კანონიკური პროგრამა ასე გამოიყურება:


<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="perl">
<source lang="perl">
!/usr/bin/perl
!/usr/bin/perl
print "Hello, world!\n";
print "Hello, world!\n";
</source>
</source>
</div>


პირველი სტრიქონი ეუბნება იუნიქსის ოპერაციულ სისტემა თუ სად მიაგნოს პერლის ინტერპრეტატორს. მეორე სტრიქონი ბეჭდავს ეკრანზე Hello, world-ს და კურსორი ახალ ხაზზე გადააქვს.
პირველი სტრიქონი ეუბნება იუნიქსის ოპერაციულ სისტემა თუ სად მიაგნოს პერლის ინტერპრეტატორს. მეორე სტრიქონი ბეჭდავს ეკრანზე Hello, world-ს და კურსორი ახალ ხაზზე გადააქვს.
ხაზი 24: ხაზი 26:
თითოეულ ცვლადს წინ წამძღვარებული აქვს განსაზღვრული სიმბოლო, რომლის საშუალებითაც ინტერპრეტატორი არკვევს რომელი ტიპის მონაცემთა ტიპთან გვაქვს საქმე.
თითოეულ ცვლადს წინ წამძღვარებული აქვს განსაზღვრული სიმბოლო, რომლის საშუალებითაც ინტერპრეტატორი არკვევს რომელი ტიპის მონაცემთა ტიპთან გვაქვს საქმე.


<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="perl">
<source lang="perl">
$foo # სკალარი
$foo # სკალარი
ხაზი 29: ხაზი 32:
%foo # ჰეშ–ცხრილი
%foo # ჰეშ–ცხრილი
</source>
</source>
</div>


სკალარულ ცვლადებს რიცხვები ჩვეულებრივი გზით ენიჭებათ. სტრიქონი კი ბრჭყალებით უნდა იყოს შემოსაზღვრული.
სკალარულ ცვლადებს რიცხვები ჩვეულებრივი გზით ენიჭებათ. სტრიქონი კი ბრჭყალებით უნდა იყოს შემოსაზღვრული.


<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="perl">
<source lang="perl">
$n = 42;
$n = 42;
ხაზი 37: ხაზი 42:
$color = 'red';
$color = 'red';
</source>
</source>
</div>


სიის ტიპის ცვლადის ინიციალიზაცია ხდება შემდეგნაირად, ფრჩხილებში მოთავსებული, მძიმეებით გამოყოფილი ელემენტების საშუალებით:
სიის ტიპის ცვლადის ინიციალიზაცია ხდება შემდეგნაირად, ფრჩხილებში მოთავსებული, მძიმეებით გამოყოფილი ელემენტების საშუალებით:


<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="perl">
<source lang="perl">
@scores = (32, 45, 16, 5);
@scores = (32, 45, 16, 5);
</source>
</source>
</div>


ჰეშ-ცხრილის ინიციალიზაცია ხდება გასაღები-მნიშვნელობის წყვილის განსაზღვრით:
ჰეშ-ცხრილის ინიციალიზაცია ხდება გასაღები-მნიშვნელობის წყვილის განსაზღვრით:


<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="perl">
<source lang="perl">
%favorite = (joe => 'red',
%favorite = (joe => 'red',
sam => 'blue');
sam => 'blue');
</source>
</source>
</div>


სიის თითოეულ ელემენტს შეიძლება მივაგნოთ ინდექსის საშუალებით, ჰეშ-ცხრილისას კი გასაღების მითითებით. სიის ინდექსი უნდა იყოს მოთავსებული კუთხურ ფრჩხილებში, ჰეშ-ცხრილის გასაღები კი — ფიგურულში.
სიის თითოეულ ელემენტს შეიძლება მივაგნოთ ინდექსის საშუალებით, ჰეშ-ცხრილისას კი გასაღების მითითებით. სიის ინდექსი უნდა იყოს მოთავსებული კუთხურ ფრჩხილებში, ჰეშ-ცხრილის გასაღები კი — ფიგურულში.


<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="perl">
<source lang="perl">
$scores[2] # @scores მე–2 სიის ელემენტი
$scores[2] # @scores მე–2 სიის ელემენტი
$favorite{joe} # %favorite ჰეშ–ცხრილის ელემენტი
$favorite{joe} # %favorite ჰეშ–ცხრილის ელემენტი
</source>
</source>
</div>


რამდენიმე ელემენტს შეიძლება მივწვდეთ სიის იდენტიფიკატორის <tt>@</tt> საშუალებით:
რამდენიმე ელემენტს შეიძლება მივწვდეთ სიის იდენტიფიკატორის <tt>@</tt> საშუალებით:


<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="perl">
<source lang="perl">
@scores[2, 3, 1] # @scores სიის სამი ელემენტი
@scores[2, 3, 1] # @scores სიის სამი ელემენტი
@favorite{'joe', 'sam'} # %favorite ორი გასაღების მნიშვნელობა
@favorite{'joe', 'sam'} # %favorite ორი გასაღების მნიშვნელობა
</source>
</source>
</div>


სიის ელემენტთა რაოდენობა შეიძლება გავიგოთ, თუ ამ სიას სკალარულ ცვლადს მივანიჭებთ
სიის ელემენტთა რაოდენობა შეიძლება გავიგოთ, თუ ამ სიას სკალარულ ცვლადს მივანიჭებთ


<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="perl">
<source lang="perl">
$count = @friends;
$count = @friends;
</source>
</source>
</div>
ჰეშ-ცხრილიდან გასაღებების ან მნიშვნელობების მასივის ამოღება შეიძლება შემდეგნაირად:
ჰეშ-ცხრილიდან გასაღებების ან მნიშვნელობების მასივის ამოღება შეიძლება შემდეგნაირად:


<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="perl">
<source lang="perl">
@names = keys %address;
@names = keys %address;
@addresses = values %address;
@addresses = values %address;
</source>
</source>
</div>


=== მართვის სტრუქტურები ===
=== მართვის სტრუქტურები ===
ხაზი 81: ხაზი 99:
ბლოკურად ორიენტირებული მართვის სტრუქტურები, მსგავსი C-ს Java-ს ბლოკურად ორიენტირებული მართვის სტრუქტურების. განშტოების ოპერატორის თუ ციკლის ოპერატორის პირობა შემოსაზღვრული უნდა იყოს ფრჩხილებით, მართვის ბლოკი კი ფიგურული ფრჩხილებით:
ბლოკურად ორიენტირებული მართვის სტრუქტურები, მსგავსი C-ს Java-ს ბლოკურად ორიენტირებული მართვის სტრუქტურების. განშტოების ოპერატორის თუ ციკლის ოპერატორის პირობა შემოსაზღვრული უნდა იყოს ფრჩხილებით, მართვის ბლოკი კი ფიგურული ფრჩხილებით:


<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="perl">
<source lang="perl">
''label'' while ( ''cond'' ) { ... }
''label'' while ( ''cond'' ) { ... }
ხაზი 91: ხაზი 110:
if ( ''cond'' ) { ... } elsif ( ''cond'' ) { ... } else { ... }
if ( ''cond'' ) { ... } elsif ( ''cond'' ) { ... } else { ... }
</source>
</source>
</div>


თუ კი ბლოკი მოიცავს მხოლოდ ერთ წინადადებას, მაშინ შესაძლებელია ასეთი ჩანაწერიც ფიგურული ფრჩხილების გარეშე:
თუ კი ბლოკი მოიცავს მხოლოდ ერთ წინადადებას, მაშინ შესაძლებელია ასეთი ჩანაწერიც ფიგურული ფრჩხილების გარეშე:


<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="perl">
<source lang="perl">
''statement'' if ''cond'' ;
''statement'' if ''cond'' ;
ხაზი 101: ხაზი 122:
''statement'' foreach ''list'' ;
''statement'' foreach ''list'' ;
</source>
</source>
</div>


=== ქვეპროგრამები ===
=== ქვეპროგრამები ===
ქვეპროგრამა განისაზღვრება sub ოპერატორის საშუალებით და შემდგომ შეიძლება გამოვიძახოთ სახელის საშუალებით. ქვეპროგრამის განსაზღვრა შეიძლება პროგრამის ნებისმიერ ადგილას. ქვეპროგრამის გამოძახების დროს ქვეპროგრამის სახელი აუცილებლად უნდა იყოს დასრულებული ფრჩხილებით და წინადადების დასრულების ოპერატორით (;).
ქვეპროგრამა განისაზღვრება sub ოპერატორის საშუალებით და შემდგომ შეიძლება გამოვიძახოთ სახელის საშუალებით. ქვეპროგრამის განსაზღვრა შეიძლება პროგრამის ნებისმიერ ადგილას. ქვეპროგრამის გამოძახების დროს ქვეპროგრამის სახელი აუცილებლად უნდა იყოს დასრულებული ფრჩხილებით და წინადადების დასრულების ოპერატორით (;).


<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="perl">
<source lang="perl">
foo();
foo();
ხაზი 110: ხაზი 133:
foo;
foo;
</source>
</source>
</div>


ქვეპროგრამას შეიძლება გადავცეთ ერთი ან რამდენიმე არგუმენტი:
ქვეპროგრამას შეიძლება გადავცეთ ერთი ან რამდენიმე არგუმენტი:


<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="perl">
<source lang="perl">
foo $x, @y, %z;
foo $x, @y, %z;
</source>
</source>
</div>


ქვეპროგრამის პარამეტრების განსაზღვრა საჭირო არ არის. რამდენი არგუმენტიც არ უნდა გადავცეთ ქვეპროგრამის, მათ შეიძლება მივწვდეთ <tt>@_</tt>-ს საშუალებით.
ქვეპროგრამის პარამეტრების განსაზღვრა საჭირო არ არის. რამდენი არგუმენტიც არ უნდა გადავცეთ ქვეპროგრამის, მათ შეიძლება მივწვდეთ <tt>@_</tt>-ს საშუალებით.


<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="perl">
<source lang="perl">
<tt>@_</tt> ელემენტებს შეიძლება მივწვდეთ ინდექსის მითითებით შემდეგნაირად:
<tt>@_</tt> ელემენტებს შეიძლება მივწვდეთ ინდექსის მითითებით შემდეგნაირად:
ხაზი 125: ხაზი 152:


</source>
</source>
</div>


ქვეპროგრამა შესაძლებელია აბრუნებდეს მნიშვნელობასაც:
ქვეპროგრამა შესაძლებელია აბრუნებდეს მნიშვნელობასაც:


<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="perl">
<source lang="perl">
return 42, $x, @y, %z;
return 42, $x, @y, %z;
</source>
</source>
</div>


=== რეგულარული გამოსახულებები ===
=== რეგულარული გამოსახულებები ===
ხაზი 137: ხაზი 167:
რეგულარულ გამოსახულებებს პერლის გარდა იყენებს მრავალი პლატფორმა თუ ენა, დღესდღეობით რეგულარული გამოსახულებები აღიარებული სტანდარტია.
რეგულარულ გამოსახულებებს პერლის გარდა იყენებს მრავალი პლატფორმა თუ ენა, დღესდღეობით რეგულარული გამოსახულებები აღიარებული სტანდარტია.


<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="perl">
<source lang="perl">
$x = "abcdefgh";
$x = "abcdefgh";
$x =~ m/abc/
$x =~ m/abc/
</source>
</source>
</div>


მოცემული გამოსახულება იქნება true თუ სტრიქონი შეიცავს მითითებული სიმბოლოების წყებას, თუ არადა false.
მოცემული გამოსახულება იქნება true თუ სტრიქონი შეიცავს მითითებული სიმბოლოების წყებას, თუ არადა false.


შესაძლებელია მოდიფიკატორების მითითება, მაგალითად:
შესაძლებელია მოდიფიკატორების მითითება, მაგალითად:

<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="perl">
<source lang="perl">
$x =~ m/abc/i; # case-insensitive pattern match
$x =~ m/abc/i; # case-insensitive pattern match
$x =~ s/abc/aBc/g; # global search and replace
$x =~ s/abc/aBc/g; # global search and replace
</source>
</source>
</div>


ერთი შეხედვით რეგულარული გამოსახულება შეიძლება იყოს ძალიან ჩახლართული და ძნელად გარჩევადი.
ერთი შეხედვით რეგულარული გამოსახულება შეიძლება იყოს ძალიან ჩახლართული და ძნელად გარჩევადი.


<div style="border:1px dashed #2fab6f;padding:1em;margin:1em 0;">
<source lang="perl">
<source lang="perl">
$x =~ s/^([0-2]\d:[0-5]\d:[0-5]\d)\s+\[([^\]]+)\]\s+(.*)$/g;
$x =~ s/^([0-2]\d:[0-5]\d:[0-5]\d)\s+\[([^\]]+)\]\s+(.*)$/g;
</source>
</source>
</div>


== რესურსები ინტერნეტში ==
== რესურსები ინტერნეტში ==

20:22, 20 მაისი 2011-ის ვერსია

ფაილი:Programming-republic-of-perl.gif
ლოგოტიპი

პერლი (PERL), დაპროგრამების სტრუქტურული და დინამიური ენა, შექმნილი 1987 წელს ლარი უოლის მიერ. პერლში გაერთიანებულია C-ის, shell-ის, awk-ს, sed-ის, Lisp-ის და დაპროგრამების სხვა ენების ნიშან-თვისებები.

ზოგადი მიმოხილვა

პერლ-ის ოფიციალური საინფორმაციო წყაროების ცნობით პერლი არის: "ზოგადი დანიშნულების დაპროგრამების ენა, რომელიც თავდაპირველად შეიქმნა ტექსტური მანიპულაციებისათვის, თუმცა ახლა გამოიყენება მრავალი ტიპის ამოცანების გადაჭრისას, მათ შორის სისტემური ადმინისტრირების, ვებ-განვითარების, ქსელური პროგრამირების, GUI-ის (მომხმარებლის გრაფიკული ინტერფეისის) განვითარების და სხვ. ენის შემქმნელები შეეცადნენ, რომ ენა ყოფილიყო უფრო პრაქტიკული და ადვილად გამოსაყენებადი, ვიდრე ლამაზი და ესთეტური. მისი უმნიშვნელოვანესი მახასიათებლები არის: გამოყენების სიადვილე, ობიექტურად ორიენტირებული და სტრუქტურული პროგრამირების მხარდაჭერა, ტექსტის ეფექტური დამუშავების შიგ ჩაშენებული მექანიზმი და მოდულების უზარმაზარი ბიბლიოთეკა.

ენის სტრუქტურა

მაგალითი

პერლ-ზე დაწერილი Hello world-ის კანონიკური პროგრამა ასე გამოიყურება:

!/usr/bin/perl
print "Hello, world!\n";

პირველი სტრიქონი ეუბნება იუნიქსის ოპერაციულ სისტემა თუ სად მიაგნოს პერლის ინტერპრეტატორს. მეორე სტრიქონი ბეჭდავს ეკრანზე Hello, world-ს და კურსორი ახალ ხაზზე გადააქვს.

მონაცემთა ტიპები

პერლ-ს თავის არსენალში მონაცემთა სამი ფუნდამენტური ტიპი გააჩნია: სკალარი, მასივი/სია და ჰეშ ცხრილი:

  • სკალარი არის ერთეულოვანი მონაცემი. ის შეიძლება იყოს რიცხვი, სტრიქონი ან მითითება.
  • სია არის სკალართა მოწესრიგებული მიმდევრობა.
  • ჰეშ-ცხრილი (ასოციაციური მასივი) ქმნის ასოციაციურ კავშირებს სტრიქონებსა და სკალარებს შორის, რომელთაგან სტრიქონებს „გასაღები“ ეწოდებათ, სკალარებს კი „მნიშვნელობა“

თითოეულ ცვლადს წინ წამძღვარებული აქვს განსაზღვრული სიმბოლო, რომლის საშუალებითაც ინტერპრეტატორი არკვევს რომელი ტიპის მონაცემთა ტიპთან გვაქვს საქმე.

$foo # სკალარი
@foo # სია
%foo # ჰეშ–ცხრილი

სკალარულ ცვლადებს რიცხვები ჩვეულებრივი გზით ენიჭებათ. სტრიქონი კი ბრჭყალებით უნდა იყოს შემოსაზღვრული.

$n = 42;
$name = "joe";
$color = 'red';

სიის ტიპის ცვლადის ინიციალიზაცია ხდება შემდეგნაირად, ფრჩხილებში მოთავსებული, მძიმეებით გამოყოფილი ელემენტების საშუალებით:

@scores = (32, 45, 16, 5);

ჰეშ-ცხრილის ინიციალიზაცია ხდება გასაღები-მნიშვნელობის წყვილის განსაზღვრით:

%favorite = (joe => 'red',
             sam => 'blue');

სიის თითოეულ ელემენტს შეიძლება მივაგნოთ ინდექსის საშუალებით, ჰეშ-ცხრილისას კი გასაღების მითითებით. სიის ინდექსი უნდა იყოს მოთავსებული კუთხურ ფრჩხილებში, ჰეშ-ცხრილის გასაღები კი — ფიგურულში.

$scores[2] # @scores მე–2 სიის ელემენტი
$favorite{joe} # %favorite ჰეშ–ცხრილის ელემენტი

რამდენიმე ელემენტს შეიძლება მივწვდეთ სიის იდენტიფიკატორის @ საშუალებით:

@scores[2, 3, 1] # @scores სიის სამი ელემენტი
@favorite{'joe', 'sam'} # %favorite ორი გასაღების მნიშვნელობა

სიის ელემენტთა რაოდენობა შეიძლება გავიგოთ, თუ ამ სიას სკალარულ ცვლადს მივანიჭებთ

$count = @friends;

ჰეშ-ცხრილიდან გასაღებების ან მნიშვნელობების მასივის ამოღება შეიძლება შემდეგნაირად:

@names = keys %address;
@addresses = values %address;

მართვის სტრუქტურები

პერლში რამდენიმე ტიპის მართვის სტრუქტურაა. ბლოკურად ორიენტირებული მართვის სტრუქტურები, მსგავსი C-ს Java-ს ბლოკურად ორიენტირებული მართვის სტრუქტურების. განშტოების ოპერატორის თუ ციკლის ოპერატორის პირობა შემოსაზღვრული უნდა იყოს ფრჩხილებით, მართვის ბლოკი კი ფიგურული ფრჩხილებით:

''label'' while ( ''cond'' ) { ... }
''label'' while ( ''cond'' ) { ... } continue { ... }
''label'' for ( ''init-expr'' ; ''cond-expr'' ; ''incr-expr'' ) { ... }
''label'' foreach ''var'' ( ''list'' ) { ... }
''label'' foreach ''var'' ( ''list'' ) { ... } continue { ... }
if ( ''cond'' ) { ... }
if ( ''cond'' ) { ... } else { ... } 
if ( ''cond'' ) { ... } elsif ( ''cond'' ) { ... } else { ... }

თუ კი ბლოკი მოიცავს მხოლოდ ერთ წინადადებას, მაშინ შესაძლებელია ასეთი ჩანაწერიც ფიგურული ფრჩხილების გარეშე:

''statement'' if ''cond'' ;
''statement'' unless ''cond'' ;
''statement'' while ''cond'' ;
''statement'' until ''cond'' ;
''statement'' foreach ''list'' ;

ქვეპროგრამები

ქვეპროგრამა განისაზღვრება sub ოპერატორის საშუალებით და შემდგომ შეიძლება გამოვიძახოთ სახელის საშუალებით. ქვეპროგრამის განსაზღვრა შეიძლება პროგრამის ნებისმიერ ადგილას. ქვეპროგრამის გამოძახების დროს ქვეპროგრამის სახელი აუცილებლად უნდა იყოს დასრულებული ფრჩხილებით და წინადადების დასრულების ოპერატორით (;).

 foo();
 sub foo { ... }
 foo;

ქვეპროგრამას შეიძლება გადავცეთ ერთი ან რამდენიმე არგუმენტი:

 foo $x, @y, %z;

ქვეპროგრამის პარამეტრების განსაზღვრა საჭირო არ არის. რამდენი არგუმენტიც არ უნდა გადავცეთ ქვეპროგრამის, მათ შეიძლება მივწვდეთ @_-ს საშუალებით.

<tt>@_</tt> ელემენტებს შეიძლება მივწვდეთ ინდექსის მითითებით შემდეგნაირად:

 $_[0], $_[1]

ქვეპროგრამა შესაძლებელია აბრუნებდეს მნიშვნელობასაც:

 return 42, $x, @y, %z;

რეგულარული გამოსახულებები

პერლი შეიცავს სპეციალიზებული სინტაქსის მქონე გამოსახულებებს, რეგულარულ გამოსახულებებს, რომლებიც ამარტივებენ ტექსტთან ურთიერთობას. რეგულარულ გამოსახულებებს პერლის გარდა იყენებს მრავალი პლატფორმა თუ ენა, დღესდღეობით რეგულარული გამოსახულებები აღიარებული სტანდარტია.

  $x = "abcdefgh";
  $x =~ m/abc/

მოცემული გამოსახულება იქნება true თუ სტრიქონი შეიცავს მითითებული სიმბოლოების წყებას, თუ არადა false.

შესაძლებელია მოდიფიკატორების მითითება, მაგალითად:

  $x =~ m/abc/i;      # case-insensitive pattern match
  $x =~ s/abc/aBc/g;  # global search and replace

ერთი შეხედვით რეგულარული გამოსახულება შეიძლება იყოს ძალიან ჩახლართული და ძნელად გარჩევადი.

  $x =~ s/^([0-2]\d:[0-5]\d:[0-5]\d)\s+\[([^\]]+)\]\s+(.*)$/g;

რესურსები ინტერნეტში

მოძიებულია „https://ka.wikipedia.org/w/index.php?title=Perl&oldid=1533376“-დან