ActivePerl 5.12 で PAR::Packer をインストール

ActivePerl 5.12 が出たみたいなので PAR::Packer のインストールをクリーンインストールから試してみた。5.10 の時はこんな感じでごく簡単に終了したのだが……。

PARでPerlスクリプトをexe化 @ ActivePerl 5.10.1 build 1007
https://blog.delphinus.dev/2010/02/par-activeperl-5101-build-1007.html

今回もまずは必要モジュールを先にインストールする。以下の 6 つだ。

  • Module::ScanDeps
  • Win32::Exe
  • Parse::Binary
  • Getopt::Argvfile
  • PAR
  • PAR::Dist

そしていよいよ PAR::Packer……なのだが、これはうまくいかない。

5.12 の PPM レポジトリにはまだ dmake 及び MinGW がリリースされておらず、コンパイルが出来ないのだ。しょうがないので、5.10 の時に使ったパッケージを無理矢理インストールする。

Continue reading

【Perl】Last.fmの履歴からiTunesプレイリストを作る(Windows編)

iTunesのスマートプレイリストを使うと再生回数の多い曲だけを集めたプレイリストができる。だがライブラリの仕様上、再生回数は“曲ごとに”集計される。同じ曲が色んなアルバムに点在している場合は回数がばらけてしまうのだ1

100409-0001.png

同じ曲がわらわら……。ダンスミュージックばかり聴いてるとこうなってしまう。

100409-0002.png

そこでLast.fmを使う。

日頃から再生履歴を送信しておくことで、再生回数をかなり正確に見積もることができる。最近になって、曲名・アーティスト名の表記揺れを訂正してくれる機能が付いたので更に便利になった。

lastfm.pl

というわけで作ったのがこのスクリプト。だが、作ったのは数ヶ月前なので中身はあんまり覚えてなかったり……。とりあえずこんな感じで動きます。

Continue reading

【Perl】PARでexe化するときにファイルを追加する

【Perl】Win32::GUI::LoftでGUIプログラミング」」ではThe GUI Loftを使ってGUIアプリケーションを書いた。

作成したアプリケーションを配布するときにはPAR::Packerでexe化すると便利なのだが、スクリプトファイル(拡張子.pl)の他にGUI定義ファイル(拡張子.gld)もパッケージしないといけない。まずはパッケージ内部のgldファイルを読み込めるようにスクリプトを訂正しよう。

#!/usr/bin/perl
use strict;
use warnings;
use FindBin;
use Path::Class;
use Win32::GUI::Loft;

my $gld = "testGUI.gld";
my $scalar = $INC{ "PAR.pm" }
    ? PAR::read_file( $gld )
    : file( $FindBin::Bin, $gld )->slurp;
my $design = Win32::GUI::Loft::Design->newScalar(
    $scalar, $gld );
my $win = $design->buildWindow;
$win->btnButton1->Change( -onClick => sub { -1 } );
$win->Show;
Win32::GUI::Dialog;

ハイライトした部分が変更点だ。Perlの小ネタ集に書いたが、%INCハッシュの要素を調べることでPARモジュールを読み込んでいるかどうかがわかる。

これによってexe化したファイルから起動しているのかどうか判定しているわけだ。その上で、PAR::read_file関数1を使ってファイルを読み込んでいる。

 

スクリプトを変更した上で、exe化を実行する。

C:\> pp -a testGUI.gld -o testGUI.exe testGUI.pl

-aオプションによってパッケージにファイルを追加している。後は作成したtestGUI.exeを配布するだけだ。

Continue reading

【Moose】アトリビュートの設定を拡張する

MooseX::Getoptを使ってCUIアプリを作るとき、ロールに含まれるアトリビュートがコマンドラインオプションと化してしまうので困っていた。例えばこんな感じ。

ソースその1

#!/usr/bin/perl
{
    package MyApp::Role;
    use Moose::Role;
    has attr1 => ( is => "ro", default => 5 );
    1;
}

{
    package MyApp::CUI;
    use Moose;
    with qw!
        MyApp::Role
        MooseX::Getopt
    !;
    has opt1 => ( is => "ro", required => 1 );

    sub run { my $self = shift;
        print "attr1 => " . $self->attr1 . "\n";
        print "opt1  => " . $self->opt1 . "\n";
    }

    __PACKAGE__->meta->make_immutable;
}

MyApp::CUI->new_with_options->run;

実行結果

$ perl test.pl
Required option missing: opt1
usage: test.pl [long options...]
        --opt1
        --attr1

オプションにしたいのはopt1だけで、attr1はユーザーに見せたくない。一応、こういう時のために使うメタクラスが用意されている1

Continue reading

【Perl】LinuxからMicrosoft SQL Serverへアクセスする

PerlからMicrosoft SQL Serverにアクセスする場合、WindowsではOS標準のODBC機能(コントロールパネル→管理ツールから設定する)+DBD::ODBCが使える。

#!/usr/bin/perl
use DBI;
my $dbh = DBI->connect(
    "dbi:ODBC:Driver={SQL Server};"
    . "Server=サーバのIPアドレス;"
    . "database=データベース名;"
    . "uid=ユーザー名;"
    . "pwd=パスワード;" );

しかし、Unix系OSではこの手は使えない。unixODBCとFreeTDSという2つのソフトを介して接続することになる。

Milano::Monolog: unixODBC+FreeTDS+DBD::ODBCでSQL Serverに接続する
http://rebecca.ac/milano/mt/archives/001412.html

unixODBC
http://www.unixodbc.org/

FreeTDS.org
http://www.freetds.org/

Continue reading

【Perl】Spreadsheet::XLSXでセルの値に勝手にフリガナが付く件について

Excel 2007形式(XLSX)のファイルをPerlで扱う必要があったので調べてみると、「Spreadsheet::XLSX」というモジュールを見付けた。

Spreadsheet::XLSX – search.cpan.org
http://search.cpan.org/~dmow/Spreadsheet-XLSX-0.12/lib/Spreadsheet/XLSX.pm

そして次のようにXLSX形式のファイルを用意してスクリプトを実行してみたのだが、セルの値にフリガナがくっついて表示されてしまう1

excel01.png

#!/usr/bin/perl -l
use Spreadsheet::XLSX;
my $excel = Spreadsheet::XLSX->new( "Book1.xlsx" );
my $sheet = $excel->{Worksheet}[0];
print $sheet->{Cells}[0][0]{Val};

実行結果

$ perl readexcel.pl
文字列モジレツ

XLSX形式についてよく知らなかったのでまずはそこから調べてみた。

Continue reading

【Perl】Win32::GUI::LoftでGUIプログラミング

Windows + PerlでGUIアプリを作る手段はいくつかあるが、一番手頃で機能もそれなりなのがWin32::GUIを使うことだ。

Win32::GUI at SourceForge
http://perl-win32-gui.sourceforge.net/cgi-bin/index.cgi

ただ、これにはGUIビルダが付いていない。GUIの構築はあくまでスクリプト上で行わねばならないのが辛いところ。それを解決してくれるツールがThe GUI Loftだ。

The GUI Loft
http://www.darserman.com/Perl/Loft/

遙か5年以上前から更新が停止してるのがなんだかもの悲しいが、その分安定してるのだと考えよう。実際に最新のActivePerl 5.10.1 + Windows7環境でも問題なく動くのだから。

Continue reading