トップページ⇒php
988コメント342KB

CGIに依存しないPerlの話題一般

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2001/05/31(木) 21:49ID:bKRSBFew
・コマンドラインからのPerl活用
・モジュール、オブジェクト指向プログラミング
・Perl6や.NET対応など
・各種GUIツールキット(Perl/Tk, Gtk-Perlなど)
・他言語による拡張(Inline::*, XS, Swigなど)

についてマターリと語り合うスレッドです。

#CGI関連の話題は、なるべく専用スレッドで。
0698_gunzip02/04/16 03:04ID:???
あ...また。
>>696 その通りですね。リロードすれば良かった...。
.
.
.
.
.
もういや...
0699nobodyさん02/04/16 03:22ID:???
そんなあなたに乾杯
070046902/04/16 03:32ID:???
うぜえええええええええええええええええ
0701nobodyさん02/04/16 03:51ID:???
>698
落ち込むなって(w
0702nobodyさん02/04/16 19:56ID:MZwt7T+r
Windows2000+Perlでスレッドプログラミングしたいんだけど、
Win32::APIを使うことまでは分かったんだけど
実際にどうやったらいい?
0703nEtA02/04/16 21:06ID:???
use Thread;
070470202/04/16 21:51ID:MZwt7T+r
use Thread;
↑使えるの?
0705nobodyさん02/04/17 05:28ID:???
Googleで検索してたら、↓のような記述が出てきたんですけど
そうなのかなぁ。ローカルのPerl5.005に入れなおしてみます。

>Threadモジュールは5.xxx用でv5.6.xでは使えないみたいです。
070670202/04/17 06:28ID:pOnMDwcj
ん(’_’?)
ActivePerlの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
070770202/04/17 06:42ID:pOnMDwcj
Google検索でもうひとつ。
>Perl/5.004_50あたりから対応が入ってるんですが
だそーです。
結局ActivePerlではThreadモジュールは使えないってことですな。
070870202/04/17 07:24ID:pOnMDwcj
Buildが新しければ新しいほどThread実装に近づくのかと
思っていたんだけど、今、ActivePerl-5.6.0(.611)を入れてみた。
するとThread使えるみたい。
なんかお騒がせしました。
070970202/04/17 10:47ID:???
いや、やっぱできてない。
エラー表示が、変わったからできたかと思ったんだけど・・・
今は、全てのバージョンを当たって確かめてます。
もうsageで。
071070202/04/17 12:04ID:???
やっぱ駄目。ActivePerlのバイナリ配布の全てのバージョンは
Thread使えませんでした。(まったく何なんだよ)
というわけでWin32::APIを使った方法でしかスレッドプログラミングは
できないのではないでしょうか?
0711nobodyさん02/04/17 15:01ID:???
コンパイルオプションでスレッドを有効にしてビルドしたPerlじゃないと
Threadは使えないよ。

perldoc perlthrtut
を見よ。
071270202/04/17 18:41ID:???
↑こんな英語の長文読めません。
もうThreadいいや。丸1日つぶしたわ。あほくせー。


0713nobodyさん02/04/17 19:06ID:???
そもそもどういうことをしたかったのさ?
071470202/04/17 19:59ID:???
>>713
Windows2K+ActivePerl+Perl/Tkで
CSVからデータを読み込んで、メールを一括送信するツールを作ろうかと。
その時に、メールの送信ループ部分をバックグラウンドで動かさないと
固まってしまうんですよ。
あと、送信処理をマルチスレッドにしれば、同時に複数のメールを
送れるから処理時間が短く済むかなと思ったのです。
071571102/04/17 21:17ID:???
>>714

送信処理のステップごとに

 $widget->update();

で誤魔化して見たり。
0716age02/04/18 00:37ID:???
Perl/Tkのテキストウィジェット使いにくい。
マウスホイール聞かない。
0717_gunzip02/04/18 00:50ID:???
>>716
マウスホイールは使えるよ。

#!/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:???
Perl/Tk最近使い始めたんだが、Textウィジェットに
日本語入れる時にインライン変換が使えないのだが。。。
日本語化されていないから諦めるしかない?
0719_gunzip02/04/18 02:07ID:???
>>714
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:???
>>719
ありがとう。。。素直に諦めます(涙
Perl2exe で GUI アプリを作ろうかなぁと色々試行錯誤していたのですが、
普通のGUIアプリレベルで作るのは難しそうですね。
ちょっと我慢すれば問題ない気もしますけど。
0721nobodyさん02/04/18 20:35ID:???
>>717
716じゃないが、Windowsの場合は<MouseWheel>を使えばいいのか。
ためになる。
0722nobodyさん02/04/19 23:12ID:???
perl5.8.0まだ?(・ε・)
0723nobodyさん02/04/20 11:40ID:M8cSsXMo
↑おうよ、それどうなった?
β版とかもまだなの?
0724nobodyさん02/04/20 11:45ID:M8cSsXMo
WindowsのPerlでGUIアプリケーション作る場合、
最高のGUI環境ってやっぱPerl/TKなんすかね?
もっと、Win32モジュールとか使ってVC++とかで使うような
GUIを使えないかな?
0725nobodyさん02/04/20 11:48ID:???
>>724
Win32APIが呼び出せるのならAPIプログラミングは可能ですわ。
CreateWindowExとか調べてみれば?
0726_gunzip02/04/20 12:21ID:???
>>724
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 ・・・ 使ったことがない。
後二者は日本語表示を可能にするパッチが転がってました。
0727nobodyさん02/04/20 13:18ID:???
>>723
βといやぁ、5.7.xがそう言えるんじゃないか?
0728nobodyさん02/04/20 14:46ID:???
>>726
サンクス!
確かにPerl/Tkはダサい。ただ簡単に使えるのがいいけど。
Win32::GUIは前々から気になってたんだけど勉強がてら
使ってみます。

>>727
なるほど。
まあ調べてみたら5.8.0は今年の5月にリリースらしいから
待ってみます。
0729_gunzip02/04/21 10:11ID:???
PRIMAというPerl用のツールキットを発見しましたが。
....(以下略)

http://www.prima.eu.org/
スクリーンショット http://www.prima.eu.org/big-picture/
0730nobodyさん02/04/21 13:49ID:???
Mac OS X用のCamelBonesとやらが良さそうだ。

http://camelbones.sourceforge.net/index.html
0731nobodyさん02/04/21 18:51ID:kERwwP8q
Perl/Tkで書かれたのを格好良く見せるこつってあるかな?
0732nobodyさん02/04/21 19:10ID:???
>>731
API互換の独自ライブラリを・・・w
0733_gunzip02/04/21 20:04ID:???
>>731
配色を変えてみたり($toplevel->setPalette())、ボーダーの値を変更してみたりってのは?
その際、いちいちコードの中にオプションの値を埋め込むのではなく、.Xdefaults
形式のファイルに纏めておいて、$toplevel->optionReadfile(filename, priority)
で読み込むと楽ちん。
0734nobodyさん02/04/22 07:01ID:LmMZGpbz
>>731
ウインドウの左上に表示されるTkのアイコン(?)がダサいよね。
あれ他のアイコンに変えられないかな?

-------------
|TK
-------------
|
|
|
|
0735_gunzip02/04/22 21:19ID:???
>>734
my $image = $mw->Pixmap(-file => "title.xpm");
$mw->Icon(-image => $image);
# ないし、$mw->iconimage($image);
0736_gunzip02/04/22 21:21ID:???
my $iconImage = $mw->Photo(-file => "icon.gif");
でもよろし
0737nobodyさん02/04/22 21:28ID:???
アイコンまで変えられるんだ!そりゃ知らなかった。
0738nobodyさん02/04/23 00:15ID:???
>>736
お前が居ると厨房がこの板を荒らすから、一ヶ月レス禁止。
0739nobodyさん02/04/23 01:14ID:???
738=厨房
0740nobodyさん02/04/23 04:50ID:???
じゃ、738 一ヶ月レス禁止。
0741nobodyさん02/04/23 18:46ID:???
>>736
Dream★や弐編を見習ってスキルをあげるんだな。



0742nobodyさん02/04/23 18:57ID:???
>>736
このスレの1だが、お前みたいな低レベル厨房は要らないからどこへでも消え失せろ
0743nobodyさん02/04/23 19:14ID:???
>>742
>このスレの1だが

...
0744nobodyさん02/04/23 19:37ID:???
(゚Д゚)ハア?
0745nobodyさん02/04/23 23:55ID:???
>>742
http://pc.2ch.net/test/read.cgi/php/990178547/67
0746nobodyさん02/04/24 00:33ID:???
>>745
ヒッサービサにワラタ
0747nobodyさん02/04/24 07:44ID:ZzM1BfC2
PHPとmod_perlって何がちがうのでしょうか?
素人考えでは、アパッチにモジュールとして組み込んで使うと理解している
のですが、なんだかPHPはメジャーでmod_perlはマイナーな気がします。
何か決定的な違いみたいなのがあるのでしょうか?
0748nobodyさん02/04/24 07:50ID:???
>>747
言語仕様。
0749nobodyさん02/04/24 08:37ID:???
mod_perlってのはApacheにPerlを組み込むためのフレームワークだがに。

だから
1) 一旦コンパイルしてメモリ上にロードされたモジュール類はApacheの子プロセスがexitするまでそのままメモリに残ってる
2) ApacheのAPIをPerlから使える
3) Apacheのフレームワーク内の随所にPerlで書いたハンドラーを組み込める

