Предаване на параметри

Информация в подпрограма и подпрограмата се предава чрез параметрите (аргументи). специален масив @_ се използва за да подадете параметри подпрограма. Всички параметри се съхраняват в масив елементи $ _ [0], $ _ [1], и така нататък. D. Този механизъм позволява да се предават в произволен брой подпрограма настройки. @_ масив е местно за тази подпрограма, но нейните елементи - псевдоними недвижими параметър скаларна, и промяна на елемент на масив води до промяна @_ съответстващо реалното параметър. В програмния език разлика между пас чрез препратка и по стойност. При преминаване на параметрите по стойност подпрограма получава копие на променливата. Промяна на копия в рамките на подпрограмата не влияе на сайта първоизточник. Когато изпращате параметрите за връзка на подпрограмата има достъп до най-променлива и може да го промените. Предаване на параметри чрез специален набор @_ всъщност параметри на предавателната връзка. В Perl език може да реализира параметър преминаване по стойност, ако вътре подпрограма с помощта на моя () декларирам, локални променливи и да ги възлагат на стойностите на действителните параметри на @_ масива, както в следния пример (Обява 9.3): Обява 9.3. Използването Mu () за предаване на параметри по значение резултат на изпълнение:

масиви на еталонен параметър

Така че, рутината получава и връща параметри чрез специален набор @_. Ако параметърът е масив или хеш спектър на неговите елементи също се съхраняват в @_ параметър масив. При преминаване към подпрограмата няколко параметри масиви или хешове, те губят своята цялост. С други думи, след записване на параметрите масиви (хеш масив) в масива @_ тях невъзможно да се разпределят отделен параметър масив (хеш масив) всички параметри се съхраняват в масива @_ единствен "накуп". За да се запази на предаването в рутина цялост на масив или хеш-масив, трябва да използвате един от двата основни съществуващите подходи.

Използването тип typeglob

На първо място, по-старите, е да се използва вътрешен тип данни, наречен typeglob. Принадлежността към typeglob тип идентифицира с префикс *. Префикс * може да се разглежда като маска, вместо от които може да има някое от $ префикс, @,%, Посочването типа данни на "скаларна", "гама", "хеш решетка", "функция", съответно. Интерпретаторът превръща променлива тип typeglob на, например * ABC, скаларна стойност, която е позоваване на слота в таблицата на символ, съдържащ елементи от различни видове, имащи същото име ABC, и представлява всеки от тези елементи. Например, запис * ABC за представлява съвкупността, както и някои от следните променливи: $ ABC скаларни, масив @abc, хеш% ABC, функционални ABC. Прехвърля се в подпрограма вместо параметър масив или хеш масив съответния тип променлива typeglob се симулира предаване параметъра масив (хеш масив) връзка при запазване целостта си. Вземем примера на Обява 9.4. Обявата 9.4. Използване тип typeglob за предаване на параметри и масиви хеш масиви doublargs подпрограма получава входния масив, и хеш и променя техните елементи на масиви, се умножава по 2. Вместо на масива, и хеш масив в подпрограма предава съответния тип променливи typeglob, които лесно се отделят от масива @ _ като в действителност те са скалари. Обърнете внимание на използването на местни особености. Използвайте вместо функцията на моя () е невъзможно, тъй като тип променлива typeglob не може да бъде местен, то е едно и също име на няколко променливи от различни видове в таблицата със символи. На следващо място, възниква въпросът, как промяната в влияния рутинната масив @mylist промени реалния параметър @somelist. Фактът, че операцията на прехвърляне на форма * = X * Y * х създава синоним на гнездо символ маса * у, така че изпълнението на операции по $ х @ х, х% е еквивалентно на изпълнение на операциите на над $ ш @ ш% в , В резултат на задачата създава известен за mylist * somelist следователно всички промени @mylist масив елементи в рамките на подпрограмата се равнява на промяна масив елементи @somelist. Всичко това е вярно за хеш масиви% myhash и% somehash. Резултатът потвърждава правилността на предаване масив, и хеш масив от връзка: Началните стойности: Общо:

Използването на линкове