Perl Arrays

O matrice în Perl este o variabilă care conține o listă de valori. Numele variabilei array începe cu simbolul @. Și acest lucru este destul de logic - simbolul @ se bazează pe litera a, cu această literă începe matricea matrice - matrice.







O matrice din Perl poate stoca o listă de valori de orice tip. Există o matrice în care sunt stocate simultan atât șiruri de caractere, numere și orice altceva.

Definiția matricei și accesul la elemente

Iată un script simplu, cu un exemplu de definire și folosire a elementelor de matrice în Perl:

Dacă executați acest script, acesta va afișa:

Ce se întâmplă aici. Mai întâi, linia standard cu care încep toate script-urile Perl #! / Usr / bin / perl, atunci există o conexiune a mai multor caracteristici ale limbii care fac munca Perl mai convenabilă. Apoi, variabila @ nume este creată și atribuită o listă cu 5 linii.

Ca în multe limbi de programare în Perl, primul element al matricei primește numărul 0. După efectuarea acestei operații, următoarea este găsită în variabila @names:

  • în această variabilă, la numărul 0, șirul "Homer"
  • sub numărul 1, șirul "Marge"
  • 2 - "Bart"
  • 3 - "Lisa"
  • 4 - "Maggie"

Pentru a obține elementul cu numărul 2 din variabila @ nume, se utilizează formularul idiotic - $ name [2]. Aici super-ilogic ca simbolul @ sunt înlocuite cu simbolul $ Explicația oficială pentru această prostie - vrem pentru a avea acces la același element, și o variabilă un element începe cu caracterul $, dar este doar o greșeală în proiectarea limbii. În versiunea Perl 6, aceasta este fixată. Dar în versiunea Perl 5 trebuie să trăiți cu el.

spune - afișează ceea ce este în matrice la numărul 0. Numărul 0 din matrice este șirul "Homer" - apare pe ecran.

Definiția arrays. Supliment.

Tocmai am definit matricea cu acest cod:

Când există mai multe elemente în matrice, este mai convenabil să le scrieți într-o coloană:

Perl nu are o problemă JSON - Perl are permisiunea de a specifica o virgulă după ultimul element:

(De fapt, dacă enumerați elementele dintr-o matrice într-o coloană, merită întotdeauna să specificați o virgulă după ultimul element - acest lucru face mai ușor să lucrați cu codul și face mai ușor să citiți diff).

Dacă există linii de text în matrice în care nu există spații, atunci există o modalitate chiar mai simplă de a defini o matrice - utilizați operatorul qw:

Operatorul qw taie textul care îi este transmis prin spațiul alb și creează elementele listate.

Dacă trebuie să creați un matrice din lista de numere care sunt consecutive, puteți utiliza operatorul.

Acest lucru este la fel ca:

Operatorul. funcționează și cu litere:

Această caracteristică a limbajului poate fi utilizată într-o singură linie perl, pentru a genera parole:

Array Output

Uneori în timpul dezvoltării programului trebuie să vedeți ce este în interiorul matricei. Pentru a face acest lucru, puteți folosi biblioteca Data :: Dumper:

Iată rezultatul acestui script:

Dacă aveți Perl, atunci aveți biblioteca Data :: Dumper. Dar dacă adăugați biblioteca Data :: Printer, va trebui să scrieți mai puține litere pentru a afișa conținutul matricei:

Iar rezultatul scenariului este mult mai plăcut:

Perl Arrays

Lungimea matricei

Sarcina. Avem o matrice de numere @, trebuie să știm dimensiunea ei - câte elemente există în ea. Există mai multe moduri de a face acest lucru. Puteți utiliza o variabilă specială care conține indexul ultimului element sau puteți utiliza funcțiile Perl numite "context".

Când apare o matrice, apare automat o variabilă specială, care indică indicele ultimului element. Avem un numar @ numit care contine 5 elemente si exista nume variabile $ # pentru care exista un numar 4 (deoarece elementele sunt numerotate cu 0, nu cu 1). Dacă numărul elementelor din matrice se modifică, numele $ vor fi schimbate automat.

Primul mod de a afla numărul elementelor dintr-un matrice este să luați nume de $ # și să adăugați unul:







Această metodă funcționează și este complet corectă, dar modul mai corect este de a folosi "contextul":

Ce se întâmplă aici? La început, totul este același ca în scenariul precedent, dar apoi este executat:

Vom crea un nou număr $ variabil. La începutul numelui acestei variabile este simbolul $, ceea ce înseamnă că tipul acestei variabile este scalar. Simbolul $ este perfect logic - acest caracter este similar cu litera cu care începe cuvântul scalar. O variabilă scalară sau scalară este o variabilă care conține doar o singură valoare. Poate fi un șir, un număr sau altceva.

Apoi, contextul apare. Contextul este un lucru foarte important în limbajul de programare Perl. În Perl, în funcție de context (adică aproape), lucrurile diferite acționează diferit. Contextul este un lucru complicat. Dar pentru a programa în Perl trebuie să dai seama cum funcționează contextul.

Expresia mea $ number = @ nume; înseamnă că am luat o matrice și l-am folosit într-un "context scalar". În contextul scalar al unei matrice este numărul de elemente din ea, adică exact ceea ce am vrut să obținem.

Iată un alt exemplu de utilizare a contextului. Puteți utiliza un matrice într-un context de listă:

