Perl5 リファレンス

       syscall LIST
               Calls the system call specified as the first
               element of the list, passing the remaining
               elements as arguments to the system call.  If
               unimplemented, produces a fatal error.  The
               arguments are interpreted as follows: if a given
               argument is numeric, the argument is passed as an
               int.  If not, the pointer to the string value is
               passed.  You are responsible to make sure a string
               is pre-extended long enough to receive any result
               that might be written into a string.  You can't
               use a string literal (or other read-only string)
               as an argument to `syscall' because Perl has to
               assume that any string pointer might be written
               through.  If your integer arguments are not
               literals and have never been interpreted in a
               numeric context, you may need to add `0' to them
               to force them to look like numbers.  This emulates
               the `syswrite' function (or vice versa):

                   require '';               # may need to run h2ph
                   $s = "hi there\n";
                   syscall(&SYS_write, fileno(STDOUT), $s, length $s);

               Note that Perl supports passing of up to only 14
               arguments to your system call, which in practice
               should usually suffice.

               Syscall returns whatever value returned by the
               system call it calls.  If the system call fails,
               `syscall' returns `-1' and sets `$!' (errno).
               Note that some system calls can legitimately
               return `-1'.  The proper way to handle such calls
               is to assign `$!=0;' before the call and check the
               value of `$!' if syscall returns `-1'.

               There's a problem with `syscall(&SYS_pipe)': it
               returns the file number of the read end of the
               pipe it creates.  There is no way to retrieve the
               file number of the other end.  You can avoid this
               problem by using `pipe' instead.