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
Последние статьи :
  Алгоритмы 12.04   
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
  SQL 30.07   
  Python 10.06   
 
TOP 20
 Part 3...266 
 Part 4...263 
 Kamran Husain...173 
 Commands...171 
 Secure Programming for Li...166 
 2.0-> Linux IP Networking...139 
 Сетунь...113 
 Stein-MacEachern-> Час...112 
 Ethreal 1...112 
 Python...108 
 C++ Patterns 2...108 
 Trees...108 
 Steve Pate 2...108 
 Part 2...107 
 Httpd-> История Ap...107 
 VPN...107 
 Intel 386...106 
 Plusquellic 1...106 
 Steve Pate 3...106 
 William Gropp...105 
 
  01.10.2020 : 2983014+ посещений 

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;
Оставьте свой комментарий !

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

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