home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume18 / perl / part10 < prev    next >
Internet Message Format  |  1991-04-15  |  50KB

  1. From: lwall@netlabs.com (Larry Wall)
  2. Newsgroups: comp.sources.misc
  3. Subject: v18i028:  perl - The perl programming language, Part10/36
  4. Message-ID: <1991Apr16.000002.22727@sparky.IMD.Sterling.COM>
  5. Date: 16 Apr 91 00:00:02 GMT
  6. Approved: kent@sparky.imd.sterling.com
  7. X-Checksum-Snefru: 4b5c5e48 ad088a4e 45623ed4 95372ad9
  8.  
  9. Submitted-by: Larry Wall <lwall@netlabs.com>
  10. Posting-number: Volume 18, Issue 28
  11. Archive-name: perl/part10
  12.  
  13. [There are 36 kits for perl version 4.0.]
  14.  
  15. #! /bin/sh
  16.  
  17. # Make a new directory for the perl sources, cd to it, and run kits 1
  18. # thru 36 through sh.  When all 36 kits have been run, read README.
  19.  
  20. echo "This is perl 4.0 kit 10 (of 36).  If kit 10 is complete, the line"
  21. echo '"'"End of kit 10 (of 36)"'" will echo at the end.'
  22. echo ""
  23. export PATH || (echo "You didn't use sh, you clunch." ; kill $$)
  24. mkdir eg 2>/dev/null
  25. echo Extracting perl.man:AD
  26. sed >perl.man:AD <<'!STUFFY!FUNK!' -e 's/X//'
  27. XNote that scalars are already passed by reference, so you can modify scalar
  28. Xarguments without using this mechanism by referring explicitly to the $_[nnn]
  29. Xin question.
  30. XYou can modify all the elements of an array by passing all the elements
  31. Xas scalars, but you have to use the * mechanism to push, pop or change the
  32. Xsize of an array.
  33. XThe * mechanism will probably be more efficient in any case.
  34. X.Sp
  35. XSince a *name value contains unprintable binary data, if it is used as
  36. Xan argument in a print, or as a %s argument in a printf or sprintf, it
  37. Xthen has the value '*name', just so it prints out pretty.
  38. X.Sp
  39. XEven if you don't want to modify an array, this mechanism is useful for
  40. Xpassing multiple arrays in a single LIST, since normally the LIST mechanism
  41. Xwill merge all the array values so that you can't extract out the
  42. Xindividual arrays.
  43. X.Sh "Regular Expressions"
  44. XThe patterns used in pattern matching are regular expressions such as
  45. Xthose supplied in the Version 8 regexp routines.
  46. X(In fact, the routines are derived from Henry Spencer's freely redistributable
  47. Xreimplementation of the V8 routines.)
  48. XIn addition, \ew matches an alphanumeric character (including \*(L"_\*(R") and \eW a nonalphanumeric.
  49. XWord boundaries may be matched by \eb, and non-boundaries by \eB.
  50. XA whitespace character is matched by \es, non-whitespace by \eS.
  51. XA numeric character is matched by \ed, non-numeric by \eD.
  52. XYou may use \ew, \es and \ed within character classes.
  53. XAlso, \en, \er, \ef, \et and \eNNN have their normal interpretations.
  54. XWithin character classes \eb represents backspace rather than a word boundary.
  55. XAlternatives may be separated by |.
  56. XThe bracketing construct \|(\ .\|.\|.\ \|) may also be used, in which case \e<digit>
  57. Xmatches the digit'th substring.
  58. X(Outside of the pattern, always use $ instead of \e in front of the digit.
  59. XThe scope of $<digit> (and $\`, $& and $\')
  60. Xextends to the end of the enclosing BLOCK or eval string, or to
  61. Xthe next pattern match with subexpressions.
  62. XThe \e<digit> notation sometimes works outside the current pattern, but should
  63. Xnot be relied upon.)
  64. XYou may have as many parentheses as you wish.  If you have more than 9
  65. Xsubstrings, the variables $10, $11, ... refer to the corresponding
  66. Xsubstring.  Within the pattern, \e10, \e11,
  67. Xetc. refer back to substrings if there have been at least that many left parens
  68. Xbefore the backreference.  Otherwise (for backward compatibilty) \e10
  69. Xis the same as \e010, a backspace,
  70. Xand \e11 the same as \e011, a tab.
  71. XAnd so on.
  72. X(\e1 through \e9 are always backreferences.)
  73. X.PP
  74. X$+ returns whatever the last bracket match matched.
  75. X$& returns the entire matched string.
  76. X($0 used to return the same thing, but not any more.)
  77. X$\` returns everything before the matched string.
  78. X$\' returns everything after the matched string.
  79. XExamples:
  80. X.nf
  81. X    
  82. X    s/\|^\|([^ \|]*\|) \|*([^ \|]*\|)\|/\|$2 $1\|/;    # swap first two words
  83. X
  84. X.ne 5
  85. X    if (/\|Time: \|(.\|.\|):\|(.\|.\|):\|(.\|.\|)\|/\|) {
  86. X        $hours = $1;
  87. X        $minutes = $2;
  88. X        $seconds = $3;
  89. X    }
  90. X
  91. X.fi
  92. XBy default, the ^ character is only guaranteed to match at the beginning
  93. Xof the string,
  94. Xthe $ character only at the end (or before the newline at the end)
  95. Xand
  96. X.I perl
  97. Xdoes certain optimizations with the assumption that the string contains
  98. Xonly one line.
  99. XThe behavior of ^ and $ on embedded newlines will be inconsistent.
  100. XYou may, however, wish to treat a string as a multi-line buffer, such that
  101. Xthe ^ will match after any newline within the string, and $ will match
  102. Xbefore any newline.
  103. XAt the cost of a little more overhead, you can do this by setting the variable
  104. X$* to 1.
  105. XSetting it back to 0 makes
  106. X.I perl
  107. Xrevert to its old behavior.
  108. X.PP
  109. XTo facilitate multi-line substitutions, the . character never matches a newline
  110. X(even when $* is 0).
  111. XIn particular, the following leaves a newline on the $_ string:
  112. X.nf
  113. X
  114. X    $_ = <STDIN>;
  115. X    s/.*(some_string).*/$1/;
  116. X
  117. XIf the newline is unwanted, try one of
  118. X
  119. X    s/.*(some_string).*\en/$1/;
  120. X    s/.*(some_string)[^\e000]*/$1/;
  121. X    s/.*(some_string)(.|\en)*/$1/;
  122. X    chop; s/.*(some_string).*/$1/;
  123. X    /(some_string)/ && ($_ = $1);
  124. X
  125. X.fi
  126. XAny item of a regular expression may be followed with digits in curly brackets
  127. Xof the form {n,m}, where n gives the minimum number of times to match the item
  128. Xand m gives the maximum.
  129. XThe form {n} is equivalent to {n,n} and matches exactly n times.
  130. XThe form {n,} matches n or more times.
  131. X(If a curly bracket occurs in any other context, it is treated as a regular
  132. Xcharacter.)
  133. XThe * modifier is equivalent to {0,}, the + modifier to {1,} and the ? modifier
  134. Xto {0,1}.
  135. XThere is no limit to the size of n or m, but large numbers will chew up
  136. Xmore memory.
  137. X.Sp
  138. XYou will note that all backslashed metacharacters in
  139. X.I perl
  140. Xare alphanumeric,
  141. Xsuch as \eb, \ew, \en.
  142. XUnlike some other regular expression languages, there are no backslashed
  143. Xsymbols that aren't alphanumeric.
  144. XSo anything that looks like \e\e, \e(, \e), \e<, \e>, \e{, or \e} is always
  145. Xinterpreted as a literal character, not a metacharacter.
  146. XThis makes it simple to quote a string that you want to use for a pattern
  147. Xbut that you are afraid might contain metacharacters.
  148. XSimply quote all the non-alphanumeric characters:
  149. X.nf
  150. X
  151. X    $pattern =~ s/(\eW)/\e\e$1/g;
  152. X
  153. X.fi
  154. X.Sh "Formats"
  155. XOutput record formats for use with the
  156. X.I write
  157. Xoperator may declared as follows:
  158. X.nf
  159. X
  160. X.ne 3
  161. X    format NAME =
  162. X    FORMLIST
  163. X    .
  164. X
  165. X.fi
  166. XIf name is omitted, format \*(L"STDOUT\*(R" is defined.
  167. XFORMLIST consists of a sequence of lines, each of which may be of one of three
  168. Xtypes:
  169. X.Ip 1. 4
  170. XA comment.
  171. X.Ip 2. 4
  172. XA \*(L"picture\*(R" line giving the format for one output line.
  173. X.Ip 3. 4
  174. XAn argument line supplying values to plug into a picture line.
  175. X.PP
  176. XPicture lines are printed exactly as they look, except for certain fields
  177. Xthat substitute values into the line.
  178. XEach picture field starts with either @ or ^.
  179. XThe @ field (not to be confused with the array marker @) is the normal
  180. Xcase; ^ fields are used
  181. Xto do rudimentary multi-line text block filling.
  182. XThe length of the field is supplied by padding out the field
  183. Xwith multiple <, >, or | characters to specify, respectively, left justification,
  184. Xright justification, or centering.
  185. XAs an alternate form of right justification,
  186. Xyou may also use # characters (with an optional .) to specify a numeric field.
  187. X(Use of ^ instead of @ causes the field to be blanked if undefined.)
  188. XIf any of the values supplied for these fields contains a newline, only
  189. Xthe text up to the newline is printed.
  190. XThe special field @* can be used for printing multi-line values.
  191. XIt should appear by itself on a line.
  192. X.PP
  193. XThe values are specified on the following line, in the same order as
  194. Xthe picture fields.
  195. XThe values should be separated by commas.
  196. X.PP
  197. XPicture fields that begin with ^ rather than @ are treated specially.
  198. XThe value supplied must be a scalar variable name which contains a text
  199. Xstring.
  200. X.I Perl
  201. Xputs as much text as it can into the field, and then chops off the front
  202. Xof the string so that the next time the variable is referenced,
  203. Xmore of the text can be printed.
  204. XNormally you would use a sequence of fields in a vertical stack to print
  205. Xout a block of text.
  206. XIf you like, you can end the final field with .\|.\|., which will appear in the
  207. Xoutput if the text was too long to appear in its entirety.
  208. XYou can change which characters are legal to break on by changing the
  209. Xvariable $: to a list of the desired characters.
  210. X.PP
  211. XSince use of ^ fields can produce variable length records if the text to be
  212. Xformatted is short, you can suppress blank lines by putting the tilde (~)
  213. Xcharacter anywhere in the line.
  214. X(Normally you should put it in the front if possible, for visibility.)
  215. XThe tilde will be translated to a space upon output.
  216. XIf you put a second tilde contiguous to the first, the line will be repeated
  217. Xuntil all the fields on the line are exhausted.
  218. X(If you use a field of the @ variety, the expression you supply had better
  219. Xnot give the same value every time forever!)
  220. X.PP
  221. XExamples:
  222. X.nf
  223. X.lg 0
  224. X.cs R 25
  225. X.ft C
  226. X
  227. X.ne 10
  228. X# a report on the /etc/passwd file
  229. Xformat top =
  230. X\&                        Passwd File
  231. XName                Login    Office   Uid   Gid Home
  232. X------------------------------------------------------------------
  233. X\&.
  234. Xformat STDOUT =
  235. X@<<<<<<<<<<<<<<<<<< @||||||| @<<<<<<@>>>> @>>>> @<<<<<<<<<<<<<<<<<
  236. X$name,              $login,  $office,$uid,$gid, $home
  237. X\&.
  238. X
  239. X.ne 29
  240. X# a report from a bug report form
  241. Xformat top =
  242. X\&                        Bug Reports
  243. X@<<<<<<<<<<<<<<<<<<<<<<<     @|||         @>>>>>>>>>>>>>>>>>>>>>>>
  244. X$system,                      $%,         $date
  245. X------------------------------------------------------------------
  246. X\&.
  247. Xformat STDOUT =
  248. XSubject: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  249. X\&         $subject
  250. XIndex: @<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  251. X\&       $index,                       $description
  252. XPriority: @<<<<<<<<<< Date: @<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  253. X\&          $priority,        $date,   $description
  254. XFrom: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  255. X\&      $from,                         $description
  256. XAssigned to: @<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  257. X\&             $programmer,            $description
  258. X\&~                                    ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  259. X\&                                     $description
  260. X\&~                                    ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  261. X\&                                     $description
  262. X\&~                                    ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  263. X\&                                     $description
  264. X\&~                                    ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  265. X\&                                     $description
  266. X\&~                                    ^<<<<<<<<<<<<<<<<<<<<<<<...
  267. X\&                                     $description
  268. X\&.
  269. X
  270. X.ft R
  271. X.cs R
  272. X.lg
  273. X.fi
  274. XIt is possible to intermix prints with writes on the same output channel,
  275. Xbut you'll have to handle $\- (lines left on the page) yourself.
  276. X.PP
  277. XIf you are printing lots of fields that are usually blank, you should consider
  278. Xusing the reset operator between records.
  279. XNot only is it more efficient, but it can prevent the bug of adding another
  280. Xfield and forgetting to zero it.
  281. X.Sh "Interprocess Communication"
  282. XThe IPC facilities of perl are built on the Berkeley socket mechanism.
  283. XIf you don't have sockets, you can ignore this section.
  284. XThe calls have the same names as the corresponding system calls,
  285. Xbut the arguments tend to differ, for two reasons.
  286. XFirst, perl file handles work differently than C file descriptors.
  287. XSecond, perl already knows the length of its strings, so you don't need
  288. Xto pass that information.
  289. XHere is a sample client (untested):
  290. X.nf
  291. X
  292. X    ($them,$port) = @ARGV;
  293. X    $port = 2345 unless $port;
  294. X    $them = 'localhost' unless $them;
  295. X
  296. X    $SIG{'INT'} = 'dokill';
  297. X    sub dokill { kill 9,$child if $child; }
  298. X
  299. X    require 'sys/socket.ph';
  300. X
  301. X    $sockaddr = 'S n a4 x8';
  302. X    chop($hostname = `hostname`);
  303. X
  304. X    ($name, $aliases, $proto) = getprotobyname('tcp');
  305. X    ($name, $aliases, $port) = getservbyname($port, 'tcp')
  306. X        unless $port =~ /^\ed+$/;
  307. X.ie t \{\
  308. X    ($name, $aliases, $type, $len, $thisaddr) = gethostbyname($hostname);
  309. X'br\}
  310. X.el \{\
  311. X    ($name, $aliases, $type, $len, $thisaddr) =
  312. X                    gethostbyname($hostname);
  313. X'br\}
  314. X    ($name, $aliases, $type, $len, $thataddr) = gethostbyname($them);
  315. X
  316. X    $this = pack($sockaddr, &AF_INET, 0, $thisaddr);
  317. X    $that = pack($sockaddr, &AF_INET, $port, $thataddr);
  318. X
  319. X    socket(S, &PF_INET, &SOCK_STREAM, $proto) || die "socket: $!";
  320. X    bind(S, $this) || die "bind: $!";
  321. X    connect(S, $that) || die "connect: $!";
  322. X
  323. X    select(S); $| = 1; select(stdout);
  324. X
  325. X    if ($child = fork) {
  326. X        while (<>) {
  327. X            print S;
  328. X        }
  329. X        sleep 3;
  330. X        do dokill();
  331. X    }
  332. X    else {
  333. X        while (<S>) {
  334. X            print;
  335. X        }
  336. X    }
  337. X
  338. X.fi
  339. XAnd here's a server:
  340. X.nf
  341. X
  342. X    ($port) = @ARGV;
  343. X    $port = 2345 unless $port;
  344. X
  345. X    require 'sys/socket.ph';
  346. X
  347. X    $sockaddr = 'S n a4 x8';
  348. X
  349. X    ($name, $aliases, $proto) = getprotobyname('tcp');
  350. X    ($name, $aliases, $port) = getservbyname($port, 'tcp')
  351. X        unless $port =~ /^\ed+$/;
  352. X
  353. X    $this = pack($sockaddr, &AF_INET, $port, "\e0\e0\e0\e0");
  354. X
  355. X    select(NS); $| = 1; select(stdout);
  356. X
  357. X    socket(S, &PF_INET, &SOCK_STREAM, $proto) || die "socket: $!";
  358. X    bind(S, $this) || die "bind: $!";
  359. X    listen(S, 5) || die "connect: $!";
  360. X
  361. X    select(S); $| = 1; select(stdout);
  362. X
  363. X    for (;;) {
  364. X        print "Listening again\en";
  365. X        ($addr = accept(NS,S)) || die $!;
  366. X        print "accept ok\en";
  367. X
  368. X        ($af,$port,$inetaddr) = unpack($sockaddr,$addr);
  369. X        @inetaddr = unpack('C4',$inetaddr);
  370. X        print "$af $port @inetaddr\en";
  371. X
  372. X        while (<NS>) {
  373. X            print;
  374. X            print NS;
  375. X        }
  376. X    }
  377. X
  378. X.fi
  379. X.Sh "Predefined Names"
  380. XThe following names have special meaning to
  381. X.IR perl .
  382. XI could have used alphabetic symbols for some of these, but I didn't want
  383. Xto take the chance that someone would say reset \*(L"a\-zA\-Z\*(R" and wipe them all
  384. Xout.
  385. XYou'll just have to suffer along with these silly symbols.
  386. XMost of them have reasonable mnemonics, or analogues in one of the shells.
  387. X.Ip $_ 8
  388. XThe default input and pattern-searching space.
  389. XThe following pairs are equivalent:
  390. X.nf
  391. X
  392. X.ne 2
  393. X    while (<>) {\|.\|.\|.    # only equivalent in while!
  394. X    while ($_ = <>) {\|.\|.\|.
  395. X
  396. X.ne 2
  397. X    /\|^Subject:/
  398. X    $_ \|=~ \|/\|^Subject:/
  399. X
  400. X.ne 2
  401. X    y/a\-z/A\-Z/
  402. X    $_ =~ y/a\-z/A\-Z/
  403. X
  404. X.ne 2
  405. X    chop
  406. X    chop($_)
  407. X
  408. X.fi 
  409. X(Mnemonic: underline is understood in certain operations.)
  410. X.Ip $. 8
  411. XThe current input line number of the last filehandle that was read.
  412. XReadonly.
  413. XRemember that only an explicit close on the filehandle resets the line number.
  414. XSince <> never does an explicit close, line numbers increase across ARGV files
  415. X(but see examples under eof).
  416. X(Mnemonic: many programs use . to mean the current line number.)
  417. X.Ip $/ 8
  418. XThe input record separator, newline by default.
  419. XWorks like
  420. X.IR awk 's
  421. XRS variable, including treating blank lines as delimiters
  422. Xif set to the null string.
  423. XYou may set it to a multicharacter string to match a multi-character
  424. Xdelimiter.
  425. X(Mnemonic: / is used to delimit line boundaries when quoting poetry.)
  426. X.Ip $, 8
  427. XThe output field separator for the print operator.
  428. XOrdinarily the print operator simply prints out the comma separated fields
  429. Xyou specify.
  430. XIn order to get behavior more like
  431. X.IR awk ,
  432. Xset this variable as you would set
  433. X.IR awk 's
  434. XOFS variable to specify what is printed between fields.
  435. X(Mnemonic: what is printed when there is a , in your print statement.)
  436. X.Ip $"" 8
  437. XThis is like $, except that it applies to array values interpolated into
  438. Xa double-quoted string (or similar interpreted string).
  439. XDefault is a space.
  440. X(Mnemonic: obvious, I think.)
  441. X.Ip $\e 8
  442. XThe output record separator for the print operator.
  443. XOrdinarily the print operator simply prints out the comma separated fields
  444. Xyou specify, with no trailing newline or record separator assumed.
  445. XIn order to get behavior more like
  446. X.IR awk ,
  447. Xset this variable as you would set
  448. X.IR awk 's
  449. XORS variable to specify what is printed at the end of the print.
  450. X(Mnemonic: you set $\e instead of adding \en at the end of the print.
  451. XAlso, it's just like /, but it's what you get \*(L"back\*(R" from
  452. X.IR perl .)
  453. X.Ip $# 8
  454. XThe output format for printed numbers.
  455. XThis variable is a half-hearted attempt to emulate
  456. X.IR awk 's
  457. XOFMT variable.
  458. XThere are times, however, when
  459. X.I awk
  460. Xand
  461. X.I perl
  462. Xhave differing notions of what
  463. Xis in fact numeric.
  464. XAlso, the initial value is %.20g rather than %.6g, so you need to set $#
  465. Xexplicitly to get
  466. X.IR awk 's
  467. Xvalue.
  468. X(Mnemonic: # is the number sign.)
  469. X.Ip $% 8
  470. XThe current page number of the currently selected output channel.
  471. X(Mnemonic: % is page number in nroff.)
  472. X.Ip $= 8
  473. XThe current page length (printable lines) of the currently selected output
  474. Xchannel.
  475. XDefault is 60.
  476. X(Mnemonic: = has horizontal lines.)
  477. X.Ip $\- 8
  478. XThe number of lines left on the page of the currently selected output channel.
  479. X(Mnemonic: lines_on_page \- lines_printed.)
  480. X.Ip $~ 8
  481. XThe name of the current report format for the currently selected output
  482. Xchannel.
  483. X(Mnemonic: brother to $^.)
  484. X.Ip $^ 8
  485. XThe name of the current top-of-page format for the currently selected output
  486. Xchannel.
  487. X(Mnemonic: points to top of page.)
  488. X.Ip $| 8
  489. XIf set to nonzero, forces a flush after every write or print on the currently
  490. Xselected output channel.
  491. XDefault is 0.
  492. XNote that
  493. X.I STDOUT
  494. Xwill typically be line buffered if output is to the
  495. Xterminal and block buffered otherwise.
  496. XSetting this variable is useful primarily when you are outputting to a pipe,
  497. Xsuch as when you are running a
  498. X.I perl
  499. Xscript under rsh and want to see the
  500. Xoutput as it's happening.
  501. X(Mnemonic: when you want your pipes to be piping hot.)
  502. X.Ip $$ 8
  503. XThe process number of the
  504. X.I perl
  505. Xrunning this script.
  506. X(Mnemonic: same as shells.)
  507. X.Ip $? 8
  508. XThe status returned by the last pipe close, backtick (\`\`) command or
  509. X.I system
  510. Xoperator.
  511. XNote that this is the status word returned by the wait() system
  512. Xcall, so the exit value of the subprocess is actually ($? >> 8).
  513. X$? & 255 gives which signal, if any, the process died from, and whether
  514. Xthere was a core dump.
  515. X(Mnemonic: similar to sh and ksh.)
  516. X.Ip $& 8 4
  517. XThe string matched by the last pattern match (not counting any matches hidden
  518. Xwithin a BLOCK or eval enclosed by the current BLOCK).
  519. X(Mnemonic: like & in some editors.)
  520. X.Ip $\` 8 4
  521. XThe string preceding whatever was matched by the last pattern match
  522. X(not counting any matches hidden within a BLOCK or eval enclosed by the current
  523. XBLOCK).
  524. X(Mnemonic: \` often precedes a quoted string.)
  525. X.Ip $\' 8 4
  526. XThe string following whatever was matched by the last pattern match
  527. X(not counting any matches hidden within a BLOCK or eval enclosed by the current
  528. XBLOCK).
  529. X(Mnemonic: \' often follows a quoted string.)
  530. XExample:
  531. X.nf
  532. X
  533. X.ne 3
  534. X    $_ = \'abcdefghi\';
  535. X    /def/;
  536. X    print "$\`:$&:$\'\en";      # prints abc:def:ghi
  537. X
  538. X.fi
  539. X.Ip $+ 8 4
  540. XThe last bracket matched by the last search pattern.
  541. XThis is useful if you don't know which of a set of alternative patterns
  542. Xmatched.
  543. XFor example:
  544. X.nf
  545. X
  546. X    /Version: \|(.*\|)|Revision: \|(.*\|)\|/ \|&& \|($rev = $+);
  547. X
  548. X.fi
  549. X(Mnemonic: be positive and forward looking.)
  550. X.Ip $* 8 2
  551. XSet to 1 to do multiline matching within a string, 0 to tell
  552. X.I perl
  553. Xthat it can assume that strings contain a single line, for the purpose
  554. Xof optimizing pattern matches.
  555. XPattern matches on strings containing multiple newlines can produce confusing
  556. Xresults when $* is 0.
  557. XDefault is 0.
  558. X(Mnemonic: * matches multiple things.)
  559. XNote that this variable only influences the interpretation of ^ and $.
  560. XA literal newline can be searched for even when $* == 0.
  561. X.Ip $0 8
  562. XContains the name of the file containing the
  563. X.I perl
  564. Xscript being executed.
  565. XAssigning to $0 modifies the argument area that the ps(1) program sees.
  566. X(Mnemonic: same as sh and ksh.)
  567. X.Ip $<digit> 8
  568. XContains the subpattern from the corresponding set of parentheses in the last
  569. Xpattern matched, not counting patterns matched in nested blocks that have
  570. Xbeen exited already.
  571. X(Mnemonic: like \edigit.)
  572. X.Ip $[ 8 2
  573. XThe index of the first element in an array, and of the first character in
  574. Xa substring.
  575. XDefault is 0, but you could set it to 1 to make
  576. X.I perl
  577. Xbehave more like
  578. X.I awk
  579. X(or Fortran)
  580. Xwhen subscripting and when evaluating the index() and substr() functions.
  581. X(Mnemonic: [ begins subscripts.)
  582. X.Ip $] 8 2
  583. XThe string printed out when you say \*(L"perl -v\*(R".
  584. XIt can be used to determine at the beginning of a script whether the perl
  585. Xinterpreter executing the script is in the right range of versions.
  586. XIf used in a numeric context, returns the version + patchlevel / 1000.
  587. XExample:
  588. X.nf
  589. X
  590. X.ne 8
  591. X    # see if getc is available
  592. X        ($version,$patchlevel) =
  593. X         $] =~ /(\ed+\e.\ed+).*\enPatch level: (\ed+)/;
  594. X        print STDERR "(No filename completion available.)\en"
  595. X         if $version * 1000 + $patchlevel < 2016;
  596. X
  597. Xor, used numerically,
  598. X
  599. X    warn "No checksumming!\en" if $] < 3.019;
  600. X
  601. X.fi
  602. X(Mnemonic: Is this version of perl in the right bracket?)
  603. X.Ip $; 8 2
  604. XThe subscript separator for multi-dimensional array emulation.
  605. XIf you refer to an associative array element as
  606. X.nf
  607. X    $foo{$a,$b,$c}
  608. X
  609. Xit really means
  610. X
  611. X    $foo{join($;, $a, $b, $c)}
  612. X
  613. XBut don't put
  614. X
  615. X    @foo{$a,$b,$c}        # a slice\*(--note the @
  616. X
  617. Xwhich means
  618. X
  619. X    ($foo{$a},$foo{$b},$foo{$c})
  620. X
  621. X.fi
  622. XDefault is "\e034", the same as SUBSEP in
  623. X.IR awk .
  624. XNote that if your keys contain binary data there might not be any safe
  625. Xvalue for $;.
  626. X(Mnemonic: comma (the syntactic subscript separator) is a semi-semicolon.
  627. XYeah, I know, it's pretty lame, but $, is already taken for something more
  628. Ximportant.)
  629. X.Ip $! 8 2
  630. XIf used in a numeric context, yields the current value of errno, with all the
  631. Xusual caveats.
  632. X(This means that you shouldn't depend on the value of $! to be anything
  633. Xin particular unless you've gotten a specific error return indicating a
  634. Xsystem error.)
  635. XIf used in a string context, yields the corresponding system error string.
  636. XYou can assign to $! in order to set errno
  637. Xif, for instance, you want $! to return the string for error n, or you want
  638. Xto set the exit value for the die operator.
  639. X(Mnemonic: What just went bang?)
  640. X.Ip $@ 8 2
  641. XThe perl syntax error message from the last eval command.
  642. XIf null, the last eval parsed and executed correctly (although the operations
  643. Xyou invoked may have failed in the normal fashion).
  644. X(Mnemonic: Where was the syntax error \*(L"at\*(R"?)
  645. X.Ip $< 8 2
  646. XThe real uid of this process.
  647. X(Mnemonic: it's the uid you came FROM, if you're running setuid.)
  648. X.Ip $> 8 2
  649. XThe effective uid of this process.
  650. XExample:
  651. X.nf
  652. X
  653. X.ne 2
  654. X    $< = $>;    # set real uid to the effective uid
  655. X    ($<,$>) = ($>,$<);    # swap real and effective uid
  656. X
  657. X.fi
  658. X(Mnemonic: it's the uid you went TO, if you're running setuid.)
  659. XNote: $< and $> can only be swapped on machines supporting setreuid().
  660. X.Ip $( 8 2
  661. XThe real gid of this process.
  662. XIf you are on a machine that supports membership in multiple groups
  663. Xsimultaneously, gives a space separated list of groups you are in.
  664. XThe first number is the one returned by getgid(), and the subsequent ones
  665. Xby getgroups(), one of which may be the same as the first number.
  666. X(Mnemonic: parentheses are used to GROUP things.
  667. XThe real gid is the group you LEFT, if you're running setgid.)
  668. X.Ip $) 8 2
  669. XThe effective gid of this process.
  670. XIf you are on a machine that supports membership in multiple groups
  671. Xsimultaneously, gives a space separated list of groups you are in.
  672. XThe first number is the one returned by getegid(), and the subsequent ones
  673. Xby getgroups(), one of which may be the same as the first number.
  674. X(Mnemonic: parentheses are used to GROUP things.
  675. XThe effective gid is the group that's RIGHT for you, if you're running setgid.)
  676. X.Sp
  677. XNote: $<, $>, $( and $) can only be set on machines that support the
  678. Xcorresponding set[re][ug]id() routine.
  679. X$( and $) can only be swapped on machines supporting setregid().
  680. X.Ip $: 8 2
  681. XThe current set of characters after which a string may be broken to
  682. Xfill continuation fields (starting with ^) in a format.
  683. XDefault is "\ \en-", to break on whitespace or hyphens.
  684. X(Mnemonic: a \*(L"colon\*(R" in poetry is a part of a line.)
  685. X.Ip $^D 8 2
  686. XThe current value of the debugging flags.
  687. X(Mnemonic: value of
  688. X.B \-D
  689. Xswitch.)
  690. X.Ip $^I 8 2
  691. XThe current value of the inplace-edit extension.
  692. XUse undef to disable inplace editing.
  693. X(Mnemonic: value of
  694. X.B \-i
  695. Xswitch.)
  696. X.Ip $^P 8 2
  697. XThe name that Perl itself was invoked as, from argv[0].
  698. X.Ip $^T 8 2
  699. XThe time at which the script began running, in seconds since the epoch.
  700. XThe values returned by the
  701. X.B \-M ,
  702. X.B \-A
  703. Xand
  704. X.B \-C
  705. Xfiletests are based on this value.
  706. X.Ip $^W 8 2
  707. XThe current value of the warning switch.
  708. X(Mnemonic: related to the
  709. X.B \-w
  710. Xswitch.)
  711. X.Ip $ARGV 8 3
  712. Xcontains the name of the current file when reading from <>.
  713. X.Ip @ARGV 8 3
  714. XThe array ARGV contains the command line arguments intended for the script.
  715. XNote that $#ARGV is the generally number of arguments minus one, since
  716. X$ARGV[0] is the first argument, NOT the command name.
  717. XSee $0 for the command name.
  718. X.Ip @INC 8 3
  719. XThe array INC contains the list of places to look for
  720. X.I perl
  721. Xscripts to be
  722. Xevaluated by the \*(L"do EXPR\*(R" command or the \*(L"require\*(R" command.
  723. XIt initially consists of the arguments to any
  724. X.B \-I
  725. Xcommand line switches, followed
  726. Xby the default
  727. X.I perl
  728. Xlibrary, probably \*(L"/usr/local/lib/perl\*(R",
  729. Xfollowed by \*(L".\*(R", to represent the current directory.
  730. X.Ip %INC 8 3
  731. XThe associative array INC contains entries for each filename that has
  732. Xbeen included via \*(L"do\*(R" or \*(L"require\*(R".
  733. XThe key is the filename you specified, and the value is the location of
  734. Xthe file actually found.
  735. XThe \*(L"require\*(R" command uses this array to determine whether
  736. Xa given file has already been included.
  737. X.Ip $ENV{expr} 8 2
  738. XThe associative array ENV contains your current environment.
  739. XSetting a value in ENV changes the environment for child processes.
  740. X.Ip $SIG{expr} 8 2
  741. XThe associative array SIG is used to set signal handlers for various signals.
  742. XExample:
  743. X.nf
  744. X
  745. X.ne 12
  746. X    sub handler {    # 1st argument is signal name
  747. X        local($sig) = @_;
  748. X        print "Caught a SIG$sig\-\|\-shutting down\en";
  749. X        close(LOG);
  750. X        exit(0);
  751. X    }
  752. X
  753. X    $SIG{\'INT\'} = \'handler\';
  754. X    $SIG{\'QUIT\'} = \'handler\';
  755. X    .\|.\|.
  756. X    $SIG{\'INT\'} = \'DEFAULT\';    # restore default action
  757. X    $SIG{\'QUIT\'} = \'IGNORE\';    # ignore SIGQUIT
  758. X
  759. X.fi
  760. XThe SIG array only contains values for the signals actually set within
  761. Xthe perl script.
  762. X.Sh "Packages"
  763. XPerl provides a mechanism for alternate namespaces to protect packages from
  764. Xstomping on each others variables.
  765. XBy default, a perl script starts compiling into the package known as \*(L"main\*(R".
  766. XBy use of the
  767. X.I package
  768. Xdeclaration, you can switch namespaces.
  769. XThe scope of the package declaration is from the declaration itself to the end
  770. Xof the enclosing block (the same scope as the local() operator).
  771. XTypically it would be the first declaration in a file to be included by
  772. Xthe \*(L"require\*(R" operator.
  773. XYou can switch into a package in more than one place; it merely influences
  774. Xwhich symbol table is used by the compiler for the rest of that block.
  775. XYou can refer to variables and filehandles in other packages by prefixing
  776. Xthe identifier with the package name and a single quote.
  777. XIf the package name is null, the \*(L"main\*(R" package as assumed.
  778. X.PP
  779. XOnly identifiers starting with letters are stored in the packages symbol
  780. Xtable.
  781. XAll other symbols are kept in package \*(L"main\*(R".
  782. XIn addition, the identifiers STDIN, STDOUT, STDERR, ARGV, ARGVOUT, ENV, INC
  783. Xand SIG are forced to be in package \*(L"main\*(R", even when used for
  784. Xother purposes than their built-in one.
  785. XNote also that, if you have a package called \*(L"m\*(R", \*(L"s\*(R"
  786. Xor \*(L"y\*(R", the you can't use the qualified form of an identifier since it
  787. Xwill be interpreted instead as a pattern match, a substitution
  788. Xor a translation.
  789. X.PP
  790. XEval'ed strings are compiled in the package in which the eval was compiled
  791. Xin.
  792. X(Assignments to $SIG{}, however, assume the signal handler specified is in the
  793. Xmain package.
  794. XQualify the signal handler name if you wish to have a signal handler in
  795. Xa package.)
  796. XFor an example, examine perldb.pl in the perl library.
  797. XIt initially switches to the DB package so that the debugger doesn't interfere
  798. Xwith variables in the script you are trying to debug.
  799. XAt various points, however, it temporarily switches back to the main package
  800. Xto evaluate various expressions in the context of the main package.
  801. X.PP
  802. XThe symbol table for a package happens to be stored in the associative array
  803. Xof that name prepended with an underscore.
  804. XThe value in each entry of the associative array is
  805. Xwhat you are referring to when you use the *name notation.
  806. XIn fact, the following have the same effect (in package main, anyway),
  807. Xthough the first is more
  808. Xefficient because it does the symbol table lookups at compile time:
  809. X.nf
  810. X
  811. X.ne 2
  812. X    local(*foo) = *bar;
  813. X    local($_main{'foo'}) = $_main{'bar'};
  814. X
  815. X.fi
  816. XYou can use this to print out all the variables in a package, for instance.
  817. XHere is dumpvar.pl from the perl library:
  818. X.nf
  819. X.ne 11
  820. X    package dumpvar;
  821. X
  822. X    sub main'dumpvar {
  823. X    \&    ($package) = @_;
  824. X    \&    local(*stab) = eval("*_$package");
  825. X    \&    while (($key,$val) = each(%stab)) {
  826. X    \&        {
  827. X    \&            local(*entry) = $val;
  828. X    \&            if (defined $entry) {
  829. X    \&                print "\e$$key = '$entry'\en";
  830. X    \&            }
  831. X.ne 7
  832. X    \&            if (defined @entry) {
  833. X    \&                print "\e@$key = (\en";
  834. X    \&                foreach $num ($[ .. $#entry) {
  835. X    \&                    print "  $num\et'",$entry[$num],"'\en";
  836. X    \&                }
  837. X    \&                print ")\en";
  838. X    \&            }
  839. X.ne 10
  840. X    \&            if ($key ne "_$package" && defined %entry) {
  841. X    \&                print "\e%$key = (\en";
  842. X    \&                foreach $key (sort keys(%entry)) {
  843. X    \&                    print "  $key\et'",$entry{$key},"'\en";
  844. X    \&                }
  845. X    \&                print ")\en";
  846. X    \&            }
  847. X    \&        }
  848. X    \&    }
  849. X    }
  850. X
  851. X.fi
  852. XNote that, even though the subroutine is compiled in package dumpvar, the
  853. Xname of the subroutine is qualified so that its name is inserted into package
  854. X\*(L"main\*(R".
  855. X.Sh "Style"
  856. XEach programmer will, of course, have his or her own preferences in regards
  857. Xto formatting, but there are some general guidelines that will make your
  858. Xprograms easier to read.
  859. X.Ip 1. 4 4
  860. XJust because you CAN do something a particular way doesn't mean that
  861. Xyou SHOULD do it that way.
  862. X.I Perl
  863. Xis designed to give you several ways to do anything, so consider picking
  864. Xthe most readable one.
  865. XFor instance
  866. X
  867. X    open(FOO,$foo) || die "Can't open $foo: $!";
  868. X
  869. Xis better than
  870. X
  871. X    die "Can't open $foo: $!" unless open(FOO,$foo);
  872. X
  873. Xbecause the second way hides the main point of the statement in a
  874. Xmodifier.
  875. XOn the other hand
  876. X
  877. X    print "Starting analysis\en" if $verbose;
  878. X
  879. Xis better than
  880. X
  881. X    $verbose && print "Starting analysis\en";
  882. X
  883. Xsince the main point isn't whether the user typed -v or not.
  884. X.Sp
  885. XSimilarly, just because an operator lets you assume default arguments
  886. Xdoesn't mean that you have to make use of the defaults.
  887. XThe defaults are there for lazy systems programmers writing one-shot
  888. Xprograms.
  889. XIf you want your program to be readable, consider supplying the argument.
  890. X.Sp
  891. XAlong the same lines, just because you
  892. X.I can
  893. Xomit parentheses in many places doesn't mean that you ought to:
  894. X.nf
  895. X
  896. X    return print reverse sort num values array;
  897. X    return print(reverse(sort num (values(%array))));
  898. X
  899. X.fi
  900. XWhen in doubt, parenthesize.
  901. XAt the very least it will let some poor schmuck bounce on the % key in vi.
  902. X.Sp
  903. XEven if you aren't in doubt, consider the mental welfare of the person who
  904. Xhas to maintain the code after you, and who will probably put parens in
  905. Xthe wrong place.
  906. X.Ip 2. 4 4
  907. XDon't go through silly contortions to exit a loop at the top or the
  908. Xbottom, when
  909. X.I perl
  910. Xprovides the "last" operator so you can exit in the middle.
  911. XJust outdent it a little to make it more visible:
  912. X.nf
  913. X
  914. X.ne 7
  915. X    line:
  916. X    for (;;) {
  917. X        statements;
  918. X    last line if $foo;
  919. X        next line if /^#/;
  920. X        statements;
  921. X    }
  922. X
  923. X.fi
  924. X.Ip 3. 4 4
  925. XDon't be afraid to use loop labels\*(--they're there to enhance readability as
  926. Xwell as to allow multi-level loop breaks.
  927. XSee last example.
  928. X.Ip 4. 4 4
  929. XFor portability, when using features that may not be implemented on every
  930. Xmachine, test the construct in an eval to see if it fails.
  931. XIf you know what version or patchlevel a particular feature was implemented,
  932. Xyou can test $] to see if it will be there.
  933. X.Ip 5. 4 4
  934. XChoose mnemonic identifiers.
  935. X.Ip 6. 4 4
  936. XBe consistent.
  937. X.Sh "Debugging"
  938. XIf you invoke
  939. X.I perl
  940. Xwith a
  941. X.B \-d
  942. Xswitch, your script will be run under a debugging monitor.
  943. XIt will halt before the first executable statement and ask you for a
  944. Xcommand, such as:
  945. X.Ip "h" 12 4
  946. XPrints out a help message.
  947. X.Ip "T" 12 4
  948. XStack trace.
  949. X.Ip "s" 12 4
  950. XSingle step.
  951. XExecutes until it reaches the beginning of another statement.
  952. X.Ip "n" 12 4
  953. XNext.
  954. XExecutes over subroutine calls, until it reaches the beginning of the 
  955. Xnext statement.
  956. X.Ip "f" 12 4
  957. XFinish.
  958. XExecutes statements until it has finished the current subroutine.
  959. X.Ip "c" 12 4
  960. XContinue.
  961. XExecutes until the next breakpoint is reached.
  962. X.Ip "c line" 12 4
  963. XContinue to the specified line.
  964. XInserts a one-time-only breakpoint at the specified line.
  965. X.Ip "<CR>" 12 4
  966. XRepeat last n or s.
  967. X.Ip "l min+incr" 12 4
  968. XList incr+1 lines starting at min.
  969. XIf min is omitted, starts where last listing left off.
  970. XIf incr is omitted, previous value of incr is used.
  971. X.Ip "l min-max" 12 4
  972. XList lines in the indicated range.
  973. X.Ip "l line" 12 4
  974. XList just the indicated line.
  975. X.Ip "l" 12 4
  976. XList next window.
  977. X.Ip "-" 12 4
  978. XList previous window.
  979. X.Ip "w line" 12 4
  980. XList window around line.
  981. X.Ip "l subname" 12 4
  982. XList subroutine.
  983. XIf it's a long subroutine it just lists the beginning.
  984. XUse \*(L"l\*(R" to list more.
  985. X.Ip "/pattern/" 12 4
  986. XRegular expression search forward for pattern; the final / is optional.
  987. X.Ip "?pattern?" 12 4
  988. XRegular expression search backward for pattern; the final ? is optional.
  989. X.Ip "L" 12 4
  990. XList lines that have breakpoints or actions.
  991. X.Ip "S" 12 4
  992. XLists the names of all subroutines.
  993. X.Ip "t" 12 4
  994. XToggle trace mode on or off.
  995. X.Ip "b line condition" 12 4
  996. XSet a breakpoint.
  997. XIf line is omitted, sets a breakpoint on the 
  998. Xline that is about to be executed.
  999. XIf a condition is specified, it is evaluated each time the statement is
  1000. Xreached and a breakpoint is taken only if the condition is true.
  1001. XBreakpoints may only be set on lines that begin an executable statement.
  1002. X.Ip "b subname condition" 12 4
  1003. XSet breakpoint at first executable line of subroutine.
  1004. X.Ip "d line" 12 4
  1005. XDelete breakpoint.
  1006. XIf line is omitted, deletes the breakpoint on the 
  1007. Xline that is about to be executed.
  1008. X.Ip "D" 12 4
  1009. XDelete all breakpoints.
  1010. X.Ip "a line command" 12 4
  1011. XSet an action for line.
  1012. XA multi-line command may be entered by backslashing the newlines.
  1013. X.Ip "A" 12 4
  1014. XDelete all line actions.
  1015. X.Ip "< command" 12 4
  1016. XSet an action to happen before every debugger prompt.
  1017. XA multi-line command may be entered by backslashing the newlines.
  1018. X.Ip "> command" 12 4
  1019. XSet an action to happen after the prompt when you've just given a command
  1020. Xto return to executing the script.
  1021. XA multi-line command may be entered by backslashing the newlines.
  1022. X.Ip "V package" 12 4
  1023. XList all variables in package.
  1024. XDefault is main package.
  1025. X.Ip "! number" 12 4
  1026. XRedo a debugging command.
  1027. XIf number is omitted, redoes the previous command.
  1028. X.Ip "! -number" 12 4
  1029. XRedo the command that was that many commands ago.
  1030. X.Ip "H -number" 12 4
  1031. XDisplay last n commands.
  1032. XOnly commands longer than one character are listed.
  1033. XIf number is omitted, lists them all.
  1034. X.Ip "q or ^D" 12 4
  1035. XQuit.
  1036. X.Ip "command" 12 4
  1037. XExecute command as a perl statement.
  1038. XA missing semicolon will be supplied.
  1039. X.Ip "p expr" 12 4
  1040. XSame as \*(L"print DB'OUT expr\*(R".
  1041. XThe DB'OUT filehandle is opened to /dev/tty, regardless of where STDOUT
  1042. Xmay be redirected to.
  1043. X.PP
  1044. XIf you want to modify the debugger, copy perldb.pl from the perl library
  1045. Xto your current directory and modify it as necessary.
  1046. X(You'll also have to put -I. on your command line.)
  1047. XYou can do some customization by setting up a .perldb file which contains
  1048. Xinitialization code.
  1049. XFor instance, you could make aliases like these:
  1050. X.nf
  1051. X
  1052. X    $DB'alias{'len'} = 's/^len(.*)/p length($1)/';
  1053. X    $DB'alias{'stop'} = 's/^stop (at|in)/b/';
  1054. X    $DB'alias{'.'} =
  1055. X      's/^\e./p "\e$DB\e'sub(\e$DB\e'line):\et",\e$DB\e'line[\e$DB\e'line]/';
  1056. X
  1057. X.fi
  1058. X.Sh "Setuid Scripts"
  1059. X.I Perl
  1060. Xis designed to make it easy to write secure setuid and setgid scripts.
  1061. XUnlike shells, which are based on multiple substitution passes on each line
  1062. Xof the script,
  1063. X.I perl
  1064. Xuses a more conventional evaluation scheme with fewer hidden \*(L"gotchas\*(R".
  1065. XAdditionally, since the language has more built-in functionality, it
  1066. Xhas to rely less upon external (and possibly untrustworthy) programs to
  1067. Xaccomplish its purposes.
  1068. X.PP
  1069. XIn an unpatched 4.2 or 4.3bsd kernel, setuid scripts are intrinsically
  1070. Xinsecure, but this kernel feature can be disabled.
  1071. XIf it is,
  1072. X.I perl
  1073. Xcan emulate the setuid and setgid mechanism when it notices the otherwise
  1074. Xuseless setuid/gid bits on perl scripts.
  1075. XIf the kernel feature isn't disabled,
  1076. X.I perl
  1077. Xwill complain loudly that your setuid script is insecure.
  1078. XYou'll need to either disable the kernel setuid script feature, or put
  1079. Xa C wrapper around the script.
  1080. X.PP
  1081. XWhen perl is executing a setuid script, it takes special precautions to
  1082. Xprevent you from falling into any obvious traps.
  1083. X(In some ways, a perl script is more secure than the corresponding
  1084. XC program.)
  1085. XAny command line argument, environment variable, or input is marked as
  1086. X\*(L"tainted\*(R", and may not be used, directly or indirectly, in any
  1087. Xcommand that invokes a subshell, or in any command that modifies files,
  1088. Xdirectories or processes.
  1089. XAny variable that is set within an expression that has previously referenced
  1090. Xa tainted value also becomes tainted (even if it is logically impossible
  1091. Xfor the tainted value to influence the variable).
  1092. XFor example:
  1093. X.nf
  1094. X
  1095. X.ne 5
  1096. X    $foo = shift;            # $foo is tainted
  1097. X    $bar = $foo,\'bar\';        # $bar is also tainted
  1098. X    $xxx = <>;            # Tainted
  1099. X    $path = $ENV{\'PATH\'};    # Tainted, but see below
  1100. X    $abc = \'abc\';            # Not tainted
  1101. X
  1102. X.ne 4
  1103. X    system "echo $foo";        # Insecure
  1104. X    system "/bin/echo", $foo;    # Secure (doesn't use sh)
  1105. X    system "echo $bar";        # Insecure
  1106. X    system "echo $abc";        # Insecure until PATH set
  1107. X
  1108. X.ne 5
  1109. X    $ENV{\'PATH\'} = \'/bin:/usr/bin\';
  1110. X    $ENV{\'IFS\'} = \'\' if $ENV{\'IFS\'} ne \'\';
  1111. X
  1112. X    $path = $ENV{\'PATH\'};    # Not tainted
  1113. X    system "echo $abc";        # Is secure now!
  1114. X
  1115. X.ne 5
  1116. X    open(FOO,"$foo");        # OK
  1117. X    open(FOO,">$foo");         # Not OK
  1118. X
  1119. X    open(FOO,"echo $foo|");    # Not OK, but...
  1120. X    open(FOO,"-|") || exec \'echo\', $foo;    # OK
  1121. X
  1122. X    $zzz = `echo $foo`;        # Insecure, zzz tainted
  1123. X
  1124. X    unlink $abc,$foo;        # Insecure
  1125. X    umask $foo;            # Insecure
  1126. X
  1127. X.ne 3
  1128. X    exec "echo $foo";        # Insecure
  1129. X    exec "echo", $foo;        # Secure (doesn't use sh)
  1130. X    exec "sh", \'-c\', $foo;    # Considered secure, alas
  1131. X
  1132. X.fi
  1133. XThe taintedness is associated with each scalar value, so some elements
  1134. Xof an array can be tainted, and others not.
  1135. X.PP
  1136. XIf you try to do something insecure, you will get a fatal error saying 
  1137. Xsomething like \*(L"Insecure dependency\*(R" or \*(L"Insecure PATH\*(R".
  1138. XNote that you can still write an insecure system call or exec,
  1139. Xbut only by explicitly doing something like the last example above.
  1140. XYou can also bypass the tainting mechanism by referencing
  1141. Xsubpatterns\*(--\c
  1142. X.I perl
  1143. Xpresumes that if you reference a substring using $1, $2, etc, you knew
  1144. Xwhat you were doing when you wrote the pattern:
  1145. X.nf
  1146. X
  1147. X    $ARGV[0] =~ /^\-P(\ew+)$/;
  1148. X    $printer = $1;        # Not tainted
  1149. X
  1150. X.fi
  1151. XThis is fairly secure since \ew+ doesn't match shell metacharacters.
  1152. XUse of .+ would have been insecure, but
  1153. X.I perl
  1154. Xdoesn't check for that, so you must be careful with your patterns.
  1155. XThis is the ONLY mechanism for untainting user supplied filenames if you
  1156. Xwant to do file operations on them (unless you make $> equal to $<).
  1157. X.PP
  1158. XIt's also possible to get into trouble with other operations that don't care
  1159. Xwhether they use tainted values.
  1160. XMake judicious use of the file tests in dealing with any user-supplied
  1161. Xfilenames.
  1162. XWhen possible, do opens and such after setting $> = $<.
  1163. X.I Perl
  1164. Xdoesn't prevent you from opening tainted filenames for reading, so be
  1165. Xcareful what you print out.
  1166. XThe tainting mechanism is intended to prevent stupid mistakes, not to remove
  1167. Xthe need for thought.
  1168. X.SH ENVIRONMENT
  1169. X.I Perl
  1170. Xuses PATH in executing subprocesses, and in finding the script if \-S
  1171. Xis used.
  1172. XHOME or LOGDIR are used if chdir has no argument.
  1173. X.PP
  1174. XApart from these,
  1175. X.I perl
  1176. Xuses no environment variables, except to make them available
  1177. Xto the script being executed, and to child processes.
  1178. XHowever, scripts running setuid would do well to execute the following lines
  1179. Xbefore doing anything else, just to keep people honest:
  1180. X.nf
  1181. X
  1182. X.ne 3
  1183. X    $ENV{\'PATH\'} = \'/bin:/usr/bin\';    # or whatever you need
  1184. X    $ENV{\'SHELL\'} = \'/bin/sh\' if $ENV{\'SHELL\'} ne \'\';
  1185. X    $ENV{\'IFS\'} = \'\' if $ENV{\'IFS\'} ne \'\';
  1186. X
  1187. X.fi
  1188. X.SH AUTHOR
  1189. XLarry Wall <lwall@jpl-devvax.Jpl.Nasa.Gov>
  1190. X.br
  1191. XMS-DOS port by Diomidis Spinellis <dds@cc.ic.ac.uk>
  1192. X.SH FILES
  1193. X/tmp/perl\-eXXXXXX    temporary file for
  1194. X.B \-e
  1195. Xcommands.
  1196. X.SH SEE ALSO
  1197. Xa2p    awk to perl translator
  1198. X.br
  1199. Xs2p    sed to perl translator
  1200. X.SH DIAGNOSTICS
  1201. XCompilation errors will tell you the line number of the error, with an
  1202. Xindication of the next token or token type that was to be examined.
  1203. X(In the case of a script passed to
  1204. X.I perl
  1205. Xvia
  1206. X.B \-e
  1207. Xswitches, each
  1208. X.B \-e
  1209. Xis counted as one line.)
  1210. X.PP
  1211. XSetuid scripts have additional constraints that can produce error messages
  1212. Xsuch as \*(L"Insecure dependency\*(R".
  1213. XSee the section on setuid scripts.
  1214. X.SH TRAPS
  1215. XAccustomed
  1216. X.IR awk
  1217. Xusers should take special note of the following:
  1218. X.Ip * 4 2
  1219. XSemicolons are required after all simple statements in
  1220. X.IR perl .
  1221. XNewline
  1222. Xis not a statement delimiter.
  1223. X.Ip * 4 2
  1224. XCurly brackets are required on ifs and whiles.
  1225. X.Ip * 4 2
  1226. XVariables begin with $ or @ in
  1227. X.IR perl .
  1228. X.Ip * 4 2
  1229. XArrays index from 0 unless you set $[.
  1230. XLikewise string positions in substr() and index().
  1231. X.Ip * 4 2
  1232. XYou have to decide whether your array has numeric or string indices.
  1233. X.Ip * 4 2
  1234. XAssociative array values do not spring into existence upon mere reference.
  1235. X.Ip * 4 2
  1236. XYou have to decide whether you want to use string or numeric comparisons.
  1237. X.Ip * 4 2
  1238. XReading an input line does not split it for you.  You get to split it yourself
  1239. Xto an array.
  1240. XAnd the
  1241. X.I split
  1242. Xoperator has different arguments.
  1243. X.Ip * 4 2
  1244. XThe current input line is normally in $_, not $0.
  1245. XIt generally does not have the newline stripped.
  1246. X($0 is the name of the program executed.)
  1247. X.Ip * 4 2
  1248. X$<digit> does not refer to fields\*(--it refers to substrings matched by the last
  1249. Xmatch pattern.
  1250. X.Ip * 4 2
  1251. XThe
  1252. X.I print
  1253. Xstatement does not add field and record separators unless you set
  1254. X$, and $\e.
  1255. X.Ip * 4 2
  1256. XYou must open your files before you print to them.
  1257. X.Ip * 4 2
  1258. XThe range operator is \*(L".\|.\*(R", not comma.
  1259. X(The comma operator works as in C.)
  1260. X.Ip * 4 2
  1261. XThe match operator is \*(L"=~\*(R", not \*(L"~\*(R".
  1262. X(\*(L"~\*(R" is the one's complement operator, as in C.)
  1263. X.Ip * 4 2
  1264. XThe exponentiation operator is \*(L"**\*(R", not \*(L"^\*(R".
  1265. X(\*(L"^\*(R" is the XOR operator, as in C.)
  1266. X.Ip * 4 2
  1267. XThe concatenation operator is \*(L".\*(R", not the null string.
  1268. X(Using the null string would render \*(L"/pat/ /pat/\*(R" unparsable,
  1269. Xsince the third slash would be interpreted as a division operator\*(--the
  1270. Xtokener is in fact slightly context sensitive for operators like /, ?, and <.
  1271. XAnd in fact, . itself can be the beginning of a number.)
  1272. X.Ip * 4 2
  1273. X.IR Next ,
  1274. X.I exit
  1275. Xand
  1276. X.I continue
  1277. Xwork differently.
  1278. X.Ip * 4 2
  1279. XThe following variables work differently
  1280. X.nf
  1281. X
  1282. X      Awk    \h'|2.5i'Perl
  1283. X      ARGC    \h'|2.5i'$#ARGV
  1284. X      ARGV[0]    \h'|2.5i'$0
  1285. X      FILENAME\h'|2.5i'$ARGV
  1286. X      FNR    \h'|2.5i'$. \- something
  1287. X      FS    \h'|2.5i'(whatever you like)
  1288. X      NF    \h'|2.5i'$#Fld, or some such
  1289. X      NR    \h'|2.5i'$.
  1290. X      OFMT    \h'|2.5i'$#
  1291. X      OFS    \h'|2.5i'$,
  1292. X      ORS    \h'|2.5i'$\e
  1293. X      RLENGTH    \h'|2.5i'length($&)
  1294. X      RS    \h'|2.5i'$/
  1295. X      RSTART    \h'|2.5i'length($\`)
  1296. X      SUBSEP    \h'|2.5i'$;
  1297. X
  1298. X.fi
  1299. X.Ip * 4 2
  1300. XWhen in doubt, run the
  1301. X.I awk
  1302. Xconstruct through a2p and see what it gives you.
  1303. X.PP
  1304. XCerebral C programmers should take note of the following:
  1305. X.Ip * 4 2
  1306. XCurly brackets are required on ifs and whiles.
  1307. X.Ip * 4 2
  1308. XYou should use \*(L"elsif\*(R" rather than \*(L"else if\*(R"
  1309. X.Ip * 4 2
  1310. X.I Break
  1311. Xand
  1312. X.I continue
  1313. Xbecome
  1314. X.I last
  1315. Xand
  1316. X.IR next ,
  1317. Xrespectively.
  1318. X.Ip * 4 2
  1319. XThere's no switch statement.
  1320. X.Ip * 4 2
  1321. XVariables begin with $ or @ in
  1322. X.IR perl .
  1323. X.Ip * 4 2
  1324. XPrintf does not implement *.
  1325. X.Ip * 4 2
  1326. XComments begin with #, not /*.
  1327. X.Ip * 4 2
  1328. XYou can't take the address of anything.
  1329. X.Ip * 4 2
  1330. XARGV must be capitalized.
  1331. X.Ip * 4 2
  1332. XThe \*(L"system\*(R" calls link, unlink, rename, etc. return nonzero for success, not 0.
  1333. X.Ip * 4 2
  1334. XSignal handlers deal with signal names, not numbers.
  1335. X.PP
  1336. XSeasoned
  1337. X.I sed
  1338. Xprogrammers should take note of the following:
  1339. X.Ip * 4 2
  1340. XBackreferences in substitutions use $ rather than \e.
  1341. X.Ip * 4 2
  1342. XThe pattern matching metacharacters (, ), and | do not have backslashes in front.
  1343. X.Ip * 4 2
  1344. XThe range operator is .\|. rather than comma.
  1345. X.PP
  1346. XSharp shell programmers should take note of the following:
  1347. X.Ip * 4 2
  1348. XThe backtick operator does variable interpretation without regard to the
  1349. Xpresence of single quotes in the command.
  1350. X.Ip * 4 2
  1351. XThe backtick operator does no translation of the return value, unlike csh.
  1352. X.Ip * 4 2
  1353. XShells (especially csh) do several levels of substitution on each command line.
  1354. X.I Perl
  1355. Xdoes substitution only in certain constructs such as double quotes,
  1356. Xbackticks, angle brackets and search patterns.
  1357. X.Ip * 4 2
  1358. XShells interpret scripts a little bit at a time.
  1359. X.I Perl
  1360. Xcompiles the whole program before executing it.
  1361. X.Ip * 4 2
  1362. XThe arguments are available via @ARGV, not $1, $2, etc.
  1363. X.Ip * 4 2
  1364. XThe environment is not automatically made available as variables.
  1365. X.SH ERRATA\0AND\0ADDENDA
  1366. XThe Perl book,
  1367. X.I Programming\0Perl ,
  1368. Xhas the following omissions and goofs.
  1369. X.PP
  1370. XOn page 5, the examples which read
  1371. X.nf
  1372. X
  1373. X    eval "/usr/bin/perl
  1374. X
  1375. Xshould read
  1376. X
  1377. X    eval "exec /usr/bin/perl
  1378. X
  1379. X.fi
  1380. X.PP
  1381. XOn page 195, the equivalent to the System V sum program only works for
  1382. Xvery small files.  To do larger files, use
  1383. X.nf
  1384. X
  1385. X    undef $/;
  1386. X    $checksum = unpack("%32C*",<>) % 32767;
  1387. X
  1388. X.fi
  1389. X.PP
  1390. XThe
  1391. X.B \-0
  1392. Xswitch to set the initial value of $/ was added to Perl after the book
  1393. Xwent to press.
  1394. X.PP
  1395. XThe
  1396. X.B \-l
  1397. Xswitch now does automatic line ending processing.
  1398. X.PP
  1399. XThe qx// construct is now a synonym for backticks.
  1400. X.PP
  1401. X$0 may now be assigned to set the argument displayed by
  1402. X.I ps (1).
  1403. X.PP
  1404. XThe new @###.## format was omitted accidentally from the description
  1405. Xon formats.
  1406. X.PP
  1407. XIt wasn't known at press time that s///ee caused multiple evaluations of
  1408. Xthe replacement expression.  This is to be construed as a feature.
  1409. X.PP
  1410. X(LIST) x $count now does array replication.
  1411. X.PP
  1412. XThere is now no limit on the number of parentheses in a regular expression.
  1413. X.PP
  1414. XIn double-quote context, more escapes are supported: \ee, \ea, \ex1b, \ec[,
  1415. X\el, \eL, \eu, \eU, \eE.  The latter five control up/lower case translation.
  1416. X.PP
  1417. XThe
  1418. X.B $/
  1419. Xvariable may now be set to a multi-character delimiter.
  1420. X.SH BUGS
  1421. X.PP
  1422. X.I Perl
  1423. Xis at the mercy of your machine's definitions of various operations
  1424. Xsuch as type casting, atof() and sprintf().
  1425. X.PP
  1426. XIf your stdio requires an seek or eof between reads and writes on a particular
  1427. Xstream, so does
  1428. X.IR perl .
  1429. X(This doesn't apply to sysread() and syswrite().)
  1430. X.PP
  1431. XWhile none of the built-in data types have any arbitrary size limits (apart
  1432. Xfrom memory size), there are still a few arbitrary limits:
  1433. Xa given identifier may not be longer than 255 characters;
  1434. Xsprintf is limited on many machines to 128 characters per field (unless the format
  1435. Xspecifier is exactly %s);
  1436. Xand no component of your PATH may be longer than 255 if you use \-S.
  1437. X.PP
  1438. X.I Perl
  1439. Xactually stands for Pathologically Eclectic Rubbish Lister, but don't tell
  1440. Xanyone I said that.
  1441. X.rn }` ''
  1442. !STUFFY!FUNK!
  1443. echo Extracting eg/nih
  1444. sed >eg/nih <<'!STUFFY!FUNK!' -e 's/X//'
  1445. Xeval "exec /usr/bin/perl -Spi.bak $0 $*"
  1446. X    if $running_under_some_shell;
  1447. X
  1448. X# $Header: nih,v 4.0 91/03/20 01:11:29 lwall Locked $
  1449. X
  1450. X# This script makes #! scripts directly executable on machines that don't
  1451. X# support #!.  It edits in place any scripts mentioned on the command line.
  1452. X
  1453. Xs|^#!(.*)|#!$1\neval "exec $1 -S \$0 \$*"\n\tif \$running_under_some_shell;|
  1454. X    if $. == 1;
  1455. !STUFFY!FUNK!
  1456. echo " "
  1457. echo "End of kit 10 (of 36)"
  1458. cat /dev/null >kit10isdone
  1459. run=''
  1460. config=''
  1461. for iskit in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36; do
  1462.     if test -f kit${iskit}isdone; then
  1463.     run="$run $iskit"
  1464.     else
  1465.     todo="$todo $iskit"
  1466.     fi
  1467. done
  1468. case $todo in
  1469.     '')
  1470.     echo "You have run all your kits.  Please read README and then type Configure."
  1471.     for combo in *:AA; do
  1472.         if test -f "$combo"; then
  1473.         realfile=`basename $combo :AA`
  1474.         cat $realfile:[A-Z][A-Z] >$realfile
  1475.         rm -rf $realfile:[A-Z][A-Z]
  1476.         fi
  1477.     done
  1478.     rm -rf kit*isdone
  1479.     chmod 755 Configure
  1480.     ;;
  1481.     *)  echo "You have run$run."
  1482.     echo "You still need to run$todo."
  1483.     ;;
  1484. esac
  1485. : Someone might mail this, so...
  1486. exit
  1487.  
  1488. exit 0 # Just in case...
  1489. -- 
  1490. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  1491. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  1492. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  1493. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  1494.