in reply to Identifying functions in a c file and replacing with a keyword

#!/usr/bin/env perl use v5.12; use C::Scan; use Data::Dumper; use File::Temp qw(tempfile); # Create a C source file to parse... my $code = <<'DATA'; int func_a (); void func_b (int foo); float func_c (int foo, float bar); int func_d (char* baz) { return func_a(4); } DATA my ($fh, $name) = tempfile(); print $fh $code; close $fh; # Let's see what's in the file my $scan = "C::Scan"->new(filename => $name); say "Declared functions:"; say for map $_->[1], @{ $scan->get("parsed_fdecls") }; say "Inline functions:"; say for map { /^\w+\s+(\w+)/s } @{ $scan->get("inlines") }; say "---"; # OK, let's make an array of those function names my @funcs = ( (map $_->[1], @{ $scan->get("parsed_fdecls") }), (map { /^\w+\s+(\w+)/s } @{ $scan->get("inlines") }), ); print Dumper \@funcs; say "---"; # Make a regexp out of that. my $regexp = join "|", map quotemeta, @funcs; # Let's do a search and replace on the original code $code =~ s{($regexp)}{$1\_main}g; say $code;
package Cow { use Moo; has name => (is => 'lazy', default => sub { 'Mooington' }) } say Cow->new->name
  • Comment on Re: Identifying functions in a c file and replacing with a keyword
  • Download Code

Replies are listed 'Best First'.
Re^2: Identifying functions in a c file and replacing with a keyword
by ijalab (Initiate) on Mar 18, 2013 at 11:30 UTC
    Sir, Thanks for the help. I am unable to install c::span module for windows xp.
      I am unable to install c::span module for windows xp

      C::Scan builds, tests and installs fine for me on windows.
      What prevents you from installing it ?

      Cheers,
      Rob
        Sir, I am getting this error, i have installed cscan.pm still throws this error. Can't locate C/Scan.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at Functions.pl line 4. BEGIN failed--compilation aborted at Functions.pl line 4.