CGIに依存しないPerlの話題一般
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2001/05/31(木) 21:49ID:bKRSBFew・モジュール、オブジェクト指向プログラミング
・Perl6や.NET対応など
・各種GUIツールキット(Perl/Tk, Gtk-Perlなど)
・他言語による拡張(Inline::*, XS, Swigなど)
についてマターリと語り合うスレッドです。
#CGI関連の話題は、なるべく専用スレッドで。
0079名無しさん@お腹いっぱい。
2001/06/27(水) 22:18ID:???0080rubbish_lister
2001/06/27(水) 23:54ID:???0081名無しさん@お腹いっぱい。
2001/06/28(木) 00:23ID:???0082名無しさん@お腹いっぱい。
2001/06/28(木) 12:17ID:???STLはPerl使いにはうれしい機能(連想配列モドキとか)がいろいろついてるのでぜひ覚えておくことをお勧めする。
0083_gunzip
2001/06/28(木) 16:15ID:???取りあえず使えるのは C,Perl,Java,C# とか。(C++は知らない)
その前はsed,awk(gawk)とかやってたけど、Perl憶えて以来不要になった。
---------
Perl for .NETって、Perlで書かれたコードを一度C#コードに変換してから
cscでコンパイルして実行モジュール、DLLを作るみたいだね。
0084名無しさん@お腹いっぱい。
2001/06/28(木) 16:49ID:???# 社内用にチョコチョコ作らされるけど
Perl・・・・厨房程度
PHP・・・・同上
VB・・・・同上
Ruby・・・・厨房以下
・
・
・
Mind・・・・挫折(ワラ
N88-Basic・・・・プロ級(ウソ
初めて作ったプログラムは FamilyBasic用ゲームプログラム。
0085S
2001/06/28(木) 18:18ID:???C … 消防
Prolog … 園児
って感じです。
0086名無しさん@お腹いっぱい。
2001/06/28(木) 20:34ID:???っていうかこの条件って誰か別の人が作ったゲームのヤツだ…
俺が見たやつはクリアするとアレなイベントが起きるっていうヤツだったけど。
#アレって何よってのは察してくれ…
…パクリ?
0087名無しさん@お腹いっぱい。
2001/06/28(木) 22:00ID:DSCSsXU2某所で長らく話題にのぼりながら、一向に実現されないやつだな。
本因坊は決まっているのになあ。
0088名無しさん@お腹いっぱい。
2001/06/28(木) 22:05ID:???0089名無しさん@お腹いっぱい。
2001/06/28(木) 22:06ID:DSCSsXU2え、そんな新しいものだったのか。
土人と宣教師みたいなトラディショナルなやつかと思ってたよ。
プログラミングの教科書にのってるわけじゃないの?
0090_gunzip
2001/06/28(木) 22:09ID:???提督 + 副官 + 謎の老人 + その友人 の4人バージョン
もしかしてそれのこと?
0091名無しさん@お腹いっぱい。
2001/06/28(木) 22:10ID:???|母がいないと父は娘に手を出す
|父がいないと母は息子に手を出す
|執事がいないと犬は家族を食い殺す
こんな問題のってる教科書があるかよ!
0092名無しさん@お腹いっぱい。
2001/06/28(木) 22:50ID:???いや、おいらが最初に見たやつは、砂漠を行く話で、
「父」:=「王」
「母」:=「女王」
「息子」:=「皇子」
「娘」:=「皇女」
「執事」:=「猛獣使い」
「犬」:=「猛獣」
「手を出す」:=「殺す」
だった。
王位継承問題がこじれて……ってな設定をすれば、
十分教科書に出せると思うが。
ちょっとsearch spaceとかprologとか
missionaries and cannibalsとかで
サーチしてみたけど出てこなかったなあ。
0093名無しさん@お腹いっぱい。
2001/06/29(金) 02:28ID:???中学校の数学サイトで発見!
http://www.edu-c.pref.kumamoto.jp/ws/kcmathws/zibunde/kawa2/kawa2.html
その「アレなイベントが起きる」とかいう問題を
中学教師がパクって無難な設定に変えた可能性も高いが。
0094名無しさん@お腹いっぱい。
2001/06/29(金) 12:11ID:???いや、大元のネタはその辺りだと思うんだが。
手を出す食い殺すってのは、半年以上前(多分)に既に使われてるネタだってことだ。
#つーかすれ違いスマソ
0095名無しさん@お腹いっぱい。
2001/06/29(金) 15:40ID:???「手を出す食い殺す」設定→あるあるー
と思ってしまう俺はなにかに毒されているでしょうか。
0096名無しさん@お腹いっぱい。
2001/07/02(月) 17:48ID:cRPRYcUw0097なな
2001/07/02(月) 20:18ID:???/(だった|で((御座|ござ)(い|居)ま)?した|であ(っ|りまし)た)(な)?ら(ば)?
|であれば|(である)?なら(ば)?/
…氏にそう。おれに日本語を教えてくれ。いやマジで。
0098Name_Not_Found
2001/07/02(月) 20:54ID:???ワラタ
0099名無しさん@お腹いっぱい。
2001/07/02(月) 21:17ID:???無修正です。
0100_gunzip
2001/07/03(火) 01:08ID:???デザインが変わったね。
0101名無しさん@お腹いっぱい。
2001/07/03(火) 12:24ID:fLxGSuZsuse Perl;でも話題になってた。
Perlのメインサイトがオライリーっぽくなりすぎで興ざめだってさ。
0102rubbish_lister
2001/07/03(火) 17:26ID:???矢印演算子?まさかね…。
0103名無しさん@お腹いっぱい。
2001/07/03(火) 21:19ID:fLxGSuZsああ、それperl6-languageとperl6-internalsで話題になってたなあ。
Simon Cozensが「~」を提案して論争になってた。
どう終結したんだろう。
……(メールアーカイブを検索中)……
うむー、どうにもなってないなー。
Larryが反応するまで決まらなさそうだ。
興味のある人は "The Perl6 Emulator" から続く話をどうぞ。
http://archive.develooper.com/perl6-language%40perl.org/msg07598.html
0104名無しさん@お腹いっぱい。
2001/07/04(水) 13:12ID:???"100" + "100" が 200 になるっつうのがそもそもの間違い。
0105rubbish_lister
2001/07/04(水) 16:20ID:???"~" ですか…。
$str = $str ~ $str; $str ~= $str;
うーん…なにか間違っているような気が(汗
素直に参照/メソッド起動はアロー演算子、文字列結合はドット演算子としておけばいいのに。
0106名無しさん@お腹いっぱい。
2001/07/04(水) 20:52ID:dDBXzh2.文字列連結と数値的加算という、意味も動作もまったく違うものに
同じ演算子を使うのは混乱の元だと思う。
演算子オーバーロードに関してはLarryが
数学記号は数学的意味を表わす場合のみにしましょうね
という指針を示している。「+」を使っていいのは複素数とか行列みたいな、
交換法則と結合法則を満たすもののみに限定されるべきという話。
確かに文字列の連結って可換じゃないし、
逆演算を「-」で無理矢理定義してもピンと来ない。
文字列の連結に「+」を使うというのを最初に考えついた人って誰?
その人が素直じゃなかったんだと思う。Smalltalkのころ?
「末尾への連結」に「<<」を使うことを考えついた人もえらい。
常人の発想ではない。狂っている。
ストリームへの出力と配列へのpushを、
「末尾への連結と見れば同じ」と考えてかどうか知らないが、
「<<」という同じ記号っていうのも発想がすごい。
「>>」はきっとその逆演算なのだろうと予想できるが、
popなのかunshiftなのか、はたしてどっち?
Perl6のswitch文(仮名)もこの話と同類の気狂い仕様な気がするな。
これがRubyだと「メソッド===で比較」って言い方になって、
polymorphismというカプセルに入った結果、
同じ気狂い仕様なのに美しく見えるのは不思議だ。
0107名無しさん@お腹いっぱい。
2001/07/04(水) 22:11ID:???\____ ____/
 ̄ ̄ ̄∨ ̄ ̄ ̄
〃┏━━ 、
| ノノソハ)))
(\リリ;´Д⊂#ヽ
(ニ⊂[#~~'∞"_ノ
/__∞_|
し'(_f)
0108Perl好き
2001/07/04(水) 22:54ID:???今までRuby信者に汚いと罵られようと、感覚的にとても解りやすい言語だと思ってたが、
アロー廃止、$@%の意味変更は滅茶苦茶な愚行だ。
でももう決定事項なんだろうな。ああ鬱。
マジでRubyに移ろうかしら。
0109名無しさん@お腹いっぱい。
2001/07/05(木) 02:33ID:NIXF4Exg0110名無しさん@お腹いっぱい。
2001/07/05(木) 03:07ID:f2quMIhg予想では再来年のPerl Conference合わせくらいじゃなかったっけ。
0111名無しさん@お腹いっぱい。
2001/07/05(木) 06:48ID:j7I9hWXA全くもって同感
0112shige
2001/07/05(木) 11:19ID:???イエイ!
0113106
2001/07/05(木) 15:25ID:???配列の連結にも「+」を使うからねえ……。
そういえばCでもポインタの加算という意味のまったく
違う仕事を「+」と書いていたなあ。
「Perlは様々な組込関数のデフォルト挙動を、
たくさん覚えないと使えないからイヤ」って意見をよく聞くけど、
「OO言語は一見同じ記号でもクラスによって全然違う動作をするんで、
たくさん覚えないと使えないからイヤ」とはあまり聞かないね。
むしろ「全然違う動作でも意識せず同じ記号で使える」とか利点として
紹介されている。
でもRubyの言語仕様書とか見てると、
OO言語って演算子オーバーロードなしには、
言語仕様も定義できないのかな、と思ってしまう。
JavaはC++の反省からか演算子オーバーロードできないけど、
結果としてなにがしかの利便性は失われているみたいだ。
Perl6になるとARRAYの「+」は連結になったりするのかなあ。
Larryが防波堤になってくれると信じてるんだけど。
OOスレ逝った方がいいな。スレ違いスマソ。
0114名無しさん@お腹いっぱい。
2001/07/05(木) 15:27ID:???ま、Perl6でもPerl5のコードが走るはずだし、それに期待するしか。
0115名無しさん@お腹いっぱい。
2001/07/05(木) 16:32ID:???0116名無しさん@お腹いっぱい。
2001/07/05(木) 18:07ID:???うーん……
0117名無しさん@お腹いっぱい。
2001/07/06(金) 05:20ID:dr/SZh9Uhttp://corn.2ch.net/test/read.cgi?bbs=php&key=991966646
0118名無しさん@お腹いっぱい。
2001/07/06(金) 06:45ID:???0119名無しさん@お腹いっぱい。
2001/07/06(金) 10:18ID:???0120名無しさん@お腹いっぱい。
2001/07/06(金) 22:49ID:???0121名無しさん@お腹いっぱい。
2001/07/08(日) 22:16ID:???0122名無しさん@お腹いっぱい。
2001/07/09(月) 02:39ID:???なにがかわったん?
0123名無しさん@お腹いっぱい。
2001/07/09(月) 02:53ID:???知らん。
俺も知りたいYO!
0124名無しさん@お腹いっぱい。
2001/07/09(月) 10:27ID:???0125名無しさん@お腹いっぱい。
2001/07/09(月) 11:06ID:nTmH2gQU試してみた人いる?
0126名無しさん@お腹いっぱい。
2001/07/15(日) 22:57ID:3qwmQFts0127名無しさん@お腹いっぱい。
2001/07/16(月) 01:33ID:OyRSiVOsでてるよー。
http://search.cpan.org/search?dist=perl-5.7.2
僕はあえてdevelに挑戦するつもりないけど...。
0128_gunzip
2001/07/16(月) 21:00ID:???入れてみたけれど、unicode周りが変更になった他は
大して変わっていないみたいだね。
最近CPAN2の存在を知った・・・
http://cpan2.org/
0129名無しさん@お腹いっぱい。
2001/07/16(月) 21:32ID:4EOT0rSw#!/usr/bin/perl
BEGIN{
use overload '<<' => sub{
my($self, $str) = @_;
print {$self} $str;
return $self;
};
my $stdout = bless \*STDOUT;
*out = sub(){ $stdout };
}
exit;
out << "==========終了済み==========" << "\n";
__END__
このコードなんですが、実行するとexit()しているのも関わらず
"終了済み"と印字されます。
$stdoutがグローバル変数だったり
out()をsub out(){$stdout}で宣言すると何もせず終了します。
これはどういうことなんでしょうか。
環境:
WindowsMe ActivePerl 5.6.0.623
0131_gunzip
2001/07/17(火) 06:47ID:???ふぅ。オプティマイザの副作用の気がするなあ。
Perlが与えられたスクリプトを実行する際、コンパイルと実行段階の間に
オプティマイズという段階があって、定数値の埋め込み、
余計なシンボルテーブル検索の削除等を行うことになっている。
例えば、
print 4 + 5;
は、始めのOPコードへのコンパイルの段階で
「4(const)と5(const)をスタックにプッシュ、次にスタックから二つ値を取り出し、
それらを加算(add)、その値をprintで標準出力に出力せよ」
というコードが生成されるのわけだけれど、
Perlのオプティマイザは4と5が数値定数であるから、これらを予め計算して
「9をprintで標準出力に出力せよ」
というコードに修正する。(Perlのオプティマイザの働きについては
他にも色々とあるので、詳しく知りたければop.cのpeep()でも眺めてくれ)
0132_gunzip
2001/07/17(火) 06:48ID:???で、今回の場合、問題の
out << "==========終了済み==========";
についてだけれど、(ちょいと端折った)
out はBEGINブロックのpadlist内に閉じこめられた$stdoutを常に返す
*プロトタイプが空の*サブルーチンなので、オプティマイザによって
その返す値 $stdout に置き換えられる。
(サブルーチン呼び出しに伴う負荷を押さえるために、プロトタイプが空であり、
かつ定数値を返すものはその値に置き換えられることになっている。
constantプラグマなどがその良い例。)
(但しこれは正確ではない。&をつけて呼び出されたものは置き換えられない事に注意。)
で、次
「$stdout (blessed "main")」<< "==========終了済み==========";
シフト演算子"<<"(Perl内部の"left-shift"コード)の子は
何れも定数であるため、オプティマイザは(上でも見たように)
これを予め実行した結果に置き換えようとし、その結果、オーバーライドされた
メソッド(3-7行目)が呼び出され、「"==========終了済み=========="」が出力される、
というわけ。
これらは全て**実行段階前**に行われるので、exit()やdie()の順序は意味を持たない。
試しに、
*out = sub(){ $stdout };
の()を外したり、後ろのout呼び出しに&プレフィックスをつけると、
表示されなくなることを確かめてみればいい。
#いつもながら、間違っている箇所があれば訂正してくれると嬉しい。
0133名無しさん@お腹いっぱい。
2001/07/17(火) 07:07ID:???0134名無しさん@お腹いっぱい。
2001/07/17(火) 07:34ID:???あなたマジすげえ。
0135129
2001/07/17(火) 14:56ID:???コンパイル時に実行される計算だったわけですか。
確かに-cスイッチの元で実行しても"終了済み"と印字されました。
しかし、"*out = sub(){...}"を"sub out(){...}"に変更すると
そのような置き換えは発生しないのですが、これは何故なんでしょうか。
お手数かけますが、教えてください。
>>133-134
激しく同意っす。
0136_gunzip
2001/07/17(火) 17:43ID:???>しかし、"*out = sub(){...}"を"sub out(){...}"に変更すると
ちょっと確認するけれど、これは
-----------------------------------
#!/usr/bin/perl
BEGIN{
use overload '<<' => sub{
my($self, $str) = @_;
print {$self} $str;
return $self;
};
my $stdout = bless \*STDOUT;
}
sub out(){ $stdout };
exit;
out << "==========終了済み==========" << "\n";
------------------------------------
のようにoutの宣言をBEGINブロックから外に出した場合だよね?
0137_gunzip
2001/07/17(火) 18:02ID:???#!/usr/bin/perl
BEGIN{
use overload '<<' => sub{
my($self, $str) = @_;
print {$self} $str;
return $self;
};
my $stdout = bless \*STDOUT;
sub out(){ $stdout };
}
exit;
out << "==========終了済み==========" << "\n";
------------------------------------
ならOKだが....。
サブルーチンがインライン化されて定数値に置き換えられるためには
そのサブルーチンのプロトタイプが空であり、かつ、その返す値が
単なる定数値(4とか"hello"とか)であるか、又は、
**レキシカルスコープを持ち、かつ他から一切参照されない**
(この場合の$stdoutがそう)スカラー値でなくてはならない。
0139名無しさん@お腹いっぱい。
2001/07/18(水) 07:51ID:???基本的な考え方は>>64と変わらないものの、
IDに安全な値を使っているのでTie::Staticの方がマトモか…。
しかし見ていて飽きないですね、CPAN。
0140_gunzip
2001/07/18(水) 23:41ID:???(Jcode.pm以外見たことがない)
0141名無しさん@お腹いっぱい。
2001/07/18(水) 23:49ID:???0142名無しさん@お腹いっぱい。
2001/07/18(水) 23:58ID:???CGIメーリングリストの人に何人かいなかった?
0143名無しさん@お腹いっぱい。
2001/07/19(木) 00:00ID:???0144名無しさん@お腹いっぱい。
2001/07/19(木) 00:01ID:???DBI MLのかわいさん (例のエクセルのやつとか、バーコードのやつ)とか
perl-ooのみやがわさん(macバイナリカッターとか)とか
20人ぐらいはいると思う。
# どうでもいいけど、梅田紀伊国屋コンピュータ書コーナー配置換え。
#もともとおかしかったけど、さらに逝って良しな書店になった。
#場所は便利なのになあ。
0145名無しさん@お腹いっぱい。
2001/07/19(木) 00:05ID:???といってもこのJcode.pm含めて3人しか知りませんが。
…しかも全部文字コード関係だし(^^;
http://search.cpan.org/search?dist=CGI-ConvertParam
http://search.cpan.org/search?dist=ShiftJIS-Regexp
http://search.cpan.org/search?dist=Jcode
ガンバレ日本人!
ところでcpan2とsearch.cpanって何処が違うんでしょ。
付加分散の為?
0146JAPU
2001/07/19(木) 00:30ID:???http://search.cpan.org/search?dist=Roman
0147_gunzip
2001/07/19(木) 05:57ID:???>>143 あ、ど忘れしてました。川合氏ですね。(バーコードも)
>>144
macバイナリカッターの方は初耳だった....。
梅田紀伊国屋といえば、何時行っても人が多い
&& コンピュータ書コーナーは隅っこで本も少な目という印象があるな...。
京橋紀伊国屋が出来てからは、大抵そこで済ますようになったし、
無ければ新地のジュンク堂に行けばいいということもあって、梅田の方には最近殆ど行かない。
>>145
いろいろ教えてくれてありがとう。
search.cpan2.orgもあるみたい.。(中身は何もないけれど)
http://search.cpan2.org/
やはり負荷削減のためか.....。
http://take23.org/news/2001/01/26/cpan2.xml
>>146 ありがとうございます。探せば色々と有るものですね。
# 自分も何か貢献出来るようなネタがあるかな...と思ったが....
# CPANを探せば大抵は揃っているようですね。
0148____________________
2001/07/19(木) 06:30ID:???$s = new A();
$s->foo = "hoge";
$s->bar *= 50;
(foo, barはメンバ)
みたいな書き方は出来ますか?
トリッキーなのでもイイです。
0149_gunzip
2001/07/19(木) 06:47ID:???lvalue属性を使えば簡単に実現出来るよ。
詳しくはperldoc perlsubの"lvalue subroutine"セクションや、
attributeプラグマのマニュアルを読んでくれ。
#!/usr/bin/perl -w
package Point;
use strict;
use overload q{""} => sub { sprintf("(%d,%d)", $_[0]->x, $_[0]->y) };
sub new
{
my $class = shift;
return bless { x => $_[0], y => $_[1] }, $class;
}
sub x :lvalue method
{
shift->{ x };
}
sub y :lvalue method
{
shift->{ y };
}
package main;
our $p = new Point(1, 15);
print "\$p = $p\n";
#X座標を5倍、Y座標に20代入
$p->x *= 5;
$p->y = 20;
print "\$p = $p\n";
0150名無しさん
2001/07/19(木) 07:42ID:???ここのShellExtCtrlってソフト
結構使いやすい
Windowsで.plファイルが.batみたいに使えるようになる
0151名無しさん@お腹いっぱい。
2001/07/19(木) 10:32ID:mCZ55RKwActivePerl付属の pl2bat じゃだめなの?
ドロップすれば @ARGVにファイル名が入るのは一緒だし。
0152名無しさん@お腹いっぱい。
2001/07/19(木) 19:00ID:???パイプ繋がるから。
0154わ、
2001/07/20(金) 03:51ID:O.8zSDuM0155名無しさん@お腹いっぱい。
2001/07/20(金) 06:56ID:C8dQMlbs最近perlを憶えたのですが、自分で色々課題を出して解こうとしています。
しかし記念すべき第一号の課題から躓いてしまっています・・・。
あるディレクトリ内にファイル名に全く統一性のないファイルが複数あるとします。
そのファイルのどれだか分からない一部のファイル群に『HOGEHOGE』という文字
があり、それを『FUGAFUGA』という文字に変更するにはどうすれば良いのでしょう
?HOGEHOGEという文字は一つのファイルに一度しか出てきません。
スクリプトを作ろうとしたのですがうまく行かず、結局ここの方に頼ることに・・・。
また、この作業をperlを使ってコマンドラインから実行する方法も是非。
0156名無しさん@お腹いっぱい。
2001/07/20(金) 07:39ID:???どちらかと言うとPerl初心者コーナーの方が適当だと思いますが。
とりあえずヒントだけ。
rename($oldfile => $newfile); # 名前変更
use IO::Dir;
@files = IO::Dir->new($dir)->read; # ディレクトリ$dirにあるファイル名全てを得る
0157名無しさん@お腹いっぱい。
2001/07/20(金) 12:26ID:???カレントディレクトリ(サブディレクトリは除外)限定の場合
0158155
2001/07/20(金) 18:30ID:69JZH5Is>>157
すみません。訊き方方が悪かったです。
HOGEHOGEはファイル名ではなく、ファイルの中に書いてある内容です。
0159名無しさん@お腹いっぱい。
2001/07/20(金) 20:27ID:???まずうまく逝かなかったスクリプトを上げるべきだと思うのだが、
いかがかな?
それが無いようであれば、「教えて君」と見なし、以後放置するよ。
0160155
2001/07/20(金) 23:36ID:8VNGZ9tA【Perl 】初心者コーナーPart5に移動しました。
0161名無しさん@お腹いっぱい。
2001/07/23(月) 23:33ID:D.yGMh3Q0162_gunzip
2001/07/25(水) 20:21ID:???Perl.NETはbeta3になっているけれど、試した人いるかな?
(今のところWindows2000,NTでしか動作しないそうなので試せない。)
Perl.NETで、MS Windows上でもPerlで単体実行ファイル(PEじゃないが)や、
DLLを作り、それを C#, C++,JScriptから呼び出したり、逆にC#, C++のクラスライブラリを
Perlから簡単に利用できるようになるらしいな。(実際は知らんが)
0163名無しさん@お腹いっぱい。
2001/08/05(日) 06:15ID:???pack(chr(++$*+$*+++$**$*.
$*),$=))+--$* .. ord(pack
(chr($*+$*+++$**$*.$*),$=
))+--$*+$*++-(($*-$***$*)
)+$*+++$***$*-$*---$**$*,
$***$***$**$*){push@_,$_}
;foreach($***$**$*+$*/$*,
$***$**$**$*+$**$*,$***$*
*$**$*+$*,$***$**$**$*+$*
*$*-$*/$*,$**$**$**$**$*-
$**$**$*+$*,$*-$*,$**$***
$**$*-$*-$*/$*,$**$***$**
$*-$*,$***$***$*+$**$*-$*
/$*,$**$**$*-$*/$*,$**$*,
$***$***$*+$*/$*,$**$**$*
*$**$*-$**$**$*+$*,$***$*
**$*-$*/$*,$**$*,$***$***
$*+$*/$*,$***$**$*+$*+$*/
$*,$***$**$**$**$*-$**$**
$*+$*,$***$**$*-$*/$*,$*-
$*,$*,$***$**$*+$*,$**$*,
pack(chr$**$**$**$**$**$*
+$**$*+$*/$*-$*,$_[$_]);}
こんなことして遊んでいる方とかいますか?
いたら是非あなたの作品を見せてください。
0164名無しさん@お腹いっぱい。
2001/08/06(月) 00:10ID:oWP36vTo改訂(日本語)は青だよね?
0165名無しさん@お腹いっぱい。
2001/08/06(月) 00:11ID:???参考書スレッドがありました。
そっちにコピペします。
0166名無しさん@お腹いっぱい。
2001/08/06(月) 12:33ID:???うーん、その手の話題はプログラム板とかのほうが食いつきがいいんでは?
回文プログラムとかトリッキーなプログラムとかのスレあるし。
0167名無しさん@お腹いっぱい。
2001/08/09(木) 03:07ID:bI3E6lI.http://www.cpan2.org
http://www.cpan2.com
0168名無しさん@お腹いっぱい。
2001/08/13(月) 14:23ID:???my ($name, $mail, $date, $contents) = split /<>/, $line;
ってやるよりも
$line =~ /(.*?)<>(.*?)<>(.*?)<>(.*?)/;
my ($name, $mail, $date, $contents) = ($1, $2, $3, $4);
ってやったほうが速いんですね。
見やすい、書きやすい以外のsplitを使う理由があれば教えてください。
また、もっと速い方法があるならばそちらも教えていただけませんか?
0169名無しさん@お腹いっぱい。
2001/08/13(月) 15:27ID:???嘘はいけません。
my ($name, $mail, $date, $contents) = split /<>/, $line;
こっちの方が圧倒的に早い。
データ量によっては、
my @data = split /<>/,$line;
の方が早い。
my は付けない方が早い。
ちなみにスレ違い。このような話題は初心者コーナーへ。
0170名無しさん@お腹いっぱい。
2001/08/13(月) 17:00ID:???別に嘘を言いたかったわけではなくて、
use Benchmark;
my $line = "name<>mail<>date<>contents";
timethese(100000, {
foo => sub { my ($name, $mail, $date, $contents) = split /<>/, $line },
bar => sub { $line =~ /(.*?)<>(.*?)<>(.*?)<>(.*?)/;
my ($name, $mail, $date, $contents)= ($1, $2, $3, $4); }
});
ってやったときに、barの方が速いという結果が出たから質問したんですが・・・・
これは何故ですか?
あと、どこまでが初心者コーナー行きかの線引きがわかりません。
私としては、初心者コーナーはリファレンスを引けばわかるようなことを
やるところだと思っていたのですが。
0171名無しさん@お腹いっぱい。
2001/08/13(月) 17:38ID:???use Benchmark;
my $line = "name<>mail<>date<>contents";
timethese(100000, {
bar => sub { my ($name, $mail, $date, $contents) = split /<>/, $line },
foo => sub { $line =~ /(.*?)<>(.*?)<>(.*?)<>(.*?)/;
my ($name, $mail, $date, $contents)= ($1, $2, $3, $4); }
});
ってやったときに、barの方が速いという結果が出るのですが、
何故だか分かりますか?(>>170 のfooとbarを入れ替えている)
>>初心者コーナーはリファレンスを引けばわかるようなこと
まさしく貴方は初心者コーナーへどうぞ。
0172名無しさん@お腹いっぱい。
2001/08/13(月) 19:51ID:???my ($name, $mail, $date, $contents) = split /<>/, $line
},
bar => sub {
$line =~ /(.*?)<>(.*?)<>(.*?)<>(.*?)/;
my ($name, $mail, $date, $contents)= ($1, $2, $3, $4)
}
#-----------------------#
Benchmark: timing 100000 iterations of bar, foo...
bar: 12 wallclock secs (10.19 usr + 0.00 sys = 10.19 CPU) @ 9817.40/s (n
=100000)
foo: 7 wallclock secs ( 5.93 usr + 0.00 sys = 5.93 CPU) @ 16866.25/s (
n=100000)
0173名無しさん@お腹いっぱい。
2001/08/15(水) 00:30ID:???# どうでっしゃろ。
package OpenSaver;
use strict;
use Carp;
use Symbol;
use constant SAVE_FH => 0;
use constant ARG_FH => 1;
use constant OPEN_MODE => 2;
my $pkg = __PACKAGE__;
sub new{
my $class = ref($_[0]) ? ref(shift) : shift;
@_ or croak("$pkg: usage $pkg->new(opned-FileHandle, file[, mode]");
my($fh, $file, $mode) = @_;
$mode ||= do{ $file =~ s/^([+<>]+)//; $1 || '<'};
my $self = bless [
gensym(),
qualify_to_ref($fh, caller),
_open_mode_string($mode)
], $class;
open $self->[SAVE_FH], "$self->[OPEN_MODE]&" . fileno($fh) or croak("$pkg: open error:$!");
open $self->[ARG_FH], "$mode$file" or croak("$pkg: open error:$!");
return $self;
}
sub DESTROY{
my $self = shift;
open $self->[ARG_FH], "$self->[OPEN_MODE]&" . fileno($self->[SAVE_FH]);
}
sub _open_mode_string {
my ($mode) = @_;
$mode =~ /^\+?(<|>>?)$/
or $mode =~ s/^r(\+?)$/$1</
or $mode =~ s/^w(\+?)$/$1>/
or $mode =~ s/^a(\+?)$/$1>>/
or croak "$pkg: bad open mode: $mode";
return $mode;
}
1;
__END__
#usage
use OpenSaver;
{
my $opensaver = new OpenSaver(STDOUT, 'test.txt', 'w') or die $!;
print "This is test.txt\n";
}
print "This is display\n";
0174名無しさん@お腹いっぱい。
2001/08/16(木) 00:03ID:???自分でも色んなコマンドもどき書いてるんだけど全然違います(-▽-;
モジュールの使い方とか参考になるなぁこれ、
0175恥ずかしながら
2001/08/17(金) 01:35ID:???それ故、オブジェクト指向的な書き方が未だに分からないのであります。
自分の書くコードはPerl4とPerl5がイビツに混じっているのであります。
逝ってよしでありますか?
0176名無しさん@お腹いっぱい。
2001/08/17(金) 10:43ID:xrVq7k..日本のPerlを書く人(というかCGIを書くのにPerlを使ってるヒトか)の9割方(感覚値)がそんな感じだろうから気にしないでいいよ。
裾野が広いから色々在るのは当然。んでもそのままだと、恥ずかしい思いをすることも在るので Effective Perlや perldoc perlstylを一読することを激しくお勧め。
http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
http://www.kt.rim.or.jp/~kbk/perl5.005/perlstyle.html
0177名無しさん@お腹いっぱい。
2001/08/19(日) 02:16ID:i6ZuuVgY0178名無しさん@お腹いっぱい。
2001/08/19(日) 02:36ID:???コンパイル可能(?)なPerl6でなら…誰かやるのかねぇ。
0179名無しさん@お腹いっぱい。
2001/08/19(日) 02:43ID:???カーネルとPerl処理系のみで、システムは全てPerlで書くとか。
ダメかなぁ。知識0厨房でスマソ。
でもこれだったらスゴック小さい&軽いOSができそうだけどなぁ。
■ このスレッドは過去ログ倉庫に格納されています