*   >> läser Utbildning artiklar >> tech >> web development

Grunderna i ActivePerl Reference

Grunderna i ActivePerl - Del 18 Inledning Detta är en del 18 av min serie, Grunderna i ActivePerl. En region i minnet är en uppsättning av minnesceller i följd. Värden (variabla innehåll) hålls i minnesområden. En variabel identifierar en minnesområde. En referens är en pekare till ett minnesområde som vanligtvis används när man är mer intresserad av vad som finns i ett minnesområde och inte variabeln. Betrakta en referens som adressen för ett minnesområde. Denna minnesområdet kan ha ett värde. I denna del av serien, tittar vi på ActivePerl Reference.

Allt som beskrivs i denna handledning är tillämplig på traditionella Perl. Obs: Om du inte kan se koden, eller om du tror att något saknas (bruten länk, bild frånvarande), bara att kontakta mig på [email protected]. Det vill säga, kontakta mig för minsta problem du har om vad du läser. Minnesregionen En minnesregion är ett område i datorminnet som innehåller värdet av en variabel. Genom värde här, jag hänvisar till ett skalärt värde, array eller hash.

Olika minnesområden med olika variabler Betrakta följande två på varandra följande uttalanden: min $ myVar =; "Jag är innehållet i en stor textfil från hårddisken, nu i minnet." min $ Avar = "Jag är innehållet i en stor textfil från hårddisken, nu i minnet."; Du har två olika variabler med olika namn men med samma strängvärden. En variabel identifierar en minnesområde. Två olika variabler med två olika namn identifierar två olika minnesområden, allt är lika. I fallet ovan, de två värdena, även om är samma, är i två olika minnesområden.

Samma Memory Region för två olika variabler I ActivePerl kan du göra samma minnesområdet har två olika variabler. De två olika variabler kommer naturligtvis att identifiera samma värde. Tänk på varandra följande två påståenden: min $ myVar = "Jag är innehållet i en stor textfil från hårddisken, nu i minnet."; min $ hisVar = \\ $ myVar; För det första meddelandet du har ett värde tilldela variabeln $ myVar. I det andra meddelandet är $ myVar föregås med \\ tecken framför att tilldelas en ny variabel, $ hisVar. \\ Är en operatör.

I det andra meddelandet, den \\ operatören, före den första variabeln, gör andra variabel identifiera samma minnesområdet (samma värde) som den första variabeln. En viktig sak att notera här är att \\ $ myVar refererar till ett minnesområde. För det andra meddelandet, \\ $ myVar, med \\, är en referens (adress i minnesområde som identifierats av $ myVar). $ hisVar är en variabel, inte en referens. Vi säger $ myVar har ett värde (strängen), medan $ hisVar håller referens (adress).

Med hjälp av en referens Nu när du har en referens, hur kan du få värdet av minnes regionen som en variabel som hänvisar till? Med andra ord en variabel håller en hänvisning till en viss minnesområde, hur kan du få värdet av det minnesområde, med hjälp av variabeln? I ovanstående fall är $ hisVar håller referensen i regionen som identifierats av $ myVar. För att få värdet med $ myVar, är det inget problem, eftersom du behöver bara använda $ myVar i stället för värdet.

För att få värdet från variabeln ($ hisVar), som har referens, måste du använda {} parentes enligt följande: $ {$ hisVar} Här har vi att göra med en skalär, så att du börjar med skalära tecken. Detta följs av ett par hängslen. Inne i hängslen, har du den variabel som håller referensen. Följande kod illustrerar detta: använd strikt; print "Content-Type: text /html \\ n \\ n"; min $ myVar = "Jag är innehållet i en stor textfil från hårddisken, nu i minnet."; min $ hisVar = \\ $ myVar; print $ {$ hisVar}; Det är du byter hisVar med {$ hisVar}.

Skalär och referensOvanStående förklaring är tillämplig på skalärer. En liknande sak är tillämplig på arrayer och hashar. Men med arrayer och hashes, det finns två sätt att skapa en referens och två sätt att använda referens. Array och referens Tänk på följande array creation: minarr = ("en", "två", 3, 4); Att begära avarr, måste du föregå variabeln med \\ skylt, som följande uttalande visar: min $ Aref = \\arr; Anonym Array I avsnittet ovan, behöver du två uttalanden för att komma fram med en rad referens. Det första påståendet ger arrayen ett namn,arr.

