#!/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;
In reply to Re: Identifying functions in a c file and replacing with a keyword
by tobyink
in thread Identifying functions in a c file and replacing with a keyword
by ijalab
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |