Thread logfile option in File::Unpack führt zu Fehler (3 answers)
Opened by lawnmover at 2011-09-11 20:23

topeg
 2011-09-12 11:36
#152302 #152302
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Der Code in CPAN:File::Unpack ist nicht ganz korrekt.

Der Fehler kommt hier:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
sub log
{
  my ($self, $text) = @_;
  if (my $fp = $self->{lfp})
    {
      my $r = $fp->syswrite($text);
      die "$r=log($self->{logfile}): write failed: $text\n" if $r != length($text);
      $self->{lfp_printed}++;
    }
}


syswrite umgeht den Perl-IO-Layer und schreibt direkt auf das Systemhandle. Bei open($self->{lfp}, '>', \$scalar) existiert aber kein Systemhandle in das geschrieben werden könnte. Es spielt sich alles im IO-Layer ab.

besser wäre also:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
sub log
{
  my ($self, $text) = @_;
  if (my $fp = $self->{lfp})
    {
      die "log($self->{logfile}): print failed: $text\n" if(!$fp->print($text));
      $self->{lfp_printed}++;
    }
}

Einen Bugreport habe ich gerade abgesendet.
https://rt.cpan.org/Public/Bug/Display.html?id=708...

Als temporale Abhilfe, bis das Problem gelöst ist überschreibe die Methode File::Unpack::log in deinem Code:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
sub File::Unpack::log
{
  my ($self, $text) = @_;
  if (my $fp = $self->{lfp})
    {
      die "log($self->{logfile}): print failed: $text\n" if(!$fp->print($text));
      $self->{lfp_printed}++;
    }
}

View full thread logfile option in File::Unpack führt zu Fehler