2012-08-04

いまさら perl v5.5

もっぱら perl はローカルで使ってるので、バージョンやモジュールで困ることはないのですが、
久しぶりにプロバイダの提供スペースで CGI 使って遊ぼうと思い環境調査してみました。

#!/usr/local/bin/perl

use strict;
use warnings;

print "Content-type: text/html;\n\n";

print "perl : $]<br>\n";
print "$_ : $ENV{$_}<br>\n" for sort keys %ENV;

なぜか500エラー。
shebang は合ってるしなんで?
試しに use を外してみたら動きました。

古いといっても v5.8 だろうと思っていたところ
驚愕の v5.5.3 !!!!!

ちょっと手元の corelist さんに聞いてみましょう。
corelist は v5.8.9 以降なら標準で入ってるみたいです。

C:\>corelist Module::CoreList
Module::CoreList was first released with perl v5.8.9

C:\>corelist strict
strict was first released with perl 5

C:\>corelist warnings
warnings was first released with perl v5.6.0

C:\>corelist utf8
utf8 was first released with perl v5.6.0

C:\>corelist Encode
Encode was first released with perl v5.7.3

・・・。
strict しか使えないじゃないですか!!
いまさら EUC でコーディングとかしたくないなー。
正直、サーバーのエラーログをエラーまみれにしそうな予感しかしない。


perl v5.5.3 で使えないもの

・warnings.pm
・utf8.pm
・Encode.pm

# 3引数 open は perl v5.6 以降
open( INFO, ">", $datafile ) or die $!;

# 間接ファイルハンドルも perl v5.6 以降
open( my $in, "> $infile" )  or die $!;

# our も perl v5.6 以降
our $var;
# 代わりに use vars
use vars qw($var);
# perl v5.14 から一部の関数がリファレンスを受け取れるようになったので
# この書き方で楽してるとデリファレンスでエラーが出てハマルかも。

http://perldoc.perl.org/perl5140delta.html#Syntactical-Enhancements

|----------------------------+---------------------------|
| Traditional syntax         | Terse syntax              |
|----------------------------+---------------------------|
| push    @$arrayref, @stuff | push    $arrayref, @stuff |
| unshift @$arrayref, @stuff | unshift $arrayref, @stuff |
| pop     @$arrayref         | pop     $arrayref         |
| shift   @$arrayref         | shift   $arrayref         |
| splice  @$arrayref, 0, 2   | splice  $arrayref, 0, 2   |
| keys    %$hashref          | keys    $hashref          |
| keys    @$arrayref         | keys    $arrayref         |
| values  %$hashref          | values  $hashref          |
| values  @$arrayref         | values  $arrayref         |
| ($k,$v) = each %$hashref   | ($k,$v) = each $hashref   |
| ($k,$v) = each @$arrayref  | ($k,$v) = each $arrayref  |
|----------------------------+---------------------------|

まだまだハマリどころがありそう。
文字コード周りは Jcode.pm を使うのかな。


500 Internal Server Error の対応

500エラーが出たときにサーバーのエラーログが見れない場合どうするか。
CGI::Carp を使う。

C:\>corelist CGI::Carp
CGI::Carp was first released with perl 5.004
perl v5.4 からコアモジュールで安心。
# エラーをブラウザに表示
use CGI::Carp qw(fatalsToBrowser);

# エラーをログファイルに書き出す
BEGIN {
  use CGI::Carp qw(carpout);
  # perl v5.5.3 なので 3引数open は使えない
  open(LOG, ">> ./err.log") or die $!;
  carpout(LOG);
}

fatalsToBrowser はメジャーだけど
carpout は今回調べるまで知らなかった。

他にも KCatch.pm というモジュールもあります。


perl v5.5.3 環境を作る?

perl のバージョンを切り替える perlbrew というものがありますが、Windows だと使えないっぽい。

Strawberry Perl も ActivePerl も v5.5.3 のバイナリなんて置いてないしなー。
などとググってるうちに発見した Vector の Perl for Win32(perl5) は v5.5.7 らしい。
置いてあるディレクトリが win95 !!
これを入れる勇気はちょっとないなと。

いっそのこと、サーバー借りちゃった方が楽かもね。


参考リンク

History / Changes - perldoc.perl.org
コアドキュメント - perldoc.jp
Perl Hackers Hub:第14回 最新Perl使いこなし術―リファレンスの引き方,5.10以降の新機能(2)
Perl Hackers Hub:第14回 最新Perl使いこなし術―リファレンスの引き方,5.10以降の新機能(3)
perl5.10から5.16の新機能まとめ

CGI::Carp - search.cpan.org
[Perl] KCatch.pm/CGI エラーメッセージをブラウザに表示
Jcode - search.cpan.org

perlbrew - search.cpan.org

