2009-02-01から1ヶ月間の記事一覧
Perlには、摩訶不思議な機構 tieが存在する。今、 何か変数に代入されると同時に、その代入された内容がファイルに書き込まれることで、 その変数の変化の様子をログに落とし込むことを考える。 つまり、 $hoge = 3;とあれば、摩訶不思議な機構により、ファ…
第64回 Error.pm でちょっとハマったので - bingo_nakanishiの他言語出身者のためのPerl入門 ここで、dieされたものは、Error::Simpleにblessされたハッシュであることを述べた。 print $e ハッシュであるにもかかわらず、次のように書ける。 use strict; us…
Java 同じものをthrowした場合 public class Hoge { public static void main(String[] args) { try { giveUp(); System.out.println("main() : 例外起こらないでー"); } catch (Exception e) { System.out.println("main() : 例外処理った"); e.printStackT…
それでは、try{ } catch { } の構造を使うと、 どのようにプログラムが流れていくのか見てみよう。 public class Hoge { public static void main(String[] args) { try { badMethod(); System.out.println("例外起こらないでー"); } catch (Exception e) { …
Javaの例外処理はかなりきっちりめにできており、 例外が起こった場合の処理を書いておかないとコンパイラさえ通らない。なお、大きくわけて例外は、処理しなければならない例外と、処理しなくてもいい例外の2つに別けることができる。 処理しなければなら…
ログ出力のためのモジュール 残念な事にうまく説明する事ができないのだが、 log4perlというログ出力にとても便利なものがある。 設定方法などは、ここ↓に、簡単にであるが書いてある。 ビンゴ中西のほげほげlog4perl 今回は、簡単な説明図を載せることにす…
突然だが、(といっても最近の話題は結構当然性が強いが) Perlの配列の話をしよう。 Perlの配列は、配列といっているが実はListであるらしい。 だから、こんな事ができる。 use strict; use Data::Dumper; my @c = 1..3; print Dumper \@c; $c[10] = 4; pri…
いま、 ############### 中西 ############### ############### 木村 ############### ############### 田中 ############### ############### 山本 ###############と出力するソースを考えるとする。 へたくそに書く なにも考えずにとてもへたくそに書くと…
正常系と異常系という言葉がある。 第66回 Perlでじゃんけんゲーム - bingo_nakanishiの他言語出身者のためのPerl入門 この前回のじゃんけんゲームを例に挙げて説明すると、 入力に関して言えば、 「グー、チョキ、パー」のいずれかが、入力された場合が正常…
Perlでじゃんけんゲームをつくりました。 勝敗を決めるアルゴリズムが違う2パターン作りました。 じゃんけんプログラム その1 使い方 プログラムの引数に、グー, チョキ, パーのいずれかの文字を与えて起動 勝負の判定方法 勝負の全パターンを書いて場合わけ…
予期しないこと それがError 今、Errorというものを考える。 今、ここでアルファベットでErrorと表したものは、 「なにか予期しないこと」 と言った意味合いで使うことにする。 このErrorにはどんな種類のものがあるか、考えてみることにしよう。 システムエ…
第45回 Java的な例外処理 - bingo_nakanishiの他言語出身者のためのPerl入門 で、Error.pmを紹介しました。 Error.pmを使ったソース で、今回、 次のようなコードを書いてみました。 use Error qw(:try); try { die 'OH'; }otherwise{ my $e = shift; print …
次のソースを実行してほしい。 use strict; print (1+1)*5; 結果は、あなたの予想に反して 2となるであろう。なぜだろう? 2*5で10となってほしいところである。 これは、( ) が関数呼び出しの( ) と認識されてしまっているためである。 print('Hello World'…
ちょっと今覚えたので、メモ書きとして。開いたあとに文字コードを変えて読むには、 :e ++enc=文字コードである。 :e ++enc=EUC_JPなどが例である。 しかし、このファイル文字コードわかんねーんだよなぁ。 なにかなぁ ってときはブラウザで開けるのが一番賢…
例外処理に関するベストプラクティスってないのだろうか? 今回は例外処理とはちょっと違うかもしれないが、 入力された値をチェックする必要があったとして、 CHECK:{ last CHECK if なんかのチェック; last CHECK if またチェック; last CHECK if またまた…
チームで開発している場合に、ソースコードを再利用するのはよいことであろう。 だが今回ご紹介するのはの、起こってはならない最悪な例のひとつと言える。次のような関数があったとしよう。 sub say { my $c = shift; print "$c" . "\n"; } これは、 say('h…
何か自分で関数を作っているときなどで、 やけにその関数にもらう引数の数が多くなってしまうときはないだろうか? そんなときは、なにをどの順でもらうかなど意味のないところで足踏みしてしまったり、 呼び出す方も、ええと第1引数が、あれで第2引数があれ…
では、クロージャをどのように作るのか説明してみる。 基礎になっている知識から説明していき、自然にクロージャが作れるようにするのを狙う。 最後に、クロージャで定数を作ってみる。 関数に関数を返してもらう 次のソースをみてもらおう。 use strict; su…
前回、クロージャの話を書いたが、あまりていねいに説明はしなかった、 なぜかと言うと、そんなに実践で使われていないから(と私は感じているから)。 でも、詳しく知りたい方がおられるようなので、ていねいに解説してみよう。 まず、クロージャの前に、い…
あまりPerlでクロージャを使っている例をみたことがなくて(僕の勉強不足もあるだろうけど)、 友人に聞いてみたところ、 コールバックかな。 と言われたので、やってみよう。 コールバック そもそもコールバックとはなにかというと、 なにかの関数に関数を…
関数に値を保持させる 今、関数に何か数字を与えると、 その関数を呼ぶたびに与えた数字を ++ してほしいとする。 イメージ的には、 print f(5), "\n"; # 5 print f() , "\n"; # 6 print f() , "\n"; # 7こんな感じである。 純粋に、 use strict; sub f { my…
Perlのガベージコレクションの話をしたいと思います。 相方から、こんな質問が入りました。 相方の発言 sub h{ my @c = 1..10; return \@c; # ここは大丈夫? } my $d = h(); print $_, "\n" for @$d; ってできないよね? C言語的な意味で。 私の発言 できる…
blessは2引数で - 北海道苫小牧市出身の初老PGが書くブログ このようなご指摘をいただいていた。 正直なところ、 *new = \&Human::new;の部分のアスタリスクは「型ブログ」と呼ばれるものであろうということぐらいの認識しかなく理解していなかった、そんな…
他の言語では、 配列からひとつひとつ取り出してループするにはforeachを使うようだが、 Perlにおいてforとforeachはまったく同じである。嘘だと思うなら、次のソースを試してみるとよい。for use strict; for(my $i=0; $i<5; $i++){ print $i, "\n"; } 結果…