Yamamoto's Laboratory
 
サブルーチン
 
 
 
 
コンピューター Perl サブルーチン

Perlサブルーチン

サブルーチンについて,説明します.

目次


サブルーチン

  • main関数  perlにはメイン関数がありません.
  • コマンドライン引数  @ARGVにセットされます.例えば,「foo.pl hoge fuga」と実行すると,$ARGV[0]は'hoge',$ARGV[1]は'fuga'となる.
    #!/usr/bin/perl
                             # foo.pl hoge fuga と実行する
    print "$ARGV[0]\n";    # hogeと表示
    print "$ARGV[1]\n";    # fugaと表示
    もし,コマンドライン引数に,ワイルドカードを使ったファイル名を指定すると,$ARGV[0], $ARGV[1], $ARGV[2], …に展開されたファイル名が格納さます.ファイルは,foreach文を使って処理するのがセオリーでしょう.
    foreach $file(@ARGV){
      # ここに処理の内容を書く.
      # $fileにワイルドカードで表されたファイル名が格納される.
    }
  • ユーザー定義関数
    • 関数の呼び出しは,&関数名 とする.
    • 引数があるときは,&関数名(実引数リスト) とする.
    • ユーザー定義関数は,sub 関数名{処理の内容}とする.
    • 引数の値は,配列 @_ に格納される.
    • 戻り値は,関数で最後に評価された式の値となる.
    • Perlの変数はグローバルなので,引数や戻り値を使わなくても,ユーザー定義関数と呼び出し側でデータの受け渡しができる.
    #!/usr/bin/perl
    
    $var=&average(3,6);        # 引数を伴って,ユーザ定義関数の呼び出し
    print "$var\n";             # 4.5が表示される
    
    sub average{
        $sum=$_[0]+$_[1];      # 引数は @_ に
        $ave=$sum/2;            # 戻り値は最後に評価された式の値
    }
    sub hogehoge{
        my($arg1,$arg2,$arg3)=@_;       # 少しスマートな方法
                                           # $arg1〜$arg3はローカル変数
          # ユーザー定義関数の処理を書く
    }
  • 変数のスコープ  @_を除いて,Perlの変数はグローバル変数です.@_ をグローバルにすると,関数の中で関数を呼び出すときに不便が生じます.なぜならば,@_ に実引数の値が格納されるからです.
  • ローカル変数  my あるいは local を使って,ローカル変数にすることができる.myが普通の言語(例えばC言語)のローカル変数に対応する.詳細は,こちら
    • my で宣言すると,新たにメモリーが割り当てられ,そのブロック内{}でのみ参照や変更ができる.普通に言うローカル変数なので,できるだけこちらを使う.
    • local で宣言すると,宣言した関数から呼び出した関数でも参照や変更ができる.
    #!/usr/bin/perl
    
    $var="main_var";             # グローバル変数
    
    &my_sub1;
    &local_sub1;
    
    sub my_sub1{
        my $var="my_var";        # my を使ってローカル変数を宣言
        print "$var\n";          # 'my_var'と表示
        &my_sub2;
    }
    
    sub my_sub2{
        print "$var\n";          # 'main_var'と表示 重要
    }
    
    sub local_sub1{
        local $var="local_var";  # local を使ってローカル変数を宣言
        print "$var\n";           # 'local_var'と表示
        &local_sub2;
    }
    
    sub local_sub2{
        print "$var\n";          # 'local_var'と表示 重要
    }

ページ作成情報

参考資料

  1. my と local の違いは,Perlで作るCGI講座 - my と local どう違う?が詳しい.

更新履歴

2007年頃 ページの新規作成


no counter