参考
スクリプトを書く時
- プラグマ
このサイトが詳しい
http://perldoc.jp/func/use - デバッグ用にも便利
次の2行を先頭に書くことが強く推奨されているっぽい。
これらはプラグマと呼ばれるものたち。
use strict; use warnings;
- 1文字でも減らしたい
print のデフォルト引数は、 $_ なので、print $_; したいだけなら書く必要ない。
用語
レコード
- 1つのまとまりとして読み書きされる文字の集合
- 入出力の際、ファイルはレコードの集まりと見ることができる。
この時、デフォルトでは、1行がレコード。
入力レコードセパレータ
- 入力レコードの終端区切りを表す文字、または文字シーケンス(文字の並び)。
- Linuxとかでは、デフォルトではラインフィード。
- Perl ではOS固有の入力レコードセパレータを \n として、参照できる。
ニューライン
- \n のこと。
- OS固有の入力レコードセパレータ。
スイッチ引数
- -s オプションを利用することで、良い感じの引数を取ることができる。
- 引数の与え方で2つの方法がある。
-foo='test' #=> $foo == 'test' -foo #=> $foo == true : -debugで、デバッグ用、みたい使う。
- スイッチ引数を任意にしているスクリプトでは、冒頭にour関数を使うのが良い。
our(foo); our(foo, $bar, ...);
真偽値
偽になるのは、次の3パターンある。- 数値 : 0 と同等な値
- 文字列 :
- null文字列
- 0 を保持する文字列 ( '0' みたいな)
- 変数 : 値を持たない変数
- まだ設定されていない変数とか。定義されているかは、 defined を使うとわかる。
特別な文字列
$/,$\
- 入力,出力レコードセパレータを指定する。
$.
- 今読んでいる入力レコードが何番目かを表す。
- 通常は行数。
- コマンドラインオプションや $/ で入力レコードセパレータを指定したときは行数じゃなくなる。
$_
- 最後に読み込んだ入力レコード。
@ARGV
<>
\n
- OS 固有のレコードセパレータ
変数
$var : 変数
- 宣言と代入
my $var = 'aaa';
- '' と ""
シングルクォートとダブルクォートの違いは、変数が展開されるかどうか。 - join (.), split, length, substr, index
@array : 配列
- 宣言と代入
my @array; @array = (1,2,3)
- $array[0] などとして、各値を得る
- pop, push, shift, unshift も使える
- 配列の大きさを得るのは、
$array_size = @array
%hash : ハッシュ
- 宣言と代入
my %hash; %hash = (a => 1, b => 2);
- $hash{a} などとして、各値を得る
- keys, values, exists, delete
制御構文
if { ~ }
if { ~ } else { ~ }
if { ~ } elsif { ~ }
while ( 条件 ) { ~ }
for ( my i = 0; i < 5 ; $i++ ) { ~ }
foreach my $field (@fields) { ~ }
- 配列の各要素に対して何かを行う
- foreach は for のエイリアスらしい。
比較演算子
文字列比較
- $s eq $t
- $s ne $t
- $s lt $t
- $s gt $t
- $s le $t
- $s ge $t
サブルーチン
関数のようなもの。他の言語との違いとして、引数を関数宣言に書かない。
そのかわり、 @_ を使って引数にアクセスする。
sub subtract {
my ($num1, $num2) = @_;
my $result = $num1 - $num2;
return $result;
}