CGIに依存しないPerlの話題一般
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2001/05/31(木) 21:49ID:bKRSBFew・モジュール、オブジェクト指向プログラミング
・Perl6や.NET対応など
・各種GUIツールキット(Perl/Tk, Gtk-Perlなど)
・他言語による拡張(Inline::*, XS, Swigなど)
についてマターリと語り合うスレッドです。
#CGI関連の話題は、なるべく専用スレッドで。
0699nobodyさん
02/04/16 03:22ID:???0700469
02/04/16 03:32ID:???0701nobodyさん
02/04/16 03:51ID:???落ち込むなって(w
0702nobodyさん
02/04/16 19:56ID:MZwt7T+rWin32::APIを使うことまでは分かったんだけど
実際にどうやったらいい?
0703nEtA
02/04/16 21:06ID:???0704702
02/04/16 21:51ID:MZwt7T+r↑使えるの?
0705nobodyさん
02/04/17 05:28ID:???そうなのかなぁ。ローカルのPerl5.005に入れなおしてみます。
>Threadモジュールは5.xxx用でv5.6.xでは使えないみたいです。
0706702
02/04/17 06:28ID:pOnMDwcjActivePerlの5.005(_03)にはThreadモジュール自体が入っていない。
ActivePerlの5.6.1ではThread.pmは入ってるみたいだけど、
>The Thread extension requires Perl to be built in a particular way to
>enable the older 5.005 threading model. Just to confuse matters, there
>is an alternate threading model known as "ithreads" that does NOT
>support this extension. If you are using a binary distribution such
>as ActivePerl that is built with ithreads support, this extension CANNOT
>be used.
って書いてある。
まったく、Threadくらい実装しろや>ActivePerl
0707702
02/04/17 06:42ID:pOnMDwcj>Perl/5.004_50あたりから対応が入ってるんですが
だそーです。
結局ActivePerlではThreadモジュールは使えないってことですな。
0708702
02/04/17 07:24ID:pOnMDwcj思っていたんだけど、今、ActivePerl-5.6.0(.611)を入れてみた。
するとThread使えるみたい。
なんかお騒がせしました。
0709702
02/04/17 10:47ID:???エラー表示が、変わったからできたかと思ったんだけど・・・
今は、全てのバージョンを当たって確かめてます。
もうsageで。
0710702
02/04/17 12:04ID:???Thread使えませんでした。(まったく何なんだよ)
というわけでWin32::APIを使った方法でしかスレッドプログラミングは
できないのではないでしょうか?
0711nobodyさん
02/04/17 15:01ID:???Threadは使えないよ。
perldoc perlthrtut
を見よ。
0712702
02/04/17 18:41ID:???もうThreadいいや。丸1日つぶしたわ。あほくせー。
0713nobodyさん
02/04/17 19:06ID:???0714702
02/04/17 19:59ID:???Windows2K+ActivePerl+Perl/Tkで
CSVからデータを読み込んで、メールを一括送信するツールを作ろうかと。
その時に、メールの送信ループ部分をバックグラウンドで動かさないと
固まってしまうんですよ。
あと、送信処理をマルチスレッドにしれば、同時に複数のメールを
送れるから処理時間が短く済むかなと思ったのです。
0716age
02/04/18 00:37ID:???マウスホイール聞かない。
0717_gunzip
02/04/18 00:50ID:???マウスホイールは使えるよ。
#!/usr/bin/perl -w
use Tk;
use strict;
my $mw = new MainWindow();
my $text = $mw->Scrolled("Text", -scrollbars => 'e',
-width => 30, -height => 20)->pack();
setup_mouse_wheel($text);
$text->insert('end', "Mouse Wheel Test -- line $_\n") for 1..300; # てすと
Tk::MainLoop();
sub setup_mouse_wheel #(Tk::Widget $widget)
{
my $widget = shift;
if ($^O eq 'MSWin32') { # 窓さんの場合
$widget->bind('<MouseWheel>' =>
[ sub { shift->yview('scroll', -(shift() / 120) * 3, 'units') }, Ev('D') ]
);
} else { # Xの場合、コレでいけると思う。たぶん
$widget->bind('<4>' => sub { shift->yview('scroll', -3, 'units'); });
$widget->bind('<5>' => sub { shift->yview('scroll', +3, 'units'); });
}
}
0718nobodyさん
02/04/18 00:53ID:???日本語入れる時にインライン変換が使えないのだが。。。
日本語化されていないから諦めるしかない?
0719_gunzip
02/04/18 02:07ID:???Progressbarウィジェットと、進捗情報を表示するLabelウィジェットを
載せたモーダルダイアログを出しておいて、適宜更新する方法では駄目だろうか?
それが面倒なら、
$mw->repeat(1000 => sub { $mw->update() } );
で1秒ごとに強制的に更新するとか。
外部コマンドを実行する際は、Tk::IOか、またはTk::Eventのfileeventメソッドを利用することで、
ディスクリプタへの入出力が可能になる/閉じられるまでブロックせずに待つことが出来るが、
そういう話ではない?(comp.lang.perl.tkでは、コレ関係の質問が一番多いと思うので...)
>>718
MS-Win版の場合は出来ないと思う。出来るようにする方法も知らないなぁ。
日本語化パッチを当てたX版では出来るはず。
0720nobodyさん
02/04/18 03:24ID:???ありがとう。。。素直に諦めます(涙
Perl2exe で GUI アプリを作ろうかなぁと色々試行錯誤していたのですが、
普通のGUIアプリレベルで作るのは難しそうですね。
ちょっと我慢すれば問題ない気もしますけど。
0722nobodyさん
02/04/19 23:12ID:???0723nobodyさん
02/04/20 11:40ID:M8cSsXMoβ版とかもまだなの?
0724nobodyさん
02/04/20 11:45ID:M8cSsXMo最高のGUI環境ってやっぱPerl/TKなんすかね?
もっと、Win32モジュールとか使ってVC++とかで使うような
GUIを使えないかな?
0726_gunzip
02/04/20 12:21ID:???Win32::GUIと、The GUI-Loftなんかどうですか?
http://www.bahnhof.se/~johanl/perl/Loft/
以下、個人的ぼやき
Perl/Tk ・・・ 結構使ってきたけど、なんか外見がダサイという人が周りに多い。
Gtk-Perl ・・・ 最近はこっち。Windows版なし。
本家Gtk+はWidnwosにポートされているから可能なのだろうが。
PerlQt ・・・ 使いやすくて好きだけれど、Perlバインディングは開発停止中みたい。
QtのWindows非商用版は2.3でとまってるなぁー。
wxPerl ・・・ Windows版では日本語表示できない
(NT系列ではunicode+unifontで出来るという噂を聞いたが真偽不明)
ボタン一つ利用するのに、いちいちサブクラス化するのは面倒か。
Win32::GUI, FLTK, FOX ・・・ 使ったことがない。
後二者は日本語表示を可能にするパッチが転がってました。
0728nobodyさん
02/04/20 14:46ID:???サンクス!
確かにPerl/Tkはダサい。ただ簡単に使えるのがいいけど。
Win32::GUIは前々から気になってたんだけど勉強がてら
使ってみます。
>>727
なるほど。
まあ調べてみたら5.8.0は今年の5月にリリースらしいから
待ってみます。
0729_gunzip
02/04/21 10:11ID:???....(以下略)
http://www.prima.eu.org/
スクリーンショット http://www.prima.eu.org/big-picture/
0730nobodyさん
02/04/21 13:49ID:???http://camelbones.sourceforge.net/index.html
0731nobodyさん
02/04/21 18:51ID:kERwwP8q0733_gunzip
02/04/21 20:04ID:???配色を変えてみたり($toplevel->setPalette())、ボーダーの値を変更してみたりってのは?
その際、いちいちコードの中にオプションの値を埋め込むのではなく、.Xdefaults
形式のファイルに纏めておいて、$toplevel->optionReadfile(filename, priority)
で読み込むと楽ちん。
0734nobodyさん
02/04/22 07:01ID:LmMZGpbzウインドウの左上に表示されるTkのアイコン(?)がダサいよね。
あれ他のアイコンに変えられないかな?
-------------
|TK
-------------
|
|
|
|
0735_gunzip
02/04/22 21:19ID:???my $image = $mw->Pixmap(-file => "title.xpm");
$mw->Icon(-image => $image);
# ないし、$mw->iconimage($image);
0736_gunzip
02/04/22 21:21ID:???でもよろし
0737nobodyさん
02/04/22 21:28ID:???0739nobodyさん
02/04/23 01:14ID:???0740nobodyさん
02/04/23 04:50ID:???0744nobodyさん
02/04/23 19:37ID:???0745nobodyさん
02/04/23 23:55ID:???http://pc.2ch.net/test/read.cgi/php/990178547/67
0747nobodyさん
02/04/24 07:44ID:ZzM1BfC2素人考えでは、アパッチにモジュールとして組み込んで使うと理解している
のですが、なんだかPHPはメジャーでmod_perlはマイナーな気がします。
何か決定的な違いみたいなのがあるのでしょうか?
0749nobodyさん
02/04/24 08:37ID:???だから
1) 一旦コンパイルしてメモリ上にロードされたモジュール類はApacheの子プロセスがexitするまでそのままメモリに残ってる
2) ApacheのAPIをPerlから使える
3) Apacheのフレームワーク内の随所にPerlで書いたハンドラーを組み込める
自分はPHP使いじゃないので知らないがPHPにも同様のものがあるのかも
しれん。でももし言語としてのPHPの話をしているのならそもそも比較自体がナンセンス。
0750nobodyさん
02/04/24 12:13ID:???0751nobodyさん
02/04/24 23:07ID:z19r++98作りたいのだが、サンプルないですか??
0755あぼーん
NGNG0756nobodyさん
02/04/25 13:27ID:vqNaBvlX「./Configure」の後の「make」でエラーになってしまいます。
エラーは最後の行にこんな感じで表示されてました。
make: *** [miniperl] エラー1
Linaxにさわって間もないので、よくわからないのですが、
何かしなければいけないのでしょうか?
0757nobodyさん
02/04/25 13:58ID:???まぁ、rpmにしたところで、apt-getにはかなわんな。
0758nobodyさん
02/04/25 19:17ID:???0759nobodyさん
02/04/26 03:29ID:???それだけじゃわからんので答えられないが、perl5.6.0はよしとけ。
コンパイルするんだったらちゃんとwww.perl.comから
perl5.6.1(stable.tar.gz)をひろってきなさいな。
0760756
02/04/26 07:26ID:xOSV8XDg一応、www.perl.comから落としたstable.tar.gzなんですよ。
しょうがないので、perl5.005_03.tar.gzにしたら大丈夫でした。
0761759
02/04/26 07:37ID:???ということはそれはperl5.6.1のはずだけど・・・ただの間違い?
できれば5.6.1のほうがいいよ。大分違うから。
次からはどこでこけたのかしっかり書き出すべし。
0762nobodyさん
02/04/28 03:22ID:W+plYXX70763nobodyさん
02/04/28 03:26ID:???0767ぺるにゃん
02/04/28 19:48ID:gfGqCBjT>foreachの計算量とか。
何のことですかにゃ???
そういえば、はるか昔、Perl 5.005 くらいか、
foreach (1..1000000)
とやったときに、巨大な配列を作らないようにしました。
という仕様変更を見ましたが、これってどういう仕組みなのかどなたかご存知ですか?
( ) の中を変数展開することなしに、foreach ループを実行するってことなのかなぁ。
そんなことができるんだったら、foreach (@big_array) も効率は悪くない。
そうではなくて、
「foreach ( 数字..数字 ) はよく使われる書法だから、この場合のみ最適化した」
というのであれば、foreach (@big_array) の効率が上がったわけではないのにゃ…。
0768nobodyさん
02/04/28 20:54ID:???昔はforeach(1..1000000)は内部的に
@array=(1..1000000);
foreach (@array)
って風に一回配列を作ってからforeachにかけてたんじゃないかな。
だからまず@arrayを作るのに時間がかかって、@arrayを評価するのにも時間がかかって…みたいな。
ちなみに
use Benchmark;
@array = 1..100000;
timethese(1000,{
'array'=> q{ foreach (@array) { $_ } },
'0..10'=> q{ foreach (1..100000) { $_ } },
});
Benchmark: timing 1000 iterations of 0..10,array...
0..10: 131 wallclock secs (131.49 usr + 0.00 sys = 131.49 CPU) @ 7.61/s (n=1000)
array: 152 wallclock secs (152.09 usr + 0.00 sys = 152.09 CPU) @ 6.58/s (n=1000)
うちだとこんな結果が出た。Win98 perl5.6.1 CPU466MHz
0769_gunzip@訂正歓迎
02/04/28 22:06ID:???>>767
>「foreach ( 数字..数字 ) はよく使われる書法だから、この場合のみ最適化した」
ちょっと追加しますが、'a' .. 'z' なども最適化の対象です。
>>768
>って風に一回配列を作ってからforeachにかけてたんじゃないかな。
>だからまず@arrayを作るのに時間がかかって、@arrayを評価するのにも時間がかかって…みたいな。
付け加えるなら、@array分メモリも食います。
>>768さんのベンチマークで前者の方が早いのは、for (1..100)型は
内部でループカウンタを再利用する最適化を行っているので、
毎回カウンタSVの生成破棄にかかる時間を節約することができるからでしょう。
(とはいえ、わずかな時間ですから気にする必要は全くありません)
0770768
02/04/28 22:51ID:???面白いなぁ。
0771nobodyさん
02/04/28 23:43ID:???0772nobodyさん
02/04/29 08:55ID:???0773nobodyさん
02/04/29 09:08ID:???0774nobodyさん
02/04/29 09:27ID:???`kill -KILL _gunzipのPID` if $user eq '_gunzip';
0775nobodyさん
02/04/29 13:27ID:5LS+M/nghaxa?
0776nobodyさん
02/04/29 14:09ID:???0777nobodyさん
02/04/29 14:12ID:NmdFgil6お前が消えるまでこのスレッドを荒らす
0779あぼーん
NGNG0780nobodyさん
02/04/29 14:43ID:???perl/tkで「何か」を作ることは出来る?
0781nobodyさん
02/04/29 16:10ID:D6ncuE9Tブラウザで言うところのTextAreaに長文の文章入れると文字化けしません?
文章コピーしてTextAreaに貼り付けた瞬間に文字化けします。
Linux+Perl5.005_03+Perl/Tk800.23+日本語パッチ、なんですけど。
↓ソースはこんな感じ。
$ta2=$mw->Scrolled(
"Text",
-scrollbars => 'se',
-height => 5,
-width => 35,
-wrap => 'none',
)->pack();
0782nobodyさん
02/04/29 17:08ID:???昔一瞬作ろうと思ったけどすぐ止めた。
変な形のWindowの作り方がわからなかったから。
まぁ、四角い箱の中で動くのならなんとかなるんじゃないか?
俺は作らないけど。
0783nobodyさん
02/04/29 20:03ID:NmdFgil6お前らには無理
0784nobodyさん
02/04/29 20:18ID:???ごくろうさま
0785nobodyさん
02/04/29 20:33ID:???http://www.geocities.co.jp/SiliconValley-PaloAlto/2514/
頑張れ。>780
0786782
02/04/29 21:27ID:???とりあえずブックマークした。ありがとー。
と言うわけで頑張れ>780
0787nobodyさん
02/04/29 21:43ID:NmdFgil60789702
02/05/02 03:49ID:bk99oFiJどうしても、Threadが使いたかったので、Linuxに、perl5.005_03を
5005threadでコンパイルしました。
LWPモジュールを使って、CSVファイルから読み込んだ複数のURLに
GETするということをやっているのですが、これをThreadを使って、
同時にやると「セグメントエラー」を起こしてしまいます。
実際にエラーが起きているのは、HTTPリクエストを送って、
サーバーからのレスポンスを待っている部分です。
#HTTPリクエスト
$ua=new LWP::UserAgent;
$ua->agent($user_agent);
$ua->timeout($timeout);
$req=new HTTP::Request('GET',$url);
↓ここから
$res=$ua->request($req);
if($res->is_error)
{
print("$url($floor) => エラー [$time]\n");
return(1);
}
$body=$res->content;
↑ここまで
0790702
02/05/02 03:53ID:bk99oFiJすれば回避できるのですが、それではThreadにした意味がありません。
何か対処法はないものでしょうか?
0791nobodyさん
02/05/02 04:02ID:???cygwin perlでfork()使うとか、Win32::Processじゃダメなの?
0792nobodyさん
02/05/02 04:23ID:Opu6NMoF0793702
02/05/02 04:46ID:bk99oFiJではなくて、サブルーチン単位で処理を並列化したいのです。
(うまく言えてるかな?)Win32::Threadみたいなモジュールないですかね?
あと、上記789の問題は、LWPモジュールが並列処理に対応した作り方に
なっていないのではないかと勝手に考えているのですが・・・
どうなんでしょうか?
0794nobodyさん
02/05/02 05:20ID:???0795nobodyさん
02/05/02 06:54ID:???0797nobodyさん
02/05/02 11:34ID:???違ってたらスマソ。
そもそもLWPってthread-safeだったっけ。
5.005でthreadオンにしてコンパイルすると、
$_が大域変数からレキシカルに変わるけど、その辺大丈夫?
あと、これは念のため聞くだけだけど、各スレッドごとにuaをひとつ作ってるよね。
■ このスレッドは過去ログ倉庫に格納されています