From: Jarkko Hietaniemi Date: Thu, 15 Nov 2001 21:35:36 +0000 (+0000) Subject: Advise against -P as instructed by Schwern. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=079a94c4694d82f731ba90bda77d2675508b0f20;p=p5sagit%2Fp5-mst-13.2.git Advise against -P as instructed by Schwern. p4raw-id: //depot/perl@13029 --- diff --git a/pod/perlrun.pod b/pod/perlrun.pod index 54c860b..4b86d77 100644 --- a/pod/perlrun.pod +++ b/pod/perlrun.pod @@ -569,12 +569,39 @@ the implicit loop, just as in B. =item B<-P> -causes your program to be run through the C preprocessor before +B + +This option causes your program to be run through the C preprocessor before compilation by Perl. Because both comments and B directives begin with the # character, you should avoid starting comments with any words recognized by the C preprocessor such as C<"if">, C<"else">, or C<"define">. -Also, in some platforms the C preprocessor knows too much: it knows -about the C++ -style until-end-of-line comments starting with C<"//">. + +If you're considering using C<-P>, you might also want to look at the +Filter::cpp module from CPAN. + +The problems of -P include, but are not limited to: + +=over 10 + +=item * + +The C<#!> line is stripped, so any switches there don't apply. + +=item * + +A C<-P> on a C<#!> line doesn't work. + +=item * + +B lines that begin with (whitespace and) a C<#> but +do not look like cpp commands, are stripped, including anything +inside Perl strings, regular expressions, and here-docs . + +=item * + +In some platforms the C preprocessor knows too much: it knows about +the C++ -style until-end-of-line comments starting with C<"//">. This will cause problems with common Perl constructs like s/foo//; @@ -588,8 +615,22 @@ like for example C<"!">: s!foo!!; -If you're considering using C<-P>, you might also want to look at the -Filter::cpp module from CPAN. + + +=item * + +It requires not only a working C preprocessor but also a working +F. If not on UNIX, you are probably out of luck on this. + +=item * + +Script line numbers are not preserved. + +=item * + +The C<-x> does not work with C<-P>. + +=back =item B<-s>