ファイル処理

  1. 標準ファイル
    STDINはStandardInputの略で標準入力(通常キーボード)、STDOUTはSdandarfOutputで標準出力(通常画面)を意味します。STDIN、STDOUTは特殊なファイルの扱われます。

     <STDIN>  #標準入力からの1行
     <STDOUT> #標準出力への1行

    例 "quit"を入力するまで、キー入力を表示する
    do {
      $string = <STDIN>;
      print $string;
    } until ($string =~ /QUIT/

  2. ファイルを読む、記録する
    1. ファイルを開く
      ファイルを利用するには、次のようにmファイルを開きます。
       open(<ファイルハンドラ>、<ファイル名>)
      以後、ファイルハンドラを指定して、読み出し、書き込みを行います。

       open(R,"fileCopy.pl");  #読むために開く
       open(W,">fileCopy.bak"); #書き出すために開く

      R,Wは任意の名前でファイルのハンドラとなります。
      既存のファイルに追記するには、> の替わりに >> とします。また、同じファイルに読み書きをするには、+> を指定します。

    2. 読む、記録する
      <R>  #から、次の行を取り出す。

      例 ファイルが尽きるまで表示する。
      while(<R>){
       print ;
      }

      これは、以下の文と同じ意味で、特殊変数の省略形です。わかりにくいので、利用しない方が良いでしょう。
      while($_=<R>){
       print $_;
      }

      $stの文字をファイルに記録するには、
       print W $st;
      とします。

    3. パイプ処理
      他のコマンドと連結して処理することをパイプ処理といいます。ファイル指定の先頭に | をつけると、そのコマンドへの入力になります。末尾に付けると、そのコマンドのデータを受け取ります。

      例1 user@foo.comにメールを送ります。sendmailはメイルを送る処理で、FHに書き出すことことは、メールを書き出すことに相当します。

      open FH, '|/usr/sbin/sendmail -t user@foo.com' or die "Can't Open\n";
      print FH 'From: user@foo.com', "\n";
      print FH 'To: user@bar.com', "\n";
      print FH "Subject: test mail.\n\n";
      print FH "Good!.\n";
      close FH;

    4. ファイルを閉じる
      close(R);
      close(W);

    5. ファイルをコピーする
      以下の例は、fileCopy.pl を fileCopy.bak に保存します。

      #file Copy
      
      open(R,"fileCopy.pl");
      open(W,">fileCopy.bak");
      
      while($st=<R>){
           print $st;
           print W $st;
      }
               
      close(R);
      close(W);

    6. ファイルハンドラと型プロブ
      ファイルハンドラを関数に渡すため、変数に記録するには、型グロブと呼ばれる変数を利用します。これは、名前が * で始まる変数で、別名機能として利用できます。

  3. ディレクトリ処理
    1. ファイル名の変更、削除
      truncate(<FileHandler>,<size>); ファイルのサイズを変更する
      seek(<FileHandler>,<>,<>);  ファイルの読み出し・記録位置を変更する
      rename("file1","file2");     #ファイル名を変更
      unlink("file");           #ファイルを削除

    2. ディレクトリ処理
      mkdir("directory",mod);  #ディレクトリを作成する
      chdir("directory");     #作業しているディレクトリを変更する

      opendir(DIR,"directory");#ディレクトリを開く
      @files=readdir'DIR);    #ディレクトリを読む
      closedir(DIR);
      foreach (@files){       #ファイル名を表示する
      print "$_\n";}