Czytanie ze standardowego wejścia

  1. Przypisanie operatora
    <STDIN>
    zmiennej skalarnej powoduje wczytanie natępnego wiersza tekstu ze starndardowego wejścia:

    
    $a = <SDTIN>; # wczytaj nastepny wiersz tekstu
    

  2. Przypisanie do zmiennej tablicowej czyta wszystkie wiersze tekstu:

    
    @a = <SDTIN>;
    

  3. Prztwarzanie tekstu wiersz po wierszu:

    
    while (defined($wiersz) = <STDIN>) {
       # przetworz $wiersz
    }
    

  4. To samo, ale krócej. Jeśli nie podamy nazwy zniennej to domyślnie używana jest zmienna standardowa
    $_
    . W przykładzie poniżej ma ona wartość równą ostatnio wczytanemu wierszowi tekstu:

    
    while (<STDIN>) {
       chomp; # to samo co 'chomp($_)'
       # pozostale operacje na zmiennej $_
    }
    

Czytanie z wielu plików

  1. Operator
    <>
    działa podobnie do
    <STDIN>
    , ale czyta tekst z plików, których nazwy podano w linii komend (jeśli nie podano żadnych nazw, to wczytywany jest tekst ze standardowego wejścia). Po wywołaniu poniższego skryptu poleceniem
    skrypt plik1 plik2 plik3
    zostanie wypisana zawartość tych trzech plików:

    
    while (<>) {
       print $_;
    }
    

  2. Lista nazw plików podanych jako argumenty przechowywana jest w tablicy
    @ARGV
    , którą można podmienić. W poniższym programie drukowana jest zawartość plików aaa, bbb i ccc:

    
    @ARGV = ("aaa", "bbb", "ccc");
    while (<>) { # czyta wiersze z plikow aaa, bbb i ccc
       print "wczytalem wiersz: $_";
    }
    

Formatowane wyjście

  1. Zamiast funkcji
    print
    w Perlu można stosować również znaną z C funkcję . Poniższy program drukuje wczytane wiersze tekstu w kolumnie o szerekości 20 znaków wyrównane do prawej strony:

     
    #!/usr/bin/perl
    
    print "Podaj liste lancuchow:\n";
    chomp(@lancuchy = <STDIN>);
    foreach (@lancuchy) {
        printf "%20s\n", $_;
    }
    
    
    

  2. W odróżnieniu od C w napisie formatującym mogą występować nazwy zmiennych, które są interpolowane (tzn. zastępowane przez wartość tych zmiennych jeśli napis ujęty jest w podwójne cudzysłowy
    ""
    :

     
    #!/usr/bin/perl
    
    print "Szerokosc pola: ";
    chomp($szerokosc = <STDIN>);
    print "Podaj liste lancuchow:\n";
    chomp(@lancuchy = <STDIN>);
    foreach (@lancuchy) {
        printf "%${szerokosc}s\n", $_;
    }
    
    

    Zauważ, że w powyższym przykłdzie nie mogliśmy napisać

     
    
        printf "%$szerokoscs\n", $_;
    
    

    gdyż Perl szukałby wówczas zmiennej

    $szerokoscs
    zamiast
    $szerokosc
    . Drugim poprawnym rozwiązaniem jest połączenie dwóch napisów:

     
    
        printf "%$szerokosc" . "s\n", $_;
    
    
Last modified: poniedziałek, 10 sierpnia 2015, 10:49