Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

Perl

Jcode が漢字コードの判定に失敗する場合の話

Jcode::getcode は UTF-8 な文字列のエンコード方式判定に失敗することがある。 Jcode::convert を使ったプログラムで、次のようなエラーが出ることがある。 Use of uninitialized value in string eq at /usr/lib/perl5/site_perl/5.8.2/i386-linux-thread-…

無名配列へのリファレンスを作るときの話

配列へのリファレンスを扱おうとして Not an ARRAY reference at ./hoge.pl line 70, <> line 4016.みたいに言われた。 hoge.pl の 70 行目は foreach (sort { $a->[4] <=> $b->[4] } @hogerefar) {(@hogerefar の要素は配列へのリファレンス)となっていて…

Can't find Unicode property definition

Perl のスクリプト実行時に Can't find Unicode property definition "=" at ./hoge.pl line 92, <> line 4016.と言われた。 確かに、このスクリプトの 92 行目にある正規表現: if (m{^http://w+\.google\..+?/\w+?\?.*?\b(?:as_)?(?:ep)?q=([^&]+)}) {には …

Gaim プラグインとなる Perl スクリプトを Windows 上で作る(ときの前準備)

Perl による Gaim プラグインの作りかたは Perl Scripting HOWTO を参照。この HOWTO は UNIX Like なユーザーランドの上で作業をすることを想定しているので、 Windows を使う場合は多少読み替えが要る。 Gaim をインストールする前に Windows Gaim のペー…

-i オプション

pi.org みたいに指定して使う。次の例では、.txt なファイルの文字列 foo を bar に全て置換したうえで、元々のファイル(文字列 foo が含まれるファイル)を .txt.org にリネームしてとっておく。 $ perl -pi.org -e 's/foo/bar/g' *.txtは、次と同義。 $ f…

これが sed でできますか

というか、sed でこれをやるにはどうしたらいいのか。 cat hoge.txt | perl -pe 's/\t+/\n/g'一応、次のようにすることでどうにかなるにはなったけれどあまり納得はいかない。 cat hoge.txt | sed 's/ */\ /g''s///g' って入力してからじゃ入力できないし。

なぜかマッチしない

$ echo '12{34}56' | perl -pe 's/{.+?}//g' 12{34}56 $ echo "12{34}56" | perl -pe 's/{.+}//g' 1256 $ echo '12{34}56' | perl -pe 's/{.+?}//g' 1256 $かもめカッコが全角だと、何故か最短一致にのみマッチしない。

何じゃこりゃ (2)

未定義値 undef と空文字列が等価ってのはどうも。 $ perl -e 'print "OK\n" if undef eq "";' OK

何じゃこりゃ

リストをスカラーコンテキストで評価したときの値について。Perl のバージョンは v5.6.1 。 $ perl -e '@a = (""); print "[", scalar(@a), "]\n"' [1] $ perl -e '@a = (''); print "[", scalar(@a), "]\n"' [0] $ perl -e '@a = (q()); print "[", scalar(…

正規表現を使ったときの $n のスコープ

$1, $2, ... のスコープは現在のブロック内に限定されるようだ。 if (1) { "foobar" =~ /(foo)/; # $1 eq 'foo' } # $1 is undef

Test::Unit

perldoc にしろ WWW にしろ、使用例が異様に少ないのは「Perl で OOP なんかするもんじゃねぇよ」という Google 先生からのお告げなんでしょうか(笑)

Emacs の CPerl-mode

コメント文の中の "@hoge" にまで色をつけてくれるのはどうにかならないものか。e-mail address が気になって仕方がないんですが。MP3 ファイルの ID3 タグをパス名から自動生成するプログラムを書いてたんですが、MP3::Info モジュールはとっとと ID3v2 に…

eval で正規表現

eval() の中で正規表現を使うときには、行末を表す $ に注意。eval("/hoge$/") とすると "$/" が変数展開の対象になってしまう。 ちなみに "$/" は「入力レコードの区切り文字」だそうだ(これを空文字列にして $foo = <> とすると、$foo にファイル全体の内…

複雑なリファレンス

無名配列へのリファレンスを値として持つ無名ハッシュがあって(そのリファレンスをどこかに置いておいて)、その無名配列に値を push したいときー(実行例)。 $a = {hoge => []}; push(@{$a->{hoge}}, "piyo"); print $a->{hoge}->[0], "\n"; push のとこ…

Jcode.pm って重い

あたりまえか……。プロファイラが意味をなさなくなるのは困る。

touch

$now = time; utime $now, $now, @ARGV; で touch(1) みたいにタイムスタンプが更新できる。

truncate()

flock() は nfs で使えないという話は聞くけれど、truncate() が失敗するという環境を聞いたことがない。普通の環境で、あるんですかね?