Perl

範囲演算子

範囲演算子の使い方ではまった。 my @indices = (0, 1); ### OK (1..2)[@indices]; @{[1..2]}[@indices]; ### NG [1..2]->[@indices];

GC

Perlのガベージコレクタは、参照カウント方式なので、相互参照してるようなオブジェクトは使われなくなっても解放してくれない。運悪く'Out of memory!'なんて表示がでたら、シェルスクリプトでも使って、処理の1ステップごとにPerlを起動して、後で個々のス…

クラスの継承が面倒くさい

Perlだとクラスの継承が面倒くさい。Rubyなら class Child < Parent ... という感じで継承できたけど、Perlだと ### ただし use strict したとき package Child; @Child::ISA = qw(Parent); ... 小さいクラスを増やそうとすると、このあたりが以外に面倒くさ…

リファクタリング進まねえ

実験データを取るプログラムは全部Perlで書いているのですが、そろそろ条件を色々変えて実験をしないとだめなので、オブジェクト指向に基づいて拡張容易になるように改良中。モジュールの殆どをクラス化して、条件付のループの類はIteratorパターンでまとめ…

shiftjisのソースコードとeuc-jpの入力

またeqで比較しちゃってて、30分無駄にした。ソースの文字コードの確認とC-x Enter fは癖にした方がいいな・・・。

インストールされていないモジュールを使う

### Perlは@INCに登録されているディレクトリからモジュールを探す。 ### @INCに登録するディレクトリが1つの場合 use lib 'ディレクトリのパス'; ### 複数の場合、以下のどちらかでOK use lib ('dir1', 'dir2'); use lib qw(lib1 lib2); 相対パスでもOK。こ…

参照外しを応用してハッシュをprintする

# (1) と (2) は同じ事をやっている do { %hash = ( key => val ); # (1) $listref = [%hash]; # $listref は 無名リスト [key, val] へのリファレンス @list = @$listref; # $listref を @ で参照外しする print "@list\n"; #key val # (2) print "@{[%hash…

リファレンスをハッシュを使って説明してみる

#!/usr/local/bin/perl # $ref は %hash へのリファレンス # %copy は %hash の複製 # undef %hash すると... # %hash は消える (つまり $ref の参照先も無くなる) # %copy は 消えない (%hash を参照しているわけではないので) do { $hash{key} = 'val'; pr…

リファレンスあれこれ

http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.html

範囲演算子

@list = (0..4); print "@list\n"; #0 1 2 3 4 @list = @list[-1..5]; #4 0 1 2 3 4 #インデックスに負値を指定するのはOK。 #+方向に越えると、無視される。

表示可能(printable)な文字を判別する

OCTETSTRINGのVALには生の文字列が入っている場合と、MACアドレスが入っている場合があって、中身によって画面への出力の仕方を変える必要があります。で、今はVALを下のサブルーチンのような方法で一バイトずつ確認して、non-printableな文字コードが含まれ…

お役立ちリンク

The Perl5 Manual - 範囲演算子 こんな書き方できるのか・・・。使いこなせれば便利ではありそう。http://www.uopmu.ees.osakafu-u.ac.jp/~yabu/soft/perl.html#32 sort関係の解説が分かりやすい。