よく使うコマンド - 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 ='; # $@ をセットする
|