| [3611] | 1 | #!/usr/bin/perl
 | 
|---|
 | 2 | # Test misc.
 | 
|---|
 | 3 | 
 | 
|---|
 | 4 | # Copyright (C) 2017-2022 Free Software Foundation, Inc.
 | 
|---|
 | 5 | 
 | 
|---|
 | 6 | # This program is free software: you can redistribute it and/or modify
 | 
|---|
 | 7 | # it under the terms of the GNU General Public License as published by
 | 
|---|
 | 8 | # the Free Software Foundation, either version 3 of the License, or
 | 
|---|
 | 9 | # (at your option) any later version.
 | 
|---|
 | 10 | 
 | 
|---|
 | 11 | # This program is distributed in the hope that it will be useful,
 | 
|---|
 | 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
|---|
 | 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
|---|
 | 14 | # GNU General Public License for more details.
 | 
|---|
 | 15 | 
 | 
|---|
 | 16 | # You should have received a copy of the GNU General Public License
 | 
|---|
 | 17 | # along with this program.  If not, see <https://www.gnu.org/licenses/>.
 | 
|---|
 | 18 | 
 | 
|---|
 | 19 | use strict;
 | 
|---|
 | 20 | use File::stat;
 | 
|---|
 | 21 | 
 | 
|---|
 | 22 | (my $program_name = $0) =~ s|.*/||;
 | 
|---|
 | 23 | 
 | 
|---|
 | 24 | # Turn off localization of executable's output.
 | 
|---|
 | 25 | @ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
 | 
|---|
 | 26 | 
 | 
|---|
 | 27 | my $prog = 'sed';
 | 
|---|
 | 28 | 
 | 
|---|
 | 29 | print "PATH = $ENV{PATH}\n";
 | 
|---|
 | 30 | 
 | 
|---|
 | 31 | my @Tests =
 | 
