perlclib - Online di Cloud

Ini adalah perintah perlclib yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS

PROGRAM:

NAMA


perlclib - Pengganti internal untuk fungsi pustaka C standar

DESKRIPSI


Satu hal yang harus diperhatikan oleh kuli Perl adalah perl tidak cenderung menggunakan C sebanyak itu
perpustakaan standar secara internal; Anda akan melihat sangat sedikit penggunaan, misalnya, the ctype.h
fungsi di sana. Ini karena Perl cenderung mengimplementasikan kembali atau mengabstraksi perpustakaan standar
fungsi, sehingga kita tahu persis bagaimana mereka akan beroperasi.

Ini adalah kartu referensi untuk orang-orang yang akrab dengan perpustakaan C dan yang ingin melakukannya
hal-hal dengan cara Perl; untuk memberi tahu mereka fungsi mana yang harus mereka gunakan alih-alih lebih banyak
fungsi C biasa.

Konvensi
Dalam tabel berikut:

"T"
adalah jenis.

"P"
adalah penunjuk.

"n"
adalah angka.

"s"
adalah string.

"sv", "av", "hv", dll. mewakili variabel dari jenisnya masing-masing.

File Operasi
Alih-alih stdio.h fungsi, Anda harus menggunakan lapisan abstraksi Perl. Dari pada
Jenis "FILE*", Anda harus menangani jenis "PerlIO*". Jangan lupa itu dengan yang baru
Jenis "FILE*" abstraksi I/O berlapis PerlIO bahkan mungkin tidak tersedia. Lihat juga
dokumentasi "perlapio" untuk informasi lebih lanjut tentang fungsi-fungsi berikut:

Alih-alih: Gunakan:

stdin PerlIO_stdin()
stdout PerlIO_stdout()
stderr PerlIO_stderr()

fopen(fn, mode) PerlIO_open(fn, mode)
freopen(fn, mode, streaming) PerlIO_reopen(fn, mode, perlio) (Dep-
dibuat ulang)
fflush(aliran) PerlIO_flush(perlio)
fclose(aliran) PerlIO_close(perlio)

File Memasukkan dan Keluaran
Alih-alih: Gunakan:

fprintf(aliran, fmt, ...) PerlIO_printf(perlio, fmt, ...)

[f]getc(aliran) PerlIO_getc(perlio)
[f]putc(aliran, n) PerlIO_putc(perlio, n)
ungetc(n, streaming) PerlIO_ungetc(perlio, n)

Perhatikan bahwa padanan PerlIO dari "fread" dan "fwrite" sedikit berbeda dari mereka
C rekan-rekan perpustakaan:

fread(p, ukuran, n, aliran) PerlIO_read(perlio, buf, numbytes)
fwrite(p, ukuran, n, aliran) PerlIO_write(perlio, buf, numbytes)

fputs(s, aliran) PerlIO_puts(perlio, s)

Tidak ada yang setara dengan "fgets"; seseorang harus menggunakan "sv_gets" sebagai gantinya:

fgets(s, n, streaming) sv_gets(sv, perlio, tambahkan)

File positioning
Alih-alih: Gunakan:

feof(aliran) PerlIO_eof(perlio)
fseek(aliran, n, dari mana) PerlIO_seek(perlio, n, dari mana)
rewind(aliran) PerlIO_rewind(perlio)

fgetpos(aliran, p) PerlIO_getpos(perlio, sv)
fsetpos(aliran, p) PerlIO_setpos(perlio, sv)

ferror(aliran) PerlIO_error(perlio)
clearerr(aliran) PerlIO_clearerr(perlio)

Memori Pengelolaan dan String Penanganan
Alih-alih: Gunakan:

t* p = malloc(n) Barux(p, n, t)
t* p = calloc(n, s) Baruxz(p, n, t)
p = alokasi ulang(p, n) Perbarui(p, n, t)
memcpy(dst, src, n) Salin(src, dst, n, t)
memmove(dst, src, n) Memindahkan(src, dst, n, t)
memcpy(dst, src, sizeof(t)) StructCopy(src, dst, t)
memset(dst, 0, n * ukuran(t)) Nol(dst, n, t)
memzero(dst, 0) Nol(dst, n, char)
gratis(p) Bebasaman(p)

