Thread substr(): Alternative gesucht (15 answers)
Opened by bloonix at 2007-07-02 15:44

bloonix
 2007-07-02 15:44
#78132 #78132
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo Community,

ich suche eine Alternative zu substr() um einen binären String Byteweise
in einer Schleife zu verarbeiten. Was mir an substr() nicht gefällt ist,
dass der $string jedesmal an substr() übergeben wird, lieber wäre es
mir, wenn ich den String "irgendwohin gebe" und den String dann in
8 Byte Häppchen zurück bekomme. Gibt es eine andere Möglichkeit?
Hier mein Codebeispiel mit substr():

Code: (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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
use strict;
use warnings;
use Storable;

package Parent;

sub run {
  my $pipe = shift;

  # der zu sendende String
  my $string  = 'Hello World!';
     $string  = Storable::nfreeze(\$string);
  my $length  = length($string);

  # maximale Bytes die geschrieben werden sollen
  my $maxbyt  = 8;
  my $offset  = 0;
  my $rest    = $length;
  my $sdsz    = $length < $maxbyt ? $length : $maxbyt;

  open my $fh, '>>', $pipe or die $!;

  while (my $chunk = substr($string, $offset, $sdsz)) {
     syswrite($fh, $chunk, $sdsz) == $sdsz or die;
     $rest -= $maxbyt;
     last unless $rest;
     $offset += $maxbyt;
     $sdsz = $rest if $rest < $maxbyt;
  }  

  close $fh;
}

package Child;

sub run {
  my $pipe   = shift;
  my $rdsz   = 8;
  my $string = ();

  open my $fh, '<', $pipe or die $!;

  while (my $byt = read($fh, my $chunk, $rdsz)) {
     die unless $byt == $rdsz;
     $string .= $chunk;
  }  

  close $fh;

  $string = Storable::thaw($string);
  print "\n<$$string>\n";
}

package main;

use POSIX qw/mkfifo/;

my $pipe = int(rand(999999));
mkfifo($pipe, 0600) or die;

if (fork) {
  Parent::run($pipe);
} else {
  Child::run($pipe);
unlink($pipe);
}


Gruss,
opi\n\n

<!--EDIT|opi|1183376728-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.

View full thread substr(): Alternative gesucht