http://qs321.pair.com?node_id=102326

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Can you translate this Perl code to C ?

($header, $body) = split(/\n\n/, $CONFIG{'Variable'}, 2);
$header =~ /^Number: (.+)/m and $number = $1;

Thanks,
John

Replies are listed 'Best First'.
Re: Translate Perl to C
by nardo (Friar) on Aug 06, 2001 at 01:54 UTC
    In addition to strtok which was already mentioned, your platform may provide a regcomp function for regular expressions:
    #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <regex.h> int main(void) { char *header = "This is a sample header\nNumber: 12345\nThis is ano +ther line\n"; char *number = NULL; regex_t re; regmatch_t pmatch[2]; int retval; regcomp(&re, "^Number: (.+)", REG_EXTENDED | REG_NEWLINE); retval = regexec(&re, header, sizeof(pmatch)/sizeof(*pmatch), pmatc +h, 0); if(retval == 0 && pmatch[1].rm_so != -1) { size_t len = pmatch[1].rm_eo - pmatch[1].rm_so; number = malloc(len + 1); memcpy(number, header + pmatch[1].rm_so, len); number[len] = '\0'; printf("Number is %s\n", number); } else { printf("Match failed\n"); } regfree(&re); free(number); return 0; }
    No error checking is done and number is stored as a string, atoi()/strtol() family can turn it into an integer.
Re: Translate Perl to C
by John M. Dlugosz (Monsignor) on Aug 05, 2001 at 22:41 UTC
    If you are asking for equivilent meaning in a C program, check out strtok for the first, then use strncmp to verify the beginning of the string on the second line, and atoi to convert the number (no need to copy it out, just point it at the first digit).

    —John