http://qs1969.pair.com?node_id=858471


in reply to Re^3: How to sort record using pack function ?
in thread How to sort record using pack function ?


You are answer my question. Thank you very much. I am still analyzed how to replace between your query with mine
My query $length = unpack "C4", substr $data,0,2,''; Your query my ($n) = unpack 'x v', $raw;

Replies are listed 'Best First'.
Re^5: How to sort record using pack function ?
by ikegami (Patriarch) on Sep 02, 2010 at 04:48 UTC
    You didn't show what your $data contains, but you seem to be working with the hex representation of the data instead of working on the data represented. Don't convert your data to hex; that just complicates things.
Re^5: How to sort record using pack function ?
by AnomalousMonk (Archbishop) on Sep 02, 2010 at 04:20 UTC

    The example code in my first reply was based on certain assumptions, in particular, that the data you are dealing with is raw binary. My example code may have no bearing on the actual problem you face.

    $length = unpack "C4", substr $data,0,2,'';

    As to your code, my interpretation is:

    • Two characters are taken from the beginning of the string  $data and replaced with the empty string;
    • An attempt is made to unpack four unsigned bytes from the extracted two-character string;
    • Then the first of the four unpacked bytes (only two of which can actualy exist) is stored in  $length and the rest are thrown away.
    This doesn't really seem to make a lot of sense. See code example below.

    >perl -wMstrict -le "my $data = 'ABCDEF'; my $len = unpack 'C4', substr $data, 0, 2, ''; print $len; print qq{'$data'}; " 65 'CDEF'