LX-PERL-INFO-file-io
Updated aug/05/2010 19:04

file io

  1. 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

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

  3. 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);