http://www.perlmonks.org?node_id=1003761


in reply to Re^2: How to concatenate N binary buffers?
in thread How to concatenate N binary buffers?

does the "." operator change the buffers or not?
T.I.T.S. Or, Try It To See.:
# perl -E '$s .= chr for 0 .. 31; say $s' | xxd 0000000: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f ................ 0000010: 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f ................ 0000020: 0a
I'll have no time to benchmark
I am afraid we will have no time to answer.
لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

Replies are listed 'Best First'.
Re^4: How to concatenate N binary buffers?
by mantager (Sexton) on Nov 16, 2012 at 14:45 UTC

    So I took the time to benchmark:

    $ ./syswrite_or_concat.pl 1000000 Double syswrite: timethis 1000000: 2 wallclock secs ( 0.43 usr + 0.94 sys = 1.37 CPU +) @ 729927.01/s (n=1000000) Data concat: timethis 1000000: 1 wallclock secs ( 0.32 usr + 0.45 sys = 0.77 CPU +) @ 1298701.30/s (n=1000000) Data join: timethis 1000000: 1 wallclock secs ( 0.37 usr + 0.46 sys = 0.83 CPU +) @ 1204819.28/s (n=1000000)
    #!/usr/bin/env perl # ex: set tabstop=4 et syn=perl: use strict; use warnings; use 5.010.001; use Benchmark qw(timethis); use Fcntl; my $count = shift || 1_000_000; my $file = '/dev/shm/outfile'; my $bufsize = 256; my $data1 = chr(1) x $bufsize; my $data2 = chr(2) x $bufsize; say "Double syswrite: "; my $out; sysopen($out, $file, O_WRONLY|O_CREAT) or die "unable to write on $file"; timethis($count, sub { syswrite ($out, $data1, $bufsize) == $bufsize or die "unable to write whole data1 buffer"; syswrite ($out, $data2, $bufsize) == $bufsize or die "unable to write whole data2 buffer"; }); close $out; say "Data concat:"; sysopen($out, $file, O_WRONLY|O_CREAT) or die "unable to write on $file"; my $doublebuf = 2 * $bufsize; timethis($count, sub { syswrite ($out, $data1.$data2, $doublebuf) == $doublebuf or die "unable to write all data"; }); close $out; say "Data join:"; sysopen($out, $file, O_WRONLY|O_CREAT) or die "unable to write on $file"; timethis($count, sub { syswrite ($out, join('', $data1, $data2), $doublebuf) == $doublebu +f or die "unable to write all data"; }); close $out; unlink $file;