Nu är det möjligt att använda endast ett uttalande att komma med en array. I detta fall kommer matrisen inte ha ett namn. Det kommer bara att ha en hänvisning till regionen i minnet som har uppsättningen. Följande uttalande illustrerar detta: min $ Aref = ["en", "två", 3, 4]; Notera här att vi har hakparenteser att avgränsa arrayelementen och inte böjda fästen för listan som tidigare. Under detta förhållande, där hakparenteserna returnera en referens (minnesadress) till arrayen. Denna hänvisning tillbaka tilldelas skalära variabeln $ Aref.

Du behöver inte \\ skylt här, eftersom matrisen inte har ett namn och \\ bör användas framför ett namn. Obs: Varje variabel som innehåller en referens är en skalär variabel. Så hänvisning till en grupp eller hash innehas av en skalär variabel. Med hjälp av en Array Referens Ett sätt att få uppsättningen från en array referens (variabel håller referens) är att använda hängslen. För ovanstående referens, skriver du, @ {$ Aref} Du börjar med uppsättningen tecken, @, eftersom du har att göra med en matris. Detta följs av hängslen. Inne i hängslen, har du den variabel som håller referensen.

Du brukar inte använda array som helhet (enligt ovan). Du använder vanligtvis ett element från gruppen. För en matris som har ett namn, om du vill använda array namn för att få ett element, skulle du skriva något i stil med $ arr [2] där namnet på gruppen (variabel) ärarr. När du har en referens till arrayen, gör du en liknande sak men med hängslen på följande sätt: $ {$ Aref} [2] Det är du byter, arr med {$ Aref}. Det andra sättet att komma åt en grupp gäller när du vill ha en del av gruppen (detta är vad du gör för det mesta).

Med detta sätt behöver du inte börja med föregående skalära tecken, $. Du utelämnar också hängslen. Men följa dig matrisen styrsignalen, med en pil, -> (minustecken följt av större än-tecken), som i följande exempel: $ aref -> [2] Med detta sätt inte beror på huruvida matrisen referens var från en matris som har ett namn eller en anonym array.

Läs och prova följande kod: använd strikt; print "Content-Type: text /html \\ n \\ n"; minarr = ("en", "två", 3, 4); min $ Aref = \\arr; print $ {$ Aref} [1]; print "min $ arRef = [" en "," två ", 3, 4], print $ arRef -> [3], Hash och referens Tänk på följande hash creation: min% ha = (Apple =>" purple ", Banana => "gul", päron => "gröna", citron => "grön"), att göra ett referensvärde på% ha, måste du föregå den med \\ skylt, som följande uttalande visar: min $ HREF = \\% ha, Anonymous Hash I avsnittet ovan, behöver du två uttalanden för att komma fram till en hash Det första påståendet ger arrayen ett namn,% ha Det är möjligt att använda endast ett uttalande för att komma fram till en.

. ... hash I detta fall kommer hash inget namn Det kommer bara att ha en hänvisning till regionen i minnet som har hash Följande uttalande illustrerar detta: min $ href = {Apple => "purple", banan = > "gula", päron => "gröna", citron => "grön"}; Notera här att vi har hängslen för att avgränsa hash element och inte böjda fästen för listan som tidigare under detta tillstånd, hängslen returnera en referens (. minnesadress) till hash. Denna referens återtilldelas den skalära variabeln $ HREF.

Du behöver inte \\ skylt här, eftersom hash inte har ett namn och \\ bör användas framför ett namn (variabel) för att returnera en referens. Obs: Varje variabel som innehåller en referens är en skalär variabel. Så hänvisning till en grupp eller hash innehas av en skalär variabel. Hänvisningen till en skalär fortfarande innehas av en skalär variabel. Med hjälp av en Hash Referens Ett sätt att få hash från en hash referens (variabel håller referens) är att använda hängslen. För ovanstående referens, skriver du,% {$ Aref} Du börjar med hash-tecken,%, eftersom vi har att göra med en hash.

Detta följs av hängslen. Inne i hängslen, har du den variabel som håller referensen. Du brukar inte använda hash som helhet. Du använder vanligtvis ett värde från hash. För en hash som har ett namn, om du vill använda hash namn för att få ett värde, skulle du skriva något i stil med $ ha {"nyckel"} där namnet på hash (variabel) är $ ha. När du har en hänvisning till hash, gör du en liknande sak men med hängslen på följande sätt: $ {$ HREF} {"nyckel"} Det är du byter, ha med {$ HREF}. Det andra sättet att komma åt en hash gäller när du vill ha en del av hash (detta är vad du gör för det mesta).

