はじめに
PerlはLinuxで使うものだと思っていませんか? ActiveState社のActivePerlを使えばWindowsでもPerlを使えます。今回はWindowsで使うPerlのTipsをお届けしたいと思います。
対象読者
WindowsユーザーでPerlに興味のある方。
必要な環境
ActiveState社のActivePerlを使います。私が使った環境はOSはWindowsXP、ActivePerlのバージョンは5.8.8.820です。ActivePerlは、ActiveState社のWebページから[Get ActivePerl]をクリックしてダウンロードすることができます。
解説内容
使用するPerlモジュール
Microsoft Wordを操作する
まずはVBScriptで新規Word文書を作成するスクリプトを見てみましょう。このスクリプトは「C」ドライブの直下に「test.doc」という名前のWord文書を作成します。文書には「hellworld」という文章が出力されます。
Set oWord = CreateObject("Word.Application") oWord.Visible = True Set Doc = oWord.Documents.Add() Set Sel = oWord.Selection Sel.TypeText("helloworld") Doc.SaveAs("C:\\test.doc") oWord.Quit()
では上記のVBScriptの例と同等のPerlスクリプトを次に示します。まったく同じではあまり面白くないのでWin32::Clipboardモジュールを利用してクリップボードからデータを抜き出したいと思います。
この例では「C」ドライブの直下に「test.doc」という名前で新規Word文書を作成します。このときクリップボードの内容がテキスト形式であればその内容を「test.doc」に出力します。クリップボードが空の場合やテキスト形式でない場合は helloworldと「test.doc」に出力します。
use strict; use warnings; use Win32::OLE; use Win32::Clipboard; my $clip = Win32::Clipboard(); my $word = Win32::OLE->new('Word.Application'); $word->{'Visible'} = 1; # Wordを表示 my $doc = $word->Documents->Add; my $sel = $word->Selection; my $text = $clip->IsText() ? $clip->GetText() : 'helloworld'; $sel->TypeText($text); $sel->TypeParagraph; $doc->SaveAs('C:\test.doc'); $word->Quit;
ほとんど同じです。つまりWin32::OLEモジュールを使うことでVBScriptライクなコーディングをPerlで実現できるのです。
iTunesを操作する
iTunesもCOMインターフェースを持っているので、Win32::OLEモジュールで簡単に操作できます。
次の例はメインのプレイリストの先頭から10件のタイトルをコンソールに表示するスクリプトです。
use strict; use warnings; use Win32::OLE; my $itunes = Win32::OLE->new('iTunes.Application') or die 'iTunes does not work fine'; my $lib = $itunes->LibraryPlaylist; my $tracks = $lib->Tracks; my $cnt = $tracks->Count > 10 ? 10 : $tracks->Count; for my $i (1..$cnt) { print $tracks->Item($i)->Name, "\n"; } $itunes->Quit;
iTunesには「iTunes Music Library.xml」という音楽ライブラリを管理するXMLファイルがありますので、それをパースすることでプレイリストの情報を抜き出すこともできますが、COMインターフェース経由でも可能だということが分かりますね。
レジストリを操作する
レジストリを操作するには、Win32::Registryモジュールを使うと良いでしょう。
次の例では「HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run」にあるキーの名前と値を抽出します。
use strict; use warnings; use Win32::Registry; use Data::Dumper; my $obj; my %values; $HKEY_CURRENT_USER->Open('Software\Microsoft\Windows\CurrentVersion\Run', $obj) or die "Can't Open"; $obj->GetValues(\%values); for my $key (keys %values) { print $key . ' - ' . $values{$key}[2], "\n"; }
Win32::Registryモジュールに次のようなレジストリのルートキーが定義されているので、簡単にアクセスできます。
- $HKEY_CLASSES_ROOT
- $HKEY_CURRENT_USER
- $HKEY_LOCAL_MACHINE
- $HKEY_USERS
- $HKEY_PERFORMANCE_DATA
- $HKEY_CURRENT_CONFIG
- $HKEY_DYN_DATA
まとめ
Perlを使ってWindowsアプリケーションを操作すると、例えば「あるアプリケーションのログの集計処理を実施してOffice文書でレポートを作成」といったことをPerlで行うことができます。ここでは追求しませんでしたが、ExcelやPowerPointも同じようにWin32::OLEモジュールを使えばPerlで操作することができます。それぞれのアプリケーションのオブジェクトモデルを理解する必要がありますが、MSDNのサイトにドキュメントがありますので参考にしてみると良いでしょう。
PerlはLinuxだけのものではなく、Windowsでも十分に活用することができます。この機会にPerlに触れてみてはいかがでしょうか?
以下はPPMを使ってXML::RSSをダウンロードした様子です。なおヘルプを表示するには、「ppm help」とタイプします。
C:\Documents and Settings\shigeta>ppm install XML::RSS Downloading ActiveState Package Repository packlist...not modified Downloading XML-RSS-1.12...done Downloading Test-Manifest-1.17...done Unpacking XML-RSS-1.12...done Unpacking Test-Manifest-1.17...done Generating HTML for XML-RSS-1.12...done Generating HTML for Test-Manifest-1.17...done Updating files in site area...done 4 files installed