If you don't want the whole file to be slurped in at once
you could, since lines of code are seperated by semi-colons in C, just use a semi-colon as an end-of-line indicator:
local $/ = ';';.
Updated code that should not match
ifs and such:
#!perl -w
use strict;
$/ = ';';
my ($header, $type, $arguments);
for my $data (<DATA>) {
$data =~
s/(((?:static\s+)?\w+)\s+(\w+)\s*\(([^)]*)\)\s*\{)/($3 eq 'if' or
$3 eq 'do' or
$3 eq 'while' o
+r
$3 eq 'for') ?
+$1 :
"\/* Function: $3()\n" .
" Input:\n" .
do { $header = $1; $type = $2;
$arguments = $4 . ','; ''
+} .
(join "\n",
map { sprintf " %-8s %8
+s : ", split }
$arguments =~
m|\s*(\w+\**\s+\**\w+)\s*,|g)
+. "\n\n" .
" Output:\n" .
(sprintf " %-8s : \n",
+$type) .
"\n Author :\n Date :\
+n*\/" .
"\n\n$header"/ge;
print $data;
}
__DATA__
int
function(int a, char *b) {
...
return 0;
}
(only if it is not HW)
Hope this helped (and I hope your question was not HW, but for work, documentation or something similar as I suppose it to be).