Windows で複数の perl を使い分けよう! - JPerl Advent Calendar 2010 Win32 Track
Strawberry Perl for Windows
ActivePerl

2012-06-14

Firefoxの検索クエリ変更

Firefox13 がリリースされたので入れてみました。
Firefox7 以降入れてなかったんですが、起動も速いし動作も速い。
いつの間にやらディスクキャッシュからメモリキャッシュになったんですね。

Sleipnir のキャッシュをRAMディスクにして使用してますが
それよりも若干早い感じがします。

Firefox はカスタマイズするのにアドオン探さなきゃいけないのが面倒なので
いまいち移行しきれないのですが、1つ障害が解決したのでメモ。

長年、検索窓のクエリ変更がうまくいかなかった謎が解決。
searchplugin を変更後に Profile 内の search.json を削除。
これで変更が反映されます。

次は google 検索を変更。
インスタント検索が始まってから、検索クエリに num=50 を足しても
表示件数が変更できなかったのですが、以下の手順で変更できます。


Firefoxが起動してない状態で
・Mozilla Firefox/searchplugins/google-jp.xml を変更
<Url type="text/html" method="GET" template="http://www.google.co.jp/search">
  <Param name="q" value="{searchTerms}"/>
  <Param name="complete" value="0"/> <!--インスタント検索オフ-->
  <Param name="as_qdr" value="all"/> <!--期間-->
  <Param name="num" value="50"/> <!--表示件数-->
  <Param name="gbv" value="1"/>
</Url>
・Profile内の search.json を削除


Sleipnir だと
http://www.google.co.jp/search?q={all}&num=50
だけで50件表示できるんですけど何でですかね?

2012-05-04

perl - Markdown変換スクリプト

ネタを整理するのに Markdown で書くと便利なのかなと調べていると
CPAN に Text::Markdown というモジュールがあったので
思いつきで変換スクリプト書いてみました。

スクリプトにファイル名を渡すか、__END__ 以下に Markdown を書いて使います。
出力を保存する場合はリダイレクトして下さい。

# markdown2html.pl

use strict;
use warnings;

use Text::Markdown 'markdown';

my $file = shift;
my $text = "";

if ($file) {
 open(my $fh, '<', $file) or die($!);
  local $/;
  $text = <$fh>;
 close $fh;
} else {
 local $/;
 $text = <DATA>;
}
my $html = markdown($text);

#print $text;
print $html;


__END__
#markdown sample
##h2
###h3

paragraph  
hoge
moge

