○perl 簡易リファレンス

実行方法
引数を受け取る
標準出力
標準入力
コメントは#で始まる行
変数は $で始まる文字列
計算
文字の連結
文字のサイズを求める
文字列の切り出し
文字列の最後の改行文字を削除
コマンドライン引数は$ARGV配列に入っています
区切り文字による文字列の切り分け
配列
連想配列
条件式
比較演算子
繰り返し
ソート
GOTO文
サブルーチン
環境変数
他のプログラムの実行
スクリプトファイルの結合
複数行に渡る文字列








■実行方法
Perlがインストールされているとする

テキストファイルにPerlスクリプトを書く
****.pl という拡張子で保存する

▼実行するには
perl ****.pl

■スクリプトの改行は ;


■引数を受け取る

$ARGV[0];
上記変数に1つ目の引数が格納されます
以降 1 2 と続きます

$ARGV[1];
$ARGV[2];


■標準出力
print
もしくは C言語と同様に使える
printf

$val=10.1;
printf("%d\n",$val);
printf("%g\n",$val);

出力結果
10
10.1

▼printfの内容を変数に出力

$str=sprintf('%dです',10);
print $str; 

■標準入力

$line=<>;#文字が一行入力されるまで待機
print $line;


while($line=<>){}にすると$lineがEOFになるまでループする。

例)標準入力からの文字列を""で囲んで標準出力する

while($line=<>){
	$line =~ s/\r//;		#改行を削除する
	$line =~ s/\n//;		#改行を削除する
	print "\"$line\"\n";	#""で囲って出力する
}


■コメントは#で始まる行

#ココはコメント

■変数は $で始まる文字列
変数の型は無いし宣言の必要も無い

$str="test";
$val=10;
print $str;
print "\n";
print $val;

出力結果

test
10

■計算
数字の文字も自動で数字に変換されて計算

$a="10";#文字
$b="20.01";#文字
$c=30.0002;#数字
$e=$a+$b+$c;
print $e;

出力結果

60.0102

▼小数点以下切捨て
int関数を使う

$a=int(1/3);

■文字の連結

$a="10";#文字
$b="20.01";#文字
$c=30.0002;#数字
$d="test";#文字
$e="$a$b$c$d";
print $e;

出力結果

1020.0130.0002test

■文字のサイズを求める

$str="test";
print length($str);

出力結果
4

■文字列の切り出し

▼位置を指定して切り出し

$str="abcdef";
print substr($str,2,3);# 文字列の2文字目から3文字を切り出し

出力結果
cde


▼区切り文字による切り出し
カンマを区切り文字として文字列を切り出し、配列に格納します

$str="aaaa,bbbb,cccc,dddd";
@ar = split(/,/, $str);
printf("%s %s %s %s\n",$ar[0],$ar[1],$ar[2],$ar[3]);

出力結果
aaaa bbbb cccc dddd


▽区切り文字で切り出された配列をループで出力します

$str="aaaa,bbbb,cccc,dddd";
@ar = split(/,/, $str);
for($i=0;$i<@ar;$i++){
	printf("%s\n",$ar[$i]);
}

出力結果
aaaa
bbbb
cccc
dddd


■文字列の最後の改行文字を削除

$str="abcdef\n";
chomp($str); #最後の改行文字を削除
print $str; 

しかし、上記方法だとWindowsで作成されたテキストの場合において、
改行文字が完全に削除されない。
(Linuxでの改行文字はLFであるが、Windowsでの改行文字は CR+LF のため、
CRが削除されない)
そのため以下の方法がおすすめである

$str =~ s/\r//;		#CRを削除する
$str =~ s/\n//;		#LFを削除する



■コマンドライン引数は$ARGV配列に入っています

print $ARGV[0];
print "\n";
print $ARGV[1];

■区切り文字による文字列の切り分け
カンマ区切り文字を切り分けます

