ヒアドキュメント print <<EOF 文字列 文字列 文字列 EOF ; ヒアドキュメント内で変数を参照 $hoge = "hoge2"; $変数 = <<EOF hoge1 $hoge hoge3 EOF ; print $変数; ファイル入出力とファイルハンドル open関数を使ってファイルを読み込む場合の構文 ファイルを読み込みモードでオープンする場合 (open命令) open(ファイルハンドル, "ファイル名"); または open(ファイルハンドル,"< ファイル名"); ファイルハンドル名は任意 一般的にファイルハンドル名は英字大文字で指定するようになっています。 ファイルを読み込む処理 (read命令) @配列 = <ファイルハンドル>; ファイルのオープンを閉じる処理 (close命令) close(ファイルハンドル); たとえばこの一連の処理として、次のように記述します。 読み込むファイル名をここでは file.log とします。 記述例 # file.log を、FILEDATAというファイルハンドルで読み込む。 open(FILEDATA,"./file.log"); # 読み込んだファイルを配列@fileにセットする。 @file = <FILEDATA>; # 読み込み処理を閉じる。 close(FILEDATA); ファイルの読み書き open関数によるファイルの読み書きモード一覧。 読み込みモードでオープン open (ファイルハンドル, "file") open (ファイルハンドル, "< file") 上書きモードでオープン open (ファイルハンドル, "> file") 追加書き込みモードでオープン open (ファイルハンドル, ">> file") 読み書き両用モードでオープン 追加書き込みはせず上書きモード open (ファイルハンドル, "+> file") 追加書き込みはせず上書きもしない。 open (ファイルハンドル, "+< file") パイプ出力用でオープン open (ファイルハンドル, "| コマンド") パイプ入力用でオープン open (ファイルハンドル, "コマンド |") ファイルの上書き open(OUT,"> file.txt"); print OUT "hoge"; close(OUT); file.txtに"hoge"という文字列を上書きします。 file.txtが無ければ作成されます。 上書きですから、file.txtの中身を消して新たに書き込むことになります。 追加書き込み open(OUT,">> file.txt"); print OUT " hoge"; close(OUT); file.txtに " hoge"という文字列を追加書き込みします。 追加書き込みですから、file.txtの中身に追加連結することになります。 仮に、当初 file.txt の中に"hoge"という文字列があった場合、上記の処理後 ファイルの中身は"hoge hoge"となります。 コマンドからパイプ入力用にオープン open(LS,"ls -l |"); @cmd = <LS>; close(LS); foreach $cmd (@cmd) { print "$cmd"; } ls -lコマンドを実行し、 その結果を配列@cmdに格納し、表示する。 コマンドへパイプ出力用にオープン open(OUT,"| logger"); print OUT "Error\n"; close(OUT); loggerコマンドへ Error文字列を出力。 その他のファイル操作 ファイルを削除 unlink "ファイル名"; ファイル名を変更 rename "変更前のファイル名", "変更後のファイル名"; 正規表現 正規表現は / / 記号で指定検索文字列を囲みます サブルーチン サブルーチンを作成する構文。 sub サブルーチン名 { 処理 } このサブルーチン名の付け方の制約は変数名と同じです。 サブルーチンの定義部分は一般的には最後に置かれる。 サブルーチンの呼び出し &サブルーチン名 サブルーチンの使用例 &hogez; sub hogez { $word = "hoge"; $word2 = " hoge2"; print "$word $word2\n"; } <出力結果> hoge hoge2 引数と戻り値 引数は配列 @_ に格納されて渡されます。 サブルーチン yaruo に、引数 @list を渡すとき 引数の渡し方 &yaruo(@list); 引数の受取り サブルーチンyaruoは、@list を、配列 @_ で受け取る 例 &yaruo("ニュー速","で","やるお"); sub yaruo { ($a, $b, $c) = @_; print "$a$b $c。\n"; } <出力結果> ニュー速で やるお。 サブルーチンの戻り値は return を使って戻すことができます。 sub サブルーチン名 { 処理 return 変数; } 戻り値の受取り 変数 = &サブルーチン名; 例 $kotae = &goukei(10, 20, 30); print "合計は$kotaeです。\n"; sub goukei { ($a, $b, $c) = @_; $total = $a + $b + $c; return $total; } <出力結果> 合計は60です。 局所化 変数をサブルーチンなどのブロック内だけ使用する事。 スクリプト全体で参照可能な変数をグローバル変数、 サブルーチンなどのブロックの中だけで利用可能な変数をローカル変数といいます。 特に何も定義をしない変数はすべてグローバル変数として使用される。 変数をローカル変数として定義する場合には、local または my を使用します。 local と my の違い local Perlバージョン Perl4, Perl5 サブルーチンから呼び出されたサブルーチンからも参照が可能。 my Perlバージョン Perl5 サブルーチンから呼び出されたサブルーチンからも参照することはできない。 例 $test = "1"; &subtest; print "グローバル変数は$testです。\n"; sub subtest { my $test = "2"; print "ローカル変数は$testです。\n"; } <実行結果> ローカル変数は2です。 グローバル変数は1です。 perl スクリプトメモ3