Быть может не правильно выразился. <br><br>У меня есть Объект который создается при запуске сценария и в его данных есть объект входа в базу, и набором методов. Я могу добраться к данным методам как и главном сценарии так и в Пакете Core. Но как сделать это ж другом пакете к примеру Test.pm. <br>
<br>Суть в следующем я могу добраться к параметрам объекта $query (CGI::Fast->new()) когда мы попытаемся перейти на  страничку /?page=one.<br><br>Есть некий пакет One.pm который будет загружаться при переходе в котором будет обращение в базе и выводом определенных данных. <br>
<br>Как в пакете One.pm мне достучаться к методам работающими с базой. <div><br></div><div>Быть может рассуждаю не верно. Только учусь. </div><div><br></div><div>Спасибо по этой статье и начинал осваивать ООП.<br><br><div class="gmail_quote">
2 октября 2012 г., 15:04 пользователь Alexandr Alexeev <span dir="ltr"><<a href="mailto:afiskon@gmail.com" target="_blank">afiskon@gmail.com</a>></span> написал:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Не уверен, что полностью понял ваш вопрос, но надеюсь, это вам пригодится:<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>
<div><div class="h5">> Помогите, окончательно запутался.<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", "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>
> объекта коннекта в базу из Core->{db} и использовать методы класса DB.<br>
><br>
> В основном сценарии все работает в вот в последующем не получается<br>
> добраться.<br>
><br>
> Спасибо.<br>
><br>
><br>
</div></div>> --<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>
<span class="HOEnZb"><font color="#888888"><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>
</font></span></blockquote></div><br></div>