自分はPHP使いじゃないので知らないがPHPにも同様のものがあるのかも
しれん。でももし言語としてのPHPの話をしているのならそもそも比較自体がナンセンス。
0750nobodyさん02/04/24 12:13ID:???
_gunzipに粘着してる厨房さんは、病院からインターネットですか?
0751nobodyさん02/04/24 23:07ID:z19r++98
プロバのサービスにあるようなWeb上からパスワード変更のCGIを
作りたいのだが、サンプルないですか??
0752nobodyさん02/04/24 23:16ID:???
>>750←まさに今病院からカキコ
0753nobodyさん02/04/24 23:29ID:???
>>752 さっさと病室に帰ろうね。
0754nobodyさん02/04/24 23:30ID:???
>>751
スレタイトル読めますか。読めないんだろうね。
0755あぼーんNGNG
あぼーん
0756nobodyさん02/04/25 13:27ID:vqNaBvlX
Redhat LinaxでPerl5.6.0をインストールしようとすると
「./Configure」の後の「make」でエラーになってしまいます。

エラーは最後の行にこんな感じで表示されてました。
make: *** [miniperl] エラー1

Linaxにさわって間もないので、よくわからないのですが、
何かしなければいけないのでしょうか?
0757nobodyさん02/04/25 13:58ID:???
さすが兄貴、tar.gzですか。
まぁ、rpmにしたところで、apt-getにはかなわんな。
0758nobodyさん02/04/25 19:17ID:???
程度の低い書き込みはいらん
0759nobodyさん02/04/26 03:29ID:???
>>756
それだけじゃわからんので答えられないが、perl5.6.0はよしとけ。
コンパイルするんだったらちゃんとwww.perl.comから
perl5.6.1(stable.tar.gz)をひろってきなさいな。
076075602/04/26 07:26ID:xOSV8XDg
>>759
一応、www.perl.comから落としたstable.tar.gzなんですよ。
しょうがないので、perl5.005_03.tar.gzにしたら大丈夫でした。
076175902/04/26 07:37ID:???
>>760
ということはそれはperl5.6.1のはずだけど・・・ただの間違い?
できれば5.6.1のほうがいいよ。大分違うから。

