in reply to C to Perl

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;

Replies are listed 'Best First'.
Re: Re: C to Perl
by Thelonius (Priest) on Apr 05, 2003 at 01:53 UTC
    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.
      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.