=begin original
is a type.
=end original
は型です。
=item C
=begin original
is a pointer.
=end original
はポインタです。
=item C
=begin original
is a number.
=end original
は数値です。
=item C
=begin original
is a string.
=end original
は文字列です。
=back
=begin original
C, C, C, etc. represent variables of their respective types.
=end original
C, C, C などはそれぞれ対応する型の変数です。
=head2 File Operations
(ファイル操作)
=begin original
Instead of the F functions, you should use the Perl abstraction
layer. Instead of C types, you need to be handling C
types. Don't forget that with the new PerlIO layered I/O abstraction
C types may not even be available. See also the C
documentation for more information about the following functions:
=end original
F 関数の代わりに、Perl 抽象層を使うべきです。
C 型の代わりに、C 型を扱う必要があります。
新しい PerlIO 層の I/O 抽象化では C 型は利用できないかも知れないことを
忘れないでください。
以下の関数に関するさらなる詳細については C 文書を
参照してください:
Instead Of: Use:
stdin PerlIO_stdin()
stdout PerlIO_stdout()
stderr PerlIO_stderr()
fopen(fn, mode) PerlIO_open(fn, mode)
freopen(fn, mode, stream) PerlIO_reopen(fn, mode, perlio) (Dep-
recated)
fflush(stream) PerlIO_flush(perlio)
fclose(stream) PerlIO_close(perlio)
=head2 File Input and Output
(ファイル入力と出力)
Instead Of: Use:
fprintf(stream, fmt, ...) PerlIO_printf(perlio, fmt, ...)
[f]getc(stream) PerlIO_getc(perlio)
[f]putc(stream, n) PerlIO_putc(perlio, n)
ungetc(n, stream) PerlIO_ungetc(perlio, n)
=begin original
Note that the PerlIO equivalents of C and C are slightly
different from their C library counterparts:
=end original
C と C の PerlIO の代用品は C ライブラリの対応物とは
少し違うことに注意してください:
fread(p, size, n, stream) PerlIO_read(perlio, buf, numbytes)
fwrite(p, size, n, stream) PerlIO_write(perlio, buf, numbytes)
fputs(s, stream) PerlIO_puts(perlio, s)
=begin original
There is no equivalent to C; one should use C instead:
=end original
C の等価物はありません; 代わりに C を使うべきです:
fgets(s, n, stream) sv_gets(sv, perlio, append)
=head2 File Positioning
(ファイル位置)
Instead Of: Use:
feof(stream) PerlIO_eof(perlio)
fseek(stream, n, whence) PerlIO_seek(perlio, n, whence)
rewind(stream) PerlIO_rewind(perlio)
fgetpos(stream, p) PerlIO_getpos(perlio, sv)
fsetpos(stream, p) PerlIO_setpos(perlio, sv)
ferror(stream) PerlIO_error(perlio)
clearerr(stream) PerlIO_clearerr(perlio)
=head2 Memory Management and String Handling
(メモリ管理と文字列操作)
Instead Of: Use:
t* p = malloc(n) Newx(p, n, t)
t* p = calloc(n, s) Newxz(p, n, t)
p = realloc(p, n) Renew(p, n, t)
memcpy(dst, src, n) Copy(src, dst, n, t)
memmove(dst, src, n) Move(src, dst, n, t)
memcpy(dst, src, sizeof(t)) StructCopy(src, dst, t)
memset(dst, 0, n * sizeof(t)) Zero(dst, n, t)
memzero(dst, 0) Zero(dst, n, char)
free(p) Safefree(p)
strdup(p) savepv(p)
strndup(p, n) savepvn(p, n) (Hey, strndup doesn't
exist!)
strstr(big, little) instr(big, little)
memmem(big, blen, little, len) ninstr(big, bigend, little, little_end)
strcmp(s1, s2) strLE(s1, s2) / strEQ(s1, s2)
/ strGT(s1,s2)
strncmp(s1, s2, n) strnNE(s1, s2, n) / strnEQ(s1, s2, n)
memcmp(p1, p2, n) memNE(p1, p2, n)
!memcmp(p1, p2, n) memEQ(p1, p2, n)
=begin original
Notice the different order of arguments to C and C than used
in C and C.
=end original
C および C の引数の順番は C および C と異なる
ことに注意してください。
=begin original
Most of the time, though, you'll want to be dealing with SVs internally
instead of raw C strings:
=end original
しかし、大抵の場合、生の C 文字列ではなく内部的に SV を
扱いたいでしょう:
strlen(s) sv_len(sv)
strcpy(dt, src) sv_setpv(sv, s)
strncpy(dt, src, n) sv_setpvn(sv, s, n)
strcat(dt, src) sv_catpv(sv, s)
strncat(dt, src) sv_catpvn(sv, s)
sprintf(s, fmt, ...) sv_setpvf(sv, fmt, ...)
=begin original
If you do need raw strings, some platforms have safer interfaces, and
Perl makes sure a version of these are available on all platforms:
=end original
生の文字列に何かする必要がある場合、一部のプラットフォームは
より安全なインターフェースを持ち、Perl はこれらのバージョンが
全てのプラットフォームで利用可能であるようにしています:
strlcat(dt, src, sizeof(dt)) my_strlcat(dt, src, sizeof(dt))
strlcpy(dt, src, sizeof(dt)) my_strlcpy(dt, src, sizeof(dt))
strnlen(s) my_strnlen(s, maxlen)
=begin original
Note also the existence of C and C, combining
concatenation with formatting.
=end original
連結とフォーマッティングを結合した C および C が
あることにも注意してください。
=begin original
Sometimes instead of zeroing the allocated heap by using Newxz() you
should consider "poisoning" the data. This means writing a bit
pattern into it that should be illegal as pointers (and floating point
numbers), and also hopefully surprising enough as integers, so that
any code attempting to use the data without forethought will break
sooner rather than later. Poisoning can be done using the Poison()
macros, which have similar arguments to Zero():
=end original
時々、Newxz() を使って割り当てられたヒープをゼロにする代わりにデータに
「毒入れ」したいかもしれません。
これは、ポインタ(および浮動小数点数)として不正になり、できれば整数としても
十分に驚くべきビットパターンを書き込んで、考えなしにデータを使おうとする
コードが早めに壊れるようにすることです。
毒入れは Zero() と似たような引数を持つ Poison() マクロで行えます:
PoisonWith(dst, n, t, b) scribble memory with byte b
PoisonNew(dst, n, t) equal to PoisonWith(dst, n, t, 0xAB)
PoisonFree(dst, n, t) equal to PoisonWith(dst, n, t, 0xEF)
Poison(dst, n, t) equal to PoisonFree(dst, n, t)
=head2 Character Class Tests
(文字クラステスト)
=begin original
There are several types of character class tests that Perl implements.
All are more fully described in L and
L.
=end original
Perl が実装しているいくつか種類の文字クラステストがあります。
全ては L と
L でより完全に記述されています。
=begin original
The C library routines listed in the table below return values based on
the current locale. Use the entries in the final column for that
functionality. The other two columns always assume a POSIX (or C)
locale. The entries in the ASCII column are only meaningful for ASCII
inputs, returning FALSE for anything else. Use these only when you
B that is what you want. The entries in the Latin1 column assume
that the non-ASCII 8-bit characters are as Unicode defines them, the
same as ISO-8859-1, often called Latin 1.
=end original
後述する表に挙げられている C ライブラリルーチンは現在のロケールを基にした
値を返します。
この機能のためには最後の列のエントリを使ってください。
残りの二つの列は常に POSIX (あるいは C) ロケールを仮定します。
ASCII 列のエントリは ASCII 入力でのみ意味を持ち、それ以外では FALSE を
返します。
これが望んでいるものであると B<分かっている> 場合にのみこれを使ってください。
Latin1 列のエントリは、非 ASCII 8 ビット文字は Unicode が定義しているように、
ISO-8859-1 (しばしば Latin 1 と呼ばれます) であると仮定します。
=begin original
Instead Of: Use for ASCII: Use for Latin1: Use for locale:
=end original
元: ASCII 用: Latin1 用: ロケール用:
isalnum(c) isALPHANUMERIC(c) isALPHANUMERIC_L1(c) isALPHANUMERIC_LC(c)
isalpha(c) isALPHA(c) isALPHA_L1(c) isALPHA_LC(u )
isascii(c) isASCII(c) isASCII_LC(c)
isblank(c) isBLANK(c) isBLANK_L1(c) isBLANK_LC(c)
iscntrl(c) isCNTRL(c) isCNTRL_L1(c) isCNTRL_LC(c)
isdigit(c) isDIGIT(c) isDIGIT_L1(c) isDIGIT_LC(c)
isgraph(c) isGRAPH(c) isGRAPH_L1(c) isGRAPH_LC(c)
islower(c) isLOWER(c) isLOWER_L1(c) isLOWER_LC(c)
isprint(c) isPRINT(c) isPRINT_L1(c) isPRINT_LC(c)
ispunct(c) isPUNCT(c) isPUNCT_L1(c) isPUNCT_LC(c)
isspace(c) isSPACE(c) isSPACE_L1(c) isSPACE_LC(c)
isupper(c) isUPPER(c) isUPPER_L1(c) isUPPER_LC(c)
isxdigit(c) isXDIGIT(c) isXDIGIT_L1(c) isXDIGIT_LC(c)
tolower(c) toLOWER(c) toLOWER_L1(c)
toupper(c) toUPPER(c)
=begin original
For the corresponding functions like C, I, use
C for non-locale; or C for locale.
And use C instead of C, I. There are
no direct equivalents for locale; best to put the string into an SV.
=end original
C、Iなどの対応する関数では、ロケール以外の場合はCを、ロケールの場合はCを使用します。
また、C、Iの代わりにCを使用します。
ロケールに直接相当するものはありません。
文字列をSVに入れるのが最善です。
(TBR)
=begin original
Don't use any of the functions like C. Those are
non-portable, and interfere with Perl's internal handling.
=end original
C のような関数はどれも使わないでください。
これらは移植性がなく、Perl の内部処理を妨害します。
=begin original
To emphasize that you are operating only on ASCII characters, you can
append C<_A> to each of the macros in the ASCII column: C,
C, and so on.
=end original
念を押しておくと、ASCII 文字のみを操作するなら、ASCII の列のそれぞれの
マクロに C<_A> を追加したものが使えます: C, C などです。
=begin original
(There is no entry in the Latin1 column for C even though there
is an C, which is identical to C; the
latter name is clearer. There is no entry in the Latin1 column for
C because the result can be non-Latin1. You have to use
C, as described in L.)
=end original
(C と等価な C というものはありますが、C の
Latin1 の列はありません; 前者の名前の方が明確です。
C の Latin1 の列はありません; 結果は非 Latin1 に
なるかもしれないからです。
L に記述されている C を
使う必要があります。)
=begin original
Note that the libc caseless comparisons are crippled; Unicode
provides a richer set, using the concept of folding. If you need
more than equality/non-equality, it's probably best to store your
strings in an SV and use SV functions to do the comparision. Similarly
for collation.
=end original
libcの大文字小文字を区別しない比較は機能しないことに注意してください。
Unicodeでは、折り畳みの概念を使用して、より豊富なセットが提供されます。
等価性/非等価性以上のものが必要な場合は、文字列をSVに格納し、SV関数を使用して比較を行うのがおそらく最善です。
照合についても同様です。
(TBR)
=head2 F functions
(F 関数)
Instead Of: Use:
atof(s) my_atof(s) or Atof(s)
atoi(s) grok_atoUV(s, &uv, &e)
atol(s) grok_atoUV(s, &uv, &e)
strtod(s, &p) Strtod(s, &p)
strtol(s, &p, n) Strtol(s, &p, b)
strtoul(s, &p, n) Strtoul(s, &p, b)
=begin original
But note that these are subject to locale; see L.
=end original
しかし、これらはロケールに依存することに注意してください;
L を参照してください。
=begin original
Typical use is to do range checks on C before casting:
=end original
典型的な使用法は、キャストする前の C の範囲チェックです:
int i; UV uv;
char* end_ptr = input_end;
if (grok_atoUV(input, &uv, &end_ptr)
&& uv <= INT_MAX)
i = (int)uv;
... /* continue parsing from end_ptr */
} else {
... /* parse error: not a decimal integer in range 0 .. MAX_IV */
}
=begin original
Notice also the C, C, and C functions in
F for converting strings representing numbers in the respective
bases into Cs. Note that grok_atoUV() doesn't handle negative inputs,
or leading whitespace (being purposefully strict).
=end original
それぞれの基数で数値を表現している文字列を C に変換するための
F にある C, C, C 関数にも
注目してください。
grok_atoUV() は負の入力や先頭の空白を扱わないことに注意してください
(意図的に厳密にしています)。
=head2 Miscellaneous functions
(さまざまな関数)
=begin original
You should not even B to use F functions, but if you
think you do, use the C stack in F instead.
=end original
F 関数を使おうと B<思う> ことすらするべきではありませんが、もし
そう考えているなら、代わりに F の C スタックを
使ってください。
~asctime() Perl_sv_strftime_tm()
~asctime_r() Perl_sv_strftime_tm()
chsize() my_chsize()
~ctime() Perl_sv_strftime_tm()
~ctime_r() Perl_sv_strftime_tm()
~cuserid() DO NOT USE; see its man page
dirfd() my_dirfd()
duplocale() Perl_setlocale()
~ecvt() my_snprintf()
~endgrent_r() endgrent()
~endhostent_r() endhostent()
~endnetent_r() endnetent()
~endprotoent_r() endprotoent()
~endpwent_r() endpwent()
~endservent_r() endservent()
~endutent() endutxent()
exit(n) my_exit(n)
~fcvt() my_snprintf()
freelocale() Perl_setlocale()
~ftw() nftw()
getenv(s) PerlEnv_getenv(s)
~gethostbyaddr() getaddrinfo()
~gethostbyname() getnameinfo()
~getpass() DO NOT USE; see its man page
~getpw() getpwuid()
~getutent() getutxent()
~getutid() getutxid()
~getutline() getutxline()
~gsignal() DO NOT USE; see its man page
localeconv() Perl_localeconv()
mblen() mbrlen()
mbtowc() mbrtowc()
newlocale() Perl_setlocale()
pclose() my_pclose()
popen() my_popen()
~pututline() pututxline()
~qecvt() my_snprintf()
~qfcvt() my_snprintf()
querylocale() Perl_setlocale()
int rand() double Drand01()
srand(n) { seedDrand01((Rand_seed_t)n);
PL_srand_called = TRUE; }
~readdir_r() readdir()
realloc() saferealloc(), Renew() or Renewc()
~re_comp() regcomp()
~re_exec() regexec()
~rexec() rcmd()
~rexec_af() rcmd()
setenv(s, val) my_setenv(s, val)
~setgrent_r() setgrent()
~sethostent_r() sethostent()
setlocale() Perl_setlocale()
setlocale_r() Perl_setlocale()
~setnetent_r() setnetent()
~setprotoent_r() setprotoent()
~setpwent_r() setpwent()
~setservent_r() setservent()
~setutent() setutxent()
sigaction() rsignal(signo, handler)
~siginterrupt() rsignal() with the SA_RESTART flag instead
signal(signo, handler) rsignal(signo, handler)
~ssignal() DO NOT USE; see its man page
strcasecmp() a Perl foldEQ-family function
strerror() sv_string_from_errnum()
strerror_l() sv_string_from_errnum()
strerror_r() sv_string_from_errnum()
strftime() Perl_sv_strftime_tm()
strtod() my_strtod() or Strtod()
system(s) Don't. Look at pp_system or use my_popen.
~tempnam() mkstemp() or tmpfile()
~tmpnam() mkstemp() or tmpfile()
tmpnam_r() mkstemp() or tmpfile()
uselocale() Perl_setlocale()
vsnprintf() my_vsnprintf()
wctob() wcrtomb()
wctomb() wcrtomb()
wsetlocale() Perl_setlocale()
=begin original
The Perl-furnished alternatives are documented in L, which you
should peruse anyway to see what all is available to you.
=end original
Perl が提供している代替策は L に文書化されています;
とにかく何が利用可能かをよく調べて確認する必要があります。
=begin original
The lists are incomplete. Think when using an unlisted function if it
seems likely to interfere with Perl.
=end original
この一覧は不完全です。
一覧にない関数を使うときは、
それが Perl を妨害しそうに感じられるかを考えてください。
=head1 Dealing with locales
(ロケールを扱う)
=begin original
Like it or not, your code will be executed in the context of a locale,
as are all C language programs. See L. Most libc calls are
not affected by the locale, but a surprising number are:
=end original
好むと好まざるとにかかわらず、すべてのC言語プログラムと同様に、コードはロケールのコンテキストで実行されます。
Lを参照してください。
ほとんどのlibc呼び出しはロケールの影響を受けませんが、次のような驚くべき数の呼び出しがあります。
(TBR)
addmntent() getspent_r() sethostent()
alphasort() getspnam() sethostent_r()
asctime() getspnam_r() setnetent()
asctime_r() getwc() setnetent_r()
asprintf() getwchar() setnetgrent()
atof() glob() setprotoent()
atoi() gmtime() setprotoent_r()
atol() gmtime_r() setpwent()
atoll() grantpt() setpwent_r()
btowc() iconv_open() setrpcent()
catopen() inet_addr() setservent()
ctime() inet_aton() setservent_r()
ctime_r() inet_network() setspent()
cuserid() inet_ntoa() sgetspent_r()
daylight inet_ntop() shm_open()
dirname() inet_pton() shm_unlink()
dprintf() initgroups() snprintf()
endaliasent() innetgr() sprintf()
endgrent() iruserok() sscanf()
endgrent_r() iruserok_af() strcasecmp()
endhostent() isalnum() strcasestr()
endhostent_r() isalnum_l() strcoll()
endnetent() isalpha() strerror()
endnetent_r() isalpha_l() strerror_l()
endprotoent() isascii() strerror_r()
endprotoent_r() isascii_l() strfmon()
endpwent() isblank() strfmon_l()
endpwent_r() isblank_l() strfromd()
endrpcent() iscntrl() strfromf()
endservent() iscntrl_l() strfroml()
endservent_r() isdigit() strftime()
endspent() isdigit_l() strftime_l()
err() isgraph() strncasecmp()
error() isgraph_l() strptime()
error_at_line() islower() strsignal()
errx() islower_l() strtod()
fgetwc() isprint() strtof()
fgetwc_unlocked() isprint_l() strtoimax()
fgetws() ispunct() strtol()
fgetws_unlocked() ispunct_l() strtold()
fnmatch() isspace() strtoll()
forkpty() isspace_l() strtoq()
fprintf() isupper() strtoul()
fputwc() isupper_l() strtoull()
fputwc_unlocked() iswalnum() strtoumax()
fputws() iswalnum_l() strtouq()
fputws_unlocked() iswalpha() strverscmp()
fscanf() iswalpha_l() strxfrm()
fwprintf() iswblank() swprintf()
fwscanf() iswblank_l() swscanf()
getaddrinfo() iswcntrl() syslog()
getaliasbyname_r() iswcntrl_l() timegm()
getaliasent_r() iswdigit() timelocal()
getdate() iswdigit_l() timezone
getdate_r() iswgraph() tolower()
getfsent() iswgraph_l() tolower_l()
getfsfile() iswlower() toupper()
getfsspec() iswlower_l() toupper_l()
getgrent() iswprint() towctrans()
getgrent_r() iswprint_l() towlower()
getgrgid() iswpunct() towlower_l()
getgrgid_r() iswpunct_l() towupper()
getgrnam() iswspace() towupper_l()
getgrnam_r() iswspace_l() tzname
getgrouplist() iswupper() tzset()
gethostbyaddr() iswupper_l() ungetwc()
gethostbyaddr_r() iswxdigit() vasprintf()
gethostbyname() iswxdigit_l() vdprintf()
gethostbyname2() isxdigit() verr()
gethostbyname2_r() isxdigit_l() verrx()
gethostbyname_r() localeconv() versionsort()
gethostent() localtime() vfprintf()
gethostent_r() localtime_r() vfscanf()
gethostid() MB_CUR_MAX vfwprintf()
getlogin() mblen() vprintf()
getlogin_r() mbrlen() vscanf()
getmntent() mbrtowc() vsnprintf()
getmntent_r() mbsinit() vsprintf()
getnameinfo() mbsnrtowcs() vsscanf()
getnetbyaddr() mbsrtowcs() vswprintf()
getnetbyaddr_r() mbstowcs() vsyslog()
getnetbyname() mbtowc() vwarn()
getnetbyname_r() mktime() vwarnx()
getnetent() nan() vwprintf()
getnetent_r() nanf() warn()
getnetgrent() nanl() warnx()
getnetgrent_r() nl_langinfo() wcrtomb()
getprotobyname() openpty() wcscasecmp()
getprotobyname_r() printf() wcschr()
getprotobynumber() psiginfo() wcscoll()
getprotobynumber_r() psignal() wcsftime()
getprotoent() putpwent() wcsncasecmp()
getprotoent_r() putspent() wcsnrtombs()
getpw() putwc() wcsrchr()
getpwent() putwchar() wcsrtombs()
getpwent_r() regcomp() wcstod()
getpwnam() regexec() wcstof()
getpwnam_r() res_nclose() wcstoimax()
getpwuid() res_ninit() wcstold()
getpwuid_r() res_nquery() wcstombs()
getrpcbyname_r() res_nquerydomain() wcstoumax()
getrpcbynumber_r() res_nsearch() wcswidth()
getrpcent_r() res_nsend() wcsxfrm()
getrpcport() rpmatch() wctob()
getservbyname() ruserok() wctomb()
getservbyname_r() ruserok_af() wctrans()
getservbyport() scandir() wctype()
getservbyport_r() scanf() wcwidth()
getservent() setaliasent() wordexp()
getservent_r() setgrent() wprintf()
getspent() setgrent_r() wscanf()
=begin original
(The list doesn't include functions that manipulate the locale, such as
C.)
=end original
(この一覧には、C のような、ロケールを操作する関数は
含んでいません。)
=begin original
If any of these functions are called directly or indirectly from your
code, you are affected by the current locale.
=end original
これらの関数のどれかを直接または間接に呼び出すと、
現在のロケールの影響を受けます。
=begin original
The first thing to know about this list is that there are better
alternatives to many of the functions, which it's highly likely that you
should be using instead. See L