次からはどこでこけたのかしっかり書き出すべし。
0762nobodyさん02/04/28 03:22ID:W+plYXX7
age
0763nobodyさん02/04/28 03:26ID:???
レベルの高い話題とは、具体的にどんなもの?
0764nobodyさん02/04/28 14:48ID:???
>>763
foreachの計算量とか。
0765nobodyさん02/04/28 15:21ID:???
>>764
>foreachの計算量とか。

?
0766nobodyさん02/04/28 15:33ID:???
>>763
!レベルの低い話題(誰でも判断可能)
0767ぺるにゃん02/04/28 19:48ID:gfGqCBjT
>>764
>foreachの計算量とか。

何のことですかにゃ???


そういえば、はるか昔、Perl 5.005 くらいか、

 foreach (1..1000000)
 とやったときに、巨大な配列を作らないようにしました。

という仕様変更を見ましたが、これってどういう仕組みなのかどなたかご存知ですか?

( ) の中を変数展開することなしに、foreach ループを実行するってことなのかなぁ。
そんなことができるんだったら、foreach (@big_array) も効率は悪くない。

そうではなくて、
「foreach ( 数字..数字 ) はよく使われる書法だから、この場合のみ最適化した」
というのであれば、foreach (@big_array) の効率が上がったわけではないのにゃ…。
0768nobodyさん02/04/28 20:54ID:???
>>767
昔は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の生成破棄にかかる時間を節約することができるからでしょう。
(とはいえ、わずかな時間ですから気にする必要は全くありません)
077076802/04/28 22:51ID:???
なるほど〜ご指摘感謝。
面白いなぁ。
0771nobodyさん02/04/28 23:43ID:???
このように、くだらなくない話題は見る人が見ないと基地外発言と勘違いされます。とw
0772nobodyさん02/04/29 08:55ID:???
`kill -KILL _gunzipのPID` if $user eq '_gunzip';
0773nobodyさん02/04/29 09:08ID:???
<>769は初心者です<>
0774nobodyさん02/04/29 09:27ID:???



