人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Perlで作ったスクリプトを Windowsパソコンで実行し、入力ボックスを出す方法を教えて下さい。
Active Perlはインストール済みのPCとします。

入力ボックスは、ユーザにファイル名などを入力してもらうために使います。
Web上のCGIなら、Perlで入力ボックスを出すのは簡単ですが、Windows PC上で出すにはどうしたらいいでしょう?

【補足】
Win32::OLEというモジュールを組み込めば、ダイアログボックスを出せそうですが、モジュールの組み込み方がわかりません。

IEを起動して、IEからPerlスクリプトを呼び出すという方法でもOKです。

ただし、実行するパソコンは、すべてWindowsですが、海外で現地人が使用しているものもあり、OS、IEのバージョンがバラバラです。
Windows 2000/XP/Vistaで同じスクリプトを使用できるようにしたいです。

また今後、WindowsやIEのバージョンが上がっても、メンテナンスを最小限(できれば不用)にしたいと思っています。

アドバイスお願い致します。

●質問者: uta_at_home
●カテゴリ:コンピュータ
✍キーワード:Active CGI IE OS pc
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● b-wind
●100ポイント ベストアンサー

M.Hiroi's Home Page / Perl/Tk memo

Active Perl なら Perl-Tk ってのも一つの手段かと。

一応標準対応なので。

use strict;
use Tk;

my $buffer;
my $top = MainWindow->new();
my $text = $top->Entry( -textvariable => \$buffer );
$text->pack();
my $button = $top->Button( -text => 'EXIT', -command => sub { exit(); } ); 
$button->pack();

MainLoop();

あとは一応 ActivePerl が入っていれば、IE で JavaScript 等と同様に PerlScript が実行できるので、内容によってはこっちの方が楽かもしれません。

ActivePerl で PerlScript と Google Maps: blog.bulknews.net

自分はやったこと無いので、使い勝手はわかりませんが。

◎質問者からの返答

いきなり有効そうな回答をありがとうございます。

喜んでやってみたのですが、Tkのインストールがうまく行きませんでした。

書いてある通りにPPMを使ってみたのですが、、、、

C:\Work>ppm

PPM interactive shell (1.1.1) - type 'help' for available commands.

PPM> install Tk

Install package 'Tk?' (y/N): y

Retrieving package 'Tk'...

Error installing package 'Tk': Could not locate a PPD file for package Tk

PPM>

となってエラー。

CPANから直接ダウンロードしてインストールできないかとやってみたのですが、インストールのやり方がわかりませんでした。

「ActivePerl で PerlScript と Google Maps: blog.bulknews.net」の方は、読んでも理解できませんでした。(T_T;

レベルの低い質問者ですいません。

【追記】

職場のパソコンでやってみると、Tkなんて知らないと言われて動かなかったのですが、

自宅のパソコンでやるとちゃんと動きました!

職場のパソコンに入っているActive Perlのバージョンが古いとか、インストールに

ミスっていたとか、そういう問題のような気がします。

明日ActivePerlをインストールし直して、再チャレンジしてみます。

【再追記】

他業務などのために遅くなってしまいましたが、本日再チャレンジしてうまくいきました。

職場のパソコンはやはりActivePerlのバージョンが古すぎたようです。

(かつPerl本体ではなく、J-Perlを起動していました)

本日、ActivePerl 5.8.8.822をインストールし直してみたところ、Tkがちゃんと動きました。

ありがとうございました!

ちなみに1度しか試していないので、確証はないのですが、最新のActivePerl 5.10.0.1002を入れたときは、やはりTkが動きませんでした。標準から外されたのかな?


2 ● thrillseeker
●50ポイント

>喜んでやってみたのですが、Tkのインストールがうまく行きませんでした。

Proxy の設定が必要だったりしませんか?

参考: http://homepage3.nifty.com/hippo2000/perltips/ppm.htm#1.3


>CPANから直接ダウンロードしてインストールできないかとやってみたのですが、

>インストールのやり方がわかりませんでした。

ActivePerl なら CPAN ではなく、ActiveState から入手した方が良いです。

下記の手順でダウンロードしたパッケージをインストールで来ます。

http://homepage3.nifty.com/hippo2000/perltips/ppm.htm#2.3

※現在のダウンロード先は http://ppm.activestate.com/PPMPackages/zips/

◎質問者からの返答

ありがとうございます。

Proxyの設定かもしれません。チェックしてみます。

インストールの方法もよくわかりました。

ありがとうございます!


3 ● t_ishida
●80ポイント

TKも良いとは思いますが、単にファイル名を入力させたいだけならば

print "ファイル名を入力して下さい:";
$fn = <STDIN>;
print "あなたが入力したファイル名:$fn\n";

のように、標準入力で受け取とる方法はどうでしょうか?


もしくは、どうしてもGUIを使わせる必要が有るのであれば、

VBSを使ってInputBoxを使う方法が有ります。

VBS側

Dim strX ,sh,perl_script_path
'
' Perlのファイル名を指定してください。
'
perl_script_path = "a.pl"

''以下ロジック
strX = ""
While strX = "": strX = inputbox("ファイル名を入力して下さい") :Wend
Set sh = CreateObject("Wscript.Shell")
Call sh.Run("Command.com /C perl " & perl_script_path & " " & strX & " > ~~TMP~~", 0, True)
Call WScript.Echo( CreateObject("Scripting.FileSystemObject").OpenTextFile("~~TMP~~").ReadALL )

Perl側

$fn = shift @ARGV;
print "あなたが入力したファイル名:$fn\n";

使い方は、VBS側をキックするだけです。

◎質問者からの返答

回答ありがとうございます。

・ファイル名の他にも入力してもらう項目がいくつかある。

・コマンドプロンプトで動くプログラムに慣れてないユーザが多い。

という理由で標準入力は、外していました。


VBからPerlを呼び出すという方法は考えていたのですが、

VBSというのは知りませんでした。

ありがとうございます。検討してみます。

VBからPerlを呼び出すパターンを取らなかったのは、

VBだとパソコンごとのWindows環境によって、

動作に違いが出てきそうな気がしたことです。

同じプログラムを配布して、Windows XPや2000と、Vistaで同じ結果が

得られるものなのでしょうか?

ユーザのPC環境がバラバラなので、この辺がすごく気になります。

動作がPCの環境に左右されると言うのは、もしかしてTKも同じでしょうか?

TKもWindows標準のAPIを呼び出しているのであれば、そういうことも

あるかもしれませんね。

もし、この辺りの情報を教えて頂ける方がいらっしゃれば、

すごくうれしいのですが。。。


4 ● t_ishida
●80ポイント

おそらく、ここが答えの一つになるんじゃないかと思います。

http://www.microsoft.com/japan/technet/scriptcenter/scrptfaq.msp...

怖い事が書いてありますが、経験上XPや2000では、

この程度の処理ならVBSに違いを感じたことは有りません。

(Vistaは手元に無いので分かりません)


なお、バージョンは以下で確認できます。

Call WScript.Echo( WScript.Version )

また、さらに根拠無しで申し訳無いのですが、

この程度の事であればVB6でも問題無いんじゃないかと思われます。

とにもかくにも.NET環境は、.NET Frameworkが違いを

吸収してくれることになっているので、

それが一番確実だと思います(手軽じゃなくなっちゃいますが)

◎質問者からの返答

ありがとうございます。

たいへん参考になりました。


さらに恥ずかしながら、

.NET Frameworkがどういうものなのか今まで分かっておらず、

「.NET環境は、.NET Frameworkが違いを吸収してくれることになっている」

と言う言葉が非常に参考になりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