WATAPEDIA
--
プログラミング
-- Perl
Last updated Jun. 12, 2014
Home
Return
PDFを表示
記事が表示されない場合は,ブラウザが非対応です.
上のPDFを表示をクリックしてください.
comp -MYPEDIA Programing- Perl 1 サンプルコード Unix コマンドを実行 qx{<コマンド>} サンプルコード open(TEST,">test.txt"); #結果出力用ファイルを開く @resalt = qx{ls}; #ls コマンドを実行して結果を配列に格納 print TEST @resalt; #配列に記憶した結果をファイルに出力 close(TEST); 配列をハッシュ関数に代入 $<ハッシュ>{<キー>} = [<配列>] サンプルコード @List = ("a","aa","aaa"); $Hush{"AAA"} = [@List]; foreach $Temp (@{$Test{"AAA"}}){#すべての要素を列挙 print "$Temp\n"; } print $Test{"AAA"}[0] ,"\n";#特定の要素にアクセス 文字列をすべて置換 <文字列> =~ s/<被置換文字列>/<置換文字列>)/g サンプルコード $String = "AABBAABB"; $String =~ s/BB/CC/g;#BB を CC で置換 print "$String\n"; 1 Programing 一覧へ . ↰. comp -MYPEDIA Programing- 配列内を検索 <結果の配列> = grep(/<検索条件>/, <検索対象の配列>) サンプルコード @List = ("AAA", "AAB", "BBB"); @List2 = grep(/AA./, @List);#正規表現にマッチするもののみ抽出 foreach $Temp (@List2){ print "$Temp\n"; } 配列を文字列としてソート <結果の配列> = sort <検索対象の配列> サンプルコード @List = ("b", "d", "e", "a", "c", "f"); @List2 = sort @List; #並べ替え print "@List2\n"; 配列を数値としてソート <結果の配列> = sort { $a <=> $b } <検索対象の配列> サンプルコード @List = (5, 3, 1, 2, 4, 0); @List2 = sort { $a <=> $b } @List; #昇順で並べ替え print "@List2\n"; 2 次元配列を文字列としてソート <結果の配列> = sort { @$a[<並べ替えする列番号>] cmp @$b[<並べ替えする 列番号>] } <検索対象の配列> サンプルコード @List = ([0, c], [1, b], [2, a]); 2 Programing 一覧へ . ↰. comp -MYPEDIA Programing- @List2 = sort { @$a[1] cmp @$b[1] } @List; #2 列目について昇順で並べ替え for($i=0 ; $i<3 ; $i++){ for($j=0 ; $j<2 ; $j++){ print "$List2[$i][$j]\t"; } print "\n"; } 2 次元配列を数値としてソート <結果の配列> = sort { @$a[<並べ替えする列番号>] <=> @$b[<並べ替えする 列番号>] } <検索対象の配列> サンプルコード @List = ([0, 2], [1, 3], [2, 1]); @List2 = sort { @$a[1] <=> @$b[1] } @List; #2 列目について昇順で並べ替え for($i=0 ; $i<3 ; $i++){ for($j=0 ; $j<2 ; $j++){ print "$List2[$i][$j]\t"; } print "\n"; } 配列の要素数を取得 scalar(@<配列>) サンプルコード @List = ("AAA", "BBB", "CCC"); print scalar(@List) ,"\n"; #要素数を表示 別ファイルの関数を呼び出し &<パッケージ名>::<関数名>(<引数>) 3 Programing 一覧へ . ↰. comp -MYPEDIA Programing- メインファイルの記述 サンプルコード require "Rand_Package.pl"; &TestPackage::TestSubroutin;#関数を呼び出し 関数を記述するファイルの記述 package TestPackage;#パッケージ名 sub TestSubroutin{#関数 print "Hello, world.\n"; } return 1; 文字コードを変換 $Euc = encode("<エンコード>", decode("<元のエンコード>", $Sjis)); サンプルコード use Encode; $Euc = encode("euc-jp", decode("shiftjis", $Sjis));#UTF-8 な ら utf-8, UTF-16 なら UTF-16BE 文字コードを判定 $Encode = guess_encoding(<文字列>, qw/euc-jp shiftjis 7bit-jis utf8/); サンプルコード use Encode::Guess; $Encode = guess_encoding("あいう", qw/euc-jp shiftjis 7bit-jis utf8/); print $Encode->name ,"\n"; Mac のファイルシステムの文字コード (UTF-8-MAC) を変換 $String = Encode::decode(’utf-8-mac’, $String); 4 Programing 一覧へ . ↰. comp -MYPEDIA Programing- サンプルコード use utf8; use Encode::UTF8Mac; open(TEST,">だくてん.txt");#ファイルを作成 close(TEST); opendir(INPUTDIRECTORY,"./"); while($FileName = readdir(INPUTDIRECTORY)){#ディレクトリ内のファイル名の 取得 $FileName = Encode::decode(’utf-8-mac’, $FileName);#内部文字列に変換 $FileName =~ s/だ/ダ/g;#「だ」を「ダ」に置換 $FileName = Encode::encode(’utf-8-mac’, $FileName);#内部文字列をもとに 戻す print "$FileName\n"; } 文字列の分解 @List = split(/<分解パターン>/, $String); サンプルコード $String = "Test-Test-Test"; @List = split(/-/, $String); print "@List\n"; 文字列の結合 $String1 = $String2 . $String3; サンプルコード $String2 = "a"; $String3 = "b"; $String1 = $String2 . $String3; print "$String1\n"; 5 Programing 一覧へ . ↰. comp -MYPEDIA Programing- 文字数カウント length(decode(’utf-8’, $String); サンプルコード use Encode; $String = "あいうえお"; $Length = length(decode(’utf-8’, $String)); print "$Length\n"; 文字数の一部を取り出し substr($String, <最初の位置>, <最後の位置>); サンプルコード $String = "abcdef"; $String = substr($String, 2, 3); print "$String\n"; ファイルをコピー copy(<コピー元ファイル>, <コピー先ファイル名>); サンプルコード use File::Copy; open(TEST,">test.txt");#test.txt を作成 close(TEST); copy("test.txt", "test2.txt"); ディレクトリをコピー substr(<コピー元ディレクトリ>, <コピー先ディレクトリ>); サンプルコード use File::Copy::Recursive qw(rcopy); 6 Programing 一覧へ . ↰. comp -MYPEDIA Programing- mkdir("test", 0777);#新しいディレクトリの作成 rcopy("test", "test2"); ファイルおよびディレクトリ名をリネーム rename(<元ファイル名>, <変更後ファイル名>); サンプルコード open(TEST,">test.txt");#test.txt を作成 close(TEST); rename("test.txt", "test2.txt"); コマンドライン引数を取得 $ARGV[<取得する引数の順番>] 現在の日付と時刻を取得 localtime サンプルコード ($Sec, $Min, $Hour, $Day, $Month, $Year) = localtime; print 1900 + $Year ,"年", $Month + 1 ,"月$Day 日$Hour 時$Min 分$Sec 秒 \n"; フォルダ内のすべてのファイルについて処理 while($String = readdir(<ディレクトリハンドル>)){ サンプルコード opendir(INPUTDIRECTORY,"./"); while($FileName = readdir(INPUTDIRECTORY)){ print "$FileName\n"; } 7 Programing 一覧へ . ↰. comp -MYPEDIA Programing- フォルダ内のすべてのファイルについて再帰的に処理 find(\&<関数>, "<ディレクトリのパス>") サンプルコード use File::Find; find(\&process, "./"); sub process{ print "$File::Find::name\n";#ファイルの絶対パスを出力 ($_でファイル名) } ファイルの存在を確認 -e "<ファイル名>" サンプルコード open(TEST,">test.txt");#ファイルを作成 if(-e "test.txt"){ print "exist\n"; } close(TEST) 配列に同じ値をまとめて代入 (初期化) @List = (<代入する値>) x <要素数> サンプルコード @List = (0) x 5; print "@List\n"; 2 次元配列に同じ値をまとめて代入 (初期化) for(1..<行数>){push(<配列>,[(<代入する値>) x <列数>]);} サンプルコード for(1..3){push(@List2,[(0) x 5]);} 8 Programing 一覧へ . ↰. comp -MYPEDIA Programing- print "@{$List2[0]}\n@{$List2[1]}\n@{$List2[2]}\n"; ベクトルを代入 $Vector = vpdl(<配列>) サンプルコード use PDL; use PDL::Matrix; @List = (1,2); $Vector = vpdl(@List); print "$Vector\n"; ベクトルの成分を取得 index(<ベクトル>,<成分番号-1>) サンプルコード use PDL; use PDL::Matrix; @List = (1,2); $Vector = vpdl(@List); $Scalar = index($Vector,0); print "$Scalar\n"; 行列を代入 $Matrix = mpdl(<2 次元配列>) サンプルコード use PDL; use PDL::Matrix; @List = ([1,2],[3,4]); $Matrix = mpdl(@List); print "$Matrix\n"; 9 Programing 一覧へ . ↰. comp -MYPEDIA Programing- 単位行列を代入 identity(<行列のサイズ>) サンプルコード use PDL; use PDL::MatrixOps; $Matrix = identity(3); print "$Matrix\n"; 転置行列を算出 transpose(<行列>) サンプルコード use PDL; use PDL::Matrix; $Matrix = mpdl [[1,0],[1,1]]; $Matrix2 = transpose($Matrix); print "$Matrix2\n"; 行列の成分を取得 index2d(<行列>,<行番号-1>,<列番号-1>) サンプルコード use PDL; use PDL::Matrix; $Matrix = mpdl [[1,0],[1,1]]; $Scalar = index2d($Matrix,0,1); print "$Scalar\n"; 10 Programing 一覧へ . ↰. comp -MYPEDIA Programing- トレースを算出 <行列>->trace サンプルコード use PDL; use PDL::Matrix; $Matrix = mpdl [[1,0],[1,1]]; $Scalar = $Matrix->trace; print "$Scalar\n"; 逆行列を算出 inv(<行列>) サンプルコード use PDL; use PDL::Matrix; use PDL::MatrixOps; $Matrix = mpdl [[1,0],[1,1]]; $Matrix2 = inv($Matrix); print "$Matrix2\n"; 行列式を算出 det(<行列>) サンプルコード use PDL; use PDL::Matrix; use PDL::MatrixOps; $Matrix = mpdl [[1,0],[1,1]]; $Scalar = det($Matrix); print "$Scalar\n"; 11 Programing 一覧へ . ↰. comp -MYPEDIA Programing- 固有値と固有ベクトルを算出 eigens_sym <行列> サンプルコード use PDL; use PDL::Matrix; use PDL::MatrixOps; $Matrix = mpdl [[1,0],[1,1]]; ($Eigenvector, $Eigenvalue) = eigens_sym $Matrix; print "Eigenvectors are $Eigenvector\n"; print "Eigenvalues are $Eigenvalue\n"; ループを抜ける last サンプルコード for(1..10){ print "$_\n"; if($_ == 5){ last } } 2 重ループを抜ける last <ループ名> サンプルコード OUT:for($i=0 ; $i<10 ; $i++){ for($j=0 ; $j<10 ; $j++){ print "$i-$j\n"; if($i == 5 && $j == 5){ last OUT } } } 12 Programing 一覧へ . ↰. comp -MYPEDIA Programing- 2 実行コマンド 1 ライナーで実行 サンプルコード perl -e <コマンド> 複数行のコマンドをコマンドライン上で実行 サンプルコード perl <コマンド 1 行目> <コマンド 2 行目> ... <コマンド n 行目> [ctrl + D] ファイルから実行 サンプルコード perl <ファイルへのパス> 13 Programing 一覧へ . ↰.