perl

confファイルを読み込むモジュールConfig::Simple

同期がやっていることに口を出してしまったため,手も出そうと思って簡単なプログラムを作成した. 引数なんかでパラメータを変更するのもいいけれど,外部APIを利用するときのIDをいちいち引数で渡したら面倒くさいよなァァと思ったので,行儀よくconfファ…

exists関数の大切さ

単語頻度を特徴としたARFFファイルを作成していて,原因不明のバグで止まる. 経験上,想定外のバグのため,バグ取りにかなり時間がかかった.原因は,すでにハッシュに登録されているかの判断を直接if文にぶちこんでいたことが原因. 原因は,word idが0か…

Getopt::Stdの注意点

毎度ながらすんなりいかないgetopt getoptとgetoptsの挙動が違うのがいけない # hoge.pl my %opt; getopt('i:o:d', \%opt); print "-i:$opt{'i'}\n"; print "-o:$opt{'o'}\n"; print "-d:$opt{'d'}\n"; 実行結果 > perl hoge.pl -i hoge -o bar -d -i:hoge -…

crypt関数

htpasswdなどでMD5による暗号化をしなければいけないのだけれど 公開されているCGIを使ってやっていた. perlで簡単に出来る.ワンライナーでじうぶん % perl -e "print crypt('hoge', '19');" crypt関数は引数をふたつ取る.一つ目は暗号化したいパスワード…

foreach(<>)使ウナwhile(<>)使エ

Perlベストプラクティス(p.228-)より. forループの反復リストはリストコンテキストなので,<>がリストコンテキストで呼び出される. すなわち,<>をEOFが検出されるまで入力ストリームをメモリ上に丸飲みするまで,処理が実行されない. open(IN, "< hoge.t…

lc, uc関数

lc expr uc exprlcは小文字に変換,ucは大文字に変換 文字列操作する際には使いそう サブルーチン等で my $input = lc shift;というように引数を受け取っている

Perl6のチカラ

ファイルからテキストを丸呑みする際にはPerl6から提供されるslurp関数を使う use Perl6::Slurp; my $text = slurp $file_handle;これでok

モジュールのインクルード先を追加

いつも忘れるのでメモ コマンドオプションによる方法 perl -I ~/.perl-lib hoge.pl※Iとパスの間にスペースを入れない記法が多いような気がする BEGIN文にて追加 BEGIN{ push(@INC, '/home/hoge/.perl-lib/'); }

use encodingとの挙動のおかしさ

研究室の同期がPerlでハマる use encoding 'shift-jis'; print "文字列を入力してください:"; my $str = <STDIN>; print "文字列の長さ:".length($str)."\n";実行すると,「文字列を入力してください」が表示される前に標準入力の受付状態になってしまい 入力を完</stdin>…

書式指定子に変数の値を用いる

行番号を表示するスクリプトを書いていて,行の桁数を揃えるために printf関数などの書式指定子に変数の値を使いたいというシチュエーションになった 以下のように変数名を{}でくくれば大丈夫 my $line_number = 1; my $digit_number = 3; while(<IN>){ printf("</in>…

マッチ変数の落とし穴

どのPerl本でも注意されていることに見事にハマった while($html =~ m|<li class="post" key="(.+?)\.\.\.\s.+?</span>\s*?</div>\s*?</li>|gs){ $tmp_html =~ m|<h4 class="desc"><a href="(\S+?)" rel=|s; # (1) ここが問題 my $tmp_url = $1; $tmp_html = $'; $tmp_html =~ m|">(.+?)</a>|s; # (2) ここも問題 my $tmp_title = $1; $tmp_html = $'; ... }…</li>

MLDBMの使い方

長い時間悩まされたMLDBMのエラーの理由は,どうやらデータベースに格納しようとしているファイルサイズがでかいんだよコノ野郎! というものだと判明(判断) もしかしたら,SDBMの部分をGDBMに変えたらうまくいのかなぁ. とやってみたらうまくいった.め…

Jcodeを用いた日本語文字コード変換

いっつも忘れるし,調べるのに時間がかかるからメモしておく 値はリファレンスで渡すのに注意 use Jcode; Jcode::convert(\$str, 'utf8'); # 他にはjis, sjis, euc 参考URL http://www.netfort.gr.jp/~kiyoka/jcode_intro/

正規表現の復習

使いこなせていない正規表現の復習Perl編 while($hoge =~ m|<regex>|mgs){ <procedure> } mオプション: 改行文字を無視するため,行をまたがる文字列のパターンマッチが可能になる gオプション: 繰り返し検索を行う(まだ理解不足) sオプション: .で改行文字もマッチするよう</procedure></regex>…

GDBMの限界−MLDBMちゃんこんにちは

ソーシャルブックマークをぶっこ抜くスクリプトを書いていて,データ構造が複雑になってきたので いつものようにそのままGDBMにぶち込んだつもりがうまくいかない どうやらリファレンスはそのまま保存できないようだ. 旧版の実用Perlプログラミングを読むと…

ディレクトリのブラウジングスクリプト: docviewer(仮称)

ブラウザでローカルのファイルを閲覧するCGI セキュリティ方面のことは素人なので危険かも...ま,ローカルネットワークで使う分には問題なし 概要 あるディレクトリ以下のファイルを表示. 左側にディレクトリやファイルを表示,ファイルが選択されると内…

mapとgrep

偉そうにperl使いを自称していたが,実はmapとgrepを使いこなせていなかった. (全部foreachで書いてた)なんとなく納得できなかったが,今日トイレの中でリャマ本を眺めていたらとっても簡単なことを理解. grep 条件式にマッチした要素を含むリストを生成…