Med detta sätt behöver du inte börja med föregående skalära tecken, $. Du utelämnar också hängslen. Men du följer matrisen styrsignalen, med en pil, ->, som i följande exempel: $ href -> {"nyckel"} Om du använder detta sätt beror inte på huruvida hash hänvisades från en hash som har ett namn eller en anonym hash.

Läs och prova följande kod: använd strikt; print "Content-Type: text /html \\ n \\ n"; min% hektar = (Apple => "purple", Banana => "gul", päron => "gröna", citron => "grön"); min $ href = \\% ha; print $ {$ HREF} {'Apples}; print "min $ HVref = {Apple =>" purple ", Banana =>" gul ", päron =>" gröna ", citron =>" gröna "}; print $ HVref -> {" Banana "}; Pass Argument av Hänvisning till en Program Läs och prova följande kod: Använd strikt, print "Content-Type: text /html \\ n \\ n", min% hektar = (Apple => "purple", Banana => "gula"); sub mySub {print $ _ [0] "", $ _ [1], "", $ _ [2], "", $ _ [3], "", $ _ [4], "", $ _ [5], "";} mySub ("en", "två",% ha), I funktionsanrop, är det första argumentet "en", är det andra argumentet "två" och det tredje argumentet är% hektar.

Så snart funktionsdefinitionen börjar avrättning, "ett" blir det första värdet av_, "två" blir det andra argumentet av_ Då poster i hash är tillplattade ut i resten av värdena_. I min dator, blir Apple femte värdet av_ och detta är inte en bra idé eftersom Apple är faktiskt en fyrkant. lila blir sjätte värdet av_ i min dator. Banana blir det tredje värdet av_ i min dator . I min dator, gul blir fjärde värdet av_. Notera att hash argumentet (% HA) i anropsfunktionen inte är en referens. Detta ger upphov till två problem. Föremålen av hash har planat ut i_ arrayen.

Dessutom hash objekt i_ arrayen inte i den ordning, de skrivit i skapandet av hash. Ett liknande problem uppstår med matrisen. För att lösa detta problem, är att för att bibehålla strukturen av en hash eller array när skickas till en funktion, måste du passera hash eller matrisen som referens. Följande kod illustrerar detta.

use strict; print "Content-Type: text /html \\ n \\ n"; min% hektar = (Apple => "purple", Banana => "gula"); sub mySub {print $ _ [0] "", $ _ [1], "", $ _ [2] -> {"Apples}", ", $ _ [2] -> {" Banana "} ; } MySub ("en", "två", \\% hektar); Det tredje argumentet i funktionsanrop är en hänvisning till hash. Detta uppnåddes genom föregår hash variabelnamn med \\ i parenteserna argumenten. Vid genomförandet av funktionsdefinitionen, det finns bara tre värden för_ arrayen nu. Det första värdet för matrisen är det första argumentet i funktionsanropet; det är okej.

Det andra värdet i matrisen är det andra argumentet av funktionsanropet; det är okej. Nu är det tredje värdet i matrisen en hänvisning till hash; som accepteras. Från denna referens, kan du få alla värden för hash. Lägg märke till hur de två värdena av hash har fått i definitionen ovan funktionen. När du passerar en matris eller en hash som argument vanligtvis till en funktion, du sluta med två kopior av objekten i gruppen eller hash: en kopia av objekten kvar i matrisen eller hash variabel. Den andra kopian av objekten är i_ arrayen, när funktionen anropas.

I ovanstående kod, har strukturen av hash bibehållits och du har bara ett exemplar av hash poster, som är de av den skapade (definierad) hash. Den ursprungliga hash med dess struktur är naturligtvis underhållas. Om du har tilldelat hash referens till en variabel (skalär), kan du fortfarande använda variabeln (som håller referens) som argument i funktionsanrop.

Följande kod illustrerar detta: använd strikt; print "Content-Type: text /html \\ n \\ n"; min% hektar = (Apple => "purple", Banana => "gula"); min $ href = \\% ha; sub mySub {print $ _ [0] "", $ _ [1], "", $ _ [2] -> {"Apples}", ", $ _ [2] ->

Page   <<       [1] [2] [3] [4] [5] [6] >>
Copyright © 2008 - 2016 läser Utbildning artiklar,https://utbildning.nmjjxx.com All rights reserved.