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


in reply to How to concatenate N binary buffers?

. is the concatenation operator. Rather than writing 2 * $bufsize, remember how much you have read:
my $size1 = sysread $in1, my $buf1, $bufsize;
لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

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

    Thanks,
    I was wondering if "." could change in some way the content of the two buffers. Since it's string concatenation operator, I was worried that some sort of "stringification" of the two buffers could change them some way (this is why I asked if there's a way to concat two binary buffers). I am still not sure about this.

    Regarding the size of the read data: I am actually trying to put back together some stripes from a dead raid array, so if I am not able to read exactly $bufsize bytes I'd better die away asap :)

    Thanks a lot!

      I was wondering if "." could change in some way the content of the two buffers. Since it's string concatenation operator, I was worried that some sort of "stringification" of the two buffers could change them some way (this is why I asked if there's a way to concat two binary buffers). I am still not sure about this.

      Perl's strings are "8-bit-clean". You can store binary data in them, and you can use all string operators on them, even if you consider your data binary. Stringification does not happen here, because for Perl, the data is already a string.

      Regarding the size of the read data: I am actually trying to put back together some stripes from a dead raid array, so if I am not able to read exactly $bufsize bytes I'd better die away asap :)

      Consider using dd conv=noerror, dd_rescue or ddrescue instead of Perl. If you care about your data, don't touch it and pay experts to rescue the data.

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)
        Consider using dd conv=noerror, dd_rescue or ddrescue instead of Perl.

        Already done. I'm reading from the dd'ed data, in fact.

        If you care about your data, don't touch it and pay experts to rescue the data.

        Buddy, now you're underestimating me ;)