言語・開発環境

正規表現

一般

  • 最新PerlフレームワークArk徹底解剖
  • Perlがダメな理由 2009.4.11
    • とりあえず動くものを作りたいならPHPの方が生産性が高い。英語やコードは読めないけど、日本語なら読める人向けの文章ならいっぱい出てくる。
    • Perlは口先だけでは叩かれる文化らしいので、自分の体験を書いておく:XMPPを使って何らかの文字列を送信しようとPerlとPHPで試みた。Perlでは4時間くらい費やしたができなかった。一方、PHPでは1時間もかからずに、送信できた。アホな俺にはどちらが相応しい言語なのかよく分かる。

入門記事

Tips

  • $@ 例外を判定するときのlocal指定
  • perl - use CGI; use Encode; # 非英語Webプログラミング3原則 2009.6.23
    • PerlでWebプログラミングする場合の三原則
        1. QueryはCGIモジュールで処理する
        2. 文字コードはEncodeモジュールで処理する
        3. 文字コードを固定できない場合は、QueryまたはPATH-INFOに文字コード情報を含める
              1. 決め打ちできる場合は、UTF-8にしておく
  • 「モダンPerl入門」感想 2009.2.11
    • 本書は、まず7ページ目からいきなり、Perl5のオブジェクトシステムを刷新して昨年話題になったMooseを紹介し、それを用いて説明を行うことで、Perlにおけるよいスタイル、イディオム、デザインパタンまで一挙に説明してしまいます。特に、デザインパタンについては、オブジェクトが複雑にやり取りを行う現実のシステムを、どう交通整理すれば開発効率、保守性を高められるかという問題ですので、Mooseを用いることにより、ややもすると非本質的になってしまう言語仕様のいき届かなさのフォローを排して説明することに成功しています。
  • Perl6 は Parrot という環境で実行される。Parrot は Java や .NET の VMのようなもの

基本的な文法、関数など

  • 数値計算を整数でやりたいときは use integer;
  • package:=名前空間 を指定しない場合mainパッケージとみなす
  • local修飾子はグローバル変数もしくは複合型(配列やハッシュ)にしかつけられない。
  • レキシカル変数
    • myキーワードで修飾する。
    • local修飾子はつけられない
  • グローバル変数
    • 必ずパッケージ(=名前空間)にヒモづける。
    • ourキーワードで修飾する。
    • 定義側
      package MyApp;
      use strict;
      our $VARIABLE=1;
    • 参照側
      package main;
      $MyApp::VARIABLE;
  • Module::installのrequires()
    requires('Hoge'); Hogeというモジュールが必要。第二引数でヴァージョンを指定する
  • perl 変数展開 qq qw
    • qw()は文字列のスペースによるsplit
    • qq()は変数をダブルクオートによって囲むのと同じ
  • sprintf
     my $w =sprintf( '%02d', $i );
  • match/replace関数のオプション
    i -> case insensitive 大文字小文字を無視する
    g -> 毎回評価する
    なぜかよく忘れるので…

PerlでAssertを使うには

  • 標準機能でやりたい場合
    use Test::Harness::Assert;
    assert( 条件 )

ファイルのオープン/クローズ

open(IN, $filename );
while (<IN>) {
  print $_ ;
}
close(IN);

ディレクトリから列挙

  • 普通にやる
    opendir(DIR, ".");
    while ($file = readdir(DIR)) { 
     if ($file =~ /<適当なパターン>/ ) {
        #適当な作業
     }
    }
    closedir(DIR);
  • 再帰的にたどる場合
    sub prc_all_dir {
        my $dir = shift;
        #print 'open' . '['. $dir ."]\n";
        opendir(DIR, $dir ) or die "can't open directory [$dir] error\n" ;
    
        my @entries = readdir( DIR ); 
        closedir(DIR);
    
        for ( @entries ) {
            # '.' と '..' はパス
            next if $_ eq '.';
            next if $_ eq '..';
    
            my $entry = $dir . '/' .$_;
    
            #ディレクトリだったら再帰する
            if ( -d $entry ) {
                #printf "Dir = %s\n", $entry;
                #各ディレクトリ内の処理
                prc_all_dir( $entry ); #再帰
            } 
            #ファイルのとき
            else {
            
            }
            
        }
    }

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-04-16 (火) 23:58:36 (2928d)