home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / programming / misc_programming / perldos.man < prev    next >
Text File  |  1991-09-17  |  255KB  |  6,997 lines

  1.  
  2.  
  3.  
  4. PERL(1)                  USER COMMANDS                    PERL(1)
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      perl - Practical Extraction and Report Language
  10.  
  11. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  12.      ppppeeeerrrrllll [options] filename args
  13.  
  14. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  15.      _P_e_r_l is an interpreted language optimized for scanning arbi-
  16.      trary  text  files,  extracting  information from those text
  17.      files, and printing reports based on that information.  It's
  18.      also  a good language for many system management tasks.  The
  19.      language is intended to be practical  (easy  to  use,  effi-
  20.      cient,  complete)  rather  than  beautiful  (tiny,  elegant,
  21.      minimal).  It combines (in  the  author's  opinion,  anyway)
  22.      some  of the best features of C, _s_e_d, _a_w_k, and _s_h, so people
  23.      familiar with those languages should have little  difficulty
  24.      with  it.  (Language historians will also note some vestiges
  25.      of _c_s_h, Pascal, and  even  BASIC-PLUS.)   Expression  syntax
  26.      corresponds  quite  closely  to C expression syntax.  Unlike
  27.      most Unix utilities, _p_e_r_l does  not  arbitrarily  limit  the
  28.      size  of your data--if you've got the memory, _p_e_r_l can slurp
  29.      in your whole file as a  single  string.   Recursion  is  of
  30.      unlimited  depth.   And  the hash tables used by associative
  31.      arrays grow as necessary to  prevent  degraded  performance.
  32.      _P_e_r_l  uses sophisticated pattern matching techniques to scan
  33.      large amounts of data very quickly.  Although optimized  for
  34.      scanning  text, _p_e_r_l can also deal with binary data, and can
  35.      make dbm files look like associative arrays  (where  dbm  is
  36.      available).   Setuid  _p_e_r_l scripts are safer than C programs
  37.      through a dataflow tracing  mechanism  which  prevents  many
  38.      stupid  security  holes.   If  you have a problem that would
  39.      ordinarily use _s_e_d or _a_w_k or _s_h, but it exceeds their  capa-
  40.      bilities  or must run a little faster, and you don't want to
  41.      write the silly thing in C, then _p_e_r_l may be for you.  There
  42.      are  also  translators to turn your _s_e_d and _a_w_k scripts into
  43.      _p_e_r_l scripts.  OK, enough hype.
  44.  
  45.      This manual applies only to the MS-DOS  version.   Unix-only
  46.      features  are  mentioned  but are not fully documented here.
  47.      The MS-DOS version of _p_e_r_l attempts to  duplicate  the  Unix
  48.      version's functionality but is crippled by MS-DOS and by the
  49.      severe memory limitations MS-DOS imposes.  The  MS-DOS  ver-
  50.      sion is nevertheless useful for text processing and for lim-
  51.      ited applications involving subprocess management.
  52.  
  53.      Upon startup, _p_e_r_l looks for your script in one of the  fol-
  54.      lowing places:
  55.  
  56.      1.  Specified line by line via ----eeee switches  on  the  command
  57.          line.
  58.  
  59.      2.  Contained in the file specified by the first filename on
  60.  
  61.  
  62.  
  63.                                                                 1
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. PERL(1)                  USER COMMANDS                    PERL(1)
  71.  
  72.  
  73.  
  74.          the  command line.  (Note that systems supporting the #!
  75.          notation invoke interpreters this way.)
  76.  
  77.      3.  Passed in implicitly  via  standard  input.   This  only
  78.          works  if there are no filename arguments--to pass argu-
  79.          ments to a _s_t_d_i_n script you must explicitly specify a  -
  80.          for the script name.
  81.  
  82.      After locating your script, _p_e_r_l compiles it to an  internal
  83.      form.   If  the  script is syntactically correct, it is exe-
  84.      cuted.
  85.  
  86.      OOOOppppttttiiiioooonnnnssss
  87.  
  88.      Note: on first reading this section may not make much  sense
  89.      to you.  It's here at the front for easy reference.
  90.  
  91.      A single-character option may be combined with the following
  92.      option, if any.  This is particularly useful when invoking a
  93.      script using the #! construct which only  allows  one  argu-
  94.      ment.  Example:
  95.  
  96.           #!/usr/bin/perl -spi.bak # same as -s -p -i.bak
  97.           ...
  98.  
  99.      Options include:
  100.  
  101.      ----0000_d_i_g_i_t_s
  102.           specifies the record separator ($/) as an octal number.
  103.           If  there  are  no  digits,  the  null character is the
  104.           separator.  Other switches may precede  or  follow  the
  105.           digits.   For  example,  if  you have a version of _f_i_n_d
  106.           which can print filenames terminated by the null  char-
  107.           acter, you can say this:
  108.  
  109.               find . -name '*.bak' -print0 | perl -n0e unlink
  110.  
  111.           The special value 00 will cause Perl to slurp files  in
  112.           paragraph  mode.   The  value  0777  will cause Perl to
  113.           slurp files whole since there  is  no  legal  character
  114.           with that value.
  115.  
  116.      ----aaaa   turns on autosplit mode when used with a ----nnnn or ----pppp.   An
  117.           implicit  split  command to the @F array is done as the
  118.           first thing inside the implicit while loop produced  by
  119.           the ----nnnn or ----pppp.
  120.  
  121.                perl -ane 'print pop(@F), "\n";'
  122.  
  123.           is equivalent to
  124.  
  125.                while (<>) {
  126.  
  127.  
  128.  
  129.                                                                 2
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. PERL(1)                  USER COMMANDS                    PERL(1)
  137.  
  138.  
  139.  
  140.                     @F = split(' ');
  141.                     print pop(@F), "\n";
  142.                }
  143.  
  144.  
  145.      ----cccc   causes _p_e_r_l to check the syntax of the script and  then
  146.           exit without executing it.
  147.  
  148.      ----dddd   runs the script under the perl debugger.  See the  sec-
  149.           tion on Debugging.
  150.  
  151.      ----DDDD_n_u_m_b_e_r
  152.           sets debugging flags.  To watch how  it  executes  your
  153.           script,  use  ----DDDD11114444.   (This  only works if debugging is
  154.           compiled  into  your  _p_e_r_l.)   Another  nice  value  is
  155.           -D1024,  which  lists  your  compiled syntax tree.  And
  156.           -D512 displays compiled regular expressions.
  157.  
  158.      ----eeee _c_o_m_m_a_n_d_l_i_n_e
  159.           may be used to enter one line of script.   Multiple  ----eeee
  160.           commands  may be given to build up a multi-line script.
  161.           If ----eeee is  given,  _p_e_r_l  will  not  look  for  a  script
  162.           filename  in  the  argument  list.   On  MS-DOS, the ----eeee
  163.           switch will not work well unless perl is  run  from  an
  164.           MKS tool, such as the Korn shell.  This is due to limi-
  165.           tations in the standard method of MS-DOS argument pass-
  166.           ing.
  167.  
  168.      ----iiii_e_x_t_e_n_s_i_o_n
  169.           specifies that files processed by the <> construct  are
  170.           to  be  edited  in-place.  It does this by renaming the
  171.           input file, opening the output file by the  same  name,
  172.           and selecting that output file as the default for print
  173.           statements.  The extension, if supplied,  is  added  to
  174.           the  name of the old file to make a backup copy.  If no
  175.           extension is supplied, no backup is made.  Saying "perl
  176.           -p  -i.bak  -e "s/foo/bar/;" ... " is the same as using
  177.           the script:
  178.  
  179.                #!/usr/bin/perl -pi.bak
  180.                s/foo/bar/;
  181.  
  182.           which is equivalent to
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.                                                                 3
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. PERL(1)                  USER COMMANDS                    PERL(1)
  203.  
  204.  
  205.  
  206.                #!/usr/bin/perl
  207.                while (<>) {
  208.                     if ($ARGV ne $oldargv) {
  209.                          rename($ARGV, $ARGV . '.bak');
  210.                          open(ARGVOUT, ">$ARGV");
  211.                          select(ARGVOUT);
  212.                          $oldargv = $ARGV;
  213.                     }
  214.                     s/foo/bar/;
  215.                }
  216.                continue {
  217.                    print;     # this prints to original filename
  218.                }
  219.                select(STDOUT);
  220.  
  221.           except that the ----iiii form doesn't need to  compare  $ARGV
  222.           to  $oldargv to know when the filename has changed.  It
  223.           does, however, use ARGVOUT for the selected filehandle.
  224.           Note  that  _S_T_D_O_U_T  is  restored  as the default output
  225.           filehandle after the loop.
  226.  
  227.           You can use eof to locate the end of each  input  file,
  228.           in  case you want to append to each file, or reset line
  229.           numbering (see example under eof).
  230.  
  231.      ----IIII_d_i_r_e_c_t_o_r_y
  232.           may be used in  conjunction  with  ----PPPP  to  tell  the  C
  233.           preprocessor  where  to  look  for  include  files.  By
  234.           default /usr/include and /usr/lib/perl are searched.
  235.  
  236.      ----llll_o_c_t_n_u_m
  237.           enables automatic line-ending processing.  It  has  two
  238.           effects:  first, it automatically chops the line termi-
  239.           nator when used with ----nnnn or ----pppp ,,,, and second, it  assigns
  240.           $\ to have the value of _o_c_t_n_u_m so that any print state-
  241.           ments will have that line terminator added back on.  If
  242.           _o_c_t_n_u_m  is omitted, sets $\ to the current value of $/.
  243.           For instance, to trim lines to 80 columns:
  244.  
  245.                perl -lpe 'substr($_, 80) = ""'
  246.  
  247.           Note that the assignment $\  =  $/  is  done  when  the
  248.           switch  is processed, so the input record separator can
  249.           be different than the output record separator if the ----llll
  250.           switch is followed by a ----0000 switch:
  251.  
  252.                gnufind / -print0 | perl -ln0e 'print "found $_" if -p'
  253.  
  254.           This sets $\ to newline and then sets $/  to  the  null
  255.           character.
  256.  
  257.      ----nnnn   causes _p_e_r_l to assume the following  loop  around  your
  258.  
  259.  
  260.  
  261.                                                                 4
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. PERL(1)                  USER COMMANDS                    PERL(1)
  269.  
  270.  
  271.  
  272.           script,  which makes it iterate over filename arguments
  273.           somewhat like "sed -n" or _a_w_k:
  274.  
  275.                while (<>) {
  276.                     ...       # your script goes here
  277.                }
  278.  
  279.           Note that the lines are not printed by default.  See ----pppp
  280.           to  have  lines  printed.   Here is an efficient way to
  281.           delete all files older than a week:
  282.  
  283.                find . -mtime +7 -print | perl -nle 'unlink;'
  284.  
  285.           This is faster than using  the  -exec  switch  of  find
  286.           because  you  don't  have  to  start a process on every
  287.           filename found.
  288.  
  289.      ----pppp   causes _p_e_r_l to assume the following  loop  around  your
  290.           script,  which makes it iterate over filename arguments
  291.           somewhat like _s_e_d:
  292.  
  293.                while (<>) {
  294.                     ...       # your script goes here
  295.                } continue {
  296.                     print;
  297.                }
  298.  
  299.           Note that the  lines  are  printed  automatically.   To
  300.           suppress  printing use the ----nnnn switch.  A ----pppp overrides a
  301.           ----nnnn switch.
  302.  
  303.      ----PPPP   causes your script to be run through the C preprocessor
  304.           before  compilation  by _p_e_r_l.  (Since both comments and
  305.           cpp directives begin with the # character,  you  should
  306.           avoid  starting  comments  with any words recognized by
  307.           the C preprocessor such as "if", "else" or "define".)
  308.  
  309.      ----ssss   enables some rudimentary switch parsing for switches on
  310.           the  command  line after the script name but before any
  311.           filename arguments (or before a --).  Any switch  found
  312.           there  is removed from @ARGV and sets the corresponding
  313.           variable in the  _p_e_r_l  script.   The  following  script
  314.           prints "true" if and only if the script is invoked with
  315.           a -xyz switch.
  316.  
  317.                #!/usr/bin/perl -s
  318.                if ($xyz) { print "true\n"; }
  319.  
  320.  
  321.      ----SSSS   makes _p_e_r_l use the PATH environment variable to  search
  322.           for  the  script  (unless the name of the script starts
  323.           with a slash).  Typically this is used  to  emulate  #!
  324.  
  325.  
  326.  
  327.                                                                 5
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. PERL(1)                  USER COMMANDS                    PERL(1)
  335.  
  336.  
  337.  
  338.           startup  on machines that don't support #!, in the fol-
  339.           lowing manner:
  340.  
  341.                #!/usr/bin/perl
  342.                eval "exec /usr/bin/perl -S $0 $*"
  343.                     if $running_under_some_shell;
  344.  
  345.           The system ignores the first line and feeds the  script
  346.           to  /bin/sh,  which proceeds to try to execute the _p_e_r_l
  347.           script as a  shell  script.   The  shell  executes  the
  348.           second  line as a normal shell command, and thus starts
  349.           up the _p_e_r_l interpreter.  On some  systems  $0  doesn't
  350.           always  contain the full pathname, so the ----SSSS tells _p_e_r_l
  351.           to search for the  script  if  necessary.   After  _p_e_r_l
  352.           locates  the  script,  it  parses the lines and ignores
  353.           them because the variable $running_under_some_shell  is
  354.           never  true.   A  better  construct  than  $*  would be
  355.           ${1+"$@"}, which handles embedded spaces  and  such  in
  356.           the  filenames, but doesn't work if the script is being
  357.           interpreted by csh.  In order to  start  up  sh  rather
  358.           than  csh, some systems may have to replace the #! line
  359.           with a line containing just a colon, which will be pol-
  360.           itely  ignored  by  perl.   Other systems can't control
  361.           that, and need a totally devious  construct  that  will
  362.           work  under any of csh, sh or perl, such as the follow-
  363.           ing:
  364.  
  365.                eval '(exit $?0)' && eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
  366.                & eval 'exec /usr/bin/perl -S $0 $argv:q'
  367.                     if 0;
  368.  
  369.  
  370.      ----uuuu   causes _p_e_r_l to dump core after compiling  your  script.
  371.           This switch is not supported on MS-DOS.
  372.  
  373.      ----UUUU   allows _p_e_r_l to do  unsafe  operations.   Currently  the
  374.           only "unsafe" operation is the unlinking of directories
  375.           while running as superuser.
  376.  
  377.      ----vvvv   prints the version and patchlevel of your _p_e_r_l  execut-
  378.           able.
  379.  
  380.      ----wwww   prints warnings about identifiers  that  are  mentioned
  381.           only  once,  and  scalar variables that are used before
  382.           being set.  Also warns about redefined subroutines, and
  383.           references  to  undefined  filehandles  or  filehandles
  384.           opened readonly that you are attempting  to  write  on.
  385.           Also  warns you if you use == on values that don't look
  386.           like numbers, and if your subroutines recurse more than
  387.           100 deep.
  388.  
  389.      ----xxxx_d_i_r_e_c_t_o_r_y
  390.  
  391.  
  392.  
  393.                                                                 6
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400. PERL(1)                  USER COMMANDS                    PERL(1)
  401.  
  402.  
  403.  
  404.           tells _p_e_r_l that the script is embedded  in  a  message.
  405.           Leading  garbage will be discarded until the first line
  406.           that starts with #! and  contains  the  string  "perl".
  407.           Any  meaningful  switches  on that line will be applied
  408.           (but only one group of switches, as with normal #! pro-
  409.           cessing).   If a directory name is specified, Perl will
  410.           switch to that directory  before  running  the  script.
  411.           The ----xxxx switch only controls the the disposal of leading
  412.           garbage.  The script must be terminated with __END__ if
  413.           there is trailing garbage to be ignored (the script can
  414.           process any or all of the trailing garbage via the DATA
  415.           filehandle if desired).
  416.  
  417.      DDDDaaaattttaaaa TTTTyyyyppppeeeessss aaaannnndddd OOOObbbbjjjjeeeeccccttttssss
  418.  
  419.      _P_e_r_l has three data types: scalars, arrays of  scalars,  and
  420.      associative arrays of scalars.  Normal arrays are indexed by
  421.      number, and associative arrays by string.
  422.  
  423.      The interpretation of operations and values  in  perl  some-
  424.      times  depends on the requirements of the context around the
  425.      operation or value.  There are three major contexts: string,
  426.      numeric  and  array.  Certain operations return array values
  427.      in contexts wanting an array, and scalar  values  otherwise.
  428.      (If this is true of an operation it will be mentioned in the
  429.      documentation for that operation.)  Operations which  return
  430.      scalars  don't  care  whether  the  context is looking for a
  431.      string or a number, but  scalar  variables  and  values  are
  432.      interpreted as strings or numbers as appropriate to the con-
  433.      text.  A scalar is interpreted as TRUE in the boolean  sense
  434.      if  it  is  not  the null string or 0.  Booleans returned by
  435.      operators are 1 for true and 0 or '' (the null  string)  for
  436.      false.
  437.  
  438.      There are actually two varieties of null string: defined and
  439.      undefined.   Undefined  null strings are returned when there
  440.      is no real value for something, such as when  there  was  an
  441.      error, or at end of file, or when you refer to an uninitial-
  442.      ized variable or element of an  array.   An  undefined  null
  443.      string  may become defined the first time you access it, but
  444.      prior to that you can use the defined() operator  to  deter-
  445.      mine whether the value is defined or not.
  446.  
  447.      References to scalar variables always begin with  '$',  even
  448.      when referring to a scalar that is part of an array.  Thus:
  449.  
  450.          $days           # a simple scalar variable
  451.          $days[28]       # 29th element of array @days
  452.          $days{'Feb'}    # one value from an associative array
  453.          $#days          # last index of array @days
  454.  
  455.      but entire arrays or array slices are denoted by '@':
  456.  
  457.  
  458.  
  459.                                                                 7
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466. PERL(1)                  USER COMMANDS                    PERL(1)
  467.  
  468.  
  469.  
  470.          @days           # ($days[0], $days[1],... $days[n])
  471.          @days[3,4,5]    # same as @days[3..5]
  472.          @days{'a','c'}  # same as ($days{'a'},$days{'c'})
  473.  
  474.      and entire associative arrays are denoted by '%':
  475.  
  476.          %days           # (key1, val1, key2, val2 ...)
  477.  
  478.      Any of these eight constructs may serve as an  lvalue,  that
  479.      is,  may be assigned to.  (It also turns out that an assign-
  480.      ment is itself an lvalue in certain  contexts--see  examples
  481.      under s, tr and chop.)  Assignment to a scalar evaluates the
  482.      righthand side in a scalar context, while assignment  to  an
  483.      array  or  array  slice  evaluates  the righthand side in an
  484.      array context.
  485.  
  486.      You may  find  the  length  of  array  @days  by  evaluating
  487.      "$#days",  as in _c_s_h.  (Actually, it's not the length of the
  488.      array, it's the subscript of the last element,  since  there
  489.      is (ordinarily) a 0th element.)  Assigning to $#days changes
  490.      the length of the array.  Shortening an array by this method
  491.      does  not actually destroy any values.  Lengthening an array
  492.      that was previously shortened recovers the values that  were
  493.      in  those elements.  You can also gain some measure of effi-
  494.      ciency by preextending an array that is going  to  get  big.
  495.      (You  can  also  extend  an array by assigning to an element
  496.      that is off the end of the array.  This differs from assign-
  497.      ing to $#whatever in that intervening values are set to null
  498.      rather than recovered.)  You can truncate an array  down  to
  499.      nothing  by assigning the null list () to it.  The following
  500.      are exactly equivalent
  501.  
  502.           @whatever = ();
  503.           $#whatever = $[ - 1;
  504.  
  505.  
  506.      If you evaluate an array in a scalar context, it returns the
  507.      length of the array.  The following is always true:
  508.  
  509.           @whatever == $#whatever - $[ + 1;
  510.  
  511.  
  512.      Multi-dimensional arrays are not directly supported, but see
  513.      the  discussion of the $; variable later for a means of emu-
  514.      lating multiple subscripts with an associative  array.   You
  515.      could  also  write  a subroutine to turn multiple subscripts
  516.      into a single subscript.
  517.  
  518.      Every data type has its own  namespace.   You  can,  without
  519.      fear  of  conflict, use the same name for a scalar variable,
  520.      an array, an associative array, a filehandle,  a  subroutine
  521.      name,  and/or  a label.  Since variable and array references
  522.  
  523.  
  524.  
  525.                                                                 8
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532. PERL(1)                  USER COMMANDS                    PERL(1)
  533.  
  534.  
  535.  
  536.      always start with '$', '@', or  '%',  the  "reserved"  words
  537.      aren't  in  fact  reserved  with  respect to variable names.
  538.      (They ARE reserved with respect to labels  and  filehandles,
  539.      however,  which  don't  have  an  initial special character.
  540.      Hint:  you  could  say   open(LOG,'logfile')   rather   than
  541.      open(log,'logfile').    Using   uppercase  filehandles  also
  542.      improves readability and protects  you  from  conflict  with
  543.      future  reserved  words.)  Case IS significant--"FOO", "Foo"
  544.      and "foo" are all different names.  Names which start with a
  545.      letter may also contain digits and underscores.  Names which
  546.      do not start with a letter are  limited  to  one  character,
  547.      e.g.  "$%" or "$$".  (Most of the one character names have a
  548.      predefined significance to _p_e_r_l.  More later.)
  549.  
  550.      Numeric literals are specified in any of the usual  floating
  551.      point or integer formats:
  552.  
  553.          12345
  554.          12345.67
  555.          .23E-10
  556.          0xffff     # hex
  557.          0377  # octal
  558.  
  559.      String literals are delimited by  either  single  or  double
  560.      quotes.   They  work  much like shell quotes:  double-quoted
  561.      string literals are subject to backslash and  variable  sub-
  562.      stitution;  single-quoted strings are not (except for \' and
  563.      \\).  The usual backslash rules apply for making  characters
  564.      such  as  newline,  tab,  etc.,  as well as some more exotic
  565.      forms:
  566.  
  567.           \t        tab
  568.           \n        newline
  569.           \r        return
  570.           \f        form feed
  571.           \b        backspace
  572.           \a        alarm (bell)
  573.           \e        escape
  574.           \033      octal char
  575.           \x1b      hex char
  576.           \c[       control char
  577.           \l        lowercase next char
  578.           \u        uppercase next char
  579.           \L        lowercase till \E
  580.           \U        uppercase till \E
  581.           \E        end case modification
  582.  
  583.      You can also embed newlines directly in your  strings,  i.e.
  584.      they  can  end on a different line than they begin.  This is
  585.      nice, but if you forget your trailing quote, the error  will
  586.      not be reported until _p_e_r_l finds another line containing the
  587.      quote character, which may be much further on in the script.
  588.  
  589.  
  590.  
  591.                                                                 9
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598. PERL(1)                  USER COMMANDS                    PERL(1)
  599.  
  600.  
  601.  
  602.      Variable  substitution  inside  strings is limited to scalar
  603.      variables, normal array values, and array slices.  (In other
  604.      words,  identifiers  beginning  with  $ or @, followed by an
  605.      optional bracketed expression as a subscript.)  The  follow-
  606.      ing code segment prints out "The price is $100."
  607.  
  608.          $Price = '$100';               # not interpreted
  609.          print "The price is $Price.\n";# interpreted
  610.  
  611.      Note that you can put curly brackets around  the  identifier
  612.      to  delimit it from following alphanumerics.  Also note that
  613.      a single quoted string must be separated  from  a  preceding
  614.      word  by a space, since single quote is a valid character in
  615.      an identifier (see Packages).
  616.  
  617.      Two  special  literals  are  __LINE__  and  __FILE__,  which
  618.      represent the current line number and filename at that point
  619.      in your program.  They may only be used as separate  tokens;
  620.      they  will  not  be interpolated into strings.  In addition,
  621.      the token __END__ may be used to indicate the logical end of
  622.      the  script  before  the  actual end of file.  Any following
  623.      text is ignored (but may be read via the  DATA  filehandle).
  624.      The  two  control  characters  ^D  and  ^Z  are synonyms for
  625.      __END__.
  626.  
  627.      A word that doesn't have any  other  interpretation  in  the
  628.      grammar  will  be  treated as if it had single quotes around
  629.      it.  For this purpose, a word consists only of  alphanumeric
  630.      characters  and underline, and must start with an alphabetic
  631.      character.  As with filehandles and labels, a bare word that
  632.      consists  entirely  of lowercase letters risks conflict with
  633.      future reserved words, and if you use the  ----wwww  switch,  Perl
  634.      will warn you about any such words.
  635.  
  636.      Array values are interpolated into double-quoted strings  by
  637.      joining  all  the  elements  of the array with the delimiter
  638.      specified in the $" variable, space by default.   (Since  in
  639.      versions  of  perl  prior  to  3.0 the @ character was not a
  640.      metacharacter in double-quoted strings, the interpolation of
  641.      @array,   $array[EXPR],   @array[LIST],   $array{EXPR},   or
  642.      @array{LIST} only happens if array is  referenced  elsewhere
  643.      in  the  program  or  is  predefined.)   The  following  are
  644.      equivalent:
  645.  
  646.           $temp = join($",@ARGV);
  647.           system "echo $temp";
  648.  
  649.           system "echo @ARGV";
  650.  
  651.      Within search patterns (which  also  undergo  double-quotish
  652.      substitution)  there  is a bad ambiguity:  Is /$foo[bar]/ to
  653.      be interpreted as /${foo}[bar]/ (where [bar] is a  character
  654.  
  655.  
  656.  
  657.                                                                10
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664. PERL(1)                  USER COMMANDS                    PERL(1)
  665.  
  666.  
  667.  
  668.      class for the regular expression) or as /${foo[bar]}/ (where
  669.      [bar] is the subscript to array @foo)?  If @foo doesn't oth-
  670.      erwise  exist,  then  it's  obviously a character class.  If
  671.      @foo exists, perl takes a good guess  about  [bar],  and  is
  672.      almost  always  right.  If it does guess wrong, or if you're
  673.      just plain paranoid, you can force the  correct  interpreta-
  674.      tion with curly brackets as above.
  675.  
  676.      A line-oriented form of quoting is based on the shell  here-
  677.      is syntax.  Following a << you specify a string to terminate
  678.      the quoted material, and all  lines  following  the  current
  679.      line  down  to  the  terminating string are the value of the
  680.      item.  The terminating string may be either an identifier (a
  681.      word),  or  some quoted text.  If quoted, the type of quotes
  682.      you use determines the treatment of the  text,  just  as  in
  683.      regular  quoting.   An unquoted identifier works like double
  684.      quotes.  There must be no space between the << and the iden-
  685.      tifier.   (If  you  put a space it will be treated as a null
  686.      identifier, which is valid,  and  matches  the  first  blank
  687.      line--see  Merry  Christmas example below.)  The terminating
  688.      string must appear by itself (unquoted and with no surround-
  689.      ing whitespace) on the terminating line.
  690.  
  691.           print <<EOF;        # same as above
  692.      The price is $Price.
  693.      EOF
  694.  
  695.           print <<"EOF";      # same as above
  696.      The price is $Price.
  697.      EOF
  698.  
  699.           print << x 10;      # null identifier is delimiter
  700.      Merry Christmas!
  701.  
  702.           print <<`EOC`;      # execute commands
  703.      echo hi there
  704.      echo lo there
  705.      EOC
  706.  
  707.           print <<foo, <<bar; # you can stack them
  708.      I said foo.
  709.      foo
  710.      I said bar.
  711.      bar
  712.  
  713.      Array literals are denoted by separating  individual  values
  714.      by commas, and enclosing the list in parentheses:
  715.  
  716.           (LIST)
  717.  
  718.      In a context not requiring an array value, the value of  the
  719.      array literal is the value of the final element, as in the C
  720.  
  721.  
  722.  
  723.                                                                11
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730. PERL(1)                  USER COMMANDS                    PERL(1)
  731.  
  732.  
  733.  
  734.      comma operator.  For example,
  735.  
  736.          @foo = ('cc', '-E', $bar);
  737.  
  738.      assigns the entire array value to array foo, but
  739.  
  740.          $foo = ('cc', '-E', $bar);
  741.  
  742.      assigns the value of variable bar  to  variable  foo.   Note
  743.      that the value of an actual array in a scalar context is the
  744.      length of the array; the following assigns to $foo the value
  745.      3:
  746.  
  747.          @foo = ('cc', '-E', $bar);
  748.          $foo = @foo;         # $foo gets 3
  749.  
  750.      You  may  have  an  optional  comma   before   the   closing
  751.      parenthesis of an array literal, so that you can say:
  752.  
  753.          @foo = (
  754.           1,
  755.           2,
  756.           3,
  757.          );
  758.  
  759.      When a LIST is  evaluated,  each  element  of  the  list  is
  760.      evaluated in an array context, and the resulting array value
  761.      is interpolated into LIST just as if each individual element
  762.      were a member of LIST.  Thus arrays lose their identity in a
  763.      LIST--the list
  764.  
  765.           (@foo,@bar,&SomeSub)
  766.  
  767.      contains all the elements of @foo followed by all  the  ele-
  768.      ments  of @bar, followed by all the elements returned by the
  769.      subroutine named SomeSub.
  770.  
  771.      A list value may also be subscripted like  a  normal  array.
  772.      Examples:
  773.  
  774.           $time = (stat($file))[8];     # stat returns array value
  775.           $digit = ('a','b','c','d','e','f')[$digit-10];
  776.           return (pop(@foo),pop(@foo))[0];
  777.  
  778.  
  779.      Array lists may be assigned to if and only if  each  element
  780.      of the list is an lvalue:
  781.  
  782.          ($a, $b, $c) = (1, 2, 3);
  783.  
  784.          ($map{'red'}, $map{'blue'}, $map{'green'}) = (0x00f, 0x0f0, 0xf00);
  785.  
  786.  
  787.  
  788.  
  789.                                                                12
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796. PERL(1)                  USER COMMANDS                    PERL(1)
  797.  
  798.  
  799.  
  800.      The final element may be an array or an associative array:
  801.  
  802.          ($a, $b, @rest) = split;
  803.          local($a, $b, %rest) = @_;
  804.  
  805.      You can actually put an array anywhere in the list, but  the
  806.      first  array  in  the  list will soak up all the values, and
  807.      anything after it will get a null value.  This may be useful
  808.      in a local().
  809.  
  810.      An associative array literal contains pairs of values to  be
  811.      interpreted as a key and a value:
  812.  
  813.          # same as map assignment above
  814.          %map = ('red',0x00f,'blue',0x0f0,'green',0xf00);
  815.  
  816.      Array assignment in a scalar context returns the  number  of
  817.      elements produced by the expression on the right side of the
  818.      assignment:
  819.  
  820.           $x = (($foo,$bar) = (3,2,1)); # set $x to 3, not 2
  821.  
  822.  
  823.      There are several other pseudo-literals that you should know
  824.      about.    If  a  string  is  enclosed  by  backticks  (grave
  825.      accents), it first undergoes variable substitution just like
  826.      a  double  quoted  string.  It is then interpreted as a com-
  827.      mand, and the output of that command is  the  value  of  the
  828.      pseudo-literal,  like  in  a  shell.  In a scalar context, a
  829.      single string consisting of all the output is returned.   In
  830.      an  array  context,  an array of values is returned, one for
  831.      each line of output.  (You can set $/  to  use  a  different
  832.      line  terminator.)   The  command  is executed each time the
  833.      pseudo-literal is evaluated.  The status value of  the  com-
  834.      mand  is  returned  in  $?  (see  Predefined  Names  for the
  835.      interpretation of $?).  Unlike in  _c_s_h,  no  translation  is
  836.      done  on  the return data--newlines remain newlines.  Unlike
  837.      in any of the shells, single quotes  do  not  hide  variable
  838.      names  in  the  command  from  interpretation.   To pass a $
  839.      through to the shell you need to hide it with a backslash.
  840.  
  841.      Evaluating a filehandle in angle brackets  yields  the  next
  842.      line  from  that file (newline included, so it's never false
  843.      until EOF, at which time an undefined  value  is  returned).
  844.      Ordinarily  you  must  assign  that value to a variable, but
  845.      there is one situation where an  automatic  assignment  hap-
  846.      pens.   If  (and only if) the input symbol is the only thing
  847.      inside the  conditional  of  a  _w_h_i_l_e  loop,  the  value  is
  848.      automatically assigned to the variable "$_".  (This may seem
  849.      like an odd thing to you, but you'll use  the  construct  in
  850.      almost  every _p_e_r_l script you write.)  Anyway, the following
  851.      lines are equivalent to each other:
  852.  
  853.  
  854.  
  855.                                                                13
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862. PERL(1)                  USER COMMANDS                    PERL(1)
  863.  
  864.  
  865.  
  866.          while ($_ = <STDIN>) { print; }
  867.          while (<STDIN>) { print; }
  868.          for (;<STDIN>;) { print; }
  869.          print while $_ = <STDIN>;
  870.          print while <STDIN>;
  871.  
  872.      The filehandles _S_T_D_I_N, _S_T_D_O_U_T  and  _S_T_D_E_R_R  are  predefined.
  873.      (The  filehandles  _s_t_d_i_n,  _s_t_d_o_u_t  and _s_t_d_e_r_r will also work
  874.      except in packages, where they would be interpreted as local
  875.      identifiers rather than global.)  Additional filehandles may
  876.      be created with the _o_p_e_n function.
  877.  
  878.      If a <FILEHANDLE> is used in a context that is  looking  for
  879.      an  array,  an  array  consisting  of all the input lines is
  880.      returned, one line per array element.  It's easy to  make  a
  881.      LARGE data space this way, so use with care.
  882.  
  883.      The null filehandle <> is special and can be used to emulate
  884.      the  behavior  of  _s_e_d  and _a_w_k.  Input from <> comes either
  885.      from standard input, or from each file listed on the command
  886.      line.   Here's how it works: the first time <> is evaluated,
  887.      the ARGV array is checked, and if it is  null,  $ARGV[0]  is
  888.      set to '-', which when opened gives you standard input.  The
  889.      ARGV array is then processed as a list  of  filenames.   The
  890.      loop
  891.  
  892.           while (<>) {
  893.                ...            # code for each line
  894.           }
  895.  
  896.      is equivalent to
  897.  
  898.           unshift(@ARGV, '-') if $#ARGV < $[;
  899.           while ($ARGV = shift) {
  900.                open(ARGV, $ARGV);
  901.                while (<ARGV>) {
  902.                     ...       # code for each line
  903.                }
  904.           }
  905.  
  906.      except that it isn't as cumbersome to say.  It  really  does
  907.      shift  array ARGV and put the current filename into variable
  908.      ARGV.  It also uses filehandle  ARGV  internally.   You  can
  909.      modify  @ARGV  before  the first <> as long as you leave the
  910.      first filename at the beginning of the array.  Line  numbers
  911.      ($.)  continue as if the input was one big happy file.  (But
  912.      see example under eof for how to reset line numbers on  each
  913.      file.)
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921.                                                                14
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928. PERL(1)                  USER COMMANDS                    PERL(1)
  929.  
  930.  
  931.  
  932.      If you want to set @ARGV to your own list of files, go right
  933.      ahead.   If  you want to pass switches into your script, you
  934.      can put a loop on the front like this:
  935.  
  936.           while ($_ = $ARGV[0], /^-/) {
  937.                shift;
  938.               last if /^--$/;
  939.                /^-D(.*)/ && ($debug = $1);
  940.                /^-v/ && $verbose++;
  941.                ...       # other switches
  942.           }
  943.           while (<>) {
  944.                ...       # code for each line
  945.           }
  946.  
  947.      The <> symbol will return FALSE only once.  If you  call  it
  948.      again  after  this it will assume you are processing another
  949.      @ARGV list, and if you haven't set @ARGV,  will  input  from
  950.      _S_T_D_I_N.
  951.  
  952.      If the string inside the angle brackets is a reference to  a
  953.      scalar  variable  (e.g. <$foo>), then that variable contains
  954.      the name of the filehandle to input from.
  955.  
  956.      If the string inside angle brackets is not a filehandle,  it
  957.      is  interpreted  as  a  filename  pattern to be globbed, and
  958.      either an array of filenames or the  next  filename  in  the
  959.      list  is  returned,  depending  on  context.  One level of $
  960.      interpretation is done  first,  but  you  can't  say  <$foo>
  961.      because  that's  an  indirect filehandle as explained in the
  962.      previous paragraph.  You  could  insert  curly  brackets  to
  963.      force interpretation as a filename glob: <${foo}>.  Example:
  964.  
  965.           while (<*.c>) {
  966.                chmod 0644, $_;
  967.           }
  968.  
  969.      is equivalent to
  970.  
  971.           open(foo, "echo *.c | tr -s ' \t\r\f' '\\012\\012\\012\\012'|");
  972.           while (<foo>) {
  973.                chop;
  974.                chmod 0644, $_;
  975.           }
  976.  
  977.      In fact, it's currently implemented that way.  (Which  means
  978.      it will not work on filenames with spaces in them unless you
  979.      have /bin/csh on your machine.)  Of course, the shortest way
  980.      to do the above is:
  981.  
  982.           chmod 0644, <*.c>;
  983.  
  984.  
  985.  
  986.  
  987.                                                                15
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994. PERL(1)                  USER COMMANDS                    PERL(1)
  995.  
  996.  
  997.  
  998.      SSSSyyyynnnnttttaaaaxxxx
  999.  
  1000.      A _p_e_r_l script consists of a  sequence  of  declarations  and
  1001.      commands.   The only things that need to be declared in _p_e_r_l
  1002.      are report formats and subroutines.  See the sections  below
  1003.      for  more information on those declarations.  All uninitial-
  1004.      ized user-created objects are assumed to start with  a  null
  1005.      or 0 value until they are defined by some explicit operation
  1006.      such as assignment.  The sequence of  commands  is  executed
  1007.      just once, unlike in _s_e_d and _a_w_k scripts, where the sequence
  1008.      of commands is executed for each  input  line.   While  this
  1009.      means  that  you must explicitly loop over the lines of your
  1010.      input file (or files), it also means you have much more con-
  1011.      trol  over  which files and which lines you look at.  (Actu-
  1012.      ally, I'm lying--it is possible to do an implicit loop  with
  1013.      either the ----nnnn or ----pppp switch.)
  1014.  
  1015.      A declaration can be put anywhere a command can, but has  no
  1016.      effect   on   the  execution  of  the  primary  sequence  of
  1017.      commands--declarations all  take  effect  at  compile  time.
  1018.      Typically  all  the declarations are put at the beginning or
  1019.      the end of the script.
  1020.  
  1021.      _P_e_r_l is, for the most part, a free-form language.  (The only
  1022.      exception to this is format declarations, for fairly obvious
  1023.      reasons.)  Comments are indicated by the  #  character,  and
  1024.      extend  to the end of the line.  If you attempt to use /* */
  1025.      C comments, it will be interpreted  either  as  division  or
  1026.      pattern  matching,  depending  on  the context.  So don't do
  1027.      that.
  1028.  
  1029.      CCCCoooommmmppppoooouuuunnnndddd ssssttttaaaatttteeeemmmmeeeennnnttttssss
  1030.  
  1031.      In _p_e_r_l, a sequence of commands may be treated as  one  com-
  1032.      mand by enclosing it in curly brackets.  We will call this a
  1033.      BLOCK.
  1034.  
  1035.      The following compound commands may be used to control flow:
  1036.  
  1037.           if (EXPR) BLOCK
  1038.           if (EXPR) BLOCK else BLOCK
  1039.           if (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK
  1040.           LABEL while (EXPR) BLOCK
  1041.           LABEL while (EXPR) BLOCK continue BLOCK
  1042.           LABEL for (EXPR; EXPR; EXPR) BLOCK
  1043.           LABEL foreach VAR (ARRAY) BLOCK
  1044.           LABEL BLOCK continue BLOCK
  1045.  
  1046.      Note that, unlike C and Pascal, these are defined  in  terms
  1047.      of BLOCKs, not statements.  This means that the curly brack-
  1048.      ets are _r_e_q_u_i_r_e_d--no dangling statements  allowed.   If  you
  1049.      want  to write conditionals without curly brackets there are
  1050.  
  1051.  
  1052.  
  1053.                                                                16
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060. PERL(1)                  USER COMMANDS                    PERL(1)
  1061.  
  1062.  
  1063.  
  1064.      several other ways to do it.  The following all do the  same
  1065.      thing:
  1066.  
  1067.           if (!open(foo)) { die "Can't open $foo: $!"; }
  1068.           die "Can't open $foo: $!" unless open(foo);
  1069.           open(foo) || die "Can't open $foo: $!"; # foo or bust!
  1070.           open(foo) ? 'hi mom' : die "Can't open $foo: $!";
  1071.                          # a bit exotic, that last one
  1072.  
  1073.  
  1074.      The _i_f  statement  is  straightforward.   Since  BLOCKs  are
  1075.      always  bounded  by curly brackets, there is never any ambi-
  1076.      guity about which _i_f an _e_l_s_e goes with.  If you  use  _u_n_l_e_s_s
  1077.      in place of _i_f, the sense of the test is reversed.
  1078.  
  1079.      The _w_h_i_l_e statement  executes  the  block  as  long  as  the
  1080.      expression  is true (does not evaluate to the null string or
  1081.      0).  The LABEL is optional, and if present, consists  of  an
  1082.      identifier  followed  by  a colon.  The LABEL identifies the
  1083.      loop for the loop control statements _n_e_x_t,  _l_a_s_t,  and  _r_e_d_o
  1084.      (see  below).   If  there  is a _c_o_n_t_i_n_u_e BLOCK, it is always
  1085.      executed  just  before  the  conditional  is  about  to   be
  1086.      evaluated  again,  similarly to the third part of a _f_o_r loop
  1087.      in C.  Thus it can be used to  increment  a  loop  variable,
  1088.      even when the loop has been continued via the _n_e_x_t statement
  1089.      (similar to the C "continue" statement).
  1090.  
  1091.      If the word _w_h_i_l_e is replaced by the word _u_n_t_i_l,  the  sense
  1092.      of the test is reversed, but the conditional is still tested
  1093.      before the first iteration.
  1094.  
  1095.      In either the _i_f or the _w_h_i_l_e  statement,  you  may  replace
  1096.      "(EXPR)"  with  a  BLOCK, and the conditional is true if the
  1097.      value of the last command in that block is true.
  1098.  
  1099.      The _f_o_r loop works  exactly  like  the  corresponding  _w_h_i_l_e
  1100.      loop:
  1101.  
  1102.           for ($i = 1; $i < 10; $i++) {
  1103.                ...
  1104.           }
  1105.  
  1106.      is the same as
  1107.  
  1108.           $i = 1;
  1109.           while ($i < 10) {
  1110.                ...
  1111.           } continue {
  1112.                $i++;
  1113.           }
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.                                                                17
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126. PERL(1)                  USER COMMANDS                    PERL(1)
  1127.  
  1128.  
  1129.  
  1130.      The foreach loop iterates over a normal array value and sets
  1131.      the  variable  VAR  to be each element of the array in turn.
  1132.      The variable is implicitly local to the  loop,  and  regains
  1133.      its  former value upon exiting the loop.  The "foreach" key-
  1134.      word is actually identical to the "for" keyword, so you  can
  1135.      use  "foreach" for readability or "for" for brevity.  If VAR
  1136.      is omitted, $_ is set to each value.  If ARRAY is an  actual
  1137.      array  (as  opposed  to  an  expression  returning  an array
  1138.      value), you can modify each element of the array by  modify-
  1139.      ing VAR inside the loop.  Examples:
  1140.  
  1141.           for (@ary) { s/foo/bar/; }
  1142.  
  1143.           foreach $elem (@elements) {
  1144.                $elem *= 2;
  1145.           }
  1146.  
  1147.           for ((10,9,8,7,6,5,4,3,2,1,'BOOM')) {
  1148.                print $_, "\n"; sleep(1);
  1149.           }
  1150.  
  1151.           for (1..15) { print "Merry Christmas\n"; }
  1152.  
  1153.           foreach $item (split(/:[\\\n:]*/, $ENV{'TERMCAP'})) {
  1154.                print "Item: $item\n";
  1155.           }
  1156.  
  1157.  
  1158.      The BLOCK by itself (labeled or not) is equivalent to a loop
  1159.      that  executes  once.  Thus you can use any of the loop con-
  1160.      trol statements in it to leave or restart  the  block.   The
  1161.      _c_o_n_t_i_n_u_e  block is optional.  This construct is particularly
  1162.      nice for doing case structures.
  1163.  
  1164.           foo: {
  1165.                if (/^abc/) { $abc = 1; last foo; }
  1166.                if (/^def/) { $def = 1; last foo; }
  1167.                if (/^xyz/) { $xyz = 1; last foo; }
  1168.                $nothing = 1;
  1169.           }
  1170.  
  1171.      There is no official switch statement in perl, because there
  1172.      are  already several ways to write the equivalent.  In addi-
  1173.      tion to the above, you could write
  1174.  
  1175.           foo: {
  1176.                $abc = 1, last foo  if /^abc/;
  1177.                $def = 1, last foo  if /^def/;
  1178.                $xyz = 1, last foo  if /^xyz/;
  1179.                $nothing = 1;
  1180.           }
  1181.  
  1182.  
  1183.  
  1184.  
  1185.                                                                18
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192. PERL(1)                  USER COMMANDS                    PERL(1)
  1193.  
  1194.  
  1195.  
  1196.      or
  1197.  
  1198.           foo: {
  1199.                /^abc/ && do { $abc = 1; last foo; };
  1200.                /^def/ && do { $def = 1; last foo; };
  1201.                /^xyz/ && do { $xyz = 1; last foo; };
  1202.                $nothing = 1;
  1203.           }
  1204.  
  1205.      or
  1206.  
  1207.           foo: {
  1208.                /^abc/ && ($abc = 1, last foo);
  1209.                /^def/ && ($def = 1, last foo);
  1210.                /^xyz/ && ($xyz = 1, last foo);
  1211.                $nothing = 1;
  1212.           }
  1213.  
  1214.      or even
  1215.  
  1216.           if (/^abc/)
  1217.                { $abc = 1; }
  1218.           elsif (/^def/)
  1219.                { $def = 1; }
  1220.           elsif (/^xyz/)
  1221.                { $xyz = 1; }
  1222.           else
  1223.                {$nothing = 1;}
  1224.  
  1225.      As it happens, these  are  all  optimized  internally  to  a
  1226.      switch  structure,  so  perl  jumps  directly to the desired
  1227.      statement, and you needn't worry about perl executing a  lot
  1228.      of  unnecessary  statements  when  you  have  a string of 50
  1229.      elsifs, as long as you are testing the  same  simple  scalar
  1230.      variable  using  ==,  eq, or pattern matching as above.  (If
  1231.      you're curious as to whether the optimizer has done this for
  1232.      a  particular  case statement, you can use the -D1024 switch
  1233.      to list the syntax tree before execution.)
  1234.  
  1235.      SSSSiiiimmmmpppplllleeee ssssttttaaaatttteeeemmmmeeeennnnttttssss
  1236.  
  1237.      The only kind of simple statement is an expression evaluated
  1238.      for  its  side effects.  Every expression (simple statement)
  1239.      must be terminated with a semicolon.  Note that this is like
  1240.      C, but unlike Pascal (and _a_w_k).
  1241.  
  1242.      Any simple statement may optionally be followed by a  single
  1243.      modifier, just before the terminating semicolon.  The possi-
  1244.      ble modifiers are:
  1245.  
  1246.  
  1247.  
  1248.  
  1249.  
  1250.  
  1251.                                                                19
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258. PERL(1)                  USER COMMANDS                    PERL(1)
  1259.  
  1260.  
  1261.  
  1262.           if EXPR
  1263.           unless EXPR
  1264.           while EXPR
  1265.           until EXPR
  1266.  
  1267.      The _i_f and _u_n_l_e_s_s modifiers  have  the  expected  semantics.
  1268.      The  _w_h_i_l_e and _u_n_t_i_l modifiers also have the expected seman-
  1269.      tics (conditional evaluated first), except when applied to a
  1270.      do-BLOCK or a do-SUBROUTINE command, in which case the block
  1271.      executes once before the conditional is evaluated.  This  is
  1272.      so that you can write loops like:
  1273.  
  1274.           do {
  1275.                $_ = <STDIN>;
  1276.                ...
  1277.           } until $_ eq ".\n";
  1278.  
  1279.      (See the _d_o operator below.  Note also that the loop control
  1280.      commands  described  later  will NOT work in this construct,
  1281.      since modifiers don't take loop labels.  Sorry.)
  1282.  
  1283.      EEEExxxxpppprrrreeeessssssssiiiioooonnnnssss
  1284.  
  1285.      Since _p_e_r_l expressions work almost exactly  like  C  expres-
  1286.      sions, only the differences will be mentioned here.
  1287.  
  1288.      Here's what _p_e_r_l has that C doesn't:
  1289.  
  1290.      **      The exponentiation operator.
  1291.  
  1292.      **=     The exponentiation assignment operator.
  1293.  
  1294.      ()      The null list, used to initialize an array to null.
  1295.  
  1296.      .       Concatenation of two strings.
  1297.  
  1298.      .=      The concatenation assignment operator.
  1299.  
  1300.      eq      String equality (== is  numeric  equality).   For  a
  1301.              mnemonic  just  think  of "eq" as a string.  (If you
  1302.              are used to the _a_w_k behavior of using == for  either
  1303.              string or numeric equality based on the current form
  1304.              of the comparands, beware!   You  must  be  explicit
  1305.              here.)
  1306.  
  1307.      ne      String inequality (!= is numeric inequality).
  1308.  
  1309.      lt      String less than.
  1310.  
  1311.      gt      String greater than.
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.                                                                20
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324. PERL(1)                  USER COMMANDS                    PERL(1)
  1325.  
  1326.  
  1327.  
  1328.      le      String less than or equal.
  1329.  
  1330.      ge      String greater than or equal.
  1331.  
  1332.      cmp     String comparison, returning -1, 0, or 1.
  1333.  
  1334.      <=>     Numeric comparison, returning -1, 0, or 1.
  1335.  
  1336.      =~      Certain operations search or modify the string  "$_"
  1337.              by default.  This operator makes that kind of opera-
  1338.              tion work on some other string.  The right  argument
  1339.              is  a  search pattern, substitution, or translation.
  1340.              The  left  argument  is  what  is  supposed  to   be
  1341.              searched,  substituted, or translated instead of the
  1342.              default "$_".  The return value indicates  the  suc-
  1343.              cess of the operation.  (If the right argument is an
  1344.              expression other than a  search  pattern,  substitu-
  1345.              tion,  or translation, it is interpreted as a search
  1346.              pattern at run time.  This is less efficient than an
  1347.              explicit  search, since the pattern must be compiled
  1348.              every time the expression is evaluated.)   The  pre-
  1349.              cedence  of  this operator is lower than unary minus
  1350.              and autoincrement/decrement, but higher than  every-
  1351.              thing else.
  1352.  
  1353.      !~      Just like =~ except the return value is negated.
  1354.  
  1355.      x       The repetition operator.  Returns a string  consist-
  1356.              ing of the left operand repeated the number of times
  1357.              specified by the right operand.  In  an  array  con-
  1358.              text,  if  the  left operand is a list in parens, it
  1359.              repeats the list.
  1360.  
  1361.                   print '-' x 80;          # print row of dashes
  1362.                   print '-' x80;      # illegal, x80 is identifier
  1363.  
  1364.                   print "\t" x ($tab/8), ' ' x ($tab%8);  # tab over
  1365.  
  1366.                   @ones = (1) x 80;        # an array of 80 1's
  1367.                   @ones = (5) x @ones;          # set all elements to 5
  1368.  
  1369.  
  1370.      x=      The repetition assignment operator.  Only  works  on
  1371.              scalars.
  1372.  
  1373.      ..      The range operator, which is  really  two  different
  1374.              operators  depending  on  the  context.  In an array
  1375.              context, returns an array  of  values  counting  (by
  1376.              ones)  from the left value to the right value.  This
  1377.              is useful for writing "for (1..10)"  loops  and  for
  1378.              doing slice operations on arrays.
  1379.  
  1380.  
  1381.  
  1382.  
  1383.                                                                21
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390. PERL(1)                  USER COMMANDS                    PERL(1)
  1391.  
  1392.  
  1393.  
  1394.              In a scalar context, ..  returns  a  boolean  value.
  1395.              The  operator  is bistable, like a flip-flop..  Each
  1396.              .. operator maintains its own boolean state.  It  is
  1397.              false  as  long  as its left operand is false.  Once
  1398.              the left operand is true, the range  operator  stays
  1399.              true  until  the  right operand is true, AFTER which
  1400.              the range operator becomes false again.  (It doesn't
  1401.              become  false  till the next time the range operator
  1402.              is evaluated.  It  can  become  false  on  the  same
  1403.              evaluation it became true, but it still returns true
  1404.              once.)  The right operand is not evaluated while the
  1405.              operator  is  in  the  "false"  state,  and the left
  1406.              operand is not evaluated while the  operator  is  in
  1407.              the  "true"  state.   The scalar .. operator is pri-
  1408.              marily intended for doing line number  ranges  after
  1409.              the fashion of _s_e_d or _a_w_k.  The precedence is a lit-
  1410.              tle lower than || and &&.   The  value  returned  is
  1411.              either  the  null  string  for  false, or a sequence
  1412.              number (beginning with 1) for  true.   The  sequence
  1413.              number  is  reset  for  each range encountered.  The
  1414.              final sequence number in a range has the string 'E0'
  1415.              appended  to  it,  which  doesn't affect its numeric
  1416.              value, but gives you something to search for if  you
  1417.              want  to  exclude the endpoint.  You can exclude the
  1418.              beginning point by waiting for the  sequence  number
  1419.              to  be  greater than 1.  If either operand of scalar
  1420.              .. is static, that operand is implicitly compared to
  1421.              the $. variable, the current line number.  Examples:
  1422.  
  1423.              As a scalar operator:
  1424.                  if (101 .. 200) { print; }     # print 2nd hundred lines
  1425.  
  1426.                  next line if (1 .. /^$/); # skip header lines
  1427.  
  1428.                  s/^/> / if (/^$/ .. eof());    # quote body
  1429.  
  1430.              As an array operator:
  1431.                  for (101 .. 200) { print; }    # print $_ 100 times
  1432.  
  1433.                  @foo = @foo[$[ .. $#foo]; # an expensive no-op
  1434.                  @foo = @foo[$#foo-4 .. $#foo]; # slice last 5 items
  1435.  
  1436.  
  1437.      -x      A file test.  This unary operator  takes  one  argu-
  1438.              ment,  either  a filename or a filehandle, and tests
  1439.              the associated file to  see  if  something  is  true
  1440.              about  it.   If  the  argument is omitted, tests $_,
  1441.              except for -t, which tests _S_T_D_I_N.  It returns 1  for
  1442.              true and '' for false, or the undefined value if the
  1443.              file doesn't exist.  Precedence is higher than logi-
  1444.              cal  and relational operators, but lower than arith-
  1445.              metic operators.  The operator may be any of:
  1446.  
  1447.  
  1448.  
  1449.                                                                22
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456. PERL(1)                  USER COMMANDS                    PERL(1)
  1457.  
  1458.  
  1459.  
  1460.                   -r   File is readable by effective uid.
  1461.                   -w   File is writable by effective uid.
  1462.                   -x   File is executable by effective uid.
  1463.                   -o   File is owned by effective uid.
  1464.                   -R   File is readable by real uid.
  1465.                   -W   File is writable by real uid.
  1466.                   -X   File is executable by real uid.
  1467.                   -O   File is owned by real uid.
  1468.                   -e   File exists.
  1469.                   -z   File has zero size.
  1470.                   -s   File has non-zero size (returns size).
  1471.                   -f   File is a plain file.
  1472.                   -d   File is a directory.
  1473.                   -l   File is a symbolic link.
  1474.                   -p   File is a named pipe (FIFO).
  1475.                   -S   File is a socket.
  1476.                   -b   File is a block special file.
  1477.                   -c   File is a character special file.
  1478.                   -u   File has setuid bit set.
  1479.                   -g   File has setgid bit set.
  1480.                   -k   File has sticky bit set.
  1481.                   -t   Filehandle is opened to a tty.
  1482.                   -T   File is a text file.
  1483.                   -B   File is a binary file (opposite of -T).
  1484.                   -M   Age of file in days when script started.
  1485.                   -A   Same for access time.
  1486.                   -C   Same for inode change time.
  1487.  
  1488.              The interpretation of the file permission  operators
  1489.              -r,  -R,  -w,  -W,  -x and -X is based solely on the
  1490.              mode of the file and the uids and gids of the  user.
  1491.              There  may be other reasons you can't actually read,
  1492.              write or execute the file.  (Note that  serveral  of
  1493.              the above don't mean much under MS-DOS.)
  1494.  
  1495.              Example:
  1496.  
  1497.                   while (<>) {
  1498.                        chop;
  1499.                        next unless -f $_;  # ignore specials
  1500.                        ...
  1501.                   }
  1502.  
  1503.              Note that -s/a/b/ does not do  a  negated  substitu-
  1504.              tion.   Saying  -exp($foo)  still works as expected,
  1505.              however--only single letters following a  minus  are
  1506.              interpreted as file tests.
  1507.  
  1508.              The -T and -B switches work as follows.   The  first
  1509.              block  or so of the file is examined for odd charac-
  1510.              ters such as strange control  codes  or  metacharac-
  1511.              ters.   If too many odd characters (>10%) are found,
  1512.  
  1513.  
  1514.  
  1515.                                                                23
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522. PERL(1)                  USER COMMANDS                    PERL(1)
  1523.  
  1524.  
  1525.  
  1526.              it's a -B file, otherwise it's a -T file.  Also, any
  1527.              file  containing  null  in  the  first block is con-
  1528.              sidered a binary file.  If -T or -B  is  used  on  a
  1529.              filehandle,  the  current  stdio  buffer is examined
  1530.              rather than the first block.  Both -T and -B  return
  1531.              TRUE on a null file, or a file at EOF when testing a
  1532.              filehandle.
  1533.  
  1534.      If any of the file tests (or either stat operator) are given
  1535.      the  special  filehandle consisting of a solitary underline,
  1536.      then the stat structure of the previous file test  (or  stat
  1537.      operator) is used, saving a system call.  (This doesn't work
  1538.      with -t, and you need to remember that  lstat  and  -l  will
  1539.      leave  values  in  the stat structure for the symbolic link,
  1540.      not the real file.)  Example:
  1541.  
  1542.           print "Can do.\n" if -r $a || -w _ || -x _;
  1543.  
  1544.           stat($filename);
  1545.           print "Readable\n" if -r _;
  1546.           print "Writable\n" if -w _;
  1547.           print "Executable\n" if -x _;
  1548.           print "Setuid\n" if -u _;
  1549.           print "Setgid\n" if -g _;
  1550.           print "Sticky\n" if -k _;
  1551.           print "Text\n" if -T _;
  1552.           print "Binary\n" if -B _;
  1553.  
  1554.  
  1555.      Here is what C has that _p_e_r_l doesn't:
  1556.  
  1557.      unary &     Address-of operator.
  1558.  
  1559.      unary *     Dereference-address operator.
  1560.  
  1561.      (TYPE)      Type casting operator.
  1562.  
  1563.      Like C, _p_e_r_l does a certain amount of expression  evaluation
  1564.      at  compile  time,  whenever  it  determines that all of the
  1565.      arguments to  an  operator  are  static  and  have  no  side
  1566.      effects.   In  particular,  string  concatenation happens at
  1567.      compile time between literals that don't do variable substi-
  1568.      tution.   Backslash  interpretation  also happens at compile
  1569.      time.  You can say
  1570.  
  1571.           'Now is the time for all' . "\n" .
  1572.           'good men to come to.'
  1573.  
  1574.      and this all reduces to one string internally.
  1575.  
  1576.      The autoincrement operator has a little extra built-in magic
  1577.      to it.  If you increment a variable that is numeric, or that
  1578.  
  1579.  
  1580.  
  1581.                                                                24
  1582.  
  1583.  
  1584.  
  1585.  
  1586.  
  1587.  
  1588. PERL(1)                  USER COMMANDS                    PERL(1)
  1589.  
  1590.  
  1591.  
  1592.      has ever been used in a numeric context, you  get  a  normal
  1593.      increment.   If, however, the variable has only been used in
  1594.      string contexts since it was set, and has a  value  that  is
  1595.      not  null  and  matches the pattern /^[a-zA-Z]*[0-9]*$/, the
  1596.      increment is done as a  string,  preserving  each  character
  1597.      within its range, with carry:
  1598.  
  1599.           print ++($foo = '99');   # prints '100'
  1600.           print ++($foo = 'a0');   # prints 'a1'
  1601.           print ++($foo = 'Az');   # prints 'Ba'
  1602.           print ++($foo = 'zz');   # prints 'aaa'
  1603.  
  1604.      The autodecrement is not magical.
  1605.  
  1606.      The range operator (in an array context) makes  use  of  the
  1607.      magical  autoincrement  algorithm if the minimum and maximum
  1608.      are strings.  You can say
  1609.  
  1610.           @alphabet = ('A' .. 'Z');
  1611.  
  1612.      to get all the letters of the alphabet, or
  1613.  
  1614.           $hexdigit = (0 .. 9, 'a' .. 'f')[$num & 15];
  1615.  
  1616.      to get a hexadecimal digit, or
  1617.  
  1618.           @z2 = ('01' .. '31');  print @z2[$mday];
  1619.  
  1620.      to get dates with leading zeros.  (If the final value speci-
  1621.      fied is not in the sequence that the magical increment would
  1622.      produce, the sequence goes until the  next  value  would  be
  1623.      longer than the final value specified.)
  1624.  
  1625.      The || and && operators differ from C's in that, rather than
  1626.      returning  0  or  1,  they  return the last value evaluated.
  1627.      Thus, a portable way to find out the  home  directory  might
  1628.      be:
  1629.  
  1630.           $home = $ENV{'HOME'} || $ENV{'LOGDIR'} ||
  1631.               (getpwuid($<))[7] || die "You're homeless!\n";
  1632.  
  1633.  
  1634.      Along with the literals and variables mentioned earlier, the
  1635.      operations in the following section can serve as terms in an
  1636.      expression.  Some of these operations  take  a  LIST  as  an
  1637.      argument.   Such  a  list  can consist of any combination of
  1638.      scalar arguments or array values; the array values  will  be
  1639.      included  in  the  list  as  if each individual element were
  1640.      interpolated at that point in the  list,  forming  a  longer
  1641.      single-dimensional array value.  Elements of the LIST should
  1642.      be separated by commas.  If an operation is listed both with
  1643.      and  without  parentheses around its arguments, it means you
  1644.  
  1645.  
  1646.  
  1647.                                                                25
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654. PERL(1)                  USER COMMANDS                    PERL(1)
  1655.  
  1656.  
  1657.  
  1658.      can either use it as a unary operator or as a function call.
  1659.      To  use  it  as  a function call, the next token on the same
  1660.      line must be a left parenthesis.  (There may be  intervening
  1661.      white  space.)  Such a function then has highest precedence,
  1662.      as you would expect from a function.   If  any  token  other
  1663.      than  a  left parenthesis follows, then it is a unary opera-
  1664.      tor, with a precedence depending only on  whether  it  is  a
  1665.      LIST  operator  or  not.   LIST  operators  have lowest pre-
  1666.      cedence.   All  other  unary  operators  have  a  precedence
  1667.      greater  than  relational operators but less than arithmetic
  1668.      operators.  See the section on Precedence.
  1669.  
  1670.      /PATTERN/
  1671.              See m/PATTERN/.
  1672.  
  1673.      ?PATTERN?
  1674.              This is just like the /pattern/ search, except  that
  1675.              it  matches  only  once  between  calls to the _r_e_s_e_t
  1676.              operator.  This is a useful  optimization  when  you
  1677.              only  want  to see the first occurrence of something
  1678.              in each file of a set of files, for instance.   Only
  1679.              ?? patterns local to the current package are reset.
  1680.  
  1681.      accept(NEWSOCKET,GENERICSOCKET)
  1682.              Does the same thing  that  the  accept  system  call
  1683.              does.  Sockets are not yet supported on MS-DOS.
  1684.  
  1685.      alarm(SECONDS)
  1686.  
  1687.      alarm SECONDS
  1688.              Not supported on MS-DOS.
  1689.  
  1690.      atan2(Y,X)
  1691.              Returns the arctangent of Y/X in the  range  -PI  to
  1692.              PI.
  1693.  
  1694.      bind(SOCKET,NAME)
  1695.              Does the same thing that the bind system call  does.
  1696.              Returns true if it succeeded, false otherwise.  NAME
  1697.              should be a packed address of the  proper  type  for
  1698.              the  socket.  See example in section on Interprocess
  1699.              Communication.
  1700.  
  1701.      binmode(FILEHANDLE)
  1702.  
  1703.      binmode FILEHANDLE
  1704.              Arranges for the file to be read in "binary" mode in
  1705.              operating  systems  that  distinguish between binary
  1706.              and text files.  Files that are not read  in  binary
  1707.              mode  have CR LF sequences translated to LF on input
  1708.              and LF translated to CR LF on output.   Binmode  has
  1709.              no   effect   under   Unix.   If  FILEHANDLE  is  an
  1710.  
  1711.  
  1712.  
  1713.                                                                26
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720. PERL(1)                  USER COMMANDS                    PERL(1)
  1721.  
  1722.  
  1723.  
  1724.              expression, the value is taken as the  name  of  the
  1725.              filehandle.
  1726.  
  1727.      caller(EXPR)
  1728.  
  1729.      caller  Returns the context of the current subroutine call:
  1730.  
  1731.                   ($package,$filename,$line) = caller;
  1732.  
  1733.              With EXPR, returns some extra information  that  the
  1734.              debugger  uses to print a stack trace.  The value of
  1735.              EXPR indicates how  many  call  frames  to  go  back
  1736.              before the current one.
  1737.  
  1738.      chdir(EXPR)
  1739.  
  1740.      chdir EXPR
  1741.              Changes the working directory to EXPR, if  possible.
  1742.              If  EXPR  is  omitted,  changes  to  home directory.
  1743.              Returns 1 upon success, 0  otherwise.   See  example
  1744.              under _d_i_e.
  1745.  
  1746.              On MS-DOS, the path  and/or  the  directory  can  be
  1747.              specified.
  1748.  
  1749.              chdir "c:/junk/subdir";
  1750.              chdir "e:";
  1751.              chdir "abc/xyz";
  1752.  
  1753.              The first of these changes  the  default  drive  and
  1754.              directory.  The second changes to the default direc-
  1755.              tory on drive E:.  The third changes  the  directory
  1756.              on  the  current drive.  As with all filenames, for-
  1757.              ward slashes are recommended inside _p_e_r_l.  (See  the
  1758.              section on MS-DOS.)
  1759.  
  1760.      chmod(LIST)
  1761.  
  1762.      chmod LIST
  1763.              Changes the permissions of a  list  of  files.   The
  1764.              first  element  of  the  list  must be the numerical
  1765.              mode.  Returns  the  number  of  files  successfully
  1766.              changed.
  1767.  
  1768.                   $cnt = chmod 0755, 'foo', 'bar';
  1769.                   chmod 0755, @executables;
  1770.  
  1771.  
  1772.  
  1773.  
  1774.  
  1775.  
  1776.  
  1777.  
  1778.  
  1779.                                                                27
  1780.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785.  
  1786. PERL(1)                  USER COMMANDS                    PERL(1)
  1787.  
  1788.  
  1789.  
  1790.      chop(LIST)
  1791.  
  1792.      chop(VARIABLE)
  1793.  
  1794.      chop VARIABLE
  1795.  
  1796.      chop    Chops off the last character of a string and returns
  1797.              the  character  chopped.   It's  used  primarily  to
  1798.              remove the newline from the end of an input  record,
  1799.              but  is  much  more efficient than s/\n// because it
  1800.              neither scans nor copies the string.  If VARIABLE is
  1801.              omitted, chops $_.  Example:
  1802.  
  1803.                   while (<>) {
  1804.                        chop;     # avoid \n on last field
  1805.                        @array = split(/:/);
  1806.                        ...
  1807.                   }
  1808.  
  1809.              You can actually chop  anything  that's  an  lvalue,
  1810.              including an assignment:
  1811.  
  1812.                   chop($cwd = `pwd`);
  1813.                   chop($answer = <STDIN>);
  1814.  
  1815.              If you chop a list, each element is  chopped.   Only
  1816.              the value of the last chop is returned.
  1817.  
  1818.      chown(LIST)
  1819.  
  1820.      chown LIST
  1821.              Changes the owner (and group) of a  list  of  files.
  1822.              The  first  two  elements  of  the  list must be the
  1823.              NUMERICAL uid and gid, in that order.   Returns  the
  1824.              number of files successfully changed.
  1825.  
  1826.                   $cnt = chown $uid, $gid, 'foo', 'bar';
  1827.                   chown $uid, $gid, @filenames;
  1828.  
  1829.  
  1830.  
  1831.  
  1832.  
  1833.  
  1834.  
  1835.  
  1836.  
  1837.  
  1838.  
  1839.  
  1840.  
  1841.  
  1842.  
  1843.  
  1844.  
  1845.                                                                28
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852. PERL(1)                  USER COMMANDS                    PERL(1)
  1853.  
  1854.  
  1855.  
  1856.              Here's an example that looks up non-numeric uids  in
  1857.              the passwd file:
  1858.  
  1859.                   print "User: ";
  1860.                   $user = <STDIN>;
  1861.                   chop($user);
  1862.                   print "Files: "
  1863.                   $pattern = <STDIN>;
  1864.                   chop($pattern);
  1865.                   open(pass, '/etc/passwd')
  1866.                        || die "Can't open passwd: $!\n";
  1867.                   while (<pass>) {
  1868.                        ($login,$pass,$uid,$gid) = split(/:/);
  1869.                        $uid{$login} = $uid;
  1870.                        $gid{$login} = $gid;
  1871.                   }
  1872.                   @ary = <${pattern}>;     # get filenames
  1873.                   if ($uid{$user} eq '') {
  1874.                        die "$user not in passwd file";
  1875.                   }
  1876.                   else {
  1877.                        chown $uid{$user}, $gid{$user}, @ary;
  1878.                   }
  1879.  
  1880.  
  1881.      chroot(FILENAME)
  1882.  
  1883.      chroot FILENAME
  1884.              Not supported on MS-DOS.
  1885.  
  1886.      close(FILEHANDLE)
  1887.  
  1888.      close FILEHANDLE
  1889.              Closes the file or pipe  associated  with  the  file
  1890.              handle.   You  don't have to close FILEHANDLE if you
  1891.              are immediately going to  do  another  open  on  it,
  1892.              since open will close it for you.  (See _o_p_e_n.)  How-
  1893.              ever, an explicit close on an input file resets  the
  1894.              line  counter ($.), while the implicit close done by
  1895.              _o_p_e_n does not.  Also, closing a pipe will  wait  for
  1896.              the  process  executing  on the pipe to complete, in
  1897.              case you want to look at  the  output  of  the  pipe
  1898.              afterwards.  Closing a pipe explicitly also puts the
  1899.              status value of the command into $?.  Example:
  1900.  
  1901.                   open(OUTPUT, '|sort >foo');   # pipe to sort
  1902.                   ...  # print stuff to output
  1903.                   close OUTPUT;       # wait for sort to finish
  1904.                   open(INPUT, 'foo'); # get sort's results
  1905.  
  1906.              FILEHANDLE may be an expression  whose  value  gives
  1907.              the real filehandle name.
  1908.  
  1909.  
  1910.  
  1911.                                                                29
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918. PERL(1)                  USER COMMANDS                    PERL(1)
  1919.  
  1920.  
  1921.  
  1922.      closedir(DIRHANDLE)
  1923.  
  1924.      closedir DIRHANDLE
  1925.              Closes a directory opened by opendir().
  1926.  
  1927.      connect(SOCKET,NAME)
  1928.              Does the same thing that  the  connect  system  call
  1929.              does.  Sockets are not yet supported on MS-DOS.
  1930.  
  1931.      cos(EXPR)
  1932.  
  1933.      cos EXPR
  1934.              Returns the cosine of EXPR (expressed  in  radians).
  1935.              If EXPR is omitted takes cosine of $_.
  1936.  
  1937.      crypt(PLAINTEXT,SALT)
  1938.              Encrypts a string exactly like the crypt()  function
  1939.              in  the C library.  Sockets are not yet supported on
  1940.              MS-DOS.
  1941.  
  1942.      dbmclose(ASSOC_ARRAY)
  1943.  
  1944.      dbmclose ASSOC_ARRAY
  1945.              Breaks the binding between a dbm file and an associ-
  1946.              ative  array.   The values remaining in the associa-
  1947.              tive array are meaningless unless you happen to want
  1948.              to  know  what  was  in  the cache for the dbm file.
  1949.              This function is only useful if you have ndbm.
  1950.  
  1951.      dbmopen(ASSOC,DBNAME,MODE)
  1952.              This binds a dbm or  ndbm  file  to  an  associative
  1953.              array.   ASSOC is the name of the associative array.
  1954.              (Unlike normal open, the first  argument  is  NOT  a
  1955.              filehandle,  even though it looks like one).  DBNAME
  1956.              is the name of the database  (without  the  .dir  or
  1957.              .pag extension).  If the database does not exist, it
  1958.              is created with protection  specified  by  MODE  (as
  1959.              modified  by  the  umask).  If your system only sup-
  1960.              ports the older dbm functions, you may only have one
  1961.              dbmopen in your program.  If your system has neither
  1962.              dbm nor  ndbm,  calling  dbmopen  produces  a  fatal
  1963.              error.  (MS-DOS users: the MS-DOS port uses Gnu-dbm,
  1964.              which supports multiple files.)
  1965.  
  1966.              Values assigned to the associative  array  prior  to
  1967.              the  dbmopen  are  lost.  A certain number of values
  1968.              from the dbm file are cached in memory.  By  default
  1969.              this number is 64, but you can increase it by preal-
  1970.              locating that number of garbage entries in the asso-
  1971.              ciative array before the dbmopen.  You can flush the
  1972.              cache if necessary with the reset command.
  1973.  
  1974.  
  1975.  
  1976.  
  1977.                                                                30
  1978.  
  1979.  
  1980.  
  1981.  
  1982.  
  1983.  
  1984. PERL(1)                  USER COMMANDS                    PERL(1)
  1985.  
  1986.  
  1987.  
  1988.              If you don't have write access to the dbm file,  you
  1989.              can  only  read associative array variables, not set
  1990.              them.  If you want to test whether  you  can  write,
  1991.              either  use  file tests or try setting a dummy array
  1992.              entry inside an eval, which will trap the error.
  1993.  
  1994.              Note that functions such as keys() and values()  may
  1995.              return  huge  array  values  when  used on large dbm
  1996.              files.  You may prefer to use the each() function to
  1997.              iterate over large dbm files.  Example:
  1998.  
  1999.                   # print out history file offsets
  2000.                   dbmopen(HIST,'/usr/lib/news/history',0666);
  2001.                   while (($key,$val) = each %HIST) {
  2002.                        print $key, ' = ', unpack('L',$val), "\n";
  2003.                   }
  2004.                   dbmclose(HIST);
  2005.  
  2006.  
  2007.      defined(EXPR)
  2008.  
  2009.      defined EXPR
  2010.              Returns a boolean value saying  whether  the  lvalue
  2011.              EXPR  has  a  real  value  or  not.  Many operations
  2012.              return the undefined value under exceptional  condi-
  2013.              tions,  such as end of file, uninitialized variable,
  2014.              system error and such.  This function allows you  to
  2015.              distinguish  between  an undefined null string and a
  2016.              defined  null  string  with  operations  that  might
  2017.              return a real null string, in particular referencing
  2018.              elements of an array.  You may also check to see  if
  2019.              arrays  or  subroutines  exist.   Use  on predefined
  2020.              variables is not  guaranteed  to  produce  intuitive
  2021.              results.  Examples:
  2022.  
  2023.                   print if defined $switch{'D'};
  2024.                   print "$val\n" while defined($val = pop(@ary));
  2025.                   die "Can't readlink $sym: $!"
  2026.                        unless defined($value = readlink $sym);
  2027.                   eval '@foo = ()' if defined(@foo);
  2028.                   die "No XYZ package defined" unless defined %_XYZ;
  2029.                   sub foo { defined &bar ? &bar(@_) : die "No bar"; }
  2030.  
  2031.              See also undef.
  2032.  
  2033.      delete $ASSOC{KEY}
  2034.              Deletes the specified value from the specified asso-
  2035.              ciative  array.   Returns  the deleted value, or the
  2036.              undefined value if nothing  was  deleted.   Deleting
  2037.              from $ENV{} modifies the environment.  Deleting from
  2038.              an array bound to a dbm file deletes the entry  from
  2039.              the dbm file.
  2040.  
  2041.  
  2042.  
  2043.                                                                31
  2044.  
  2045.  
  2046.  
  2047.  
  2048.  
  2049.  
  2050. PERL(1)                  USER COMMANDS                    PERL(1)
  2051.  
  2052.  
  2053.  
  2054.              The following deletes all the values of an  associa-
  2055.              tive array:
  2056.  
  2057.                   foreach $key (keys %ARRAY) {
  2058.                        delete $ARRAY{$key};
  2059.                   }
  2060.  
  2061.              (But it would be faster to use  the  _r_e_s_e_t  command.
  2062.              Saying undef %ARRAY is faster yet.)
  2063.  
  2064.      die(LIST)
  2065.  
  2066.      die LIST
  2067.              Outside of an eval, prints  the  value  of  LIST  to
  2068.              _S_T_D_E_R_R  and  exits  with  the  current  value  of $!
  2069.              (errno).  If $! is 0, exits with the value of ($? >>
  2070.              8)  (`command`  status).   If  ($? >> 8) is 0, exits
  2071.              with 255.  Inside an  eval,  the  error  message  is
  2072.              stuffed  into $@ and the eval is terminated with the
  2073.              undefined value.
  2074.  
  2075.              Equivalent examples:
  2076.  
  2077.                   die "Can't cd to spool: $!\n"
  2078.                        unless chdir '/usr/spool/news';
  2079.  
  2080.                   chdir '/usr/spool/news' || die "Can't cd to spool: $!\n"
  2081.  
  2082.  
  2083.              If the value of EXPR does not end in a newline,  the
  2084.              current script line number and input line number (if
  2085.              any) are also printed, and a  newline  is  supplied.
  2086.              Hint:  sometimes  appending ", stopped" to your mes-
  2087.              sage will cause it to make  better  sense  when  the
  2088.              string  "at  foo line 123" is appended.  Suppose you
  2089.              are running script "canasta".
  2090.  
  2091.                   die "/etc/games is no good";
  2092.                   die "/etc/games is no good, stopped";
  2093.  
  2094.              produce, respectively
  2095.  
  2096.                   /etc/games is no good at canasta line 123.
  2097.                   /etc/games is no good, stopped at canasta line 123.
  2098.  
  2099.              See also _e_x_i_t.
  2100.  
  2101.      do BLOCK
  2102.              Returns  the  value  of  the  last  command  in  the
  2103.              sequence of commands indicated by BLOCK.  When modi-
  2104.              fied by a loop modifier,  executes  the  BLOCK  once
  2105.              before   testing  the  loop  condition.   (On  other
  2106.  
  2107.  
  2108.  
  2109.                                                                32
  2110.  
  2111.  
  2112.  
  2113.  
  2114.  
  2115.  
  2116. PERL(1)                  USER COMMANDS                    PERL(1)
  2117.  
  2118.  
  2119.  
  2120.              statements the loop modifiers test  the  conditional
  2121.              first.)
  2122.  
  2123.      do SUBROUTINE (LIST)
  2124.              Executes a SUBROUTINE declared by a _s_u_b declaration,
  2125.              and   returns  the  value  of  the  last  expression
  2126.              evaluated in SUBROUTINE.  If there is no  subroutine
  2127.              by  that name, produces a fatal error.  (You may use
  2128.              the "defined" operator to determine if a  subroutine
  2129.              exists.)  If you pass arrays as part of LIST you may
  2130.              wish to pass the length of the  array  in  front  of
  2131.              each  array.   (See the section on subroutines later
  2132.              on.)  SUBROUTINE may be a scalar variable, in  which
  2133.              case  the  variable contains the name of the subrou-
  2134.              tine to execute.  The parentheses  are  required  to
  2135.              avoid confusion with the "do EXPR" form.
  2136.  
  2137.              As an alternate form, you may call a  subroutine  by
  2138.              prefixing  the  name with an ampersand: &foo(@args).
  2139.              If you aren't passing any arguments, you don't  have
  2140.              to use parentheses.  If you omit the parentheses, no
  2141.              @_ array is passed to the subroutine.  The & form is
  2142.              also  used to specify subroutines to the defined and
  2143.              undef operators.
  2144.  
  2145.      do EXPR Uses the value of EXPR as a  filename  and  executes
  2146.              the contents of the file as a _p_e_r_l script.  Its pri-
  2147.              mary use is to include subroutines from a _p_e_r_l  sub-
  2148.              routine library.
  2149.  
  2150.                   do 'stat.pl';
  2151.  
  2152.              is just like
  2153.  
  2154.                   eval `cat stat.pl`;
  2155.  
  2156.              except that it's more efficient, more concise, keeps
  2157.              track  of  the  current filename for error messages,
  2158.              and searches all the ----IIII libraries if the file  isn't
  2159.              in the current directory (see also the @INC array in
  2160.              Predefined Names).  It's the same, however, in  that
  2161.              it  does reparse the file every time you call it, so
  2162.              if you are going to use the file inside a  loop  you
  2163.              might  prefer to use -P and #include, at the expense
  2164.              of a little more startup time.   (The  main  problem
  2165.              with #include is that cpp doesn't grok # comments--a
  2166.              workaround is to use ";#" for standalone  comments.)
  2167.              Note that the following are NOT equivalent:
  2168.  
  2169.                   do $foo;  # eval a file
  2170.                   do $foo();     # call a subroutine
  2171.  
  2172.  
  2173.  
  2174.  
  2175.                                                                33
  2176.  
  2177.  
  2178.  
  2179.  
  2180.  
  2181.  
  2182. PERL(1)                  USER COMMANDS                    PERL(1)
  2183.  
  2184.  
  2185.  
  2186.              Note that inclusion of library  routines  is  better
  2187.              done with the "require" operator.
  2188.  
  2189.      dump LABEL
  2190.              This causes an immediate core dump.   Not  supported
  2191.              on MS-DOS.
  2192.  
  2193.              Example:
  2194.  
  2195.                   #!/usr/bin/perl
  2196.                   require 'getopt.pl';
  2197.                   require 'stat.pl';
  2198.                   %days = (
  2199.                       'Sun',1,
  2200.                       'Mon',2,
  2201.                       'Tue',3,
  2202.                       'Wed',4,
  2203.                       'Thu',5,
  2204.                       'Fri',6,
  2205.                       'Sat',7);
  2206.  
  2207.                   dump QUICKSTART if $ARGV[0] eq '-d';
  2208.  
  2209.                  QUICKSTART:
  2210.                   do Getopt('f');
  2211.  
  2212.  
  2213.      each(ASSOC_ARRAY)
  2214.  
  2215.      each ASSOC_ARRAY
  2216.              Returns a 2 element array consisting of the key  and
  2217.              value for the next value of an associative array, so
  2218.              that you can iterate over it.  Entries are  returned
  2219.              in  an  apparently  random order.  When the array is
  2220.              entirely read, a null array is returned (which  when
  2221.              assigned produces a FALSE (0) value).  The next call
  2222.              to each() after that  will  start  iterating  again.
  2223.              The  iterator  can  be reset only by reading all the
  2224.              elements from the array.  You must  not  modify  the
  2225.              array  while  iterating  over it.  There is a single
  2226.              iterator for each associative array, shared  by  all
  2227.              each(),  keys()  and  values() function calls in the
  2228.              program.  The following prints out your  environment
  2229.              like  the  printenv  program,  only  in  a different
  2230.              order:
  2231.  
  2232.                   while (($key,$value) = each %ENV) {
  2233.                        print "$key=$value\n";
  2234.                   }
  2235.  
  2236.              See also keys() and values().
  2237.  
  2238.  
  2239.  
  2240.  
  2241.                                                                34
  2242.  
  2243.  
  2244.  
  2245.  
  2246.  
  2247.  
  2248. PERL(1)                  USER COMMANDS                    PERL(1)
  2249.  
  2250.  
  2251.  
  2252.      eof(FILEHANDLE)
  2253.  
  2254.      eof()
  2255.  
  2256.      eof     Returns 1 if the next read on FILEHANDLE will return
  2257.              end of file, or if FILEHANDLE is not open.  FILEHAN-
  2258.              DLE may be an expression whose value gives the  real
  2259.              filehandle  name.  (Note that this function actually
  2260.              reads a character and then ungetc's it, so it is not
  2261.              very  useful  in  an  interactive  context.)  An eof
  2262.              without an argument returns the eof status  for  the
  2263.              last file read.  Empty parentheses () may be used to
  2264.              indicate the pseudo file formed of the files  listed
  2265.              on the command line, i.e. eof() is reasonable to use
  2266.              inside a while (<>) loop to detect the end  of  only
  2267.              the  last  file.   Use  eof(ARGV) or eof without the
  2268.              parentheses to test EACH file in a while (<>)  loop.
  2269.              Examples:
  2270.  
  2271.                   # insert dashes just before last line of last file
  2272.                   while (<>) {
  2273.                        if (eof()) {
  2274.                             print "--------------\n";
  2275.                        }
  2276.                        print;
  2277.                   }
  2278.  
  2279.                   # reset line numbering on each input file
  2280.                   while (<>) {
  2281.                        print "$.\t$_";
  2282.                        if (eof) {     # Not eof().
  2283.                             close(ARGV);
  2284.                        }
  2285.                   }
  2286.  
  2287.  
  2288.      eval(EXPR)
  2289.  
  2290.      eval EXPR
  2291.              EXPR is parsed and executed as if it were  a  little
  2292.              _p_e_r_l  program.  It is executed in the context of the
  2293.              current _p_e_r_l program, so that any variable settings,
  2294.              subroutine  or format definitions remain afterwards.
  2295.              The value returned is the value of the last  expres-
  2296.              sion  evaluated, just as with subroutines.  If there
  2297.              is a syntax error or runtime error, or a die  state-
  2298.              ment  is executed, an undefined value is returned by
  2299.              eval, and $@ is set to the error message.  If  there
  2300.              was  no error, $@ is guaranteed to be a null string.
  2301.              If EXPR is omitted, evaluates $_.  The  final  semi-
  2302.              colon, if any, may be omitted from the expression.
  2303.  
  2304.  
  2305.  
  2306.  
  2307.                                                                35
  2308.  
  2309.  
  2310.  
  2311.  
  2312.  
  2313.  
  2314. PERL(1)                  USER COMMANDS                    PERL(1)
  2315.  
  2316.  
  2317.  
  2318.              Note that, since eval traps otherwise-fatal  errors,
  2319.              it  is  useful  for determining whether a particular
  2320.              feature (such as dbmopen or symlink) is implemented.
  2321.              It  is  also  Perl's  exception  trapping mechanism,
  2322.              where the die operator is used to raise exceptions.
  2323.  
  2324.      exec(LIST)
  2325.  
  2326.      exec LIST
  2327.              If there is more than one argument in  LIST,  or  if
  2328.              LIST  is  an  array  with more than one value, calls
  2329.              execvp() with the arguments in LIST.   If  there  is
  2330.              only  one  scalar  argument, the argument is checked
  2331.              for shell metacharacters.  If  there  are  any,  the
  2332.              entire  argument is passed to "/bin/sh -c" for pars-
  2333.              ing.  If there are none, the argument is split  into
  2334.              words and passed directly to execvp(), which is more
  2335.              efficient.  Note: exec (and  system)  do  not  flush
  2336.              your  output  buffer,  so  you may need to set $| to
  2337.              avoid lost output.  Examples:
  2338.  
  2339.                   exec '/bin/echo', 'Your arguments are: ', @ARGV;
  2340.                   exec "sort $outfile | uniq";
  2341.  
  2342.  
  2343.              If you don't really want to execute the first  argu-
  2344.              ment, but want to lie to the program you are execut-
  2345.              ing about its own name, you can specify the  program
  2346.              you  actually  want  to  run  by assigning that to a
  2347.              variable and putting the name  of  the  variable  in
  2348.              front  of  the  LIST  without a comma.  (This always
  2349.              forces interpretation of the LIST as a  multi-valued
  2350.              list,  even  if there is only a single scalar in the
  2351.              list.)  Example:
  2352.  
  2353.                   $shell = '/bin/csh';
  2354.                   exec $shell '-sh';       # pretend it's a login shell
  2355.  
  2356.              The MS-DOS  implementation  of  _e_x_e_c  has  problems.
  2357.              Unlike _s_y_s_t_e_m and pipes it is not MKS toolkit compa-
  2358.              tible.  As of this writing (September 1991) it  will
  2359.              not  even allow for temporary file cleanup.  The use
  2360.              of _e_x_e_c on MS-DOS is strongly discouraged.
  2361.  
  2362.      exit(EXPR)
  2363.  
  2364.      exit EXPR
  2365.              Evaluates  EXPR  and  exits  immediately  with  that
  2366.              value.  Example:
  2367.  
  2368.                   $ans = <STDIN>;
  2369.                   exit 0 if $ans =~ /^[Xx]/;
  2370.  
  2371.  
  2372.  
  2373.                                                                36
  2374.  
  2375.  
  2376.  
  2377.  
  2378.  
  2379.  
  2380. PERL(1)                  USER COMMANDS                    PERL(1)
  2381.  
  2382.  
  2383.  
  2384.              See also _d_i_e.  If EXPR  is  omitted,  exits  with  0
  2385.              status.
  2386.  
  2387.      exp(EXPR)
  2388.  
  2389.      exp EXPR
  2390.              Returns _e to the power of EXPR.  If EXPR is omitted,
  2391.              gives exp($_).
  2392.  
  2393.      fcntl(FILEHANDLE,FUNCTION,SCALAR)
  2394.              Implements the fcntl(2) function.  M  Not  supported
  2395.              on MS-DOS.
  2396.  
  2397.      fileno(FILEHANDLE)
  2398.  
  2399.      fileno FILEHANDLE
  2400.              Returns the file descriptor for a filehandle.   Use-
  2401.              ful  for  constructing  bitmaps  for  select().   If
  2402.              FILEHANDLE is an expression, the value is  taken  as
  2403.              the name of the filehandle.
  2404.  
  2405.      flock(FILEHANDLE,OPERATION)
  2406.              Calls flock(2) on FILEHANDLE.  See manual  page  for
  2407.              flock(2)  for definition of OPERATION.  Returns true
  2408.              for success, false on failure.  Will produce a fatal
  2409.              error  if  used  on a machine that doesn't implement
  2410.              flock(2).  Here's a mailbox appender  for  BSD  sys-
  2411.              tems.
  2412.  
  2413.                   $LOCK_SH = 1;
  2414.                   $LOCK_EX = 2;
  2415.                   $LOCK_NB = 4;
  2416.                   $LOCK_UN = 8;
  2417.  
  2418.                   sub lock {
  2419.                       flock(MBOX,$LOCK_EX);
  2420.                       # and, in case someone appended
  2421.                       # while we were waiting...
  2422.                       seek(MBOX, 0, 2);
  2423.                   }
  2424.  
  2425.                   sub unlock {
  2426.                       flock(MBOX,$LOCK_UN);
  2427.                   }
  2428.  
  2429.                   open(MBOX, ">>/usr/spool/mail/$ENV{'USER'}")
  2430.                        || die "Can't open mailbox: $!";
  2431.  
  2432.                   do lock();
  2433.                   print MBOX $msg,"\n\n";
  2434.                   do unlock();
  2435.  
  2436.  
  2437.  
  2438.  
  2439.                                                                37
  2440.  
  2441.  
  2442.  
  2443.  
  2444.  
  2445.  
  2446. PERL(1)                  USER COMMANDS                    PERL(1)
  2447.  
  2448.  
  2449.  
  2450.      fork    Does a fork() call.  Not supported on MS-DOS.
  2451.  
  2452.      getc(FILEHANDLE)
  2453.  
  2454.      getc FILEHANDLE
  2455.  
  2456.      getc    Returns the  next  character  from  the  input  file
  2457.              attached to FILEHANDLE, or a null string at EOF.  If
  2458.              FILEHANDLE is omitted, reads from STDIN.
  2459.  
  2460.      getlogin
  2461.              Returns the current login from  /etc/utmp,  if  any.
  2462.              (Not supported on MS-DOS.)
  2463.  
  2464.      getpeername(SOCKET)
  2465.              Returns the packed sockaddr address of other end  of
  2466.              the  SOCKET  connection.   (Sockets are not yet sup-
  2467.              ported on MS-DOS.)
  2468.  
  2469.      getpgrp(PID)
  2470.  
  2471.      getpgrp PID
  2472.              Returns the current process group for the  specified
  2473.              PID,  0  for  the current process.  Not supported on
  2474.              MS-DOS.
  2475.  
  2476.      getppid On Unix, returns the process id of the  parent  pro-
  2477.              cess.  Not supported on MS-DOS.
  2478.  
  2479.      getpriority(WHICH,WHO)
  2480.              Returns the current priority for a process,  a  pro-
  2481.              cess group, or a user.  Not supported on MS-DOS.
  2482.  
  2483.      getpwnam(NAME)
  2484.  
  2485.      getgrnam(NAME)
  2486.  
  2487.      gethostbyname(NAME)
  2488.  
  2489.      getnetbyname(NAME)
  2490.  
  2491.      getprotobyname(NAME)
  2492.  
  2493.      getpwuid(UID)
  2494.  
  2495.      getgrgid(GID)
  2496.  
  2497.      getservbyname(NAME,PROTO)
  2498.  
  2499.      gethostbyaddr(ADDR,ADDRTYPE)
  2500.  
  2501.  
  2502.  
  2503.  
  2504.  
  2505.                                                                38
  2506.  
  2507.  
  2508.  
  2509.  
  2510.  
  2511.  
  2512. PERL(1)                  USER COMMANDS                    PERL(1)
  2513.  
  2514.  
  2515.  
  2516.      getnetbyaddr(ADDR,ADDRTYPE)
  2517.  
  2518.      getprotobynumber(NUMBER)
  2519.  
  2520.      getservbyport(PORT,PROTO)
  2521.  
  2522.      getpwent
  2523.  
  2524.      getgrent
  2525.  
  2526.      gethostent
  2527.  
  2528.      getnetent
  2529.  
  2530.      getprotoent
  2531.  
  2532.      getservent
  2533.  
  2534.      setpwent
  2535.  
  2536.      setgrent
  2537.  
  2538.      sethostent(STAYOPEN)
  2539.  
  2540.      setnetent(STAYOPEN)
  2541.  
  2542.      setprotoent(STAYOPEN)
  2543.  
  2544.      setservent(STAYOPEN)
  2545.  
  2546.      endpwent
  2547.  
  2548.      endgrent
  2549.  
  2550.      endhostent
  2551.  
  2552.      endnetent
  2553.  
  2554.      endprotoent
  2555.  
  2556.      endservent
  2557.              These routines perform the same functions  as  their
  2558.              counterparts  in  the system library.  None are sup-
  2559.              ported on MS-DOS.
  2560.  
  2561.      getsockname(SOCKET)
  2562.              Returns the packed sockaddr address of this  end  of
  2563.              the SOCKET connection.
  2564.              Sockets are not yet supported on MS-DOS.
  2565.  
  2566.      getsockopt(SOCKET,LEVEL,OPTNAME)
  2567.              Returns the socket option requested, or undefined if
  2568.  
  2569.  
  2570.  
  2571.                                                                39
  2572.  
  2573.  
  2574.  
  2575.  
  2576.  
  2577.  
  2578. PERL(1)                  USER COMMANDS                    PERL(1)
  2579.  
  2580.  
  2581.  
  2582.              there is an error.  Sockets are not yet supported on
  2583.              MS-DOS.
  2584.  
  2585.      gmtime(EXPR)
  2586.  
  2587.      gmtime EXPR
  2588.              Converts a time as returned by the time function  to
  2589.              a  9-element  array  with  the time analyzed for the
  2590.              Greenwich timezone.  Typically used as follows:
  2591.  
  2592.              ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
  2593.                                            gmtime(time);
  2594.  
  2595.              All array elements are numeric,  and  come  straight
  2596.              out  of  a struct tm.  In particular this means that
  2597.              $mon has the range 0..11 and  $wday  has  the  range
  2598.              0..6.  If EXPR is omitted, does gmtime(time).
  2599.  
  2600.      goto LABEL
  2601.              Finds the statement labeled with LABEL  and  resumes
  2602.              execution  there.   Currently  you  may  only  go to
  2603.              statements in the main body of the program that  are
  2604.              not nested inside a do {} construct.  This statement
  2605.              is not implemented very  efficiently,  and  is  here
  2606.              only  to  make the _s_e_d-to-_p_e_r_l translator easier.  I
  2607.              may change its semantics  at  any  time,  consistent
  2608.              with  support for translated _s_e_d scripts.  Use it at
  2609.              your own risk.  Better yet, don't use it at all.
  2610.  
  2611.      grep(EXPR,LIST)
  2612.              Evaluates EXPR for each  element  of  LIST  (locally
  2613.              setting  $_  to  each element) and returns the array
  2614.              value consisting of those  elements  for  which  the
  2615.              expression  evaluated to true.  In a scalar context,
  2616.              returns the number of times the expression was true.
  2617.  
  2618.                   @foo = grep(!/^#/, @bar);    # weed out comments
  2619.  
  2620.              Note that, since $_ is a reference  into  the  array
  2621.              value,  it can be used to modify the elements of the
  2622.              array.  While this is useful and supported,  it  can
  2623.              cause  bizarre  results  if  the LIST is not a named
  2624.              array.
  2625.  
  2626.      hex(EXPR)
  2627.  
  2628.      hex EXPR
  2629.              Returns the decimal value of EXPR interpreted as  an
  2630.              hex  string.  (To interpret strings that might start
  2631.              with 0 or 0x see oct().)  If EXPR is  omitted,  uses
  2632.              $_.
  2633.  
  2634.  
  2635.  
  2636.  
  2637.                                                                40
  2638.  
  2639.  
  2640.  
  2641.  
  2642.  
  2643.  
  2644. PERL(1)                  USER COMMANDS                    PERL(1)
  2645.  
  2646.  
  2647.  
  2648.      index(STR,SUBSTR,POSITION)
  2649.  
  2650.      index(STR,SUBSTR)
  2651.              Returns the position  of  the  first  occurrence  of
  2652.              SUBSTR  in STR at or after POSITION.  If POSITION is
  2653.              omitted, starts searching from the beginning of  the
  2654.              string.  The return value is based at 0, or whatever
  2655.              you've set the $[ variable to.  If the substring  is
  2656.              not  found,  returns  one  less than the base, ordi-
  2657.              narily -1.
  2658.  
  2659.      int(EXPR)
  2660.  
  2661.      int EXPR
  2662.              Returns the integer portion of  EXPR.   If  EXPR  is
  2663.              omitted, uses $_.
  2664.  
  2665.      ioctl(FILEHANDLE,FUNCTION,SCALAR)
  2666.              Implements the ioctl(2) function.   You'll  probably
  2667.              have to say
  2668.  
  2669.                   require "ioctl.ph"; # probably /usr/local/lib/perl/ioctl.ph
  2670.  
  2671.              first to get the correct function  definitions.   If
  2672.              ioctl.ph  doesn't  exist or doesn't have the correct
  2673.              definitions you'll have to roll your own,  based  on
  2674.              your  C  header files such as <sys/ioctl.h>.  (There
  2675.              is a perl script called h2ph  that  comes  with  the
  2676.              Unix  perl  kit which may help you in this.)  SCALAR
  2677.              will  be  read  and/or  written  depending  on   the
  2678.              FUNCTION--a  pointer  to  the string value of SCALAR
  2679.              will be passed as the third argument of  the  actual
  2680.              ioctl call.  (If SCALAR has no string value but does
  2681.              have a numeric value,  that  value  will  be  passed
  2682.              rather  than  a  pointer  to  the  string value.  To
  2683.              guarantee this to be true, add a  0  to  the  scalar
  2684.              before using it.)  The pack() and unpack() functions
  2685.              are useful for manipulating the values of structures
  2686.              used  by  ioctl().   The  following example sets the
  2687.              erase character to DEL.
  2688.  
  2689.                   require 'ioctl.ph';
  2690.                   $sgttyb_t = "ccccs";          # 4 chars and a short
  2691.                   if (ioctl(STDIN,$TIOCGETP,$sgttyb)) {
  2692.                        @ary = unpack($sgttyb_t,$sgttyb);
  2693.                        $ary[2] = 127;
  2694.                        $sgttyb = pack($sgttyb_t,@ary);
  2695.                        ioctl(STDIN,$TIOCSETP,$sgttyb)
  2696.                             || die "Can't ioctl: $!";
  2697.                   }
  2698.  
  2699.              The return value of ioctl (and fcntl) is as follows:
  2700.  
  2701.  
  2702.  
  2703.                                                                41
  2704.  
  2705.  
  2706.  
  2707.  
  2708.  
  2709.  
  2710. PERL(1)                  USER COMMANDS                    PERL(1)
  2711.  
  2712.  
  2713.  
  2714.                   if OS returns:           perl returns:
  2715.                     -1                       undefined value
  2716.                     0                        string "0 but true"
  2717.                     anything else            that number
  2718.  
  2719.              Thus perl returns  true  on  success  and  false  on
  2720.              failure,  yet  you  can  still  easily determine the
  2721.              actual value returned by the operating system:
  2722.  
  2723.                   ($retval = ioctl(...)) || ($retval = -1);
  2724.                   printf "System returned %d\n", $retval;
  2725.  
  2726.      join(EXPR,LIST)
  2727.  
  2728.      join(EXPR,ARRAY)
  2729.              Joins the separate strings of LIST or ARRAY  into  a
  2730.              single  string with fields separated by the value of
  2731.              EXPR, and returns the string.  Example:
  2732.  
  2733.              $_ = join(':',
  2734.                        $login,$passwd,$uid,$gid,$gcos,$home,$shell);
  2735.  
  2736.              See _s_p_l_i_t.
  2737.  
  2738.      keys(ASSOC_ARRAY)
  2739.  
  2740.      keys ASSOC_ARRAY
  2741.              Returns a normal array consisting of all the keys of
  2742.              the  named associative array.  The keys are returned
  2743.              in an apparently random order, but it  is  the  same
  2744.              order as either the values() or each() function pro-
  2745.              duces (given that the associative array has not been
  2746.              modified).   Here  is  yet another way to print your
  2747.              environment:
  2748.  
  2749.                   @keys = keys %ENV;
  2750.                   @values = values %ENV;
  2751.                   while ($#keys >= 0) {
  2752.                        print pop(@keys), '=', pop(@values), "\n";
  2753.                   }
  2754.  
  2755.              or how about sorted by key:
  2756.  
  2757.                   foreach $key (sort(keys %ENV)) {
  2758.                        print $key, '=', $ENV{$key}, "\n";
  2759.                   }
  2760.  
  2761.  
  2762.  
  2763.  
  2764.  
  2765.  
  2766.  
  2767.  
  2768.  
  2769.                                                                42
  2770.  
  2771.  
  2772.  
  2773.  
  2774.  
  2775.  
  2776. PERL(1)                  USER COMMANDS                    PERL(1)
  2777.  
  2778.  
  2779.  
  2780.      kill(LIST)
  2781.  
  2782.      kill LIST
  2783.              Sends a signal to a list of  processes.   The  first
  2784.              element  of  the  list  must  be the signal to send.
  2785.              Returns the number of  processes  successfully  sig-
  2786.              naled.
  2787.  
  2788.                   $cnt = kill 1, $child1, $child2;
  2789.                   kill 9, @goners;
  2790.  
  2791.              If the signal  is  negative,  kills  process  groups
  2792.              instead of processes.  (On System V, a negative _p_r_o_-
  2793.              _c_e_s_s number  will  also  kill  process  groups,  but
  2794.              that's  not portable.)  You may use a signal name in
  2795.              quotes.
  2796.  
  2797.      last LABEL
  2798.  
  2799.      last    The _l_a_s_t command is like the _b_r_e_a_k  statement  in  C
  2800.              (as used in loops); it immediately exits the loop in
  2801.              question.  If the  LABEL  is  omitted,  the  command
  2802.              refers  to  the  innermost enclosing loop.  The _c_o_n_-
  2803.              _t_i_n_u_e block, if any, is not executed:
  2804.  
  2805.                   line: while (<STDIN>) {
  2806.                        last line if /^$/;  # exit when done with header
  2807.                        ...
  2808.                   }
  2809.  
  2810.  
  2811.      length(EXPR)
  2812.  
  2813.      length EXPR
  2814.              Returns the length in characters  of  the  value  of
  2815.              EXPR.  If EXPR is omitted, returns length of $_.
  2816.  
  2817.      link(OLDFILE,NEWFILE)
  2818.              Creates a new filename linked to the  old  filename.
  2819.              Returns 1 for success, 0 otherwise.
  2820.  
  2821.      listen(SOCKET,QUEUESIZE)
  2822.              Does the same thing  that  the  listen  system  call
  2823.              does.  Sockets are not yet supported on MS-DOS.
  2824.  
  2825.      local(LIST)
  2826.              Declares the listed variables to  be  local  to  the
  2827.              enclosing  block, subroutine, eval or "do".  All the
  2828.              listed elements must be legal lvalues.  This  opera-
  2829.              tor  works  by  saving  the  current values of those
  2830.              variables in LIST on a hidden  stack  and  restoring
  2831.              them  upon  exiting  the  block, subroutine or eval.
  2832.  
  2833.  
  2834.  
  2835.                                                                43
  2836.  
  2837.  
  2838.  
  2839.  
  2840.  
  2841.  
  2842. PERL(1)                  USER COMMANDS                    PERL(1)
  2843.  
  2844.  
  2845.  
  2846.              This means that called subroutines can  also  refer-
  2847.              ence  the  local  variable,  but not the global one.
  2848.              The LIST may be assigned to if desired, which allows
  2849.              you to initialize your local variables.  (If no ini-
  2850.              tializer is given for a particular variable,  it  is
  2851.              created  with an undefined value.)  Commonly this is
  2852.              used to name the parameters to a subroutine.   Exam-
  2853.              ples:
  2854.  
  2855.                   sub RANGEVAL {
  2856.                        local($min, $max, $thunk) = @_;
  2857.                        local($result) = '';
  2858.                        local($i);
  2859.  
  2860.                        # Presumably $thunk makes reference to $i
  2861.  
  2862.                        for ($i = $min; $i < $max; $i++) {
  2863.                             $result .= eval $thunk;
  2864.                        }
  2865.  
  2866.                        $result;
  2867.                   }
  2868.  
  2869.                   if ($sw eq '-v') {
  2870.                       # init local array with global array
  2871.                       local(@ARGV) = @ARGV;
  2872.                       unshift(@ARGV,'echo');
  2873.                       system @ARGV;
  2874.                   }
  2875.                   # @ARGV restored
  2876.  
  2877.                   # temporarily add to digits associative array
  2878.                   if ($base12) {
  2879.                        # (NOTE: not claiming this is efficient!)
  2880.                        local(%digits) = (%digits,'t',10,'e',11);
  2881.                        do parse_num();
  2882.                   }
  2883.  
  2884.              Note that local() is a run-time command, and so gets
  2885.              executed  every  time  through a loop, using up more
  2886.              stack storage each time until it's all  released  at
  2887.              once when the loop is exited.
  2888.  
  2889.      localtime(EXPR)
  2890.  
  2891.      localtime EXPR
  2892.              Converts a time as returned by the time function  to
  2893.              a  9-element  array  with  the time analyzed for the
  2894.              local timezone.  Typically used as follows:
  2895.  
  2896.  
  2897.  
  2898.  
  2899.  
  2900.  
  2901.                                                                44
  2902.  
  2903.  
  2904.  
  2905.  
  2906.  
  2907.  
  2908. PERL(1)                  USER COMMANDS                    PERL(1)
  2909.  
  2910.  
  2911.  
  2912.              ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
  2913.                                            localtime(time);
  2914.  
  2915.              All array elements are numeric,  and  come  straight
  2916.              out  of  a struct tm.  In particular this means that
  2917.              $mon has the range 0..11 and  $wday  has  the  range
  2918.              0..6.  If EXPR is omitted, does localtime(time).
  2919.  
  2920.      log(EXPR)
  2921.  
  2922.      log EXPR
  2923.              Returns logarithm (base _e)  of  EXPR.   If  EXPR  is
  2924.              omitted, returns log of $_.
  2925.  
  2926.      lstat(FILEHANDLE)
  2927.  
  2928.      lstat FILEHANDLE
  2929.  
  2930.      lstat(EXPR)
  2931.  
  2932.      lstat SCALARVARIABLE
  2933.              Used to stat symbolic links  on  Unix.   On  MS-DOS,
  2934.              same as _s_t_a_t.
  2935.  
  2936.      m/PATTERN/gio
  2937.  
  2938.      /PATTERN/gio
  2939.              Searches a string for a pattern match,  and  returns
  2940.              true  (1)  or false ('').  If no string is specified
  2941.              via  the  =~  or  !~  operator,  the  $_  string  is
  2942.              searched.  (The string specified with =~ need not be
  2943.              an lvalue--it may be the  result  of  an  expression
  2944.              evaluation,   but   remember  the  =~  binds  rather
  2945.              tightly.)  See also the section on  regular  expres-
  2946.              sions.
  2947.  
  2948.              If / is  the  delimiter  then  the  initial  'm'  is
  2949.              optional.   With  the  'm'  you  can use any pair of
  2950.              non-alphanumeric characters as delimiters.  This  is
  2951.              particularly  useful  for  matching  Unix path names
  2952.              that contain '/'.  If the final  delimiter  is  fol-
  2953.              lowed  by  the  optional letter 'i', the matching is
  2954.              done in a case-insensitive manner.  PATTERN may con-
  2955.              tain  references  to scalar variables, which will be
  2956.              interpolated (and the pattern recompiled) every time
  2957.              the  pattern search is evaluated.  (Note that $) and
  2958.              $| may not be interpolated because  they  look  like
  2959.              end-of-string tests.)  If you want such a pattern to
  2960.              be compiled only once, add an "o" after the trailing
  2961.              delimiter.   This avoids expensive run-time recompi-
  2962.              lations, and is useful when the value you are inter-
  2963.              polating  won't  change over the life of the script.
  2964.  
  2965.  
  2966.  
  2967.                                                                45
  2968.  
  2969.  
  2970.  
  2971.  
  2972.  
  2973.  
  2974. PERL(1)                  USER COMMANDS                    PERL(1)
  2975.  
  2976.  
  2977.  
  2978.              If the PATTERN evaluates to a null string, the  most
  2979.              recent   successful   regular   expression  is  used
  2980.              instead.
  2981.  
  2982.              If used in a context that requires an array value, a
  2983.              pattern  match  returns  an  array consisting of the
  2984.              subexpressions matched by  the  parentheses  in  the
  2985.              pattern, i.e. ($1, $2, $3...).  It does NOT actually
  2986.              set $1, $2, etc. in this case, nor does it  set  $+,
  2987.              $`,  $&  or $'.  If the match fails, a null array is
  2988.              returned.  If the match succeeds, but there were  no
  2989.              parentheses, an array value of (1) is returned.
  2990.  
  2991.              Examples:
  2992.  
  2993.                  open(tty, '/dev/tty');
  2994.                  <tty> =~ /^y/i && do foo();    # do foo if desired
  2995.  
  2996.                  if (/Version: *([0-9.]*)/) { $version = $1; }
  2997.  
  2998.                  next if m#^/usr/spool/uucp#;
  2999.  
  3000.                  # poor man's grep
  3001.                  $arg = shift;
  3002.                  while (<>) {
  3003.                       print if /$arg/o;    # compile only once
  3004.                  }
  3005.  
  3006.                  if (($F1, $F2, $Etc) = ($foo =~ /^(\S+)\s+(\S+)\s*(.*)/))
  3007.  
  3008.              This last example splits $foo  into  the  first  two
  3009.              words  and  the  remainder  of the line, and assigns
  3010.              those three fields to $F1, $F2 and $Etc.  The condi-
  3011.              tional  is true if any variables were assigned, i.e.
  3012.              if the pattern matched.
  3013.  
  3014.              The   "g"   modifier   specifies   global    pattern
  3015.              matching--that  is, matching as many times as possi-
  3016.              ble within the string.  How it  behaves  depends  on
  3017.              the context.  In an array context, it returns a list
  3018.              of all the substrings matched by all the parentheses
  3019.              in   the   regular  expression.   If  there  are  no
  3020.              parentheses, it returns a list of  all  the  matched
  3021.              strings,  as  if  there  were parentheses around the
  3022.              whole pattern.  In a  scalar  context,  it  iterates
  3023.              through  the  string,  returning  TRUE  each time it
  3024.              matches, and FALSE when it eventually  runs  out  of
  3025.              matches.   (In  other  words,  it remembers where it
  3026.              left off last time and restarts the search  at  that
  3027.              point.)   It presumes that you have not modified the
  3028.              string since the last match.  Modifying  the  string
  3029.              between  matches  may  result in undefined behavior.
  3030.  
  3031.  
  3032.  
  3033.                                                                46
  3034.  
  3035.  
  3036.  
  3037.  
  3038.  
  3039.  
  3040. PERL(1)                  USER COMMANDS                    PERL(1)
  3041.  
  3042.  
  3043.  
  3044.              (You can actually get away with  in-place  modifica-
  3045.              tions  via substr() that do not change the length of
  3046.              the entire string.  In general, however, you  should
  3047.              be using s///g for such modifications.)  Examples:
  3048.  
  3049.                   # array context
  3050.                   ($one,$five,$fifteen) = (`uptime` =~ /(\d+\.\d+)/g);
  3051.  
  3052.                   # scalar context
  3053.                   $/ = 1; $* = 1;
  3054.                   while ($paragraph = <>) {
  3055.                       while ($paragraph =~ /[a-z]['")]*[.!?]+['")]*\s/g) {
  3056.                        $sentences++;
  3057.                       }
  3058.                   }
  3059.                   print "$sentences\n";
  3060.  
  3061.  
  3062.      mkdir(FILENAME,MODE)
  3063.              Creates the directory specified  by  FILENAME,  with
  3064.              permissions   specified  by  MODE  (as  modified  by
  3065.              umask).  If it succeeds it returns 1,  otherwise  it
  3066.              returns 0 and sets $! (errno).
  3067.  
  3068.      msgctl(ID,CMD,ARG)
  3069.  
  3070.      msgget(KEY,FLAGS)
  3071.  
  3072.      msgsnd(ID,MSG,FLAGS)
  3073.  
  3074.      msgrcv(ID,VAR,SIZE,TYPE,FLAGS)
  3075.              These System V  inter-process  communications  func-
  3076.              tions are not available on MS-DOS.
  3077.  
  3078.      next LABEL
  3079.  
  3080.      next    The _n_e_x_t command is like the _c_o_n_t_i_n_u_e  statement  in
  3081.              C; it starts the next iteration of the loop:
  3082.  
  3083.                   line: while (<STDIN>) {
  3084.                        next line if /^#/;  # discard comments
  3085.                        ...
  3086.                   }
  3087.  
  3088.              Note that if there were  a  _c_o_n_t_i_n_u_e  block  on  the
  3089.              above,  it  would  get  executed  even  on discarded
  3090.              lines.  If the LABEL is omitted, the command  refers
  3091.              to the innermost enclosing loop.
  3092.  
  3093.      oct(EXPR)
  3094.  
  3095.  
  3096.  
  3097.  
  3098.  
  3099.                                                                47
  3100.  
  3101.  
  3102.  
  3103.  
  3104.  
  3105.  
  3106. PERL(1)                  USER COMMANDS                    PERL(1)
  3107.  
  3108.  
  3109.  
  3110.      oct EXPR
  3111.              Returns the decimal value of EXPR interpreted as  an
  3112.              octal  string.   (If  EXPR happens to start off with
  3113.              0x, interprets it as a  hex  string  instead.)   The
  3114.              following  will handle decimal, octal and hex in the
  3115.              standard notation:
  3116.  
  3117.                   $val = oct($val) if $val =~ /^0/;
  3118.  
  3119.              If EXPR is omitted, uses $_.
  3120.  
  3121.      open(FILEHANDLE,EXPR)
  3122.  
  3123.      open(FILEHANDLE)
  3124.  
  3125.      open FILEHANDLE
  3126.              Opens the file whose filename is given by EXPR,  and
  3127.              associates  it with FILEHANDLE.  If FILEHANDLE is an
  3128.              expression, its value is used as  the  name  of  the
  3129.              real  filehandle  wanted.   If  EXPR is omitted, the
  3130.              scalar variable of the same name as  the  FILEHANDLE
  3131.              contains  the filename.  If the filename begins with
  3132.              "<" or nothing, the file is opened  for  input.   If
  3133.              the filename begins with ">", the file is opened for
  3134.              output.  If the filename begins with ">>", the  file
  3135.              is  opened  for  appending.   (You  can put a '+' in
  3136.              front of the '>' or '<' to indicate  that  you  want
  3137.              both  read  and  write  access to the file.)  If the
  3138.              filename begins with "|",  the  filename  is  inter-
  3139.              preted  as a command to which output is to be piped,
  3140.              and if the filename ends with a "|", the filename is
  3141.              interpreted  as  command  which  pipes  input to us.
  3142.              (You may not have a command that pipes both  in  and
  3143.              out.)   Opening  '-'  opens  _S_T_D_I_N  and opening '>-'
  3144.              opens _S_T_D_O_U_T.  Open returns non-zero  upon  success,
  3145.              the undefined value otherwise.  If the open involved
  3146.              a pipe, the return value happens to be  the  pid  of
  3147.              the subprocess.  Examples:
  3148.  
  3149.                   $article = 100;
  3150.                   open article || die "Can't find article $article: $!\n";
  3151.                   while (<article>) {...
  3152.  
  3153.                   open(LOG, '>>/usr/spool/news/twitlog');
  3154.                                       # (log is reserved)
  3155.  
  3156.                   open(article, "caesar <$article |");
  3157.                                       # decrypt article
  3158.  
  3159.                   open(extract, "|sort >/tmp/Tmp$$");
  3160.                                       # $$ is our process#
  3161.  
  3162.  
  3163.  
  3164.  
  3165.                                                                48
  3166.  
  3167.  
  3168.  
  3169.  
  3170.  
  3171.  
  3172. PERL(1)                  USER COMMANDS                    PERL(1)
  3173.  
  3174.  
  3175.  
  3176.                   # process argument list of files along with any includes
  3177.  
  3178.                   foreach $file (@ARGV) {
  3179.                        do process($file, 'fh00');    # no pun intended
  3180.                   }
  3181.  
  3182.                   sub process {
  3183.                        local($filename, $input) = @_;
  3184.                        $input++;      # this is a string increment
  3185.                        unless (open($input, $filename)) {
  3186.                             print STDERR "Can't open $filename: $!\n";
  3187.                             return;
  3188.                        }
  3189.                        while (<$input>) {       # note use of indirection
  3190.                             if (/^#include "(.*)"/) {
  3191.                                  do process($1, $input);
  3192.                                  next;
  3193.                             }
  3194.                             ...       # whatever
  3195.                        }
  3196.                   }
  3197.  
  3198.              You may also, in the Bourne shell tradition, specify
  3199.              an  EXPR beginning with ">&", in which case the rest
  3200.              of the string  is  interpreted  as  the  name  of  a
  3201.              filehandle (or file descriptor, if numeric) which is
  3202.              to be duped and opened.  You may use & after >,  >>,
  3203.              <,  +>,  +>>  and  +<.   The mode you specify should
  3204.              match the mode of the original filehandle.  Here  is
  3205.              a  script that saves, redirects, and restores _S_T_D_O_U_T
  3206.              and _S_T_D_E_R_R:
  3207.  
  3208.  
  3209.  
  3210.  
  3211.  
  3212.  
  3213.  
  3214.  
  3215.  
  3216.  
  3217.  
  3218.  
  3219.  
  3220.  
  3221.  
  3222.  
  3223.  
  3224.  
  3225.  
  3226.  
  3227.  
  3228.  
  3229.  
  3230.  
  3231.                                                                49
  3232.  
  3233.  
  3234.  
  3235.  
  3236.  
  3237.  
  3238. PERL(1)                  USER COMMANDS                    PERL(1)
  3239.  
  3240.  
  3241.  
  3242.                   #!/usr/bin/perl
  3243.                   open(SAVEOUT, ">&STDOUT");
  3244.                   open(SAVEERR, ">&STDERR");
  3245.  
  3246.                   open(STDOUT, ">foo.out") || die "Can't redirect stdout";
  3247.                   open(STDERR, ">&STDOUT") || die "Can't dup stdout";
  3248.  
  3249.                   select(STDERR); $| = 1;       # make unbuffered
  3250.                   select(STDOUT); $| = 1;       # make unbuffered
  3251.  
  3252.                   print STDOUT "stdout 1\n";    # this works for
  3253.                   print STDERR "stderr 1\n";    # subprocesses too
  3254.  
  3255.                   close(STDOUT);
  3256.                   close(STDERR);
  3257.  
  3258.                   open(STDOUT, ">&SAVEOUT");
  3259.                   open(STDERR, ">&SAVEERR");
  3260.  
  3261.                   print STDOUT "stdout 2\n";
  3262.                   print STDERR "stderr 2\n";
  3263.  
  3264.              Explicitly closing any piped filehandle  causes  the
  3265.              parent  process to wait for the child to finish, and
  3266.              returns the status value in $?.  Note: on any opera-
  3267.              tion  which  may do a fork, unflushed buffers remain
  3268.              unflushed in both processes,  which  means  you  may
  3269.              need to set $| to avoid duplicate output.
  3270.  
  3271.              On MS-DOS, "pipes" are actually files, and the  sub-
  3272.              process is run to completion.  For output pipes, the
  3273.              subprocess is run when _p_e_r_l exits or when  the  pipe
  3274.              is  explicitly closed.  For input pipes, the subpro-
  3275.              gram is run to completion when the _o_p_e_n is  done.
  3276.              On MS-DOS, it is recommended that forward slashes be
  3277.              used to delimit path components in file names.  (See
  3278.              the section on MS-DOS.)
  3279.  
  3280.      opendir(DIRHANDLE,EXPR)
  3281.              Opens a directory named EXPR for processing by read-
  3282.              dir(),   telldir(),   seekdir(),   rewinddir()   and
  3283.              closedir().  Returns true if successful.  DIRHANDLEs
  3284.              have their own namespace separate from FILEHANDLEs.
  3285.  
  3286.      ord(EXPR)
  3287.  
  3288.      ord EXPR
  3289.              Returns the numeric ascii value of the first charac-
  3290.              ter of EXPR.  If EXPR is omitted, uses $_.
  3291.  
  3292.  
  3293.  
  3294.  
  3295.  
  3296.  
  3297.                                                                50
  3298.  
  3299.  
  3300.  
  3301.  
  3302.  
  3303.  
  3304. PERL(1)                  USER COMMANDS                    PERL(1)
  3305.  
  3306.  
  3307.  
  3308.      pack(TEMPLATE,LIST)
  3309.              Takes an array or list of values and packs it into a
  3310.              binary  structure,  returning  the string containing
  3311.              the structure.  The TEMPLATE is a sequence of  char-
  3312.              acters  that  give  the order and type of values, as
  3313.              follows:
  3314.  
  3315.                   A    An ascii string, will be space padded.
  3316.                   a    An ascii string, will be null padded.
  3317.                   c    A signed char value.
  3318.                   C    An unsigned char value.
  3319.                   s    A signed short value.
  3320.                   S    An unsigned short value.
  3321.                   i    A signed integer value.
  3322.                   I    An unsigned integer value.
  3323.                   l    A signed long value.
  3324.                   L    An unsigned long value.
  3325.                   n    A short in "network" order.
  3326.                   N    A long in "network" order.
  3327.                   f    A single-precision float in the native format.
  3328.                   d    A double-precision float in the native format.
  3329.                   p    A pointer to a string.
  3330.                   x    A null byte.
  3331.                   X    Back up a byte.
  3332.                   @    Null fill to absolute position.
  3333.                   u    A uuencoded string.
  3334.                   b    A bit string (ascending bit order, like vec()).
  3335.                   B    A bit string (descending bit order).
  3336.                   h    A hex string (low nybble first).
  3337.                   H    A hex string (high nybble first).
  3338.  
  3339.              Each letter may optionally be followed by  a  number
  3340.              which  gives  a repeat count.  With all types except
  3341.              "a", "A", "b", "B", "h" and "H", the  pack  function
  3342.              will  gobble up that many values from the LIST.  A *
  3343.              for the repeat count means to use however many items
  3344.              are  left.   The  "a"  and "A" types gobble just one
  3345.              value, but pack it as a string of length count, pad-
  3346.              ding  with  nulls  or  spaces  as  necessary.  (When
  3347.              unpacking, "A" strips trailing spaces and nulls, but
  3348.              "a"  does  not.)   Likewise,  the "b" and "B" fields
  3349.              pack a string that many bits long.  The "h" and  "H"
  3350.              fields  pack  a string that many nybbles long.  Real
  3351.              numbers (floats  and  doubles)  are  in  the  native
  3352.              machine  format  only;  due  to  the multiplicity of
  3353.              floating formats around, and the lack of a  standard
  3354.              "network"  representation,  no  facility  for inter-
  3355.              change has been made.  This means that packed float-
  3356.              ing  point  data  written  on one machine may not be
  3357.              readable on another - even if both use IEEE floating
  3358.              point  arithmetic  (as the endian-ness of the memory
  3359.              representation is not part of the IEEE spec).   Note
  3360.  
  3361.  
  3362.  
  3363.                                                                51
  3364.  
  3365.  
  3366.  
  3367.  
  3368.  
  3369.  
  3370. PERL(1)                  USER COMMANDS                    PERL(1)
  3371.  
  3372.  
  3373.  
  3374.              that  perl  uses  doubles internally for all numeric
  3375.              calculation, and converting from double -> float  ->
  3376.              double   will   lose   precision  (i.e.  unpack("f",
  3377.              pack("f", $foo)) will not in general equal $foo).
  3378.              Examples:
  3379.  
  3380.                   $foo = pack("cccc",65,66,67,68);
  3381.                   # foo eq "ABCD"
  3382.                   $foo = pack("c4",65,66,67,68);
  3383.                   # same thing
  3384.  
  3385.                   $foo = pack("ccxxcc",65,66,67,68);
  3386.                   # foo eq "AB\0\0CD"
  3387.  
  3388.                   $foo = pack("s2",1,2);
  3389.                   # "\1\0\2\0" on little-endian
  3390.                   # "\0\1\0\2" on big-endian
  3391.  
  3392.                   $foo = pack("a4","abcd","x","y","z");
  3393.                   # "abcd"
  3394.  
  3395.                   $foo = pack("aaaa","abcd","x","y","z");
  3396.                   # "axyz"
  3397.  
  3398.                   $foo = pack("a14","abcdefg");
  3399.                   # "abcdefg\0\0\0\0\0\0\0"
  3400.  
  3401.                   $foo = pack("i9pl", gmtime);
  3402.                   # a real struct tm (on my system anyway)
  3403.  
  3404.                   sub bintodec {
  3405.                       unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
  3406.                   }
  3407.              The same template may generally also be used in  the
  3408.              unpack function.
  3409.  
  3410.      pipe(READHANDLE,WRITEHANDLE)
  3411.              Opens a pair of connected pipes like the correspond-
  3412.              ing system call.  Not supported on MS-DOS.
  3413.  
  3414.      pop(ARRAY)
  3415.  
  3416.      pop ARRAY
  3417.              Pops and returns the last value of the array,  shor-
  3418.              tening the array by 1.  Has the same effect as
  3419.  
  3420.                   $tmp = $ARRAY[$#ARRAY--];
  3421.  
  3422.              If there are no elements in the array,  returns  the
  3423.              undefined value.
  3424.  
  3425.  
  3426.  
  3427.  
  3428.  
  3429.                                                                52
  3430.  
  3431.  
  3432.  
  3433.  
  3434.  
  3435.  
  3436. PERL(1)                  USER COMMANDS                    PERL(1)
  3437.  
  3438.  
  3439.  
  3440.      print(FILEHANDLE LIST)
  3441.  
  3442.      print(LIST)
  3443.  
  3444.      print FILEHANDLE LIST
  3445.  
  3446.      print LIST
  3447.  
  3448.      print   Prints  a  string  or  a  comma-separated  list   of
  3449.              strings.   Returns non-zero if successful.  FILEHAN-
  3450.              DLE may be a scalar variable name, in which case the
  3451.              variable  contains  the name of the filehandle, thus
  3452.              introducing one level  of  indirection.   (NOTE:  If
  3453.              FILEHANDLE  is  a  variable  and the next token is a
  3454.              term, it may be misinterpreted as an operator unless
  3455.              you  interpose  a  +  or put parens around the argu-
  3456.              ments.)  If FILEHANDLE is omitted, prints by default
  3457.              to  standard  output (or to the last selected output
  3458.              channel--see select()).  If LIST  is  also  omitted,
  3459.              prints  $_  to  _S_T_D_O_U_T.   To  set the default output
  3460.              channel to  something  other  than  _S_T_D_O_U_T  use  the
  3461.              select  operation.  Note that, because print takes a
  3462.              LIST, anything in the LIST is evaluated in an  array
  3463.              context,  and any subroutine that you call will have
  3464.              one or more of its expressions evaluated in an array
  3465.              context.   Also  be  careful not to follow the print
  3466.              keyword with a left parenthesis unless you want  the
  3467.              corresponding  right  parenthesis  to  terminate the
  3468.              arguments to the print--interpose a + or put  parens
  3469.              around all the arguments.
  3470.  
  3471.      printf(FILEHANDLE LIST)
  3472.  
  3473.      printf(LIST)
  3474.  
  3475.      printf FILEHANDLE LIST
  3476.  
  3477.      printf LIST
  3478.              Equivalent to a "print FILEHANDLE sprintf(LIST)".
  3479.  
  3480.      push(ARRAY,LIST)
  3481.              Treats ARRAY (@ is optional) as a stack, and  pushes
  3482.              the  values  of  LIST  onto  the  end of ARRAY.  The
  3483.              length of ARRAY increases by  the  length  of  LIST.
  3484.              Has the same effect as
  3485.  
  3486.                  for $value (LIST) {
  3487.                       $ARRAY[++$#ARRAY] = $value;
  3488.                  }
  3489.  
  3490.              but is more efficient.
  3491.  
  3492.  
  3493.  
  3494.  
  3495.                                                                53
  3496.  
  3497.  
  3498.  
  3499.  
  3500.  
  3501.  
  3502. PERL(1)                  USER COMMANDS                    PERL(1)
  3503.  
  3504.  
  3505.  
  3506.      q/STRING/
  3507.  
  3508.      qq/STRING/
  3509.  
  3510.      qx/STRING/
  3511.              These are not really functions, but simply syntactic
  3512.              sugar  to let you avoid putting too many backslashes
  3513.              into quoted strings.  The q operator is  a  general-
  3514.              ized single quote, and the qq operator a generalized
  3515.              double quote.  The  qx  operator  is  a  generalized
  3516.              backquote.   Any  non-alphanumeric  delimiter can be
  3517.              used in place of /, including newline.  If the  del-
  3518.              imiter  is  an  opening  bracket or parenthesis, the
  3519.              final delimiter will be  the  corresponding  closing
  3520.              bracket  or  parenthesis.   (Embedded occurrences of
  3521.              the  closing  bracket  need  to  be  backslashed  as
  3522.              usual.)  Examples:
  3523.  
  3524.                   $foo = q!I said, "You said, 'She said it.'"!;
  3525.                   $bar = q('This is it.');
  3526.                   $today = qx{ date };
  3527.                   $_ .= qq
  3528.              *** The previous line contains the naughty word "$&".\n
  3529.                        if /(ibm|apple|awk)/;      # :-)
  3530.  
  3531.  
  3532.      rand(EXPR)
  3533.  
  3534.      rand EXPR
  3535.  
  3536.      rand    Returns a random fractional number between 0 and the
  3537.              value  of EXPR.  (EXPR should be positive.)  If EXPR
  3538.              is omitted, returns a value between 0  and  1.   See
  3539.              also srand().
  3540.  
  3541.      read(FILEHANDLE,SCALAR,LENGTH,OFFSET)
  3542.  
  3543.      read(FILEHANDLE,SCALAR,LENGTH)
  3544.              Attempts to read LENGTH bytes of data into  variable
  3545.              SCALAR  from  the specified FILEHANDLE.  Returns the
  3546.              number of bytes actually read, or undef if there was
  3547.              an  error.   SCALAR  will  be grown or shrunk to the
  3548.              length actually read.  An OFFSET may be specified to
  3549.              place  the  read  data  at some other place than the
  3550.              beginning of the  string.   This  call  is  actually
  3551.              implemented  in terms of stdio's fread call.  To get
  3552.              a true read system call, see sysread.
  3553.  
  3554.      readdir(DIRHANDLE)
  3555.  
  3556.      readdir DIRHANDLE
  3557.              Returns the next directory  entry  for  a  directory
  3558.  
  3559.  
  3560.  
  3561.                                                                54
  3562.  
  3563.  
  3564.  
  3565.  
  3566.  
  3567.  
  3568. PERL(1)                  USER COMMANDS                    PERL(1)
  3569.  
  3570.  
  3571.  
  3572.              opened  by  opendir().  If used in an array context,
  3573.              returns all the rest of the entries  in  the  direc-
  3574.              tory.   If  there  are  no  more entries, returns an
  3575.              undefined value in a scalar context or a  null  list
  3576.              in an array context.
  3577.  
  3578.      readlink(EXPR)
  3579.  
  3580.      readlink EXPR
  3581.              Returns the value of a symbolic link.  Not supported
  3582.              on MS-DOS.
  3583.  
  3584.      recv(SOCKET,SCALAR,LEN,FLAGS)
  3585.              Receives a message on a socket.
  3586.  
  3587.              SOCKET  filehandle.   Returns  the  address  of  the
  3588.              sender,  or the undefined value if there's an error.
  3589.              SCALAR will be grown or shrunk to the  length  actu-
  3590.              ally  read.  Takes the same flags as the system call
  3591.              of the same name. Sockets are not yet  supported  on
  3592.              MS-DOS.
  3593.  
  3594.      redo LABEL
  3595.  
  3596.      redo    The _r_e_d_o command restarts  the  loop  block  without
  3597.              evaluating  the  conditional  again.   The  _c_o_n_t_i_n_u_e
  3598.              block, if any, is not executed.   If  the  LABEL  is
  3599.              omitted, the command refers to the innermost enclos-
  3600.              ing loop.  This command is normally used by programs
  3601.              that  want  to lie to themselves about what was just
  3602.              input:
  3603.  
  3604.                   # a simpleminded Pascal comment stripper
  3605.                   # (warning: assumes no { or } in strings)
  3606.                   line: while (<STDIN>) {
  3607.                        while (s|({.*}.*){.*}|$1 |) {}
  3608.                        s|{.*}| |;
  3609.                        if (s|{.*| |) {
  3610.                             $front = $_;
  3611.                             while (<STDIN>) {
  3612.                                  if (/}/) {     # end of comment?
  3613.                                       s|^|$front{|;
  3614.                                       redo line;
  3615.                                  }
  3616.                             }
  3617.                        }
  3618.                        print;
  3619.                   }
  3620.  
  3621.  
  3622.      rename(OLDNAME,NEWNAME)
  3623.              Changes the name of a file.  Returns 1 for  success,
  3624.  
  3625.  
  3626.  
  3627.                                                                55
  3628.  
  3629.  
  3630.  
  3631.  
  3632.  
  3633.  
  3634. PERL(1)                  USER COMMANDS                    PERL(1)
  3635.  
  3636.  
  3637.  
  3638.              0  otherwise.  Will not work across filesystem boun-
  3639.              daries.
  3640.  
  3641.      require(EXPR)
  3642.  
  3643.      require EXPR
  3644.  
  3645.      require Includes the library file specified by EXPR,  or  by
  3646.              $_  if  EXPR is not supplied.  Has semantics similar
  3647.              to the following subroutine:
  3648.  
  3649.                   sub require {
  3650.                       local($filename) = @_;
  3651.                       return 1 if $INC{$filename};
  3652.                       local($realfilename,$result);
  3653.                       ITER: {
  3654.                        foreach $prefix (@INC) {
  3655.                            $realfilename = "$prefix/$filename";
  3656.                            if (-f $realfilename) {
  3657.                             $result = do $realfilename;
  3658.                             last ITER;
  3659.                            }
  3660.                        }
  3661.                        die "Can't find $filename in \@INC";
  3662.                       }
  3663.                       die $@ if $@;
  3664.                       die "$filename did not return true value" unless $result;
  3665.                       $INC{$filename} = $realfilename;
  3666.                       $result;
  3667.                   }
  3668.  
  3669.              Note that the file will not be included twice  under
  3670.              the same specified name.
  3671.  
  3672.      reset(EXPR)
  3673.  
  3674.      reset EXPR
  3675.  
  3676.      reset   Generally used in a _c_o_n_t_i_n_u_e block at the end  of  a
  3677.              loop  to  clear  variables  and reset ?? searches so
  3678.              that they work again.  The expression is interpreted
  3679.              as  a list of single characters (hyphens allowed for
  3680.              ranges).  All variables and  arrays  beginning  with
  3681.              one  of  those  letters  are reset to their pristine
  3682.              state.  If  the  expression  is  omitted,  one-match
  3683.              searches (?pattern?) are reset to match again.  Only
  3684.              resets variables or searches in the current package.
  3685.              Always returns 1.  Examples:
  3686.  
  3687.                  reset 'X';      # reset all X variables
  3688.                  reset 'a-z';    # reset lower case variables
  3689.                  reset;          # just reset ?? searches
  3690.  
  3691.  
  3692.  
  3693.                                                                56
  3694.  
  3695.  
  3696.  
  3697.  
  3698.  
  3699.  
  3700. PERL(1)                  USER COMMANDS                    PERL(1)
  3701.  
  3702.  
  3703.  
  3704.              Note:  resetting  "A-Z"  is  not  recommended  since
  3705.              you'll wipe out your ARGV and ENV arrays.
  3706.  
  3707.              The use of reset on dbm associative arrays does  not
  3708.              change  the  dbm file.  (It does, however, flush any
  3709.              entries cached by perl, which may be useful  if  you
  3710.              are sharing the dbm file.  Then again, maybe not.)
  3711.  
  3712.      return LIST
  3713.              Returns from a subroutine with the value  specified.
  3714.              (Note that a subroutine can automatically return the
  3715.              value of the last expression evaluated.  That's  the
  3716.              preferred method--use of an explicit _r_e_t_u_r_n is a bit
  3717.              slower.)
  3718.  
  3719.      reverse(LIST)
  3720.  
  3721.      reverse LIST
  3722.              In an array context, returns an array value consist-
  3723.              ing  of  the elements of LIST in the opposite order.
  3724.              In a scalar context, returns a string value consist-
  3725.              ing of the bytes of the first element of LIST in the
  3726.              opposite order.
  3727.  
  3728.      rewinddir(DIRHANDLE)
  3729.  
  3730.      rewinddir DIRHANDLE
  3731.              Sets the current position to the  beginning  of  the
  3732.              directory for the readdir() routine on DIRHANDLE.
  3733.  
  3734.      rindex(STR,SUBSTR,POSITION)
  3735.  
  3736.      rindex(STR,SUBSTR)
  3737.              Works just like index except  that  it  returns  the
  3738.              position  of  the  LAST occurrence of SUBSTR in STR.
  3739.              If  POSITION  is   specified,   returns   the   last
  3740.              occurrence at or before that position.
  3741.  
  3742.      rmdir(FILENAME)
  3743.  
  3744.      rmdir FILENAME
  3745.              Deletes the directory specified by FILENAME if it is
  3746.              empty.   If  it  succeeds it returns 1, otherwise it
  3747.              returns 0 and sets $! (errno).  If FILENAME is omit-
  3748.              ted, uses $_.
  3749.  
  3750.      s/PATTERN/REPLACEMENT/gieo
  3751.              Searches a string  for  a  pattern,  and  if  found,
  3752.              replaces  that pattern with the replacement text and
  3753.              returns the number of substitutions made.  Otherwise
  3754.              it  returns  false (0).  The "g" is optional, and if
  3755.              present,  indicates  that  all  occurrences  of  the
  3756.  
  3757.  
  3758.  
  3759.                                                                57
  3760.  
  3761.  
  3762.  
  3763.  
  3764.  
  3765.  
  3766. PERL(1)                  USER COMMANDS                    PERL(1)
  3767.  
  3768.  
  3769.  
  3770.              pattern  are  to  be  replaced.   The  "i"  is  also
  3771.              optional, and if present, indicates that matching is
  3772.              to be done in a case-insensitive manner.  The "e" is
  3773.              likewise optional, and if  present,  indicates  that
  3774.              the  replacement  string  is  to  be evaluated as an
  3775.              expression  rather  than  just  as  a  double-quoted
  3776.              string.   Any non-alphanumeric delimiter may replace
  3777.              the slashes; if single quotes are used, no interpre-
  3778.              tation  is  done  on  the  replacement string (the e
  3779.              modifier overrides this, however); if backquotes are
  3780.              used, the replacement string is a command to execute
  3781.              whose output will be used as the actual  replacement
  3782.              text.   If  no  string is specified via the =~ or !~
  3783.              operator, the $_ string is  searched  and  modified.
  3784.              (The string specified with =~ must be a scalar vari-
  3785.              able, an array element, or an assignment to  one  of
  3786.              those, i.e. an lvalue.)  If the pattern contains a $
  3787.              that looks like a variable rather  than  an  end-of-
  3788.              string  test, the variable will be interpolated into
  3789.              the pattern at run-time.  If you only want the  pat-
  3790.              tern  compiled  once  the first time the variable is
  3791.              interpolated, add an "o" at the end.  If the PATTERN
  3792.              evaluates to a null string, the most recent success-
  3793.              ful regular expression is used  instead.   See  also
  3794.              the section on regular expressions.  Examples:
  3795.  
  3796.                  s/\bgreen\b/mauve/g;      # don't change wintergreen
  3797.  
  3798.                  $path =~ s|/usr/bin|/usr/local/bin|;
  3799.  
  3800.                  s/Login: $foo/Login: $bar/; # run-time pattern
  3801.  
  3802.                  ($foo = $bar) =~ s/bar/foo/;
  3803.  
  3804.                  $_ = 'abc123xyz';
  3805.                  s/\d+/$&*2/e;        # yields 'abc246xyz'
  3806.                  s/\d+/sprintf("%5d",$&)/e;     # yields 'abc  246xyz'
  3807.                  s/\w/$& x 2/eg;      # yields 'aabbcc  224466xxyyzz'
  3808.  
  3809.                  s/([^ ]*) *([^ ]*)/$2 $1/;     # reverse 1st two fields
  3810.  
  3811.              (Note the use of $ instead of \ in the last example.
  3812.              See section on regular expressions.)
  3813.  
  3814.      scalar(EXPR)
  3815.              Forces EXPR to be interpreted in  a  scalar  context
  3816.              and returns the value of EXPR.
  3817.  
  3818.      seek(FILEHANDLE,POSITION,WHENCE)
  3819.              Randomly positions the file pointer for  FILEHANDLE,
  3820.              just like the fseek() call of stdio.  FILEHANDLE may
  3821.              be an expression whose value gives the name  of  the
  3822.  
  3823.  
  3824.  
  3825.                                                                58
  3826.  
  3827.  
  3828.  
  3829.  
  3830.  
  3831.  
  3832. PERL(1)                  USER COMMANDS                    PERL(1)
  3833.  
  3834.  
  3835.  
  3836.              filehandle.  Returns 1 upon success, 0 otherwise.
  3837.  
  3838.      seekdir(DIRHANDLE,POS)
  3839.              Sets the current position for the readdir()  routine
  3840.              on  DIRHANDLE.   POS  must  be  a  value returned by
  3841.              telldir().  Has  the  same  caveats  about  possible
  3842.              directory  compaction  as  the  corresponding system
  3843.              library routine.
  3844.  
  3845.      select(FILEHANDLE)
  3846.  
  3847.      select  Returns the currently selected filehandle.  Sets the
  3848.              current default filehandle for output, if FILEHANDLE
  3849.              is supplied.  This has two effects: first,  a  _w_r_i_t_e
  3850.              or a _p_r_i_n_t without a filehandle will default to this
  3851.              FILEHANDLE.  Second, references to variables related
  3852.              to  output  will  refer to this output channel.  For
  3853.              example, if you have to set the top of  form  format
  3854.              for  more  than one output channel, you might do the
  3855.              following:
  3856.  
  3857.                   select(REPORT1);
  3858.                   $^ = 'report1_top';
  3859.                   select(REPORT2);
  3860.                   $^ = 'report2_top';
  3861.  
  3862.              FILEHANDLE may be an expression  whose  value  gives
  3863.              the name of the actual filehandle.  Thus:
  3864.  
  3865.                   $oldfh = select(STDERR); $| = 1; select($oldfh);
  3866.  
  3867.  
  3868.      select(RBITS,WBITS,EBITS,TIMEOUT)
  3869.              This calls the Unix select system call, which is not
  3870.              implemented on MS-DOS.
  3871.  
  3872.              The _s_e_l_e_c_t system call is not implemented on MS-DOS.
  3873.  
  3874.      semctl(ID,SEMNUM,CMD,ARG)
  3875.  
  3876.      semget(KEY,NSEMS,SIZE,FLAGS)
  3877.  
  3878.      semop(KEY,OPSTRING)
  3879.              These System V  inter-process  communications  func-
  3880.              tions are not available on MS-DOS.
  3881.  
  3882.      setpgrp(PID,PGRP)
  3883.              Sets the current process  group  for  the  specified
  3884.              PID,  0  for  the current process.  Not supported on
  3885.              MS-DOS.
  3886.  
  3887.  
  3888.  
  3889.  
  3890.  
  3891.                                                                59
  3892.  
  3893.  
  3894.  
  3895.  
  3896.  
  3897.  
  3898. PERL(1)                  USER COMMANDS                    PERL(1)
  3899.  
  3900.  
  3901.  
  3902.      setpriority(WHICH,WHO,PRIORITY)
  3903.              Sets the current priority for a process,  a  process
  3904.              group, or a user.  Not supported on MS-DOS.
  3905.  
  3906.      setsockopt(SOCKET,LEVEL,OPTNAME,OPTVAL)
  3907.              Sets the socket option requested.  Sockets  are  not
  3908.              yet supported on MS-DOS.
  3909.  
  3910.      shift(ARRAY)
  3911.  
  3912.      shift ARRAY
  3913.  
  3914.      shift   Shifts the first value of the array off and  returns
  3915.              it,  shortening the array by 1 and moving everything
  3916.              down.  If  there  are  no  elements  in  the  array,
  3917.              returns  the  undefined value.  If ARRAY is omitted,
  3918.              shifts the @ARGV array in the main program, and  the
  3919.              @_  array in subroutines.  (This is determined lexi-
  3920.              cally.)   See  also  unshift(),  push()  and  pop().
  3921.              Shift()  and unshift() do the same thing to the left
  3922.              end of an array that push()  and  pop()  do  to  the
  3923.              right end.
  3924.  
  3925.      shmctl(ID,CMD,ARG)
  3926.  
  3927.      shmget(KEY,SIZE,FLAGS)
  3928.  
  3929.      shmread(ID,VAR,POS,SIZE)
  3930.  
  3931.      shmwrite(ID,STRING,POS,SIZE)
  3932.              These System V  inter-process  communications  func-
  3933.              tions are not available on MS-DOS.
  3934.  
  3935.      sin(EXPR)
  3936.  
  3937.      sin EXPR
  3938.              Returns the sine of EXPR (expressed in radians).  If
  3939.              EXPR is omitted, returns sine of $_.
  3940.  
  3941.      sleep(EXPR)
  3942.  
  3943.      sleep EXPR
  3944.  
  3945.      sleep   Causes the script to sleep for EXPR seconds, or for-
  3946.              ever  if no EXPR.  May be interrupted by sending the
  3947.              process a SIGALARM.  Pretty worthless on MS-DOS,  as
  3948.              it just wastes the number of seconds requested.
  3949.  
  3950.      socket(SOCKET,DOMAIN,TYPE,PROTOCOL)
  3951.              Opens a socket of the specified kind and attaches it
  3952.              to  filehandle  SOCKET.  call of the same name.  You
  3953.              may need to run h2ph  on  sys/socket.h  to  get  the
  3954.  
  3955.  
  3956.  
  3957.                                                                60
  3958.  
  3959.  
  3960.  
  3961.  
  3962.  
  3963.  
  3964. PERL(1)                  USER COMMANDS                    PERL(1)
  3965.  
  3966.  
  3967.  
  3968.              proper  values handy in a perl library file.  Return
  3969.              true if successful.  See the example in the  section
  3970.              on  Interprocess  Communication. Sockets are not yet
  3971.              supported on MS-DOS.
  3972.  
  3973.      socketpair(SOCKET1,SOCKET2,DOMAIN,TYPE,PROTOCOL)
  3974.              Creates an unnamed pair of sockets in the  specified
  3975.              domain,  of the specified type.  Sockets are not yet
  3976.              supported on MS-DOS.
  3977.  
  3978.      sort(SUBROUTINE LIST)
  3979.  
  3980.      sort(LIST)
  3981.  
  3982.      sort SUBROUTINE LIST
  3983.  
  3984.      sort LIST
  3985.              Sorts the LIST and returns the sorted  array  value.
  3986.              Nonexistent  values  of arrays are stripped out.  If
  3987.              SUBROUTINE is omitted, sorts in standard string com-
  3988.              parison  order.   If  SUBROUTINE is specified, gives
  3989.              the name of a subroutine  that  returns  an  integer
  3990.              less than, equal to, or greater than 0, depending on
  3991.              how the elements of the array  are  to  be  ordered.
  3992.              (The  <=>  and cmp operators are extremely useful in
  3993.              such routines.)  In the interests of efficiency  the
  3994.              normal  calling  code  for  subroutines is bypassed,
  3995.              with the following effects: the subroutine  may  not
  3996.              be  a  recursive subroutine, and the two elements to
  3997.              be compared are passed into the subroutine  not  via
  3998.              @_  but  as $a and $b (see example below).  They are
  3999.              passed by reference so don't modify $a and $b.  SUB-
  4000.              ROUTINE may be a scalar variable name, in which case
  4001.              the value provides the name  of  the  subroutine  to
  4002.              use.  Examples:
  4003.  
  4004.                   sub byage {
  4005.                       $age{$a} <=> $age{$b};    # presuming integers
  4006.                   }
  4007.                   @sortedclass = sort byage @class;
  4008.  
  4009.                   sub reverse { $b cmp $a; }
  4010.                   @harry = ('dog','cat','x','Cain','Abel');
  4011.                   @george = ('gone','chased','yz','Punished','Axed');
  4012.                   print sort @harry;
  4013.                        # prints AbelCaincatdogx
  4014.                   print sort reverse @harry;
  4015.                        # prints xdogcatCainAbel
  4016.                   print sort @george, 'to', @harry;
  4017.                        # prints AbelAxedCainPunishedcatchaseddoggonetoxyz
  4018.  
  4019.  
  4020.  
  4021.  
  4022.  
  4023.                                                                61
  4024.  
  4025.  
  4026.  
  4027.  
  4028.  
  4029.  
  4030. PERL(1)                  USER COMMANDS                    PERL(1)
  4031.  
  4032.  
  4033.  
  4034.      splice(ARRAY,OFFSET,LENGTH,LIST)
  4035.  
  4036.      splice(ARRAY,OFFSET,LENGTH)
  4037.  
  4038.      splice(ARRAY,OFFSET)
  4039.              Removes the elements designated by OFFSET and LENGTH
  4040.              from  an  array, and replaces them with the elements
  4041.              of LIST, if any.  Returns the elements removed  from
  4042.              the array.  The array grows or shrinks as necessary.
  4043.              If LENGTH is omitted, removes everything from OFFSET
  4044.              onward.   The following equivalencies hold (assuming
  4045.              $[ == 0):
  4046.  
  4047.                   push(@a,$x,$y)                splice(@a,$#a+1,0,$x,$y)
  4048.                   pop(@a)                       splice(@a,-1)
  4049.                   shift(@a)                     splice(@a,0,1)
  4050.                   unshift(@a,$x,$y)             splice(@a,0,0,$x,$y)
  4051.                   $a[$x] = $y                   splice(@a,$x,1,$y);
  4052.  
  4053.              Example, assuming array lengths are passed before arrays:
  4054.  
  4055.                   sub aeq { # compare two array values
  4056.                        local(@a) = splice(@_,0,shift);
  4057.                        local(@b) = splice(@_,0,shift);
  4058.                        return 0 unless @a == @b;     # same len?
  4059.                        while (@a) {
  4060.                            return 0 if pop(@a) ne pop(@b);
  4061.                        }
  4062.                        return 1;
  4063.                   }
  4064.                   if (&aeq($len,@foo[1..$len],0+@bar,@bar)) { ... }
  4065.  
  4066.  
  4067.      split(/PATTERN/,EXPR,LIMIT)
  4068.  
  4069.      split(/PATTERN/,EXPR)
  4070.  
  4071.      split(/PATTERN/)
  4072.  
  4073.      split   Splits a  string  into  an  array  of  strings,  and
  4074.              returns  it.   (If  not in an array context, returns
  4075.              the number of fields found and splits  into  the  @_
  4076.              array.   (In  an  array  context,  you can force the
  4077.              split into @_ by using ?? as the pattern delimiters,
  4078.              but  it still returns the array value.))  If EXPR is
  4079.              omitted, splits the $_ string.  If PATTERN  is  also
  4080.              omitted,  splits  on  whitespace (/[ \t\n]+/).  Any-
  4081.              thing matching PATTERN is taken to  be  a  delimiter
  4082.              separating the fields.  (Note that the delimiter may
  4083.              be longer than one character.)  If LIMIT  is  speci-
  4084.              fied,  splits  into  no  more  than that many fields
  4085.              (though it may  split  into  fewer).   If  LIMIT  is
  4086.  
  4087.  
  4088.  
  4089.                                                                62
  4090.  
  4091.  
  4092.  
  4093.  
  4094.  
  4095.  
  4096. PERL(1)                  USER COMMANDS                    PERL(1)
  4097.  
  4098.  
  4099.  
  4100.              unspecified,   trailing  null  fields  are  stripped
  4101.              (which potential users of pop()  would  do  well  to
  4102.              remember).   A pattern matching the null string (not
  4103.              to be confused with a null pattern //, which is just
  4104.              one  member  of  the set of patterns matching a null
  4105.              string) will split the value of EXPR  into  separate
  4106.              characters  at  each point it matches that way.  For
  4107.              example:
  4108.  
  4109.                   print join(':', split(/ */, 'hi there'));
  4110.  
  4111.              produces the output 'h:i:t:h:e:r:e'.
  4112.  
  4113.              The LIMIT parameter can be used to partially split a
  4114.              line
  4115.  
  4116.                   ($login, $passwd, $remainder) = split(/:/, $_, 3);
  4117.  
  4118.              (When assigning to a list, if LIMIT is omitted, perl
  4119.              supplies a LIMIT one larger than the number of vari-
  4120.              ables in the list, to avoid unnecessary  work.   For
  4121.              the  list  above LIMIT would have been 4 by default.
  4122.              In time critical applications it behooves you not to
  4123.              split into more fields than you really need.)
  4124.  
  4125.              If  the  PATTERN  contains  parentheses,  additional
  4126.              array  elements  are created from each matching sub-
  4127.              string in the delimiter.
  4128.  
  4129.                   split(/([,-])/,"1-10,20");
  4130.  
  4131.              produces the array value
  4132.  
  4133.                   (1,'-',10,',',20)
  4134.  
  4135.              The  pattern  /PATTERN/  may  be  replaced  with  an
  4136.              expression to specify patterns that vary at runtime.
  4137.              (To  do   runtime   compilation   only   once,   use
  4138.              /$variable/o.)   As  a  special  case,  specifying a
  4139.              space (' ') will split on white space just as  split
  4140.              with no arguments does, but leading white space does
  4141.              NOT produce a null first  field.   Thus,  split(' ')
  4142.              can  be  used  to  emulate  _a_w_k's  default behavior,
  4143.              whereas split(/ /) will give you as many  null  ini-
  4144.              tial fields as there are leading spaces.
  4145.  
  4146.              Example:
  4147.  
  4148.  
  4149.  
  4150.  
  4151.  
  4152.  
  4153.  
  4154.  
  4155.                                                                63
  4156.  
  4157.  
  4158.  
  4159.  
  4160.  
  4161.  
  4162. PERL(1)                  USER COMMANDS                    PERL(1)
  4163.  
  4164.  
  4165.  
  4166.                   open(passwd, '/etc/passwd');
  4167.                   while (<passwd>) {
  4168.                        ($login, $passwd, $uid, $gid, $gcos, $home, $shell)
  4169.                             = split(/:/);
  4170.                        ...
  4171.                   }
  4172.  
  4173.              (Note that $shell above will still have a newline on
  4174.              it.  See chop().)  See also _j_o_i_n.
  4175.  
  4176.      sprintf(FORMAT,LIST)
  4177.              Returns a string formatted by the usual printf  con-
  4178.              ventions.  The * character is not supported.
  4179.  
  4180.      sqrt(EXPR)
  4181.  
  4182.      sqrt EXPR
  4183.              Return the square root of EXPR.  If EXPR is omitted,
  4184.              returns square root of $_.
  4185.  
  4186.      srand(EXPR)
  4187.  
  4188.      srand EXPR
  4189.              Sets the random number seed for the  _r_a_n_d  operator.
  4190.              If EXPR is omitted, does srand(time).
  4191.  
  4192.      stat(FILEHANDLE)
  4193.  
  4194.      stat FILEHANDLE
  4195.  
  4196.      stat(EXPR)
  4197.  
  4198.      stat SCALARVARIABLE
  4199.              Returns a 13-element array giving the statistics for
  4200.              a  file,  either  the file opened via FILEHANDLE, or
  4201.              named by EXPR.  Typically used as follows:
  4202.  
  4203.                  ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
  4204.                     $atime,$mtime,$ctime,$blksize,$blocks)
  4205.                         = stat($filename);
  4206.  
  4207.              If stat is passed the special filehandle  consisting
  4208.              of  an  underline,  no stat is done, but the current
  4209.              contents of the stat structure from the last stat or
  4210.              filetest are returned.  (Note that on MS-DOS several
  4211.              of these values are spurious.) Example:
  4212.  
  4213.                   if (-x $file && (($d) = stat(_)) && $d < 0) {
  4214.                        print "$file is executable NFS file\n";
  4215.                   }
  4216.  
  4217.              (This only works on machines for  which  the  device
  4218.  
  4219.  
  4220.  
  4221.                                                                64
  4222.  
  4223.  
  4224.  
  4225.  
  4226.  
  4227.  
  4228. PERL(1)                  USER COMMANDS                    PERL(1)
  4229.  
  4230.  
  4231.  
  4232.              number is negative under NFS.)
  4233.  
  4234.      study(SCALAR)
  4235.  
  4236.      study SCALAR
  4237.  
  4238.      study   Takes extra time to study SCALAR ($_ if unspecified)
  4239.              in anticipation of doing many pattern matches on the
  4240.              string before it is next modified.  This may or  may
  4241.              not save time, depending on the nature and number of
  4242.              patterns you are searching on, and on the  distribu-
  4243.              tion  of  character  frequencies in the string to be
  4244.              searched--you probably want to compare runtimes with
  4245.              and  without  it  to  see  which runs faster.  Those
  4246.              loops which scan for  many  short  constant  strings
  4247.              (including  the  constant parts of more complex pat-
  4248.              terns) will benefit most.  You  may  have  only  one
  4249.              study  active  at  a  time--if you study a different
  4250.              scalar the first is  "unstudied".   (The  way  study
  4251.              works  is  this: a linked list of every character in
  4252.              the string to be searched is made, so we  know,  for
  4253.              example,  where  all  the  'k' characters are.  From
  4254.              each  search  string,  the   rarest   character   is
  4255.              selected, based on some static frequency tables con-
  4256.              structed from some  C  programs  and  English  text.
  4257.              Only those places that contain this "rarest" charac-
  4258.              ter are examined.)
  4259.  
  4260.              For example, here is a loop which inserts index pro-
  4261.              ducing  entries before any line containing a certain
  4262.              pattern:
  4263.  
  4264.                   while (<>) {
  4265.                        study;
  4266.                        print ".IX foo\n" if /\bfoo\b/;
  4267.                        print ".IX bar\n" if /\bbar\b/;
  4268.                        print ".IX blurfl\n" if /\bblurfl\b/;
  4269.                        ...
  4270.                        print;
  4271.                   }
  4272.  
  4273.              In searching for /\bfoo\b/, only those locations  in
  4274.              $_  that  contain 'f' will be looked at, because 'f'
  4275.              is rarer than 'o'.  In general, this is  a  big  win
  4276.              except  in pathological cases.  The only question is
  4277.              whether it saves you more time than it took to build
  4278.              the linked list in the first place.
  4279.  
  4280.              Note that if you have to look for strings  that  you
  4281.              don't  know  till  runtime,  you can build an entire
  4282.              loop as a string and eval that to avoid  recompiling
  4283.              all  your  patterns  all  the  time.   Together with
  4284.  
  4285.  
  4286.  
  4287.                                                                65
  4288.  
  4289.  
  4290.  
  4291.  
  4292.  
  4293.  
  4294. PERL(1)                  USER COMMANDS                    PERL(1)
  4295.  
  4296.  
  4297.  
  4298.              undefining $/ to input entire files as  one  record,
  4299.              this can be very fast, often faster than specialized
  4300.              programs like fgrep.  The following scans a list  of
  4301.              files  (@files)  for  a  list of words (@words), and
  4302.              prints out the names of those files that  contain  a
  4303.              match:
  4304.  
  4305.                   $search = 'while (<>) { study;';
  4306.                   foreach $word (@words) {
  4307.                       $search .= "++\$seen{\$ARGV} if /\b$word\b/;\n";
  4308.                   }
  4309.                   $search .= "}";
  4310.                   @ARGV = @files;
  4311.                   undef $/;
  4312.                   eval $search;       # this screams
  4313.                   $/ = "\n";          # put back to normal input delim
  4314.                   foreach $file (sort keys(%seen)) {
  4315.                       print $file, "\n";
  4316.                   }
  4317.  
  4318.  
  4319.      substr(EXPR,OFFSET,LEN)
  4320.  
  4321.      substr(EXPR,OFFSET)
  4322.              Extracts a substring out of  EXPR  and  returns  it.
  4323.              First  character  is at offset 0, or whatever you've
  4324.              set $[ to.  If OFFSET is negative, starts  that  far
  4325.              from  the  end  of  the  string.  If LEN is omitted,
  4326.              returns everything to the end of  the  string.   You
  4327.              can use the substr() function as an lvalue, in which
  4328.              case EXPR must be an lvalue.  If  you  assign  some-
  4329.              thing  shorter than LEN, the string will shrink, and
  4330.              if you assign something longer than LEN, the  string
  4331.              will grow to accommodate it.  To keep the string the
  4332.              same length you may need to pad or chop  your  value
  4333.              using sprintf().
  4334.  
  4335.      symlink(OLDFILE,NEWFILE)
  4336.              Creates a new filename symbolically  linked  to  the
  4337.              old  filename.   (Note  that MS-DOS does not support
  4338.              symbolic links.)
  4339.  
  4340.      syscall(LIST)
  4341.  
  4342.      syscall LIST
  4343.              Calls the system call specified as the first element
  4344.              of the list, passing the remaining elements as argu-
  4345.              ments to the system call.   If  unimplemented,  pro-
  4346.              duces  a fatal error.  The arguments are interpreted
  4347.              as follows: if a  given  argument  is  numeric,  the
  4348.              argument  is  passed as an int.  If not, the pointer
  4349.              to the string value is passed.  You are  responsible
  4350.  
  4351.  
  4352.  
  4353.                                                                66
  4354.  
  4355.  
  4356.  
  4357.  
  4358.  
  4359.  
  4360. PERL(1)                  USER COMMANDS                    PERL(1)
  4361.  
  4362.  
  4363.  
  4364.              to make sure a string is pre-extended long enough to
  4365.              receive any result that  might  be  written  into  a
  4366.              string.   If your integer arguments are not literals
  4367.              and have never been interpreted in  a  numeric  con-
  4368.              text, you may need to add 0 to them to force them to
  4369.              look like numbers.
  4370.  
  4371.                   require 'syscall.ph';         # may need to run h2ph
  4372.                   syscall(&SYS_write, fileno(STDOUT), "hi there\n", 9);
  4373.  
  4374.  
  4375.      sysread(FILEHANDLE,SCALAR,LENGTH,OFFSET)
  4376.  
  4377.      sysread(FILEHANDLE,SCALAR,LENGTH)
  4378.              Attempts to read LENGTH bytes of data into  variable
  4379.              SCALAR from the specified FILEHANDLE, using the sys-
  4380.              tem call read(2).  It bypasses stdio, so mixing this
  4381.              with  other  kinds  of  reads  may  cause confusion.
  4382.              Returns the number of bytes actually read, or  undef
  4383.              if  there  was  an  error.   SCALAR will be grown or
  4384.              shrunk to the length actually read.  An  OFFSET  may
  4385.              be  specified  to  place the read data at some other
  4386.              place than the beginning of the string.
  4387.  
  4388.      system(LIST)
  4389.  
  4390.      system LIST
  4391.              Does exactly the same thing as  "exec  LIST"  except
  4392.              that  a  fork  is done first, and the parent process
  4393.              waits for the child process to complete.  Note  that
  4394.              argument  processing  varies depending on the number
  4395.              of arguments.  The return value is the  exit  status
  4396.              of  the  program as returned by the wait() call.  To
  4397.              get the actual exit value divide by 256.   See  also
  4398.              _e_x_e_c.
  4399.  
  4400.              On MS-DOS, this is implemented using the _s_p_a_w_n  sys-
  4401.              tem call.
  4402.  
  4403.      syswrite(FILEHANDLE,SCALAR,LENGTH,OFFSET)
  4404.  
  4405.      syswrite(FILEHANDLE,SCALAR,LENGTH)
  4406.              Attempts to write LENGTH bytes of data from variable
  4407.              SCALAR to the specified FILEHANDLE, using the system
  4408.              call write(2).  It bypasses stdio,  so  mixing  this
  4409.              with prints may cause confusion.  Returns the number
  4410.              of bytes actually written, or undef if there was  an
  4411.              error.  An OFFSET may be specified to place the read
  4412.              data at some other place than the beginning  of  the
  4413.              string.
  4414.  
  4415.  
  4416.  
  4417.  
  4418.  
  4419.                                                                67
  4420.  
  4421.  
  4422.  
  4423.  
  4424.  
  4425.  
  4426. PERL(1)                  USER COMMANDS                    PERL(1)
  4427.  
  4428.  
  4429.  
  4430.      tell(FILEHANDLE)
  4431.  
  4432.      tell FILEHANDLE
  4433.  
  4434.      tell    Returns the current file  position  for  FILEHANDLE.
  4435.              FILEHANDLE  may  be  an expression whose value gives
  4436.              the name of the actual filehandle.  If FILEHANDLE is
  4437.              omitted, assumes the file last read.
  4438.  
  4439.      telldir(DIRHANDLE)
  4440.  
  4441.      telldir DIRHANDLE
  4442.              Returns the current position of the  readdir()  rou-
  4443.              tines on DIRHANDLE.  Value may be given to seekdir()
  4444.              to access a particular location in a directory.  Has
  4445.              the same caveats about possible directory compaction
  4446.              as the corresponding system library routine.
  4447.  
  4448.      time    Returns  the  number  of  non-leap   seconds   since
  4449.              00:00:00 UTC, January 1, 1970.  Suitable for feeding
  4450.              to gmtime() and localtime().
  4451.  
  4452.      times   Returns a four-element array  giving  the  user  and
  4453.              system  times,  in seconds, for this process and the
  4454.              children of this process.  Not implmented on MS-DOS.
  4455.  
  4456.      tr/SEARCHLIST/REPLACEMENTLIST/cds
  4457.  
  4458.      y/SEARCHLIST/REPLACEMENTLIST/cds
  4459.              Translates all occurrences of the  characters  found
  4460.              in  the search list with the corresponding character
  4461.              in the replacement list.  It returns the  number  of
  4462.              characters  replaced  or  deleted.   If no string is
  4463.              specified via the =~ or !~ operator, the  $_  string
  4464.              is  translated.   (The string specified with =~ must
  4465.              be a  scalar  variable,  an  array  element,  or  an
  4466.              assignment  to  one  of those, i.e. an lvalue.)  For
  4467.              _s_e_d devotees, _y is provided as a synonym for _t_r.
  4468.  
  4469.              If the c modifier is specified, the SEARCHLIST char-
  4470.              acter  set  is  complemented.   If the d modifier is
  4471.              specified, any characters  specified  by  SEARCHLIST
  4472.              that  are  not found in REPLACEMENTLIST are deleted.
  4473.              (Note that this is slightly more flexible  than  the
  4474.              behavior  of some _t_r programs, which delete anything
  4475.              they find in the  SEARCHLIST,  period.)   If  the  s
  4476.              modifier  is specified, sequences of characters that
  4477.              were translated to the same character  are  squashed
  4478.              down to 1 instance of the character.
  4479.  
  4480.              If the d modifier was used, the  REPLACEMENTLIST  is
  4481.              always interpreted exactly as specified.  Otherwise,
  4482.  
  4483.  
  4484.  
  4485.                                                                68
  4486.  
  4487.  
  4488.  
  4489.  
  4490.  
  4491.  
  4492. PERL(1)                  USER COMMANDS                    PERL(1)
  4493.  
  4494.  
  4495.  
  4496.              if the REPLACEMENTLIST is  shorter  than  the  SEAR-
  4497.              CHLIST, the final character is replicated till it is
  4498.              long enough.  If the REPLACEMENTLIST  is  null,  the
  4499.              SEARCHLIST is replicated.  This latter is useful for
  4500.              counting characters in a  class,  or  for  squashing
  4501.              character sequences in a class.
  4502.  
  4503.              Examples:
  4504.  
  4505.                  $ARGV[1] =~ y/A-Z/a-z/;   # canonicalize to lower case
  4506.  
  4507.                  $cnt = tr/*/*/;           # count the stars in $_
  4508.  
  4509.                  $cnt = tr/0-9//;          # count the digits in $_
  4510.  
  4511.                  tr/a-zA-Z//s;             # bookkeeper -> bokeper
  4512.  
  4513.                  ($HOST = $host) =~ tr/a-z/A-Z/;
  4514.  
  4515.                  y/a-zA-Z/ /cs;            # change non-alphas to single space
  4516.  
  4517.                  tr/\200-\377/\0-\177/;    # delete 8th bit
  4518.  
  4519.  
  4520.      truncate(FILEHANDLE,LENGTH)
  4521.  
  4522.      truncate(EXPR,LENGTH)
  4523.              Truncates the file opened on FILEHANDLE, or named by
  4524.              EXPR,  to  the  specified  length.  Produces a fatal
  4525.              error if truncate isn't implemented on your system.
  4526.  
  4527.      umask(EXPR)
  4528.  
  4529.      umask EXPR
  4530.  
  4531.      umask   Sets the umask for the process and returns  the  old
  4532.              one.  Not supported on MS-DOS.
  4533.  
  4534.      undef(EXPR)
  4535.  
  4536.      undef EXPR
  4537.  
  4538.      undef   Undefines the  value  of  EXPR,  which  must  be  an
  4539.              lvalue.   Use  only  on  a  scalar  value, an entire
  4540.              array, or a subroutine name (using &).  (Undef  will
  4541.              probably  not  do what you expect on most predefined
  4542.              variables or dbm array values.)  Always returns  the
  4543.              undefined  value.   You  can omit the EXPR, in which
  4544.              case nothing is undefined,  but  you  still  get  an
  4545.              undefined value that you could, for instance, return
  4546.              from a subroutine.  Examples:
  4547.  
  4548.  
  4549.  
  4550.  
  4551.                                                                69
  4552.  
  4553.  
  4554.  
  4555.  
  4556.  
  4557.  
  4558. PERL(1)                  USER COMMANDS                    PERL(1)
  4559.  
  4560.  
  4561.  
  4562.                   undef $foo;
  4563.                   undef $bar{'blurfl'};
  4564.                   undef @ary;
  4565.                   undef %assoc;
  4566.                   undef &mysub;
  4567.                   return (wantarray ? () : undef) if $they_blew_it;
  4568.  
  4569.  
  4570.      unlink(LIST)
  4571.  
  4572.      unlink LIST
  4573.              Deletes a list of  files.   Returns  the  number  of
  4574.              files  successfully  deleted.   (MS-DOS users should
  4575.              note that open files cannot be deleted.)
  4576.  
  4577.                   $cnt = unlink 'a', 'b', 'c';
  4578.                   unlink @goners;
  4579.                   unlink <*.bak>;
  4580.  
  4581.              Note: unlink will not delete directories unless  you
  4582.              are  superuser  and the ----UUUU flag is supplied to _p_e_r_l.
  4583.              Even if these conditions are  met,  be  warned  that
  4584.              unlinking  a  directory  can  inflict damage on your
  4585.              filesystem.  Use rmdir instead.
  4586.  
  4587.      unpack(TEMPLATE,EXPR)
  4588.              Unpack does the reverse of pack: it takes  a  string
  4589.              representing  a structure and expands it out into an
  4590.              array value,  returning  the  array  value.   (In  a
  4591.              scalar  context,  it  merely returns the first value
  4592.              produced.)  The TEMPLATE has the same format  as  in
  4593.              the  pack  function.   Here's a subroutine that does
  4594.              substring:
  4595.  
  4596.                   sub substr {
  4597.                        local($what,$where,$howmuch) = @_;
  4598.                        unpack("x$where a$howmuch", $what);
  4599.                   }
  4600.  
  4601.              and then there's
  4602.  
  4603.                   sub ord { unpack("c",$_[0]); }
  4604.  
  4605.              In addition, you may prefix a field with a %<number>
  4606.              to indicate that you want a <number>-bit checksum of
  4607.              the items instead of the items themselves.   Default
  4608.              is  a  16-bit  checksum.  For example, the following
  4609.              computes the same number as the System  V  sum  pro-
  4610.              gram:
  4611.  
  4612.  
  4613.  
  4614.  
  4615.  
  4616.  
  4617.                                                                70
  4618.  
  4619.  
  4620.  
  4621.  
  4622.  
  4623.  
  4624. PERL(1)                  USER COMMANDS                    PERL(1)
  4625.  
  4626.  
  4627.  
  4628.                   while (<>) {
  4629.                       $checksum += unpack("%16C*", $_);
  4630.                   }
  4631.                   $checksum %= 65536;
  4632.  
  4633.  
  4634.      unshift(ARRAY,LIST)
  4635.              Does the opposite of a _s_h_i_f_t.  Or the opposite of  a
  4636.              _p_u_s_h,  depending  on  how  you look at it.  Prepends
  4637.              list to the front of  the  array,  and  returns  the
  4638.              number of elements in the new array.
  4639.  
  4640.                   unshift(ARGV, '-e') unless $ARGV[0] =~ /^-/;
  4641.  
  4642.  
  4643.      utime(LIST)
  4644.  
  4645.      utime LIST
  4646.              Changes the access and modification  times  on  each
  4647.              file  of a list of files.  The first two elements of
  4648.              the list must be the NUMERICAL access and  modifica-
  4649.              tion  times,  in that order.  (On MS-DOS, the access
  4650.              time field is ignored.)  Returns the number of files
  4651.              successfully  changed.   The inode modification time
  4652.              of each file is set to the current time.  Example of
  4653.              a "touch" command:
  4654.  
  4655.                   #!/usr/bin/perl
  4656.                   $now = time;
  4657.                   utime $now, $now, @ARGV;
  4658.  
  4659.  
  4660.      values(ASSOC_ARRAY)
  4661.  
  4662.      values ASSOC_ARRAY
  4663.              Returns a normal array consisting of all the  values
  4664.              of  the  named  associative  array.   The values are
  4665.              returned in an apparently random order,  but  it  is
  4666.              the  same order as either the keys() or each() func-
  4667.              tion would produce on  the  same  array.   See  also
  4668.              keys() and each().
  4669.  
  4670.      vec(EXPR,OFFSET,BITS)
  4671.              Treats a string as a vector  of  unsigned  integers,
  4672.              and  returns  the  value  of the bitfield specified.
  4673.              May also be assigned to.  BITS must be  a  power  of
  4674.              two from 1 to 32.
  4675.  
  4676.              Vectors created with vec() can also  be  manipulated
  4677.              with  the  logical  operators |, & and ^, which will
  4678.              assume a bit vector operation is desired  when  both
  4679.              operands  are  strings.   This interpretation is not
  4680.  
  4681.  
  4682.  
  4683.                                                                71
  4684.  
  4685.  
  4686.  
  4687.  
  4688.  
  4689.  
  4690. PERL(1)                  USER COMMANDS                    PERL(1)
  4691.  
  4692.  
  4693.  
  4694.              enabled unless there is at least one vec()  in  your
  4695.              program, to protect older programs.
  4696.  
  4697.              To transform a bit vector into a string or array  of
  4698.              0's and 1's, use these:
  4699.  
  4700.                   $bits = unpack("b*", $vector);
  4701.                   @bits = split(//, unpack("b*", $vector));
  4702.  
  4703.              If you know the exact length in bits, it can be used
  4704.              in place of the *.
  4705.  
  4706.      wait    Waits for a child process to terminate  and  returns
  4707.              the  pid of the deceased process, or -1 if there are
  4708.              no child processes.  The status is returned in $?.
  4709.  
  4710.      waitpid(PID,FLAGS)
  4711.              Waits for a particular child  process  to  terminate
  4712.              and  returns  the pid of the deceased process, or -1
  4713.              if there is no such child process.  Not supported on
  4714.              MS-DOS.
  4715.  
  4716.      wantarray
  4717.              Returns true if the context of the currently execut-
  4718.              ing  subroutine  is  looking  for  an  array  value.
  4719.              Returns false  if  the  context  is  looking  for  a
  4720.              scalar.
  4721.  
  4722.                   return wantarray ? () : undef;
  4723.  
  4724.  
  4725.      warn(LIST)
  4726.  
  4727.      warn LIST
  4728.              Produces a message on STDERR just  like  "die",  but
  4729.              doesn't exit.
  4730.  
  4731.      write(FILEHANDLE)
  4732.  
  4733.      write(EXPR)
  4734.  
  4735.      write   Writes a formatted record (possibly  multi-line)  to
  4736.              the specified file, using the format associated with
  4737.              that file.  By default the format for a file is  the
  4738.              one  having the same name is the filehandle, but the
  4739.              format for the current output channel  (see  _s_e_l_e_c_t)
  4740.              may  be  set explicitly by assigning the name of the
  4741.              format to the $~ variable.
  4742.  
  4743.              Top of form processing is handled automatically:  if
  4744.              there  is  insufficient room on the current page for
  4745.              the  formatted  record,  the  page  is  advanced  by
  4746.  
  4747.  
  4748.  
  4749.                                                                72
  4750.  
  4751.  
  4752.  
  4753.  
  4754.  
  4755.  
  4756. PERL(1)                  USER COMMANDS                    PERL(1)
  4757.  
  4758.  
  4759.  
  4760.              writing a form feed, a special top-of-page format is
  4761.              used to format the new page  header,  and  then  the
  4762.              record  is written.  By default the top-of-page for-
  4763.              mat is "top", but it may be set  to  the  format  of
  4764.              your  choice  by  assigning the name to the $^ vari-
  4765.              able.  The number of lines remaining on the  current
  4766.              page  is  in  variable  $-, which can be set to 0 to
  4767.              force a new page.
  4768.  
  4769.              If FILEHANDLE is unspecified,  output  goes  to  the
  4770.              current  default output channel, which starts out as
  4771.              _S_T_D_O_U_T but may be changed by  the  _s_e_l_e_c_t  operator.
  4772.              If the FILEHANDLE is an EXPR, then the expression is
  4773.              evaluated and the resulting string is used  to  look
  4774.              up the name of the FILEHANDLE at run time.  For more
  4775.              on formats, see the section on formats later on.
  4776.  
  4777.              Note that write is NOT the opposite of read.
  4778.  
  4779.      PPPPrrrreeeecccceeeeddddeeeennnncccceeee
  4780.  
  4781.      _P_e_r_l operators have the  following  associativity  and  pre-
  4782.      cedence:
  4783.  
  4784.      nonassoc  print printf exec system sort reverse
  4785.                     chmod chown kill unlink utime die return
  4786.      left      ,
  4787.      right     = += -= *= etc.
  4788.      right     ?:
  4789.      nonassoc  ..
  4790.      left      ||
  4791.      left      &&
  4792.      left      | ^
  4793.      left      &
  4794.      nonassoc  == != <=> eq ne cmp
  4795.      nonassoc  < > <= >= lt gt le ge
  4796.      nonassoc  chdir exit eval reset sleep rand umask
  4797.      nonassoc  -r -w -x etc.
  4798.      left      << >>
  4799.      left      + - .
  4800.      left      * / % x
  4801.      left      =~ !~
  4802.      right     ! ~ and unary minus
  4803.      right     **
  4804.      nonassoc  ++ --
  4805.      left      '('
  4806.  
  4807.      As mentioned earlier, if any list operator (print, etc.)  or
  4808.      any  unary  operator  (chdir,  etc.)   is followed by a left
  4809.      parenthesis as the next token on the same line, the operator
  4810.      and  arguments within parentheses are taken to be of highest
  4811.      precedence, just like a normal function call.  Examples:
  4812.  
  4813.  
  4814.  
  4815.                                                                73
  4816.  
  4817.  
  4818.  
  4819.  
  4820.  
  4821.  
  4822. PERL(1)                  USER COMMANDS                    PERL(1)
  4823.  
  4824.  
  4825.  
  4826.           chdir $foo || die;       # (chdir $foo) || die
  4827.           chdir($foo) || die;      # (chdir $foo) || die
  4828.           chdir ($foo) || die;     # (chdir $foo) || die
  4829.           chdir +($foo) || die;    # (chdir $foo) || die
  4830.  
  4831.      but, because * is higher precedence than ||:
  4832.  
  4833.           chdir $foo * 20;         # chdir ($foo * 20)
  4834.           chdir($foo) * 20;        # (chdir $foo) * 20
  4835.           chdir ($foo) * 20;       # (chdir $foo) * 20
  4836.           chdir +($foo) * 20;      # chdir ($foo * 20)
  4837.  
  4838.           rand 10 * 20;            # rand (10 * 20)
  4839.           rand(10) * 20;           # (rand 10) * 20
  4840.           rand (10) * 20;          # (rand 10) * 20
  4841.           rand +(10) * 20;         # rand (10 * 20)
  4842.  
  4843.      In the absence of parentheses, the precedence of list opera-
  4844.      tors  such  as  print,  sort or chmod is either very high or
  4845.      very low depending on whether you look at the left  side  of
  4846.      operator or the right side of it.  For example, in
  4847.  
  4848.           @ary = (1, 3, sort 4, 2);
  4849.           print @ary;         # prints 1324
  4850.  
  4851.      the commas on the right of the sort are evaluated before the
  4852.      sort,  but  the  commas on the left are evaluated after.  In
  4853.      other words, list operators tend to gobble up all the  argu-
  4854.      ments that follow them, and then act like a simple term with
  4855.      regard to the preceding expression.  Note that you  have  to
  4856.      be careful with parens:
  4857.  
  4858.           # These evaluate exit before doing the print:
  4859.           print($foo, exit);  # Obviously not what you want.
  4860.           print $foo, exit;   # Nor is this.
  4861.  
  4862.           # These do the print before evaluating exit:
  4863.           (print $foo), exit; # This is what you want.
  4864.           print($foo), exit;  # Or this.
  4865.           print ($foo), exit; # Or even this.
  4866.  
  4867.      Also note that
  4868.  
  4869.           print ($foo & 255) + 1, "\n";
  4870.  
  4871.      probably doesn't do what you expect at first glance.
  4872.  
  4873.      SSSSuuuubbbbrrrroooouuuuttttiiiinnnneeeessss
  4874.  
  4875.      A subroutine may be declared as follows:
  4876.  
  4877.          sub NAME BLOCK
  4878.  
  4879.  
  4880.  
  4881.                                                                74
  4882.  
  4883.  
  4884.  
  4885.  
  4886.  
  4887.  
  4888. PERL(1)                  USER COMMANDS                    PERL(1)
  4889.  
  4890.  
  4891.  
  4892.      Any arguments passed to the routine come  in  as  array  @_,
  4893.      that is ($_[0], $_[1], ...).  The array @_ is a local array,
  4894.      but its values are references to the actual  scalar  parame-
  4895.      ters.   The  return  value of the subroutine is the value of
  4896.      the last expression evaluated, and can be  either  an  array
  4897.      value  or  a  scalar value.  Alternately, a return statement
  4898.      may be used to specify the returned value and exit the  sub-
  4899.      routine.  To create local variables see the _l_o_c_a_l operator.
  4900.  
  4901.      A subroutine is called using the _d_o operator or the & opera-
  4902.      tor.
  4903.  
  4904.      Example:
  4905.  
  4906.           sub MAX {
  4907.                local($max) = pop(@_);
  4908.                foreach $foo (@_) {
  4909.                     $max = $foo if $max < $foo;
  4910.                }
  4911.                $max;
  4912.           }
  4913.  
  4914.           ...
  4915.           $bestday = &MAX($mon,$tue,$wed,$thu,$fri);
  4916.  
  4917.      Example:
  4918.  
  4919.           # get a line, combining continuation lines
  4920.           #  that start with whitespace
  4921.           sub get_line {
  4922.                $thisline = $lookahead;
  4923.                line: while ($lookahead = <STDIN>) {
  4924.                     if ($lookahead =~ /^[ \t]/) {
  4925.                          $thisline .= $lookahead;
  4926.                     }
  4927.                     else {
  4928.                          last line;
  4929.                     }
  4930.                }
  4931.                $thisline;
  4932.           }
  4933.  
  4934.           $lookahead = <STDIN>;    # get first line
  4935.           while ($_ = do get_line()) {
  4936.                ...
  4937.           }
  4938.  
  4939.  
  4940.  
  4941.  
  4942.  
  4943.  
  4944.  
  4945.  
  4946.  
  4947.                                                                75
  4948.  
  4949.  
  4950.  
  4951.  
  4952.  
  4953.  
  4954. PERL(1)                  USER COMMANDS                    PERL(1)
  4955.  
  4956.  
  4957.  
  4958.      Use array assignment to a local list to name your formal arguments:
  4959.  
  4960.           sub maybeset {
  4961.                local($key, $value) = @_;
  4962.                $foo{$key} = $value unless $foo{$key};
  4963.           }
  4964.  
  4965.      This also has the effect of turning  call-by-reference  into
  4966.      call-by-value, since the assignment copies the values.
  4967.  
  4968.      Subroutines may be called recursively.  If a  subroutine  is
  4969.      called  using the & form, the argument list is optional.  If
  4970.      omitted, no @_ array is set up for the  subroutine;  the  @_
  4971.      array  at  the  time  of  the  call is visible to subroutine
  4972.      instead.
  4973.  
  4974.           do foo(1,2,3);      # pass three arguments
  4975.           &foo(1,2,3);        # the same
  4976.  
  4977.           do foo();      # pass a null list
  4978.           &foo();             # the same
  4979.           &foo;               # pass no arguments--more efficient
  4980.  
  4981.  
  4982.      PPPPaaaassssssssiiiinnnngggg BBBByyyy RRRReeeeffffeeeerrrreeeennnncccceeee
  4983.  
  4984.      Sometimes you don't want to pass the value of an array to  a
  4985.      subroutine but rather the name of it, so that the subroutine
  4986.      can modify the global copy of it rather than working with  a
  4987.      local  copy.   In perl you can refer to all the objects of a
  4988.      particular name by prefixing the name  with  a  star:  *foo.
  4989.      When  evaluated,  it produces a scalar value that represents
  4990.      all the objects of that name, including any filehandle, for-
  4991.      mat or subroutine.  When assigned to within a local() opera-
  4992.      tion, it causes the name mentioned to refer  to  whatever  *
  4993.      value was assigned to it.  Example:
  4994.  
  4995.           sub doubleary {
  4996.               local(*someary) = @_;
  4997.               foreach $elem (@someary) {
  4998.                $elem *= 2;
  4999.               }
  5000.           }
  5001.           do doubleary(*foo);
  5002.           do doubleary(*bar);
  5003.  
  5004.      Assignment to *name is currently recommended only  inside  a
  5005.      local().  You can actually assign to *name anywhere, but the
  5006.      previous referent of *name may be  stranded  forever.   This
  5007.      may or may not bother you.
  5008.  
  5009.      Note that scalars are already passed by  reference,  so  you
  5010.  
  5011.  
  5012.  
  5013.                                                                76
  5014.  
  5015.  
  5016.  
  5017.  
  5018.  
  5019.  
  5020. PERL(1)                  USER COMMANDS                    PERL(1)
  5021.  
  5022.  
  5023.  
  5024.      can  modify scalar arguments without using this mechanism by
  5025.      referring explicitly to the $_[nnn] in  question.   You  can
  5026.      modify  all the elements of an array by passing all the ele-
  5027.      ments as scalars, but you have to use  the  *  mechanism  to
  5028.      push,  pop  or change the size of an array.  The * mechanism
  5029.      will probably be more efficient in any case.
  5030.  
  5031.      Since a *name value contains unprintable binary data, if  it
  5032.      is  used as an argument in a print, or as a %s argument in a
  5033.      printf or sprintf, it then has the value '*name', just so it
  5034.      prints out pretty.
  5035.  
  5036.      Even if you don't want to modify an array, this mechanism is
  5037.      useful  for  passing multiple arrays in a single LIST, since
  5038.      normally the LIST mechanism will merge all the array  values
  5039.      so that you can't extract out the individual arrays.
  5040.  
  5041.      RRRReeeegggguuuullllaaaarrrr EEEExxxxpppprrrreeeessssssssiiiioooonnnnssss
  5042.  
  5043.      The patterns used in pattern matching  are  regular  expres-
  5044.      sions  such  as  those supplied in the Version 8 regexp rou-
  5045.      tines.  (In  fact,  the  routines  are  derived  from  Henry
  5046.      Spencer's  freely redistributable reimplementation of the V8
  5047.      routines.)  In addition, \w matches an alphanumeric  charac-
  5048.      ter  (including  "_")  and \W a nonalphanumeric.  Word boun-
  5049.      daries may be matched by \b, and non-boundaries  by  \B.   A
  5050.      whitespace character is matched by \s, non-whitespace by \S.
  5051.      A numeric character is matched by  \d,  non-numeric  by  \D.
  5052.      You  may  use \w, \s and \d within character classes.  Also,
  5053.      \n, \r, \f, \t and \NNN have their  normal  interpretations.
  5054.      Within character classes \b represents backspace rather than
  5055.      a word boundary.  Alternatives may be separated by  |.   The
  5056.      bracketing construct ( ... ) may also be used, in which case
  5057.      \<digit> matches the digit'th substring.   (Outside  of  the
  5058.      pattern,  always  use  $ instead of \ in front of the digit.
  5059.      The scope of $<digit> (and $`, $& and $') extends to the end
  5060.      of  the  enclosing BLOCK or eval string, or to the next pat-
  5061.      tern match with subexpressions.  The \<digit> notation some-
  5062.      times  works  outside the current pattern, but should not be
  5063.      relied upon.)  You may have as many parentheses as you wish.
  5064.      If  you have more than 9 substrings, the variables $10, $11,
  5065.      ... refer to the corresponding substring.  Within  the  pat-
  5066.      tern,  \10, \11, etc. refer back to substrings if there have
  5067.      been at least that many left parens  before  the  backrefer-
  5068.      ence.  Otherwise (for backward compatibilty) \10 is the same
  5069.      as \010, a backspace, and \11 the same as \011, a tab.   And
  5070.      so on.  (\1 through \9 are always backreferences.)
  5071.  
  5072.      $+ returns whatever the  last  bracket  match  matched.   $&
  5073.      returns  the  entire matched string.  ($0 used to return the
  5074.      same thing, but not any more.)  $` returns everything before
  5075.      the matched string.  $' returns everything after the matched
  5076.  
  5077.  
  5078.  
  5079.                                                                77
  5080.  
  5081.  
  5082.  
  5083.  
  5084.  
  5085.  
  5086. PERL(1)                  USER COMMANDS                    PERL(1)
  5087.  
  5088.  
  5089.  
  5090.      string.  Examples:
  5091.  
  5092.           s/^([^ ]*) *([^ ]*)/$2 $1/;   # swap first two words
  5093.  
  5094.           if (/Time: (..):(..):(..)/) {
  5095.                $hours = $1;
  5096.                $minutes = $2;
  5097.                $seconds = $3;
  5098.           }
  5099.  
  5100.      By default, the ^ character is only guaranteed to  match  at
  5101.      the beginning of the string, the $ character only at the end
  5102.      (or before the newline at the end)  and  _p_e_r_l  does  certain
  5103.      optimizations  with  the assumption that the string contains
  5104.      only one line.  The behavior of ^ and $ on embedded newlines
  5105.      will  be  inconsistent.   You  may, however, wish to treat a
  5106.      string as a multi-line buffer, such that the  ^  will  match
  5107.      after any newline within the string, and $ will match before
  5108.      any newline.  At the cost of a little more overhead, you can
  5109.      do this by setting the variable $* to 1.  Setting it back to
  5110.      0 makes _p_e_r_l revert to its old behavior.
  5111.  
  5112.      To facilitate  multi-line  substitutions,  the  .  character
  5113.      never matches a newline (even when $* is 0).  In particular,
  5114.      the following leaves a newline on the $_ string:
  5115.  
  5116.           $_ = <STDIN>;
  5117.           s/.*(some_string).*/$1/;
  5118.  
  5119.      If the newline is unwanted, try one of
  5120.  
  5121.           s/.*(some_string).*\n/$1/;
  5122.           s/.*(some_string)[^\000]*/$1/;
  5123.           s/.*(some_string)(.|\n)*/$1/;
  5124.           chop; s/.*(some_string).*/$1/;
  5125.           /(some_string)/ && ($_ = $1);
  5126.  
  5127.      Any item of a regular expression may be followed with digits
  5128.      in  curly  brackets  of  the  form  {n,m}, where n gives the
  5129.      minimum number of times to match the item and  m  gives  the
  5130.      maximum.   The  form  {n} is equivalent to {n,n} and matches
  5131.      exactly n times.  The form {n,} matches  n  or  more  times.
  5132.      (If  a  curly  bracket  occurs  in  any other context, it is
  5133.      treated  as  a  regular  character.)   The  *  modifier   is
  5134.      equivalent  to {0,}, the + modifier to {1,} and the ? modif-
  5135.      ier to {0,1}.  There is no limit to the size of n or m,  but
  5136.      large numbers will chew up more memory.
  5137.  
  5138.      You will note that all backslashed  metacharacters  in  _p_e_r_l
  5139.      are  alphanumeric,  such  as  \b, \w, \n.  Unlike some other
  5140.      regular expression languages, there are no backslashed  sym-
  5141.      bols  that aren't alphanumeric.  So anything that looks like
  5142.  
  5143.  
  5144.  
  5145.                                                                78
  5146.  
  5147.  
  5148.  
  5149.  
  5150.  
  5151.  
  5152. PERL(1)                  USER COMMANDS                    PERL(1)
  5153.  
  5154.  
  5155.  
  5156.      \\, \(, \), \<, \>, \{, or \} is  always  interpreted  as  a
  5157.      literal  character, not a metacharacter.  This makes it sim-
  5158.      ple to quote a string that you want to use for a pattern but
  5159.      that  you  are  afraid might contain metacharacters.  Simply
  5160.      quote all the non-alphanumeric characters:
  5161.  
  5162.           $pattern =~ s/(\W)/\\$1/g;
  5163.  
  5164.  
  5165.      FFFFoooorrrrmmmmaaaattttssss
  5166.  
  5167.      Output record formats for use with the  _w_r_i_t_e  operator  may
  5168.      declared as follows:
  5169.  
  5170.          format NAME =
  5171.          FORMLIST
  5172.          .
  5173.  
  5174.      If name is omitted, format "STDOUT"  is  defined.   FORMLIST
  5175.      consists of a sequence of lines, each of which may be of one
  5176.      of three types:
  5177.  
  5178.      1.  A comment.
  5179.  
  5180.      2.  A "picture" line giving the format for one output line.
  5181.  
  5182.      3.  An argument line supplying values to plug into a picture
  5183.          line.
  5184.  
  5185.      Picture lines are printed exactly as they look,  except  for
  5186.      certain  fields  that substitute values into the line.  Each
  5187.      picture field starts with either @ or ^.  The @  field  (not
  5188.      to  be confused with the array marker @) is the normal case;
  5189.      ^ fields are used to do rudimentary  multi-line  text  block
  5190.      filling.  The length of the field is supplied by padding out
  5191.      the field with multiple <, >, or |  characters  to  specify,
  5192.      respectively,  left  justification,  right justification, or
  5193.      centering.  As an alternate form of right justification, you
  5194.      may  also use # characters (with an optional .) to specify a
  5195.      numeric field.  (Use of ^ instead of @ causes the  field  to
  5196.      be blanked if undefined.)  If any of the values supplied for
  5197.      these fields contains a newline, only the  text  up  to  the
  5198.      newline  is  printed.   The special field @* can be used for
  5199.      printing multi-line values.  It should appear by itself on a
  5200.      line.
  5201.  
  5202.      The values are specified on the following line, in the  same
  5203.      order as the picture fields.  The values should be separated
  5204.      by commas.
  5205.  
  5206.      Picture fields that begin with ^ rather than @  are  treated
  5207.      specially.   The  value  supplied  must be a scalar variable
  5208.  
  5209.  
  5210.  
  5211.                                                                79
  5212.  
  5213.  
  5214.  
  5215.  
  5216.  
  5217.  
  5218. PERL(1)                  USER COMMANDS                    PERL(1)
  5219.  
  5220.  
  5221.  
  5222.      name which contains a text string.  _P_e_r_l puts as  much  text
  5223.      as  it  can  into the field, and then chops off the front of
  5224.      the string so that the next time the variable is referenced,
  5225.      more  of  the text can be printed.  Normally you would use a
  5226.      sequence of fields in a vertical stack to print out a  block
  5227.      of text.  If you like, you can end the final field with ...,
  5228.      which will appear in the output if the text was too long  to
  5229.      appear in its entirety.  You can change which characters are
  5230.      legal to break on by changing the variable $: to a  list  of
  5231.      the desired characters.
  5232.  
  5233.      Since use of ^ fields can produce variable length records if
  5234.      the  text  to  be formatted is short, you can suppress blank
  5235.      lines by putting the tilde (~)  character  anywhere  in  the
  5236.      line.  (Normally you should put it in the front if possible,
  5237.      for visibility.)  The tilde will be translated  to  a  space
  5238.      upon  output.   If  you put a second tilde contiguous to the
  5239.      first, the line will be repeated until all the fields on the
  5240.      line  are  exhausted.  (If you use a field of the @ variety,
  5241.      the expression you supply had better not give the same value
  5242.      every time forever!)
  5243.  
  5244.      Examples:
  5245.  
  5246.      # a report on the /etc/passwd file
  5247.      format STDOUT_TOP =
  5248.                              Passwd File
  5249.      Name                Login    Office   Uid   Gid Home
  5250.      ------------------------------------------------------------------
  5251.      .
  5252.      format STDOUT =
  5253.      @<<<<<<<<<<<<<<<<<< @||||||| @<<<<<<@>>>> @>>>> @<<<<<<<<<<<<<<<<<
  5254.      $name,              $login,  $office,$uid,$gid, $home
  5255.      .
  5256.  
  5257.  
  5258.  
  5259.  
  5260.  
  5261.  
  5262.  
  5263.  
  5264.  
  5265.  
  5266.  
  5267.  
  5268.  
  5269.  
  5270.  
  5271.  
  5272.  
  5273.  
  5274.  
  5275.  
  5276.  
  5277.                                                                80
  5278.  
  5279.  
  5280.  
  5281.  
  5282.  
  5283.  
  5284. PERL(1)                  USER COMMANDS                    PERL(1)
  5285.  
  5286.  
  5287.  
  5288.      # a report from a bug report form
  5289.      format STDOUT_TOP =
  5290.                              Bug Reports
  5291.      @<<<<<<<<<<<<<<<<<<<<<<<     @|||         @>>>>>>>>>>>>>>>>>>>>>>>
  5292.      $system,                      $%,         $date
  5293.      ------------------------------------------------------------------
  5294.      .
  5295.      format STDOUT =
  5296.      Subject: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  5297.               $subject
  5298.      Index: @<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  5299.             $index,                       $description
  5300.      Priority: @<<<<<<<<<< Date: @<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  5301.                $priority,        $date,   $description
  5302.      From: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  5303.            $from,                         $description
  5304.      Assigned to: @<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  5305.                   $programmer,            $description
  5306.      ~                                    ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  5307.                                           $description
  5308.      ~                                    ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  5309.                                           $description
  5310.      ~                                    ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  5311.                                           $description
  5312.      ~                                    ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  5313.                                           $description
  5314.      ~                                    ^<<<<<<<<<<<<<<<<<<<<<<<...
  5315.                                           $description
  5316.      .
  5317.  
  5318.      It is possible to intermix prints with writes  on  the  same
  5319.      output  channel, but you'll have to handle $- (lines left on
  5320.      the page) yourself.
  5321.  
  5322.      If you are printing lots of fields that are  usually  blank,
  5323.      you   should  consider  using  the  reset  operator  between
  5324.      records.  Not only is it more efficient, but it can  prevent
  5325.      the bug of adding another field and forgetting to zero it.
  5326.  
  5327.      IIIInnnntttteeeerrrrpppprrrroooocccceeeessssssss CCCCoooommmmmmmmuuuunnnniiiiccccaaaattttiiiioooonnnn
  5328.  
  5329.      The IPC facilities of perl are built on the Berkeley  socket
  5330.      mechanism.   If  you don't have sockets, you can ignore this
  5331.      section.  (Sockets are not yet supported on MS-DOS.)
  5332.  
  5333.      PPPPrrrreeeeddddeeeeffffiiiinnnneeeedddd NNNNaaaammmmeeeessss
  5334.  
  5335.      The following names have special meaning to _p_e_r_l.   I  could
  5336.      have used alphabetic symbols for some of these, but I didn't
  5337.      want to  take  the  chance  that  someone  would  say  reset
  5338.      "a-zA-Z"  and wipe them all out.  You'll just have to suffer
  5339.      along  with  these  silly  symbols.   Most  of   them   have
  5340.  
  5341.  
  5342.  
  5343.                                                                81
  5344.  
  5345.  
  5346.  
  5347.  
  5348.  
  5349.  
  5350. PERL(1)                  USER COMMANDS                    PERL(1)
  5351.  
  5352.  
  5353.  
  5354.      reasonable mnemonics, or analogues in one of the shells.
  5355.  
  5356.      $_      The default input and pattern-searching space.   The
  5357.              following pairs are equivalent:
  5358.  
  5359.                   while (<>) {...     # only equivalent in while!
  5360.                   while ($_ = <>) {...
  5361.  
  5362.                   /^Subject:/
  5363.                   $_ =~ /^Subject:/
  5364.  
  5365.                   y/a-z/A-Z/
  5366.                   $_ =~ y/a-z/A-Z/
  5367.  
  5368.                   chop
  5369.                   chop($_)
  5370.  
  5371.              (Mnemonic: underline is understood in certain opera-
  5372.              tions.)
  5373.  
  5374.      $.      The current input line number of the last filehandle
  5375.              that  was  read.   Readonly.   Remember that only an
  5376.              explicit close on the  filehandle  resets  the  line
  5377.              number.  Since <> never does an explicit close, line
  5378.              numbers increase across ARGV files (but see examples
  5379.              under  eof).  (Mnemonic: many programs use . to mean
  5380.              the current line number.)
  5381.  
  5382.      $/      The input  record  separator,  newline  by  default.
  5383.              Works  like  _a_w_k's  RS  variable, including treating
  5384.              blank lines as delimiters if set to the null string.
  5385.              You may set it to a multicharacter string to match a
  5386.              multi-character delimiter.  (Mnemonic: / is used  to
  5387.              delimit line boundaries when quoting poetry.)
  5388.  
  5389.      $,      The output field separator for the  print  operator.
  5390.              Ordinarily  the print operator simply prints out the
  5391.              comma separated fields you specify.  In order to get
  5392.              behavior  more  like  _a_w_k,  set this variable as you
  5393.              would set _a_w_k's OFS  variable  to  specify  what  is
  5394.              printed  between fields.  (Mnemonic: what is printed
  5395.              when there is a , in your print statement.)
  5396.  
  5397.      $"      This is like $, except  that  it  applies  to  array
  5398.              values  interpolated into a double-quoted string (or
  5399.              similar interpreted string).  Default  is  a  space.
  5400.              (Mnemonic: obvious, I think.)
  5401.  
  5402.      $\      The output record separator for the print  operator.
  5403.              Ordinarily  the print operator simply prints out the
  5404.              comma separated fields you specify, with no trailing
  5405.              newline  or  record  separator assumed.  In order to
  5406.  
  5407.  
  5408.  
  5409.                                                                82
  5410.  
  5411.  
  5412.  
  5413.  
  5414.  
  5415.  
  5416. PERL(1)                  USER COMMANDS                    PERL(1)
  5417.  
  5418.  
  5419.  
  5420.              get behavior more like _a_w_k, set this variable as you
  5421.              would  set  _a_w_k's  ORS  variable  to specify what is
  5422.              printed at the end of the print.  (Mnemonic: you set
  5423.              $\  instead  of  adding  \n at the end of the print.
  5424.              Also, it's just like /, but it's what you get "back"
  5425.              from _p_e_r_l.)
  5426.  
  5427.      $#      The output format for printed numbers.   This  vari-
  5428.              able is a half-hearted attempt to emulate _a_w_k's OFMT
  5429.              variable.  There are times, however,  when  _a_w_k  and
  5430.              _p_e_r_l  have  differing  notions  of  what  is in fact
  5431.              numeric.  Also, the initial value  is  %.20g  rather
  5432.              than  %.6g,  so you need to set $# explicitly to get
  5433.              _a_w_k's value.  (Mnemonic: # is the number sign.)
  5434.  
  5435.      $%      The current page number of  the  currently  selected
  5436.              output  channel.   (Mnemonic:  %  is  page number in
  5437.              nroff.)
  5438.  
  5439.      $=      The current page length  (printable  lines)  of  the
  5440.              currently  selected  output channel.  Default is 60.
  5441.              (Mnemonic: = has horizontal lines.)
  5442.  
  5443.      $-      The  number  of  lines  left  on  the  page  of  the
  5444.              currently   selected   output  channel.   (Mnemonic:
  5445.              lines_on_page - lines_printed.)
  5446.  
  5447.      $~      The name  of  the  current  report  format  for  the
  5448.              currently  selected output channel.  Default is name
  5449.              of the filehandle.  (Mnemonic: brother to $^.)
  5450.  
  5451.      $^      The name of the current top-of-page format  for  the
  5452.              currently  selected output channel.  Default is name
  5453.              of the filehandle with "_TOP" appended.   (Mnemonic:
  5454.              points to top of page.)
  5455.  
  5456.      $|      If set to nonzero, forces a flush after every  write
  5457.              or  print  on the currently selected output channel.
  5458.              Default is 0.  Note that _S_T_D_O_U_T  will  typically  be
  5459.              line buffered if output is to the terminal and block
  5460.              buffered otherwise.  Setting this variable is useful
  5461.              primarily when you are outputting to a pipe, such as
  5462.              when you are running a _p_e_r_l  script  under  rsh  and
  5463.              want   to   see   the   output  as  it's  happening.
  5464.              (Mnemonic: when you want your  pipes  to  be  piping
  5465.              hot.)
  5466.  
  5467.      $$      The process number of the _p_e_r_l running this  script.
  5468.              (Mnemonic:  same  as  shells.)   On  MS-DOS, this is
  5469.              _p_e_r_l's PSP (program segment prefix) segment.
  5470.  
  5471.  
  5472.  
  5473.  
  5474.  
  5475.                                                                83
  5476.  
  5477.  
  5478.  
  5479.  
  5480.  
  5481.  
  5482. PERL(1)                  USER COMMANDS                    PERL(1)
  5483.  
  5484.  
  5485.  
  5486.      $?      The status returned by the last pipe close, backtick
  5487.              (``)  command or _s_y_s_t_e_m operator.  Note that this is
  5488.              the status word returned by the wait() system  call,
  5489.              so  the exit value of the subprocess is actually ($?
  5490.              >> 8).  $? & 255 gives which  signal,  if  any,  the
  5491.              process  died  from,  and  whether  there was a core
  5492.              dump.  MS-DOS users  should  note  that  the  MS-DOS
  5493.              return values are fudged internally so that $? gives
  5494.              Unix-like results.  (Mnemonic:  similar  to  sh  and
  5495.              ksh.)
  5496.  
  5497.      $&      The string matched by the last  pattern  match  (not
  5498.              counting  any  matches hidden within a BLOCK or eval
  5499.              enclosed by the current BLOCK).  (Mnemonic:  like  &
  5500.              in some editors.)
  5501.  
  5502.      $`      The string preceding whatever  was  matched  by  the
  5503.              last  pattern match (not counting any matches hidden
  5504.              within a BLOCK  or  eval  enclosed  by  the  current
  5505.              BLOCK).    (Mnemonic:  `  often  precedes  a  quoted
  5506.              string.)
  5507.  
  5508.      $'      The string following whatever  was  matched  by  the
  5509.              last  pattern match (not counting any matches hidden
  5510.              within a BLOCK  or  eval  enclosed  by  the  current
  5511.              BLOCK).    (Mnemonic:   '  often  follows  a  quoted
  5512.              string.)  Example:
  5513.  
  5514.                   $_ = 'abcdefghi';
  5515.                   /def/;
  5516.                   print "$`:$&:$'\n";      # prints abc:def:ghi
  5517.  
  5518.  
  5519.      $+      The last bracket matched by the last search pattern.
  5520.              This  is  useful if you don't know which of a set of
  5521.              alternative patterns matched.  For example:
  5522.  
  5523.                  /Version: (.*)|Revision: (.*)/ && ($rev = $+);
  5524.  
  5525.              (Mnemonic: be positive and forward looking.)
  5526.  
  5527.      $*      Set to 1 to do multiline matching within a string, 0
  5528.              to tell _p_e_r_l that it can assume that strings contain
  5529.              a single line, for the purpose of optimizing pattern
  5530.              matches.  Pattern matches on strings containing mul-
  5531.              tiple newlines can produce confusing results when $*
  5532.              is  0.  Default is 0.  (Mnemonic: * matches multiple
  5533.              things.)  Note that this  variable  only  influences
  5534.              the  interpretation  of  ^ and $.  A literal newline
  5535.              can be searched for even when $* == 0.
  5536.  
  5537.  
  5538.  
  5539.  
  5540.  
  5541.                                                                84
  5542.  
  5543.  
  5544.  
  5545.  
  5546.  
  5547.  
  5548. PERL(1)                  USER COMMANDS                    PERL(1)
  5549.  
  5550.  
  5551.  
  5552.      $0      Contains the name of the file  containing  the  _p_e_r_l
  5553.              script being executed.  Assigning to $0 modifies the
  5554.              argument  area  that   the   ps(1)   program   sees.
  5555.              (Mnemonic: same as sh and ksh.)
  5556.  
  5557.      $<digit>
  5558.              Contains the subpattern from the  corresponding  set
  5559.              of  parentheses  in  the  last  pattern matched, not
  5560.              counting patterns matched in nested blocks that have
  5561.              been exited already.  (Mnemonic: like \digit.)
  5562.  
  5563.      $[      The index of the first element in an array,  and  of
  5564.              the  first  character in a substring.  Default is 0,
  5565.              but you could set it to 1 to make _p_e_r_l  behave  more
  5566.              like  _a_w_k  (or  Fortran)  when subscripting and when
  5567.              evaluating  the  index()  and  substr()   functions.
  5568.              (Mnemonic: [ begins subscripts.)
  5569.  
  5570.      $]      The string printed out when you say "perl  -v".   It
  5571.              can  be  used  to  determine  at  the beginning of a
  5572.              script whether the perl  interpreter  executing  the
  5573.              script  is  in the right range of versions.  If used
  5574.              in  a  numeric  context,  returns  the   version   +
  5575.              patchlevel / 1000.  Example:
  5576.  
  5577.                   # see if getc is available
  5578.                      ($version,$patchlevel) =
  5579.                         $] =~ /(\d+\.\d+).*\nPatch level: (\d+)/;
  5580.                      print STDERR "(No filename completion available.)\n"
  5581.                         if $version * 1000 + $patchlevel < 2016;
  5582.  
  5583.              or, used numerically,
  5584.  
  5585.                   warn "No checksumming!\n" if $] < 3.019;
  5586.  
  5587.              (Mnemonic: Is this version  of  perl  in  the  right
  5588.              bracket?)
  5589.  
  5590.      $;      The subscript separator for multi-dimensional  array
  5591.              emulation.   If  you  refer  to an associative array
  5592.              element as
  5593.                   $foo{$a,$b,$c}
  5594.  
  5595.              it really means
  5596.  
  5597.                   $foo{join($;, $a, $b, $c)}
  5598.  
  5599.              But don't put
  5600.  
  5601.                   @foo{$a,$b,$c}      # a slice--note the @
  5602.  
  5603.              which means
  5604.  
  5605.  
  5606.  
  5607.                                                                85
  5608.  
  5609.  
  5610.  
  5611.  
  5612.  
  5613.  
  5614. PERL(1)                  USER COMMANDS                    PERL(1)
  5615.  
  5616.  
  5617.  
  5618.                   ($foo{$a},$foo{$b},$foo{$c})
  5619.  
  5620.              Default is "\034", the same as SUBSEP in _a_w_k.   Note
  5621.              that  if  your  keys contain binary data there might
  5622.              not be any safe value for $;.  (Mnemonic: comma (the
  5623.              syntactic  subscript separator) is a semi-semicolon.
  5624.              Yeah, I know, it's pretty lame, but  $,  is  already
  5625.              taken for something more important.)
  5626.  
  5627.      $!      If used in a numeric  context,  yields  the  current
  5628.              value  of  errno, with all the usual caveats.  (This
  5629.              means that you shouldn't depend on the value  of  $!
  5630.              to  be anything in particular unless you've gotten a
  5631.              specific error return indicating  a  system  error.)
  5632.              If  used in a string context, yields the correspond-
  5633.              ing system error string.  You can assign  to  $!  in
  5634.              order  to set errno if, for instance, you want $! to
  5635.              return the string for error n, or you  want  to  set
  5636.              the  exit  value  for  the die operator.  (Mnemonic:
  5637.              What just went bang?)
  5638.  
  5639.      $@      The perl syntax error message  from  the  last  eval
  5640.              command.  If null, the last eval parsed and executed
  5641.              correctly (although the operations you  invoked  may
  5642.              have  failed  in  the  normal  fashion).  (Mnemonic:
  5643.              Where was the syntax error "at"?)
  5644.  
  5645.      $<      The real uid of this process.  (Mnemonic:  it's  the
  5646.              uid you came FROM, if you're running setuid.)
  5647.  
  5648.      $>      The effective uid of this process.  Example:
  5649.  
  5650.                   $< = $>;  # set real uid to the effective uid
  5651.                   ($<,$>) = ($>,$<);  # swap real and effective uid
  5652.  
  5653.              (Mnemonic: it's the uid you went TO, if you're  run-
  5654.              ning  setuid.)   Note: $< and $> can only be swapped
  5655.              on machines supporting setreuid().
  5656.  
  5657.      $(      The real gid of this  process.   If  you  are  on  a
  5658.              machine  that supports membership in multiple groups
  5659.              simultaneously, gives  a  space  separated  list  of
  5660.              groups  you  are  in.   The  first number is the one
  5661.              returned by getgid(), and  the  subsequent  ones  by
  5662.              getgroups(),  one  of  which  may be the same as the
  5663.              first number.  (Mnemonic: parentheses  are  used  to
  5664.              GROUP  things.   The real gid is the group you LEFT,
  5665.              if you're running setgid.)
  5666.  
  5667.      $)      The effective gid of this process.  If you are on  a
  5668.              machine  that supports membership in multiple groups
  5669.              simultaneously, gives  a  space  separated  list  of
  5670.  
  5671.  
  5672.  
  5673.                                                                86
  5674.  
  5675.  
  5676.  
  5677.  
  5678.  
  5679.  
  5680. PERL(1)                  USER COMMANDS                    PERL(1)
  5681.  
  5682.  
  5683.  
  5684.              groups  you  are  in.   The  first number is the one
  5685.              returned by getegid(), and the  subsequent  ones  by
  5686.              getgroups(),  one  of  which  may be the same as the
  5687.              first number.  (Mnemonic: parentheses  are  used  to
  5688.              GROUP things.  The effective gid is the group that's
  5689.              RIGHT for you, if you're running setgid.)
  5690.  
  5691.              Note: $<, $>, $( and $) can only be set on  machines
  5692.              that  support the corresponding set[re][ug]id() rou-
  5693.              tine.  $( and $) can only  be  swapped  on  machines
  5694.              supporting setregid().
  5695.  
  5696.      $:      The current set of characters after which  a  string
  5697.              may  be broken to fill continuation fields (starting
  5698.              with ^) in a format.  Default is " \n-", to break on
  5699.              whitespace or hyphens.  (Mnemonic: a "colon" in poe-
  5700.              try is a part of a line.)
  5701.  
  5702.      $^D     The  current   value   of   the   debugging   flags.
  5703.              (Mnemonic: value of ----DDDD switch.)
  5704.  
  5705.      $^F     The maximum system file  descriptor,  ordinarily  2.
  5706.              System  file descriptors are passed to subprocesses,
  5707.              while higher file descriptors are  not.   During  an
  5708.              open,  system file descriptors are preserved even if
  5709.              the  open  fails.   Ordinary  file  descriptors  are
  5710.              closed before the open is attempted.
  5711.  
  5712.      $^I     The current value  of  the  inplace-edit  extension.
  5713.              Use  undef  to  disable inplace editing.  (Mnemonic:
  5714.              value of ----iiii switch.)
  5715.  
  5716.      $^P     The internal flag that the debugger clears  so  that
  5717.              it doesn't debug itself.  You could conceivable dis-
  5718.              able debugging yourself by clearing it.
  5719.  
  5720.      $^T     The time at  which  the  script  began  running,  in
  5721.              seconds since the epoch.  The values returned by the
  5722.              ----MMMM ,,,, ----AAAA and ----CCCC filetests are based on this value.
  5723.  
  5724.      $^W     The current value of the warning switch.  (Mnemonic:
  5725.              related to the ----wwww switch.)
  5726.  
  5727.      $^X     The name that Perl  itself  was  executed  as,  from
  5728.              argv[0].
  5729.  
  5730.      $ARGV   contains the name of the current file  when  reading
  5731.              from <>.
  5732.  
  5733.      @ARGV   The array ARGV contains the command  line  arguments
  5734.              intended  for  the  script.  Note that $#ARGV is the
  5735.              generally  number  of  arguments  minus  one,  since
  5736.  
  5737.  
  5738.  
  5739.                                                                87
  5740.  
  5741.  
  5742.  
  5743.  
  5744.  
  5745.  
  5746. PERL(1)                  USER COMMANDS                    PERL(1)
  5747.  
  5748.  
  5749.  
  5750.              $ARGV[0]  is  the  first  argument,  NOT the command
  5751.              name.  See $0 for the command name.
  5752.  
  5753.      @INC    The array INC contains the list of  places  to  look
  5754.              for  _p_e_r_l  scripts  to be evaluated by the "do EXPR"
  5755.              command or the "require" command.  It initially con-
  5756.              sists  of  the  arguments  to  any  ----IIII  command line
  5757.              switches, followed  by  the  default  _p_e_r_l  library,
  5758.              probably  "/usr/local/lib/perl", followed by ".", to
  5759.              represent the current directory.
  5760.  
  5761.      %INC    The associative array INC contains entries for  each
  5762.              filename   that   has  been  included  via  "do"  or
  5763.              "require".  The key is the filename  you  specified,
  5764.              and  the  value is the location of the file actually
  5765.              found.  The "require" command  uses  this  array  to
  5766.              determine  whether  a  given  file  has already been
  5767.              included.
  5768.  
  5769.      $ENV{expr}
  5770.              The associative  array  ENV  contains  your  current
  5771.              environment.   Setting  a  value  in ENV changes the
  5772.              environment for child processes.
  5773.  
  5774.      $SIG{expr}
  5775.              The associative array SIG  is  used  to  set  signal
  5776.              handlers for various signals.  Example:
  5777.  
  5778.                   sub handler {  # 1st argument is signal name
  5779.                        local($sig) = @_;
  5780.                        print "Caught a SIG$sig--shutting down\n";
  5781.                        close(LOG);
  5782.                        exit(0);
  5783.                   }
  5784.  
  5785.                   $SIG{'INT'} = 'handler';
  5786.                   $SIG{'QUIT'} = 'handler';
  5787.                   ...
  5788.                   $SIG{'INT'} = 'DEFAULT'; # restore default action
  5789.                   $SIG{'QUIT'} = 'IGNORE'; # ignore SIGQUIT
  5790.  
  5791.              The SIG array only contains values for  the  signals
  5792.              actually set within the perl script.
  5793.  
  5794.      PPPPaaaacccckkkkaaaaggggeeeessss
  5795.  
  5796.      Perl provides a mechanism for alternate namespaces  to  pro-
  5797.      tect  packages  from  stomping on each others variables.  By
  5798.      default, a perl script starts  compiling  into  the  package
  5799.      known as "main".  By use of the _p_a_c_k_a_g_e declaration, you can
  5800.      switch namespaces.  The scope of the package declaration  is
  5801.      from  the  declaration  itself  to  the end of the enclosing
  5802.  
  5803.  
  5804.  
  5805.                                                                88
  5806.  
  5807.  
  5808.  
  5809.  
  5810.  
  5811.  
  5812. PERL(1)                  USER COMMANDS                    PERL(1)
  5813.  
  5814.  
  5815.  
  5816.      block (the same scope as the local()  operator).   Typically
  5817.      it  would  be the first declaration in a file to be included
  5818.      by the "require" operator.  You can switch into a package in
  5819.      more than one place; it merely influences which symbol table
  5820.      is used by the compiler for the rest of that block.  You can
  5821.      refer to variables and filehandles in other packages by pre-
  5822.      fixing the identifier with the package  name  and  a  single
  5823.      quote.   If  the package name is null, the "main" package as
  5824.      assumed.
  5825.  
  5826.      Only identifiers starting with letters  are  stored  in  the
  5827.      packages  symbol table.  All other symbols are kept in pack-
  5828.      age "main".  In addition,  the  identifiers  STDIN,  STDOUT,
  5829.      STDERR,  ARGV, ARGVOUT, ENV, INC and SIG are forced to be in
  5830.      package "main", even when used for other purposes than their
  5831.      built-in  one.  Note also that, if you have a package called
  5832.      "m", "s" or "y", the you can't use the qualified form of  an
  5833.      identifier since it will be interpreted instead as a pattern
  5834.      match, a substitution or a translation.
  5835.  
  5836.      Eval'ed strings are compiled in the  package  in  which  the
  5837.      eval  was  compiled  in.   (Assignments  to $SIG{}, however,
  5838.      assume the signal handler specified is in the main  package.
  5839.      Qualify the signal handler name if you wish to have a signal
  5840.      handler in a package.)  For an example, examine perldb.pl in
  5841.      the  perl  library.  It initially switches to the DB package
  5842.      so that the debugger doesn't interfere with variables in the
  5843.      script you are trying to debug.  At various points, however,
  5844.      it temporarily switches back to the main package to evaluate
  5845.      various expressions in the context of the main package.
  5846.  
  5847.      The symbol table for a package happens to be stored  in  the
  5848.      associative array of that name prepended with an underscore.
  5849.      The value in each entry of the associative array is what you
  5850.      are  referring to when you use the *name notation.  In fact,
  5851.      the following have the same effect (in  package  main,  any-
  5852.      way), though the first is more efficient because it does the
  5853.      symbol table lookups at compile time:
  5854.  
  5855.           local(*foo) = *bar;
  5856.           local($_main{'foo'}) = $_main{'bar'};
  5857.  
  5858.      You can use this to print out all the variables in  a  pack-
  5859.      age,  for  instance.   Here  is  dumpvar.pl  from  the  perl
  5860.      library:
  5861.  
  5862.  
  5863.  
  5864.  
  5865.  
  5866.  
  5867.  
  5868.  
  5869.  
  5870.  
  5871.                                                                89
  5872.  
  5873.  
  5874.  
  5875.  
  5876.  
  5877.  
  5878. PERL(1)                  USER COMMANDS                    PERL(1)
  5879.  
  5880.  
  5881.  
  5882.           package dumpvar;
  5883.  
  5884.           sub main'dumpvar {
  5885.               ($package) = @_;
  5886.               local(*stab) = eval("*_$package");
  5887.               while (($key,$val) = each(%stab)) {
  5888.                   {
  5889.                       local(*entry) = $val;
  5890.                       if (defined $entry) {
  5891.                           print "\$$key = '$entry'\n";
  5892.                       }
  5893.                       if (defined @entry) {
  5894.                           print "\@$key = (\n";
  5895.                           foreach $num ($[ .. $#entry) {
  5896.                               print "  $num\t'",$entry[$num],"'\n";
  5897.                           }
  5898.                           print ")\n";
  5899.                       }
  5900.                       if ($key ne "_$package" && defined %entry) {
  5901.                           print "\%$key = (\n";
  5902.                           foreach $key (sort keys(%entry)) {
  5903.                               print "  $key\t'",$entry{$key},"'\n";
  5904.                           }
  5905.                           print ")\n";
  5906.                       }
  5907.                   }
  5908.               }
  5909.           }
  5910.  
  5911.      Note that, even though the subroutine is compiled in package
  5912.      dumpvar, the name of the subroutine is qualified so that its
  5913.      name is inserted into package "main".
  5914.  
  5915.      SSSSttttyyyylllleeee
  5916.  
  5917.      Each programmer will, of course, have his or her own prefer-
  5918.      ences  in  regards to formatting, but there are some general
  5919.      guidelines that will make your programs easier to read.
  5920.  
  5921.      1.  Just because you  CAN  do  something  a  particular  way
  5922.          doesn't  mean  that  you SHOULD do it that way.  _P_e_r_l is
  5923.          designed to give you several ways  to  do  anything,  so
  5924.          consider picking the most readable one.  For instance
  5925.  
  5926.               open(FOO,$foo) || die "Can't open $foo: $!";
  5927.  
  5928.          is better than
  5929.  
  5930.               die "Can't open $foo: $!" unless open(FOO,$foo);
  5931.  
  5932.          because the second way  hides  the  main  point  of  the
  5933.          statement in a modifier.  On the other hand
  5934.  
  5935.  
  5936.  
  5937.                                                                90
  5938.  
  5939.  
  5940.  
  5941.  
  5942.  
  5943.  
  5944. PERL(1)                  USER COMMANDS                    PERL(1)
  5945.  
  5946.  
  5947.  
  5948.               print "Starting analysis\n" if $verbose;
  5949.  
  5950.          is better than
  5951.  
  5952.               $verbose && print "Starting analysis\n";
  5953.  
  5954.          since the main point isn't whether the user typed -v  or
  5955.          not.
  5956.  
  5957.          Similarly, just because  an  operator  lets  you  assume
  5958.          default arguments doesn't mean that you have to make use
  5959.          of the defaults.  The defaults are there for  lazy  sys-
  5960.          tems programmers writing one-shot programs.  If you want
  5961.          your program to  be  readable,  consider  supplying  the
  5962.          argument.
  5963.  
  5964.          Along  the  same  lines,  just  because  you  _c_a_n   omit
  5965.          parentheses  in  many places doesn't mean that you ought
  5966.          to:
  5967.  
  5968.               return print reverse sort num values array;
  5969.               return print(reverse(sort num (values(%array))));
  5970.  
  5971.          When in doubt, parenthesize.  At the very least it  will
  5972.          let some poor schmuck bounce on the % key in vi.
  5973.  
  5974.          Even if you aren't in doubt, consider the mental welfare
  5975.          of  the  person  who has to maintain the code after you,
  5976.          and who will probably put parens in the wrong place.
  5977.  
  5978.      2.  Don't go through silly contortions to exit a loop at the
  5979.          top  or the bottom, when _p_e_r_l provides the "last" opera-
  5980.          tor so you can exit in the middle.  Just  outdent  it  a
  5981.          little to make it more visible:
  5982.  
  5983.              line:
  5984.               for (;;) {
  5985.                   statements;
  5986.               last line if $foo;
  5987.                   next line if /^#/;
  5988.                   statements;
  5989.               }
  5990.  
  5991.  
  5992.      3.  Don't be afraid to use  loop  labels--they're  there  to
  5993.          enhance readability as well as to allow multi-level loop
  5994.          breaks.  See last example.
  5995.  
  5996.      4.  For portability, when using features  that  may  not  be
  5997.          implemented  on  every machine, test the construct in an
  5998.          eval to see if it fails.  If you know  what  version  or
  5999.          patchlevel a particular feature was implemented, you can
  6000.  
  6001.  
  6002.  
  6003.                                                                91
  6004.  
  6005.  
  6006.  
  6007.  
  6008.  
  6009.  
  6010. PERL(1)                  USER COMMANDS                    PERL(1)
  6011.  
  6012.  
  6013.  
  6014.          test $] to see if it will be there.
  6015.  
  6016.      5.  Choose mnemonic identifiers.
  6017.  
  6018.      6.  Be consistent.
  6019.  
  6020.      DDDDeeeebbbbuuuuggggggggiiiinnnngggg
  6021.  
  6022.      If you invoke _p_e_r_l with a ----dddd switch, your script will be run
  6023.      under  a  debugging  monitor.  It will halt before the first
  6024.      executable statement and ask you for a command, such as:
  6025.  
  6026.      h           Prints out a help message.
  6027.  
  6028.      T           Stack trace.
  6029.  
  6030.      s           Single step.   Executes  until  it  reaches  the
  6031.                  beginning of another statement.
  6032.  
  6033.      n           Next.  Executes over subroutine calls, until  it
  6034.                  reaches the beginning of the next statement.
  6035.  
  6036.      f           Finish.  Executes statements until it  has  fin-
  6037.                  ished the current subroutine.
  6038.  
  6039.      c           Continue.  Executes until the next breakpoint is
  6040.                  reached.
  6041.  
  6042.      c line      Continue to the specified line.  Inserts a  one-
  6043.                  time-only breakpoint at the specified line.
  6044.  
  6045.      <CR>        Repeat last n or s.
  6046.  
  6047.      l min+incr  List incr+1 lines starting at min.   If  min  is
  6048.                  omitted, starts where last listing left off.  If
  6049.                  incr is omitted, previous value of incr is used.
  6050.  
  6051.      l min-max   List lines in the indicated range.
  6052.  
  6053.      l line      List just the indicated line.
  6054.  
  6055.      l           List next window.
  6056.  
  6057.      -           List previous window.
  6058.  
  6059.      w line      List window around line.
  6060.  
  6061.      l subname   List subroutine.  If it's a long  subroutine  it
  6062.                  just lists the beginning.  Use "l" to list more.
  6063.  
  6064.  
  6065.  
  6066.  
  6067.  
  6068.  
  6069.                                                                92
  6070.  
  6071.  
  6072.  
  6073.  
  6074.  
  6075.  
  6076. PERL(1)                  USER COMMANDS                    PERL(1)
  6077.  
  6078.  
  6079.  
  6080.      /pattern/   Regular expression search forward  for  pattern;
  6081.                  the final / is optional.
  6082.  
  6083.      ?pattern?   Regular expression search backward for  pattern;
  6084.                  the final ? is optional.
  6085.  
  6086.      L           List lines that have breakpoints or actions.
  6087.  
  6088.      S           Lists the names of all subroutines.
  6089.  
  6090.      t           Toggle trace mode on or off.
  6091.  
  6092.      b line condition
  6093.                  Set a breakpoint.  If line is  omitted,  sets  a
  6094.                  breakpoint  on the line that is about to be exe-
  6095.                  cuted.  If  a  condition  is  specified,  it  is
  6096.                  evaluated each time the statement is reached and
  6097.                  a breakpoint is taken only if the  condition  is
  6098.                  true.  Breakpoints may only be set on lines that
  6099.                  begin an executable statement.
  6100.  
  6101.      b subname condition
  6102.                  Set breakpoint at first executable line of  sub-
  6103.                  routine.
  6104.  
  6105.      d line      Delete breakpoint.  If line is omitted,  deletes
  6106.                  the  breakpoint  on the line that is about to be
  6107.                  executed.
  6108.  
  6109.      D           Delete all breakpoints.
  6110.  
  6111.      a line command
  6112.                  Set an action for line.   A  multi-line  command
  6113.                  may be entered by backslashing the newlines.
  6114.  
  6115.      A           Delete all line actions.
  6116.  
  6117.      < command   Set an action to happen  before  every  debugger
  6118.                  prompt.   A multi-line command may be entered by
  6119.                  backslashing the newlines.
  6120.  
  6121.      > command   Set an action to happen after  the  prompt  when
  6122.                  you've just given a command to return to execut-
  6123.                  ing the script.  A  multi-line  command  may  be
  6124.                  entered by backslashing the newlines.
  6125.  
  6126.      V package   List all variables in package.  Default is  main
  6127.                  package.
  6128.  
  6129.      ! number    Redo a debugging command.  If number is omitted,
  6130.                  redoes the previous command.
  6131.  
  6132.  
  6133.  
  6134.  
  6135.                                                                93
  6136.  
  6137.  
  6138.  
  6139.  
  6140.  
  6141.  
  6142. PERL(1)                  USER COMMANDS                    PERL(1)
  6143.  
  6144.  
  6145.  
  6146.      ! -number   Redo the command that  was  that  many  commands
  6147.                  ago.
  6148.  
  6149.      H -number   Display last n commands.  Only  commands  longer
  6150.                  than  one  character  are  listed.  If number is
  6151.                  omitted, lists them all.
  6152.  
  6153.      q or ^D     Quit.
  6154.  
  6155.      command     Execute command as a perl statement.  A  missing
  6156.                  semicolon will be supplied.
  6157.  
  6158.      p expr      Same  as  "print  DB'OUT  expr".    The   DB'OUT
  6159.                  filehandle  is opened to /dev/tty, regardless of
  6160.                  where STDOUT may be redirected to.
  6161.  
  6162.      If you want to modify the debugger, copy perldb.pl from  the
  6163.      perl  library  to  your  current  directory and modify it as
  6164.      necessary.  (You'll also have to put  -I.  on  your  command
  6165.      line.)   You  can  do  some  customization  by  setting up a
  6166.      .perldb  file  which  contains  initialization  code.    For
  6167.      instance, you could make aliases like these:
  6168.  
  6169.          $DB'alias{'len'} = 's/^len(.*)/p length($1)/';
  6170.          $DB'alias{'stop'} = 's/^stop (at|in)/b/';
  6171.          $DB'alias{'.'} =
  6172.            's/^\./p "\$DB\'sub(\$DB\'line):\t",\$DB\'line[\$DB\'line]/';
  6173.  
  6174.  
  6175.      SSSSeeeettttuuuuiiiidddd SSSSccccrrrriiiippppttttssss
  6176.  
  6177.      Setuid processes  are  not  supported  on  MS-DOS.  _P_e_r_l  is
  6178.      designed  to  make it easy to write secure setuid and setgid
  6179.      scripts.  Unlike shells, which are based on multiple substi-
  6180.      tution  passes  on each line of the script, _p_e_r_l uses a more
  6181.      conventional evaluation scheme with fewer hidden  "gotchas".
  6182.      Additionally,  since  the  language  has more built-in func-
  6183.      tionality, it has to rely less upon external  (and  possibly
  6184.      untrustworthy) programs to accomplish its purposes.
  6185.  
  6186.      In an unpatched 4.2 or 4.3bsd  kernel,  setuid  scripts  are
  6187.      intrinsically  insecure, but this kernel feature can be dis-
  6188.      abled.  If it is, _p_e_r_l can emulate  the  setuid  and  setgid
  6189.      mechanism  when  it notices the otherwise useless setuid/gid
  6190.      bits on perl scripts.  If the kernel feature isn't disabled,
  6191.      _p_e_r_l  will  complain  loudly  that  your  setuid  script  is
  6192.      insecure.  You'll need to either disable the  kernel  setuid
  6193.      script feature, or put a C wrapper around the script.
  6194.  
  6195.      When _p_e_r_l is executing a setuid  script,  it  takes  special
  6196.      precautions  to  prevent  you  from falling into any obvious
  6197.      traps.  (In some ways, a perl script is more secure than the
  6198.  
  6199.  
  6200.  
  6201.                                                                94
  6202.  
  6203.  
  6204.  
  6205.  
  6206.  
  6207.  
  6208. PERL(1)                  USER COMMANDS                    PERL(1)
  6209.  
  6210.  
  6211.  
  6212.      corresponding   C  program.)   Any  command  line  argument,
  6213.      environment variable, or input is marked as  "tainted",  and
  6214.      may not be used, directly or indirectly, in any command that
  6215.      invokes a subshell, or in any command that  modifies  files,
  6216.      directories  or  processes.  Any variable that is set within
  6217.      an expression that has previously referenced a tainted value
  6218.      also becomes tainted (even if it is logically impossible for
  6219.      the tainted value to influence the variable).  For example:
  6220.  
  6221.           $foo = shift;            # $foo is tainted
  6222.           $bar = $foo,'bar';       # $bar is also tainted
  6223.           $xxx = <>;               # Tainted
  6224.           $path = $ENV{'PATH'};    # Tainted, but see below
  6225.           $abc = 'abc';            # Not tainted
  6226.  
  6227.           system "echo $foo";      # Insecure
  6228.           system "/bin/echo", $foo;     # Secure (doesn't use sh)
  6229.           system "echo $bar";      # Insecure
  6230.           system "echo $abc";      # Insecure until PATH set
  6231.  
  6232.           $ENV{'PATH'} = '/bin:/usr/bin';
  6233.           $ENV{'IFS'} = '' if $ENV{'IFS'} ne '';
  6234.  
  6235.           $path = $ENV{'PATH'};    # Not tainted
  6236.           system "echo $abc";      # Is secure now!
  6237.  
  6238.           open(FOO,"$foo");        # OK
  6239.           open(FOO,">$foo");       # Not OK
  6240.  
  6241.           open(FOO,"echo $foo|");  # Not OK, but...
  6242.           open(FOO,"-|") || exec 'echo', $foo;    # OK
  6243.  
  6244.           $zzz = `echo $foo`;      # Insecure, zzz tainted
  6245.  
  6246.           unlink $abc,$foo;        # Insecure
  6247.           umask $foo;              # Insecure
  6248.  
  6249.           exec "echo $foo";        # Insecure
  6250.           exec "echo", $foo;       # Secure (doesn't use sh)
  6251.           exec "sh", '-c', $foo;   # Considered secure, alas
  6252.  
  6253.      The taintedness is associated with  each  scalar  value,  so
  6254.      some elements of an array can be tainted, and others not.
  6255.  
  6256.      If you try to do something insecure, you will  get  a  fatal
  6257.      error   saying   something  like  "Insecure  dependency"  or
  6258.      "Insecure PATH".  Note that you can still write an  insecure
  6259.      system  call or exec, but only by explicitly doing something
  6260.      like the last example above.  You can also bypass the taint-
  6261.      ing mechanism by referencing subpatterns--_p_e_r_l presumes that
  6262.      if you reference a substring using $1,  $2,  etc,  you  knew
  6263.      what you were doing when you wrote the pattern:
  6264.  
  6265.  
  6266.  
  6267.                                                                95
  6268.  
  6269.  
  6270.  
  6271.  
  6272.  
  6273.  
  6274. PERL(1)                  USER COMMANDS                    PERL(1)
  6275.  
  6276.  
  6277.  
  6278.           $ARGV[0] =~ /^-P(\w+)$/;
  6279.           $printer = $1;      # Not tainted
  6280.  
  6281.      This is fairly secure since \w+ doesn't  match  shell  meta-
  6282.      characters.   Use  of  .+ would have been insecure, but _p_e_r_l
  6283.      doesn't check for that, so you must  be  careful  with  your
  6284.      patterns.   This  is  the ONLY mechanism for untainting user
  6285.      supplied filenames if you want to do file operations on them
  6286.      (unless you make $> equal to $<).
  6287.  
  6288.      It's also possible to get into trouble with other operations
  6289.      that don't care whether they use tainted values.  Make judi-
  6290.      cious use of the  file  tests  in  dealing  with  any  user-
  6291.      supplied  filenames.  When possible, do opens and such after
  6292.      setting $> = $<.  _P_e_r_l  doesn't  prevent  you  from  opening
  6293.      tainted  filenames for reading, so be careful what you print
  6294.      out.  The tainting mechanism is intended to  prevent  stupid
  6295.      mistakes, not to remove the need for thought.
  6296.  
  6297. MMMMSSSS----DDDDOOOOSSSS CCCCOOOONNNNSSSSIIIIDDDDEEEERRRRAAAATTTTIIIIOOOONNNNSSSS
  6298.      This section describes the MS-DOS version of  _p_e_r_l.   MS-DOS
  6299.      _p_e_r_l  has  been  tested with MS-DOS versions 3.2, 3.3, 4.01,
  6300.      and 5.0, and should work with 2.0 or  higher.   640  K-bytes
  6301.      are needed to get anything done.  MS-DOS 5.0 running in high
  6302.      memory is recommended.
  6303.  
  6304.      CCCCoooommmmmmmmaaaannnndddd----LLLLiiiinnnneeee AAAArrrrgggguuuummmmeeeennnnttttssss iiiinnnn MMMMSSSS----DDDDOOOOSSSS
  6305.  
  6306.      MS-DOS _p_e_r_l recognizes the MKS calling conventions.  The MKS
  6307.      Korn  shell  will expand the command-line wildcards and pass
  6308.      _p_e_r_l arguments in a manner similar to Unix.   Large  numbers
  6309.      of  arguments can be passed this way, and ----eeee commands can be
  6310.      enclosed in single quotes just as in Unix.  This works  even
  6311.      if  $MKSARGS  (see  the section on the environment below) is
  6312.      not set, but not if MKS support is compiled out.
  6313.  
  6314.      When invoked from a non-MKS tool with MKS  tooling  present,
  6315.      _p_e_r_l will use the MKS glob program (see $GLOB in the section
  6316.      on the MS-DOS environment, below) to expand the wildcards.
  6317.  
  6318.      When run on a system that doesn't have MKS tools, _p_e_r_l  will
  6319.      attempt  to  expand  wildcards it sees in the argument list.
  6320.      It is not possible to handle ----eeee arguments  properly  due  to
  6321.      limitations in the standard MS-DOS calling conventions.
  6322.  
  6323.      Unix and MKS do globbing  differently  than  MS-DOS.   Under
  6324.      Unix  and MKS, "abc*" matches abc.c,  Under DOS, though, the
  6325.      * won't match "."  The MKS tools use the former  interpreta-
  6326.      tion; the perlglob.exe program distributed with perl and the
  6327.      globbing built  in  to  perl.exe  use  the  latter.   (Don't
  6328.      install  the  distributed  perlglob.exe if you are using the
  6329.      MKS tools.)
  6330.  
  6331.  
  6332.  
  6333.                                                                96
  6334.  
  6335.  
  6336.  
  6337.  
  6338.  
  6339.  
  6340. PERL(1)                  USER COMMANDS                    PERL(1)
  6341.  
  6342.  
  6343.  
  6344.      FFFFiiiilllleeee nnnnaaaammmmeeeessss iiiinnnn MMMMSSSS----DDDDOOOOSSSS
  6345.  
  6346.      _P_e_r_l scripts should use forward slashes to delimit path name
  6347.      components. (C programmers should note that most MS-DOS com-
  6348.      pilers support this,  too.)   MS-DOS  _p_e_r_l  will  work  with
  6349.      backslashes,  but  they  make code unnecessarily messy since
  6350.      they must be escaped any time they might be  interpreted  to
  6351.      mean  an  escape  sequence.  Subprograms may or may not like
  6352.      forward slashes: most programs compiled from C  source  like
  6353.      them  fine, but command.com won't take them.  Slashes can be
  6354.      reversed before invoking a subprocess using the perl substu-
  6355.      tion features.  Inside _p_e_r_l, the following are equivalent:
  6356.  
  6357.      "c:/new/report"
  6358.      "c:\\new\\report"
  6359.  
  6360.      Drive prefixes are optional.  If omitted, the file is sought
  6361.      on the current drive.
  6362.  
  6363.      GGGGlllloooobbbbbbbbiiiinnnngggg <<<<>>>> EEEExxxxpppprrrreeeessssssssiiiioooonnnnssss oooonnnn MMMMSSSS----DDDDOOOOSSSS
  6364.  
  6365.      Expressions like <*.c> are expanded by a subshell  in  Unix.
  6366.      On  MS-DOS  there  are two cases.  If $MKSARGS is defined in
  6367.      the environment and MKS support is compiled in,  the  $SHELL
  6368.      is  used,  running _e_c_h_o piped to _t_r as with the Bourne shell
  6369.      on Unix _p_e_r_l.  Otherwise, the supplied perlglob.exe  program
  6370.      is  run.   This  program  simply  takes the supplied command
  6371.      line, DOS-globs it, and writes the  result,  null-separated,
  6372.      to the _p_e_r_l process via a "pipe."
  6373.  
  6374.      TTTThhhheeee MMMMSSSS----DDDDOOOOSSSS EEEEnnnnvvvviiiirrrroooonnnnmmmmeeeennnntttt
  6375.  
  6376.      MS-DOS _p_e_r_l uses a number of environment variables not  used
  6377.      by  Unix _p_e_r_l.  This is because the MS-DOS version is widely
  6378.      distributed in executable form.  (Not everyone who wishes to
  6379.      use _p_e_r_l on MS-DOS has the tools to build it from the source
  6380.      code.)  Directory and file names in the environment  can  be
  6381.      delimited  with  forward or back slashes.  Environment vari-
  6382.      ables are interpreted when  they  are  needed.   (Exception:
  6383.      creation of $TMP from $TMPDIR is done at startup.)  Thus the
  6384.      perl script can change them.  For example, if a huge  "pipe"
  6385.      file  is  to  be  created, and there's room on the hard disk
  6386.      (c:) but not the usual $TMP, which is a RAM disk, one  could
  6387.      write:
  6388.  
  6389.      ENV{'TMP'} = "c:/tmp";
  6390.      open (HANDLE, "program|");
  6391.  
  6392.      The state of the environment passed to  perl.exe  determines
  6393.      argument parsing, though, since this is done before compila-
  6394.      tion and interpretation of the perl script.
  6395.  
  6396.  
  6397.  
  6398.  
  6399.                                                                97
  6400.  
  6401.  
  6402.  
  6403.  
  6404.  
  6405.  
  6406. PERL(1)                  USER COMMANDS                    PERL(1)
  6407.  
  6408.  
  6409.  
  6410.      PATH        This is the semicolon-separated path list.   The
  6411.                  current   directory   is   search  first  unless
  6412.                  $MKSARGS is defined and MKS support is  compiled
  6413.                  in,  in  which  case  the  current  directory is
  6414.                  searched only in response to an explicit "."  or
  6415.                  null path component.
  6416.  
  6417.      MKSARGS     Set to 1 enable all MKSisms.  The MKS tools  can
  6418.                  assume  that the other pieces of the toolkit are
  6419.                  lying around, but perl.exe can't.   (It  may  be
  6420.                  the  only  MKS-compatible  program on a system.)
  6421.                  If have have the MKS tools, you should set  this
  6422.                  variable.   Perl will recognize and generate MKS
  6423.                  compatible arguments in any  case,  but  without
  6424.                  the  switch  will default SLASHC to "-c" instead
  6425.                  of "-ce", will fail to run MKS  glob,  and  will
  6426.                  run  perl's  glob  instead  of the Korn shell to
  6427.                  expand expressions like <*.c>.  (Note  that  MKS
  6428.                  support can be compiled out.)
  6429.  
  6430.      ROOTDIR     Full  drive  and  path  where  MKS  toolkit   is
  6431.                  installed.   Example,  "c:/mks" or "d:/".  Typi-
  6432.                  cally is already set in MKS  environment.   Used
  6433.                  only  if  $MKSARGS is set and $GLOB is not.  See
  6434.                  $GLOB.  Ignored if MKS support compiled out.
  6435.  
  6436.      TMP         First  choice   for   temporary   files,   e.g.,
  6437.                  "h:\\tmp".    If  not  set,  uses  $TMPDIR  (see
  6438.                  below), if that's not set, the current directory
  6439.                  is   used.    Swapping  also  goes  here  unless
  6440.                  $EXESWAP  is  defined.   Temporary   files   are
  6441.                  pseudo-pipes, the swap file, and the ----eeee file.
  6442.  
  6443.      TMPDIR      If $TMPDIR is set and $TMP is not, the following
  6444.                  is done internally:
  6445.  
  6446.                  ( $ENV{'TMP'} = $ENV{'TMPDIR'} ) =~ s,/,\\,g;
  6447.  
  6448.                  (Backslashes are reversed as a gesture to decen-
  6449.                  dents   of   the  perl  process.)   Creation  of
  6450.                  $ENV{'TMP'} from $TMPDIR  is  done  at  perl.exe
  6451.                  startup.  Note that the MKS tools use $TMPDIR as
  6452.                  a first choice; as a  gesture  of  compatibility
  6453.                  for non-MKS users, here, it is a second choice.
  6454.  
  6455.      EXESWAP     First choice for swap out file location.  A  RAM
  6456.                  disk  is  a  nice  choice.  $TMP is used if this
  6457.                  isn't set.  (See also $TMPDIR).  The  swap  file
  6458.                  created  the  first time swapping is invoked and
  6459.                  is left open until perl exits or does  an  exec.
  6460.                  Set to ".off" (note illegal DOS name) to inhibit
  6461.                  swapping--useful for  speedy  running  of  small
  6462.  
  6463.  
  6464.  
  6465.                                                                98
  6466.  
  6467.  
  6468.  
  6469.  
  6470.  
  6471.  
  6472. PERL(1)                  USER COMMANDS                    PERL(1)
  6473.  
  6474.  
  6475.  
  6476.                  subprocesses.
  6477.                   This feature (inhibition) can be turned on  and
  6478.                  off.   The  following  example  runs  "ls" using
  6479.                  "e:/tmp" as the directory for the swap file.  It
  6480.                  then   runs   "who,"   with  swapping  disabled.
  6481.                  Finally, it runs "ps" with swapping  re-enabled.
  6482.                  Note  that  $ENV{'EXESWAP'}  is set to 'yes' but
  6483.                  anything other than '.off' would have sufficed.
  6484.  
  6485.                  $ENV{'EXESWAP'} = 'e:/tmp';
  6486.                  system "ls";
  6487.                  $ENV{'EXESWAP'} = '.off';
  6488.                  system "who";
  6489.                  $ENV{'EXESWAP'} = 'yes';
  6490.                  system "ps";
  6491.  
  6492.      GLOB        First choice  for  MKS  globbing  program:  full
  6493.                  path,    name,    and    extension.     Example:
  6494.                  "d:/mks/etc/glob.exe".  The perl  globbing  pro-
  6495.                  gram  (used  for  <*.c>  expansion) is found, as
  6496.                  before, via the $PATH.   Used  only  in  an  MKS
  6497.                  environment, and then only when perl is run from
  6498.                  a non-MKS program.  Ignored if MKS support  com-
  6499.                  piled out.
  6500.  
  6501.      SHELL       Full path name and extension of the  shell  used
  6502.                  used for subprocesses when wildcard expansion is
  6503.                  required, e.g., "c:/mks/bin/sh.exe".   If  unde-
  6504.                  fined,  COMSPEC  is used.  Presumably this could
  6505.                  be the MKS korn shell, but  it  can  be  another
  6506.                  shell  (e.g., 4DOS) and thus $SHELL is inspected
  6507.                  even if MKS support is compiled out.
  6508.  
  6509.      COMSPEC     Full path name of DOS command interpreter, e.g.,
  6510.                  "c:\\command.com"  Used  only  if  $SHELL is not
  6511.                  defined.  If not found, "\\command.com" is used.
  6512.                  (It is bad practice to allow $COMSPEC to default
  6513.                  or to have it have anything other  than  a  full
  6514.                  drive  and  path name.  You don't want your pro-
  6515.                  grams  looking  for  command.com  on   alternate
  6516.                  drives.)
  6517.  
  6518.      METACHAR    List of characters that  are  metacharacters  to
  6519.                  the  $SHELL  or $COMPSPEC.  Used to determine if
  6520.                  command can be run directly  or  if  a  subshell
  6521.                  must be invoked.  If undefined, \|<> is used for
  6522.                  COMSPEC and *"?<>][`'\ for SHELL.
  6523.  
  6524.      SLASHC      The  shell  option  for  invoking   a   command.
  6525.                  Defaults:   /c  for $COMSPEC, MS-DOS version 4.x
  6526.                  or better [_s_i_c]; _sc, where _s is the switch char-
  6527.                  acter,  for  $COMSPEC, DOS < 4.0; -ce for $SHELL
  6528.  
  6529.  
  6530.  
  6531.                                                                99
  6532.  
  6533.  
  6534.  
  6535.  
  6536.  
  6537.  
  6538. PERL(1)                  USER COMMANDS                    PERL(1)
  6539.  
  6540.  
  6541.  
  6542.                  if $MKSARGS is set and MKS support  is  compiled
  6543.                  in.  (The -e needed to get the MKS Korn shell to
  6544.                  return the status properly).  The default is  -c
  6545.                  for other $SHELLs.  (This is a guess.)
  6546.  
  6547.      PERLLIB     Directory(ies)    containing    perl    library.
  6548.                  Defaults  to  /usr/local/lib/perl.   Directories
  6549.                  are separated like $PATH:  semicolons in MS-DOS,
  6550.                  colons  in  Unix.   For  the -P switch, only the
  6551.                  first $PERLLIB directory  (or  the  default,  if
  6552.                  there's no $PERLLIB) is tried.
  6553.  
  6554.      TTTTyyyyppppiiiiccccaaaallll MMMMKKKKSSSS sssseeeettttuuuupppp ((((pppprrrrooooffffiiiilllleeee....kkkksssshhhh))))
  6555.  
  6556.      # If you're using the MKS stuff, you probably don't have
  6557.      # to do anything other than set MKSARGS and PERLLIB.
  6558.  
  6559.      export MKSARGS=1
  6560.      # ROOTDIR set by init process or etc.rc or here.
  6561.      export TMPDIR=e:/tmp
  6562.      # EXESWAP left to default to $TMPDIR
  6563.      # GLOB left to default to $ROOTDIR/etc/glob.exe
  6564.      # SHELL set by init process or here.
  6565.      # COMSPEC not used by perl.exe but probably defined for other uses.
  6566.      # METACHAR not defined, left to default.
  6567.      export PERLLIB='c:/lib/perl;d:/usr/me/myperlib'
  6568.  
  6569.      TTTTyyyyppppiiiiccccaaaallll nnnnoooonnnn----MMMMKKKKSSSS sssseeeettttuuuupppp ((((aaaauuuuttttooooeeeexxxxeeeecccc....bbbbaaaatttt))))
  6570.  
  6571.      Rem You probably don't need to do anything except set $TMP,
  6572.      Rem which you may be doing anyway.
  6573.  
  6574.      Rem MKSARGS not set
  6575.      Rem ROOTDIR not used
  6576.      set TMP=d:mp
  6577.      Rem EXESWAP left to default to $TMP
  6578.      Rem GLOB not used
  6579.      Rem SHELL not set
  6580.      Rem COMPEC set by config.sys SHELL command or by MS-DOS startup.
  6581.      Rem METACHAR not defined, left to default.
  6582.      set PERLLIB=c:/lib/perl
  6583.  
  6584.      RRRRuuuunnnnnnnniiiinnnngggg SSSSuuuubbbbpppprrrroooocccceeeesssssssseeeessss oooonnnn MMMMSSSS----DDDDOOOOSSSS
  6585.  
  6586.      _P_e_r_l will by default swap itself out almost entirely when it
  6587.      runs  a  subprocess other than MKS $GLOB.  (See the $EXESWAP
  6588.      environment variable).  The swap file  is  opened  when  the
  6589.      first subprocess is run and is left open until _p_e_r_l exits or
  6590.      does an IR exec .  The command line to be run is scanned for
  6591.      $METACHARacters  as described above.  If none are found, the
  6592.      subcommand is invoked  directly.   If  metacharacter(s)  are
  6593.      found, a $SHELL or $COMSPEC is invoked to run the command.
  6594.  
  6595.  
  6596.  
  6597.                                                               100
  6598.  
  6599.  
  6600.  
  6601.  
  6602.  
  6603.  
  6604. PERL(1)                  USER COMMANDS                    PERL(1)
  6605.  
  6606.  
  6607.  
  6608.      Use of a single |||| in a open() command does not constitute  a
  6609.      metacharcter:   this  is a directive to perl to open a pipe.
  6610.      The following, too, has no SHELL  metacharacters  since  the
  6611.      subprocess is simply pwd:
  6612.  
  6613.      chop($direct = `pwd`);
  6614.  
  6615.      Beware of MS-DOS "internal" commands; i.e., those  that  are
  6616.      built   into   command.com.   Examples  are  DIR  and  COPY.
  6617.      COMMAND.COM users can use these directly if the command  has
  6618.      $METACHARacters;   if  not,  you  must  invoke  an  explicit
  6619.      command.com.  In the first example below, '>' is a metachar-
  6620.      acter.   In  the second example, there are no metacharacters
  6621.      and so the internal "ver" command must be run with an expli-
  6622.      clit $COMSPEC.
  6623.  
  6624.           system "dir >my.fil";
  6625.           system "$ENV{'COMSPEC'} /c ver";
  6626.  
  6627.      Users of $SHELLs other than COMMAND.COM must use the  second
  6628.      format for anything to be passed to command.com.
  6629.  
  6630.      Be aware that no wild card expansion is going to be done  by
  6631.      command.com usless you're using one of the built-in commands
  6632.      that does it (e.g., COPY).  You can use <> expansion to  get
  6633.      around  this.  Even those who have fancy $SHELLs should take
  6634.      note of this, since having _p_e_r_l run the $SHELL and then  the
  6635.      command  uses less memory than if perl runs the $SHELL which
  6636.      runs the command:
  6637.  
  6638.           $files = <*.c>;
  6639.           `the_com $files`;
  6640.  
  6641.  
  6642. EEEENNNNVVVVIIIIRRRROOOONNNNMMMMEEEENNNNTTTT
  6643.      _P_e_r_l uses PATH in executing subprocesses, and in finding the
  6644.      script  if -S is used.  HOME or LOGDIR are used if chdir has
  6645.      no argument.
  6646.  
  6647.      Apart from these, Unix _p_e_r_l uses no  environment  variables,
  6648.      except  to make them available to the script being executed,
  6649.      and to child processes.
  6650.  
  6651. AAAAUUUUTTTTHHHHOOOORRRR
  6652.      Larry Wall <lwall@jpl-devvax.Jpl.Nasa.Gov>
  6653.      MS-DOS port by Diomidis Spinellis <dds@cc.ic.ac.uk>
  6654.      and Len Reed <holos0!lbr@gatech.edu>
  6655.  
  6656. FFFFIIIILLLLEEEESSSS
  6657.      /tmp/perl-eXXXXXX   temporary file for ----eeee commands.
  6658.  
  6659.  
  6660.  
  6661.  
  6662.  
  6663.                                                               101
  6664.  
  6665.  
  6666.  
  6667.  
  6668.  
  6669.  
  6670. PERL(1)                  USER COMMANDS                    PERL(1)
  6671.  
  6672.  
  6673.  
  6674. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  6675.      a2p  awk to perl translator
  6676.      s2p  sed to perl translator
  6677.  
  6678. DDDDIIIIAAAAGGGGNNNNOOOOSSSSTTTTIIIICCCCSSSS
  6679.      Compilation errors will tell you  the  line  number  of  the
  6680.      error,  with  an  indication of the next token or token type
  6681.      that was to be examined.  (In the case of a script passed to
  6682.      _p_e_r_l via ----eeee switches, each ----eeee is counted as one line.)
  6683.  
  6684. TTTTRRRRAAAAPPPPSSSS
  6685.      Accustomed _a_w_k users should take special note of the follow-
  6686.      ing:
  6687.  
  6688.      *   Semicolons are required after all simple  statements  in
  6689.          _p_e_r_l.  Newline is not a statement delimiter.
  6690.  
  6691.      *   Curly brackets are required on ifs and whiles.
  6692.  
  6693.      *   Variables begin with $ or @ in _p_e_r_l.
  6694.  
  6695.      *   Arrays index from 0 unless you set $[.  Likewise  string
  6696.          positions in substr() and index().
  6697.  
  6698.      *   You have to decide whether your  array  has  numeric  or
  6699.          string indices.
  6700.  
  6701.      *   Associative array values do not  spring  into  existence
  6702.          upon mere reference.
  6703.  
  6704.      *   You have to decide whether you want  to  use  string  or
  6705.          numeric comparisons.
  6706.  
  6707.      *   Reading an input line does not split it  for  you.   You
  6708.          get  to  split  it  yourself to an array.  And the _s_p_l_i_t
  6709.          operator has different arguments.
  6710.  
  6711.      *   The current input line is normally in $_,  not  $0.   It
  6712.          generally  does  not  have the newline stripped.  ($0 is
  6713.          the name of the program executed.)
  6714.  
  6715.      *   $<digit> does not refer to  fields--it  refers  to  sub-
  6716.          strings matched by the last match pattern.
  6717.  
  6718.      *   The _p_r_i_n_t  statement  does  not  add  field  and  record
  6719.          separators unless you set $, and $\.
  6720.  
  6721.      *   You must open your files before you print to them.
  6722.  
  6723.      *   The range operator  is  "..",  not  comma.   (The  comma
  6724.          operator works as in C.)
  6725.  
  6726.  
  6727.  
  6728.  
  6729.                                                               102
  6730.  
  6731.  
  6732.  
  6733.  
  6734.  
  6735.  
  6736. PERL(1)                  USER COMMANDS                    PERL(1)
  6737.  
  6738.  
  6739.  
  6740.      *   The match operator is "=~", not "~".  ("~" is the  one's
  6741.          complement operator, as in C.)
  6742.  
  6743.      *   The exponentiation operator is "**", not "^".   ("^"  is
  6744.          the XOR operator, as in C.)
  6745.  
  6746.      *   The concatenation operator is ".", not the null  string.
  6747.          (Using  the  null  string  would  render  "/pat/  /pat/"
  6748.          unparsable, since the third slash would  be  interpreted
  6749.          as  a division operator--the tokener is in fact slightly
  6750.          context sensitive for operators like /, ?, and  <.   And
  6751.          in fact, . itself can be the beginning of a number.)
  6752.  
  6753.      *   _N_e_x_t, _e_x_i_t and _c_o_n_t_i_n_u_e work differently.
  6754.  
  6755.      *   The following variables work differently
  6756.  
  6757.                 Awk               Perl
  6758.                 ARGC              $#ARGV
  6759.                 ARGV[0]           $0
  6760.                 FILENAME          $ARGV
  6761.                 FNR               $. - something
  6762.                 FS                (whatever you like)
  6763.                 NF                $#Fld, or some such
  6764.                 NR                $.
  6765.                 OFMT              $#
  6766.                 OFS               $,
  6767.                 ORS               $\
  6768.                 RLENGTH           length($&)
  6769.                 RS                $/
  6770.                 RSTART            length($`)
  6771.                 SUBSEP            $;
  6772.  
  6773.  
  6774.      *   When in doubt, run the _a_w_k construct through a2p and see
  6775.          what it gives you.
  6776.  
  6777.      Cerebral C programmers should take note of the following:
  6778.  
  6779.      *   Curly brackets are required on ifs and whiles.
  6780.  
  6781.      *   You should use "elsif" rather than "else if"
  6782.  
  6783.      *   _B_r_e_a_k and _c_o_n_t_i_n_u_e become _l_a_s_t and _n_e_x_t, respectively.
  6784.  
  6785.      *   There's no switch statement.
  6786.  
  6787.      *   Variables begin with $ or @ in _p_e_r_l.
  6788.  
  6789.      *   Printf does not implement *.
  6790.  
  6791.      *   Comments begin with #, not /*.
  6792.  
  6793.  
  6794.  
  6795.                                                               103
  6796.  
  6797.  
  6798.  
  6799.  
  6800.  
  6801.  
  6802. PERL(1)                  USER COMMANDS                    PERL(1)
  6803.  
  6804.  
  6805.  
  6806.      *   You can't take the address of anything.
  6807.  
  6808.      *   ARGV must be capitalized.
  6809.  
  6810.      *   The "system" calls link,  unlink,  rename,  etc.  return
  6811.          nonzero for success, not 0.
  6812.  
  6813.      *   Signal handlers deal with signal names, not numbers.
  6814.  
  6815.      Seasoned _s_e_d programmers should take note of the following:
  6816.  
  6817.      *   Backreferences in substitutions use $ rather than \.
  6818.  
  6819.      *   The pattern matching metacharacters (, ), and |  do  not
  6820.          have backslashes in front.
  6821.  
  6822.      *   The range operator is .. rather than comma.
  6823.  
  6824.      Sharp shell programmers should take note of the following:
  6825.  
  6826.      *   The  backtick  operator  does  variable   interpretation
  6827.          without  regard  to the presence of single quotes in the
  6828.          command.
  6829.  
  6830.      *   The backtick operator does no translation of the  return
  6831.          value, unlike csh.
  6832.  
  6833.      *   Shells (especially csh) do several levels  of  substitu-
  6834.          tion  on each command line.  _P_e_r_l does substitution only
  6835.          in certain constructs such as double quotes,  backticks,
  6836.          angle brackets and search patterns.
  6837.  
  6838.      *   Shells interpret scripts a little bit at a  time.   _P_e_r_l
  6839.          compiles the whole program before executing it.
  6840.  
  6841.      *   The arguments are available via @ARGV, not $1, $2, etc.
  6842.  
  6843.      *   The environment is not automatically made  available  as
  6844.          variables.
  6845.  
  6846. EEEERRRRRRRRAAAATTTTAAAA AAAANNNNDDDD AAAADDDDDDDDEEEENNNNDDDDAAAA
  6847.      The Perl book, _P_r_o_g_r_a_m_m_i_n_g _P_e_r_l , has  the  following  omis-
  6848.      sions and goofs.
  6849.  
  6850.      On page 5, the examples which read
  6851.  
  6852.           eval "/usr/bin/perl
  6853.  
  6854.      should read
  6855.  
  6856.           eval "exec /usr/bin/perl
  6857.  
  6858.  
  6859.  
  6860.  
  6861.                                                               104
  6862.  
  6863.  
  6864.  
  6865.  
  6866.  
  6867.  
  6868. PERL(1)                  USER COMMANDS                    PERL(1)
  6869.  
  6870.  
  6871.  
  6872.      On page 195, the equivalent to the System V sum program only
  6873.      works for very small files.  To do larger files, use
  6874.  
  6875.           undef $/;
  6876.           $checksum = unpack("%32C*",<>) % 32767;
  6877.  
  6878.  
  6879.      The ----0000 switch to set the initial value of $/  was  added  to
  6880.      Perl after the book went to press.
  6881.  
  6882.      The ----llll switch now does automatic line ending processing.
  6883.  
  6884.      The qx// construct is now a synonym for backticks.
  6885.  
  6886.      $0 may now be assigned to set the argument displayed  by  _p_s
  6887.      (_1).
  6888.  
  6889.      The new @###.## format was  omitted  accidentally  from  the
  6890.      description on formats.
  6891.  
  6892.      It wasn't known at press time that  s///ee  caused  multiple
  6893.      evaluations  of  the  replacement expression.  This is to be
  6894.      construed as a feature.
  6895.  
  6896.      (LIST) x $count now does array replication.
  6897.  
  6898.      There is now no limit on the number of parentheses in a reg-
  6899.      ular expression.
  6900.  
  6901.      In double-quote context, more escapes are supported: \e, \a,
  6902.      \x1b,  \c[,  \l,  \L,  \u,  \U, \E.  The latter five control
  6903.      up/lower case translation.
  6904.  
  6905.      The $$$$//// variable may now be set to a  multi-character  delim-
  6906.      iter.
  6907.  
  6908.      There is now a g modifier on ordinary pattern matching  that
  6909.      causes  it  to  iterate  through  a  string finding multiple
  6910.      matches.
  6911.  
  6912.      All of the $^X variables are new except for $^T.
  6913.  
  6914. BBBBUUUUGGGGSSSS
  6915.      _P_e_r_l is at the mercy of your machine's definitions of  vari-
  6916.      ous operations such as type casting, atof() and sprintf().
  6917.  
  6918.      If your stdio requires an seek  or  eof  between  reads  and
  6919.      writes  on a particular stream, so does _p_e_r_l.  (This doesn't
  6920.      apply to sysread() and syswrite().)
  6921.  
  6922.      While none of the built-in data  types  have  any  arbitrary
  6923.      size  limits (apart from memory size), there are still a few
  6924.  
  6925.  
  6926.  
  6927.                                                               105
  6928.  
  6929.  
  6930.  
  6931.  
  6932.  
  6933.  
  6934. PERL(1)                  USER COMMANDS                    PERL(1)
  6935.  
  6936.  
  6937.  
  6938.      arbitrary limits:  a given identifier may not be longer than
  6939.      255  characters;  sprintf is limited on many machines to 128
  6940.      characters per field (unless the format specifier is exactly
  6941.      %s); and no component of your PATH may be longer than 255 if
  6942.      you use -S.
  6943.  
  6944.      _P_e_r_l actually stands  for  Pathologically  Eclectic  Rubbish
  6945.      Lister, but don't tell anyone I said that.
  6946.  
  6947.  
  6948.  
  6949.  
  6950.  
  6951.  
  6952.  
  6953.  
  6954.  
  6955.  
  6956.  
  6957.  
  6958.  
  6959.  
  6960.  
  6961.  
  6962.  
  6963.  
  6964.  
  6965.  
  6966.  
  6967.  
  6968.  
  6969.  
  6970.  
  6971.  
  6972.  
  6973.  
  6974.  
  6975.  
  6976.  
  6977.  
  6978.  
  6979.  
  6980.  
  6981.  
  6982.  
  6983.  
  6984.  
  6985.  
  6986.  
  6987.  
  6988.  
  6989.  
  6990.  
  6991.  
  6992.  
  6993.                                                               106
  6994.  
  6995.  
  6996.  
  6997.