Aceasta este comanda perlopentut care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS
PROGRAM:
NUME
perlopentut - rețete simple pentru deschiderea fișierelor și conductelor în Perl
DESCRIERE
Ori de câte ori faceți I/O pe un fișier în Perl, faceți acest lucru prin ceea ce în Perl se numește a
mâner de fișier. Un filehandle este un nume intern pentru un fișier extern. Este treaba lui
Funcția „deschidere” pentru a realiza asocierea între numele intern și numele extern,
și este treaba funcției „închidere” să rupă acea asociere.
Pentru confortul dvs., Perl setează câteva manere de fișiere speciale care sunt deja deschise când
alergi. Acestea includ „STDIN”, „STDOUT”, „STDERR” și „ARGV”. Din moment ce acestea sunt pre-
deschise, le puteți folosi imediat, fără a fi nevoiți să vă deranjați de a le deschide
tu:
print STDERR "Acesta este un mesaj de depanare.\n";
print STDOUT "Vă rugăm să introduceți ceva: ";
$răspuns = // die "cum de nu există nicio intrare?";
print STDOUT "Multumesc!\n";
in timp ce ( ) { ... }
După cum vedeți din aceste exemple, „STDOUT” și „STDERR” sunt mânere de ieșire, iar „STDIN” și
„ARGV” sunt mânere de intrare. Sunt cu majuscule pentru că sunt rezervate
Perl, la fel ca matricea @ARGV și hash-ul %ENV. Asociațiile lor externe erau
stabilit de coaja ta.
Va trebui să deschideți fiecare alt filehandle pe cont propriu. Deși sunt multe
variante, cel mai comun mod de a apela lui Perl deschis() funcția este cu trei argumente și
o valoare de returnare:
" OK = deschide(MANER, MOD, PATHNAME)"
Unde:
OK va fi o valoare definită dacă deschiderea reușește, dar „undef” dacă eșuează;
MÂNER
ar trebui să fie o variabilă scalară nedefinită care trebuie completată de funcția „deschisă” dacă aceasta
reușește;
MODE
este modul de acces și formatul de codare cu care se deschide fișierul;
PATHNAME
este numele extern al fișierului pe care doriți să îl deschideți.
Cea mai mare parte a complexității funcției „deschise” constă în numeroasele valori posibile pe care
MODE parametrul poate prelua.
Un ultim lucru înainte de a vă arăta cum să deschideți fișiere: deschiderea fișierelor nu face (de obicei)
blocați-le automat în Perl. Consultați perlfaq5 pentru cum să blocați.
Deschidere Text Fişiere
Deschidere Text Fişiere pentru Citind
Dacă doriți să citiți dintr-un fișier text, deschideți-l mai întâi în modul numai citire, astfel:
my $filename = "/some/path/to/a/textfile/goes/here";
my $encoding = ":encoding(UTF-8)";
my $handle = undef; # acesta va fi completat la succes
deschide($handle, „< $encoding”, $filename)
|| die "$0: nu se poate deschide $filename pentru a citi: $!";
Ca și în cazul shell-ului, în Perl „<” este folosit pentru a deschide fișierul în modul doar citire. Daca
reușește, Perl vă alocă un filehandle nou-nouț și vă completează anterior
argument nedefinit $handle cu o referință la acel handle.
Acum puteți utiliza funcții precum „readline”, „read”, „getc” și „sysread” pe acel handle.
Probabil cea mai comună funcție de intrare este cea care arată ca un operator:
$line = readline($handle);
$line = <$handle>; # același lucru
Deoarece funcția „readline” returnează „undef” la sfârșitul fișierului sau la o eroare, veți face acest lucru
uneori îl vezi folosit astfel:
$line = <$handle>;
if (definit $line) {
# face ceva cu $line
}
altceva {
# $line nu este valid, așa că omiteți-l
}
Puteți, de asemenea, să „mori” rapid pe o valoare nedefinită în felul acesta:
$line = <$handle> // die "nicio intrare găsită";
Cu toate acestea, dacă lovirea EOF este un eveniment normal și așteptat, nu doriți să ieșiți pur și simplu
pentru că ai rămas fără intrare. În schimb, probabil că doriți doar să părăsiți o buclă de intrare.
Apoi puteți testa pentru a vedea dacă o eroare reală a determinat terminarea buclei și puteți acționa
în consecinţă:
în timp ce (<$handle>) {
# face ceva cu date în $_
}
dacă ($!) {
die "eroare neașteptată la citirea din $filename: $!";
}
A notițe on Codificări: A trebui să specificați codificarea textului de fiecare dată ar putea părea puțin a
deranja. Pentru a configura o codificare implicită pentru „deschis”, astfel încât să nu fie nevoie să o furnizați fiecare
timp, puteți folosi pragma „deschisă”:
utilizați qw deschis< :encoding(UTF-8) >;
După ce ați făcut asta, puteți omite în siguranță partea de codificare a modului deschis:
deschide($handle, „<”, $filename)
|| die "$0: nu se poate deschide $filename pentru a citi: $!";
Dar nu utilizați niciodată „<” fără a fi configurat mai întâi o codificare implicită. In caz contrar,
Perl nu poate ști care dintre multele, multe, multe variante posibile de fișier text pe care le aveți și
Perl nu va avea idee cum să mapați corect datele din fișierul dvs. în caractere reale
poate lucra cu. Alte formate comune de codare, inclusiv „ASCII”, „ISO-8859-1”,
„ISO-8859-15”, „Windows-1252”, „MacRoman” și chiar „UTF-16LE”. Vezi perlunitut pentru mai multe
despre codificări.
Deschidere Text Fişiere pentru Scris
Când doriți să scrieți într-un fișier, mai întâi trebuie să decideți ce să faceți cu orice fișier existent
conținutul acelui fișier. Aveți două opțiuni de bază aici: să păstrați sau să dați.
Dacă doriți să păstrați orice conținut existent, atunci doriți să deschideți fișierul în atașare
modul. Ca și în shell, în Perl folosiți „>>” pentru a deschide un fișier existent în modul de adăugare.
„>>” creează fișierul dacă nu există deja.
my $handle = undef;
my $filename = "/some/path/to/a/textfile/goes/here";
my $encoding = ":encoding(UTF-8)";
deschide($handle, ">> $encoding", $filename)
|| die "$0: nu se poate deschide $filename pentru a adăuga: $!";
Acum puteți scrie în acel handler de fișier folosind oricare dintre „print”, „printf”, „spune”, „scrie” sau
„scriere de sistem”.
După cum sa menționat mai sus, dacă fișierul nu există deja, atunci se va crea modul de adăugare deschis
asta pentru tine. Dar dacă fișierul există deja, conținutul său este protejat de vătămare, deoarece
veți adăuga noul text după sfârșitul textului vechi.
Pe de altă parte, uneori vrei să năruiești orice ar putea fi deja acolo. La
goliți un fișier înainte de a începe să scrieți în el, îl puteți deschide în modul numai de scriere:
my $handle = undef;
my $filename = "/some/path/to/a/textfile/goes/here";
my $encoding = ":encoding(UTF-8)";
deschide($handle, "> $encoding", $filename)
|| die "$0: nu se poate deschide $filename în modul scriere-deschidere: $!";
Aici, din nou, Perl funcționează la fel ca shell-ul, prin aceea că „>” blochează un fișier existent.
Ca și în modul de adăugare, atunci când deschideți un fișier în modul numai de scriere, acum puteți scrie în
acel handler de fișier folosind oricare dintre „print”, „printf”, „spune”, „scrie” sau „syswrite”.
Dar modul citire-scriere? Probabil ar trebui să te prefaci că nu există, pentru că deschiderea
Este puțin probabil ca fișierele text în modul citire-scriere să facă ceea ce doriți. Vezi perlfaq5 pentru
Detalii.
Deschidere Binar Fişiere
Dacă fișierul care urmează să fie deschis conține date binare în loc de caractere text, atunci „MODE”
argumentul pentru „deschidere” este puțin diferit. În loc să specificați codificarea, spuneți
Perl că datele dvs. sunt în octeți bruti.
my $filename = "/some/path/to/a/binary/file/goes/here";
my $encoding = ":raw :bytes"
my $handle = undef; # acesta va fi completat la succes
Și apoi deschideți ca înainte, alegând „<”, „>>”, sau „>”, după cum este necesar:
deschide($handle, „< $encoding”, $filename)
|| die "$0: nu se poate deschide $filename pentru a citi: $!";
deschide($handle, ">> $encoding", $filename)
|| die "$0: nu se poate deschide $filename pentru a adăuga: $!";
deschide($handle, "> $encoding", $filename)
|| die "$0: nu se poate deschide $filename în modul scriere-deschidere: $!";
Alternativ, puteți trece în modul binar pe un handle existent în acest fel:
binmode($handle) || die "nu se poate gestiona binmode";
Acest lucru este deosebit de util pentru mânerele pe care Perl le-a deschis deja pentru tine.
binmode(STDIN) || die "nu se poate binmode STDIN";
binmode(STDOUT) || die "nu se poate binmode STDOUT";
De asemenea, puteți transmite „binmode” o codificare explicită pentru a o schimba din mers. Asta nu este
exact modul „binar”, dar încă folosim „binmode” pentru a face acest lucru:
binmode(STDIN, ":encoding(MacRoman)") || die "nu se poate binmode STDIN";
binmode(STDOUT, ":encoding(UTF-8)") || die "nu se poate binmode STDOUT";
Odată ce ați deschis fișierul binar în modul corect, puteți utiliza tot la fel
Perl I/O funcționează așa cum ați folosit pentru fișierele text. Cu toate acestea, poate doriți să utilizați dimensiunea fixă
„citește” în loc de „linia de citire” de dimensiune variabilă pentru intrarea dvs.
Iată un exemplu despre cum să copiați un fișier binar:
my $BUFSIZ = 64 * (2 ** 10);
my $name_in = "/some/input/file";
my $name_out = "/some/output/flie";
my($in_fh, $out_fh, $buffer);
deschide($in_fh, „<”, $name_in)
|| die "$0: nu se poate deschide $name_in pentru citirea: $!";
deschide($out_fh, ">", $name_out)
|| die "$0: nu se poate deschide $name_out pentru a scrie: $!";
pentru $fh-ul meu ($in_fh, $out_fh) {
binmode($fh) || die "binmode failed";
}
în timp ce (citește($in_fh, $buffer, $BUFSIZ)) {
cu excepția cazului în care (printează $out_fh $buffer) {
die "nu am putut scrie în $name_out: $!";
}
}
close($in_fh) || die "nu s-a putut închide $name_in: $!";
close($out_fh) || die "nu s-a putut închide $name_out: $!";
Deschidere Tevi
A fi anuntat.
Nivel scăzut Fișier deschide de sysopen
A fi anuntat. Sau șters.
Utilizați perlopentut online folosind serviciile onworks.net