Сейчас попробую.<br><br>Спасибо.<br><br><div class="gmail_quote">2 октября 2012 г., 16:01 пользователь Andrij Panov <span dir="ltr"><<a href="mailto:andreparker@gmail.com" target="_blank">andreparker@gmail.com</a>></span> написал:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi.<br>
<br>
2012/10/2 Artem Zhuravlev <<a href="mailto:zhuravlev.artem.vasilyevich@gmail.com">zhuravlev.artem.vasilyevich@gmail.com</a>>:<br>
<div class="im">> Быть может не правильно выразился.<br>
><br>
> У меня есть Объект который создается при запуске сценария и в его данных<br>
> есть объект входа в базу, и набором методов. Я могу добраться к данным<br>
> методам как и главном сценарии так и в Пакете Core. Но как сделать это ж<br>
> другом пакете к примеру Test.pm.<br>
><br>
> Суть в следующем я могу добраться к параметрам объекта $query<br>
> (CGI::Fast->new()) когда мы попытаемся перейти на  страничку /?page=one.<br>
><br>
> Есть некий пакет One.pm который будет загружаться при переходе в котором<br>
> будет обращение в базе и выводом определенных данных.<br>
><br>
> Как в пакете One.pm мне достучаться к методам работающими с базой.<br>
<br>
</div>Не проще ли в метод который будет вызываться из One.pm передавать<br>
указатель на Core?<br>
<br>
One::handler($init, @other_args);<br>
<div><div class="h5"><br>
<br>
> Быть может рассуждаю не верно. Только учусь.<br>
><br>
> Спасибо по этой статье и начинал осваивать ООП.<br>
><br>
> 2 октября 2012 г., 15:04 пользователь Alexandr Alexeev <<a href="mailto:afiskon@gmail.com">afiskon@gmail.com</a>><br>
> написал:<br>
><br>
>> Не уверен, что полностью понял ваш вопрос, но надеюсь, это вам пригодится:<br>
>><br>
>> 1. Не работайте с атрибутами напрямую, пишите вокруг них<br>
>> обертки-методы. Если лень писать, используйте Mouse например.<br>
>> 2. Не похоже, что в вашем случае требуется использовать наследование.<br>
>> Вообще наследованием часто злоупотребляют, настоящая потребность в нем<br>
>> возникает довольно редко. Вам точно не подойдет делегирование?<br>
>> 3. Разобраться с ООП в Perl может помочь эта заметка:<br>
>> <a href="http://eax.me/perl5-oop/" target="_blank">http://eax.me/perl5-oop/</a> На самом деле там все довольно просто - bless<br>
>> превращает переменную в объект, а оператор стрелка преобразует вызов<br>
>> $obj->method($a, $b) в MyPackage::method($obj, $a, $b);<br>
>><br>
>> 2012/10/2 Artem Zhuravlev <<a href="mailto:zhuravlev.artem.vasilyevich@gmail.com">zhuravlev.artem.vasilyevich@gmail.com</a>>:<br>
>> > Помогите, окончательно запутался.<br>
>> ><br>
>> > Есть сценарий<br>
>> ><br>
>> > #!/usr/bin/perl -w<br>
>> > BEGIN {<br>
>> > $ENV{FCGI_SOCKET_PATH} = ":8000";<br>
>> > $ENV{FCGI_LISTEN_QUEUE} = 10;<br>
>> > use CGI::Carp qw/carpout/;<br>
>> > open LOG, ">>", "carp.log" or die("Cannot open file: $!\n");<br>
>> > carpout(LOG);<br>
>> > use lib "/home/artem/FCGI";<br>
>> > }<br>
>> > use strict;<br>
>> > use 5.010;<br>
>> > use HTML::Template;<br>
>> > use Data::Dumper;<br>
>> > use engine::class::Page;<br>
>> > use engine::class::Core;<br>
>> > use CGI::Fast;<br>
>> > use POSIX qw(strftime);<br>
>> > our $query_cnt = 0;<br>
>> > our $query;<br>
>> ><br>
>> > while($query= CGI::Fast->new()) {<br>
>> > print "Content-type: text/html\n\n";<br>
>> > eval{<br>
>> > $query_cnt++;<br>
>> > my $init = Core->new($query_cnt);<br>
>> > #say Dumper ($init);<br>
>> > foreach my $get ($init->{db}->query("select * from city")){<br>
>> > say $get->{name}." || ";<br>
>> > }<br>
>> > };<br>
>> > if ($@){<br>
>> > my $now_string = strftime "%Y-%m-%d %H:%M:%S", localtime;<br>
>> > open FILE, ">>", "carp.log" or next("Cannot open file: $!\n");<br>
>> > print FILE "[".$now_string."][Eval error]".$@."\n";<br>
>> > close FILE;<br>
>> > }<br>
>> > }<br>
>> ><br>
>> ><br>
>> > пакеты и классы<br>
>> ><br>
>> > #!/usr/bin/perl<br>
>> > package Core;<br>
>> > use engine::class::DB;<br>
>> > @ISA = qw/DB/;<br>
>> > use warnings;<br>
>> > use strict;<br>
>> > use 5.010;<br>
>> > sub new {<br>
>> > my $class = shift;<br>
>> > my $self = {<br>
>> > version => '1.0',<br>
>> > };<br>
>> > bless $self, $class;<br>
>> > $self->init(@_);<br>
>> > $self->db();<br>
>> > return $self;<br>
>> > }<br>
>> > sub init{<br>
>> > my $self = shift;<br>
>> > $self->{query_cnt} = shift;<br>
>> > return $self;<br>
>> > }<br>
>> > sub db {<br>
>> > my $self = shift;<br>
>> > my $db = DB->dbconnect("логин", "пароль", "база" , "хост", "utf8",<br>
>> > "utf8" ,<br>
>> > "180" );<br>
>> > $self->{db} = $db;<br>
>> > return $self;<br>
>> > }<br>
>> > return 1;<br>
>> ><br>
>> ><br>
>> > #!/usr/bin/perl<br>
>> > package DB;<br>
>> > use DBI;<br>
>> > use strict;<br>
>> > use warnings;<br>
>> ><br>
>> > sub dbconnect<br>
>> > {<br>
>> > my $class = shift;<br>
>> > my $self = {<br>
>> > _login => shift,<br>
>> > _password => shift,<br>
>> > _dbname => shift,<br>
>> > _host => shift,<br>
>> > _charset => shift,<br>
>> > _names => shift,<br>
>> > _timeout => shift,<br>
>> > };<br>
>> > bless $self, $class;<br>
>> > $self->connect();<br>
>> > return $self;<br>
>> > }<br>
>> ><br>
>> ><br>
>> > sub connect<br>
>> > {<br>
>> > my $self = shift;<br>
>> > $self->{_base} =<br>
>> > DBI->connect("DBI:mysql:database=$self->{_dbname};host=$self->{_host}",<br>
>> > "$self->{_login}", "$self->{_password}") or die "Unable to connect:<br>
>> > $DBI::errstr\n";<br>
>> > $self->{_base}->do("SET charset $self->{_charset}");<br>
>> > $self->{_base}->do("SET names $self->{_names}");<br>
>> > $self->{_base}->do("SET session wait_timeout=$self->{_timeout}");<br>
>> > }<br>
>> ><br>
>> > sub query<br>
>> > {<br>
>> > my( $self, $query ) = @_;<br>
>> > $self->connect() unless $self->{_base}->ping();<br>
>> > my $sth = $self->{_base}->prepare($query);<br>
>> > $sth->execute;<br>
>> > return (@{$sth->fetchall_arrayref({})}) and $sth->finish;<br>
>> > }<br>
>> ><br>
>> > sub query_rw<br>
>> > {<br>
>> > my( $self, $query ) = @_;<br>
>> > $self->connect() unless $self->{_base}->ping();<br>
>> > $self->{_base}->do($query);<br>
>> > }<br>
>> ><br>
>> > sub disconnect<br>
>> > {<br>
>> > my $self->{_base}->disconnect;<br>
>> > }<br>
>> ><br>
>> > sub db_handle<br>
>> > {<br>
>> > my $self = shift;<br>
>> > return $self->{_base};<br>
>> > }<br>
>> ><br>
>> ><br>
>> > return 1;<br>
>> ><br>
>> ><br>
>> > Как мне построить наследование, что б в неком пакете Test я мог<br>
>> > добраться до<br>
>> > объекта коннекта в базу из Core->{db} и использовать методы класса DB.<br>
>> ><br>
>> > В основном сценарии все работает в вот в последующем не получается<br>
>> > добраться.<br>
>> ><br>
>> > Спасибо.<br>
>> ><br>
>> ><br>
>> > --<br>
>> > Moscow.pm mailing list<br>
>> > <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
>> ><br>
>><br>
>><br>
>><br>
>> --<br>
>> С уважением, Александр<br>
>> Личный блог: <a href="http://eax.me/" target="_blank">http://eax.me/</a><br>
>> Мой форум: <a href="http://it-talk.org/" target="_blank">http://it-talk.org/</a><br>
>> Мой Twitter: <a href="http://twitter.com/afiskon" target="_blank">http://twitter.com/afiskon</a><br>
>> --<br>
>> Moscow.pm mailing list<br>
>> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
><br>
><br>
><br>
> --<br>
> Moscow.pm mailing list<br>
> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
><br>
<br>
<br>
<br>
--<br>
</div></div>Best regards,<br>
Andrij Panov.<br>
<div class="HOEnZb"><div class="h5">--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
</div></div></blockquote></div><br>