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のバージョンが上がっても、メンテナンスを最小限(できれば不用)にしたいと思っています。

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2008/01/23 14:55:56
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440

ポイント100pt

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

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

id:uta_at_home

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

喜んでやってみたのですが、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が動きませんでした。標準から外されたのかな?

2008/01/23 14:52:43

その他の回答3件)

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440ここでベストアンサー

ポイント100pt

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

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

id:uta_at_home

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

喜んでやってみたのですが、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が動きませんでした。標準から外されたのかな?

2008/01/23 14:52:43
id:thrillseeker No.2

回答回数328ベストアンサー獲得回数37

ポイント50pt

>喜んでやってみたのですが、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/

id:uta_at_home

ありがとうございます。

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

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

ありがとうございます!

2008/01/17 01:38:19
id:t_ishida No.3

回答回数18ベストアンサー獲得回数0

ポイント80pt

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側をキックするだけです。

id:uta_at_home

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

あるかもしれませんね。

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

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

2008/01/21 17:04:12
id:t_ishida No.4

回答回数18ベストアンサー獲得回数0

ポイント80pt

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

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

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

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

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


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

Call WScript.Echo( WScript.Version )

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

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

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

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

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

id:uta_at_home

ありがとうございます。

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


さらに恥ずかしながら、

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

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

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

2008/01/21 19:30:33
  • id:b-wind
    >Tkのインストールがうまく行きませんでした。
    Windows 用の ActivePerl なら、最初から入っているはずですが。
  • id:uta_at_home
    b-windさん、コメントありがとうございます。
    職場のパソコンでやってみると、Tkなんて知らないと言われて動かなかったのですが、
    自宅のパソコンでやるとちゃんと動きました!

    職場のパソコンに入っているActive Perlのバージョンが古いとか、インストールに
    ミスっていたとか、そういう問題のような気がします。

    明日ActivePerlをインストールし直して、再チャレンジしてみます。
    結果はまた報告します。
    ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません