perl入門メモがき
perlの文法の簡単な説明と、コードの記述例を下記にまとめた。
「変数と制御構文」、「プログラムコードの整理、管理に用いられる名前空間(パッケージ)/サブルーチンの使い方」および「オブジェクト指向におけるオブジェクト、クラスの作成、使用方法」の3つを記載した。
「正規表現」はカバーしてない。(別のところで記載するか、追記するかしたい)
-------------------------------------------------------
1.変数と制御構文
・スカラ型、配列型、ハッシュの3つの変数型を利用できる。
・リファレンス(変数の参照)も利用可能。
・分岐(if/unless)、繰り返し(for, foreach, while)の制御構文を利用可能
●変数定義
$はScalarのS、@はarrayのaに形を似せている。Hashがなぜ%かは不明。
my $str = "Hello, world"; # スカラ型(Scalar)
my @array = (0, 1, 2); # 配列(Array)
my %hash = ('one' => 1, 'two' => 2); # ハッシュ(Hash)
●配列/ハッシュの参照
配列やハッシュも参照時の頭文字は$である。[]か{}で配列とハッシュを区別する。
$array[1]; # 1; 配列の参照
$hash{'two'} # 2; ハッシュの参照
●リファレンス
\を頭につけることで変数へのリファレンス(参照、ポインタ)を表現する。
my $sref = \$int; # スカラーへのリファレンス
my $aref = \@array; # 配列へのリファレンス
my $href = \%hash; # ハッシュへのリファレンス
●デリファレンス(参照元へのアクセス)
リファレンス変数の前にプレフィックス($:スカラ、@:配列、%:ハッシュ)をつける。
my $s = $$sref; # $sref の参照元
my @a = @$aref; # $aref の参照元
my %h = %$href; # $href の参照元
●参照元のデータタイプ
デリファレンスを使うためには、参照元の型を知る必要がある。
参照元の型を知るには、ref関数を用いる。
ref 1; #
ref $sref; # 'SCALAR'
ref $aref; # 'ARRAY'
ref $href; # 'HASH'
ref A::B->new(); # 'A::B' (たぶん)
●制御構文(if, while, for, foreach, unless, until)
elsifのつづりに注意。後置可能。
foreachが少し変わっている以外は、特に目新しいのはない。
if ($cond) { } elsif($cond2){ } else { }
doit if ($cond);
while($cond){ };
doit while($cond);
for(my $i = 0; $i < $count; $i++){ } foreach(0..$count){ } # for(0..$count)も可 print for (@ARGV); doit unless ($done); # doit if (! $done); doit until ($done); # doit while (! $done);
--------------------------------------------
2.コード管理(サブルーチンとパッケージ)
・サブルーチンで一連の処理をまとめられる。
・パッケージにより、サブルーチン名、変数名の重複を避けることができる。
●サブルーチン
定義にはsubを使う。subの後にサブルーチン名を書いて、処理内容を{}でくくる。 呼び出しは、単にサブルーチン名を書く。&を頭に付けてもよい。()を付けて引数を渡す。 戻り値は、定義の中に return 変数 と書くのが行儀のよいお作法。returnがないときは最後の変数が返される。 sub hello{ print "Hello, workd!\n"; } # サブルーチンの定義 hello(); # 呼出1 &hello(); # 呼出2 hello; # 呼出3 sub hello { return "Hello!\n"; } # 戻り値、return 省略可 print hello(); # "Hello!"と出力 sub mul{ my ($op1, $op2) = @_; # 引数(@_に格納) return $op1 * $op2; } sub mul{ $_[0] * $_[1] }; # 引数($_[0]、$_[1]で参照) my $subref = \&mul; # サブルーチンの参照 warn $subref->(7,6); # 42 ちょっと紛らわしい
my $subref = sub{ $_[0], $_[1] }; # 無名サブルーチン
print $subref->(1, 2); #
print &$subref(1, 2); # こうも書ける
●パッケージ
packageでパッケージ名を宣言。呼び出しは、$パッケージ名::変数名で指定する。
package Foo;
our $bar = 'baz';
package main;
our $bar = 'quux';
warn $bar; # 'quux'
warn $Foo::bar; # 'baz'
-------------------------------------------------------
3.オブジェクト指向
・perlでもオブジェクト指向のオブジェクト/クラスを実現できる
●クラスの定義
クラス名は、package名で表現される。コンストラクタは、newサブルーチンを定義して用いる。
package Klass; # クラスの定義(Packageで実現)
sub new{ # コンストラクター
my $pkg = shift;
return bless { @_ }, $pkg;
}
sub meth{ # メソッド、アクセサー
my $self = shift;
$self->{meth} = shift if @_;
$self->{meth};
}
●オブジェクトの使用
クラス名->メソッド名で呼び出す。
my $obj = Klass->new( meth => 'od' );
warn $obj->meth; # 'od';
# Perlは"->"の演算子を以下のように読み替えて解釈している。
my $obj = Klass::new('Klass', meth => 'od' );
warn Klass::meth($obj);
-------------------------------------------------------
参考文献
●Wikipedia
http://ja.wikipedia.org/wiki/Perl
●Perl最強講座
http://www.rfs.jp/sb/perl/
●perl5.8.xのドキュメント(日本語)
http://www.kt.rim.or.jp/~kbk/perl-5.8/
●オブジェクト指向を理解する-ITPro
http://itpro.nikkeibp.co.jp/article/COLUMN/20060921/248617/
0 件のコメント:
コメントを投稿