$str="aa,bb,c";
@ar=split( ',' , $str );
print $ar[0],"\n";
print $ar[1],"\n";
print $ar[2],"\n";

処理結果
aa
bb
c

■配列

配列は @ で始まる文字列になります
▼値で初期化した配列

@ar=(10,20,30,40);
print $ar[0],"\n";
print $ar[1],"\n";
print $ar[2],"\n";
print $ar[3],"\n";

実行結果
$ perl test.pl
10
20
30
40
▼要素数の表示 配列の数を取得できます @ar=(10,20,30,40); $len=@ar; print $len; 実行結果
$ perl test.pl
4
▼値を取り出して変数への格納 配列に格納されている順番に変数に格納されます @ar=(10,20,30,40); ($a,$b)=@ar; print "$a\n"; print "$b\n"; 実行結果
$ perl test.pl
10
20
▼末尾に値を追加 配列の最後に値が追加されます @ar=(10,20,30,40); push @ar,50; print $ar[0],"\n"; print $ar[1],"\n"; print $ar[2],"\n"; print $ar[3],"\n"; print $ar[4],"\n"; 実行結果
$ perl test.pl
10
20
30
40
50
▼先頭に値を追加 配列の先頭に値が追加されます @ar=(10,20,30,40); unshift @ar,50; print $ar[0],"\n"; print $ar[1],"\n"; print $ar[2],"\n"; print $ar[3],"\n"; print $ar[4],"\n"; 実行結果
$ perl test.pl
50
10
20
30
40
▼配列の要素を削除 splice (配列,位置,要素数) 次のプログラムでは2番目の要素を1つ削除します @ar=(10,20,30,40); splice @ar,2,1; print $ar[0],"\n"; print $ar[1],"\n"; print $ar[2],"\n"; print $ar[3],"\n"; print $ar[4],"\n"; 実行結果
$ perl test.pl
10
20
40
次のプログラムでは2番目の要素を2つ削除します @ar=(10,20,30,40); splice @ar,2,2; print $ar[0],"\n"; print $ar[1],"\n"; print $ar[2],"\n"; print $ar[3],"\n"; print $ar[4],"\n"; 実行結果
$ perl test.pl
10
20
▼配列の結合 配列自体を結合します @ar1=(10,20); @ar2=(30,40); @ar=(@ar1,@ar2); print $ar[0],"\n"; print $ar[1],"\n"; print $ar[2],"\n"; print $ar[3],"\n"; 実行結果
$ perl test.pl
10
20
30
40
▼配列の要素の結合 配列の要素を一つの文字列に結合できます join 区切り文字,配列 要素と要素の区切り文字も指定できます @ar=(10,20,30,40); $str=join ",",@ar; print $str; 実行結果
$ perl test.pl
10,20,30,40
▼配列のクリア 配列の要素が全て削除されます @ar=(10,20,30,40); @ar=(); print $ar[0],"\n"; print $ar[1],"\n"; print $ar[2],"\n"; print $ar[3],"\n"; 実行結果
$ perl test.pl




