Perl: классы, и файловые дескрипторы

Модератор: Модераторы разделов

Аватара пользователя
agbr
Сообщения: 486
ОС: openSUSE 10.2

Perl: классы, и файловые дескрипторы

Сообщение agbr »

Проблема такая:

есть класс, он работает с файлом, который открывает open'ом, для этого нужен файловый дескриптор.

т.е. обычно пишется типа

Код: Выделить всё

open(F,"file");
print F "text";
close(F);


но файловый дескриптор должен является членом объекта, т.е. нечто типа $self->{F}...

вопрос:

как это правильно написать, а то я уже мозги себе взорвал... :(
jabber: agbr@jabber.ru

против проприетарного ПО в GNU/Linux
Спасибо сказали:
Аватара пользователя
AndyX
Сообщения: 116

Re: Perl: классы, и файловые дескрипторы

Сообщение AndyX »

А почему бы не использовать, например, IO::File?

Код: Выделить всё

 $fh = new IO::File "> file";
if (defined $fh) {
     print $fh "bar\n";
     $fh->close;
}

А вообще-то сохранить дескриптор в переменной можно вроде бы так:

Код: Выделить всё

$var = *F;
I am in shape. Round is a shape.
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: Perl: классы, и файловые дескрипторы

Сообщение madskull »

Есть стандартный модуль FileHandle - довольно прозрачный и удобный
ArchLinux / IceWM
Спасибо сказали:
alpha
Сообщения: 4

Re: Perl: классы, и файловые дескрипторы

Сообщение alpha »

(agbr @ Суббота, 18 Декабря 2004, 16:57) писал(а):Проблема такая:

есть класс, он работает с файлом, который открывает open'ом, для этого нужен файловый дескриптор.

т.е. обычно пишется типа

Код: Выделить всё

open(F,"file");
print F "text";
close(F);


но файловый дескриптор должен является членом объекта, т.е. нечто типа $self->{F}...

вопрос:

как это правильно написать, а то я уже мозги себе взорвал... :(


код кривой.
если ты хочешь

print F "text";

то надо не

open(F,"file");

а

open(F,">file");

или

open(F,">>file");

Т.Е.

package my_class;

use Exporter;

@ISA = qw(EXPORTER);

@EXPORT = ...

bla bla

sub mfopen()
{
return(open(TF, >>@_));
}

ЗЫ: не проверял... сугубо теория. рук.-ног. не бить!
Спасибо сказали: