Я прошу вас о помощи на материалах Perl.Сделайте класс на Perl (класс :: Std)
настоящее время у меня мой код работает хорошо, создавая новый объект, а затем использовать его, чтобы запустить функцию, но я хотел бы использовать более современные способы кодирования с Perl (используя class:Std
и интегрированный BUILD
/START
функции)
Так прямо сейчас мой код выглядит, что я называю new
с пути в лог-файл, а затем запустить одну функцию:
# Called from another perl script
use MyClass;
my $Obj = MyClass->new('/usr/me/path.log');
$Obj->run();
# My module
package MyClass;
sub new {
shift if (defined($_[0] eq 'MyClass'));
my %args = validate(@_,{ LogPath => { type => SCALAR, optional => 0 }, });
my $self;
$self->{plistPath} = $_[1];
return bless $self;
}
sub run {
my $self = shift;
...
...
}
и то, что я хотел бы иметь это, например, что:
use Class::Std
sub BUILD {
my $self = shift;
my $ident = shift;
my %args = validate(@_, { LogPath => { type => SCALAR, optional => 0 }, });
print "My log path:".$args{LogPath}."\n";
$self->{logPath} = $args{LogPath};
return bless $self;
}
sub run {
my $self = shift;
print $self->{logPath};
....
}
Но это не работает, оно хорошо печатает путь журнала в BUILD
(я просто хотел проверить здесь, если он работает), но я не могу его зарегистрировать в $self->{logPath}
, чтобы использовать его в мои другие функции. Это говорит мне, что это не ссылка Хэша.
Из учебников, которые я сделал, я думаю, что BUILD
не должен возвращать $self
, поскольку он создается автоматически с помощью , но я не знаю, как это сделать.
Ваша помощь будет принята с благодарностью, если у вас есть какие-либо советы.
Большое спасибо, Тим.
Я бы порекомендовал против использования 'Class :: STD' ... Это было частью наизнанку класса вещь, которая была краткой причудой. Это делает все громоздким. –