よく使うコマンド - Perlステートメント
1 use use IDGet; IDGet(IDGET.pm)パッケージを使用
use strict; 変数の定義を強制
2 require 他のplファイルをincludeする require 'cgi-lib.pl';
3 package & use パッケージ使用 *.pm----> package AAA;
….
Sub BBB{
….
return $ret;
}
*.pl----->use AAA;
my $ret = AAA BBB( … );
4 &subname サブルーチンコール &system("cat @argv > $TMP") && exit 1; 「system」というサブルーチンをコール
5 出力定義 $\ = ""\n""; printの最後に自動的に出力する文字
$, = "",""; print @xxx の間の区切記号
備考)上記2行分の定義はuse文の真下あたりがよい?!
上記1行目の定義がない場合、改行されない。
6 shift or argv[0] etc 起動時のパラメータ取得 my $ixmin = shift;
my $ixmin = argv[0];
注意)パラメータがない場合、""undef""になってしまう。
""""かどうかで判定してもよいが、Warningが出る?!
7 デフォールト変数 @_ および  $_
8 変数の初期化/クリア $line = """";
@lines = ();
$Cnt = 0;
9 CGI用定義 & CGIサンプル my $query = new CGI;
my $SNPNUM = $query->param(SNPNO);
備考)上記2行目は、HTMLで定義の「SNPNO」というパラメータを取得。
10 CGIその2 PNGフォーマットでグラフィックス出力 print $query->header( -type=>""image/png"",-expires=>""-ld"");
binmode STDOUT;
print $im->png;
11 Linux/UNIXのコマンドライクな命令 mkdir
chmod
12 system Linux/UNIXコマンドを実行 system("SUB.PL"); SUB.PLというPerlプログラムを実行
13 if ( -e "123.txt"){ ファイルの有無チェック if ( -e ""123.txt""){ ""123.txt""があった場合、以下の処理へ
if ( -e not ""123.txt""){ ""123.txt""がない場合、以下の処理へ
14 substr VBのMidのような文字列処理 substr($wStr,0,3) 先頭桁より3桁分取得
注意)開始桁は0〜
15 push  @変数(後ろ)に値を追加 push( @dt_rec,"dummy");
16 open テキストファイルオープン open (MASTER,"/tomato/barcode/master.csv") || die "could not open master.csv: $!";
17 オープンしたファイルの1行読込 $cbuf = ; <--chomp( $cbuf = );で行末のLFをカット
print (GAN,$cbuf); <--GANというハンドルに出力
18 foreach ループ処理 foreach $line (){ のファイルハンドルより入力し-->$line
foreach $line (@sort_kekka_list){ @sort_kekka_listの各値を順番に取得。
※取得値がなくなるまでループが続く。
ファイルコピーの例)
foreach $resfile (@res){ <--@resにコピーしたいファイルリストがある。
open IN,""/raven_data/$line/$resfile"";
open ALL,"">/imo/cancer/$line/$resfile"";
while( ){ <--格納変数を指定しない場合、「$_」となる。
print ALL; <--print ALL $_ と同じ
}
close ALL;
close IN;
}
19 opendir&grep 指定フォルダの内容を取得 opendir DD,""/raven_data/$line"";
@res = grep(/^\d{4]\=6\=[XY]\d{2}\.txt/,sort readdir DD);
closedir DD;
備考)grepのフィルターは次の通り。
1.先頭の桁==Decimal4桁指定
2.5桁目==「=」(イクオール)
3.6桁目==「6」
4.7桁目==「=」(イクオール)
5.8桁目==「X」または「Y」
6.9桁目から2桁==Decimal2桁
7.11桁目以降==「.txt」
なお、「\=」「\.」はそれぞれ「=」「.」を表す。
20 split 一行を指定セパレータで分ける split( /\t/, $kkk ); $kkkの文字列を「\t」(タブ)で分けて、「@_」に格納。
21 s tr   文字列の置換 $config =~ s/\n/\t/gs; 改行をTABに置換
$line =~ tr/\x8E/?/; hex'8E'を「?」に置換
$line =~ tr/\x93//d; hex'93'を削除
$line =~ tr/?/\//s; 「??」を「/」に置換、更に変換後同じ文字を1文字に圧縮
22 chomp 行末の改行(LF)を削除 chomp( $a = ); 標準入力から入力し、行末の改行を削除
注意)MS-DOS/WIN環境で作成したテキストファイルの行末はCR・LFなのでchompで改行を取り除くことはできない。
--> $a =~ tr/\r\n//d; で処理する。
23 index 文字列内、別の文字列検索(VBのinstr同様) index $aaa,$bbb; 注意)結果の桁位置は0〜 従って、検索NGは<0
24 sort sort機能を使用 @sorted_kekka_list = sort @kekka_lst;
25 DB を使用するための宣言 use DBI ;            <---プログラムのuse定義エリア
26 DB のConnect $hDb = DBI->connect (""dbi:Pg:dbname=snp;host=$hostnm"", ""postgres"", ""postgres"") or die;
$hDb->{AutoCommit} = 1; # AutoCommitをONにする。
備考)例えば、$hostnm=""negi2"";
以下、テキストに格納されているホスト名(negi2等)を取得する例:
open MYHOSNM,"" chomp($hostnm = );
close MYHOSNM;
27 DB のテーブル読込 $MySql = ""select bar_id,file_name from $Mas_id_fname order by bar_id asc"";
$hRs = $hDb->prepare($MySql);
$hRs->execute;
….
$kkk = $hRs->fetchrow;
….
print ""*** $kkk->[0]………………………………"";
備考)fetchrowの格納変数が @変数 の場合、そのメンバーに入るが、
    $変数 の場合、$変数がポインターとなる。
28 エラートラップ # 0 除算を致命的エラーにしない
eval { $answer = $a / $b; }; warn $@ if $@;

# 最初に使った後、同じものに最適化される
eval '$answer = $a / $b'; warn $@ if $@;

# コンパイル時エラー
eval { $answer = };

# 実行時エラー
eval '$answer ='; # $@ をセットする