
En annan av fördelarna i Perl är hur enkelt det är att läsa och skriva information från/till filer.
Detta är nödvändigt om du skall skriva skript som gästböcker, sökfunktioner eller andra skript där
du måste kunna spara information till nästa besökare. För att öppna en fil för lösning eller skrivning
använder man kommandot open.
open(INDATA,"min_datafil.txt");
Exemplet öppnar filen min_datafil.txt för läsning med hanteringsnamnet INDATA. Vill du
istället öppna en fil för att skriva till använder du prefixet ">" eller ">>". Den första
varianten öppnar filen och skriver över ev. data som redan ligger i den medans den andra varianten
(>>) lägger till ditt data i slutet av filen.
open(UTDATA,">min_datafil.txt"); # Öppnar filen för att skriva över data. open(UTDATA,">>min_datafil.txt"); # Öppnar filen för att lägga till data.
Skulle det bli något fel när du t.ex. skall öppna en fil för att läsa och den inte finns kan det
vara bra att använda en felhanteringsrutin. Detta kan se ut så här.
open(INDATA,"min_datafil.txt") || &Fatal;
sub Fatal {
print "Content-type:text/plain\n\n";
print "Kan inte öppna filen för läsning."
}
Ofta vill man komma åt filnamnet från flera ställen i skriptet. Då är det bara att använda en variabel
på det här viset.
$min_fil = "min_datafil.txt";
open(INDATA,"$min_fil") || &Fatal;
sub Fatal {
print "Content-type:text/plain\n\n";
print "Kan inte öppna filen $min_fil för läsning."
}
I nästa exempel skall vi öppna en fil, läsa igenom den och skicka innehållet till webläsaren som en
sida. För att göra detta börjar vi med att läsa in datat i en array som vi sedan i en loop läser
igenom rad för rad och skriver ut innehållet. Efter att det är klart stänger vi filen med kommandot
close.
$min_fil = "min_datafil.txt";
print "Content-type:text/html\n\n";
open(INDATA,"$min_fil") || &Fatal;
@rader = <INDATA>;
foreach $rad (@rader) {
print $rad;
}
close(INDATA);
sub Fatal {
print "Kan inte öppna filen $min_fil för läsning."
}
Nästa exempel visar två olika sätt man kan använda för att skriva till filer. Observera att vi
som vanligt använder kommandot print, men här anger vi även ett hanteringsnamn.
$min_fil = "min_datafil.html";
print "Content-type:text/html\n\n";
open(UTDATA,">$min_fil") || &Fatal;
print UTDATA "<html>\n<head><title>Min sida</title></head>";
print UTDATA <<EndText;
<body>
<p>Detta är en sida skapad av ett Perl-scipt.<br>
</body>
</html>
EndText
close(UTDATA);
print "Filen <a href='$min_fil'>$min_fil</a> är skapad.";
sub Fatal {
print "Kan inte öppna filen $min_fil för skrivning."
}
Första raden skrivs som vanligt, men på följande rader talar vi om för Perl-tolken att allt som följer
tills nästa EndText skall skrivas. Detta kan vara mycket användbart om det är många rader som
skall skrivas.
Tillbaks till innehållsförteckningen