Angielskifrancuskihiszpański

Ulubiona usługa OnWorks

perlhacktut - Online w chmurze

Uruchom perlhacktut w bezpłatnym dostawcy hostingu OnWorks w systemie Ubuntu Online, Fedora Online, emulatorze online systemu Windows lub emulatorze online systemu MAC OS

To jest polecenie perlhacktut, które można uruchomić u dostawcy bezpłatnego hostingu OnWorks przy użyciu jednej z naszych wielu bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online systemu MAC OS

PROGRAM:

IMIĘ


perlhacktut — Przejdź przez proces tworzenia prostej poprawki do kodu C

OPIS


Ten dokument przeprowadzi Cię przez prosty przykład poprawki.

Jeśli jeszcze nie czytałeś Perlhacka, zrób to najpierw! Możesz także chcieć przeczytać
źródło perl też.

Kiedy już tu skończysz, sprawdź następnie perlhacktips.

PRZYKŁAD OF A PROSTY ŁATA


Weźmy prostą łatkę od początku do końca.

Oto coś, co zasugerował Larry: jeśli „U” jest pierwszym aktywnym formatem podczas „pakietu”,
(na przykład „pack „U3C8”, @stuff”), wynikowy ciąg powinien być traktowany jako UTF-8
zakodowane.

Jeśli pracujesz z klonem git repozytorium Perla, będziesz chciał utworzyć plik
oddział dla Twoich zmian. Dzięki temu stworzenie odpowiedniego patcha stanie się dużo prostsze. Zobacz
perlgit, aby uzyskać szczegółowe informacje, jak to zrobić.

Pisanie dotychczasowy łata
Jak się przygotować, żeby to naprawić? Najpierw lokalizujemy dany kod – „pakiet”
dzieje się w czasie wykonywania, więc będzie w jednym z pp akta. Rzeczywiście, „pp_pack” jest
in ppc. Ponieważ będziemy modyfikować ten plik, skopiujmy go do ppc~.

[No cóż, było ppc kiedy ten poradnik został napisany. Obecnie został on oddzielony od
„pp_unpack” do własnego pliku, pp_pack.c]

Przyjrzyjmy się teraz „pp_pack”: przenosimy wzór do „pat”, a następnie przechodzimy przez pętlę
wzór, przyjmując kolejno każdy znak formatu na „typ_datum”. Następnie dla każdego możliwego
format, pochłaniamy pozostałe argumenty we wzorcu (szerokość pola, an
gwiazdka itd.) i przekonwertuj następny fragment wejściowy na określony format, dodając go
na wyjście SV „cat”.

Skąd mamy wiedzieć, czy „U” jest pierwszym formatem w „pat”? Cóż, jeśli mamy wskaźnik do
początek „pat”, a następnie, jeśli zobaczymy „U”, możemy sprawdzić, czy nadal jesteśmy na początku
sznurek. Oto miejsce, w którym skonfigurowane jest „pat”:

STRLEN zlen;
char *pat = SvPVx(*++ZNAK, fromlen);
char *patend = pat + fromlen;
I32 obiektyw;
typ odniesienia I32;
SV *odstr;

Będziemy tam mieli inny wskaźnik ciągu:

STRLEN zlen;
char *pat = SvPVx(*++ZNAK, fromlen);
char *patend = pat + fromlen;
+ char *patcopia;
I32 obiektyw;
typ odniesienia I32;
SV *odstr;

Tuż przed rozpoczęciem pętli ustawimy „patcopy” na początek „pat”:

