Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
 iakovlev.org 
      Languages 
      Kernels 
      Packages 
      Books 
      Tests 
      OS 
      Forum 
      Математика 
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
 Advanced Bash Scripting G...1859 
 Ethreal 4...1286 
 Secure Programming for Li...1060 
 CPAN-> FAQ...950 
 Intel 386...630 
 Тренажёр...510 
 Go Web ...494 
 Trees...425 
 Ethreal 1...423 
 Максвелл 3...393 
 Alg1...381 
 Rust...369 
 C + UNIX...348 
 Ext4 FS...344 
 Assembler...341 
 William Gropp...337 
 Mod_parrot...329 
 2.0-> Linux IP Networking...326 
 Benchmark...320 
 Rodriguez 6...316 
 
  01.01.2025 : 3803065 посещений 

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

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

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