Я пытаюсь создать класс Perl LogManager , который будет использоваться для записи журналов в файл.Для этого я написал Class :: Std class со следующими спецификациями
package LogManager;
use strict;
use warnings;
use Class::Std;
use FileHandle;
my %fName : ATTR( :name<fName> :default<"log">);
my %fLocation : ATTR( :name<fLocation> :default<"./">);
my %fHandle : ATTR( :name<fHandle> :default<undef>);
sub START {
my ($self, $ident, $args_ref) = @_;
my $logfile = $self->get_fLocation(). '/' . $self->get_fName();
$self->set_fHandle(FileHandle->new("> $logfile"));
}
sub log {
my ($self, $msg) = @_;
print $self->get_fHandle(), $msg;
}
1;
Что я знаю о Class :: Std, так это то, что можно использовать функции get и set (например, get_fName(), set_fName ()) для чтения и записи значений атрибутов.Итак, я определил START () функцию , как указано выше.
Я использовал этот объект следующим образом
my $fh = LogManager->new();
LogManager::log($fh, "This is my log");
Однако вместо записи в файл,на терминале печатается следующее
FileHandle=GLOB(0x5dcdd0)This is my log
Я мог бы подумать о причине этого.В третьей строке функции START () - происходит нечто иное, чем то, что я намереваюсь - (может быть, это копирование адреса объекта дескриптора файла - это предположение).
Я новичок вPerl, и не могу придумать другой способ установить дескриптор файла.Теперь я мог бы подумать о создании обычного класса вместо Class :: Std и написать что-то вроде
my $fHandle = FileHandle->new("> $logfile");
Но, что я хотел знать - есть ли способЯ могу добиться того же, используя Class :: Std , с некоторыми изменениями в приведенном выше коде?