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

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

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

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

#CGI関連の話題は、なるべく専用スレッドで。
0658名無しさん@お腹いっぱい。02/03/31 20:19ID:T8l4eNTu
こんにちは。
@ARGV から与えたファイルの中身を(行単位でなく)スカラー変数の
中に押し込んで文字列置換をしたいのですが、今までだと

while(<>){ $data = "$data$_" }

とやっていました。もっとスマートなやり方は無いでしょうか?
(きっとあるはず・・・)
0659nobodyさん02/03/31 20:33ID:???
join '',@ARGV;
0660名無しさん@お腹いっぱい。02/03/31 20:44ID:???
>>659
ヒントをありがとうございました。
$_=join '',<>; で逝けました。
0661nobodyさん02/04/01 14:56ID:s5HvuRgH
http://www.cpan.org/

ぐわーっ
"Comprehensive Java Archive Network"って有ったら欲しいな。マジで。
0662nobodyさん02/04/02 08:00ID:RKDNLMgY
>>661
ワラタ

2日になったのに残ってる…と思ったらあちらさんはまだ1日か。
0663あぼーんNGNG
あぼーん
0664nobodyさん02/04/05 03:45ID:4R486XR6
プログラム板から来ました。
Perlの話題はやっぱこっちかなと思ったので。

早速ですが、拡張正規表現の(?>パターン)の使い方が分かりません。
Perl5から実装されているはずなのですが、らくだ本にも載ってません。
少ない情報から使い方を判断するに、

m/(?>パターン1)パターン2/ だと、
パターン1にマッチしたもの以外でパターン2にマッチしたもの
のような感じだと思うのですが違いますか?
0665nobodyさん02/04/05 08:13ID:???
> (?>パターン)
> 最短マッチを行う独立した部分正規表現です。このパターンにマッチした部分の
> 文字列は、(?>パターン)のあとのマッチ対象からは除去されます。これを利用
> すると、マッチしないパターンの識別が高速化されます。
066666402/04/05 09:46ID:Qaev8skv
↑ポケットリファレンスでしょ?
でも使い方まで載ってないんだなぁ。
0667nobodyさん02/04/05 09:58ID:???
(?>pattern)はperlreを読む限りでは、実験的で予告なしに改変したり
削除するかもってことだから、使わないのが吉かと。
使い方はperlreを参照。
http://www.perldoc.com/perl5.6.1/pod/perlre.html#(-%3epattern)
0668nobodyさん02/04/05 10:02ID:???
perldoc perlreでも見てみれば?
0669nobodyさん02/04/05 10:07ID:???
667,668
ケコーン!
↑これが一発で変換できてしまうのが悲しい。
2ちゃんに書けば書くほどATOKがバカになっていく。
0670nobodyさん02/04/06 01:51ID:XOUDqeQ1
WindowsMeでActivePerlを使っているのですが
SendToにPerlスクリプトを入れてバッチ処理みたいなことを
させたりということはできないんですか?
0671nobodyさん02/04/06 05:23ID:???
>670
実際にわたしはそれをやっていますが、できなかったの? 実際にやってみたの?
やったかどうかも書いてないが、ネタか?
0672nobodyさん02/04/06 09:03ID:???
>>670
sendtoと言わずに関連づけしなさいな。
0673nobodyさん02/04/07 00:32ID:1v+8pn8G
>>672
ちなみにwin2kなんだけど
関連付けても出来なかったんだけど?
0674nobodyさん02/04/07 00:33ID:???
>>673
不満なら自分で調べれば?
2k使えるくらいだから常識くらいはあるだろ。
067567302/04/07 00:35ID:???
つーかわざわざSendToに入れるのめんどくさいんだけど
067667302/04/07 00:37ID:???
>>674
いちおう検索エンジンくらいは調べたつもりなんだけどねぇ
0677nobodyさん02/04/07 00:38ID:???
バッチファイル(.bat)でも作れば?
@hogehoge.pl %*
とか
@perl hogehoge.pl %*
でもいいけど。
hogehoge.plは見つけられるようにしてくれ。
0678 02/04/07 05:17ID:???
>>677
自分もバッチファイルで対応してるけど、これが普通なの?
いちいちバッチファイル作るの面倒くさい。
9x系の時は、PIFファイルを置いてたけど。。。