▼配列の複製 $ar[0]=10; $ar[1]=20; $ar[2]=30; $ar[3]="test"; @ar2=@ar;#配列の複製 値がすべて複製される $ar[3]="test2";//元の配列の値を変えても値渡しのため結果に影響しない print $ar2[0],"\n"; print $ar2[1],"\n"; print $ar2[2],"\n"; print $ar2[3],"\n"; 出力結果 10 20 30 test ▼配列の列挙 -----------その1----------- @files = <*.txt>;#ワイルドカードに当てはまるファイル名を配列で取得 #配列の値を列挙 foreach ( @files ) { $file=$_; print $file,"\n"; } -----------その2----------- @files = <*.txt>; $size=@files;#配列のサイズを求める for($i=0;$i<$size;$i++){ print $files[i]; }
■連想配列 $map{"aa"}="aaです"; $map{"bb"}="bbです"; $map{"cc"}="ccです"; $map{"dd"}="ddです"; $map{"ee"}="eeです"; $map{"ff"}="ffです"; print $map{"cc"}; 処理結果 ccです ■条件式 ▼if文の書き方は基本的にはCやJAVAと同じですが "else if" の場合のみ書き方が "elsif" に変わるため注意が必要です if(式){ }elsif(式){ } ▼数字の場合は 0 はFALSEとなる if(0){ print "成立"; }else{ print "不成立"; } 処理結果 不成立 if(-1){ print "成立"; }else{ print "不成立"; } 処理結果 成立 ▼文字の場合は "" 空白文字列はFALSEとなる if("a"){ print "成立"; }else{ print "不成立"; } 処理結果 成立 if(""){ print "成立"; }else{ print "不成立"; } 処理結果 不成立 ■比較演算子 ▼文字の比較 equals print "a"eq"a"; #文字列比較 出力は"1" print "a"eq"b"; #文字列比較 出力は"" not equals print "aaa"ne"aaa"; #文字列比較 出力は"" print "aaa"ne""; #文字列比較 出力は"1" ▼数字の比較(Cと同じです) print 10==10; #数字の比較 出力は"1" print 10==20; #数字の比較 出力は"" ▼論理演算し(Cと同じです print 10==10 && 2==0; #論理演算子 出力は"" print 10==10 || 2==0; #論理演算子 出力は"1" ■繰り返し ▼while文 while (論理式) { } last;にてwhileを終了させることが出来ます ▼for文 for (初期化;論理式;繰り返しごとに実行) { } ▼例 for($a=0;$a<10;$a++){ print $a; } 出力結果 0123456789 ■ソート $ar[0]=10; $ar[1]=1; $ar[2]=3; $ar[3]=20; #ソートは内部的に 数値$a $b を使用する <=>は比較演算子 #{$b <=> $a} に変更すると逆順ソートになる @ar =sort {$a <=> $b} @ar; print $ar[0],"\n"; print $ar[1],"\n"; print $ar[2],"\n"; print $ar[3],"\n"; 出力結果 1 3 10 20 ■GOTO文 print "a"; goto c; print "b"; c: print "c"; 処理結果 ac ■サブルーチン ▼全ての変数がグローバルなためスコープが効きません $a=10; &test("aa","bb"); print $a; sub test{ $a=@_[0]; $b=@_[1]; print $a; print $b; } 処理結果 aabbaa ▼ローカル変数を作成したサブルーチン $a=10; &test("aa","bb"); print $a; sub test{ local($a)=@_[0]; local($b)=@_[1]; print $a; print $b; } 処理結果 aabb10 ▼ポインタ渡し $a=10; &test(*a); print $a; sub test{ local(*b)=@_[0]; $b=20; } 処理結果 20 ■環境変数 $str = $ENV{PATH}; print $str; ■他のプログラムの実行 system("notepad.exe"); ■スクリプトファイルの結合 ファイル名 test.pl ----------------------- $str="test.pl"; ファイル名 start.pl ---------------------- require "test.pl"; print $str; ------------------------------------- start.plの実行の処理結果 test.pl ■複数行に渡る文字列 $str = <<KEYWORD; aaa bbb ccc ddd \"'^-=! KEYWORD print $str; ▲<<KEYWORD;からKEYWORDに囲まれた複数行が一つの文字列として 扱われ、変数$strに複数行の文字列が代入されます (KEYWORDは任意の文字列であり、自由に変更できます) 上記プログラムを実行すると
$ perl test.pl
aaa
bbb
ccc
ddd
"'^-=!
複数行の文字列が代入されていることが確認できます 次に複数行の文字列を直接出力してみます 上記プログラムと同じようにprint文に複数文字を渡しています print <<TEST; test test test TEST 上記プログラムの実行結果
$ perl test.pl
test
test
test
複数行が出力されていることが確認できます


▲トップページ > perl 関連