Perl
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 の要素は配列へのリファレンス)となっていて…
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=([^&]+)}) {には …
Perl による Gaim プラグインの作りかたは Perl Scripting HOWTO を参照。この HOWTO は UNIX Like なユーザーランドの上で作業をすることを想定しているので、 Windows を使う場合は多少読み替えが要る。 Gaim をインストールする前に Windows Gaim のペー…
pi.org みたいに指定して使う。次の例では、.txt なファイルの文字列 foo を bar に全て置換したうえで、元々のファイル(文字列 foo が含まれるファイル)を .txt.org にリネームしてとっておく。 $ perl -pi.org -e 's/foo/bar/g' *.txtは、次と同義。 $ f…
というか、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 $かもめカッコが全角だと、何故か最短一致にのみマッチしない。
未定義値 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(…
$1, $2, ... のスコープは現在のブロック内に限定されるようだ。 if (1) { "foobar" =~ /(foo)/; # $1 eq 'foo' } # $1 is undef
perldoc にしろ WWW にしろ、使用例が異様に少ないのは「Perl で OOP なんかするもんじゃねぇよ」という Google 先生からのお告げなんでしょうか(笑)
コメント文の中の "@hoge" にまで色をつけてくれるのはどうにかならないものか。e-mail address が気になって仕方がないんですが。MP3 ファイルの ID3 タグをパス名から自動生成するプログラムを書いてたんですが、MP3::Info モジュールはとっとと ID3v2 に…
eval() の中で正規表現を使うときには、行末を表す $ に注意。eval("/hoge$/") とすると "$/" が変数展開の対象になってしまう。 ちなみに "$/" は「入力レコードの区切り文字」だそうだ(これを空文字列にして $foo = <> とすると、$foo にファイル全体の内…
無名配列へのリファレンスを値として持つ無名ハッシュがあって(そのリファレンスをどこかに置いておいて)、その無名配列に値を push したいときー(実行例)。 $a = {hoge => []}; push(@{$a->{hoge}}, "piyo"); print $a->{hoge}->[0], "\n"; push のとこ…
あたりまえか……。プロファイラが意味をなさなくなるのは困る。
$now = time; utime $now, $now, @ARGV; で touch(1) みたいにタイムスタンプが更新できる。
flock() は nfs で使えないという話は聞くけれど、truncate() が失敗するという環境を聞いたことがない。普通の環境で、あるんですかね?