Home - BBS - Mail - Diary - About CrossLamina.com

perl 超私的メモ

私が、良く忘れてしまうperlの関数や文法をまとめています。自分の便利のためだけです。
少しずつ、充実させていきます。

binmode ファイルハンドルをバイナリモードで開く
ファイルの入出力をバイナリモードで行いたい時使います。
テキストモードでの入出力において、perl は改行コードをその環境(OS)の改行コードに合わせて変換します。 画像などのバイナリファイルの入出力を行う時や、出力したいテキストの長さを測りたいときには必ず使用しましょう。
#!/usr/local/bin/perl
#gif画像を読んで出力
my $image_file = 'sample.gif';

print "Content-Type: image/gif\n\n";

open IMG ,"$image_file" or die "$image_fileが開けません!";

#バイナリモード
binmode IMG;#バイナリで開いて
binmode STDOUT;#バイナリで出す

while(<IMG>){print STDOUT $_;}

close IMG;
#!/usr/local/bin/perl

#文字セットについては全く考慮してません
#Content-Type の出し方だけ

my $html = << "HTML";
<html>
<head><title>ほめぱげのホームページ</title></head>
<body>はろー</body>
</html>
HTML

#バイナリモードで出力して環境の違いによる改行コードの差をなくす
binmode STDOUT;

print "Content-Type: text/html\n";
print "Content-Length: ",length($html),"\n";#Length 出力
print "\n";
print "$html";
ヒアドキュメント 大量の文字を出力する時便利
<< のあとに、例えば HERE などの終わりを示す文字列(終端文字列)を指定すると、次の行から、その文字列が現れる直前の行までが、文字列とみなされます。終端文字列を置く行には、終端文字列以外のスペースなどの文字は一切かけません。
print <<HERE;
I am Tochi.
I am 25.
HERE
#---出力結果---
#I am Tochi.
#I am 25.
終端文字列 を 裸のままか、" で囲むと、対象の文字列はダブルクォート文字列とみなされます。' で囲むと、シングルクォート文字列とみなされます。
$name = 'Tochi';
$age = '25';

print <<HERE;
I am $name.
I am $age.
HERE
#---出力結果---
#I am Tochi.
#I am 25.

print <<"HERE";#上の例の、明示的な書き方
I am $name.
I am $age.
HERE

print <<'HERE';
I am $name.
I am $age.
HERE
#---出力結果---
#I am $name.
#I am $age.
終端文字列を裸のままで指定した時には、<< と終端文字列のあいだに、スペースを入れるとエラーになります。 間違いのない使い方として、終端文字列は必ず、" か ' で囲うことにするのがいいと思います。
shift 配列の先頭を削除して返す
unshift 配列の先頭に追加
push 配列の末尾に追加
pop 配列の末尾を削除して返す
sort{$a <=> $b} 配列を大きい順に並び替え
opendir ディレクトリあける成否を返す
closedir ディレクトリ閉じる成否を返す
readdir ディレクトリよみ、返す
unlink ファイル削除、削除数を返す
参考図書
『CGIのための実践入門 Perl』私がはじめて買った perl の本。いまだにお世話になっています。
『CGIレスキュー 実践Perlプログラミング』 次に買った本。初心者向けの本ではないです。既存のプログラムの改造を本格的にやろうと思う人にはいいと思う。
『Programming Perl 3rd Edition』perl の創造主の手による perl のすべて。初心者には勧められるものではない。perl に愛着が出てきた人はぜひ読んでみるべき。「Perl as Culture」なんて章がある。惹かれない?日本語版も出ている。『プログラミングPerl〈VOLUME1〉』『プログラミングPerl〈VOLUME2〉』ただしオリジナルは1000ページで6000円、日本語版は2000ページで10000円!私は決して英語が得意なわけではないが、オリジナルが安いときには、オリジナルを買うことにしている。