Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
 iakovlev.org 
 Languages
 С
 GNU С Library 
 Qt 
 STL 
 Threads 
 C++ 
 Samples 
 stanford.edu 
 ANSI C
 Libs
 LD
 Socket
 Pusher
 Pipes
 Encryption
 Plugin
 Inter-Process
 Errors
 Deep C Secrets
 C + UNIX
 Linked Lists / Trees
 Asm
 Perl
 Python
 Shell
 Erlang
 Go
 Rust
 Алгоритмы
NEWS
Последние статьи :
  Тренажёр 16.01   
  Эльбрус 05.12   
  Алгоритмы 12.04   
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
 
TOP 20
 Rodriguez 3...2366 
 Linux Kernel 2.6...1709 
 Clickhouse...1398 
 Rodriguez 7...1396 
 Mod_perl 2...1395 
 Part 3...1395 
 Trees...1395 
 Стивенс 9...1394 
 ground Up...1393 
 Rodriguez 6...1393 
 Stewens -> IPC 9...1392 
 Robert Love 2...1392 
 M.Pilgrim->Часть 2...1392 
 Cluster 2...1392 
 FAQ...1391 
 Httpd-> История Ap...1391 
 Ethreal 4...1390 
 Kamran Husain...1389 
 Ext4 FS...1389 
 William Gropp...1389 
 
  01.01.2024 : 3621733 посещений 

iakovlev.org
 

Object methods and properties

В данном примере мы рассмотрим создание , использование и наследование пакетов . Создадим скриптовый файл Clock.pm и создадим в нем модуль Clock package Clock; # constructor sub new { my $self = {}; # define variables to store timezone offset from GMT, in hours and minutes, # and city name $self->{offsetSign} = undef; $self->{offsetH} = undef; $self->{offsetM} = undef; $self->{city} = undef; bless($self); return $self; } # method to set the offset hour and minute wrt GMT # this accepts an offset direction # and two numerical parameters, hours and minutes. sub set_offset { my $self = shift; $self->{offsetSign} = shift; $self->{offsetH} = shift; $self->{offsetM} = shift; $self->{city} = shift; } # method to display current time, given offsets sub display { my $self = shift; # use the gmtime() function, used to local convert time to GMT # returns an array @GMTTime = gmtime(); $seconds = @GMTTime[0]; $minutes = @GMTTime[1]; $hours = @GMTTime[2]; # calculate time if($self->{offsetSign} eq '+') { # city time is ahead of GMT $minutes += $self->{offsetM}; if($minutes > 60) { $minutes -= 60; $hours++; } $hours += $self->{offsetH}; if($hours >= 24) { $hours -= 24; } } else { # city time is behind GMT $seconds = 60 - $seconds; $minutes -= $self->{offsetM}; if($minutes < 0) { $minutes += 60; $hour--; } $hours -= $self->{offsetH}; if($hours < 0) { $hours = 24 + $hours; } } # make it look pretty and display it $self->{localTime} = $hours.":".$minutes.":".$seconds; print "Local time in $self->{city} is $self->{localTime}\n"; } 1; В модуле есть такие переменные , как название города , разница между локальным временем и GMT . Теперь создадим скриптовый файл myclock.pm , в котором используем созданный модуль : use Clock; $london = new Clock; $london->set_offset("+", 0, 00, "London"); $london->display(); $bombay = new Clock; $bombay->set_offset("+", 5, 30, "Bombay"); $bombay->display(); $sydney = new Clock; $sydney->set_offset("+", 11, 00, "Sydney"); $sydney->display(); $us_ct = new Clock; $us_ct->set_offset("-", 6, 00, "US/Central"); $us_ct->display(); Вывод будет таким : Local time in London is 8:10:1 Local time in Bombay is 13:40:1 Local time in Sydney is 19:10:1 Local time in US/Central is 2:10:59 Теперь давайте воспользуемся такой перловой фичей , как наследование Создадим еще один скриптовый файл AlarmClock.pm , в котором создадим пакет AlarmClock , унаследованный от модуля Clock . Его содержимое будет таким : package AlarmClock; # tell the new package to use the Clock.pm module require Clock; # make methods available from "Clock" @ISA=("Clock"); 1; В скриптовом файле myclock.pm запишем : #!/usr/bin/perl require AlarmClock; $mumbai = new AlarmClock; $mumbai->set_offset(5,30, "Bombay"); $mumbai->display; Мы получим вывод : Local time in is 5:4:34 Пакет AlarmClock унаследовал все проперти и методы от пакета Clock . @ISA - специальный перловый массив , с помощью которого мы указываем , от кого унаследуется текущий пакет . В пакет AlarmClock мы можем добавлять новые методы , которые будут работать наряду с унаследованными : package AlarmClock; # this tells it to use the Clock.pm module require Clock; # this makes methods available @ISA="Clock"; # simple subroutine to increase the value of the "hours" variable by one sub adjustHoursByOne { my $self=shift; $self->{offsetH}++; } 1; Одной из особенностью перла является то , что все методы по определению виртуальные . Например : создадим в пакете AlarmClock метод display(): package AlarmClock; # lots of code sub display { print "This clock is broken. Aargh!!\n"; } 1; Теперь , если в myclock.pm вызвать такой код : #!/usr/bin/perl require AlarmClock; $mumbai = AlarmClock->new; $mumbai->set_offset(5,30, "Bombay"); $mumbai->display; то будет вызван AlarmClock-ский display(). Если же нам нужно , чтобы вызывался Clock-ский display() , прийдется прописать : #!/usr/bin/perl require AlarmClock; $mumbai = AlarmClock->new; $mumbai->set_offset(5,30, "Bombay"); $mumbai->Clock::display; Что касается деструкторов : обьекты в перле удаляются автоматически , если на них нет ссылок , или сразу после использования скрипта . Пример использования деструктора : package AlarmClock; # lots of code sub DESTROY { print "I'm outta here!\n"; } 1;
Оставьте свой комментарий !

Ваше имя:
Комментарий:
Оба поля являются обязательными

 Автор  Комментарий к данной статье