perlド忘れ対策メモ


単独記事にするまでもないけれど、忘れた時、覚える気がなくてコピペする時用にperlの記述方法などをここに追加していきます。

数値比較式

if ($xx == $yy)      $xxと$yyが等しければ
if ($xx != $yy)       $xxと$yyが異なっていれば
if ($xx < $yy)        $xxが$yyより小さければ
if ($xx > $yy)        $xxが$yyより大きければ
if ($xx <= $yy)      $xxが$yyより等しいか小さければ
if ($xx >= $yy)      $xxが$yyより等しいか大きければ
if (($xx==2) && ($yy==3))     $xxが2、かつ、$yyが3であれば
if (($xx==2) || ($yy==3))       $xxが2、もしくは、$yyが3であれば
if ($xx <=> $yy)                     比較結果を -1, 0, 1 のいずれかで返す

文字列比較

if ($xx eq $yy)          $xxと$yyが等しければ
if ($xx ne $yy)          $xxと$yyが異なっていれば
if ($xx lt $yy)            $xxが$yyより小さければ
if ($xx gt $yy)           $xxが$yyより大きければ
if ($xx le $yy)           $xxが$yyより等しいか小さければ
if ($xx ge $yy)          $xxが$yyより等しいか大きければ
if ($xx =~ /ABC/)      $xxがABCという文字を含んでいれば
if ($xx !~ /ABC/)       $xxがABCという文字を含んでいなけれ
if ($xx cmp $yy)      比較し、-1, 0, 1 のいずれかで返す

文字置換

abdをABCに
$xx =~ s/abc/ABC/g;

置換する文字はコードでも可能(以下例は8進数シングルクォーテーションを削る場合)
$xx =~ s/\047//g;

改行コード取っ払い

\nの場合と\rの場合と\r\nの場合があるので、手っ取り早く\rと\nの置換を書いておけば無難。
$xx =~ s/\n//g;
$xx =~ s/\r//g;

〇文字目~〇文字目を抜き出す

$xx = substr($yy,0,4);    ←$yyの0番目から4文字を$xxに入れる

配列処理

配列に入ってる分すべてを対象にする
foreach (@string) {
処理内容
}

条件が真の場合は繰り返し実行
while (条件式) {
処理内容
}

条件が偽の場合は繰り返し実行
until (条件式) {
処理内容
}

増減処理を条件に含めて実行
for (初期値 ; 条件式 ; 増減式) {
処理内容
}

ファイルのコピー

system(“cp -r コピー元 コピー先”);

ファイル名の変更

rename(古いファイル名, 新しいファイル名);
変数=にした場合、成功すれば 1 を、失敗すれば 0 を返す。

ファイルの削除

unlink($filename);
変数=にした場合、成功すれば 1 を、失敗すれば 0 を返す。

ディレクトリの作成

mkdir 作成ディレクトリ名;

ディレクトリ内にあるファイル名をすべて取得

opendir(DIR, “対象ディレクトリ名”);
while ($file = readdir(DIR)) {
if ($file =~ /.csv/){ ←拡張子csvファイルだけをリスト化の場合
push(@allfiles,”$file\n”);
}
}
closedir(DIR);

@allfilesの配列にファイル名が入る

環境変数

$host = $ENV{‘REMOTE_HOST’};  # ホスト名(すべて取得できるとは限らない)
$addr = $ENV{‘REMOTE_ADDR’}; # アクセス者IPアドレス
$link = $ENV{‘HTTP_REFERER’}; # アクセス元となった直前のページ
$browser = $ENV{‘HTTP_USER_AGENT’}; # アクセス者のブラウザ

配列の先頭を切り出す

$string = shift(@list);
$stringには@listの先頭変数が割り当てられ、同時に@listの先頭変数は削除される。

配列の整列

整列対象が文字の場合(@lines1の<>で区切られた項目の0番目の内容でソートして@lines2にする場合)
@lines2 = sort { (split(/<>/,$a))[0] cmp (split(/<>/,$b))[0] } @lines1;

整列対象が数字の場合(@lines1の<>で区切られた項目の0番目の内容でソートして@lines2にする場合)
@lines2 = sort { (split(/<>/,$a))[0] <=> (split(/<>/,$b))[0] } @lines1;

逆順にしたい場合はsortをreverse sortにする。

三ケタの乱数生成

$string = sprintf( ‘%03d’, int( rand( 999 ) ) + 1 );