LX-PERL-INFO-file-io
Updated aug/05/2010 19:04
file io
- open en close
Met het open statement, geven we een naam aan een filehandle, een richting, en een filenaam. Tevens geven we onmiddellijk aan wat er moet gebeuren bij fouten.
Filehandles krijgen de facto namen in hoofdletters.
De richting is
< voor lezen
> voor schrijven en
>> voor append
- lezen
voorbeeld:
#!/usr/bin/perl
#
# ppasswd: print passwd
#
open (PASSWD, "</etc/passwd") or die "is dit windows? $!";
while (<PASSWD>) {
chomp;
print "$_\n";
}
close (PASSWD);
en dit kan ook:
#!/usr/bin/perl
#
# ppasswd: print passwd
#
# Eerst openen we file met filehandle PASSWD
open (PASSWD, "</etc/passwd") or die "is dit windows? $!";
# Nu kunnen we de volledige file in een array stoppen
# Dat is natuurlijk alleen efficient bij kleine files
# En ten stelligste af te raden bij grotere files
@passwdfile=<PASSWD>;
# En dan mogen we de file al sluiten:
close (PASSWD);
In het volgende voorbeeld bootsen we de eenvoudigste werking van grep na:
$ grep <zoekstring> <file(s)>
#!/usr/bin/perl
#
# minigrep: grep uw filesysteem
#
$zoekargument=$ARGV[0];
#debug print "$zoekargument aantal elementen: $#ARGV\n";
for ($i=1;$i<=$#ARGV;$i++)
{
#debug print "i= $i file: $ARGV[$i]\n";
if ( (-f $ARGV[$i]) && (-R $ARGV[$i]) )
{
open (HANDLE, "<$ARGV[$i]") or die "cannot open file: $!";
while (<HANDLE>) {
chomp;
if (/$zoekargument/) { print "$_\n";}
}
close (HANDLE);
}
}
output:
$ minigrep.pl root /etc/c*
cacert.org/root.crt
mozilla/Comodo_AAA_Services_root.crt
mozilla/Comodo_Secure_Services_root.crt
mozilla/Comodo_Trusted_Services_root.crt
mozilla/IPS_CLASE1_root.crt
mozilla/IPS_CLASE3_root.crt
mozilla/IPS_CLASEA1_root.crt
mozilla/IPS_CLASEA3_root.crt
mozilla/IPS_Chained_CAs_root.crt
mozilla/IPS_Servidores_root.crt
mozilla/IPS_Timestamping_root.crt
signet.pl/signet_rootca_pem.crt
telesec.de/deutsche-telekom-root-ca-2.crt
# The 'extras' directory is located under the celestia root directory
# under the Celestia root directory. The default fonts are UTF-8
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
- schrijven
We openen de filehandle net zoals voor lezen, maar deze keer gebruiken we een > of een >> redirect. Daarna printen we direct op de filehandle.
voorbeeld:
#!/usr/bin/perl
#
# wtekst: schrijf een tekstje
#
open (TEKST, ">>tekstje") or die "ik kan ni schrijve! $!";
print TEKST "Dit is een tekstregel met nummer 1\n";
print TEKST "Dit is een tekstregel met nummer 2\n";
print TEKST "Dit is een tekstregel met nummer 3\n";
print TEKST "Dit is een tekstregel met nummer 4\n";
close (TEKST);