2013/07/13

perl 勉強メモ

参考

  1. http://d.hatena.ne.jp/perlcodesample/20091226/1264257759
  2. ミニマル perl

スクリプトを書く時

  • プラグマ
    このサイトが詳しい
    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パターンある。
  1. 数値 : 0 と同等な値
  2. 文字列 :
    • null文字列
    • 0 を保持する文字列 ( '0' みたいな)
  3. 変数 : 値を持たない変数
    • まだ設定されていない変数とか。定義されているかは、 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;
}

0 件のコメント:

コメントを投稿