Thread Tie::File mit referenziertem Array in package (2 answers)
Opened by sman at 2010-12-09 00:26

Gast sman
 2010-12-09 00:26
#143423 #143423
Hallo,
ich mache gerade erste Schritte mit Tie und möchte nur kurz wissen, ob das, was ich hier tue, mit rechten Dingen zu geht, oder nicht etwa zu schwerwiegenden Speicher/Performance/...-Problemen führt. Ich konnte dazu leider nichts mit google finden.

In meinem Script möchte ich Dateien öffnen, lesen, schreiben, usw.:
Code (perl): (dl )
1
2
3
4
5
6
7
8
use meinpaket;

if ($irgendwas)
{ 
  my $datei = meinpaket->new('file'=>'bla.txt');
  my $einpaarzeilen = $datei->get(4,7,8);
  $datei->set('5'=>'Neue fünfte Zeile');
}


Das Paket meinpaket.pm nutzt nun Tie::File mit Arrayreferenz:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package meinpaket;
use strict;
use Tie::File;
my @a = ();
sub new 
{
  my $c = shift;
  my $s = {};
  my %p = @_;
  $s->{'file'} = $p{'file'};

  tie @a, 'Tie::File', $s->{'file'}, memory=>10000 or return 0;
  $s->{a} = \@a;
  bless $s, $c;
  return $s;
}

sub DESTROY
{
  my $s = shift;
  untie @{$s->{a}};
}

sub get
{
  my $s = shift;
  my @r = ();
  foreach (@_) { push @r, ${$s->{a}}[$_];
  return \@r;
}

sub set
{
  my $s = shift;
  my %p = @_;
  foreach (keys %p) { ${$s->{a}}[$_] = $p{$_}; }
  return 1;
}


Dazu habe ich nun folgende Fragen:
  • Ist das elegant oder eher schauerlich?
  • Arbeitet tie trotz der Referenzen so wie man es erwartet?
  • Bei Beendigung des if-Blockes im Script oben, wird tatsächlich korrekt untie ausgeführt?
  • Angenommen untie wird nicht ausgeführt, dann wenigstens am Ende des Scripts? Oder bleibt die Datei dann schrecklicherweise für immer offen?


Vielen Dank schonmal im Voraus!
Last edited: 2010-12-09 00:33:35 +0100 (CET)

View full thread Tie::File mit referenziertem Array in package