home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / amiga / programm / language / perl4s.lzh / perl4.035 / man / perl.man
Text File  |  1992-08-17  |  219KB  |  7,195 lines

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