>>675
フォルダやファイルを引数にして、スクリプトを実行
させる場合は、SendTo が便利。
0679nobodyさん02/04/07 09:35ID:???
>>678
ActivePerlにPerl→bat変換するバッチファイルがついているので
それを使えば?
0680nobodyさん02/04/07 11:16ID:???
数値のグラフ化って、みんなどうしてる?

たとえば、アクセス数をグラフ化したり、ここの
http://www.yakin.cc/
転送量のグラフみたいなものだけど、こういうのの生成って
やっぱしCかなんかで書いているのかなぁ?

このあたりをお聞かせ下さい。
0681nobodyさん02/04/07 11:20ID:???
>>680
img src="1.gif" hright="' + $graph * 8 + '"
0682nobodyさん02/04/07 11:24ID:???
GD::Graph使ってる。
重いけど、難があるほどじゃないから、まぁいいか、と。
0683 02/04/07 15:34ID:???
>>679
さんくす。
perl\bin\pl2bat.bat だよね。

これって、Perlスクリプト自体をバッチファイルに埋め込んで
実行させるのか。何か強引だな。

>>677
やっぱり単純にperlスクリプトを呼び出すだけの一行バッチファイルを
SendToフォルダに置くのが一番シンプルなのか。。。

参考
http://www.kt.rim.or.jp/~kbk/perl5.005/perlwin32.html#item_Perl
http://www.harukaze.net/~mishima/perl/faq/perlwin32faq/perlwin32faq4j.html#What_s_the_equivalent_of_the_she
0684nobodyさん02/04/08 02:45ID:???
vectorにこんなのあったぞ
Win2000用らしいけど
http://www.vector.co.jp/soft/winnt/util/se230667.html
試してないからどんなやつかは知らんが
説明みるかぎりバッチファイル化の手間を省いてくれそうな感じだが
068567302/04/09 00:59ID:???
>>684
使ってみたよ
とりあえずSendToはOKになった、ありがとね
0686nobodyさん02/04/10 09:49ID:???
perlのプログラムをコンパイルする方法ない?
0687nobodyさん02/04/10 10:11ID:qeJW7E0p
>>686
えーー(;´Д`)
0688nobodyさん02/04/10 12:16ID:???
>>686
perlcc
0689nobodyさん02/04/10 16:56ID:???
>>686
Windows用ならPerl2Exe
0690nobodyさん02/04/16 02:22ID:???
2次元配列の初期化するのに、例えば三列二行の二次元配列を
全て0にするには、
$var = 0 ;
@array = (
[ $var , $var , $var ] ,
[ $var , $var , $var ]
) ;
は分かるのですが、列数と行数を与えて初期化
するのはどのようにしたらいいのでしょうか?
$retsu = 5 ;
$gyou = 3 ;
$var = 0 ;
・・・ここから行き詰まってます。
ヒントでもお教え下さいませ。
0691注意02/04/16 02:28ID:???
690はネタなので相手にしないこと。
0692やさしいお兄さん02/04/16 02:41ID:???
>690
ネタでも敢えて...

$zero= 0; $col= 5; $row= 2;

$rec= [($zero) x $col];
push(@set, $rec) while ($row--);
0693_gunzip02/04/16 02:43ID:???
答えようと思ってリロードしたら...
>>690ってネタなんですか?

ネタ(?)にマジレス格好悪いが...
>>690
-------
#!/usr/bin/perl

use strict;

my $row = 3;
my $col = 5;
my $init = 0; # 初期値

my @array = map { [ ($init) x $row ] } 0 .. $col;
--------
0694_gunzip02/04/16 02:45ID:???
先越されたよい。書く前にもう一回リロードすれば良かった。

0695やさしいお兄さん02/04/16 02:49ID:???
>692
ほんとは
push(@set, [($zero) x $col]) while ($row--);
ってやらないと同じアドレスを参照するから気を付けて!
0696やさしいお兄さん02/04/16 03:01ID:???
>693
row と col の意味が逆だし、0 .. $col だと1つ多いと言ったか言わないか
のうちに送信するテスト。
0697_gunzip02/04/16 03:02ID:???
>my @array = map { [ ($init) x $col ] } 1 .. $row;
訂正。
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にはかなわんな。
■ このスレッドは過去ログ倉庫に格納されています