2009-01-01から1ヶ月間の記事一覧
今回は、高速に移動する方法について紹介します。 今回も、入力モードにはならないまま操作の練習をしますよ。 set number $ vim bingo.plでbingo.plを開いたら、 set numberとタイプしてみましょう。これで、行番号を表示してくれます。 行末へ移動 まず、…
第46回 forとwhileの違い その1 - bingo_nakanishiの他言語出身者のためのPerl入門 で、 あるときの例外を除いて、whileはforのように$_に値をいれません。 と述べました。その例外を紹介しましょう。それは、行入力演算子といっしょに使ったときです。 whil…
それでは、話をPerlに戻しまして、ファイルを読み込む話をしたいと思います。「forとwhileの違い」の続きを書く為の伏線です。 ファイルを読み込む為には、以下のように書きます。 open my $file, '<', 'hoge.txt'; はじめてその変数を使うときは、 my を付…
今回もvimに関するお話です。vim入門と題していますが、主にviに関する内容になっていくと思います。題名は将来的にvimの機能もじゃんじゃん使えたらいいなぁという思いを込めて「vim入門」としてあります。 前回のファイルを開いてみよう。 前回、 $ vim bi…
今回は、手法を変えてというか、話題を変えてvimのお話です。 viというエディタがありますが、これを改良した(improved)のが、vimです。このbingo_nakanishiの他言語出身者のためのPerl入門で使われているソースはvimで書いています。 vimが使えるとプログ…
今回は、forとwhileの違いについて。 forで配列をひとつずつ処理する方法は、なんども見てきましたが、whileの例はさほどだしていません。では、次のように書いてみるとどうでしょうか? use strict; my @c = ('a', 'b', 'xxx', 'yyy', 'zzz'); # for と間違…
ファイルをopenするときに関しての話を続けたいと思います。 前回のようなソース pen my $f, '<', 'hoge.txt' or die 'ファイルが開けないっす'; では、 ファイルに権限がなくて open できなくても、 ファイルそのものがなくて open できなかった場合でも、 …
例外処理。 ああ、プログラミングの70%は例外を処理するために書いているのではないか、 そんな気にもなったりするときがあるビンゴ中西です。 例外処理。例外処理とはそもそもなんなんでしょうね〜。 やってますか? 例外処理? 実装してますか? 例外処理…
evalを使えばPerlでも例外処理ができます。 はい 拍手〜〜〜 パチパチパチ ということでevalを使った例外処理の例をみていきましょう。 次のソースをみてみてください。 Perlでは0での割り算はできません。 0で割り算すると、エラーとなりその行以降の処理は…
今回は、 eval というものを説明します。 これのひとつの機能としては、「文字列をPerlの文として評価する」ということがあげられます。次の例をみてほしい。 ソース 単なる文字列を表示 use strict; my $c = q{print 'Hello', "\n";}; print $c, "\n"; 結果…
○ 配列からユニークなものだけ取り出す 配列からユニークなものを取得したいときは、ハッシュを使えばよい。 (いろんなページでソースが載っていますね) ソース1 use strict; use Data::Dumper; my @c = qw(aa bb cc dd aa cc ee ff gg ff); my %d; $d{$_}…
print について 今まで、なにげなしに、printを使ってきたが、 printの挙動について、ちょっと詳しくみてみよう。 配列をそのまま与える つぎのように、配列をそのまま与えてみる ソース use strict; my @c = ('aaa', 'bbb', 'ccc'); print @c, "\n"; 結果 a…
でも、 ifで例外処理をするというのも、 なんだかなぁ〜という人のために、Java的な例外処理を可能にするモジュールがあります。 それが、Error.pm CPANから落としてくる必要はありますが、便利なモジュールだと思います。 ビンゴ中西のほげほげKansai.pm第1…
evalで囲ってしまって、dieさせない例を見てきました〜。 さてさて、次のようなことを考えてみましょう。 ファイルを無事にopenできた場合は、ファイルを読み込んで正常な処理をする。 もし、ファイルがopenできなかった場合はその旨をデータベースに残して…
warnを使えば、警告だけでて、プログラムが終了しないのをみてきましたが、誰かが作った関数の中で、 die されていたらおしまいです。 これは、まいりますねー。 use strict; # だれかが作った関数ということにする sub hoge { print '僕が作ったよ この関数…
die を書けば、プログラムはそこで終了してしまうわけですが、 warn にすると、プログラムは終了しません。これをつかって、 ファイルが open できなくても、警告メッセージを出すだけにとどめ、処理を続けることができます。 まず、dieを使った例を見てみて…
さて、どこから説明したらいいものやら...... という感じなのですが、前回のソースの説明をしたいと思います。前回のソースはもうひとつ窓を開けてもらって(別のブラウザとかで見てもらって)ここでは、部分的に説明していきたいと思います。 まずは、 new …
CSVから配列に落とし込む use strict; my $c = 'aaa,bbb,ccc,ddd'; my @d = split ',', $c, -1; print $_, "\n" for @d; 結果 aaa bbb ccc ddd CSVをTSVに変換 置換バージョン use strict; my $c = 'aaa,bbb,ccc,ddd'; $c =~ s/,/\t/g; print $c, "\n"; 結果…
Perlでファイルをopenするときは、以下のような感じで書きます。 ファイルを読み込む例 use strict; open my $f, '<', 'hoge.txt'; while(<$f>){ print $_; } という変わった記号(行入力演算子と呼ばれる演算子)と、whileのコンビで1行ずつ読み込みができ…
今回からは、Perlを使って、 細かいことや、こんなことが(簡単に)できるよーといったことをツラツラと書いていこうと思います。 (オブジェクト指向に関しては残念ながら前回で終了にします) ピラミッド よく大学のプログラムの授業で、 * ** *** ****と…
さて、オブジェクト指向のプログラムを書いてみようといったので書いてみました〜。といってもいきなりソースを載せるのもなんなので、まずどんなプログラムを書こうとしたか。 そこからお話させていただきます。今朝、電車に乗ると必死で、PSPをされている…
さて、オブジェクト指向を語りだすと長くなるので、(怒れてしまう可能性もあるが)ずばっとオブジェクト指向とはどんなものかというの説明すると、 「変数が関数(メソッド)を呼び出せればオブジェクト指向だ!!」 これにつきる(あくまで今の時点の私の…
Perlには、クラスは存在しない。 では、オブジェクト指向にクラスが必要だ!という立場をとるなら、Perlでオブジェクト指向はできないことになる。 だが、そうすると、JavaScriptにもやはりクラスはないので、やはりJavaScriptでもオブジェクト指向をするの…
さあ、 別パッケージを呼び出す方法が、たくさん出てきたので、混乱してきたところではないだろうか? いままでのところをまとめよう。 別パッケージの関数を呼び出す方法 パッケージ名::関数名 blessされた変数->関数名 'パッケージ名'->関数名 パッケージ…
さて、ただblessするだけの関数を作ったが、 これを各々のパッケージに持たせることで、 各パッケージに、blessされた変数を返してもらうことにする。これにより、 パッケージ名::blessされた変数を返す関数 という書式で、そのパッケージの関数を呼び出せる…
では、Perlでオブジェクト指向をするのに必要な bless の知識に話を戻していこう。 まず、 第24回 別のパッケージの関数を呼び出すもう1つの方法 bless - bingo_nakanishiの他言語出身者のためのPerl入門 で、扱ったblessの内容をまとめておく。 blessとは …
前回は、blessを用いた別パッケージにある関数を呼び出す方法をみた。 パッケージ名::関数名 と blessされた変数->関数名 の違いを探る旅にでよう。 だが、ちょっとまった!!!! 実は、もうひとつ別パッケージを呼び出す方法があるのだ!!!!!!! それ…
前回、パッケージによって名前空間を作り出し、 名前空間の名前::関数名 という書式で関数を呼び出せることを見ました。 実は、この書式ではなくても、他のパッケージの関数を呼び出す方法があります。 それが bless です。 bless 早速、例を見ていきたいと…
package Perlで「名前空間」を作りたければ、 package(パッケージ)を使います。 packageは、Perlで「オブジェクト指向」を行うときの前提知識のひとつなのでしっかり覚えておきましょう。「名前空間」というのは、苗字みたいなものですね。 名前空間 use s…
前回、 シングルクォートで囲った中身に、シングルクォートを書くとエラーになるといった話題を扱ってきたので、今回は、表題の通りの話題でいきたいと思います。 bingo.pl というファイル名で書いたperlを実行するなら、次のようにすれば実行できるであろう…