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
 Linux Kernel 2.6...5164 
 Trees...935 
 Максвелл 3...861 
 Go Web ...814 
 William Gropp...795 
 Ethreal 3...779 
 Ethreal 4...766 
 Gary V.Vaughan-> Libtool...764 
 Rodriguez 6...755 
 Steve Pate 1...748 
 Clickhouse...748 
 Ext4 FS...748 
 Ethreal 1...736 
 Secure Programming for Li...719 
 C++ Patterns 3...711 
 Ulrich Drepper...692 
 Assembler...687 
 DevFS...655 
 Стивенс 9...644 
 MySQL & PosgreSQL...621 
 
  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;
Оставьте свой комментарий !

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

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