in reply to Re: C to Perl
in thread C to Perl

tall man writes:
Here is a start. Depending on the size of cmd, you can adjust the padding of the Z part.
use strict; my $cc = "whatever"; # Pack a length and the cc string into a cmd field. $cc .= "\015"; my $index = length($cc); my $cmd = pack 'iZ10',$index,$cc;
You can use Z* instead of Z10, so you don't have to change the number. Strictly speaking it would be better to "A" instead of "Z" since the original doesn't include the "\0", but it won't really matter since the length at the beginning doesn't include it either. There's also a bit of a short cut in recent Perl's (5.6 and later, I think):
$cc .= "\015"; my $cmd = pack "i/A*", $cc;
which automatically takes the length for the integer.

Replies are listed 'Best First'.
Re^3: C to Perl
by tall_man (Parson) on Apr 06, 2003 at 00:35 UTC
    You can use Z* instead of Z10

    I disagree, because the original code fills cmd with null bytes first before filling in the size and the string. To get the same effect we need a null-padded string in the pack.

    I imagine this code to be part of a symbol table with fixed-length cmd records, so the exact size could matter.