| ホーム ・ 研究内容 ・ コンピューター ・ 講義ノート ・ 学内限定 |
|
コンピューター
→
Perl
PerlPerlは,非常に多機能なインタープリンター言語です.機能が豊富なため,プログラムが短くて済みます.また,インタープリンターなので動作が簡単です.そのようなことからCGIで使われることが多いようです.私はCGIは使わずに全てPHPで書いており,Perlはちょっとしたプログラムに活用しています.このページはPerlに関する私のメモです. 目次実行方法Perlのプログラムは,次に示す三通りの方法で実行できます.いずれも,"Hello World!"を表示するプログラムです.
$ perl -e 'print "Hello World!\n";'
print "Hello World!\n" $ perl hello.pl
#!/usr/bin/perl print "Hello World!\n"; $ chmod +x hello.pl $ ./hello.pl データ構造perlは型指定が不要で,変数や配列などが簡単に使えます.変数名はには,アルファベットと数字,アンダースコア(_)が使えます.先頭はスカラー変数では$で配列では@となり,次にアルファベットあるいはアンダースコアになります.$や@の次に数字はダメです.$や@が付く以外は,C言語と同じです.もちろん,大文字と小文字は区別します. $_は,特別な変数です.いろいろなところで,デフォルトの変数となっています.そのため,普通の変数として$_を使うことは望ましくありません.同様に@_もです.
$hoge=2; $fuga=314e-2; $foo="Hello World!"; $a=$hoge; $b=$fuga; $c=foo; @hoge=(31, 24, 1, 5, 923); # 配列の初期化 @fuga=@hoge; # 配列間の代入 $n=@hoge; # $nは@hoge要素数が代入される $nは5に $a=$hoge[1]; # $aは24になる $hoge[0]=333; # @hoge=(333, 24, 1, 5, 923)に @test=("suzuki",49,"sato",89,"tanaka",73,"yamamoto",65); %animal=(Tom => 'cat', Bucci => 'cat'); # キーはTOMとBucci,値はcatとcat $animal{'Jerry'} = 'mouse'; # 連想配列に追加 delete $animal{'Bucci'}; # データの削除 print "$animal{'Tom'}\n"; # catと表示; @animal_key = keys(%animal); # キーを取り出して,配列に格納 @animal_value = values(%animal); # 値を取り出して,配列に格納 while(($name, $species)=each(%animal)){ # 全てのキーと値を表示 print "Key:$name Value:$species\n"; } ファイル処理
#!/usr/bin/perl
$dir="hogehoge";
opendir(DIR,$dir) or die "$dir can not be opened.\n $!";
chdir($dir);
while ($file=readdir(DIR)){
if ($file=~ /.txt/ ){
open(IN,$file) or die "IN file can not be opened.";
while<IN>{
#--------------------------------------------------
# ここに処理を書く
# $_に各行の内容が格納される
#--------------------------------------------------
}
close(IN);
}
}
文字列操作正規表現
正規表現を使った操作文字列の操作に正規表現を使う場合,/正規表現/とスラッシュで囲む.最後に i を付けると大文字と小文字の違いを無視する(ignore case).
if(/abc/){
# $_に'abc'が含まれていれば,実行
}
if($hoge=~/xyz/){
# $hogeに'xyz'が含まれていれば,実行
}
if($fuga=~/stu/i){
# $fugaに,大文字でも小文字の違いを無視して'stu'が含まれていれば,実行
}
s/old/new/; # $_中の'old'を'new'に置換 $hoge =~ s/.txt$/.dat/; # $hoge中の末尾の'.txt'を'.dat'に置換 $fuga =~ s/(^.)/aaa $1/; # $fugaの文字列の先頭に'aaa 'を追加 $foo =~ s/ok/NG/i; # 大文字,小文字の関係なく'ok'を'NG'に $bar =~ s/a/A/g; # 全ての'a'を'A'に $aaa =~ s/god/Satan/ig; # iとgオプションの両方を使う 文字列の分割と結合
$sentence='To be or not to be, that is the question;'; @word=split(/\s+|,\s*|;\s*/, $sentence); # $sentenceが単語に分けられて,@wordに格納 # @word=('To','be','or','not','to','be','that','is','the','question')となる @test=split(/:/); # この場合は,$_の文字列をコロンで分割
@word=('If','winter','comes','can','spring','be','far','behind');
$sentence=join(" ",@word);
# $sentence='If winter comes can spring be far behind'となる.
$a='Time';
$b='money';
$capitalism=$a.' is '.$b.'.';
# $capitalism='Time is money.'となる.
制御文
foreach $var(@array){
# ここに処理の内容を書く.
# @arrayの個々の内容が,$varに格納される.
}
もし,$varを省略すると,$_に@arrayの内容は,格納されます.
#!/usr/bin/perl
# foo.pl hoge fuga と実行する
print "$ARGV[0]\n"; # hogeと表示
print "$ARGV[1]\n"; # fugaと表示
もし,コマンドライン引数に,ワイルドカードを使ったファイル名を指定すると,$ARGV[0], $ARGV[1], $ARGV[2], に展開されたファイル名が格納さます.ファイルは,foreach文を使って処理するのがセオリーでしょう.
foreach $file(@ARGV){
# ここに処理の内容を書く.
# $fileにワイルドカードで表されたファイル名が格納される.
}
#!/usr/bin/perl $var=&average(3,6); # 引数を伴って,ユーザ定義関数の呼び出し print "$var\n"; # 4.5が表示される sub average{ $sum=$_[0]+$_[1]; # 引数は @_ に $ave=$sum/2; # 戻り値は最後に評価された式の値 }
sub hogehoge{
my($arg1,$arg2,$arg3)=@_; # 少しスマートな方法
# $arg1〜$arg3はローカル変数
# ユーザー定義関数の処理を書く
}
#!/usr/bin/perl $var="main_var"; # グローバル変数 &my_sub1; &local_sub1; sub my_sub1{ my $var="my_var"; # my を使ってローカル変数を宣言 print "$var\n"; # 'my_var'と表示 &my_sub2; } sub my_sub2{ print "$var\n"; # 'main_var'と表示 重要 } sub local_sub1{ local $var="local_var"; # local を使ってローカル変数を宣言 print "$var\n"; # 'local_var'と表示 &local_sub2; } sub local_sub2{ print "$var\n"; # 'local_var'と表示 重要 } 参考文献・WEBサイトなど
last update:2009/03/03 16:04:34 |