Rezultatul acestei operațiuni - în variabila scalară $ om va fi șirul "Homer", iar în variabila scalară $ femeia va fi șirul "Marge".

În script, am atribuit mai întâi matricei unei variabile scalare și apoi ieșim valoarea acestei variabile:

Și dacă afișați imediat valoarea matricei @ names?

Această concluzie este foarte diferită de numărul 5. Explicația pentru acest lucru este contextul. Cuvântul cheie spune că funcționează într-un context al listei. spune că afișează toate elementele listei care i-au fost transmise. Dar puteți indica în mod explicit că vrem să lucrăm cu o matrice într-un context scalar:

În acest caz, producția va fi de 5.

Lucrul cu un matrice

Adăugarea unui element la sfârșitul matricei:

Rezultatul acestei operații - în array @arr va fi o listă (1, 2, 3, 'abc');

Cu împingere, puteți adăuga mai multe elemente la matrice:

Rezultatul acestei operații - în array @arr va fi o listă (1, 2, 3, 'abc', 'def');

O caracteristică interesantă a push-ului, despre care foarte puțini oameni știu - această funcție nu numai că schimbă matricea, ci și returnează un număr - câte elementele au devenit în matrice după adăugarea tuturor elementelor specificate în matrice. Astfel, sarcina de a "găsi numărul elementelor dintr-o matrice" poate fi rezolvată aici într-un mod atât de pervertit:

Funcția de împingere adaugă un element (sau elemente) la capătul matricei. În Perl, există o funcție pentru operația inversă - obțineți ultimul element din matrice. Acest lucru se face cu ajutorul funcției pop (această funcție nu poate obține mai multe elemente, această funcție are un singur element).

După executarea codului de mai sus, matricea @arr va consta din două elemente (1, 2), iar variabila $ smth va conține numărul 3.

Cu ajutorul funcțiilor push / pop, puteți lucra cu o matrice ca și cum ar fi o stivă.

În plus față de funcțiile push / pop care adaugă / elimină elemente de la sfârșitul matricei, există și funcții de schimbare / decalaj care funcționează cu începutul matricei.

Adăugați un element la începutul matricei:

După executarea acestor comenzi, matricea @arr va conține o listă ('abc', 1, 2, 3)

Folosind unshift, puteți adăuga mai multe elemente la începutul matricei:

După executarea acestor comenzi, lista din array @arr va conține o listă ('abc', 'def', 1, 2, 3)

La fel ca împingerea, unshift returnează un număr - numărul elementelor din matrice după adăugarea tuturor elementelor de acolo.

Puteți elimina primul element din matrice utilizând funcția de schimbare:

După efectuarea acestor acțiuni, matricea va consta din două elemente (2, 3), iar în variabila $ elementul va fi primul element al matricei - numărul 1.

  • unshift adaugă un element / elemente la începutul matricei
  • schimbarea trage un element de la începutul matricei
  • împinge adaugă elementul / elementele la capătul matricei
  • pop extrage un element de la sfârșitul matricei

Perl Arrays

Iterând peste o matrice

Deseori există o sarcină - trebuie să treceți peste toate elementele matricei și să efectuați o anumită acțiune cu ele.

În Perl, ca și în multe alte limbi de programare, există o buclă. Iată cum puteți traversa toate elementele unei matrice pentru:

Iată rezultatul acestui program:

Totul este standard și simplu. Am determinat $ i = 0, am verificat îndeplinirea condiției, am executat corpul buclei, am mărit contorul, am verificat dacă condiția a fost îndeplinită, am executat corpul bucla, am crescut numărul de contor.

Dar Perl oferă o modalitate mai simplă și mai convenabilă de iterare pe o matrice:

Perl are o caracteristică interesantă - o variabilă implicită. Dacă specificați o variabilă pentru foreach, atunci perl va pune toate elementele matricei în variabila implicită $ _:

Și dacă spun că nu specifică nici un parametru, spun că va funcționa cu variabila implicită. Deci, același ciclu poate fi scris astfel:

Și în Perl, puteți folosi scrierea postfix pentru foreach, astfel încât același ciclu poate fi scris:

Perl are o buclă în timp, și poate fi de asemenea folosit pentru a itera pe o matrice. De exemplu, așa (îngrijit, în această utilizare se află pericolul):

În mod specific, acest exemplu funcționează exact ca și celelalte opțiuni din această secțiune. Dar dacă există elemente undef în matrice, atunci această bucla nu trece prin toate elementele:

Rezultatul acestui script:

Ie fără "Maggie". Puteți schimba bara de timp pentru ca funcția să funcționeze corect, de exemplu, astfel:

(Variabila $ # nume returnează -1 dacă matricea este goală).

Dar ar fi mai ușor și mai ușor de înțeles să scrieți cu preambul:

Perl sunt utilizate pentru a scrie funcții native:

Aici definiți o funcție numită say_hello. Când o numim, atunci în interiorul funcției toți parametrii pe care i-am trecut la ea intră într-o matrice specială @.

Cu ajutorul unei înregistrări

am salvat primul element al array @_ în variabila $ name.

@_ este o matrice, astfel încât să puteți lucra cu ea diferit. De exemplu:

Dacă folosiți deplasarea în interiorul sub și nu specificați parametrii pentru aceasta, va funcționa cu @_. Deci, ultima opțiune ar putea fi scrisă:







Articole similare

Trimiteți-le prietenilor: