Monday, October 10, 2016

Cpan Moving Average

INHOUD Hierdie hoofstuk stel jou bekend aan die konsepte agter verwysings na Perl modules, pakkette, en klasse. Dit wys jou ook hoe om 'n paar monster modules te skep. A Perl module is 'n versameling van Perl kode wat optree soos 'n biblioteek van funksie oproepe. Die term module in Perl is sinoniem met die woord pakket. Pakkette is 'n kenmerk van Perl 4, terwyl modules is algemeen in Perl 5. Jy kan al jou herbruikbare Perl kode spesifiek vir 'n stel van die take in 'n Perl module te hou. Daarom is al die funksies wat verband hou met 'n tipe van taak vervat in 'n lêer. Die makliker om 'n aansoek op hierdie modulêre blokke te bou. Vandaar die woord module van toepassing is 'n bietjie meer as pakket. Hier is 'n vinnige inleiding tot modules. Sekere onderwerpe in hierdie afdeling sal in die res van die boek gedek word in detail. Lees die volgende paragrawe aandagtig deur om 'n oorsig van wat voorlê as wat jy skryf en gebruik jou eie modules te kry. Wat is verwarrend is dat die terme module en pakket uitruilbaar gebruik word in alle Perl dokumentasie, en hierdie twee terme beteken presies dieselfde ding. So lees Perl dokumente, dink quotpackagequot net wanneer jy sien quotmodulequot en omgekeerd. So, whats die uitgangspunt vir die gebruik van modules Wel, modules is daar om te verpak (verskoon die woordspeling) veranderlikes, simbole, en met mekaar verbind data-items saam. Byvoorbeeld, die gebruik van globale veranderlikes met 'n baie algemene name soos k. j. of ek in 'n program is oor die algemeen nie 'n goeie idee. Ook, 'n lus toonbank, ek. moet toegelaat word om onafhanklik te werk in twee verskillende gedeeltes van die kode. Verklaar ek as 'n globale veranderlike en dan die verhoog dit vanuit 'n subroutine sal onbeheerbaar probleme met jou aansoek code skep omdat die subroutine mag gewees het genoem van binne 'n lus wat ook gebruik van 'n veranderlike genaamd i. Die gebruik van modules in Perl laat veranderlikes met dieselfde naam word geskep op verskillende, afsonderlike plekke in dieselfde program. Die gedefinieer vir jou veranderlikes simbole word gestoor in 'n assosiatiewe skikking, waarna verwys word as 'n simbool tafel. Hierdie simbool tafels is uniek aan 'n pakket. Daarom veranderlikes met dieselfde naam in twee verskillende pakkette kan verskillende waardes het. Elke module het sy eie simbool tafel van alle simbole wat daarin verklaar word. Die simbool tafel basies isoleer sinoniem name in een module uit 'n ander. Die simbool tafel definieer 'n naamruimte. dit is, 'n ruimte vir onafhanklike veranderlike name bestaan ​​in. Dus, die gebruik van modules, elk met sy eie simbool tafel, verhoed 'n veranderlike in een artikel te kenne gegee van die vervang die waardes van ander veranderlikes met dieselfde naam elders in dieselfde verklaar program. As 'n saak van die feit, alle veranderlikes in Perl behoort aan 'n pakket. Die veranderlikes in 'n Perl program behoort aan die hoof pakket. Alle ander pakkette binne 'n Perl program óf geneste binne hierdie hoof pakket of bestaan ​​op dieselfde vlak. Daar is 'n paar ware globale veranderlikes, soos die sein hanteerder verskeidenheid SIG. wat beskikbaar is om al die ander modules in 'n aansoek program is en kan nie geïsoleer word via naamruimtes. Slegs diegene veranderlike identifiseerders begin met briewe of 'n onderstreep is in 'n modules simbool tafel gehou. Alle ander simbole, soos die name stdin. STDOUT. Stderr. ARGV. ARGVOUT. ENV. Incl. en SIG gedwing word om te wees in die pakket hoof. Skakel tussen pakkette slegs affekteer naamruimtes. Al wat jy doen wanneer jy 'n pakket te gebruik of 'n ander is verklaar wat tafel simbool te gebruik as die standaard simbool tafel vir lookup van veranderlike name. Slegs dinamiese veranderlikes geraak word deur die gebruik van simbole tafels. Veranderlikes deur die gebruik van die my navraag verklaar nog opgelos met die kode blok dit gebeur in te woon en nie gekla nie deur simbool tafels. Trouens, die omvang van 'n pakket verklaring bly aktief slegs binne die kode blok in verklaar. Daarom, as jy simbool tafels skakel deur gebruik te maak van 'n pakket binne 'n subroutine, die oorspronklike simbool tafel in werking wanneer die oproep gemaak sal herstel wanneer die subroutine terugkeer. Skakel simbool tafels slegs affekteer die verstek soek dinamiese veranderlike name. Kan u nogsteeds eksplisiet verwys na veranderlikes, lêer handvatsels, en so aan in 'n bepaalde pakket deur prepending n packageName. om die veranderlike naam. Jy sien wat 'n pakket konteks was by die gebruik van verwysings in Hoofstuk 3. 'n pakket konteks bloot impliseer die gebruik van die simbool tabel deur die Perl tolk vir die oplossing van veranderlike name in 'n program. Deur oor te skakel simbool tafels, jy skakel die pakket konteks. Modules kan berus op 'n ander modules. Die sub-module kan die veranderlikes en funksies van die module is dit berus op 'gebruik. Vir geneste modules, sal jy het om te ModuleName gebruik. nestedModuleName en so aan. Die gebruik van die dubbele kolon (::) is sinoniem met behulp van 'n terug aanhaling (). Maar die dubbele kolon is die voorkeur, toekomstige manier aanspreek veranderlikes binne modules. Eksplisiete aanspreek van module veranderlikes word altyd met 'n volledige verwysing. Byvoorbeeld, veronderstel jy 'n module, Investment. wat is die standaard pakket in gebruik is, en jy wil 'n ander module aan te spreek, Bonds. wat nes gemaak in die Investment module. In hierdie geval, kan jy nie gebruik Bond ::. In plaas daarvan, sal jy het om Investment :: Bond :: gebruik om veranderlikes en funksies aan te spreek binne die Bond module. Die gebruik van Bond :: sou die gebruik van 'n pakket Bond wat nes gemaak in die hoofmodule en nie binne die Investment module impliseer. Die simbool tafel vir 'n module is eintlik gestoor in 'n assosiatiewe skikking van die modules name aangeheg met twee dubbelpunte. Die simbool tafel vir 'n module genoem Bond sal verwys word as die assosiatiewe skikking Bond ::. Die naam vir die simbool tafel vir die grootste module is hoof ::. en kan selfs verkort na ::. Net so het almal nes pakkette hul simbole gestoor in assosiatiewe skikkings met 'n dubbele dubbelpunte geskei elke nesvlak. Byvoorbeeld, in die Bond module wat nes gemaak in die Investment module die assosiatiewe skikking vir die simbole in die Bond module sal genoem Investment :: Bond ::. A typeglob is regtig 'n globale tipe vir 'n simbool naam. Jy kan aliasing operasies uit te voer deur die toeken van 'n typeglob. Een of meer inskrywings in 'n assosiatiewe skikking vir simbole sal gebruik word wanneer 'n opdrag via 'n typeglob gebruik. Die werklike waarde in elke inskrywing van die assosiatiewe skikking is wat jy verwys wanneer jy die veranderlike naam notasie gebruik. So, daar is twee maniere om na veranderlike name in 'n pakket: Investment :: geld Investment :: wetsontwerpe In die eerste metode, is jy verwys na die veranderlikes deur middel van 'n typeglob verwysing. Die gebruik van die simbool tafel, Investment ::. is hier geïmpliseer, en Perl sal die lookup vir simbole geld en rekeninge te optimaliseer. Dit is die vinniger en voorkeur manier van spreek 'n simbool. Die tweede metode gebruik 'n lookup vir die waarde van 'n veranderlike deur geld en rekeninge in die assosiatiewe skikking aangespreek word vir simbole, Investment :: uitdruklik. Dit soek sal dinamies gedoen en sal nie optimaal deur Perl. Daarom sal die lookup gedwing word om die assosiatiewe skikking te gaan elke keer as die verklaring is uitgevoer. As gevolg hiervan, die tweede metode is nie doeltreffend en moet slegs gebruik word vir demonstrasie van hoe die simbool tafel intern geïmplementeer word. Nog 'n voorbeeld in hierdie stelling Kamran Husain veroorsaak veranderlikes, subroetines, en lêer handvatsels wat via die simbool Kamran is vernoem na ook via die simbool Husain aangespreek. Dit is, al simbool inskrywings in die huidige simbool tafel met die sleutel Kamran sal nou verwysings na die simbole van die sleutel Husain aangespreek bevat. Om so 'n globale opdrag voorkom, kan jy eksplisiete verwysings gebruik. Byvoorbeeld, sal die volgende stelling laat die inhoud van Husain spreek deur middel van die veranderlike Kamran. Kamran Husain egter enige skikkings so Kamran en Husain sal nie dieselfde wees nie. Net wat die uitdruklik vermeld verwysings sal verander. Om op te som, as jy een typeglob toewys aan 'n ander, jy raak al die inskrywings in 'n simbool tafel ongeag die tipe veranderlike waarna verwys word. As jy 'n verwysing van een veranderlike tipe toewys aan 'n ander, is jy net wat een inskrywing in die simbool tafel. A Perl module lêer het die volgende formaat: pakket ModuleName. Voeg modulekode. 1 Die lêernaam het ModuleName. pm genoem te word nie. Die naam van 'n module moet eindig in die tou. pm deur konvensie. Die pakket verklaring is die eerste reël van die lêer. Die laaste reël van die lêer moet die lyn met die 1 verklaring bevat. Dit in effek gee 'n werklike waarde tot die aansoek program met behulp van die module. Nie met behulp van die 1 verklaring sal nie toelaat dat die module korrek gelaai word nie. Die pakket verklaring sê die Perl tolk te begin met 'n nuwe naamruimte domein. Eintlik, al jou veranderlikes in 'n Perl script behoort aan 'n pakket genaamd hoof. Elke veranderlike in die hoof pakket kan na verwys word as mainvariable. Hier is die sintaksis vir sulke verwysings: packageNamevariableName Die enkele aanhaling () is sinoniem met die dubbele kolon (::) operateur. Ek dek meer gebruike van die :: operateur in die volgende hoofstuk. Vir die oomblik, moet jy onthou dat die volgende twee stellings is ekwivalent: packageNamevariableName packageName :: veranderlike naam Die dubbel-kolon sintaksis word beskou as standaard in die Perl wêreld. Daarom, om leesbaarheid te bewaar, ek gebruik die dubbel-kolon sintaksis in die res van hierdie boek, tensy sy absoluut noodsaaklik om uitsonderings te maak om 'n punt te bewys. Die verstek gebruik van 'n veranderlike naam uitstel tot die huidige pakket aktiewe ten tyde van die opstel. So, as jy in die pakket Finance. pm en spesifiseer 'n veranderlike PV. die veranderlike is eintlik gelyk aan Finansies :: PV. Die gebruik van Perl modules: gebruik teen vereis dat jy sluit Perl modules in jou program met behulp van die gebruik of die eis verklaring. Hier is die pad na een van hierdie state gebruik: gebruik ModuleName vereis ModuleName Let daarop dat die. pm uitbreiding nie gebruik word in die bostaande kode. Let ook daarop dat nie stelling kan 'n lêer meer as een keer in 'n program wat ingesluit moet word. Die teruggekeer waarde van ware (1) as die laaste stelling is nodig om te laat Perl weet dat 'n eis d of gebruik d module korrek gelaai en laat die Perl tolk enige herlaadt ignoreer. In die algemeen, die beter om die gebruik Module verklaring as die eis Module verklaring in 'n Perl program versoenbaar is met toekomstige weergawes van Perl te bly. Vir modules, wil jy dalk oorweeg om die voortsetting van die eis verklaring gebruik. Hier is hoekom: Die gebruik verklaring doen 'n bietjie meer werk as die eis verklaring in die sin dat dit die namespace van die module wat 'n ander module sluit verander. Jy wil hierdie ekstra werk van die naamruimte wat gedoen moet word in 'n program. Maar wanneer die skryf van kode vir 'n module is, kan jy nie wil hê dat die naamruimte te verander tensy sy uitdruklik vereis. In hierdie geval, sal jy gebruik maak van die verklaring vereis. Die eis verklaring sluit die volle padnaam van 'n lêer in die Inc verskeidenheid sodat die funksies en veranderlikes in die lêer modules is in 'n bekende plek tydens uitvoering tyd. Daarom is die funksies wat ingevoer uit 'n module word ingevoer deur 'n eksplisiete module verwysing tydens looptyd met die eis verklaring. Die gebruik stelling nie dieselfde ding as die verklaring nodig, want dit updates die Inc verskeidenheid, met die volledige padnamen van gelaaide modules. Die kode vir die gebruik funksie gaan ook 'n stap verder en noem 'n funksie invoer in die module uit te voer gebruik d uitdruklik laai die lys van uitgevoer funksies tydens kompilering, dus die tyd wat nodig is vir 'n uitdruklike besluit van 'n funksie naam tydens uitvoering spaar. Eintlik is die gebruik stelling is gelykstaande aan ModuleName invoer ModuleName lys van ingevoerde funksies Die gebruik van die gebruik verklaring vereis nie verander jou programme naamruimte omdat die ingevoerde funksie name in die simbool tafel is ingevoeg. Die eis verklaring nie verander jou programme naamruimte. Daarom is die volgende stelling gebruik ModuleName () is gelykstaande aan dié stelling: vereis ModuleName funksies is van 'n module ingevoer deur 'n oproep om 'n funksie genoem invoer. Jy kan jou eie invoer funksie te skryf in 'n module, of jy kan die uitvoerder module gebruik en gebruik sy invoer funksie. In byna alle gevalle, sal jy die uitvoerder module gebruik om 'n invoer funksie gee in plaas van die wiel weer uitvind. (Jy sal meer inligting oor hierdie leer in die volgende afdeling.) Indien u besluit om nie die uitvoerder module gebruik, sal jy jou eie invoer funksie te skryf in elke module wat jy skryf. Sy baie makliker om net gebruik maak van die uitvoerder module en laat Perl doen die werk vir jou. Die Monster Letter. pm Module Die beste manier om die semantiek van hoe 'n module word in Perl te illustreer is om 'n eenvoudige module af te lê en te wys hoe om dit te gebruik. Kom ons neem die voorbeeld van 'n plaaslike lening haai, Rudious Maximus, wat net moeg van tik dieselfde quotrequest vir paymentquot briewe. Synde 'n fan van rekenaars en Perl, Rudious neem die lui programmeerders benadering en skryf 'n Perl module om hom te help genereer sy memorandums en briewe. Nou, in plaas van tik in die velde in 'n memorandum sjabloon lêer, alles wat hy het om te doen is tik 'n paar lyne om sy mooi, dreigende noot produseer. Notering 4.1 wys jou wat hy te tik. Notering 4.1. Die gebruik van die Brief module. 1 / usr / bin / perl-w 2 3 uncomment die onder lyn met die huidige rig in Inc. 4 druk (Ing, PWD) 5 6 gebruik Brief 7 8 Brief :: Om (quotMr sluit. Dobbel Manquot, quotThe geld vir Lucky Dog, Race 2quot) 9 Brief :: ClaimMoneyNice () 10 Brief :: ThankDem () 11 Brief :: Finish () die gebruik Brief verklaring is teenwoordig om die Perl tolk te dwing om die kode vir die module in die aansoek program in te sluit. Die module moet geleë wees in die / usr / lib / Perl5 / gids, of jy kan dit te plaas in 'n in die Inc verskeidenheid gelys gids. Die Inc skikking is die lys van gidse wat die Perl tolk sal kyk vir wanneer 'n poging om die kode vir die naam van module laai. Die kommentaar lyn (nommer 4) wys hoe om die huidige werk gids te voeg om die pad te sluit. Die volgende vier lyne in die lêer genereer die onderwerp vir die brief. Hier is die uitset van die gebruik van die Brief module: Aan: Mnr Dobbel Man Fm: Rudious Maximus, Lening haai Dt: Wed 7 Februarie 10:35:51 CST 1996 Re: Die geld vir Lucky Dog, Race 2 Dit het onder my aandag gekom dat jou rekening is weg oor te danke. Jy betaal ons nou eers gou Of sou jy hê ek moet ovah Dankie kom vir u ondersteuning. Die Brief module lêer word in Listing 4.2. Die naam van die pakket verklaar in die eerste reël. Omdat hierdie modules funksies uitgevoer sal word, ek gebruik die uitvoerder module. Daarom is die verklaring gebruik Uitvoerder wat nodig is om funksies in besit van die uitvoerder module. Nog 'n vereiste stap is om die woord wat uitgevoer word in die ISA verskeidenheid toe te laat op soek na Exported. pm. Die ISA skikking is 'n spesiale verskeidenheid binne elke pakket. Elke item in die skikking lyste waar anders om te kyk vir 'n metode as dit nie gevind kan word in die huidige pakket. Die volgorde waarin pakkette in die ISA verskeidenheid gelys is aan die orde waarin Perl soek na onopgeloste simbole. 'N Klas wat in die ISA verskeidenheid gelys word na verwys as die basis klas van daardie bepaalde klas. Perl sal vermiste metodes gevind in die basis klasse vir toekomstige verwysings kas. Wysiging van die ISA skikking die kas te spoel en laat Perl weer opkyk al metodes. Kom ons kyk nou na die kode vir Letter. pm in Listing 4.2. Notering 4.2. Die Letter. pm module. 1 pakket Brief 2 3 vereis Uitvoerder 4 ISA (Uitvoerder) 5 6 head1 NAAM 7 8 Brief - Voorbeeld module te briefhoof genereer vir jou 9 10 head1 SINOPSIS 11 12 gebruik Brief 13 14 Brief :: Datum () 15 Brief :: Om (naam , maatskappy, adres) 16 17 Toe gaan een van die volgende: 18 Brief :: ClaimMoneyNice () 19 Brief :: ClaimMoney () 20 Brief :: ThreatBreakLeg () 21 22 Brief :: ThankDem () 23 Brief :: Finish () 24 25 head1 BESKRYWING 26 27 Hierdie module bied 'n kort voorbeeld van die opwekking van 'n brief vir 'n 28 vriendelike neighborbood lening haai. 29 30 Die kode begin nadat die quotcutquot verklaring. 31 gesny 32 33 UITVOER QW (Datum, 34 Om, 35 ClaimMoney, 36 ClaimMoneyNice, 37 ThankDem, 38 Finish) 39 40 41 Print vandag datum 42 43 sub Brief :: Datum 44 datum datum 45 Druk quotn Vandag is datequot 46 47 48 sub brief :: tot 49 plaaslike (naam) verskuiwing 50 plaaslike (vak) skuif 51 Druk quotn Aan: namequot 52 Druk quotn Fm: Rudious Maximus, Lening Sharkquot 53 Druk quotn Dt: quot, datum 54 Druk quotn Re: subjectquot 55 Druk quotnnquot 56 druk quotnnquot 57 58 sub Brief :: ClaimMoney () 59 Druk quotn Jy skuld my geld. Kry jou daad togetherquot 60 Druk quotn Wil jy my om Bruno oor te stuur na 61 Druk quotn dit versamel quot. of is jy gaan betaal upquot 62 63 64 sub Brief :: ClaimMoneyNice () 65 Druk quotn Dit onder my aandag gekom dat jou rekening is quot 66 Druk quotn weg oor due. quot 67 Druk quotn U ons nou eers betaal soon..quot 68 Druk quotn of wil jy my om ovahquot kom 69 70 71 sub Brief :: ThreatBreakLeg () 72 Druk quotn blykbaar briewe soos hierdie hoef helpquot 73 Druk quotn Ek sal moet 'n voorbeeld te maak van youquot 74 Druk quotn n Sien julle in die hospitaal , palquot 75 76 77 sub Brief :: ThankDem () 78 Druk quotnn Dankie vir jou supportquot 79 80 81 sub Brief :: Finish () 82 printf quotnnnn Sincerelyquot 83 printf quotn Rudious N quot 84 85 86 1 Lines met die gelyk teken is gebruik vir dokumentasie. Jy moet elke module vir jou eie verwysing Perl modules dokumenteer hoef nie gedokumenteer nie, maar dit is 'n goeie idee om 'n paar lyne oor wat jou kode nie skryf. 'N Paar jaar van nou af, kan jy vergeet wat 'n module is oor. Goeie dokumentasie is altyd 'n moet as jy wil om te onthou wat jy gedoen het in die verlede Ek dek dokumentasie style gebruik vir Perl in Hoofstuk 8. quotDocumenting Perl Scripts. quot Vir hierdie monster module die head1 verklaring begin die dokumentasie. Alles tot die verlaging verklaring is geïgnoreer deur die Perl tolk. Volgende, die module lys van al die uitvoer van hierdie module in die uitvoer verskeidenheid funksies. Die uitvoer verskeidenheid definieer al die funksie name wat genoem word deur buite-kode. As jy nie 'n funksie in hierdie Uitvoer verskeidenheid lys, sal nie dit gesien word deur eksterne kode modules. Na aanleiding van die uitvoer skikking is die liggaam van die kode, een subroutine op 'n slag. Na al die subroetines gedefinieer, die finale verklaring 1 eindig die module lêer. 1 moet die laaste uitvoerbare lyn in die lêer wees. Kom ons kyk na sommige van die wat in hierdie module funksies. Die eerste funksie om te kyk na die eenvoudige Datum funksie, lyne 43-46, wat die huidige UNIX datum en tyd druk. Daar is geen grense aan hierdie funksie, en dit nie die geval iets betekenisvol weer terug na die oproeper. Let op die gebruik van my voor die datum veranderlike in lyn 44. Die my navraag word gebruik om die omvang van die veranderlike te beperk tot binne die funksies Datum krullerige draadjies. Kode tussen krulhakies word na verwys as 'n blok. Veranderlikes binne 'n blok verklaar is beperk in omvang binne die krullerige draadjies. In 49 en 50, die plaaslike veranderlikes naam en onderwerp is sigbaar vir alle funksies. Jy kan ook veranderlikes verklaar met die plaaslike kwalifiseerder. Die gebruik van plaaslike toelaat dat 'n veranderlike te wees in omvang vir die huidige blok asook vir ander blokke kode geroep vanuit hierdie blok. Dus, 'n plaaslike x verklaar binne 'n blok is sigbaar vir alle daaropvolgende blokke genoem vanuit hierdie blok en kan verwys. In die volgende voorbeeld kode, kan die ToTitled funksies naam veranderlike verkry, maar nie die data in die iPhone. 1 sub Brief :: ToTitled 2 plaaslike (naam) verskuiwing 3 my (telefoon) skuif die voorbeeld kode vir Letter. pm gewys hoe om 'n parameter te onttrek op 'n slag. Die subroutine Om () neem twee parameters op te rig die kop vir die memorandum. Die gebruik van funksies binne 'n module is nie anders as die gebruik van en die definisie van Perl modules binne dieselfde kode lêer. Parameters wat deur verwysing tensy anders vermeld. Veelvuldige skikkings geslaag in 'n subroutine, indien nie uitdruklik dereferenced met behulp van die agteroorskuinsstreep, is saamgevoeg. Die insette verskeidenheid in 'n funksie is altyd 'n verskeidenheid van skalaar waardes. Verbygaande waardes deur verwysing is die voorkeur manier Perl om 'n groot hoeveelheid data te slaag in 'n subroutine. (Sien Hoofstuk 3. quotReferences. quot) Nog 'n Voorbeeld Module: Finansies Die Finansies module word in Listing 4.3, word gebruik om eenvoudige berekeninge voorsiening te maak vir die lening waardes. Die gebruik van die Finansies module is eenvoudig. Al die funksies is geskryf met dieselfde parameters, soos in die formule vir die funksies. Kom ons kyk na hoe die toekomstige waarde van 'n belegging bereken kan word. Byvoorbeeld, as jy belê 'n paar dollars, PV. in 'n band wat 'n vaste persentasie bied, r. toegepas op bekende tussenposes vir N tydperke, wat is die waarde van die verband ten tyde van die verstryking In hierdie geval, sal jy word deur die volgende formule: FV FV (1R) N Die funksie om die toekomstige waarde te kry is verklaar as FutureValue . Verwys na Lys 4.3 om te sien hoe om dit te gebruik. Notering 4.3. Die gebruik van die Finansies module. 1 / usr / bin / perl-w 2 3 stoot (Ing, PWD) 4 gebruik Finansies 5 6 lening 5000,00 7 April 3.5 8 April vanjaar 10 in jare. 9 10 ------------------------------------------------ ---------------- 11 Bereken die waarde aan die einde van die lening as rente 12 elke jaar toegepas word. 13 ------------------------------------------------- --------------- 14 keer vanjaar 15 fv1 Finansies :: FutureValue (lening, April, tyd) 16 Druk quotn Indien rente toegepas aan die einde van yearquot 17 Druk quotn Die toekomstige waarde vir 'n lening van quot. lening. quotnquot 18 Druk quot by 'n April van quot, April quot vir quot, tyd, quot yearsquot 19 printf quot is 8.2f nquot. fv1 20 21 ----------------------------------------------- ----------------- 22 Bereken die waarde aan die einde van die lening as rente 23 elke maand toegepas. 24 ------------------------------------------------- --------------- 25 koers April / 12 26 April tyd jaar 12 in maande 27 fv2 Finansies :: FutureValue (lening, tempo, tyd) 28 29 Print quotn Indien rente toegepas aan die einde van elke monthquot 30 Druk quotn Die toekomstige waarde vir 'n lening van quot. lening. quotnquot 31 Druk quot by 'n April van quot, April quot vir quot, tyd, quot monthsquot 32 printf quot is 8.2f nquot. fv2 33 34 printf quotn Die verskil in waarde is 8.2fquot, fv2 - fv1 35 printf quotn aangesien uit die toepassing van rente teen korter tyd periodsquot 36 printf quotn ons eintlik meer geld kry in interest. nquot Hier is monster toevoer en afvoer van Listing 4.3. testme Indien rente toegepas aan die einde van die jaar Die toekomstige waarde vir 'n lening van 5000 op 'n April van 3,5 vir 10 jaar is 7052,99 Indien rente toegepas aan die einde van elke maand Die toekomstige waarde vir 'n lening van 5000 op 'n April van 3,5 vir 120 maande is 7091,72 Die verskil in waarde is 38,73 aangesien uit die toepassing van rente teen korter tydperke ons eintlik meer geld kry in belang. Die openbaring in die produksie is die resultaat van die vergelyking van waardes tussen fv1 en fv2. Die fv1 waarde is bereken met die toepassing van belang een keer per jaar oor die lewe van die band. fv2 is die waarde as die rente elke maand toegepas op die ekwivalent maandelikse rentekoers. Die Finance. pm pakket word in Listing 4.4 in sy vroeë ontwikkelingstadia. Notering 4.4. Die Finance. pm pakket. 1 pakket Finansies 2 3 vereis Uitvoerder 4 ISA (Uitvoerder) 5 6 head1 Finance. pm 7 8 Finansiële Sakrekenaar - Finansiële berekeninge maklik gemaak met Perl 9 10 hoof 2 11 gebruik Finansies 12 13 PV 10.000,0 14 15 koers 12,5 / 12 April per maand. 16 17 tyd 360 maande vir lening aan volwasse 18 19 FV FutureValue () 20 21 Print FV 22 23 gesny 24 25 UITVOER QW (FutureValue, 26 PresentValue, 27 FVofAnnuity, 28 AnnuityOfFV, 29 getLastAverage, 30 getMovingAverage, 31 SetInterest) 32 33 34 Globals, indien enige 35 36 37 plaaslike defaultInterest 5.0 38 39 sub Finansies :: SetInterest () 40 my koers verskuiwing () 41 defaultInterest koers 42 printf quotn defaultInterest ratequot 43 44 45 -------------- -------------------------------------------------- ---- 46 Notes: 47 1. Die rentekoers r gegee in 'n waarde van 0-100. 48 2. Die N in die terme is die tempo waarteen die rente 49 toegepas word. 50 51 ------------------------------------------------ -------------------- 52 53 ---------------------------- ---------------------------------------- 54 Huidige waarde van 'n belegging gegee 55 FV - 'n toekomstige waarde 56 R - koers per periode 57 n - aantal tydperk 58 ---------------------------------- ---------------------------------- 59 sub Finansies :: FutureValue () 60 my (PV, R, N ) 61 my FV FV ((1 (R / 100)) N) 62 terugkeer FV 63 64 65 ---------------------------- ---------------------------------------- 66 Huidige waarde van 'n belegging gegee 67 FV - 'n toekomstige waarde 68 R - koers per periode 69 n - aantal tydperk 70 ---------------------------------- ---------------------------------- 71 sub Finansies :: PresentValue () 72 my PV 73 my (FV, r, N) 74 FV FV / ((1 (R / 100)) N) 75 terugkeer PV 76 77 78 79 ------------------------ -------------------------------------------- 80 Kry die toekomstige waarde van 'n annuïteit gegee 81 LP - Maandelikse betaling van annuïteit 82 R - koers per periode 83 n - aantal tydperk 84 --------------------------- ----------------------------------------- 85 86 sub FVofAnnuity () 87 my FV 88 my Öner 89 my (LP, R, N) 90 91 Öner (1 r) n 92 FV LP ((Öner - 1) / r) 93 terugkeer FV 94 95 96 ------------ -------------------------------------------------- ------ 97 Kry die annuïteit van die volgende brokkies inligting 98 R - koers per periode 99 N - aantal tydperk 100 FV - Toekomstige Waarde 101 ---------------- -------------------------------------------------- - 102 103 sub AnnuityOfFV () 104 my LP LP - Maandelikse betaling van annuïteit 105 my Öner 106 my (FV, R, N) 107 108 Öner (1 r) n 109 LP FV (R / (Öner - 1)) 110 terugkeer LP 111 112 113 --------------------------------------------- ----------------------- 114 Kry die gemiddelde van die laaste quotnquot waardes in 'n skikking. 115 ------------------------------------------------- ------------------- 116 die laaste telling aantal elemente van die skikking in waardes 117 die totale aantal elemente in waardes is in getal 118 119 sub getLastAverage () 120 my (tel, aantal, waardes) 121 my i 122 123 my 'n 0 124 terugkeer 0 indien (tel 0) 125 vir (i 0 ILT telling i) 126 'n valuesnumber - I - 1 127 128 terugkeer 'n / tel 129 130 131 - -------------------------------------------------- ---------------- 132 Kry 'n bewegende gemiddelde van die waardes. 133 ------------------------------------------------- ------------------- 134 die venster grootte is die eerste parameter, die aantal items in die 135 geslaag skikking is volgende. (Dit kan maklik bereken word binne die 136-funksie met behulp van die funksie skalaar (), maar die subroutine hier 137 getoon word ook gebruik om te illustreer hoe om wysers te slaag.) Die verwysing na die 138 reeks waardes is volgende geslaag, gevolg deur 'n verwysing na die plek 139 die terugkeer waardes moet word gestoor. 140 141 sub getMovingAve () 142 my (tel, aantal, waardes, movingAve) 143 my i 144 my 'n 0 145 my v 0 146 147 terugkeer 0 indien (tel 0) 148 terugkeer -1 indien (tel GT nommer) 149 terugkeer - 2 As (telling LT 2) 150 151 movingAve0 0 152 movingAvenumber - 1 0 153 vir (I0 iltcounti) 154 v valuesi 155 AV / tel 156 movingAvei 0 157 158 vir (icount iltnumberi) 159 v valuesi 160 AV / tel 161 v valuesi - tel - 1 162 'n - v / tel 163 movingAvei n 164 165 terugkeer 0 166 167 168 1 Kyk na die verklaring van die funksie FutureValue met (). Die drie dollar tekens saam dui drie skalaar getalle in die funksie oorgedra. Hierdie ekstra bestekopname is teenwoordig vir bekragtiging van die tipe van die parameters geslaag in die funksie. As jy 'n string in plaas van 'n aantal in die funksie te slaag, sal jy 'n boodskap baie soortgelyk aan hierdie een: Te veel argumente vir Finansies :: FutureValue by ./f4.pl lyn 15, naby quottime) quot uitvoering van. /f4.pl gestaak weens samestelling foute. Die gebruik van prototipes wanneer definieer funksies verhoed dat jy stuur in buiten wat die funksie verwag waardes. Gebruik of om te slaag in 'n verskeidenheid van waardes. As jy verby verwysing, gebruik of om 'n skalaar verwysing na 'n skikking of hash wys, onderskeidelik. As jy nie die agteroorskuinsstreep gebruik, is alle ander vorme in die argument lys prototipe geïgnoreer. Ander tipes disqualifiers sluit 'n ampersand vir 'n verwysing na 'n funksie, 'n asterisk vir enige soort, en 'n kommapunt aan te dui dat alle ander parameters is opsioneel. Nou, kan kyk na die lastMovingAverage funksie verklaring, wat twee heelgetalle bepaal in die voorkant gevolg deur 'n skikking. Die manier waarop die argumente word gebruik in die funksie is om 'n waarde toeken aan elk van die twee skalare, tel en nommer. terwyl al die ander gestuur om die skikking. Kyk na die funksie getMovingAverage () om te sien hoe twee skikkings geslaag om die bewegende gemiddelde te kry op 'n lys van waardes. Die pad na die getMovingAverage funksie noem word in Listing 4.5. Notering 4.5. Die gebruik van die bewegende gemiddelde funksie. 1 / usr / bin / perl-w 2 3 stoot (Ing, PWD) 4 gebruik Finansies 5 6 waardes (12,22,23,24,21,23,24,23,23,21,29,27,26, 28) 7 MV (0) 8 grootte skalaar (waardes) 9 gedrukte quotn waardes om te werk met nquot 10 Druk quot nommer van waardes grootte nquot 11 12 ------------------- --------------------------------------------- 13 Bereken die gemiddeld van die bogenoemde funksie 14 ---------------------------------------------- ------------------ 15 AVE Finansies :: getLastAverage (5, grootte, waardes) 16 Druk quotn Gemiddeld van afgelope 5 dae AVE nquot 17 18 Finansies :: getMovingAve (5, grootte, waardes, MV) 19 Druk quotn bewegende gemiddelde met 5 dae venster N nquot Heres die uitvoer van Listing 4.5: waardes om te werk met nommer van waardes 14 Gemiddeld van afgelope 5 dae 26.2 die () funksie getMovingAverage neem twee skalare en dan twee verwysings om skikkings as skalare. Binne die funksie, is die twee skalare om die skikkings dereferenced vir gebruik as numeriese skikkings. Die teruggekeer stel waardes is ingevoeg in die gebied geslaag in die tweede verwysing. Het die invoer parameters nie vermeld met elke gekla skikking, sou die movingAve verskeidenheid verwysing leë gewees en sou veroorsaak foute tydens looptyd. Met ander woorde, die volgende verklaring is nie korrek nie: sub getMovingAve () Die gevolglike spuug van die fout boodskappe van 'n slegte funksie prototipe is soos volg: Gebruik van geïnitialiseerd waarde by Finance. pm lyn 128. Gebruik van geïnitialiseerd waarde by Finance. pm lyn 128. gebruik van geïnitialiseerd waarde by Finance. pm lyn 128. gebruik van geïnitialiseerd waarde by Finance. pm lyn 128. gebruik van geïnitialiseerd waarde by Finance. pm lyn 128. gebruik van geïnitialiseerd waarde by Finance. pm lyn 133. gebruik van geïnitialiseerd waarde by Finance. pm lyn 135. gebruik van geïnitialiseerd waarde by Finance. pm lyn 133. gebruik van geïnitialiseerd waarde by Finance. pm lyn 135. gebruik van geïnitialiseerd waarde by Finance. pm lyn 133. gebruik van geïnitialiseerd waarde by Finance. pm lyn 135 . Gebruik van geïnitialiseerd waarde by Finance. pm lyn 133. Gebruik van geïnitialiseerd waarde by Finance. pm lyn 135. Gebruik van geïnitialiseerd waarde by Finance. pm lyn 133. Gebruik van geïnitialiseerd waarde by Finance. pm lyn 135. Gebruik van geïnitialiseerd waarde op


No comments:

Post a Comment