home *** CD-ROM | disk | FTP | other *** search
/ BURKS 2 / BURKS_AUG97.ISO / SLAKWARE / D13 / PERL2.TGZ / perl2.tar / usr / lib / perl5 / pod / perltrap.pod < prev    next >
Text File  |  1996-06-28  |  12KB  |  523 lines

  1. =head1 NAME
  2.  
  3. perltrap - Perl traps for the unwary
  4.  
  5. =head1 DESCRIPTION
  6.  
  7. The biggest trap of all is forgetting to use the B<-w> switch; see
  8. L<perlrun>.  The second biggest trap is not making your entire program
  9. runnable under C<use strict>.
  10.  
  11. =head2 Awk Traps
  12.  
  13. Accustomed B<awk> users should take special note of the following:
  14.  
  15. =over 4
  16.  
  17. =item *
  18.  
  19. The English module, loaded via
  20.  
  21.     use English;
  22.  
  23. allows you to refer to special variables (like $RS) as 
  24. though they were in B<awk>; see L<perlvar> for details.
  25.  
  26. =item *
  27.  
  28. Semicolons are required after all simple statements in Perl (except
  29. at the end of a block).  Newline is not a statement delimiter.
  30.  
  31. =item *
  32.  
  33. Curly brackets are required on C<if>s and C<while>s.
  34.  
  35. =item *
  36.  
  37. Variables begin with "$" or "@" in Perl.
  38.  
  39. =item *
  40.  
  41. Arrays index from 0.  Likewise string positions in substr() and
  42. index().
  43.  
  44. =item *
  45.  
  46. You have to decide whether your array has numeric or string indices.
  47.  
  48. =item *
  49.  
  50. Associative array values do not spring into existence upon mere
  51. reference.
  52.  
  53. =item *
  54.  
  55. You have to decide whether you want to use string or numeric
  56. comparisons.
  57.  
  58. =item *
  59.  
  60. Reading an input line does not split it for you.  You get to split it
  61. yourself to an array.  And split() operator has different
  62. arguments.
  63.  
  64. =item *
  65.  
  66. The current input line is normally in $_, not $0.  It generally does
  67. not have the newline stripped.  ($0 is the name of the program
  68. executed.)  See L<perlvar>.
  69.  
  70. =item *
  71.  
  72. $<I<digit>> does not refer to fields--it refers to substrings matched by
  73. the last match pattern.
  74.  
  75. =item *
  76.  
  77. The print() statement does not add field and record separators unless
  78. you set C<$,> and C<$.>.  You can set $OFS and $ORS if you're using
  79. the English module.
  80.  
  81. =item *
  82.  
  83. You must open your files before you print to them.
  84.  
  85. =item *
  86.  
  87. The range operator is "..", not comma.  The comma operator works as in
  88. C.
  89.  
  90. =item *
  91.  
  92. The match operator is "=~", not "~".  ("~" is the one's complement
  93. operator, as in C.)
  94.  
  95. =item *
  96.  
  97. The exponentiation operator is "**", not "^".  "^" is the XOR
  98. operator, as in C.  (You know, one could get the feeling that B<awk> is
  99. basically incompatible with C.)
  100.  
  101. =item *
  102.  
  103. The concatenation operator is ".", not the null string.  (Using the
  104. null string would render C</pat/ /pat/> unparsable, since the third slash
  105. would be interpreted as a division operator--the tokener is in fact
  106. slightly context sensitive for operators like "/", "?", and ">".
  107. And in fact, "." itself can be the beginning of a number.)
  108.  
  109. =item *
  110.  
  111. The C<next>, C<exit>, and C<continue> keywords work differently.
  112.  
  113. =item *
  114.  
  115.  
  116. The following variables work differently:
  117.  
  118.       Awk    Perl
  119.       ARGC    $#ARGV or scalar @ARGV
  120.       ARGV[0]    $0
  121.       FILENAME    $ARGV
  122.       FNR    $. - something
  123.       FS    (whatever you like)
  124.       NF    $#Fld, or some such
  125.       NR    $.
  126.       OFMT    $#
  127.       OFS    $,
  128.       ORS    $\
  129.       RLENGTH    length($&)
  130.       RS    $/
  131.       RSTART    length($`)
  132.       SUBSEP    $;
  133.  
  134. =item *
  135.  
  136. You cannot set $RS to a pattern, only a string.
  137.  
  138. =item *
  139.  
  140. When in doubt, run the B<awk> construct through B<a2p> and see what it
  141. gives you.
  142.  
  143. =back
  144.  
  145. =head2 C Traps
  146.  
  147. Cerebral C programmers should take note of the following:
  148.  
  149. =over 4
  150.  
  151. =item *
  152.  
  153. Curly brackets are required on C<if>'s and C<while>'s.
  154.  
  155. =item *
  156.  
  157. You must use C<elsif> rather than C<else if>.
  158.  
  159. =item *
  160.  
  161. The C<break> and C<continue> keywords from C become in 
  162. Perl C<last> and C<next>, respectively.
  163. Unlike in C, these do I<NOT> work within a C<do { } while> construct.
  164.  
  165. =item *
  166.  
  167. There's no switch statement.  (But it's easy to build one on the fly.)
  168.  
  169. =item *
  170.  
  171. Variables begin with "$" or "@" in Perl.
  172.  
  173. =item *
  174.  
  175. printf() does not implement the "*" format for interpolating
  176. field widths, but it's trivial to use interpolation of double-quoted
  177. strings to achieve the same effect.
  178.  
  179. =item *
  180.  
  181. Comments begin with "#", not "/*".
  182.  
  183. =item *
  184.  
  185. You can't take the address of anything, although a similar operator
  186. in Perl 5 is the backslash, which creates a reference.
  187.  
  188. =item *
  189.  
  190. C<ARGV> must be capitalized.  C<$ARGV[0]> is C's C<argv[1]>, and C<argv[0]>
  191. ends up in C<$0>.
  192.  
  193. =item *
  194.  
  195. System calls such as link(), unlink(), rename(), etc. return nonzero for
  196. success, not 0.
  197.  
  198. =item *
  199.  
  200. Signal handlers deal with signal names, not numbers.  Use C<kill -l>
  201. to find their names on your system.
  202.  
  203. =back
  204.  
  205. =head2 Sed Traps
  206.  
  207. Seasoned B<sed> programmers should take note of the following:
  208.  
  209. =over 4
  210.  
  211. =item *
  212.  
  213. Backreferences in substitutions use "$" rather than "\".
  214.  
  215. =item *
  216.  
  217. The pattern matching metacharacters "(", ")", and "|" do not have backslashes
  218. in front.
  219.  
  220. =item *
  221.  
  222. The range operator is C<...>, rather than comma.
  223.  
  224. =back
  225.  
  226. =head2 Shell Traps
  227.  
  228. Sharp shell programmers should take note of the following:
  229.  
  230. =over 4
  231.  
  232. =item *
  233.  
  234. The backtick operator does variable interpretation without regard to
  235. the presence of single quotes in the command.
  236.  
  237. =item *
  238.  
  239. The backtick operator does no translation of the return value, unlike B<csh>.
  240.  
  241. =item *
  242.  
  243. Shells (especially B<csh>) do several levels of substitution on each
  244. command line.  Perl does substitution only in certain constructs
  245. such as double quotes, backticks, angle brackets, and search patterns.
  246.  
  247. =item *
  248.  
  249. Shells interpret scripts a little bit at a time.  Perl compiles the
  250. entire program before executing it (except for C<BEGIN> blocks, which
  251. execute at compile time).
  252.  
  253. =item *
  254.  
  255. The arguments are available via @ARGV, not $1, $2, etc.
  256.  
  257. =item *
  258.  
  259. The environment is not automatically made available as separate scalar
  260. variables.
  261.  
  262. =back
  263.  
  264. =head2 Perl Traps
  265.  
  266. Practicing Perl Programmers should take note of the following:
  267.  
  268. =over 4
  269.  
  270. =item *
  271.  
  272. Remember that many operations behave differently in a list
  273. context than they do in a scalar one.  See L<perldata> for details.
  274.  
  275. =item *
  276.  
  277. Avoid barewords if you can, especially all lower-case ones.
  278. You can't tell just by looking at it whether a bareword is 
  279. a function or a string.  By using quotes on strings and 
  280. parens on function calls, you won't ever get them confused.
  281.  
  282. =item *
  283.  
  284. You cannot discern from mere inspection which built-ins
  285. are unary operators (like chop() and chdir()) 
  286. and which are list operators (like print() and unlink()).
  287. (User-defined subroutines can B<only> be list operators, never
  288. unary ones.)  See L<perlop>.
  289.  
  290. =item *
  291.  
  292. People have a hard time remembering that some functions
  293. default to $_, or @ARGV, or whatever, but that others which
  294. you might expect to do not.  
  295.  
  296. =item * 
  297.  
  298. The <FH> construct is not the name of the filehandle, it is a readline
  299. operation on that handle.  The data read is only assigned to $_ if the
  300. file read is the sole condition in a while loop:
  301.  
  302.     while (<FH>)      { }
  303.     while ($_ = <FH>) { }..
  304.     <FH>;  # data discarded!
  305.  
  306. =item * 
  307.  
  308. Remember not to use "C<=>" when you need "C<=~>";
  309. these two constructs are quite different:
  310.  
  311.     $x =  /foo/;
  312.     $x =~ /foo/;
  313.  
  314. =item *
  315.  
  316. The C<do {}> construct isn't a real loop that you can use 
  317. loop control on.
  318.  
  319. =item *
  320.  
  321. Use my() for local variables whenever you can get away with 
  322. it (but see L<perlform> for where you can't).  
  323. Using local() actually gives a local value to a global 
  324. variable, which leaves you open to unforeseen side-effects
  325. of dynamic scoping.
  326.  
  327. =item *
  328.  
  329. If you localize an exported variable in a module, its exported value will
  330. not change.  The local name becomes an alias to a new value but the
  331. external name is still an alias for the original.
  332.  
  333. =back
  334.  
  335. =head2 Perl4 Traps
  336.  
  337. Penitent Perl 4 Programmers should take note of the following
  338. incompatible changes that occurred between release 4 and release 5:
  339.  
  340. =over 4
  341.  
  342. =item *
  343.  
  344. C<@> now always interpolates an array in double-quotish strings.  Some programs
  345. may now need to use backslash to protect any C<@> that shouldn't interpolate.
  346.  
  347. =item *
  348.  
  349. Barewords that used to look like strings to Perl will now look like subroutine
  350. calls if a subroutine by that name is defined before the compiler sees them.
  351. For example:
  352.  
  353.     sub SeeYa { die "Hasta la vista, baby!" }
  354.     $SIG{'QUIT'} = SeeYa;
  355.  
  356. In Perl 4, that set the signal handler; in Perl 5, it actually calls the
  357. function!  You may use the B<-w> switch to find such places.
  358.  
  359. =item *
  360.  
  361. Symbols starting with C<_> are no longer forced into package C<main>, except
  362. for $_ itself (and @_, etc.).
  363.  
  364. =item *
  365.  
  366. Double-colon is now a valid package separator in an identifier.  Thus these
  367. beh