自分用なので、他言語と共通するようなことはあまり記載されていない。
数値・文字列
- 数値には「_」が使える(無視される)
- 文字列の囲みは「"」「'」どちらも使えるが、「"」で変数を使うと展開される
- 文字列結合は「.」
- 型はあまり厳密ではなく、jsのように勝手にキャストされる
変数
変数の頭につける記号は取り出す値の型に該当するモノをつけるイメージ
- $xxx
スカラー変数。通常の変数 - @yyy = ("xxx", "yyy")
配列 - $yyy[0]
配列の値へのアクセス - $#yyy
配列の最後の添え字。配列を作ると勝手に作られている - ($a,$b) = ("aa","bb")
一括代入できる - %xx = ( "one", "iti", "two", "ni" );
連想配列、"one"がキーで"iti"が値になる $xx{"one"}
連想配列から値の取り出しレキシカル変数
myで宣言される変数。いわゆるローカル変数。- デフォルト変数
myでレキシカル変数を宣言しなかったり、などの時にデフォルトでここに入る
配列の操作
- qw( a i u e o)
文字列の半角空白を区切りとして配列を作成する。
くくり文字は同じ文字、または<>などの囲い文字であれば何でもいいらしい。 - $a = shift @array
配列から最初の要素を取り出す(最初の要素は配列から失われる) - unshift @array, 5
配列の最初に要素を追加する - $a = pop @array;
末尾の要素を取り出す(末尾の要素は失われる) - push @array, 5;
末尾に要素を追加する - @sorted = sort { $a 演算子 $b } @array;
昇順で並べ替え。{~}の部分は省略できる - @sorted = sort { $b 演算子 $a } @array;
降順で並べ替え- 演算子
- <=> 数値として並び替え
- cmp 辞書的な並び替え
- 演算子
リファレンス
C言語のポインタ的なこと。
配列のリファレンスは多次元配列を実現するのに使われる。
- $xxx_ref = \$xxx
スカラー変数のリファレンス。
参照したい変数に「\」を付けるとリファレンスになる - $xxx_ref
帰ってくるのはSCALAR(0x1832660)というような番地情報? - $$xxx_ref
参照したいモノがなんなのかを頭に1つつければ値が取得できる。
今回の場合中身がスカラ変数なので「$」を付ける - $$array_ref[1] または $array_ref->[0]
配列リファレンスから値の取り出し - $ref = "foo"; print $$ref;
これでもリファレンスが作れるが「use strict」プラグマを付けるとランタイムエラーになる
制御文
条件式
- true、falseに該当するものがない
- 0、空白、"0"、未定義はfalseと同等になる
- 文字列の比較の場合「eq 、ne、gt、 lt、ge、le」を使う。なお 0-9<A-Z<a-z
構文
- unless(...) {}
ifの逆で偽の時に処理される - if (){ } elsif () {} else {}
「elsif」なので注意。 - print("OK!") if ( 条件分 )
if文の後置。後ろに書いてもOK
サブルーチン
- sub aa { .. }
- $[0] や @ で引数が扱える
$xx = shift
をみたら@_が省略されていると思え
オブジェクト指向
- Person->foo();
クラスメソッドの呼び出し。 - $p->bar();
オブジェクトメソッドの呼び出し - my $class = shift;
- my $self = shift;
classにはクラス名が入る。クラスメソッド、オブジェクトメソッドの1行目。
オブジェクト指向のメソッド呼び出しでは第一引数にクラスやオブジェクトの参照が設定されるらしい。
その他
- use strict;
コードをより厳密にチェックするためのプラグマ。つけるべし。 - use warnings;
- $x =~ s/123/456/g
文字列置換。=~は正規表現の時に使われるやつ