pozycje = SP - ZNAK;
ZNAK++;
sv_setpvn(kot, "", 0);
+ kopia = pat;
podczas gdy (pat < patent) {

Teraz, jeśli widzimy „U”, które było na początku ciągu, włączamy flagę „UTF8” dla
wyjście SV, „cat”:

+ if (typ odniesienia == „U” && pat==patcopy+1)
+ SvUTF8_on(kot);
if (typ odniesienia == '#') {
podczas (pat < patent && *pat ! = '\n')
Pat++;

Pamiętaj, że musi to być „patcopy+1”, ponieważ pierwszym znakiem ciągu jest „
„U”, które zostało wchłonięte przez „typ odniesienia!”

Ups, zapomnieliśmy o jednym: co jeśli na początku wzoru są spacje? "Pakiet("
U*", @stuff)" będzie miało "U" jako pierwszy aktywny znak, nawet jeśli nie jest to pierwszy
rzecz we wzorze. W tym przypadku musimy przyspieszyć „patcopy” wraz z „pat”, kiedy to robimy
zobacz spacje:

if (isSPACE(typ odniesienia))
kontyntynuj;

musi stać się

if (isSPACE(typ odniesienia)) {
poprawka ++;
kontyntynuj;
}

OK. To część C gotowa. Teraz musimy zrobić dwie dodatkowe rzeczy, zanim pojawi się ta łatka
gotowy do pracy: zmieniliśmy zachowanie Perla, dlatego musimy udokumentować tę zmianę. My
musimy także zapewnić więcej testów regresyjnych, aby upewnić się, że nasza łatka działa, a nie
utwórz błąd w innym miejscu po drodze.

Testowanie dotychczasowy łata
Testy regresyjne dla każdego operatora działają szczyt/, i tak robimy kopię t/operacja/paczka.t
do t/operacja/paczka.t~. Teraz możemy na koniec dodać nasze testy. Najpierw sprawdzimy, czy „U” tak robi
rzeczywiście utwórz ciągi Unicode.

t/op/pack.t ma sens OK() funkcję, ale jeśli nie, moglibyśmy użyć tej z
t/test.pl.

wymagaj „./test.pl”;
plan(testy => 159 );

więc zamiast tego:

wydrukuj „nie”, chyba że „1.20.300.4000” eq sprintf „%vd”,
paczka("U*",1,20,300,4000);
wydrukuj „ok $test\n”; $test++;

możemy napisać bardziej sensowne (zobacz Test::More, aby uzyskać pełne wyjaśnienie Jest() i inne
funkcje testowe).

is("1.20.300.4000", sprintf "%vd", paczka("U*",1,20,300,4000),
„U* produkuje Unicode” );

Teraz sprawdzimy, czy dobrze poradziliśmy sobie z założeniem przestrzeni na początku:

is("1.20.300.4000", sprintf "%vd", pack(" U*",1,20,300,4000),
"ze spacjami na początku" );

Na koniec sprawdzimy, czy nie tworzymy ciągów Unicode, jeśli jest to „U”. nie pierwszy aktywny
format:

isnt(v1.20.300.4000, sprintf "%vd", pakiet("C0U*",1,20,300,4000),
„U* nie pierwszy nie jest Unicode” );

Nie zapomnij zmienić liczby testów, która pojawia się na górze, w przeciwnym razie
automatyczny tester będzie zdezorientowany. Będzie to wyglądać tak:

wydrukuj „1..156\n”;

albo to:

plan(testy => 156 );

Teraz kompilujemy Perl i uruchamiamy go w zestawie testów. Nasze nowe testy zaliczone, hura!

Dokumentowanie dotychczasowy łata
Wreszcie dokumentacja. Praca nigdy nie jest skończona, dopóki nie skończy się papierkowa robota, więc do dzieła
opisz zmianę, którą właśnie wprowadziliśmy. Odpowiednie miejsce to pod/funkcja.pod; znowu my
zrób kopię, a następnie umieścimy ten tekst w opisie „pakietu”:

=przedmiot *

Jeśli wzorzec zaczyna się od C , wynikowy ciąg zostanie potraktowany
jako Unicode zakodowany w UTF-8. Możesz wymusić kodowanie UTF-8 w ciągu znaków
z inicjałem C , a kolejne bajty będą interpretowane jako
Znaki Unicode. Jeśli nie chcesz, aby tak się stało, możesz zacząć
twój wzór z C (lub cokolwiek innego), aby zmusić Perla do rezygnacji z UTF-0
zakoduj swój ciąg, a następnie postępuj zgodnie z literą C gdzieś w twoim
wzór.

Wyślij
Zobacz perlhack, aby uzyskać szczegółowe informacje na temat przesyłania tej łatki.

Korzystaj z perlhacktut online, korzystając z usług onworks.net


Darmowe serwery i stacje robocze

Pobierz aplikacje Windows i Linux

  • 1
    Atom
    Atom
    Atom to edytor tekstu
    nowoczesny, przystępny i w pełni funkcjonalny.
    Jest również łatwo konfigurowalny - ty
    może dostosować go do wszystkiego i być
    zdolny do ...
    Pobierz Atom
  • 2
    osu!
    osu!
    Osu! to prosta gra rytmiczna ze studnią
    przemyślana krzywa uczenia się dla graczy
    wszystkich poziomach umiejętności. Jeden z wielkich
    aspekty Osu! jest to, że jest
    dr społeczny...
    Pobierz Osu!
  • 3
    LIBPNG: biblioteka referencyjna PNG
    LIBPNG: biblioteka referencyjna PNG
    Biblioteka referencyjna do obsługi
    Format przenośnej grafiki sieciowej (PNG).
    Publiczność: Deweloperzy. Programowanie
    Język: C. Jest to aplikacja, która
    może także...
    Pobierz LIBPNG: Biblioteka referencyjna PNG
  • 4
    Wykrywacz metali oparty na RP2040
    Wykrywacz metali na bazie RP2040
    Oparta na płycie Raspberry Pi Pico
    wykrywacz metalu jest zawarty w impulsie
    kategoria indukcyjnych wykrywaczy metali, z
    dobrze znane zalety i wady.
    PR...
    Pobierz Wykrywacz metali oparty na RP2040
  • 5
    Menedżer PAK
    Menedżer PAK
    PAC jest zamiennikiem Perla/GTK dla
    SecureCRT/Putty/etc (linux
    ssh/telnet/... gui)... Zapewnia GUI
    skonfigurować połączenia: użytkownicy,
    hasła, EXPECT regul...
    Pobierz Menedżera PAC
  • 6
    GeoServer
    GeoServer
    GeoServer jest oprogramowaniem typu open source
    serwer napisany w Javie, który umożliwia użytkownikom
    udostępniać i edytować dane geoprzestrzenne.
    Zaprojektowany z myślą o interoperacyjności, to
    publikuje d...
    Pobierz GeoServera
  • więcej »

Komendy systemu Linux

Ad