Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

...

11:     return @ring;

...

14: while (1) { my $ring=create_ring(10) }

В двух последних примерах по окончании выполнения блока мы будем терять ссылку на элемент массива (в первом) или ссылку на сам массив (во втором), но данные массива, уже никому не доступные, будут бережно сохраняться системой сборки мусора.

Один из способов освободить память – разорвать этот круг (вернее, ring) вручную, добавив в конец блока соответствующую инструкцию:

...

14: while (1) {

15:     my $ring=create_ring(10);

16:     $ring->[0]{'next_ref'}=undef;

17: }

Одного разрыва вполне достаточно, чтобы система сборки мусора один за другим удалила все элементы структуры, но этот способ не выглядит изящно. Мы просто взяли на себя труд убрать мусор, но так и не заставили работать над этим интерпретатор Perl. Неужели всё так безнадёжно? Нет! В Perl есть механизмы, позволяющие «растолковать» ему все детали нашего замысла, я говорю об объектно-ориентированном подходе.

Первый пример будет основан на связывании переменной с классом[3].

Я буду рассчитывать на то, что читатель знает об устройстве модулей Perl и знаком с механизмом связывания объектов с переменными. Вкратце скажу, что Perl позволяет[4] ассоциировать переменную с классом с помощью оператора tie. После такого связывания переменная начинает жить по собственным законам, при любой манипуляции с ней вызываются соответствующие методы объекта, с которым она связана.

Вот код, реализующий обозначенный подход:

01: #!/usr/bin/perl -w

02:

03: package MyRing;

04:

05: sub create_ring {

06:     my ($length)=@_;

07:     my @ring=({'value' => 0})x$length;

08:     for (my $i=0; $i<$length; $i++) {

09:         $ring[$i]{'next_ref'}=$ring[($i+1)%$length];


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153] [154] [155] [156] [157] [158] [159] [160]
[161] [162] [163] [164] [165] [166] [167] [168] [169] [170] [171] [172] [173] [174] [175] [176] [177] [178] [179] [180]
[181] [182] [183] [184] [185] [186] [187]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2016 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100