strdup(p) simpanpv(p)
strndup(p, n) savepvn(p, n) (Hei, strndup tidak
ada!)

strstr(besar, kecil) instr(besar, kecil)
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)

Perhatikan urutan argumen yang berbeda untuk "Salin" dan "Pindahkan" daripada yang digunakan dalam "memcpy" dan
"memindahkan".

Namun, sebagian besar waktu, Anda ingin berurusan dengan SV secara internal daripada mentah
string "char *":

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, ...)

Perhatikan juga keberadaan "sv_catpvf" dan "sv_vcatpvfn", menggabungkan penggabungan dengan
pemformatan.

Terkadang alih-alih memusatkan perhatian pada tumpukan yang dialokasikan dengan menggunakan barux() Anda harus mempertimbangkan
"meracuni" data. Ini berarti menulis sedikit pola ke dalamnya yang seharusnya ilegal sebagai
pointer (dan angka floating point), dan juga semoga cukup mengejutkan sebagai bilangan bulat,
sehingga kode apa pun yang mencoba menggunakan data tanpa pemikiran sebelumnya akan lebih cepat rusak
daripada nanti. Keracunan dapat dilakukan dengan menggunakan Racun() makro, yang memiliki argumen serupa
untuk Nol():

PoisonWith(dst, n, t, b) mencoret memori dengan byte b
PoisonNew(dst, n, t) sama dengan PoisonWith(dst, n, t, 0xAB)
Bebas Racun(dst, n, t) sama dengan RacunDengan(dst, n, t, 0xEF)
Beracun(dst, n, t) sama dengan Bebas Racun(dst, n, t)

Karakter Kelas Tes
Ada beberapa jenis tes kelas karakter yang diterapkan Perl. Satu-satunya
dijelaskan di sini adalah mereka yang secara langsung sesuai dengan fungsi perpustakaan C yang beroperasi pada
Karakter 8-bit, tetapi ada padanan yang beroperasi pada karakter lebar, dan UTF-8
string yang dikodekan. Semua lebih lengkap dijelaskan dalam "Klasifikasi karakter" di perlapi
dan "Perubahan huruf besar-kecil" di perlapi.

Rutinitas pustaka C yang tercantum dalam tabel di bawah mengembalikan nilai berdasarkan arus
lokal. Gunakan entri di kolom terakhir untuk fungsi itu. Dua yang lainnya
kolom selalu mengasumsikan lokal POSIX (atau C). Entri di kolom ASCII hanya
bermakna untuk input ASCII, mengembalikan FALSE untuk hal lain. Gunakan ini hanya ketika Anda
tahu itulah yang Anda inginkan. Entri dalam kolom Latin1 mengasumsikan bahwa non-ASCII
Karakter 8-bit adalah seperti yang didefinisikan oleh Unicode, sama dengan ISO-8859-1, sering disebut Latin
1.

Alih-alih: Gunakan untuk ASCII: Gunakan untuk Latin1: Gunakan untuk lokal:

isalnum(c) adalahALPHANUMERIC(c) adalahALPHANUMERIC_L1(c) adalahALPHANUMERIC_LC(c)
isalpha(c) adalahALPHA(c) adalahALPHA_L1(c) adalahALPHA_LC(u )
isascii(c) adalahASCII(c) adalahASCII_LC(c)
kosong(c) kosong(c) kosong_L1(c) kosong_LC(c)
iscntrl(c) adalahCNTRL(c) adalahCNTRL_L1(c) adalahCNTRL_LC(c)
adalahdigit(c) adalahDIGIT(c) adalahDIGIT_L1(c) adalahDIGIT_LC(c)
isgraf(c) adalahGRAPH(c) adalahGRAPH_L1(c) adalahGRAPH_LC(c)
lebih rendah(c) lebih rendah(c) lebih rendah_L1(c) lebih rendah_LC(c)
dicetak(c) dicetak(c) dicetak_L1(c) dicetak_LC(c)
adalahpunct(c) adalahPUNCT(c) adalahPUNCT_L1(c) adalahPUNCT_LC(c)
isspace(c) isSPACE(c) isSPACE_L1(c) isSPACE_LC(c)
isupper(c) adalahUPPER(c) adalahUPPER_L1(c) adalahUPPER_LC(c)
isxdigit(c) adalahXDIGIT(c) adalahXDIGIT_L1(c) adalahXDIGIT_LC(c)

