This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
New perldelta
[perl5.git] / pod / perlclib.pod
1 =head1 NAME
2
3 perlclib - Internal replacements for standard C library functions
4
5 =head1 DESCRIPTION
6
7 One thing Perl porters should note is that F<perl> doesn't tend to use that
8 much of the C standard library internally; you'll see very little use of, 
9 for example, the F<ctype.h> functions in there. This is because Perl
10 tends to reimplement or abstract standard library functions, so that we
11 know exactly how they're going to operate.
12
13 This is a reference card for people who are familiar with the C library
14 and who want to do things the Perl way; to tell them which functions
15 they ought to use instead of the more normal C functions. 
16
17 =head2 Conventions
18
19 In the following tables:
20
21 =over 3
22
23 =item C<t>
24
25 is a type.
26
27 =item C<p>
28
29 is a pointer.
30
31 =item C<n>
32
33 is a number.
34
35 =item C<s>
36
37 is a string.
38
39 =back
40
41 C<sv>, C<av>, C<hv>, etc. represent variables of their respective types.
42
43 =head2 File Operations
44
45 Instead of the F<stdio.h> functions, you should use the Perl abstraction
46 layer. Instead of C<FILE*> types, you need to be handling C<PerlIO*>
47 types.  Don't forget that with the new PerlIO layered I/O abstraction 
48 C<FILE*> types may not even be available. See also the C<perlapio>
49 documentation for more information about the following functions:
50
51  Instead Of:                 Use:
52
53  stdin                       PerlIO_stdin()
54  stdout                      PerlIO_stdout()
55  stderr                      PerlIO_stderr()
56
57  fopen(fn, mode)             PerlIO_open(fn, mode)
58  freopen(fn, mode, stream)   PerlIO_reopen(fn, mode, perlio) (Dep-
59                                recated)
60  fflush(stream)              PerlIO_flush(perlio)
61  fclose(stream)              PerlIO_close(perlio)
62
63 =head2 File Input and Output
64
65  Instead Of:                 Use:
66
67  fprintf(stream, fmt, ...)   PerlIO_printf(perlio, fmt, ...)
68
69  [f]getc(stream)             PerlIO_getc(perlio)
70  [f]putc(stream, n)          PerlIO_putc(perlio, n)
71  ungetc(n, stream)           PerlIO_ungetc(perlio, n)
72
73 Note that the PerlIO equivalents of C<fread> and C<fwrite> are slightly
74 different from their C library counterparts:
75
76  fread(p, size, n, stream)   PerlIO_read(perlio, buf, numbytes)
77  fwrite(p, size, n, stream)  PerlIO_write(perlio, buf, numbytes)
78
79  fputs(s, stream)            PerlIO_puts(perlio, s)
80
81 There is no equivalent to C<fgets>; one should use C<sv_gets> instead:
82
83  fgets(s, n, stream)         sv_gets(sv, perlio, append)
84
85 =head2 File Positioning
86
87  Instead Of:                 Use:
88
89  feof(stream)                PerlIO_eof(perlio)
90  fseek(stream, n, whence)    PerlIO_seek(perlio, n, whence)
91  rewind(stream)              PerlIO_rewind(perlio)
92
93  fgetpos(stream, p)          PerlIO_getpos(perlio, sv)
94  fsetpos(stream, p)          PerlIO_setpos(perlio, sv)
95
96  ferror(stream)              PerlIO_error(perlio)
97  clearerr(stream)            PerlIO_clearerr(perlio)
98
99 =head2 Memory Management and String Handling
100
101  Instead Of:                    Use:
102
103  t* p = malloc(n)               Newx(p, n, t)
104  t* p = calloc(n, s)            Newxz(p, n, t)
105  p = realloc(p, n)              Renew(p, n, t)
106  memcpy(dst, src, n)            Copy(src, dst, n, t)
107  memmove(dst, src, n)           Move(src, dst, n, t)
108  memcpy(dst, src, sizeof(t))    StructCopy(src, dst, t)
109  memset(dst, 0, n * sizeof(t))  Zero(dst, n, t)
110  memzero(dst, 0)                Zero(dst, n, char)
111  free(p)                        Safefree(p)
112
113  strdup(p)                      savepv(p)
114  strndup(p, n)                  savepvn(p, n) (Hey, strndup doesn't
115                                                exist!)
116
117  strstr(big, little)            instr(big, little)
118  strcmp(s1, s2)                 strLE(s1, s2) / strEQ(s1, s2)
119                                               / strGT(s1,s2)
120  strncmp(s1, s2, n)             strnNE(s1, s2, n) / strnEQ(s1, s2, n)
121
122  memcmp(p1, p2, n)              memNE(p1, p2, n)
123  !memcmp(p1, p2, n)             memEQ(p1, p2, n)
124
125 Notice the different order of arguments to C<Copy> and C<Move> than used
126 in C<memcpy> and C<memmove>.
127
128 Most of the time, though, you'll want to be dealing with SVs internally
129 instead of raw C<char *> strings:
130
131  strlen(s)                   sv_len(sv)
132  strcpy(dt, src)             sv_setpv(sv, s)
133  strncpy(dt, src, n)         sv_setpvn(sv, s, n)
134  strcat(dt, src)             sv_catpv(sv, s)
135  strncat(dt, src)            sv_catpvn(sv, s)
136  sprintf(s, fmt, ...)        sv_setpvf(sv, fmt, ...)
137
138 Note also the existence of C<sv_catpvf> and C<sv_vcatpvfn>, combining
139 concatenation with formatting.
140
141 Sometimes instead of zeroing the allocated heap by using Newxz() you
142 should consider "poisoning" the data.  This means writing a bit
143 pattern into it that should be illegal as pointers (and floating point
144 numbers), and also hopefully surprising enough as integers, so that
145 any code attempting to use the data without forethought will break
146 sooner rather than later.  Poisoning can be done using the Poison()
147 macros, which have similar arguments to Zero():
148
149  PoisonWith(dst, n, t, b)    scribble memory with byte b
150  PoisonNew(dst, n, t)        equal to PoisonWith(dst, n, t, 0xAB)
151  PoisonFree(dst, n, t)       equal to PoisonWith(dst, n, t, 0xEF)
152  Poison(dst, n, t)           equal to PoisonFree(dst, n, t)
153
154 =head2 Character Class Tests
155
156 There are several types of character class tests that Perl implements.
157 The only ones described here are those that directly correspond to C
158 library functions that operate on 8-bit characters, but there are
159 equivalents that operate on wide characters, and UTF-8 encoded strings.
160 All are more fully described in L<perlapi/Character classification> and
161 L<perlapi/Character case changing>.
162
163 The C library routines listed in the table below return values based on
164 the current locale.  Use the entries in the final column for that
165 functionality.  The other two columns always assume a POSIX (or C)
166 locale.  The entries in the ASCII column are only meaningful for ASCII
167 inputs, returning FALSE for anything else.  Use these only when you
168 B<know> that is what you want.  The entries in the Latin1 column assume
169 that the non-ASCII 8-bit characters are as Unicode defines, them, the
170 same as ISO-8859-1, often called Latin 1.
171
172  Instead Of:  Use for ASCII:   Use for Latin1:      Use for locale:
173
174  isalnum(c)  isALPHANUMERIC(c) isALPHANUMERIC_L1(c) isALPHANUMERIC_LC(c)
175  isalpha(c)  isALPHA(c)        isALPHA_L1(c)        isALPHA_LC(u )
176  isascii(c)  isASCII(c)                             isASCII_LC(c)
177  isblank(c)  isBLANK(c)        isBLANK_L1(c)        isBLANK_LC(c)
178  iscntrl(c)  isCNTRL(c)        isCNTRL_L1(c)        isCNTRL_LC(c)
179  isdigit(c)  isDIGIT(c)        isDIGIT_L1(c)        isDIGIT_LC(c)
180  isgraph(c)  isGRAPH(c)        isGRAPH_L1(c)        isGRAPH_LC(c)
181  islower(c)  isLOWER(c)        isLOWER_L1(c)        isLOWER_LC(c)
182  isprint(c)  isPRINT(c)        isPRINT_L1(c)        isPRINT_LC(c)
183  ispunct(c)  isPUNCT(c)        isPUNCT_L1(c)        isPUNCT_LC(c)
184  isspace(c)  isSPACE(c)        isSPACE_L1(c)        isSPACE_LC(c)
185  isupper(c)  isUPPER(c)        isUPPER_L1(c)        isUPPER_LC(c)
186  isxdigit(c) isXDIGIT(c)       isXDIGIT_L1(c)       isXDIGIT_LC(c)
187
188  tolower(c)  toLOWER(c)        toLOWER_L1(c)        toLOWER_LC(c)
189  toupper(c)  toUPPER(c)                             toUPPER_LC(c)
190
191 To emphasize that you are operating only on ASCII characters, you can
192 append C<_A> to each of the macros in the ASCII column: C<isALPHA_A>,
193 C<isDIGIT_A>, and so on.
194
195 (There is no entry in the Latin1 column for C<isascii> even though there
196 is an C<isASCII_L1>, which is identical to C<isASCII>;  the
197 latter name is clearer.  There is no entry in the Latin1 column for
198 C<toupper> because the result can be non-Latin1.  You have to use
199 C<toUPPER_uni>, as described in L<perlapi/Character case changing>.)
200
201 =head2 F<stdlib.h> functions
202
203  Instead Of:                 Use:
204
205  atof(s)                     Atof(s)
206  atoi(s)                     grok_atoUV(s, &uv, &e)
207  atol(s)                     grok_atoUV(s, &uv, &e)
208  strtod(s, &p)               Nothing.  Just don't use it.
209  strtol(s, &p, n)            grok_atoUV(s, &uv, &e)
210  strtoul(s, &p, n)           grok_atoUV(s, &uv, &e)
211
212 Typical use is to do range checks on C<uv> before casting:
213
214   int i; UV uv; char* end_ptr;
215   if (grok_atoUV(input, &uv, &end_ptr)
216       && uv <= INT_MAX)
217     i = (int)uv;
218     ... /* continue parsing from end_ptr */
219   } else {
220     ... /* parse error: not a decimal integer in range 0 .. MAX_IV */
221   }
222
223 Notice also the C<grok_bin>, C<grok_hex>, and C<grok_oct> functions in
224 F<numeric.c> for converting strings representing numbers in the respective
225 bases into C<NV>s.  Note that grok_atoUV() doesn't handle negative inputs,
226 or leading whitespace (being purposefully strict).
227
228 Note that strtol() and strtoul() may be disguised as Strtol(), Strtoul(),
229 Atol(), Atoul().  Avoid those, too.
230
231 In theory C<Strtol> and C<Strtoul> may not be defined if the machine perl is
232 built on doesn't actually have strtol and strtoul. But as those 2
233 functions are part of the 1989 ANSI C spec we suspect you'll find them
234 everywhere by now.
235
236  int rand()                  double Drand01()
237  srand(n)                    { seedDrand01((Rand_seed_t)n);
238                                PL_srand_called = TRUE; }
239
240  exit(n)                     my_exit(n)
241  system(s)                   Don't. Look at pp_system or use my_popen.
242
243  getenv(s)                   PerlEnv_getenv(s)
244  setenv(s, val)              my_setenv(s, val)
245
246 =head2 Miscellaneous functions
247
248 You should not even B<want> to use F<setjmp.h> functions, but if you
249 think you do, use the C<JMPENV> stack in F<scope.h> instead.
250
251 For C<signal>/C<sigaction>, use C<rsignal(signo, handler)>.
252
253 =head1 SEE ALSO
254
255 L<perlapi>, L<perlapio>, L<perlguts>
256