-Idirectory may be used in conjunction with -P to tell the C preprocessor where to look for include files. By default /usr/include and /usr/lib/perl are searched. -P causes your script to be run through the C preprocessor before compilation by perl. (Since both comments and cpp directives begin with the # character, you should avoid starting comments with any words recognized by the C preprocessor such as "if", "else" or "define".) #### #define ADD(x,y) x + y my $r = ADD( getPfromSomewhere(), getQfromSomewhere() ); ... my $s = ADD( geta(), getb() ); #### # 1 "macro.pl" # 1 "" # 1 "/usr/include/stdc-predef.h" 1 3 4 # 30 "/usr/include/stdc-predef.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/predefs.h" 1 3 4 # 31 "/usr/include/stdc-predef.h" 2 3 4 # 1 "" 2 # 1 "macro.pl" my $r = getPfromSomewhere() + getQfromSomewhere(); ... my $s = geta() + getb();