This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #116190] -F implies -a, either implies -n
authorTony Cook <tony@develop-help.com>
Tue, 23 Jul 2013 00:24:45 +0000 (10:24 +1000)
committerTony Cook <tony@develop-help.com>
Tue, 23 Jul 2013 00:24:45 +0000 (10:24 +1000)
Previously -F without -a was a no-op, and -a without -n or -p was a
no-op, with this change, if you supply -F then both -a and -n are
implied (you can still use -p for its extra behaviour), and if you
supply -a then -n is implied.

MANIFEST
perl.c
pod/perlrun.pod
t/run/switchF2.t [new file with mode: 0644]
t/test.pl

index c2c3882..8fb53e0 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -5367,6 +5367,7 @@ t/run/switchd-78586.t             See whether bug 78586 is fixed
 t/run/switchd.t                        Test the -d switch
 t/run/switches.t               Tests for the other switches (-0, -l, -c, -s, -M, -m, -V, -v, -h, -z, -i)
 t/run/switchF1.t               Pathological tests for the -F switch
+t/run/switchF2.t               Pathological tests for the -F switch
 t/run/switchF.t                        Test the -F switch
 t/run/switchI.t                        Test the -I switch
 t/run/switchM.t                        Test the -M switch
diff --git a/perl.c b/perl.c
index ee36fd1..5458c1d 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -3213,13 +3213,16 @@ Perl_moreswitches(pTHX_ const char *s)
            PL_utf8cache = -1;
        return s;
     case 'F':
+       PL_minus_a = TRUE;
        PL_minus_F = TRUE;
+        PL_minus_n = TRUE;
        PL_splitstr = ++s;
        while (*s && !isSPACE(*s)) ++s;
        PL_splitstr = savepvn(PL_splitstr, s - PL_splitstr);
        return s;
     case 'a':
        PL_minus_a = TRUE;
+        PL_minus_n = TRUE;
        s++;
        return s;
     case 'c':
index 05dea4e..dbaa12c 100644 (file)
@@ -265,6 +265,8 @@ is equivalent to
 
 An alternate delimiter may be specified using B<-F>.
 
+B<-a> implicitly sets B<-n>.
+
 =item B<-C [I<number/list>]>
 X<-C>
 
@@ -487,9 +489,11 @@ perl, you can check the value of C<$Config{usesitecustomize}>.
 =item B<-F>I<pattern>
 X<-F>
 
-specifies the pattern to split on if B<-a> is also in effect.  The
-pattern may be surrounded by C<//>, C<"">, or C<''>, otherwise it will be
-put in single quotes. You can't use literal whitespace in the pattern.
+specifies the pattern to split on for B<-a>. The pattern may be
+surrounded by C<//>, C<"">, or C<''>, otherwise it will be put in single
+quotes. You can't use literal whitespace in the pattern.
+
+B<-F> implicitly sets both B<-a> and B<-n>.
 
 =item B<-h>
 X<-h>
diff --git a/t/run/switchF2.t b/t/run/switchF2.t
new file mode 100644 (file)
index 0000000..a411711
--- /dev/null
@@ -0,0 +1,26 @@
+#!./perl
+
+BEGIN {
+    chdir 't' if -d 't';
+    @INC = '../lib';
+    require './test.pl';
+}
+plan(tests => 3);
+
+{ # perl #116190
+  fresh_perl_is('print qq!@F!', '1 2',
+               {
+                stdin => "1:2",
+                switches => [ '-n', '-F:' ],
+               }, "passing -F implies -a");
+  fresh_perl_is('print qq!@F!', '1 2',
+               {
+                stdin => "1:2",
+                switches => [ '-F:' ],
+               }, "passing -F implies -an");
+  fresh_perl_is('print join q!,!, @F', '1,2',
+               {
+                stdin => "1 2",
+                switches => [ '-a' ],
+               }, "passing -a implies -n");
+}
index 41efbb8..eb4f868 100644 (file)
--- a/t/test.pl
+++ b/t/test.pl
@@ -1134,7 +1134,8 @@ sub run_multiple_progs {
        print $fh "\n#line 1\n";  # So the line numbers don't get messed up.
        print $fh $prog,"\n";
        close $fh or die "Cannot close $tmpfile: $!";
-       my $results = runperl( stderr => 1, progfile => $tmpfile, $up
+       my $results = runperl( stderr => 1, progfile => $tmpfile,
+                              stdin => '', $up
                               ? (switches => ["-I$up/lib", $switch], nolib => 1)
                               : (switches => [$switch])
                                );