From 08e9d68e93f9880dc9a1edcde3abb85026f49784 Mon Sep 17 00:00:00 2001 From: Dominic Dunlop Date: Mon, 16 Jun 1997 11:36:14 +1200 Subject: -p does not check for failure of implicit print Unlike modern incarnations of, say, awk and sed, perl -p does not check the return status of the implicit print statement executed for each input record. Here's a patch against 5.004_01. ('ware wrapping: there's a long line in it.) There's no test case: I couldn't think up a reliable, portable and polite way of inducing a write error. I think, in the specific case of the implicit print in -p, this is non-controversial, and can go in the maintenance branch. That's not to say that there are not programs using -p out there (probably CGI scripts) which will surprise people by exiting noisily on encountering an error, rather than continuing to do thewrong thing quietly. Does anybody know of any widespread examples? Do we care? More controversial error checking patch for implicit close of to follow in separate bug report. p5p-msgid: v0311070aafea3fa83061@[194.51.248.75] --- pod/perlrun.pod | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'pod/perlrun.pod') diff --git a/pod/perlrun.pod b/pod/perlrun.pod index de7116d939..61e40f88a0 100644 --- a/pod/perlrun.pod +++ b/pod/perlrun.pod @@ -376,8 +376,10 @@ B: } Note that the lines are not printed by default. See B<-p> to have -lines printed. Here is an efficient way to delete all files older than -a week: +lines printed. If a file named by an argument cannot be opened for +some reason, Perl warns you about it, and moves on to the next file. + +Here is an efficient way to delete all files older than a week: find . -mtime +7 -print | perl -nle 'unlink;' @@ -396,11 +398,14 @@ makes it iterate over filename arguments somewhat like B: while (<>) { ... # your script goes here } continue { - print; + print or die "-p destination: $!\n"; } -Note that the lines are printed automatically. To suppress printing -use the B<-n> switch. A B<-p> overrides a B<-n> switch. +If a file named by an argument cannot be opened for some reason, Perl +warns you about it, and moves on to the next file. Note that the +lines are printed automatically. An error occuring during printing is +treated as fatal. To suppress printing use the B<-n> switch. A B<-p> +overrides a B<-n> switch. C and C blocks may be used to capture control before or after the implicit loop, just as in awk. -- cgit v1.2.1 From 2a92aaa05aa1acbf01092228d30e9b1d7b2a3f61 Mon Sep 17 00:00:00 2001 From: Gurusamy Sarathy Date: Thu, 24 Jul 1997 02:52:28 +1200 Subject: -S flag fixes for DOSISH platforms This patch supercedes the one posted here by Ilya (Message-Id: <199707191651.MAA04897@monk.mps.ohio-state.edu>). There are no changes for Unix platforms over Ilya's version. On DOSISH platforms, the initial check in the current directory (or the actual path to the script, if supplied) includes searching for valid extensions. The fact that -S does not do a PATH search if the supplied filename contains directory separators (on all platforms) is documented. This behavior is similar to Unix and DOS shells. Note -S *does* have an effect on DOSISH platforms even if no PATH search happens: valid extensions will be checked for if the file name is not found. p5p-msgid: 199707250043.UAA02385@aatma.engin.umich.edu --- pod/perlrun.pod | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'pod/perlrun.pod') diff --git a/pod/perlrun.pod b/pod/perlrun.pod index 61e40f88a0..19aa0a2a9e 100644 --- a/pod/perlrun.pod +++ b/pod/perlrun.pod @@ -431,9 +431,27 @@ prints "true" if and only if the script is invoked with a B<-xyz> switch. =item B<-S> makes Perl use the PATH environment variable to search for the -script (unless the name of the script starts with a slash). Typically -this is used to emulate #! startup on machines that don't support #!, -in the following manner: +script (unless the name of the script contains directory separators). +On some platforms, this also makes Perl append suffixes to the +filename while searching for it. For example, on Win32 platforms, +the ".bat" and ".cmd" suffixes are appended if a lookup for the +original name fails, and if the name does not already end in one +of those suffixes. If your Perl was compiled with DEBUGGING turned +on, using the -Dp switch to Perl shows how the search progresses. + +If the file supplied contains directory separators (i.e. it is an +absolute or relative pathname), and if the file is not found, +platforms that append file extensions will do so and try to look +for the file with those extensions added, one by one. + +On DOS-like platforms, if the script does not contain directory +separators, it will first be searched for in the current directory +before being searched for on the PATH. On Unix platforms, the +script will be searched for strictly on the PATH. + +Typically this is used to emulate #! startup on platforms that +don't support #!. This example works on many platforms that +have a shell compatible with Bourne shell: #!/usr/bin/perl eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' -- cgit v1.2.1 From db2ba183c3c9463b6543c38879a845552a4cec8e Mon Sep 17 00:00:00 2001 From: Tim Bunce Date: Fri, 5 Sep 1997 00:00:00 +1200 Subject: -D info in perlrun (this is the same change as commit 5267b140323062798f51897718a803fcd7de637d, but as applied) --- pod/perlrun.pod | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) (limited to 'pod/perlrun.pod') diff --git a/pod/perlrun.pod b/pod/perlrun.pod index 19aa0a2a9e..1e3279e374 100644 --- a/pod/perlrun.pod +++ b/pod/perlrun.pod @@ -224,33 +224,33 @@ runs the script under the control of a debugging or tracing module installed as Devel::foo. E.g., B<-d:DProf> executes the script using the Devel::DProf profiler. See L. -=item B<-D>I +=item B<-D>I -=item B<-D>I +=item B<-D>I sets debugging flags. To watch how it executes your script, use -B<-D14>. (This works only if debugging is compiled into your -Perl.) Another nice value is B<-D1024>, which lists your compiled -syntax tree. And B<-D512> displays compiled regular expressions. As an -alternative specify a list of letters instead of numbers (e.g., B<-D14> is +B<-Dtls>. (This works only if debugging is compiled into your +Perl.) Another nice value is B<-Dx>, which lists your compiled +syntax tree. And B<-Dr> displays compiled regular expressions. As an +alternative, specify a number instead of list of letters (e.g., B<-D14> is equivalent to B<-Dtls>): - 1 p Tokenizing and Parsing - 2 s Stack Snapshots - 4 l Label Stack Processing - 8 t Trace Execution - 16 o Operator Node Construction - 32 c String/Numeric Conversions - 64 P Print Preprocessor Command for -P - 128 m Memory Allocation - 256 f Format Processing - 512 r Regular Expression Parsing - 1024 x Syntax Tree Dump - 2048 u Tainting Checks - 4096 L Memory Leaks (not supported anymore) - 8192 H Hash Dump -- usurps values() - 16384 X Scratchpad Allocation - 32768 D Cleaning Up + 1 p Tokenizing and parsing + 2 s Stack snapshots + 4 l Context (loop) stack processing + 8 t Trace execution + 16 o Method and overloading resolution + 32 c String/numeric conversions + 64 P Print preprocessor command for -P + 128 m Memory allocation + 256 f Format processing + 512 r Regular expression parsing and execution + 1024 x Syntax tree dump + 2048 u Tainting checks + 4096 L Memory leaks (not supported anymore) + 8192 H Hash dump -- usurps values() + 16384 X Scratchpad allocation + 32768 D Cleaning up =item B<-e> I -- cgit v1.2.1