untukmenurunkan(c) keLOWER(c) keLOWER_L1(c) keLOWER_LC(c)
toupper(c) keUPPER(c) keUPPER_LC(c)

Untuk menekankan bahwa Anda hanya beroperasi pada karakter ASCII, Anda dapat menambahkan "_A" ke masing-masing
makro di kolom ASCII: "isALPHA_A", "isDIGIT_A", dan seterusnya.

(Tidak ada entri di kolom Latin1 untuk "isascii" meskipun ada
"isASCII_L1", yang identik dengan "isASCII"; nama terakhir lebih jelas. Tidak ada
entri di kolom Latin1 untuk "toupper" karena hasilnya bisa non-Latin1. Kamu punya
untuk menggunakan "toUPPER_uni", seperti yang dijelaskan dalam "Perubahan huruf besar-kecil" di perlapi.)

stdlib.h fungsi
Alih-alih: Gunakan:

atof(s) Atof(s)
atoi(s) grok_atoUV(s, &uv, &e)
atol grok_atoUV(s, &uv, &e)
strtod(s, &p) Tidak ada. Hanya tidak menggunakannya.
strtol(s, &p, n) grok_atoUV(s, &uv, &e)
strtoul(s, &p, n) grok_atoUV(s, &uv, &e)

Penggunaan umum adalah melakukan pemeriksaan jangkauan pada "uv" sebelum casting:

di aku; sinar UV; char* end_ptr;
if (grok_atoUV(input, &uv, &end_ptr)
&& uv <= INT_MAX)
saya = (int)uv;
... /* melanjutkan penguraian dari end_ptr */
} Else {
... /* kesalahan parse: bukan bilangan bulat desimal dalam rentang 0 .. MAX_IV */
}

Perhatikan juga fungsi "grok_bin", "grok_hex", dan "grok_oct" di numerik.c untuk
mengubah string yang mewakili angka di basis masing-masing menjadi "NV". Perhatikan bahwa
grok_atoUV() tidak menangani input negatif, atau spasi putih (disengaja .)
ketat).

Perhatikan bahwa jalan() dan jalan () dapat menyamar sebagai jalan(), Sttoul(), atol(), Atul().
Hindari itu juga.

Secara teori "Strtol" dan "Strtoul" tidak dapat didefinisikan jika perl mesin dibangun di atas
sebenarnya tidak memiliki strtol dan strtoul. Tetapi karena 2 fungsi itu adalah bagian dari 1989
Spesifikasi ANSI C kami duga Anda akan menemukannya di mana-mana sekarang.

int Rand() ganda Drand01()
srand(n) { seedDrand01((Rand_seed_t)n);
PL_srand_dipanggil = BENAR; }

keluar(n) keluar_saya(n)
sistem (s) Jangan. Lihat pp_system atau gunakan my_popen.

getenv PerlEnv_getenv
setenv(s, val) my_setenv(s, val)

bermacam-macam fungsi
Anda seharusnya tidak ingin untuk menggunakan setjmp.h fungsi, tetapi jika Anda merasa demikian, gunakan
Tumpukan "JMPENV" di lingkup.h sebagai gantinya.

Untuk "signal"/"sigaction", gunakan "rsignal(signo, handler)".

Gunakan perlclib online menggunakan layanan onworks.net



Program online Linux & Windows terbaru