sironekotoroの日記

Perl で楽をしたい

Perlトレーニングブック Part05

関数

  • sub hogeでオリジナル関数作るとかそういうやつ。
  • 関数の中から関数呼び出しできたり、関数の中に関数定義したりできるよ〜
  • 関数って言うよりも、サブルーチンって言う方がしっくりくる感

ローカル変数とプライベート変数

  • ローカル変数
    • local $valで宣言
    • 宣言されたサブルーチンと、そこから呼び出したサブルーチン内で有効
  • プライベート変数
    • my $valで宣言
    • 宣言されたサブルーチン内でのみ有効
sub print_val{
    print ("呼び出し先の変数の値は $val です\n");
}

sub local_val{
    local $val = 'local';
    print "関数内の変数値は $val です\n";
    print_val();
}

sub private_val{
    my($val) = 'private';
    print "関数内の変数値は $val です\n";
    print_val();
}

$val = 'global';


print_val;      # -> 呼び出し先の変数の値は global です

local_val;      # -> 関数内の変数値は local です
                #    呼び出し先の変数の値は local です

private_val;    # -> 関数内の変数値は private です
                #    呼び出し先の変数の値は global です

ファイル分割

  • require hogehoge.pl;という形で、他のファイルからサブルーチンを呼び出すことができる。
  • 同名のサブルーチンがあった場合には、早く呼び出された方が有効になる。

    • が、use warnings,use strict付けてればちゃんと警告してくれる。

      Subroutine sum redefined at PerlTraining_155_2.pl line 5.

  • ファイルをまたいで同名のサブルーチンを利用する場合には、パッケージを使う。

  • package hogehoge;と宣言する。
  • C++のスコープ解決演算子、というものと同じ仕組みらしい。

関数呼び出し

  • 値参照  - サブルーチン内で値をいじっても、サブルーチン外の値には影響しない
  • リファレンス参照  - サブルーチン内で値をいじると、サブルーチン外の値にも影響する

再帰呼び出し

  • サンプルプログラム全然わかんない
  • ふつうにビット演算とか出てくるんだけど、想定している読者層がわからねぇ・・・