Archive for the Category » Perl «

金曜日, 2 月 26th, 2010 | Author: djodjo

前はJava屋さんだったので、eclipseを使ってた流れからPerlが多い今も、eclipse使ってます。
EPIC Perl プラグインを入れてるんですが、このプラグインはコード整形をPerl::Tidyでやってます。

PerlでCGIで、サーバはLinuxなので改行コードはおのずとLFなんだけど、コード整形するとCRLFに変わっているという話。

プログラミングをしているうちに、ソースの改行コードがいつの間にかLFからCRLFになってしまう怪現象。
projectの設定はUNIXでLFだし、新規作成のファイルはLFだしと悩んでたら犯人がわかりました。

Perl::Tidyでした。

どうも、ソースを除くと環境からコード整形後の改行コードを変更している。
なるほど、ありました設定。「-ole=unix」これでOK。
このオプション、windosunix, macから選択可能。

http://perltidy.sourceforge.net/perltidy.html


月曜日, 12 月 21st, 2009 | Author: djodjo

Perlですが、リファレンスになってるハッシュのマージする方法。

my $hash1 = {
aaa=> 10,
bbb=> 100,
ccc=>1000,
};
my $hash2 = {
bbb=> 20,
};
my $merge= {
%{ $hash1 },
%{ $hash2 },
eee=>'add',
};
use Data::Dumper;
print Dumper $merge;

とすると、以下の感じでマージされる。ちゃんと後ろにくっつけた、hash2が同じキーbbbを上書きしてる。

$VAR1 = {
'bbb' => 20,
'aaa' => 10,
'ccc' => 1000,
'eee' => 'add'
};

ちなみに、ふつうのハッシュをマージ・結合するには

my %hash1 = (
aaa=> 10,
bbb=> 100,
ccc=> 1000,
);
my %hash2 = (
bbb=> 20,
);
my %merge= (%hash1, %hash2, eee=> 'add');
use Data::Dumper;
print Dumper \%merge;

で同じ結果に。
やっぱり一度、リファレンスから戻さないと結合できないみたい。
結局はリストの結合と同じね。

Category: Perl  | Leave a Comment
木曜日, 9 月 17th, 2009 | Author: djodjo

Perl の CGI.pmはよくお世話になりますが、UTF8を扱おうとすると、utf8フラグがたったり、なかったりと問題があるようで、めんどくさいのでCGI.pmでパラメータ受け取るときにすべてのパラメータを一度に処理してます。

1件ごとでなくて、飛んできたパラメータ全部をdecodeしてみる。

use CGI;

for my $p ($CGI->param) {
    my @v = map {Encode:: decode_utf8 ($_)} $CGI->param($p);
    $CGI->param($p,@v);
}

たつをのChangeLog殿から、dankogai殿の指摘をみて、自分のコードも少々修正してみました。
たつをのChangeLog Perl の utf8 まわりのおまじない

use utf8;
use CGI;
...
my $text = $q->param('text') || "";
utf8::decode($text) unless utf8::is_utf8($text);
...

Encode:: decode_utf8を使いましょうとのご指摘はこちら。
http://blog.livedoor.jp/dankogai/archives/51290188.html

Validationの観点だけではなく、簡潔性の観点からも、Encode::decode_utf8()はおすすめです。すでに UTF-8 flag がついた文字列はそのままコピーするだけなので、条件分岐も不要です。

なるほどー

Category: Perl  | Tags:  | Leave a Comment
日曜日, 8 月 30th, 2009 | Author: djodjo

CGIやPHPでとれる環境変数、REQUEST_URIとSCRIPT_NAMEですが、普通に使う分には中身が同じなので気にしてなかったのですが、mod_rewriteを使ったら、あら!違うじゃないですか。とハマッたのでメモ

以下のように、とあるCGIにアクセスした場合は

http://localhost/info.cgi
REQUEST_URI /info.cgi
SCRIPT_NAME /info.cgi
おなじ

じゃ、例えば
http://example.jp/blog/200908/01.html
といったURLを
http://example.jp/blog/article.cgi?id=20090801
と書き換えたとすると、REQUEST_URIとSCRIPT_NAMEはそれぞれ以下のようになる。

▼ブラウザから送られてきた要求のURI
$ENV{REQUEST_URI} = /blog/200908/01.html

▼CGIスクリプト名
$ENV{SCRIPT_NAME} = /blog/article.cgi

ポイントは、

REQUEST_URIはそのまま、【ブラウザから送られてきた要求のURI
SCRIPT_NAME
は【実行されているスクリプトのパス】ですね。

はまりポイントである。

Category: Perl  | Tags: ,  | One Comment
火曜日, 8 月 04th, 2009 | Author: djodjo

で、これが目的。Catalystをインストールしてみる。

  1. cpan Catalyst::Runtime
  2. cpan Catalyst::Devel
  3. cpan Catalyst::View::TT

