home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 May / Chip_2000-05_cd1.bin / zkuste / Perl / ActivePerl-5.6.0.613.msi / 䆊䌷䈹䈙䏵-䞅䞆䞀㡆䞃䄦䠥 / _96c4a9933b858e9040b5ffffa9819aa4 < prev    next >
Text File  |  2000-03-22  |  15KB  |  257 lines

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <HTML>
  3.  
  4. <HEAD>
  5. <TITLE>ActivePerl faq5 - Implementation Quirks</TITLE>
  6. <LINK rev="made" href="mailto:support@ActiveState.com">
  7. <META name="GENERATOR" charset="iso-8859-1" content="Microsoft FrontPage 4.0">
  8. <META name="ProgId" content="FrontPage.Editor.Document">
  9. <LINK rel="STYLESHEET" href="../../Active.css" type="text/css" media="screen">
  10. </HEAD>
  11.  
  12. <BODY bgcolor="#ffffff">
  13.  
  14. <TABLE border="0" cellpadding="0" cellspacing="0" width="100%">
  15.   <TR>
  16.     <TD class="block" valign="MIDDLE" width="100%" bgcolor="#cccccc"><STRONG>
  17.       <P class="block"> ActivePerl FAQ</P>
  18.       </STRONG></TD>
  19.   </TR>
  20. </TABLE>
  21.  
  22. <UL>
  23.   <LI><A href="#NAME">NAME</A></LI>
  24.   <LI><A href="#DESCRIPTION">DESCRIPTION</A>
  25.     <UL>
  26.       <LI><A href="#Certain_functions_don_t_seem_to_">Certain functions don't seem to work on
  27.         ActivePerl.</A></LI>
  28.       <LI><A href="#The_exec_function_doesn_t_seem_t">The exec function doesn't seem to work under
  29.         Perl for ISAPI, Perl for WebSite, or PerlScript. Why not?</A></LI>
  30.       <LI><A href="#What_s_the_difference_between_Pe">What's the difference between ActivePerl and
  31.         the old 3xx builds?</A></LI>
  32.       <LI><A href="#What_s_the_difference_between_ru">What's the difference between running
  33.         ActivePerl on Windows NT</A></LI>
  34.       <LI><A href="#Why_don_t_the_examples_from_the_">Why don't the examples from the Camel book
  35.         work?</A></LI>
  36.       <LI><A href="#Why_don_t_certain_standard_libra">Why don't certain standard library modules
  37.         work?</A></LI>
  38.       <LI><A href="#How_do_I_make_a_UNIX_based_scrip">How do I make a UNIX-based script work?</A></LI>
  39.       <LI><A href="#How_does_the_chmod_function_work">How does the chmod function work on Win32
  40.         platforms?</A></LI>
  41.       <LI><A href="#4DOS_doesn_t_recognize_on_the">4DOS doesn't recognize \" on the command
  42.         line.</A></LI>
  43.       <LI><A href="#STDIN_and_STDOUT_and_Piping_don">STDIN and STDOUT, and Piping don't always work
  44.         on NT.</A></LI>
  45.       <LI><A href="#Signal_Handling">Why doesn't signal handling work on Windows.</A></LI>
  46.     </UL>
  47.   </LI>
  48.   <LI><A href="#AUTHOR_AND_COPYRIGHT">AUTHOR AND COPYRIGHT</A></LI>
  49. </UL>
  50. <HR>
  51. <H1><A name="NAME">NAME</A></H1>
  52. <P>ActivePerl faq5 - Implementation Quirks</P>
  53. <HR>
  54. <H1><A name="DESCRIPTION">DESCRIPTION</A></H1>
  55. <P>Issues specific to ActivePerl.</P>
  56. <HR>
  57. <H2><A name="Certain_functions_don_t_seem_to_">Certain functions don't seem to work on ActivePerl.</A></H2>
  58. <P>There are several functions that are unimplemented in the ActivePerl system. Primary among these
  59. is <CODE>alarm()</CODE>, which is used in a few Perl modules. Because they're missing in ActivePerl,
  60. you can't use those modules. Here is a complete list of unimplemented functions:</P>
  61. <DL>
  62.   <DT><STRONG>Functions for processes and process groups</STRONG></DT>
  63.   <DD>
  64.     <P><CODE>alarm(),</CODE> <CODE>fork(),</CODE> <CODE>getpgrp(),</CODE> <CODE>getppid(),</CODE> <CODE>getpriority(),</CODE>
  65.     <CODE>setpgrp(),</CODE> <CODE>setpriority()</CODE></P>
  66.   </DD>
  67.   <DT><STRONG><A name="item_Fetching">Fetching user and group info</A></STRONG></DT>
  68.   <DD>
  69.     <P><CODE>endgrent(),</CODE> <CODE>endpwent(),</CODE> <CODE>getgrent(),</CODE> <CODE>getgrgid(),</CODE>
  70.     <CODE>getgrnam(),</CODE> <CODE>getpwent(),</CODE> <CODE>getpwnam(),</CODE> <CODE>getpwuid(),</CODE>
  71.     <CODE>setgrent(),</CODE> <CODE>setpwent()</CODE></P>
  72.   </DD>
  73.   <DT><STRONG><A name="item_System">System V interprocess communication functions</A></STRONG></DT>
  74.   <DD>
  75.     <P><CODE>msgctl(),</CODE> <CODE>msgget(),</CODE> <CODE>msgrcv(),</CODE> <CODE>msgsnd(),</CODE> <CODE>semctl(),</CODE>
  76.     <CODE>semget(),</CODE> <CODE>semop(),</CODE> <CODE>shmctl(),</CODE> <CODE>shmget(),</CODE> <CODE>shmread(),</CODE>
  77.     <CODE>shmwrite()</CODE></P>
  78.   </DD>
  79.   <DT><STRONG>Functions for filehandles, files, or directories</STRONG></DT>
  80.   <DD>
  81.     <P><CODE>link(),</CODE> <CODE>symlink(),</CODE> <CODE>chroot()</CODE></P>
  82.   </DD>
  83.   <DT><STRONG><A name="item_Input">Input and output functions</A></STRONG></DT>
  84.   <DD>
  85.     <P><CODE>syscall()</CODE></P>
  86.   </DD>
  87.   <DT><STRONG>Fetching network info</STRONG></DT>
  88.   <DD>
  89.     <P><CODE>getnetbyname(),</CODE> <CODE>getnetbyaddr(),</CODE> <CODE>getnetent(),</CODE> <CODE>getprotoent(),</CODE>
  90.     <CODE>getservent(),</CODE> <CODE>sethostent(),</CODE> <CODE>setnetent(),</CODE> <CODE>setprotoent(),</CODE>
  91.     <CODE>setservent(),</CODE> <CODE>endhostent(),</CODE> <CODE>endnetent(),</CODE> <CODE>endprotoent(),</CODE>
  92.     <CODE>endservent(),</CODE> <CODE>socketpair()</CODE></P>
  93.   </DD>
  94. </DL>
  95. <P>See the perlport and perlwin32 documentation pages for more information on the portability of
  96. builtin functions in ActivePerl.</P>
  97. <HR>
  98. <H2><A name="The_exec_function_doesn_t_seem_t">The exec function doesn't seem to work under Perl for
  99. ISAPI, Perl for WebSite, or PerlScript. Why not?</A></H2>
  100. <P>Perl for ISAPI, Perl for WebSite, and PerlScript share a process space with the web server and
  101. any number of other extensions. As a result, the <CODE>exec()</CODE> function is unimplemented,
  102. because it would cause the web server to terminate (the <CODE>exec()</CODE> function executes a
  103. system command and never returns).</P>
  104. <HR>
  105. <H2><A name="What_s_the_difference_between_Pe">What's the difference between ActivePerl and the old
  106. 3xx builds?</A></H2>
  107. <P>At one time, Perl on the Win32 platform was found in two versions, Gurusamy Sarathy's port, and
  108. the ActiveState port. The ActiveState port of Perl included such tools as Perl for ISAPI and
  109. PerlScript, at the expense of exposing Perl's internals in a slightly different fashion than
  110. standard Perl. Sarathy's port featured a high degree of compatibility with standard Perl, which
  111. enabled users of Sarathy's port to use many modules that were not compatible with ActiveState Perl.</P>
  112. <P>The oneperl effort brought both ports of Perl together, and ActivePerl is the standard perl
  113. distribution for the Win32 system. All modules that can be used on Win32 can be used with this port.
  114. You no longer have to worry about whose perl the module is for. Just grab it, compile it (if
  115. needed), and use it.</P>
  116. <HR>
  117. <H2><A name="What_s_the_difference_between_ru">What's the difference between running ActivePerl on
  118. Windows NT versus running it on Windows 95?</A></H2>
  119. <P>There should be little difference between running Perl on the two operating systems. You should
  120. watch for the following, though:</P>
  121. <UL>
  122.   <LI>
  123.     <P>The Win32::NetAdmin, Win32::NetResource, and Win32::EventLog modules will not run on Windows
  124.     95.</P>
  125.   </LI>
  126.   <LI>
  127.     <P>Some functions that work on Windows NT reportedly do not work or are buggy on Windows 95. An
  128.     example is <CODE>flock().</CODE></P>
  129.   </LI>
  130.   <LI>
  131.     <P>Finally, many helpful programs that are available on Windows NT are not there on Windows 95. <CODE>hostname</CODE>,
  132.     for example, is not available on Windows 95.</P>
  133.   </LI>
  134. </UL>
  135. <P>If you're worried about using a feature from one or the other, check the result of the function
  136. Win32::IsWinNT() to see what OS you're running on. See <A href="../Windows/ActivePerl-Winfaq9.html#What_modules_come_with_the_Perl_">What
  137. modules come with the ActivePerl distribution?</A>.</P>
  138. <HR>
  139. <H2><A name="Why_don_t_the_examples_from_the_">Why don't the examples from the Camel book work?</A></H2>
  140. <P>The Camel book (aka <EM>Programming Perl</EM>, Wall et.al., O'Reilly & Associates 1996) was
  141. written by UNIX people for, in general, UNIX people.</P>
  142. <P>Some of the examples in the Camel book will work. Some will not. If they fail, it's because
  143. either the functions used are not available, the external tools used are not available, or the
  144. modules used are not available. Usually, for small scripts, it's not to hard to fiddle with them
  145. until they come out correct (see <A href="#How_do_I_make_a_UNIX_based_scrip">How do I make a
  146. UNIX-based script work?</A>).</P>
  147. <P>The Camel and Llama books are good learning tools. However, one of the things you learn as a
  148. ActivePerl programmer is how to port UNIX-targeted scripts and modules to ActivePerl.</P>
  149. <P>For better examples of using ActivePerl, you may want to look at the Gecko book, ``Learning Perl
  150. on Win32 Systems,'' published by O'Reilly.</P>
  151. <HR>
  152. <H2><A name="Why_don_t_certain_standard_libra">Why don't certain standard library modules work?</A></H2>
  153. <P>With ActivePerl, almost all modules will work with ActivePerl as long as they can be built to run
  154. on Win32. The problems that existed with the 3xx versions of Perl for Win32 no longer exist: modules
  155. work on Win32, not just this port or that port of Perl for the Win32 platform!</P>
  156. <P>If a module doesn't work, it may be because the functions it uses are specific to UNIX and won't
  157. work on Win32, or specific to NT and won't work on Windows 95 or Windows 98.</P>
  158. <HR>
  159. <H2><A name="How_do_I_make_a_UNIX_based_scrip">How do I make a UNIX-based script work?</A></H2>
  160. <P>First, make extra-super sure that you are using the script or module in the way it was intended.
  161. Many of us are quick to blame the module, the operating system, or the interpreter when, in reality,
  162. it is our own code that isn't working right.</P>
  163. <P>If you're sure that it's not a problem in your code, the best way to make a UNIX-based script
  164. work is to desk-check it before running it. Look for some of the following things:</P>
  165. <UL>
  166.   <LI>
  167.     <P>Calls to functions unimplemented in ActivePerl. For a list, see <A href="#Certain_functions_don_t_seem_to_">Certain
  168.     functions don't seem to work on ActivePerl.</A>.</P>
  169.   </LI>
  170.   <LI>
  171.     <P>Calls to standard library modules or CPAN modules that aren't available on ActivePerl, or
  172.     that don't work.</P>
  173.   </LI>
  174.   <LI>
  175.     <P><CODE>system()</CODE> or backtick (``) calls to system tools that aren't available on
  176.     ActivePerl.</P>
  177.   </LI>
  178.   <LI>
  179.     <P>Reading and writing files that may be binary. See <A href="../Windows/ActivePerl-Winfaq8.html#Reading_from_and_writing_to_file">Reading
  180.     from and writing to files mysteriously fails. What's wrong?</A>.</P>
  181.   </LI>
  182.   <LI>
  183.     <P>File-system dependent path names and path name parsing. Watch for hard-coded UNIX paths like <EM>/usr/lib</EM>.</P>
  184.   </LI>
  185.   <LI>
  186.     <P>The module or script may require a specific version of Perl or another module. Watch out for
  187.     things like <CODE>require 5.003;</CODE> or <CODE>require Sockets 1.03;</CODE> Check to see if
  188.     the script or module really requires the new version.</P>
  189.   </LI>
  190. </UL>
  191. <P>Of course, it should go without saying that for everything you take out you'll have to put in a
  192. work-around.</P>
  193. <P>Once you've worked around UNIX dependencies in the script or module, try running it through the
  194. debugger to see if what you did helps. If the script or module comes with a <EM>.t</EM> test file,
  195. try using that to test your changed version.</P>
  196. <P>If you do make a change to a UNIX-based script or module, please let the author know. Sometimes
  197. the author will be gracious enough to make changes that will let the program run on ActivePerl. If
  198. the author won't change the program, ask if you can make the altered version available to other
  199. users.</P>
  200. <HR>
  201. <H2><A name="How_does_the_chmod_function_work">How does the chmod function work on Win32 platforms?</A></H2>
  202. <P><CODE>chmod()</CODE> is supported in ActivePerl. However, it can only be used for setting
  203. "owner" read/write access. (The "group" and "other" bits are ignored.)</P>
  204. <P>UNIX-style security for files is not applicable to files on Win32 systems. Win32 systems inherit
  205. from DOS four possible file attributes: archived (A), read-only (R), hidden (H), and system (S).
  206. These can be checked and set with the Win32::File::Get/SetAttributes().</P>
  207. <P>Windows NT systems using NTFS can also have more specific permissions granted on individual files
  208. to users and groups. For builds 300 and above, and the Perl Resource Kit for Win32, you can use the
  209. Win32::FileSecurity module to maintain file permissions.</P>
  210. <HR>
  211. <H2><A name="4DOS_doesn_t_recognize_on_the">4DOS doesn't recognize \" on the command line.</A></H2>
  212. <P>4DOS doesn't recognize the escaped quote on the command line, because all double-quote characters
  213. are seen as delimiters for command line parameters. This is one of the few points (if not the only
  214. one) where 4DOS doesn't quite match up to <EM>COMMAND.COM</EM>.</P>
  215. <P>To get around this, you can enter</P>
  216. <PRE>
  217.     perl -e "print \"Hello, World\n\""
  218. </PRE>
  219. <P>as</P>
  220. <PRE>
  221.     perl -e "print qq(Hello, World\n)"
  222. </PRE>
  223. <P>using Perl's alternative quoting mechanism. The alternative quotes are <CODE>qq()</CODE> for
  224. double quotes, <CODE>q()</CODE> for single quotes, <CODE>qx()</CODE> for backquotes, and <CODE>qw()</CODE>
  225. for list quotes. The parentheses can be substituted for just about anything (like + or | or {} or
  226. <> or #), but that looks weird.</P>
  227. <HR>
  228. <H2><A name="STDIN_and_STDOUT_and_Piping_don">STDIN and STDOUT, and Piping don't always work on NT.</A></H2>
  229. <P>You may get unexpected results when you try to redirect the output of files that use Windows NT's
  230. file association feature. You can use pl2exe or pl2bat to convert a Perl script to an executable or
  231. a batch file. This should solve any problems you may have with redirection.</P>
  232. <HR>
  233. <H2><A name="#Signal_Handling">Why doesn't signal handling work on Windows?</A></H2>
  234. <P>Signals are unsupported by the Win32 API. The C Runtime provides crude support for signals, but
  235. there are serious caveats, such as inability to die() or exit() from a signal handler. Perl itself
  236. does not guarantee that signal handlers will not interrupt critical operations such as memory
  237. allocation, which means signal invocation may throw perl internals into disarray. For these reasons,
  238. signals are unsupported at this time.</P>
  239. <HR>
  240. <H1><A name="AUTHOR_AND_COPYRIGHT">AUTHOR AND COPYRIGHT</A></H1>
  241. <P>This FAQ was originally assembled and maintained by Evangelo Prodromou. It has been revised and
  242. updated by Brian Jepson of O'Reilly and Associates, and David Grove, David Dmytryshyn, and David
  243. Sparks of ActiveState.</P>
  244. <P>This FAQ is in the public domain. If you use it, however, please ensure that you give credit to
  245. the original authors.</P>
  246. <TABLE border="0" cellpadding="0" cellspacing="0" width="100%">
  247.   <TR>
  248.     <TD class="block" valign="MIDDLE" width="100%" bgcolor="#cccccc"><STRONG>
  249.       <P class="block"> ActivePerl FAQ</P>
  250.       </STRONG></TD>
  251.   </TR>
  252. </TABLE>
  253.  
  254. </BODY>
  255.  
  256. </HTML>
  257.