[リンク文字列](http://example.com/)
[リンク文字列](http://example.com/ "タイトル")
<http://example.com>

![画像の説明](/path/to/image.jpg "タイトル")

- listA
- listB
- listC

---

1. listA
2. listB
3. listC

>blockquote
blockquote

    ...code...
`...code...`
ドラッグアンドドロップ用にバッチファイルも付けておきますね。
スクリプトと保存先のパスは適宜修正して下さい。
::markdown2html.bat

set markdown2html="C:\markdown2html.pl"
set output="C:\%~n1%.htm"

perl %markdown2html% %1 > %output%

pause

Markdown用のエディタとかもあるので、わざわざこんなの使うことないですよね。
個人的には秀丸から perl に渡して処理とかよくやるので、使うかなと思いまして。

参考リンク

Tomas Doran / Text-Markdown - search.cpan.org
Daring Fireball: Markdown
blog::2310 » Markdown文法の全訳
Markdown - Wikipedia

2012-05-02

rtmpdump - v2.5 Unofficial binaries

RTMPDump v2.5 GIT-2012-03-31 (Handshake 10 support by Xeebo)
http://stream-recorder.com/forum/showpost.php?p=44648&postcount=96

--swfVfy | -W オプションは Type2 未対応らしくこんなエラーが出ます。
ERROR: HandleCtrl: SWFVerification Type 2 request not supported,
       attempting to use SWFVerification Type 1! Patches welcome...

Perl - リンク集

Perl

The Perl Programming Language
本家
The Comprehensive Perl Archive Network
CPAN
The CPAN Search Site - search.cpan.org
ActivePerl
Windows(32|64bit), MacOS, Linux(32|64bit)
Strawberry Perl
Windows(32|64bit)

Document

Perl programming documentation
perldoc
perldoc.jp
perldoc邦訳
Argrath's lair
pod日本語訳仮置き場
ちょいマシなCPAN機械翻訳

Framework | Library

Perlbrew
ユーザー環境下で複数バージョンの perl を管理
App-perlbrew - search.cpan.org
Catalyst
The Elegant MVC Web Application Framework
Catalyst - search.cpan.org
Moose
A postmodern object system for Perl 5
Moose - search.cpan.org
Moose 邦訳ドキュメント - perldoc.jp
PSGI/Plack
Perl Superglue for Web frameworks and Web Servers (PSGI toolkit)
Plack - search.cpan.org
Mojolicious
Real-time web framework
Mojolicious - search.cpan.org
Mojolicious リファレンス - サンプルコードによるPerl入門
ImageMagick
画像処理ライブラリ
PerlMagick, Perl API for ImageMagick
Image::Magick - search.cpan.org
ChartDirector for Perl
チャート描画ライブラリ
EPIC
Eclipse用 Perl IDE

News

Perl.com
O'Reillyのperlニュースサイト

Community

Perl Mongers
YAPC - Yet Another Perl Conference
Perl-users.jp - 日本のPerlユーザのためのハブサイト
PerlMonks

Learn

--- 基礎 ---
サンプルコードによるPerl入門
Perl基礎文法最速マスター - サンプルコードによるPerl入門
Perlオブジェクト基礎文法最速マスター - 燈明日記
Perl5編 - Programing Place
--- 基礎以上 ---
Perl-users.jp
JPerl Advent Calendar
JPerl Advent Calendar 2008
JPerl Advent Calendar 2009
JPerl Advent Calendar 2010
JPerl Advent Calendar 2011
JPerl Advent Calendar 2012
連載:モダンPerlの世界へようこそ|gihyo.jp
連載:Perl Hackers Hub|gihyo.jp
特集:Happy Testing Perl|gihyo.jp
--- 日本語処理 ---
Encode.pm - search.cpan.org
404 Blog Not Found:perl - Encode 入門
404 Blog Not Found:perl - Encode 中級
404 Blog Not Found:perl - use encoding; #は黒歴史
404 Blog Not Found:perl - EncodeでXSSを防ぐ
404 Blog Not Found:perl - use CGI; use Encode; # 非英語Webプログラミング3原則
404 Blog Not Found:perl - 最速のUTF-8処理法
Encodeでラクラク日本語処理 - JPerl Advent Calendar 2009
続・Encodeでラクラク日本語処理 - JPerl Advent Calendar 2010 Casual Track
モダンPerlの世界へようこそ:第32回 Encode:日本語だけ扱えればよいのではなく|gihyo.jp
--- その他 ---
Perl道場
PerlエンジニアがつくるPerlエンジニアのための検定試験

Books

--- O'Reilly's CD bookshelf ---
[eng]Perl in a Nutshell 第2版 - 2002
[eng]Learning Perl 第3版 - 2001
[eng]Learning Perl Objects, References and Modules - 2003
[eng]Programming Perl 第3版 - 2000
[eng]Advanced Perl Programming - 1997
[eng]Perl Cookbook - 1998
日本語インデックス
[eng]Perl Cookbook 第2版 - 2003
[eng]Mastering Regular Expressions 第2版 - 2002
[eng]Perl & LWP - 2002
[eng]CGI Programming with Perl 第2版 - 2000
[eng]Perl & XML - 2002
[eng]Mastering Perl/Tk - 2002
[eng]Learning Perl on Win32 Systems - 1997
[eng]Perl for System Administration - 2000
--- Google Books ---
Google Books Downloader for Windows and Mac OS X
 
[eng]Learning Perl 第6版 - 2011
初めてのPerl 第3版 - 2003
[eng]Intermediate Perl 第2版 - 2012
続初めてのPerl 改訂版 - 2006
[eng]Mastering Perl - 2007
[eng]Learning Perl Objects, References, and Modules - 2003
[eng]Programming Perl 第4版 - 2012
プログラミングPerl VOLUME 1 第3版 - 2002
プログラミングPerl VOLUME 2 第3版 - 2002
Perlクックブック VOLUME 1 第2版 - 2004
Perlクックブック VOLUME 2 第2版 - 2004
実用Perlプログラミング 第2版 - 2006
ミニマルPerl: Unix/LinuxユーザのためのPerl習得法 - 2008
Perlベストプラクティス - 2006
詳説正規表現 第2版 - 2003
正規表現デスクトップリファレンス - 2004
[eng]Regular Expressions Cookbook - 2009
[eng]Perl Debugger Pocket Reference - 2004
[eng]Perl & Lwp - 2002
[eng]Spidering Hacks: 100 Industrial-Strength Tips & Tools - 2003
CGIプログラミング 第2版 - 2001
入門Perl DBI - 2001
初めてのPerl Win32システム -1998
Perl & XML -2002
[eng]Perl Graphics Programming - 2002
Perl/GNUソフトウェアによるWebグラフィックスプログラミング - 2000
[eng]Web Security Testing Cookbook - 2008
[eng]Perl Hacks: Tips & Tools for Programming, Debugging, and Surviving - 2006
モダンPerl入門: 実務で使う実用的なPerlの"すべて" - 2009
PerlフレームワークCatalyst完全入門 - 2010