で、いくつか問題がありました。

  1. Perlのバージョンが5・10系だと、Catalyst::Develのインストールで起こられた。なので、Perlをバージョンダウン
  2. cpan install Catalyst::Develで下記エラー

    Failed during this command:
    JDB/Win32-Process-0.14.tar.gz                : make NO
    BZAJAC/Proc-Background-1.10.tar.gz           : make_test NO
    FLORA/Catalyst-Devel-1.19.tar.gz             : make_test NO 2 dependencies missing (Win32::Process,Proc::Background)

    で、自動でインストールできなかったWin32::Processを個別にcpanから入れようとしても、同じくエラー。
    当然か!
    で完了なわけですが、Catalyst::Develが入らない。なので、ここはppmでインストールしてみる。面白いことに、ActivePerlだけかと思いきやStrawberry Perlでも利用できる。

    ppmで先にWin32-Processをインストール

    PPM> install Win32-Process
    Install package ‘Win32-Process?’ (y/N): y
    Installing package ‘Win32-Process’…
    Bytes transferred: 12323
    Files found in blib\arch: installing files in blib\lib into architecture depende
    nt library tree
    Installing C:\strawberry\perl\site\lib\auto\Win32\Process\Process.bs
    Installing C:\strawberry\perl\site\lib\auto\Win32\Process\Process.dll
    Installing C:\strawberry\perl\site\lib\auto\Win32\Process\Process.exp
    Installing C:\strawberry\perl\site\lib\auto\Win32\Process\Process.lib
    Installing \site\lib\Win32\Process.html
    Installing C:\strawberry\perl\site\lib\Win32\Process.pm
    PPM>

もういっかいcpanからcatalyst::Develをインストール。

OK。成功!!!

Category: Perl  | Tags: ,  | Leave a Comment
月曜日, 8 月 03rd, 2009 | Author: djodjo

cpanコマンドの設定メモ。よく忘れるんだこれが。

  • 設定一覧
    • o conf
  • CPANミラーのURL設定
    • o conf urllist [http://......,http://.....]
  • CPANミラーのURL追加
    • o conf urllist push 追加するURL
      • これでurllistの後ろに追加される
    • o conf urllist unshift 追加するURL
      • これでurllistの先頭に追加される
  • CPANミラーのURL削除
    • o conf urllist pop 削除するURL
  • Proxyの設定
    • o conf http_proxy http://プロキシ名:ポート
    • o con ftp_proxy http://プロキシ名:ポート
  • Proxyに認証がいる場合
    • o conf proxy_user ユーザ名
    • o conf proxy_pass パスワード
  • 設定の確定・保存
    • o conf commit
    • これを忘れると保存されない。

Category: Perl  | Tags:  | Leave a Comment
月曜日, 8 月 03rd, 2009 | Author: djodjo

Perlを好く使うんですが、Vimとかemacsとか使いこなせないんで、Windowsで開発してます。(笑)
で、PerlはActivePerlを使ってたんですが、Strawberry Perlって環境もあるときき試してみることに。最近買った、モダンPerl入門 (CodeZine BOOKS)
って本で知りました。(遅いかっ!)

インストール手順

strawberry-perl-for-windows

  • ダウンロード
    http://strawberryperl.com/から5.10系か5.8系を選んでダウンロード
  • exeなのでそのままインストーラを実行
  • 試した5.10は特に選択肢もないままインストール完了
  • インストール先
    • c:\strawberry\
    • Perl.exeなど:c:\strawberry\perl
    • DLLやgccなど:C:\strawberry\c
  • 環境変数PATH
    • c:\strawberry\perl\binとC:\strawberry\c\bin
    • perlとDLLへのパスとなる。
    • 追記!!!効果のほどはわかりませんがいかもPATHに追加しておく
    • C:\strawberry\c\mingw32\bin
    • 結果PATHは
    • C:\strawberry\c\mingw32\bin;c:\strawberry\perl\bin;C:\strawberry\c\bin
    • となった

感想
まず、gccやDLLを内包しているという点は結構大きい。
開発をwindowsで行っても実際に本番サーバはLinux系のことが多いので、各種ライブラリはやはりCPANから持ってくる。まれに、というか結構ActivePerlのPPMには存在しないものもあり、結構面倒なのでこれはすごくイイ
インストール先がc:\perlでないのもOK。インストール先の選択肢が無く一瞬あせったが、 ちゃんとかぶらないようになってた。ウレシイ
ちなみに、ActivePerlと共存させるため、シンボリックリンクでc:\perlを作ってみました

Category: Perl  | Tags: ,  | Leave a Comment
月曜日, 8 月 03rd, 2009 | Author: djodjo

StrawberryPerlでWeb::Scraperインストールしようとしたら
not_found_libxml2_dll
って怒られた。
libxml2.dllはというと下記にあるという。
http://xmlsoft.org/sources/win32/
ここからダウンロードして再チャレンジ

とおもったら、StrawberryPerlってこれらDLLを内包しているのがメリットだったはず!!
探してみると
c:\strawberry\c
の下にDLLがあるある。

結局、
c:\strawberry\c
がPATHに含まれていないのが問題でした。

特に気にせずインストールすればPATHには自動で追加されるはずです。
(インストール前に起動したcmd.exeつかってた・・・)

Category: Perl, 未分類  | Tags: , ,  | Leave a Comment
月曜日, 8 月 03rd, 2009 | Author: djodjo

今までActivePerlをよく使ってたんですが、StrawberryPerlってのもあり試してみることに。
ただ、今までの環境も壊したくないのでC:\Perlをシンボリックリンクにしたいなぁと。
で、シンボリックリンクはショートカットとは異なるので作るのは下記のコマンド

mklink /d c:\perl c:\ActivePerl

/dオプションつけなければファイルとしてリンクが作られる。

注意!
削除するときはdelコマンドではなく、rdコマンド
rd c:\perl

delだとその中身まで消えてしまうらしい・・・・えっ?なにそれ。コワイ

Category: Perl  | Tags: ,  | One Comment