とほほのperl入門(利用例編)

目次

制御

条件判断する

if ($xx > 100) {
    print "大きい\n";
} else {
    print "小さい\n";
}

10回処理を繰り返す

for ($i = 0; $i < 10; $i++) {
    print "$i\n";
}

文字列

文字を1文字ずつ処理する

$str = "ABCDEFG";
for ($i = 0; $i < length($str); $i++) {
    $c = substr($str, $i, 1);
    print "[$c] ";
}

文字を1文字ずつ処理する(日本語対応)

$str = "ABCDEFGあいうえお";   # 漢字コードはEUCとする
for ($i = 0; $i < length($str); $i++) {
    $c = substr($str, $i, 1);
    if ($c =~ /[\x80-\xff]/) {
        $c = substr($str, $i++, 2);
    }
    print "[$c] ";
}

行末の改行コードや空白を取り去る

$str =~ s/\s*$//;

全角文字が含まれているか調べる

# $strの漢字コードをEUCにしておいて
if ($str =~ /[\x80-\xff]/) { print "全角文字が含まれてます"; }

書き出し

文字列を書き出す

print "あいうえお\nかきくけこ\n";

ダブルクォーテーションを含む文字列を書き出す

print "<a href=\"index.html\">\n";
print '<a href="index.html">';

アットマークを含む文字列を書き出す

print "foo\@abc.xyz";
print 'foo@abc.xyz';

書式を指定して書き出す

printf("%04d/%02d/%02d\n", $year, $month, $mday);

数行にわたる内容を書き出す

print <<END_OF_DATA;
あいうえお
かきくけこ
END_OF_DATA

バッファをフラッシュする

$old = select(OUT); $| = 1; select($old);

ファイルをロックする

open(OUT, "> file.txt");
flock(OUT, 2);
print OUT ".......\n";
close(OUT);  # closeすると自動的にアンロックされる

配列

配列を用いる

$xx[0] = "あああ";
$xx[1] = "いいい";
print "$xx[0]\n";

すべての配列要素に対して処理する

for $yy (@xx) {
    print $yy;
}

ファイル

ファイルを読み出す

open(IN, "xxxx.txt");
while (<IN>) {
    print $_;
}
close(IN);

ファイルのサイズを得る

$size = -s $file;

ファイルをバイナリモードで読み出す

$size = -s $file;
open(IN, $file);
binmode(IN);              # Windowsで必要
sysread(IN, $buf, $size);
close(IN);

ファイルが存在するか確認する

if (-f $file) {
    print "ファイルは存在します。\n";
}

ファイルをロックする

open(OUT, ">> outfile.txt");
flock(OUT, 2);
truncate(OUT, 0);
print "....";
close(OUT);

サブルーチン

サブルーチンを定義する

sub add {
    return($_[0] + $_[1]);
}

サブルーチンを呼び出す

$answer = &add(3, 5);

サブルーチンの中で使う変数をローカル変数とする

sub add {
    local($ans);
    $ans = $_[0] + $_[1];
    return($ans);
}

その他

引数を解釈する

for ($i = 0; $i <= $#ARGV; $i++) {
    print "$ARGV[$i]\n";
}

時間帯を日本時間に設定する

$ENV{'TZ'} = "JST-9";

プログラム強制中断の際の処理を記述する

$SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = "sigexit";
sub sigexit {
    # この部分に作業ファイル削除などの終了処理を記述する
}