`kill -KILL _gunzipのPID` if $user eq '_gunzip';



0775nobodyさん02/04/29 13:27ID:5LS+M/ng
>>771
haxa?
0776nobodyさん02/04/29 14:09ID:???
朝から粘着くんがんばるね。
0777nobodyさん02/04/29 14:12ID:NmdFgil6
必死だな。死ねよ
お前が消えるまでこのスレッドを荒らす
0778nobodyさん02/04/29 14:18ID:???
>>777
おまえ、風呂入ったか?くさいよ。
0779あぼーんNGNG
あぼーん
0780nobodyさん02/04/29 14:43ID:???
Perl/Tkに詳しい人お願い。
perl/tkで「何か」を作ることは出来る?
0781nobodyさん02/04/29 16:10ID:D6ncuE9T
Perl/Tkでテキストウェジットっていうのかな?
ブラウザで言うところの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:???
>>780
昔一瞬作ろうと思ったけどすぐ止めた。
変な形のWindowの作り方がわからなかったから。
まぁ、四角い箱の中で動くのならなんとかなるんじゃないか?
俺は作らないけど。
0783nobodyさん02/04/29 20:03ID:NmdFgil6
>>780,781
お前らには無理
0784nobodyさん02/04/29 20:18ID:???
>NmdFgil6
ごくろうさま
0785nobodyさん02/04/29 20:33ID:???
>>780 >>782
http://www.geocities.co.jp/SiliconValley-PaloAlto/2514/
頑張れ。>780
078678202/04/29 21:27ID:???
げ、出来るのか・・・・
とりあえずブックマークした。ありがとー。
と言うわけで頑張れ>780
0787nobodyさん02/04/29 21:43ID:NmdFgil6
(゚Д゚)ハァ?
0788nobodyさん02/04/29 22:40ID:???
>>771
>>くだらなくない話題は見る人が見ないと基地外発言と勘違いされます。
つまりこういう人か? >>772-774 (w
078970202/05/02 03:49ID:bk99oFiJ
先日、WindowsマシンでThread.pmを使おうともがいていた702です。
どうしても、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;
↑ここまで
079070202/05/02 03:53ID:bk99oFiJ
789で起こる「セグメントエラー」はエラー箇所をlock関数でlock
すれば回避できるのですが、それではThreadにした意味がありません。
何か対処法はないものでしょうか?
0791nobodyさん02/05/02 04:02ID:???
Thread.pmってのがよくわからないので何とも言えないが、
cygwin perlでfork()使うとか、Win32::Processじゃダメなの?
0792nobodyさん02/05/02 04:23ID:Opu6NMoF
ぷぷぷ分からないなら分からないと初めから言えよ(ppp
079370202/05/02 04:46ID:bk99oFiJ
Win32::Processってプログラム単位の呼び出しになるんですよね?
ではなくて、サブルーチン単位で処理を並列化したいのです。
(うまく言えてるかな?)Win32::Threadみたいなモジュールないですかね?
あと、上記789の問題は、LWPモジュールが並列処理に対応した作り方に
なっていないのではないかと勝手に考えているのですが・・・
どうなんでしょうか?
0794nobodyさん02/05/02 05:20ID:???
forkでよくねーか?
0795nobodyさん02/05/02 06:54ID:???
IO::SelectとIO::Socketの組み合わせで擬似的に並列処理するとか。
0796nobodyさん02/05/02 08:21ID:???
>>793
スレッドの独立性または排他処理は万全?
0797nobodyさん02/05/02 11:34ID:???
Win32のfork()って、OSから見るとスレッドじゃなかった?
違ってたらスマソ。

そもそもLWPってthread-safeだったっけ。
5.005でthreadオンにしてコンパイルすると、
$_が大域変数からレキシカルに変わるけど、その辺大丈夫?

あと、これは念のため聞くだけだけど、各スレッドごとにuaをひとつ作ってるよね。
■ このスレッドは過去ログ倉庫に格納されています