creating021 escribiste:Si, claro:
- Código: Seleccionar todo
#....
sub new {
my ($pkg, $nam) = @_;
my $delf = {};
$self->{OO} = $name;
bless($self, $pkg);
return $self;
}
sub Open {
my $oo = shift;
my @array;
tie @array, 'Tie::File', $oo->{OO} or die "$file->{OO}: $!";
$oo->{Title} = $array[42];
#....
}
Ahí la pregunta es como hacer un return al array, manteniendolo en tie y como un array para poder modificar algunas líneas en otro sub.
Simplemete llamo cada funcion de Tie::File en diferentes subs.
La idea es hacer una pequeña "base de datos" para un spider.
Gracias!
Que tal,
Creo que lo que intentas hacer es almacenar tu Tie dentro del objeto para que persista durante la vida de él y poder acceder al Tie en cualquier otro método.
Hay 2 variantes que se me ocurren, la primera, la mas "sencilla" de concebir, es almacenando una referencia al tie dentro de tu objeto, ya que es como normalmente manejas los atributos de instancia en Perl. La segunda es que tu objeto realmente sea el Tie, ejemplo para este caso lo encuentras en "Object Oriented Perl" de Damian Conway y técnicas similares.
La solución al primero sería algo como esto:
- Código: Seleccionar todo
package TieDB;
use strict;
use warnings;
use Tie::File;
sub new {
my ( $class, $file ) = @_;
return bless { file => $file }, $class;
}
sub open {
my ( $self ) = @_;
tie my @file, 'Tie::File', $self->{file} or die $!;
$self->{tie} = \@file;
print $self->{tie}[-1]; # imprimimos la ultima linea
}
sub close {
my ( $self ) = @_;
untie @{ $self->{tie} };
}
1;
Saludos,