|---|
 | 32 |     (
 | 
|---|
 | 33 |      ['empty', qw(-e ''), {IN=>''}, {OUT=>''}],
 | 
|---|
 | 34 |      ['empty2', q('s/^ *//'), {IN=>"x\n\n"}, {OUT=>"x\n\n"}],
 | 
|---|
 | 35 | 
 | 
|---|
 | 36 |      ['head', qw(3q), {IN=>"1\n2\n3\n4\n"}, {OUT=>"1\n2\n3\n"}],
 | 
|---|
 | 37 |      ['space', q('s/_\S/XX/g;s/\s/_/g'),
 | 
|---|
 | 38 |       {IN=>  "Hello World\t!\nSecond_line_ of tests\n" },
 | 
|---|
 | 39 |       {OUT=> "Hello_World_!\nSecondXXine__of_tests\n" }],
 | 
|---|
 | 40 | 
 | 
|---|
 | 41 |      ['zero-anchor', qw(-z), q('N;N;s/^/X/g;s/^/X/mg;s/$/Y/g;s/$/Y/mg'),
 | 
|---|
 | 42 |       {IN=>"a\0b\0c\0" },
 | 
|---|
 | 43 |       {OUT=>"XXaY\0XbY\0XcYY\0" }],
 | 
|---|
 | 44 | 
 | 
|---|
 | 45 |      ['case-insensitive', qw(-n), q('h;s/Version: *//p;g;s/version: *//Ip'),
 | 
|---|
 | 46 |       {IN=>"Version: 1.2.3\n" },
 | 
|---|
 | 47 |       {OUT=>"1.2.3\n1.2.3\n" },
 | 
|---|
 | 48 |       ],
 | 
|---|
 | 49 | 
 | 
|---|
 | 50 |      ['preserve-missing-EOL-at-EOF', q('s/$/x/'),
 | 
|---|
 | 51 |       {IN=> "a\nb" },
 | 
|---|
 | 52 |       {OUT=>"ax\nbx" },
 | 
|---|
 | 53 |       ],
 | 
|---|
 | 54 | 
 | 
|---|
 | 55 |      ['y-bracket', q('y/[/ /'),
 | 
|---|
 | 56 |       {IN => "Are you sure (y/n)? [y]\n" },
 | 
|---|
 | 57 |       {OUT=> "Are you sure (y/n)?  y]\n" },
 | 
|---|
 | 58 |       ],
 | 
|---|
 | 59 | 
 | 
|---|
 | 60 |      ['y-zero', q('y/b/\x00/'),
 | 
|---|
 | 61 |       {IN => "abc\n" },
 | 
|---|
 | 62 |       {OUT=> "a\0c\n" },
 | 
|---|
 | 63 |       ],
 | 
|---|
 | 64 | 
 | 
|---|
 | 65 |      ['y-newline', q('H
 | 
|---|
 | 66 | G
 | 
|---|
 | 67 | y/Ss\nYy/yY$sS/'),
 | 
|---|
 | 68 |       {IN => "Are you sure (y/n)? [y]\n" },
 | 
|---|
 | 69 |       {OUT=> 'Are Sou Yure (S/n)? [S]$$Are Sou Yure (S/n)? [S]'."\n"},
 | 
|---|
 | 70 |       ],
 | 
|---|
 | 71 | 
 | 
|---|
 | 72 |      ['allsub', q('s/foo/bar/g'),
 | 
|---|
 | 73 |       {IN => "foo foo fo oo f oo foo foo foo foo foo foo foo foo foo\n"},
 | 
|---|
 | 74 |       {OUT=> "bar bar fo oo f oo bar bar bar bar bar bar bar bar bar\n"},
 | 
|---|
 | 75 |       ],
 | 
|---|
 | 76 | 
 | 
|---|
 | 77 |      ['insert-nl', qw(-f), {IN => "/foo/i\\\n"},
 | 
|---|
 | 78 |       {IN => "bar\nfoo\n" },
 | 
|---|
 | 79 |       {OUT=> "bar\n\nfoo\n" },
 | 
|---|
 | 80 |       ],
 | 
|---|
 | 81 | 
 | 
|---|
 | 82 |      ['recall',
 | 
|---|
 | 83 |       # Check that the empty regex recalls the last *executed* regex,
 | 
|---|
 | 84 |       # not the last *compiled* regex
 | 
|---|
 | 85 |       qw(-f), {IN => "p;s/e/X/p;:x;s//Y/p;/f/bx"},
 | 
|---|
 | 86 |       {IN => "eeefff\n" },
 | 
|---|
 | 87 |       {OUT=> "eeefff\n"
 | 
|---|
 | 88 |            . "Xeefff\n"
 | 
|---|
 | 89 |            . "XYefff\n"
 | 
|---|
 | 90 |            . "XYeYff\n"
 | 
|---|
 | 91 |            . "XYeYYf\n"
 | 
|---|
 | 92 |            . "XYeYYY\n"
 | 
|---|
 | 93 |            . "XYeYYY\n"
 | 
|---|
 | 94 |       },
 | 
|---|
 | 95 |       ],
 | 
|---|
 | 96 | 
 | 
|---|
 | 97 |      ['recall2',
 | 
|---|
 | 98 |       # Starting from sed 4.1.3, regexes are compiled with REG_NOSUB
 | 
|---|
 | 99 |       # if they are used in an address, so that the matcher does not
 | 
|---|
 | 100 |       # have to obey leftmost-longest.  The tricky part is to recompile
 | 
|---|
 | 101 |       # them if they are then used in a substitution.
 | 
|---|
 | 102 |       qw(-f), {IN => '/\(ab*\)\+/ s//>\1</g'},
 | 
|---|
 | 103 |       {IN => "ababb||abbbabbbb\n" },
 | 
|---|
 | 104 |       {OUT=> ">abb<||>abbbb<\n" },
 | 
|---|
 | 105 |       ],
 | 
|---|
 | 106 | 
 | 
|---|
 | 107 |      ['0range',
 | 
|---|
 | 108 |       # Test address 0 (GNU extension)
 | 
|---|
 | 109 |       # FIXME: This test does NOT actually fail if the address is changed to 1.
 | 
|---|
 | 110 |       qw(-e '0,/aaa/d'),
 | 
|---|
 | 111 |       {IN => "1\n"
 | 
|---|
 | 112 |            . "2\n"
 | 
|---|
 | 113 |            . "3\n"
 | 
|---|
 | 114 |            . "4\n"
 | 
|---|
 | 115 |            . "aaa\n"
 | 
|---|
 | 116 |            . "yes\n"},
 | 
|---|
 | 117 |       {OUT => "yes\n"}
 | 
|---|
 | 118 |      ],
 | 
|---|
 | 119 | 
 | 
|---|
 | 120 |      ['amp-escape',
 | 
|---|
 | 121 |       # Test ampersand as escape sequence (ASCII 0x26), which should
 | 
|---|
 | 122 |       # not have a special meaning (i.e. the 'matched pattern')
 | 
|---|
 | 123 |       qw(-e 's/yes/yes\x26/'),
 | 
|---|
 | 124 |       {IN => "yes\n"},
 | 
|---|
 | 125 |       {OUT => "yes&\n"}
 | 
|---|
 | 126 |      ],
 | 
|---|
 | 127 | 
 | 
|---|
 | 128 |      ['appquit',
 | 
|---|
 | 129 |       # Test 'a'ppend command before 'q'uit
 | 
|---|
 | 130 |       qw(-f),
 | 
|---|
 | 131 |       {IN => q(a\
 | 
|---|
 | 132 | ok
 | 
|---|
 | 133 | q)},
 | 
|---|
 | 134 |       {IN => "doh\n"},
 | 
|---|
 | 135 |       {OUT => "doh\n"
 | 
|---|
 | 136 |             . "ok\n"}
 | 
|---|
 | 137 |      ],
 | 
|---|
 | 138 | 
 | 
|---|
 | 139 | 
 | 
|---|
 | 140 |      ['brackets',
 | 
|---|
 | 141 |       qw(-f),
 | 
|---|
 | 142 |       {IN => q(s/[[]/a/
 | 
|---|
 | 143 | s/[[[]/b/
 | 
|---|
 | 144 | s/[[[[]/c/
 | 
|---|
 | 145 | s/[[[[[]/d/
 | 
|---|
 | 146 | s/[[[[[[]/e/
 | 
|---|
 | 147 | s/[[[[[[[]/f/
 | 
|---|
 | 148 | s/[[[[[[[[]/g/
 | 
|---|
 | 149 | s/[[[[[[[[[]/h/
 | 
|---|
 | 150 | )},
 | 
|---|
 | 151 |       {IN => "[[[[[[[[[\n"},
 | 
|---|
 | 152 |       {OUT => "abcdefgh[\n"}
 | 
|---|
 | 153 |      ],
 | 
|---|
 | 154 | 
 | 
|---|
 | 155 | 
 | 
|---|
 | 156 |      ['bkslashes',
 | 
|---|
 | 157 |       # Test backslashes in regex
 | 
|---|
 | 158 |       # bug in sed 4.0b
 | 
|---|
 | 159 |       qw(-f),
 | 
|---|
 | 160 |       {IN => q(s/$/\\\\\
 | 
|---|
 | 161 | /
 | 
|---|
 | 162 | )},
 | 
|---|
 | 163 |       {IN => "a\n"},
 | 
|---|
 | 164 |       {OUT => "a\\\n"
 | 
|---|
 | 165 |             . "\n"}
 | 
|---|
 | 166 |      ],
 | 
|---|
 | 167 | 
 | 
|---|
 | 168 |      ['classes',
 | 
|---|
 | 169 |       # inspired by an autoconf generated configure script.
 | 
|---|
 | 170 |       qw(-n -f),
 | 
|---|
 | 171 |       {IN => 's/^\([/[:lower:]A-Z0-9]*_cv_[[:lower:][:upper:]/[:digit:]]*\)'.
 | 
|---|
 | 172 |              '=\(.*\)/: \${\1=\'\2\'}/p'},
 | 
|---|
 | 173 |       {IN => "_cv_=emptyvar\n"
 | 
|---|
 | 174 |            . "ac_cv_prog/RANLIB=/usr/bin/ranlib\n"
 | 
|---|
 | 175 |            . "ac_cv_prog/CC=/usr/unsupported/\\ \\ /lib/_cv_/cc\n"
 | 
|---|
 | 176 |            . "a/c_cv_prog/CPP=/usr/bin/cpp\n"
 | 
|---|
 | 177 |            . "SHELL=bash\n"
 | 
|---|
 | 178 |            . "GNU=GNU!UNIX\n"},
 | 
|---|
 | 179 |       {OUT => ": \${_cv_='emptyvar'}\n"
 | 
|---|
 | 180 |             . ": \${ac_cv_prog/RANLIB='/usr/bin/ranlib'}\n"
 | 
|---|
 | 181 |             . ": \${ac_cv_prog/CC='/usr/unsupported/\\ \\ /lib/_cv_/cc'}\n"
 | 
|---|
 | 182 |             . ": \${a/c_cv_prog/CPP='/usr/bin/cpp'}\n"}
 | 
|---|
 | 183 |      ],
 | 
|---|
 | 184 | 
 | 
|---|
 | 185 | 
 | 
|---|
 | 186 |      ['cv-vars',
 | 
|---|
 | 187 |       # inspired by an autoconf generated configure script.
 | 
|---|
 | 188 |       qw(-n -f),
 | 
|---|
 | 189 |       {IN => q|s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/: \${\1='\2'}/p|},
 | 
|---|
 | 190 |       {IN => "_cv_=emptyvar\n"
 | 
|---|
 | 191 |            . "ac_cv_prog_RANLIB=/usr/bin/ranlib\n"
 | 
|---|
 | 192 |            . "ac_cv_prog_CC=/usr/unsupported/\ \ /lib/_cv_/cc\n"
 | 
|---|
 | 193 |            . "ac_cv_prog_CPP=/usr/bin/cpp\n"
 | 
|---|
 | 194 |            . "SHELL=bash\n"
 | 
|---|
 | 195 |            . "GNU=GNU!UNIX\n"},
 | 
|---|
 | 196 |       {OUT => ": \${_cv_='emptyvar'}\n"
 | 
|---|
 | 197 |             . ": \${ac_cv_prog_RANLIB='/usr/bin/ranlib'}\n"
 | 
|---|
 | 198 |             . ": \${ac_cv_prog_CC='/usr/unsupported/\ \ /lib/_cv_/cc'}\n"
 | 
|---|
 | 199 |             . ": \${ac_cv_prog_CPP='/usr/bin/cpp'}\n"}
 | 
|---|
 | 200 |      ],
 | 
|---|
 | 201 | 
 | 
|---|
 | 202 |      ['quiet',
 | 
|---|
 | 203 |       # the old 'quiet' test: --quiet instead of -n
 | 
|---|
 | 204 |       qw(--quiet -f),
 | 
|---|
 | 205 |       {IN => q|s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/: \${\1='\2'}/p|},
 | 
|---|
 | 206 |       {IN => "_cv_=emptyvar\n"
 | 
|---|
 | 207 |            . "ac_cv_prog_RANLIB=/usr/bin/ranlib\n"
 | 
|---|
 | 208 |            . "ac_cv_prog_CC=/usr/unsupported/\ \ /lib/_cv_/cc\n"
 | 
|---|
 | 209 |            . "ac_cv_prog_CPP=/usr/bin/cpp\n"
 | 
|---|
 | 210 |            . "SHELL=bash\n"
 | 
|---|
 | 211 |            . "GNU=GNU!UNIX\n"},
 | 
|---|
 | 212 |       {OUT => ": \${_cv_='emptyvar'}\n"
 | 
|---|
 | 213 |             . ": \${ac_cv_prog_RANLIB='/usr/bin/ranlib'}\n"
 | 
|---|
 | 214 |             . ": \${ac_cv_prog_CC='/usr/unsupported/\ \ /lib/_cv_/cc'}\n"
 | 
|---|
 | 215 |             . ": \${ac_cv_prog_CPP='/usr/bin/cpp'}\n"}
 | 
|---|
 | 216 |      ],
 | 
|---|
 | 217 | 
 | 
|---|
 | 218 |      ['file',
 | 
|---|
 | 219 |       # the old 'file' test: --file instead of -f
 | 
|---|
 | 220 |       qw(-n --file),
 | 
|---|
 | 221 |       {IN => q|s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/: \${\1='\2'}/p|},
 | 
|---|
 | 222 |       {IN => "_cv_=emptyvar\n"
 | 
|---|
 | 223 |            . "ac_cv_prog_RANLIB=/usr/bin/ranlib\n"
 | 
|---|
 | 224 |            . "ac_cv_prog_CC=/usr/unsupported/\ \ /lib/_cv_/cc\n"
 | 
|---|
 | 225 |            . "ac_cv_prog_CPP=/usr/bin/cpp\n"
 | 
|---|
 | 226 |            . "SHELL=bash\n"
 | 
|---|
 | 227 |            . "GNU=GNU!UNIX\n"},
 | 
|---|
 | 228 |       {OUT => ": \${_cv_='emptyvar'}\n"
 | 
|---|
 | 229 |             . ": \${ac_cv_prog_RANLIB='/usr/bin/ranlib'}\n"
 | 
|---|
 | 230 |             . ": \${ac_cv_prog_CC='/usr/unsupported/\ \ /lib/_cv_/cc'}\n"
 | 
|---|
 | 231 |             . ": \${ac_cv_prog_CPP='/usr/bin/cpp'}\n"}
 | 
|---|
 | 232 |      ],
 | 
|---|
 | 233 | 
 | 
|---|
 | 234 | 
 | 
|---|
 | 235 |      ['dollar',
 | 
|---|
 | 236 |       # Test replacement on the last line (address '$')
 | 
|---|
 | 237 |       qw(-e '$s/^/space /'),
 | 
|---|
 | 238 |       {IN => "I can't quite remember where I heard it,\n"
 | 
|---|
 | 239 |            . "but I can't seem to get out of my head\n"
 | 
|---|
 | 240 |            . "the phrase\n"
 | 
|---|
 | 241 |            . "the final frontier\n"},
 | 
|---|
 | 242 |       {OUT => "I can't quite remember where I heard it,\n"
 | 
|---|
 | 243 |             . "but I can't seem to get out of my head\n"
 | 
|---|
 | 244 |             . "the phrase\n"
 | 
|---|
 | 245 |             . "space the final frontier\n"}
 | 
|---|
 | 246 |      ],
 | 
|---|
 | 247 | 
 | 
|---|
 | 248 |      ['enable',
 | 
|---|
 | 249 |       # inspired by an autoconf generated configure script.
 | 
|---|
 | 250 |       qw(-e 's/-*enable-//;s/=.*//'),
 | 
|---|
 | 251 |       {IN => "--enable-targets=sparc-sun-sunos4.1.3,srec\n"
 | 
|---|
 | 252 |            . "--enable-x11-testing=on\n"
 | 
|---|
 | 253 |            . "--enable-wollybears-in-minnesota=yes-id-like-that\n"},
 | 
|---|
 | 254 |       {OUT => "targets\n"
 | 
|---|
 | 255 |             . "x11-testing\n"
 | 
|---|
 | 256 |             . "wollybears-in-minnesota\n"}
 | 
|---|
 | 257 |      ],
 | 
|---|
 | 258 | 
 | 
|---|
 | 259 |      ['fasts',
 | 
|---|
 | 260 |       # test `fast' substitutions
 | 
|---|
 | 261 |       qw(-f),
 | 
|---|
 | 262 |       {IN => q(
 | 
|---|
 | 263 | h
 | 
|---|
 | 264 | s/a//
 | 
|---|
 | 265 | p
 | 
|---|
 | 266 | g
 | 
|---|
 | 267 | s/a//g
 | 
|---|
 | 268 | p
 | 
|---|
 | 269 | g
 | 
|---|
 | 270 | s/^a//p
 | 
|---|
 | 271 | g
 | 
|---|
 | 272 | s/^a//g
 | 
|---|
 | 273 | p
 | 
|---|
 | 274 | g
 | 
|---|
 | 275 | s/not present//g
 | 
|---|
 | 276 | p
 | 
|---|
 | 277 | g
 | 
|---|
 | 278 | s/^[a-z]//g
 | 
|---|
 | 279 | p
 | 
|---|
 | 280 | g
 | 
|---|
 | 281 | s/a$//
 | 
|---|
 | 282 | p
 | 
|---|
 | 283 | g
 | 
|---|
 | 284 | 
 | 
|---|
 | 285 | y/a/b/
 | 
|---|
 | 286 | h
 | 
|---|
 | 287 | s/b//
 | 
|---|
 | 288 | p
 | 
|---|
 | 289 | g
 | 
|---|
 | 290 | s/b//g
 | 
|---|
 | 291 | p
 | 
|---|
 | 292 | g
 | 
|---|
 | 293 | s/^b//p
 | 
|---|
 | 294 | g
 | 
|---|
 | 295 | s/^b//g
 | 
|---|
 | 296 | p
 | 
|---|
 | 297 | g
 | 
|---|
 | 298 | s/^[a-z]//g
 | 
|---|
 | 299 | p
 | 
|---|
 | 300 | g
 | 
|---|
 | 301 | s/b$//
 | 
|---|
 | 302 | p
 | 
|---|
 | 303 | g
 | 
|---|
 | 304 | )},
 | 
|---|
 | 305 |       {IN => "aaaaaaabbbbbbaaaaaaa\n"},
 | 
|---|
 | 306 |       {OUT => "aaaaaabbbbbbaaaaaaa\n"
 | 
|---|
 | 307 |             . "bbbbbb\n"
 | 
|---|
 | 308 |             . "aaaaaabbbbbbaaaaaaa\n"
 | 
|---|
 | 309 |             . "aaaaaabbbbbbaaaaaaa\n"
 | 
|---|
 | 310 |             . "aaaaaaabbbbbbaaaaaaa\n"
 | 
|---|
 | 311 |             . "aaaaaabbbbbbaaaaaaa\n"
 | 
|---|
 | 312 |             . "aaaaaaabbbbbbaaaaaa\n"
 | 
|---|
 | 313 |             . "bbbbbbbbbbbbbbbbbbb\n"
 | 
|---|
 | 314 |             . "\n"
 | 
|---|
 | 315 |             . "bbbbbbbbbbbbbbbbbbb\n"
 | 
|---|
 | 316 |             . "bbbbbbbbbbbbbbbbbbb\n"
 | 
|---|
 | 317 |             . "bbbbbbbbbbbbbbbbbbb\n"
 | 
|---|
 | 318 |             . "bbbbbbbbbbbbbbbbbbb\n"
 | 
|---|
 | 319 |             . "bbbbbbbbbbbbbbbbbbbb\n"}
 | 
|---|
 | 320 |      ],
 | 
|---|
 | 321 | 
 | 
|---|
 | 322 | 
 | 
|---|
 | 323 | 
 | 
|---|
 | 324 |      ['factor',
 | 
|---|
 | 325 |       # Compute a few common factors for speed.  Clear the subst flag
 | 
|---|
 | 326 |       # These are placed here to make the flow harder to understand :-)
 | 
|---|
 | 327 |       # The quotient of dividing by 11 is a limit to the remaining prime factors
 | 
|---|
 | 328 |       # Pattern space looks like CANDIDATE\nNUMBER.  When a candidate is valid,
 | 
|---|
 | 329 |       # the number is divided and the candidate is tried again
 | 
|---|
 | 330 |       # We have a prime factor in CANDIDATE! Print it
 | 
|---|
 | 331 |       # If NUMBER = 1, we don't have any more factors
 | 
|---|
 | 332 |       qw(-n -f),
 | 
|---|
 | 333 |       {IN => q~
 | 
|---|
 | 334 | s/.*/&;9aaaaaaaaa8aaaaaaaa7aaaaaaa6aaaaaa5aaaaa4aaaa3aaa2aa1a0/
 | 
|---|
 | 335 | :encode
 | 
|---|
 | 336 | s/\(a*\)\([0-9]\)\([0-9]*;.*\2\(a*\)\)/\1\1\1\1\1\1\1\1\1\1\4\3/
 | 
|---|
 | 337 | tencode
 | 
|---|
 | 338 | s/;.*//
 | 
|---|
 | 339 | 
 | 
|---|
 | 340 | t7a
 | 
|---|
 | 341 | 
 | 
|---|
 | 342 | :2
 | 
|---|
 | 343 | a\
 | 
|---|
 | 344 | 2
 | 
|---|
 | 345 | b2a
 | 
|---|
 | 346 | :3
 | 
|---|
 | 347 | a\
 | 
|---|
 | 348 | 3
 | 
|---|
 | 349 | b3a
 | 
|---|
 | 350 | :5
 | 
|---|
 | 351 | a\
 | 
|---|
 | 352 | 5
 | 
|---|
 | 353 | b5a
 | 
|---|
 | 354 | :7
 | 
|---|
 | 355 | a\
 | 
|---|
 | 356 | 7
 | 
|---|
 | 357 | 
 | 
|---|
 | 358 | :7a
 | 
|---|
 | 359 | s/^\(aa*\)\1\{6\}$/\1/
 | 
|---|
 | 360 | t7
 | 
|---|
 | 361 | :5a
 | 
|---|
 | 362 | s/^\(aa*\)\1\{4\}$/\1/
 | 
|---|
 | 363 | t5
 | 
|---|
 | 364 | :3a
 | 
|---|
 | 365 | s/^\(aa*\)\1\1$/\1/
 | 
|---|
 | 366 | t3
 | 
|---|
 | 367 | :2a
 | 
|---|
 | 368 | s/^\(aa*\)\1$/\1/
 | 
|---|
 | 369 | t2
 | 
|---|
 | 370 | 
 | 
|---|
 | 371 | /^a$/b
 | 
|---|
 | 372 | 
 | 
|---|
 | 373 | s/^\(aa*\)\1\{10\}/\1=&/
 | 
|---|
 | 374 | 
 | 
|---|
 | 375 | :factor
 | 
|---|
 | 376 | /^\(a\{7,\}\)=\1\1*$/! {
 | 
|---|
 | 377 |   # Decrement CANDIDATE, and search again if it is still >1
 | 
|---|
 | 378 |   s/^a//
 | 
|---|
 | 379 |   /^aa/b factor
 | 
|---|
 | 380 | 
 | 
|---|
 | 381 |   # Print the last remaining factor: since it is stored in the NUMBER
 | 
|---|
 | 382 |   # rather than in the CANDIDATE, swap 'em: now NUMBER=1
 | 
|---|
 | 383 |   s/\(.*\)=\(.*\)/\2=\1/
 | 
|---|
 | 384 | }
 | 
|---|
 | 385 | 
 | 
|---|
 | 386 | h
 | 
|---|
 | 387 | s/=.*/;;0a1aa2aaa3aaaa4aaaaa5aaaaaa6aaaaaaa7aaaaaaaa8aaaaaaaaa9/
 | 
|---|
 | 388 | 
 | 
|---|
 | 389 | :decode
 | 
|---|
 | 390 | s/^\(a*\)\1\{9\}\(a\{0,9\}\)\([0-9]*;.*[^a]\2\([0-9]\)\)/\1\4\3/
 | 
|---|
 | 391 | /^a/tdecode
 | 
|---|
 | 392 | s/;.*//p
 | 
|---|
 | 393 | 
 | 
|---|
 | 394 | g
 | 
|---|
 | 395 | :divide
 | 
|---|
 | 396 | s/^\(a*\)\(=b*\)\1/\1\2b/
 | 
|---|
 | 397 | tdivide
 | 
|---|
 | 398 | y/b/a/
 | 
|---|
 | 399 | 
 | 
|---|
 | 400 | /aa$/bfactor
 | 
|---|
 | 401 | ~},
 | 
|---|
 | 402 | 
 | 
|---|
 | 403 |       {IN => "2\n"
 | 
|---|
 | 404 |            . "3\n"
 | 
|---|
 | 405 |            . "4\n"
 | 
|---|
 | 406 |            . "5\n"
 | 
|---|
 | 407 |            . "8\n"
 | 
|---|
 | 408 |            . "11\n"
 | 
|---|
 | 409 |            . "16\n"
 | 
|---|
 | 410 |            . "143\n"},
 | 
|---|
 | 411 |       {OUT => "2\n"
 | 
|---|
 | 412 |            . "3\n"
 | 
|---|
 | 413 |            . "2\n"
 | 
|---|
 | 414 |            . "2\n"
 | 
|---|
 | 415 |            . "5\n"
 | 
|---|
 | 416 |            . "2\n"
 | 
|---|
 | 417 |            . "2\n"
 | 
|---|
 | 418 |            . "2\n"
 | 
|---|
 | 419 |            . "11\n"
 | 
|---|
 | 420 |            . "2\n"
 | 
|---|
 | 421 |            . "2\n"
 | 
|---|
 | 422 |            . "2\n"
 | 
|---|
 | 423 |            . "2\n"
 | 
|---|
 | 424 |            . "13\n"
 | 
|---|
 | 425 |            . "11\n"}
 | 
|---|
 | 426 |      ],
 | 
|---|
 | 427 | 
 | 
|---|
 | 428 | 
 | 
|---|
 | 429 |      ['flipcase',
 | 
|---|
 | 430 |       qw(-f),
 | 
|---|
 | 431 |       {IN => q|s,\([^A-Za-z]*\)\([A-Za-z]*\),\1\L\u\2,g|},
 | 
|---|
 | 432 |       {IN => "09 - 02 - 2002 00.00 Tg La7 La7 -\n"
 | 
|---|
 | 433 |            . "09 - 02 - 2002 00.00 Brand New Tmc 2 -\n"
 | 
|---|
 | 434 |            . "09 - 02 - 2002 00.10 Tg1 Notte Rai Uno -\n"
 | 
|---|
 | 435 |            . "09 - 02 - 2002 00.15 Tg Parlamento Rai Due -\n"
 | 
|---|
 | 436 |            . "09 - 02 - 2002 00.15 Kung Fu - La Leggenda Continua La7 -\n"
 | 
|---|
 | 437 |            . "09 - 02 - 2002 00.20 Berserk - La CoNFESSIONE Di Gatz"
 | 
|---|
 | 438 |              . " Italia 1 Cartoon\n"
 | 
|---|
 | 439 |            . "09 - 02 - 2002 00.20 Tg3 - Tg3 Meteo Rai TrE -\n"
 | 
|---|
 | 440 |            . "09 - 02 - 2002 00.25 Meteo 2 Rai Due -\n"
 | 
|---|
 | 441 |            . "09 - 02 - 2002 00.30 Appuntamento Al CinEMA RaI Due -\n"
 | 
|---|
 | 442 |            . "09 - 02 - 2002 00.30 Rai Educational - Mediamente Rai Tre -\n"
 | 
|---|
 | 443 |            . "09 - 02 - 2002 00.35 Profiler Rai Due -\n"
 | 
|---|
 | 444 |            . "09 - 02 - 2002 00.35 Stampa OggI - Che Tempo Fa Rai Uno -\n"
 | 
|---|
 | 445 |            . "09 - 02 - 2002 00.45 Rai Educational - Babele: Euro Rai Uno -\n"
 | 
|---|
 | 446 |            . "09 - 02 - 2002 00.45 BollettINO Della NEVE RETE 4 News\n"
 | 
|---|
 | 447 |            . "09 - 02 - 2002 00.50 STUDIO Aperto - La Giornata Italia 1 News\n"
 | 
|---|
 | 448 |            . "09 - 02 - 2002 00.50 BOCCA A Bocca - 2 Tempo Rete 4 Film\n"
 | 
|---|
 | 449 |            . "09 - 02 - 2002 01.00 AppuntAMENTO Al Cinema Rai Tre -\n"
 | 
|---|
 | 450 |            . "09 - 02 - 2002 01.00 Music NoN Stop Tmc 2 -\n"
 | 
|---|
 | 451 |            . "09 - 02 - 2002 01.00 Studio SpORT Italia 1 SporT\n"
 | 
|---|
 | 452 |            . "09 - 02 - 2002 01.00 Tg 5 - Notte Canale 5 News\n"
 | 
|---|
 | 453 |            . "09 - 02 - 2002 01.05 Fuori Orario. CosE (Mai) Viste Rai Tre -\n"
 | 
|---|
 | 454 |            . "09 - 02 - 2002 01.15 RAINOTTE Rai Due -\n"
 | 
|---|
 | 455 |            . "09 - 02 - 2002 01.15 Sottovoce Rai Uno -\n"
 | 
|---|
 | 456 |            . "09 - 02 - 2002 01.15 GiOCHI Olimpici InVERNALI - CERIMONIA"
 | 
|---|
 | 457 |              . " Di Apertura Rai Tre -\n"
 | 
|---|
 | 458 |            . "09 - 02 - 2002 01.17 Italia Interroga Rai Due -\n"},
 | 
|---|
 | 459 |       {OUT => "09 - 02 - 2002 00.00 Tg La7 La7 -\n"
 | 
|---|
 | 460 |             . "09 - 02 - 2002 00.00 Brand New Tmc 2 -\n"
 | 
|---|
 | 461 |             . "09 - 02 - 2002 00.10 Tg1 Notte Rai Uno -\n"
 | 
|---|
 | 462 |             . "09 - 02 - 2002 00.15 Tg Parlamento Rai Due -\n"
 | 
|---|
 | 463 |             . "09 - 02 - 2002 00.15 Kung Fu - La Leggenda Continua La7 -\n"
 | 
|---|
 | 464 |             . "09 - 02 - 2002 00.20 Berserk - La Confessione Di Gatz"
 | 
|---|
 | 465 |               . " Italia 1 Cartoon\n"
 | 
|---|
 | 466 |             . "09 - 02 - 2002 00.20 Tg3 - Tg3 Meteo Rai Tre -\n"
 | 
|---|
 | 467 |             . "09 - 02 - 2002 00.25 Meteo 2 Rai Due -\n"
 | 
|---|
 | 468 |             . "09 - 02 - 2002 00.30 Appuntamento Al Cinema Rai Due -\n"
 | 
|---|
 | 469 |             . "09 - 02 - 2002 00.30 Rai Educational - Mediamente Rai Tre -\n"
 | 
|---|
 | 470 |             . "09 - 02 - 2002 00.35 Profiler Rai Due -\n"
 | 
|---|
 | 471 |             . "09 - 02 - 2002 00.35 Stampa Oggi - Che Tempo Fa Rai Uno -\n"
 | 
|---|
 | 472 |             . "09 - 02 - 2002 00.45 Rai Educational - Babele: Euro Rai Uno -\n"
 | 
|---|
 | 473 |             . "09 - 02 - 2002 00.45 Bollettino Della Neve Rete 4 News\n"
 | 
|---|
 | 474 |             . "09 - 02 - 2002 00.50 Studio Aperto - La Giornata Italia 1 News\n"
 | 
|---|
 | 475 |             . "09 - 02 - 2002 00.50 Bocca A Bocca - 2 Tempo Rete 4 Film\n"
 | 
|---|
 | 476 |             . "09 - 02 - 2002 01.00 Appuntamento Al Cinema Rai Tre -\n"
 | 
|---|
 | 477 |             . "09 - 02 - 2002 01.00 Music Non Stop Tmc 2 -\n"
 | 
|---|
 | 478 |             . "09 - 02 - 2002 01.00 Studio Sport Italia 1 Sport\n"
 | 
|---|
 | 479 |             . "09 - 02 - 2002 01.00 Tg 5 - Notte Canale 5 News\n"
 | 
|---|
 | 480 |             . "09 - 02 - 2002 01.05 Fuori Orario. Cose (Mai) Viste Rai Tre -\n"
 | 
|---|
 | 481 |             . "09 - 02 - 2002 01.15 Rainotte Rai Due -\n"
 | 
|---|
 | 482 |             . "09 - 02 - 2002 01.15 Sottovoce Rai Uno -\n"
 | 
|---|
 | 483 |             . "09 - 02 - 2002 01.15 Giochi Olimpici Invernali - Cerimonia"
 | 
|---|
 | 484 |               . " Di Apertura Rai Tre -\n"
 | 
|---|
 | 485 |             . "09 - 02 - 2002 01.17 Italia Interroga Rai Due -\n"}
 | 
|---|
 | 486 |        ],
 | 
|---|
 | 487 | 
 | 
|---|
 | 488 | 
 | 
|---|
 | 489 |      ['inclib',
 | 
|---|
 | 490 |       # inspired by an autoconf generated configure script.
 | 
|---|
 | 491 |       qw(-e 's;lib;include;'),
 | 
|---|
 | 492 |       {IN => "  /usr/X11R6/lib\n"
 | 
|---|
 | 493 |            . "  /usr/X11R5/lib\n"
 | 
|---|
 | 494 |            . "  /usr/X11R4/lib\n"
 | 
|---|
 | 495 |            . "\n"
 | 
|---|
 | 496 |            . "  /usr/lib/X11R6\n"
 | 
|---|
 | 497 |            . "  /usr/lib/X11R5\n"
 | 
|---|
 | 498 |            . "  /usr/lib/X11R4\n"
 | 
|---|
 | 499 |            . "\n"
 | 
|---|
 | 500 |            . "  /usr/local/X11R6/lib\n"
 | 
|---|
 | 501 |            . "  /usr/local/X11R5/lib\n"
 | 
|---|
 | 502 |            . "  /usr/local/X11R4/lib\n"
 | 
|---|
 | 503 |            . "\n"
 | 
|---|
 | 504 |            . "  /usr/local/lib/X11R6\n"
 | 
|---|
 | 505 |            . "  /usr/local/lib/X11R5\n"
 | 
|---|
 | 506 |            . "  /usr/local/lib/X11R4\n"
 | 
|---|
 | 507 |            . "\n"
 | 
|---|
 | 508 |            . "  /usr/X11/lib\n"
 | 
|---|
 | 509 |            . "  /usr/lib/X11\n"
 | 
|---|
 | 510 |            . "  /usr/local/X11/lib\n"
 | 
|---|
 | 511 |            . "  /usr/local/lib/X11\n"
 | 
|---|
 | 512 |            . "\n"
 | 
|---|
 | 513 |            . "  /usr/X386/lib\n"
 | 
|---|
 | 514 |            . "  /usr/x386/lib\n"
 | 
|---|
 | 515 |            . "  /usr/XFree86/lib/X11\n"
 | 
|---|
 | 516 |            . "\n"
 | 
|---|
 | 517 |            . "  /usr/lib\n"
 | 
|---|
 | 518 |            . "  /usr/local/lib\n"
 | 
|---|
 | 519 |            . "  /usr/unsupported/lib\n"
 | 
|---|
 | 520 |            . "  /usr/athena/lib\n"
 | 
|---|
 | 521 |            . "  /usr/local/x11r5/lib\n"
 | 
|---|
 | 522 |            . "  /usr/lpp/Xamples/lib\n"
 | 
|---|
 | 523 |            . "\n"
 | 
|---|
 | 524 |            . "  /usr/openwin/lib\n"
 | 
|---|
 | 525 |            . "  /usr/openwin/share/lib\n"},
 | 
|---|
 | 526 |       {OUT => " /usr/X11R6/include\n"
 | 
|---|
 | 527 |             . " /usr/X11R5/include\n"
 | 
|---|
 | 528 |             . " /usr/X11R4/include\n"
 | 
|---|
 | 529 |             . "\n"
 | 
|---|
 | 530 |             . " /usr/include/X11R6\n"
 | 
|---|
 | 531 |             . " /usr/include/X11R5\n"
 | 
|---|
 | 532 |             . " /usr/include/X11R4\n"
 | 
|---|
 | 533 |             . "\n"
 | 
|---|
 | 534 |             . " /usr/local/X11R6/include\n"
 | 
|---|
 | 535 |             . " /usr/local/X11R5/include\n"
 | 
|---|
 | 536 |             . " /usr/local/X11R4/include\n"
 | 
|---|
 | 537 |             . "\n"
 | 
|---|
 | 538 |             . " /usr/local/include/X11R6\n"
 | 
|---|
 | 539 |             . " /usr/local/include/X11R5\n"
 | 
|---|
 | 540 |             . " /usr/local/include/X11R4\n"
 | 
|---|
 | 541 |             . "\n"
 | 
|---|
 | 542 |             . " /usr/X11/include\n"
 | 
|---|
 | 543 |             . " /usr/include/X11\n"
 | 
|---|
 | 544 |             . " /usr/local/X11/include\n"
 | 
|---|
 | 545 |             . " /usr/local/include/X11\n"
 | 
|---|
 | 546 |             . "\n"
 | 
|---|
 | 547 |             . " /usr/X386/include\n"
 | 
|---|
 | 548 |             . " /usr/x386/include\n"
 | 
|---|
 | 549 |             . " /usr/XFree86/include/X11\n"
 | 
|---|
 | 550 |             . "\n"
 | 
|---|
 | 551 |             . " /usr/include\n"
 | 
|---|
 | 552 |             . " /usr/local/include\n"
 | 
|---|
 | 553 |             . " /usr/unsupported/include\n"
 | 
|---|
 | 554 |             . " /usr/athena/include\n"
 | 
|---|
 | 555 |             . " /usr/local/x11r5/include\n"
 | 
|---|
 | 556 |             . " /usr/lpp/Xamples/include\n"
 | 
|---|
 | 557 |             . "\n"
 | 
|---|
 | 558 |             . " /usr/openwin/include\n"
 | 
|---|
 | 559 |             . " /usr/openwin/share/include\n"}
 | 
|---|
 | 560 |      ],
 | 
|---|
 | 561 | 
 | 
|---|
 | 562 |      ['khadafy',
 | 
|---|
 | 563 |       # The Khadafy test is brought to you by Scott Anderson . . .
 | 
|---|
 | 564 |       qw(-f),
 | 
|---|
 | 565 |       {IN => '/M[ou]\'\{0,1\}am\{1,2\}[ae]r' .
 | 
|---|
 | 566 |              ' .*' .
 | 
|---|
 | 567 |              '\([AEae]l[- ]\)\{0,1\}' .
 | 
|---|
 | 568 |              '[GKQ]h\{0,1\}[aeu]\{1,\}\([dtz][dhz]\{0,1\}\)\{1,\}af[iy]/!d'},
 | 
|---|
 | 569 |       {IN => "1)  Muammar Qaddafi\n"
 | 
|---|
 | 570 |            . "2)  Mo'ammar Gadhafi\n"
 | 
|---|
 | 571 |            . "3)  Muammar Kaddafi\n"
 | 
|---|
 | 572 |            . "4)  Muammar Qadhafi\n"
 | 
|---|
 | 573 |            . "5)  Moammar El Kadhafi\n"
 | 
|---|
 | 574 |            . "6)  Muammar Gadafi\n"
 | 
|---|
 | 575 |            . "7)  Mu'ammar al-Qadafi\n"
 | 
|---|
 | 576 |            . "8)  Moamer El Kazzafi\n"
 | 
|---|
 | 577 |            . "9)  Moamar al-Gaddafi\n"
 | 
|---|
 | 578 |            . "10) Mu'ammar Al Qathafi\n"
 | 
|---|
 | 579 |            . "11) Muammar Al Qathafi\n"
 | 
|---|
 | 580 |            . "12) Mo'ammar el-Gadhafi\n"
 | 
|---|
 | 581 |            . "13) Moamar El Kadhafi\n"
 | 
|---|
 | 582 |            . "14) Muammar al-Qadhafi\n"
 | 
|---|
 | 583 |            . "15) Mu'ammar al-Qadhdhafi\n"
 | 
|---|
 | 584 |            . "16) Mu'ammar Qadafi\n"
 | 
|---|
 | 585 |            . "17) Moamar Gaddafi\n"
 | 
|---|
 | 586 |            . "18) Mu'ammar Qadhdhafi\n"
 | 
|---|
 | 587 |            . "19) Muammar Khaddafi\n"
 | 
|---|
 | 588 |            . "20) Muammar al-Khaddafi\n"
 | 
|---|
 | 589 |            . "21) Mu'amar al-Kadafi\n"
 | 
|---|
 | 590 |            . "22) Muammar Ghaddafy\n"
 | 
|---|
 | 591 |            . "23) Muammar Ghadafi\n"
 | 
|---|
 | 592 |            . "24) Muammar Ghaddafi\n"
 | 
|---|
 | 593 |            . "25) Muamar Kaddafi\n"
 | 
|---|
 | 594 |            . "26) Muammar Quathafi\n"
 | 
|---|
 | 595 |            . "27) Muammar Gheddafi\n"
 | 
|---|
 | 596 |            . "28) Muamar Al-Kaddafi\n"
 | 
|---|
 | 597 |            . "29) Moammar Khadafy\n"
 | 
|---|
 | 598 |            . "30) Moammar Qudhafi\n"
 | 
|---|
 | 599 |            . "31) Mu'ammar al-Qaddafi\n"
 | 
|---|
 | 600 |            . "32) Mulazim Awwal Mu'ammar Muhammad Abu Minyar al-Qadhafi\n"},
 | 
|---|
 | 601 |       {OUT => "1)  Muammar Qaddafi\n"
 | 
|---|
 | 602 |             . "2)  Mo'ammar Gadhafi\n"
 | 
|---|
 | 603 |             . "3)  Muammar Kaddafi\n"
 | 
|---|
 | 604 |             . "4)  Muammar Qadhafi\n"
 | 
|---|
 | 605 |             . "5)  Moammar El Kadhafi\n"
 | 
|---|
 | 606 |             . "6)  Muammar Gadafi\n"
 | 
|---|
 | 607 |             . "7)  Mu'ammar al-Qadafi\n"
 | 
|---|
 | 608 |             . "8)  Moamer El Kazzafi\n"
 | 
|---|
 | 609 |             . "9)  Moamar al-Gaddafi\n"
 | 
|---|
 | 610 |             . "10) Mu'ammar Al Qathafi\n"
 | 
|---|
 | 611 |             . "11) Muammar Al Qathafi\n"
 | 
|---|
 | 612 |             . "12) Mo'ammar el-Gadhafi\n"
 | 
|---|
 | 613 |             . "13) Moamar El Kadhafi\n"
 | 
|---|
 | 614 |             . "14) Muammar al-Qadhafi\n"
 | 
|---|
 | 615 |             . "15) Mu'ammar al-Qadhdhafi\n"
 | 
|---|
 | 616 |             . "16) Mu'ammar Qadafi\n"
 | 
|---|
 | 617 |             . "17) Moamar Gaddafi\n"
 | 
|---|
 | 618 |             . "18) Mu'ammar Qadhdhafi\n"
 | 
|---|
 | 619 |             . "19) Muammar Khaddafi\n"
 | 
|---|
 | 620 |             . "20) Muammar al-Khaddafi\n"
 | 
|---|
 | 621 |             . "21) Mu'amar al-Kadafi\n"
 | 
|---|
 | 622 |             . "22) Muammar Ghaddafy\n"
 | 
|---|
 | 623 |             . "23) Muammar Ghadafi\n"
 | 
|---|
 | 624 |             . "24) Muammar Ghaddafi\n"
 | 
|---|
 | 625 |             . "25) Muamar Kaddafi\n"
 | 
|---|
 | 626 |             . "26) Muammar Quathafi\n"
 | 
|---|
 | 627 |             . "27) Muammar Gheddafi\n"
 | 
|---|
 | 628 |             . "28) Muamar Al-Kaddafi\n"
 | 
|---|
 | 629 |             . "29) Moammar Khadafy\n"
 | 
|---|
 | 630 |             . "30) Moammar Qudhafi\n"
 | 
|---|
 | 631 |             . "31) Mu'ammar al-Qaddafi\n"
 | 
|---|
 | 632 |             . "32) Mulazim Awwal Mu'ammar Muhammad Abu Minyar al-Qadhafi\n"}
 | 
|---|
 | 633 |      ],
 | 
|---|
 | 634 | 
 | 
|---|
 | 635 |      ['linecnt',
 | 
|---|
 | 636 |       qw(-e '='),
 | 
|---|
 | 637 |       {IN => "A dialogue on poverty\n"
 | 
|---|
 | 638 |            . "\n"
 | 
|---|
 | 639 |            . "  On the night when the rain beats,\n"
 | 
|---|
 | 640 |            . "  Driven by the wind,\n"
 | 
|---|
 | 641 |            . "  On the night when the snowflakes mingle\n"
 | 
|---|
 | 642 |            . "  With a sleety rain,\n"
 | 
|---|
 | 643 |            . "  I feel so helplessly cold.\n"
 | 
|---|
 | 644 |            . "  I nibble at a lump of salt,\n"
 | 
|---|
 | 645 |            . "  Sip the hot, oft-diluted dregs of _sake_;\n"
 | 
|---|
 | 646 |            . "  And coughing, snuffling,\n"
 | 
|---|
 | 647 |            . "  And stroking my scanty beard,\n"
 | 
|---|
 | 648 |            . "  I say in my pride,\n"
 | 
|---|
 | 649 |            . "  \"There's none worthy, save I!\"\n"
 | 
|---|
 | 650 |            . "  But I shiver still with cold.\n"
 | 
|---|
 | 651 |            . "  I pull up my hempen bedclothes,\n"
 | 
|---|
 | 652 |            . "  Wear what few sleeveless clothes I have,\n"
 | 
|---|
 | 653 |            . "  But cold and bitter is the night!\n"
 | 
|---|
 | 654 |            . "  As for those poorer than myself,\n"
 | 
|---|
 | 655 |            . "  Their parents must be cold and hungry,\n"
 | 
|---|
 | 656 |            . "  Their wives and children beg and cry.\n"
 | 
|---|
 | 657 |            . "  Then, how do you struggle through life?\n"
 | 
|---|
 | 658 |            . "\n"
 | 
|---|
 | 659 |            . "  Wide as they call the heaven and earth,\n"
 | 
|---|
 | 660 |            . "  For me they have shrunk quite small;\n"
 | 
|---|
 | 661 |            . "  Bright though they call the sun and moon,\n"
 | 
|---|
 | 662 |            . "  They never shine for me.\n"
 | 
|---|
 | 663 |            . "  Is it the same with all men,\n"
 | 
|---|
 | 664 |            . "  Or for me alone?\n"
 | 
|---|
 | 665 |            . "  By rare chance I was born a man\n"
 | 
|---|
 | 666 |            . "  And no meaner than my fellows,\n"
 | 
|---|
 | 667 |            . "  But, wearing unwadded sleeveless clothes\n"
 | 
|---|
 | 668 |            . "  In tatters, like weeds waving in the sea,\n"
 | 
|---|
 | 669 |            . "  Hanging from my shoulders,\n"
 | 
|---|
 | 670 |            . "  And under the sunken roof,\n"
 | 
|---|
 | 671 |            . "  Within the leaning walls,\n"
 | 
|---|
 | 672 |            . "  Here I lie on straw\n"
 | 
|---|
 | 673 |            . "  Spread on bare earth,\n"
 | 
|---|
 | 674 |            . "  With my parents at my pillow,\n"
 | 
|---|
 | 675 |            . "  And my wife and children at my feet,\n"
 | 
|---|
 | 676 |            . "  All huddled in grief and tears.\n"
 | 
|---|
 | 677 |            . "  No fire sends up smoke\n"
 | 
|---|
 | 678 |            . "  At the cooking-place,\n"
 | 
|---|
 | 679 |            . "  And in the cauldron\n"
 | 
|---|
 | 680 |            . "  A spider spins its web.\n"
 | 
|---|
 | 681 |            . "  With not a grain to cook,\n"
 | 
|---|
 | 682 |            . "  We moan like the night thrush.\n"
 | 
|---|
 | 683 |            . "  Then, \"to cut,\" as the saying is,\n"
 | 
|---|
 | 684 |            . "  \"The ends of what is already too short,\"\n"
 | 
|---|
 | 685 |            . "  The village headman comes,\n"
 | 
|---|
 | 686 |            . "  With rod in hand, to our sleeping place,\n"
 | 
|---|
 | 687 |            . "  Growling for his dues.\n"
 | 
|---|
 | 688 |            . "  Must it be so hopeless --\n"
 | 
|---|
 | 689 |            . "  The way of this world?\n"
 | 
|---|
 | 690 |            . "\n"
 | 
|---|
 | 691 |            . "  -- Yamanoue Okura\n"},
 | 
|---|
 | 692 |       {OUT => "1\n"
 | 
|---|
 | 693 |             . "A dialogue on poverty\n"
 | 
|---|
 | 694 |             . "2\n"
 | 
|---|
 | 695 |             . "\n"
 | 
|---|
 | 696 |             . "3\n"
 | 
|---|
 | 697 |             . " On the night when the rain beats,\n"
 | 
|---|
 | 698 |             . "4\n"
 | 
|---|
 | 699 |             . " Driven by the wind,\n"
 | 
|---|
 | 700 |             . "5\n"
 | 
|---|
 | 701 |             . " On the night when the snowflakes mingle\n"
 | 
|---|
 | 702 |             . "6\n"
 | 
|---|
 | 703 |             . " With a sleety rain,\n"
 | 
|---|
 | 704 |             . "7\n"
 | 
|---|
 | 705 |             . " I feel so helplessly cold.\n"
 | 
|---|
 | 706 |             . "8\n"
 | 
|---|
 | 707 |             . " I nibble at a lump of salt,\n"
 | 
|---|
 | 708 |             . "9\n"
 | 
|---|
 | 709 |             . " Sip the hot, oft-diluted dregs of _sake_;\n"
 | 
|---|
 | 710 |             . "10\n"
 | 
|---|
 | 711 |             . " And coughing, snuffling,\n"
 | 
|---|
 | 712 |             . "11\n"
 | 
|---|
 | 713 |             . " And stroking my scanty beard,\n"
 | 
|---|
 | 714 |             . "12\n"
 | 
|---|
 | 715 |             . " I say in my pride,\n"
 | 
|---|
 | 716 |             . "13\n"
 | 
|---|
 | 717 |             . " \"There's none worthy, save I!\"\n"
 | 
|---|
 | 718 |             . "14\n"
 | 
|---|
 | 719 |             . " But I shiver still with cold.\n"
 | 
|---|
 | 720 |             . "15\n"
 | 
|---|
 | 721 |             . " I pull up my hempen bedclothes,\n"
 | 
|---|
 | 722 |             . "16\n"
 | 
|---|
 | 723 |             . " Wear what few sleeveless clothes I have,\n"
 | 
|---|
 | 724 |             . "17\n"
 | 
|---|
 | 725 |             . " But cold and bitter is the night!\n"
 | 
|---|
 | 726 |             . "18\n"
 | 
|---|
 | 727 |             . " As for those poorer than myself,\n"
 | 
|---|
 | 728 |             . "19\n"
 | 
|---|
 | 729 |             . " Their parents must be cold and hungry,\n"
 | 
|---|
 | 730 |             . "20\n"
 | 
|---|
 | 731 |             . " Their wives and children beg and cry.\n"
 | 
|---|
 | 732 |             . "21\n"
 | 
|---|
 | 733 |             . " Then, how do you struggle through life?\n"
 | 
|---|
 | 734 |             . "22\n"
 | 
|---|
 | 735 |             . "\n"
 | 
|---|
 | 736 |             . "23\n"
 | 
|---|
 | 737 |             . " Wide as they call the heaven and earth,\n"
 | 
|---|
 | 738 |             . "24\n"
 | 
|---|
 | 739 |             . " For me they have shrunk quite small;\n"
 | 
|---|
 | 740 |             . "25\n"
 | 
|---|
 | 741 |             . " Bright though they call the sun and moon,\n"
 | 
|---|
 | 742 |             . "26\n"
 | 
|---|
 | 743 |             . " They never shine for me.\n"
 | 
|---|
 | 744 |             . "27\n"
 | 
|---|
 | 745 |             . " Is it the same with all men,\n"
 | 
|---|
 | 746 |             . "28\n"
 | 
|---|
 | 747 |             . " Or for me alone?\n"
 | 
|---|
 | 748 |             . "29\n"
 | 
|---|
 | 749 |             . " By rare chance I was born a man\n"
 | 
|---|
 | 750 |             . "30\n"
 | 
|---|
 | 751 |             . " And no meaner than my fellows,\n"
 | 
|---|
 | 752 |             . "31\n"
 | 
|---|
 | 753 |             . " But, wearing unwadded sleeveless clothes\n"
 | 
|---|
 | 754 |             . "32\n"
 | 
|---|
 | 755 |             . " In tatters, like weeds waving in the sea,\n"
 | 
|---|
 | 756 |             . "33\n"
 | 
|---|
 | 757 |             . " Hanging from my shoulders,\n"
 | 
|---|
 | 758 |             . "34\n"
 | 
|---|
 | 759 |             . " And under the sunken roof,\n"
 | 
|---|
 | 760 |             . "35\n"
 | 
|---|
 | 761 |             . " Within the leaning walls,\n"
 | 
|---|
 | 762 |             . "36\n"
 | 
|---|
 | 763 |             . " Here I lie on straw\n"
 | 
|---|
 | 764 |             . "37\n"
 | 
|---|
 | 765 |             . " Spread on bare earth,\n"
 | 
|---|
 | 766 |             . "38\n"
 | 
|---|
 | 767 |             . " With my parents at my pillow,\n"
 | 
|---|
 | 768 |             . "39\n"
 | 
|---|
 | 769 |             . " And my wife and children at my feet,\n"
 | 
|---|
 | 770 |             . "40\n"
 | 
|---|
 | 771 |             . " All huddled in grief and tears.\n"
 | 
|---|
 | 772 |             . "41\n"
 | 
|---|
 | 773 |             . " No fire sends up smoke\n"
 | 
|---|
 | 774 |             . "42\n"
 | 
|---|
 | 775 |             . " At the cooking-place,\n"
 | 
|---|
 | 776 |             . "43\n"
 | 
|---|
 | 777 |             . " And in the cauldron\n"
 | 
|---|
 | 778 |             . "44\n"
 | 
|---|
 | 779 |             . " A spider spins its web.\n"
 | 
|---|
 | 780 |             . "45\n"
 | 
|---|
 | 781 |             . " With not a grain to cook,\n"
 | 
|---|
 | 782 |             . "46\n"
 | 
|---|
 | 783 |             . " We moan like the night thrush.\n"
 | 
|---|
 | 784 |             . "47\n"
 | 
|---|
 | 785 |             . " Then, \"to cut,\" as the saying is,\n"
 | 
|---|
 | 786 |             . "48\n"
 | 
|---|
 | 787 |             . " \"The ends of what is already too short,\"\n"
 | 
|---|
 | 788 |             . "49\n"
 | 
|---|
 | 789 |             . " The village headman comes,\n"
 | 
|---|
 | 790 |             . "50\n"
 | 
|---|
 | 791 |             . " With rod in hand, to our sleeping place,\n"
 | 
|---|
 | 792 |             . "51\n"
 | 
|---|
 | 793 |             . " Growling for his dues.\n"
 | 
|---|
 | 794 |             . "52\n"
 | 
|---|
 | 795 |             . " Must it be so hopeless --\n"
 | 
|---|
 | 796 |             . "53\n"
 | 
|---|
 | 797 |             . " The way of this world?\n"
 | 
|---|
 | 798 |             . "54\n"
 | 
|---|
 | 799 |             . "\n"
 | 
|---|
 | 800 |             . "55\n"
 | 
|---|
 | 801 |             . " -- Yamanoue Okura\n"}
 | 
|---|
 | 802 |      ],
 | 
|---|
 | 803 | 
 | 
|---|
 | 804 |      ['manis',
 | 
|---|
 | 805 |       # straight out of an autoconf-generated configure.
 | 
|---|
 | 806 |       # The input should look just like the input after this is run.
 | 
|---|
 | 807 |       #
 | 
|---|
 | 808 |       # Protect against being on the right side of a sed subst in config.status.
 | 
|---|
 | 809 |       qw(-f),
 | 
|---|
 | 810 |       {IN => q(s/%@/@@/; s/@%/@@/; s/%g$/@g/; /@g$/s/[\\\\&%]/\\\\&/g;
 | 
|---|
 | 811 | s/@@/%@/; s/@@/@%/; s/@g$/%g/
 | 
|---|
 | 812 | )},
 | 
|---|
 | 813 |       {IN => "s\%\@CFLAGS\@\%\%g\n"
 | 
|---|
 | 814 |            . "s\%\@CPPFLAGS\@\%-I/\%g\n"
 | 
|---|
 | 815 |            . "s\%\@CXXFLAGS\@\%-x c++\%g\n"
 | 
|---|
 | 816 |            . "s\%\@DEFS\@\%\$DEFS\%g\n"
 | 
|---|
 | 817 |            . "s\%\@LDFLAGS\@\%-L/usr/lib\%g\n"
 | 
|---|
 | 818 |            . "s\%\@LIBS\@\%-lgnu -lbfd\%g\n"
 | 
|---|
 | 819 |            . "s\%\@exec_prefix\@\%\%g\n"
 | 
|---|
 | 820 |            . "s\%\@prefix\@\%\$prefix\%g\n"
 | 
|---|
 | 821 |            . "s\%\@RANLIB\@\%\$RANLIB\%g\n"
 | 
|---|
 | 822 |            . "s\%\@CC\@\%/usr/local/bin/gcc\%g\n"
 | 
|---|
 | 823 |            . "s\%\@CPP\@\%\$CPP\%g\n"
 | 
|---|
 | 824 |            . "s\%\@XCFLAGS\@\%\$XCFLAGS\%g\n"
 | 
|---|
 | 825 |            . "s\%\@XINCLUDES\@\%\$XINCLUDES\%g\n"
 | 
|---|
 | 826 |            . "s\%\@XLIBS\@\%\$XLIBS\%g\n"
 | 
|---|
 | 827 |            . "s\%\@XPROGS\@\%\$XPROGS\%g\n"
 | 
|---|
 | 828 |            . "s\%\@TCLHDIR\@\%\$TCLHDIR\%g\n"
 | 
|---|
 | 829 |            . "s\%\@TCLLIB\@\%\$TCLLIB\%g\n"
 | 
|---|
 | 830 |            . "s\%\@TKHDIR\@\%\$TKHDIR\%g\n"
 | 
|---|
 | 831 |            . "s\%\@TKLIB\@\%\$TKLIB\%g\n"
 | 
|---|
 | 832 |            . "s\%\@PTY_TYPE\@\%\$PTY_TYPE\%g\n"
 | 
|---|
 | 833 |            . "s\%\@EVENT_TYPE\@\%\$EVENT_TYPE\%g\n"
 | 
|---|
 | 834 |            . "s\%\@SETUID\@\%\$SETUID\%g\n"},
 | 
|---|
 | 835 |       {OUT => "s\%\@CFLAGS\@\%\%g\n"
 | 
|---|
 | 836 |             . "s\%\@CPPFLAGS\@\%-I/\%g\n"
 | 
|---|
 | 837 |             . "s\%\@CXXFLAGS\@\%-x c++\%g\n"
 | 
|---|
 | 838 |             . "s\%\@DEFS\@\%\$DEFS\%g\n"
 | 
|---|
 | 839 |             . "s\%\@LDFLAGS\@\%-L/usr/lib\%g\n"
 | 
|---|
 | 840 |             . "s\%\@LIBS\@\%-lgnu -lbfd\%g\n"
 | 
|---|
 | 841 |             . "s\%\@exec_prefix\@\%\%g\n"
 | 
|---|
 | 842 |             . "s\%\@prefix\@\%\$prefix\%g\n"
 | 
|---|
 | 843 |             . "s\%\@RANLIB\@\%\$RANLIB\%g\n"
 | 
|---|
 | 844 |             . "s\%\@CC\@\%/usr/local/bin/gcc\%g\n"
 | 
|---|
 | 845 |             . "s\%\@CPP\@\%\$CPP\%g\n"
 | 
|---|
 | 846 |             . "s\%\@XCFLAGS\@\%\$XCFLAGS\%g\n"
 | 
|---|
 | 847 |             . "s\%\@XINCLUDES\@\%\$XINCLUDES\%g\n"
 | 
|---|
 | 848 |             . "s\%\@XLIBS\@\%\$XLIBS\%g\n"
 | 
|---|
 | 849 |             . "s\%\@XPROGS\@\%\$XPROGS\%g\n"
 | 
|---|
 | 850 |             . "s\%\@TCLHDIR\@\%\$TCLHDIR\%g\n"
 | 
|---|
 | 851 |             . "s\%\@TCLLIB\@\%\$TCLLIB\%g\n"
 | 
|---|
 | 852 |             . "s\%\@TKHDIR\@\%\$TKHDIR\%g\n"
 | 
|---|
 | 853 |             . "s\%\@TKLIB\@\%\$TKLIB\%g\n"
 | 
|---|
 | 854 |             . "s\%\@PTY_TYPE\@\%\$PTY_TYPE\%g\n"
 | 
|---|
 | 855 |             . "s\%\@EVENT_TYPE\@\%\$EVENT_TYPE\%g\n"
 | 
|---|
 | 856 |             . "s\%\@SETUID\@\%\$SETUID\%g\n"}
 | 
|---|
 | 857 |      ],
 | 
|---|
 | 858 | 
 | 
|---|
 | 859 |      ['modulo',
 | 
|---|
 | 860 |       qw(-e '0~2d;='),
 | 
|---|
 | 861 |       {IN => "s\%\@CFLAGS\@\%\%g\n"
 | 
|---|
 | 862 |            . "s\%\@CPPFLAGS\@\%-I/\%g\n"
 | 
|---|
 | 863 |            . "s\%\@CXXFLAGS\@\%-x c++\%g\n"
 | 
|---|
 | 864 |            . "s\%\@DEFS\@\%\$DEFS\%g\n"
 | 
|---|
 | 865 |            . "s\%\@LDFLAGS\@\%-L/usr/lib\%g\n"
 | 
|---|
 | 866 |            . "s\%\@LIBS\@\%-lgnu -lbfd\%g\n"
 | 
|---|
 | 867 |            . "s\%\@exec_prefix\@\%\%g\n"
 | 
|---|
 | 868 |            . "s\%\@prefix\@\%\$prefix\%g\n"
 | 
|---|
 | 869 |            . "s\%\@RANLIB\@\%\$RANLIB\%g\n"
 | 
|---|
 | 870 |            . "s\%\@CC\@\%/usr/local/bin/gcc\%g\n"
 | 
|---|
 | 871 |            . "s\%\@CPP\@\%\$CPP\%g\n"
 | 
|---|
 | 872 |            . "s\%\@XCFLAGS\@\%\$XCFLAGS\%g\n"
 | 
|---|
 | 873 |            . "s\%\@XINCLUDES\@\%\$XINCLUDES\%g\n"
 | 
|---|
 | 874 |            . "s\%\@XLIBS\@\%\$XLIBS\%g\n"
 | 
|---|
 | 875 |            . "s\%\@XPROGS\@\%\$XPROGS\%g\n"
 | 
|---|
 | 876 |            . "s\%\@TCLHDIR\@\%\$TCLHDIR\%g\n"
 | 
|---|
 | 877 |            . "s\%\@TCLLIB\@\%\$TCLLIB\%g\n"
 | 
|---|
 | 878 |            . "s\%\@TKHDIR\@\%\$TKHDIR\%g\n"
 | 
|---|
 | 879 |            . "s\%\@TKLIB\@\%\$TKLIB\%g\n"
 | 
|---|
 | 880 |            . "s\%\@PTY_TYPE\@\%\$PTY_TYPE\%g\n"
 | 
|---|
 | 881 |            . "s\%\@EVENT_TYPE\@\%\$EVENT_TYPE\%g\n"
 | 
|---|
 | 882 |            . "s\%\@SETUID\@\%\$SETUID\%g\n"},
 | 
|---|
 | 883 |       {OUT => "1\n"
 | 
|---|
 | 884 |             . "s\%\@CFLAGS\@\%\%g\n"
 | 
|---|
 | 885 |             . "3\n"
 | 
|---|
 | 886 |             . "s\%\@CXXFLAGS\@\%-x c++\%g\n"
 | 
|---|
 | 887 |             . "5\n"
 | 
|---|
 | 888 |             . "s\%\@LDFLAGS\@\%-L/usr/lib\%g\n"
 | 
|---|
 | 889 |             . "7\n"
 | 
|---|
 | 890 |             . "s\%\@exec_prefix\@\%\%g\n"
 | 
|---|
 | 891 |             . "9\n"
 | 
|---|
 | 892 |             . "s\%\@RANLIB\@\%\$RANLIB\%g\n"
 | 
|---|
 | 893 |             . "11\n"
 | 
|---|
 | 894 |             . "s\%\@CPP\@\%\$CPP\%g\n"
 | 
|---|
 | 895 |             . "13\n"
 | 
|---|
 | 896 |             . "s\%\@XINCLUDES\@\%\$XINCLUDES\%g\n"
 | 
|---|
 | 897 |             . "15\n"
 | 
|---|
 | 898 |             . "s\%\@XPROGS\@\%\$XPROGS\%g\n"
 | 
|---|
 | 899 |             . "17\n"
 | 
|---|
 | 900 |             . "s\%\@TCLLIB\@\%\$TCLLIB\%g\n"
 | 
|---|
 | 901 |             . "19\n"
 | 
|---|
 | 902 |             . "s\%\@TKLIB\@\%\$TKLIB\%g\n"
 | 
|---|
 | 903 |             . "21\n"
 | 
|---|
 | 904 |             . "s\%\@EVENT_TYPE\@\%\$EVENT_TYPE\%g\n"}
 | 
|---|
 | 905 |       ],
 | 
|---|
 | 906 | 
 | 
|---|
 | 907 |      ['middle',
 | 
|---|
 | 908 |       qw(-n -e '3,5p'),
 | 
|---|
 | 909 |       {IN => q(   "...by imposing a tiny bit of order in a communication you are
 | 
|---|
 | 910 |    translating, you are carving out a little bit of order in the
 | 
|---|
 | 911 |    universe.  You will never succeed.  Everything will fail and come
 | 
|---|
 | 912 |    to an end finally.  But you have a chance to carve a little bit
 | 
|---|
 | 913 |    of order and maybe even beauty out of the raw materials that
 | 
|---|
 | 914 |    surround you everywhere, and I think there is no greater meaning
 | 
|---|
 | 915 |    in life."
 | 
|---|
 | 916 | 
 | 
|---|
 | 917 |              Donald L. Philippi, Oct 1930 - Jan 1993
 | 
|---|
 | 918 | )},
 | 
|---|
 | 919 |     {OUT =>
 | 
|---|
 | 920 | q(   universe.  You will never succeed.  Everything will fail and come
 | 
|---|
 | 921 |    to an end finally.  But you have a chance to carve a little bit
 | 
|---|
 | 922 |    of order and maybe even beauty out of the raw materials that
 | 
|---|
 | 923 | )}
 | 
|---|
 | 924 |      ],
 | 
|---|
 | 925 | 
 | 
|---|
 | 926 |      ['newline-anchor',
 | 
|---|
 | 927 |       qw(-f),
 | 
|---|
 | 928 |       {IN => q(N
 | 
|---|
 | 929 | N
 | 
|---|
 | 930 | s/^/X/g
 | 
|---|
 | 931 | s/^/X/mg
 | 
|---|
 | 932 | s/$/Y/g
 | 
|---|
 | 933 | s/$/Y/mg
 | 
|---|
 | 934 | )},
 | 
|---|
 | 935 |       {IN => "a\n"
 | 
|---|
 | 936 |            . "b\n"
 | 
|---|
 | 937 |            . "c\n"},
 | 
|---|
 | 938 |       {OUT => "XXaY\n"
 | 
|---|
 | 939 |             . "XbY\n"
 | 
|---|
 | 940 |             . "XcYY\n"}
 | 
|---|
 | 941 |      ],
 | 
|---|
 | 942 | 
 | 
|---|
 | 943 |      ['noeolw',
 | 
|---|
 | 944 |       qw(-n -f),
 | 
|---|
 | 945 |       # The sed program:
 | 
|---|
 | 946 |       # generates two output files (in addition to STDOUT)
 | 
|---|
 | 947 |       {IN => q(w noeolw.1out
 | 
|---|
 | 948 | $ {
 | 
|---|
 | 949 |         x
 | 
|---|
 | 950 |         w noeolw.1out
 | 
|---|
 | 951 |         x
 | 
|---|
 | 952 | }
 | 
|---|
 | 953 | h
 | 
|---|
 | 954 | 1,3w noeolw.2out
 | 
|---|
 | 955 | p
 | 
|---|
 | 956 | p
 | 
|---|
 | 957 | )},
 | 
|---|
 | 958 |       # The input file (was: noeolw.inp).
 | 
|---|
 | 959 |       # NOTE: in the old test, the input file was given twice.
 | 
|---|
 | 960 |       #       here we specify two (identical) input files.
 | 
|---|
 | 961 |       {IN => "This file is unique\n" .
 | 
|---|
 | 962 |              "in that it does\n" .
 | 
|---|
 | 963 |              "end in a newline."},
 | 
|---|
 | 964 |       {IN => "This file is unique\n" .
 | 
|---|
 | 965 |              "in that it does\n" .
 | 
|---|
 | 966 |              "end in a newline."},
 | 
|---|
 | 967 | 
 | 
|---|
 | 968 |       # The expected STDOUT (was: noeolw.good)
 | 
|---|
 | 969 |       {OUT => "This file is unique\n" .
 | 
|---|
 | 970 |               "This file is unique\n" .
 | 
|---|
 | 971 |               "in that it does\n" .
 | 
|---|
 | 972 |               "in that it does\n" .
 | 
|---|
 | 973 |               "end in a newline.\n" .
 | 
|---|
 | 974 |               "end in a newline.\n" .
 | 
|---|
 | 975 |               "This file is unique\n" .
 | 
|---|
 | 976 |               "This file is unique\n" .
 | 
|---|
 | 977 |               "in that it does\n" .
 | 
|---|
 | 978 |               "in that it does\n" .
 | 
|---|
 | 979 |               "end in a newline.\n" .
 | 
|---|
 | 980 |               "end in a newline."},
 | 
|---|
 | 981 | 
 | 
|---|
 | 982 |       # The expected content of 'noeolw.1out' (was: noeolw.1good)
 | 
|---|
 | 983 |       {CMP => [ "This file is unique\n" .
 | 
|---|
 | 984 |                 "in that it does\n" .
 | 
|---|
 | 985 |                 "end in a newline.\n" .
 | 
|---|
 | 986 |                 "This file is unique\n" .
 | 
|---|
 | 987 |                 "in that it does\n" .
 | 
|---|
 | 988 |                 "end in a newline.\n" .
 | 
|---|
 | 989 |                 "in that it does\n",
 | 
|---|
 | 990 |                 { 'noeolw.1out' => undef }]},
 | 
|---|
 | 991 | 
 | 
|---|
 | 992 |       # The expected content of 'noeolw.2out' (was: noeolw.2good)
 | 
|---|
 | 993 |       {CMP => [ "This file is unique\n" .
 | 
|---|
 | 994 |                 "in that it does\n" .
 | 
|---|
 | 995 |                 "end in a newline.",
 | 
|---|
 | 996 |                 { 'noeolw.2out' => undef }]},
 | 
|---|
 | 997 |      ],
 | 
|---|
 | 998 | 
 | 
|---|
 | 999 |      ['numsub',
 | 
|---|
 | 1000 |       qw(-f),
 | 
|---|
 | 1001 |       {IN => q(
 | 
|---|
 | 1002 | # the first one matches, the second doesn't
 | 
|---|
 | 1003 | 1s/foo/bar/10
 | 
|---|
 | 1004 | 2s/foo/bar/20
 | 
|---|
 | 1005 | 
 | 
|---|
 | 1006 | # The second line should be deleted.  ssed 3.55-3.58 do not.
 | 
|---|
 | 1007 | t
 | 
|---|
 | 1008 | d
 | 
|---|
 | 1009 | )},
 | 
|---|
 | 1010 |       {IN =>
 | 
|---|
 | 1011 | q(foo foo fo oo f oo foo foo foo foo foo foo foo foo foo foo foo foo foo
 | 
|---|
 | 1012 | foo foo fo oo f oo foo foo foo foo foo foo foo foo foo foo foo foo foo
 | 
|---|
 | 1013 | )},
 | 
|---|
 | 1014 |       {OUT => "foo foo fo oo f oo foo foo foo foo "
 | 
|---|
 | 1015 |             . "foo foo foo bar foo foo foo foo foo\n"}
 | 
|---|
 | 1016 |      ],
 | 
|---|
 | 1017 | 
 | 
|---|
 | 1018 | 
 | 
|---|
 | 1019 |      ['numsub2',
 | 
|---|
 | 1020 |       qw(-n -e 's/a*/b/2'),
 | 
|---|
 | 1021 |       {IN => "\n"},
 | 
|---|
 | 1022 |       {OUT => ""}
 | 
|---|
 | 1023 |      ],
 | 
|---|
 | 1024 | 
 | 
|---|
 | 1025 | 
 | 
|---|
 | 1026 |      ['numsub3',
 | 
|---|
 | 1027 |       qw(-n -e 's/^a*/b/2'),
 | 
|---|
 | 1028 |       {IN => "\n"},
 | 
|---|
 | 1029 |       {OUT => ""}
 | 
|---|
 | 1030 |      ],
 | 
|---|
 | 1031 | 
 | 
|---|
 | 1032 | 
 | 
|---|
 | 1033 |      ['numsub4',
 | 
|---|
 | 1034 |       qw(-n -e 's/^a*/b/2p'),
 | 
|---|
 | 1035 |       {IN => "z\n"},
 | 
|---|
 | 1036 |       {OUT => ""}
 | 
|---|
 | 1037 |      ],
 | 
|---|
 | 1038 | 
 | 
|---|
 | 1039 | 
 | 
|---|
 | 1040 |      ['numsub5',
 | 
|---|
 | 1041 |       qw(-n -e 's/a*/b/3p'),
 | 
|---|
 | 1042 |       {IN => "z\n"},
 | 
|---|
 | 1043 |       {OUT => ""}
 | 
|---|
 | 1044 |      ],
 | 
|---|
 | 1045 | 
 | 
|---|
 | 1046 |      ['readin',
 | 
|---|
 | 1047 |       qw(-f),
 | 
|---|
 | 1048 |       {IN => q(/\.$/r readin.in2
 | 
|---|
 | 1049 | /too\.$/q
 | 
|---|
 | 1050 | )},
 | 
|---|
 | 1051 |       {AUX => { 'readin.in2' => "MOO\n" }},
 | 
|---|
 | 1052 |       {IN => "``Democracy will not come today, this year,\n"
 | 
|---|
 | 1053 |            . "  nor ever through compromise and fear.\n"
 | 
|---|
 | 1054 |            . "  I have as much right as the other fellow has\n"
 | 
|---|
 | 1055 |            . "  to stand on my two feet and own the land.\n"
 | 
|---|
 | 1056 |            . "  I tire so of hearing people say\n"
 | 
|---|
 | 1057 |            . "  let things take their course,\n"
 | 
|---|
 | 1058 |            . "  tomorrow is another day.\n"
 | 
|---|
 | 1059 |            . "  I do not need my freedom when I'm dead.\n"
 | 
|---|
 | 1060 |            . "  I cannot live on tomorrow's bread.\n"
 | 
|---|
 | 1061 |            . "  Freedom is a strong seed\n"
 | 
|---|
 | 1062 |            . "  planted in a great need.\n"
 | 
|---|
 | 1063 |            . "  I live here, too.\n"
 | 
|---|
 | 1064 |            . "  I want freedom just as you.''\n"
 | 
|---|
 | 1065 |            . "    ``The Weary Blues'', Langston Hughes\n"},
 | 
|---|
 | 1066 |       {OUT => "``Democracy will not come today, this year,\n"
 | 
|---|
 | 1067 |             . "  nor ever through compromise and fear.\n"
 | 
|---|
 | 1068 |             . "MOO\n"
 | 
|---|
 | 1069 |             . "  I have as much right as the other fellow has\n"
 | 
|---|
 | 1070 |             . "  to stand on my two feet and own the land.\n"
 | 
|---|
 | 1071 |             . "MOO\n"
 | 
|---|
 | 1072 |             . "  I tire so of hearing people say\n"
 | 
|---|
 | 1073 |             . "  let things take their course,\n"
 | 
|---|
 | 1074 |             . "  tomorrow is another day.\n"
 | 
|---|
 | 1075 |             . "MOO\n"
 | 
|---|
 | 1076 |             . "  I do not need my freedom when I'm dead.\n"
 | 
|---|
 | 1077 |             . "MOO\n"
 | 
|---|
 | 1078 |             . "  I cannot live on tomorrow's bread.\n"
 | 
|---|
 | 1079 |             . "MOO\n"
 | 
|---|
 | 1080 |             . "  Freedom is a strong seed\n"
 | 
|---|
 | 1081 |             . "  planted in a great need.\n"
 | 
|---|
 | 1082 |             . "MOO\n"
 | 
|---|
 | 1083 |             . "  I live here, too.\n"
 | 
|---|
 | 1084 |             . "MOO\n"}
 | 
|---|
 | 1085 |      ],
 | 
|---|
 | 1086 | 
 | 
|---|
 | 1087 | 
 | 
|---|
 | 1088 |      ['sep',
 | 
|---|
 | 1089 |       # inspired by an autoconf generated configure script.
 | 
|---|
 | 1090 |       qw(-f),
 | 
|---|
 | 1091 |       {IN => q(s%/[^/][^/]*$%%
 | 
|---|
 | 1092 | s%[\/][^\/][^\/]*$%%
 | 
|---|
 | 1093 | s,.*[^\/],,
 | 
|---|
 | 1094 | )},
 | 
|---|
 | 1095 |       {IN => "miss mary mack mack//mack/ran down/the track  track  track\n"
 | 
|---|
 | 1096 |            . "slashes\aren't%used enough/in/casual-conversation///\n"
 | 
|---|
 | 1097 |            . "possibly sentences would be more attractive if they ended"
 | 
|---|
 | 1098 |              . "in two slashes//\n"},
 | 
|---|
 | 1099 |       {OUT => "\n"
 | 
|---|
 | 1100 |             . "///\n"
 | 
|---|
 | 1101 |             . "//\n"}
 | 
|---|
 | 1102 |      ],
 | 
|---|
 | 1103 | 
 | 
|---|
 | 1104 |      ['subwrite',
 | 
|---|
 | 1105 |       # test s///w option
 | 
|---|
 | 1106 |       qw(-e 's/you/YoU/w subwrite.wout'),
 | 
|---|
 | 1107 |       {IN => "Not some church, and not the state,\n"
 | 
|---|
 | 1108 |            . "Not some dark capricious fate.\n"
 | 
|---|
 | 1109 |            . "Who you are, and when you lose,\n"
 | 
|---|
 | 1110 |            . "Comes only from the things you choose.\n"},
 | 
|---|
 | 1111 |       # The expected STDOUT
 | 
|---|
 | 1112 |       {OUT => "Not some church, and not the state,\n"
 | 
|---|
 | 1113 |             . "Not some dark capricious fate.\n"
 | 
|---|
 | 1114 |             . "Who YoU are, and when you lose,\n"
 | 
|---|
 | 1115 |             . "Comes only from the things YoU choose.\n"},
 | 
|---|
 | 1116 |       # The expected content of 'writeout.wout'
 | 
|---|
 | 1117 |       {CMP => [  "Who YoU are, and when you lose,\n"
 | 
|---|
 | 1118 |                . "Comes only from the things YoU choose.\n",
 | 
|---|
 | 1119 |                  { 'subwrite.wout' => undef }]}
 | 
|---|
 | 1120 |      ],
 | 
|---|
 | 1121 | 
 | 
|---|
 | 1122 |      ['writeout',
 | 
|---|
 | 1123 |       # Test 'w' command
 | 
|---|
 | 1124 |       qw(-e '/^Facts ar/w writeout.wout'),
 | 
|---|
 | 1125 |       {IN => "Facts are simple and facts are straight\n"
 | 
|---|
 | 1126 |            . "Facts are lazy and facts are late\n"
 | 
|---|
 | 1127 |            . "Facts all come with points of view\n"
 | 
|---|
 | 1128 |            . "Facts don't do what I want them to\n"},
 | 
|---|
 | 1129 |       # The expected STDOUT
 | 
|---|
 | 1130 |       {OUT => "Facts are simple and facts are straight\n"
 | 
|---|
 | 1131 |             . "Facts are lazy and facts are late\n"
 | 
|---|
 | 1132 |             . "Facts all come with points of view\n"
 | 
|---|
 | 1133 |             . "Facts don't do what I want them to\n"},
 | 
|---|
 | 1134 |       # The expected content of 'writeout.wout'
 | 
|---|
 | 1135 |       {CMP => [ "Facts are simple and facts are straight\n"
 | 
|---|
 | 1136 |                 . "Facts are lazy and facts are late\n",
 | 
|---|
 | 1137 |                 { 'writeout.wout' => undef }]}
 | 
|---|
 | 1138 |      ],
 | 
|---|
 | 1139 | 
 | 
|---|
 | 1140 |      ['xabcx',
 | 
|---|
 | 1141 |       # from the ChangeLog (Fri May 21 1993)
 | 
|---|
 | 1142 |       # Regex address with custom character (\xREGEXx)
 | 
|---|
 | 1143 |       qw(-e '\xfeetxs/blue/too/'),
 | 
|---|
 | 1144 |       {IN => "roses are red\n"
 | 
|---|
 | 1145 |            . "violets are blue\n"
 | 
|---|
 | 1146 |            . "my feet are cold\n"
 | 
|---|
 | 1147 |            . "your feet are blue\n"},
 | 
|---|
 | 1148 |       {OUT => "roses are red\n"
 | 
|---|
 | 1149 |             . "violets are blue\n"
 | 
|---|
 | 1150 |             . "my feet are cold\n"
 | 
|---|
 | 1151 |             . "your feet are too\n"}
 | 
|---|
 | 1152 |      ],
 | 
|---|
 | 1153 | 
 | 
|---|
 | 1154 | 
 | 
|---|
 | 1155 |      ['xbxcx',
 | 
|---|
 | 1156 |       # from the ChangeLog (Wed Sep 5 2001)
 | 
|---|
 | 1157 |       qw(-e 's/a*/x/g'),
 | 
|---|
 | 1158 |       {IN => "\n"
 | 
|---|
 | 1159 |            . "b\n"
 | 
|---|
 | 1160 |            . "bc\n"
 | 
|---|
 | 1161 |            . "bac\n"
 | 
|---|
 | 1162 |            . "baac\n"
 | 
|---|
 | 1163 |            . "baaac\n"
 | 
|---|
 | 1164 |            . "baaaac\n"},
 | 
|---|
 | 1165 |       {OUT => "x\n"
 | 
|---|
 | 1166 |             . "xbx\n"
 | 
|---|
 | 1167 |             . "xbxcx\n"
 | 
|---|
 | 1168 |             . "xbxcx\n"
 | 
|---|
 | 1169 |             . "xbxcx\n"
 | 
|---|
 | 1170 |             . "xbxcx\n"
 | 
|---|
 | 1171 |             . "xbxcx\n"}
 | 
|---|
 | 1172 |       ],
 | 
|---|
 | 1173 | 
 | 
|---|
 | 1174 |      ['xbxcx3',
 | 
|---|
 | 1175 |       # Test s///N replacements (GNU extension)
 | 
|---|
 | 1176 |       qw(-e 's/a*/x/3'),
 | 
|---|
 | 1177 |       {IN => "\n"
 | 
|---|
 | 1178 |            . "b\n"
 | 
|---|
 | 1179 |            . "bc\n"
 | 
|---|
 | 1180 |            . "bac\n"
 | 
|---|
 | 1181 |            . "baac\n"
 | 
|---|
 | 1182 |            . "baaac\n"
 | 
|---|
 | 1183 |            . "baaaac\n"},
 | 
|---|
 | 1184 |       {OUT => "\n"
 | 
|---|
 | 1185 |            . "b\n"
 | 
|---|
 | 1186 |            . "bcx\n"
 | 
|---|
 | 1187 |            . "bacx\n"
 | 
|---|
 | 1188 |            . "baacx\n"
 | 
|---|
 | 1189 |            . "baaacx\n"
 | 
|---|
 | 1190 |            . "baaaacx\n"}
 | 
|---|
 | 1191 |      ],
 | 
|---|
 | 1192 | 
 | 
|---|
 | 1193 | 
 | 
|---|
 | 1194 |      # Four backslashes (2 pairs of "\\") to pass through two interpolations:
 | 
|---|
 | 1195 |      # once in Perl, then the shell command line argument.
 | 
|---|
 | 1196 |      # sed will see one backslash character in the s/// command.
 | 
|---|
 | 1197 |      ['bug30794_1', "s/z/\\\\x5cA/",  {IN=>'z'}, {OUT => "\\A"}],
 | 
|---|
 | 1198 |      ['bug30794_2', "s/z/\\\\x5c/",   {IN=>'z'}, {OUT => "\\"}],
 | 
|---|
 | 1199 |      ['bug30794_3', "s/z/\\\\x5c1/",  {IN=>'z'}, {OUT => "\\1"}],
 | 
|---|
 | 1200 | 
 | 
|---|
 | 1201 |      ['bug40242', q('sn\nnXn'),  {IN=>'n'}, {OUT => 'X'}],
 | 
|---|
 | 1202 |     );
 | 
|---|
 | 1203 | 
 | 
|---|
 | 1204 | my $save_temps = $ENV{SAVE_TEMPS};
 | 
|---|
 | 1205 | my $verbose = $ENV{VERBOSE};
 | 
|---|
 | 1206 | 
 | 
|---|
 | 1207 | my $fail = run_tests ($program_name, $prog, \@Tests, $save_temps, $verbose);
 | 
|---|
 | 1208 | exit $fail;
 | 
|---|