1 :
名無しさん@お腹いっぱい。 :
2001/05/31(木) 21:49 ID:bKRSBFew ・コマンドラインからのPerl活用 ・モジュール、オブジェクト指向プログラミング ・Perl6や.NET対応など ・各種GUIツールキット(Perl/Tk, Gtk-Perlなど) ・他言語による拡張(Inline::*, XS, Swigなど) についてマターリと語り合うスレッドです。 #CGI関連の話題は、なるべく専用スレッドで。
-----------------------------
Perl5.7.1(devel)ではハッシュ関数(hv.h内のマクロPERL_HASH)が
変更されているようですね。
/* hv.h 49-62 */
#define PERL_HASH(hash,str,len) \
STMT_START { \
register const char *s_PeRlHaSh = str; \
register I32 i_PeRlHaSh = len; \
register U32 hash_PeRlHaSh = 0; \
while (i_PeRlHaSh--) { \
hash_PeRlHaSh += *s_PeRlHaSh++; \
hash_PeRlHaSh += (hash_PeRlHaSh << 10); \
hash_PeRlHaSh ^= (hash_PeRlHaSh >> 6); \
} \
hash_PeRlHaSh += (hash_PeRlHaSh << 3); \
hash_PeRlHaSh ^= (hash_PeRlHaSh >> 11); \
(hash) = (hash_PeRlHaSh + (hash_PeRlHaSh << 15)); \
} STMT_END
詳細は↓ここに記載されています。
http://burtleburtle.net/bob/hash/doobs.html -----------------------------
・・・とか、こういった話題でいいのかな?
えと、とにかく初めのうちは積極的に寝たふりをお願いします。
#「俺はPerlをこんな風に活用している」とか、誰でも取り付きやすい話題があると賑わうのかな。
誤>積極的に寝たふりをお願いします。 正>積極的にネタ振りをお願いします。 森首相じゃあるまいし....
Perlのソースの話題…ですか うう…レベルが違う(汗
6 :
(・ε・ :2001/06/01(金) 02:17 ID:NgAAv9OY
いきなり厨房書き込みなんですけど、DOSのバッチでファイル名を 一括変換したり、秀のマクロで文字列変換するような作業を、スクリプト でやってみようと思っています。 それで、Linuxのシェルスクリプトかperlを学ぼうを思ってるんです が、貧乏なんで本が一冊しか買えません(^_^;) bashで初めるシェルスクリプトか、オライリーさんのラマ本、、、、、 ん〜、どっちを買うべきだろう、、、、、、貧乏はいやだ〜
7 :
(・ε・ :2001/06/01(金) 02:23 ID:???
うっ、何か場違いな感じ、、皆さんで話しあって立てたスレなんですね。 消えますー。
8 :
名無しさん@お腹いっぱい。 :2001/06/01(金) 03:13 ID:A0sV3i8w
>>6 「CGIに依存しないPerlの話題一般」にはあてはまるんでない?
俺としてはPerlのほうをお勧めするよ。普及率で言えば
シェル >> Perl
だけれど、Perlのほうができることが多いし、DOSのバッチ的な用途にも
Perlはすごく向いている。
>>4 あう、ソースを眺めていたらたまたま気づいただけです.....。
気軽に逝きませう。
>>5 確かに訳分からなくなりそうだ.....。
今までの$foo->[$n] が $foo[$n] (or $foo.[$n])で、$foo{bar} が %foo{bar} か.......。
うう.......慣れるまでの辛抱か。
ところでis演算子っていい感じ....(この辺りは意見が分かれるのかな)
サブルーチンの名前付きパラメータも有り難い。
>>6 -7
bashシェルプログラミングと、Perlが共に学べる(らしい)
http://www.amazon.co.jp/exec/obidos/ASIN/4886485243/249-4475496-7314707 のような本もありますよ。
(自分は持っていないので、薦めて良いのかちょっと自信がありませんが)
ちなみに、Shellモジュールを利用すれば、シェルスクリプトを書く感覚で
Perlスクリプトを書くことが出来ます。
#でもやっぱりシェルスクリプトも書けた方がいいです。(はい)
11 :
あげ :2001/06/01(金) 15:35 ID:???
Perl/Tkの話題も欲しいあげ
12 :
(・ε・ :2001/06/01(金) 19:29 ID:NgAAv9OY
8さん、gunzipさん有難うございます。 8さんのおっしゃる様に取り合えずシェルはmanと睨めっこして perlの本を買おうかな、、と思ったら、、、 >bashシェルプログラミングと、Perlが共に学べる(らしい) 良いッス、欲しいッス、直撃です(^ ^ )、同じ処理をbashとpealで 並べてくれてたりしたらいいなー、明日早速探しに行って見ます。 >Perl Power Tools: The Unix Reconstruction Project こっちも凄いですね、厨房的には"perlって凄い"としか言えませんが (^^;; しかも、かなりのコマンドがサポートされてるんですね。 頂いて、見てみます。 とても役立つご意見でした、有難う御座いました。 やっぱり聞いてよかったー
13 :
名無しさん@お腹いっぱい。 :2001/06/07(木) 04:54 ID:G2lWQh7I
>>13 256バイトは少ないよなぁ。
せめて7行は欲しいところ。
ARGVをevalするのは反則。
IO::Socketをuseするのも反則。
warningプラグマって凄くメモリ食いそう(大きなハッシュを保持) なんだけど、どうなの?
>>14 7行あれば DVD のデコードができるもんね(w
プログラム技術板で、船渡し問題を解いてたよね。
19 :
.pl :2001/06/09(土) 00:05 ID:LnGQ.bng
むむ、なんだこりゃ? 今日初めて気がついた… #!/usr/bin/perl use strict; &set_foo; my $foo; print $foo; sub set_foo{ $foo = 'bar'; } __END__ うーん…変なの(++
20 :
名無しさん@お腹いっぱい。 :2001/06/09(土) 18:55 ID:edu.PDfo
21 :
名無しさん@お腹いっぱい。 :2001/06/09(土) 19:05 ID:G7GneXHo
ん〜、 #!/usr/local/bin/perl use strict; $foo = "bar"; my $foo; print $foo; __END__ ってやってみるとわかるよ。 やってることは同じように見えるけど実行結果が違う。 これの use strict をはずした奴もやってみると吉。
正直言って、ろくな話題がでないな。
>特殊文字って何? >\/*$%#&"!とか?(m スレお間違えですか?ここは 「CGIに依存しないPerlの話題一般」 です。
25 :
enhydra :2001/06/10(日) 18:01 ID:5nh0OkNc
>> 15 大丈夫、100Kbyte前後しか増えないから。
>>25 CGIスクリプトとして動作させる場合はかなりやばいんじゃ…。
…と、思ったが、CGI.pmは+700kb近いな…warnings程度は余裕か。
27 :
(-_-;;) :2001/06/10(日) 21:37 ID:wIreiASQ
すいませんGUIデバッガが必要なスクリプト書いたこと無いです(;´Д`)
すいませんGUIなんて書いた事ないです。
>>25 -26
どうやったらメモリ使用量ってわかるの?
GUIってなに? Giants Uzeeeeeeeeeee Itteyoshi!!! の略?
32 :
名無しさん@お腹いっぱい。 :2001/06/11(月) 00:15 ID:ozjTMEXg
コテハン一言スレに誤爆した37です。 なんだかわからないままWin2000でPerl/TKのmake中。。。
>>32 Tcl/Tkは知らんから比べられないが、別に知らなくても良いんじゃないの?
…Perl/Tk使って何かした事は無いけどね(´∀`)
# Perl/Tk本はあるけどGUIプログラムを配布しようと思った事無いからね…
# 自分だけが使うツールにわざわざGUI付けるのもアホらしいし
34 :
enhydra :2001/06/11(月) 00:41 ID:g88SXDIU
>> 30 topとかlsこまんどのマニュアルをまんこまんどで見よ。です。 strictもwarningsもスピードなり消費リソースが気になるなら、コードをきれいにした後コメントアウトすれば済むし。おいら は気にならないけど。 あとCGI.pm とか巨大なやつをWebアプリで使う時もmod_perlで親httpdにロードさせとけば子httpdで共有されるから実質的に リソース(めもり)くわなくなるっすよね。 # おっとCGIよりなお話(汗)
35 :
32 :2001/06/11(月) 00:42 ID:???
>>33 さんきゅ! どこかでPerl/TK本見てくるよ!
ていうかmake失敗したんでこれから原因チェックせんと。
36 :
enhydra :2001/06/11(月) 00:48 ID:g88SXDIU
>> 34 いかん lsこまんどじゃ調べらんない(汁) psコマンドのマニュアルをマンコマンドで見よ。の誤りっす。
>>35 WIn2000ってぇとActivePerl?
ならPPMで一発じゃん?<Tk.pm
38 :
35 :2001/06/11(月) 01:50 ID:???
Perl5.7.1-devel(with -DDEBUGGING,-DDEBUGGING_MSTATS,-D_REENTRANT) ------------- sbrk()要求サイズ(PERL_DEBUG_MSTATS=1) #(do nothing) 58392 bytes(6) #use warnings; 284672 bytes(46) #use CGI; 1232896 bytes(90)
#↑書き込んだらNetscapeがgnome巻き込んで落ちた...。
>>13 256と言えば....Ascii256倍シリーズのPerl版でないかなあ....。
あれのC版(10年前?)は良かったし。
>>15 ↑も参考に。
-DDEBUGGING,-DDEBUGGING_MSTATSスイッチを付けてコンパイルしたPerlで
環境変数PERL_DEBUG_MSTATSを1以上に設定してスクリプトを走らせると、
Perlインタプリタが利用するメモリに関する情報がいろいろ取得できます。
>>27 -
殆ど話を聞かないけれど、VisualPerlってどんな感じなのかな?
たしかVisual Studio.NET Betaを持っている人は落とせた筈だけれど......。
自分の場合、GUIベースのデバッガと言えばDDDとかを偶に使う程度で、
大抵の場合 perl -d でケリが付きます。
>>41 Gtk-Perlって、Windows版はないよねぇ。
Gtkは移植されているんだから期待してるんだけど。
Perl/Tkなら、WindowsでもXでもちゃんと動くんで気持ちいい。
これでMac版があったらなぁ。
>>41 んじゃ、自分でサイト立ててれば一挙解決ではでは?
perl\site\lib 以下って何MBぐらいありますか?
10MBくらい
>>41 そこが残念なところだなあ.....。
ちなみに Gtk-Perl では、ちゃんとset_locale()呼んでおけば
日本語表示/編集共に問題なしです。
>>43 今作ってる所だょ。ヽ( ´ー`)ノ
>>44 34.1MBもあるが........。
GTkなんてWindows使いの私には関係ないのさぁ(;;
生のファイルハンドルリファレンスをselectすると挙動がぁゃιぃ…。 select(*STDOUT{IO}); print STDOUT select(), "\n";
51 :
名無しさん@お腹いっぱい。 :2001/06/15(金) 10:29 ID:xtaBOgm2
こんな大事なスレに気づかなかった。鬱だ。
>>18 船渡し問題のURLきぼーん。
正規表現のバックトラックで解いたの?
「正規表現エンジンで論理プログラミング」の例ってどっかにないかな。
>>9 >今までの$foo->[$n] が $foo[$n] (or $foo.[$n])で、$foo{bar} が %foo{bar} か.......。
>うう.......慣れるまでの辛抱か。
Damian Conwayも「最初は変な感じがしたけど、慣れたらこっちの方が
イイ!」だそうです。
http://yetanother.org/damian/talks/Perl6.pdf
53 :
52 :2001/06/15(金) 11:12 ID:???
static が欲しいよう。 sub hoge{ static my $count = 0;
>>57 グローバル変数みたいのを使いたくないから。
my $static = 0;
sub hoge{
if( .. ) $static++;
みたいのを良くやるので…。
何か良い方法あるのかな。(お手軽なやつで)
>>58 #違うかな?
#!/usr/bin/perl
use strict;
{
# $countにはincr_count(),decr_count(),get_count()経由でのみアクセス可
my $count = 0;
sub incr_count{ $count++ }
sub decr_count{ $count-- }
sub get_count{ $count }
}
print get_count();
incr_count();
print get_count();
decr_count();
print get_count();
overloadを使えばstatic変数であるかのように振舞う変数を作成できるような気がする。 無理かな?
まずはやってみせることだ。
楽なtieにしてしまった。 package Static; use 5.6.0; use strict; use base 'Exporter'; our @EXPORT_OK = qw/ static /; sub TIESCALAR{ my $class = ref($_[0]) ? ref(shift) : shift; my $self = []; return bless $self, $class; } sub FETCH{ my $self = shift; my $callline = (caller(1))[2]; return $self->[ $callline ]; } sub STORE{ my $self = shift; my $value = shift; my $callline = (caller(1))[2]; $self->[ $callline ] = $value; } sub static($) : lvalue{ no strict 'vars'; local *staticvar = \$_[0]; tie $staticvar, __PACKAGE__; $staticvar; } 1; __END__
ある一定の条件の下でstaticに見える変数を宣言可能。 #!/usr/bin/perl use Static qw/ static /; static my $i = 0; foreach (0 .. 10){ print count1(), "\n"; } foreach (0 .. 10){ print count2(), "\n"; } sub count1{ return $i++;} sub count2{ return $i--;} __END__ 但し…ネタにしかならない。
# static.pm package Static; use base 'Exporter'; @EXPORT_OK = qw/ static /; use strict; sub TIESCALAR{ my $class = ref($_[0]) || $_[0]; my $self = \do{ $_[1] }; return bless $self, $class; } my @values; sub FETCH{ $values[ ${ $_[0] } ];} sub STORE{ $values[ ${ $_[0] } ] = $_[1];} my @vars; sub static($) : lvalue{ no strict 'vars'; local *staticvar = \$_[0]; my($cline) = (caller(0))[2]; tie $staticvar, __PACKAGE__, $cline; my $dumy; $vars[ $cline ]++ ? $dumy : $staticvar; } 1; __END__ =head1 SYNOPSIS use Static qw/ static /; sub countup(){ static my $i = 0; return $i++ } print countup, "\n" for(0 .. 10); =cut 一連の駄レススマソ。
>>62 -64
なるほど。出現行数で変数を識別するのかー。
面白いっす。これってオリジナルのアイデア?
オリジナルです。
>>62 は思いついてすぐ作ったのでイマイチかな。
>>63 は低速である事を覗けば実用化可能かな?
行番号で識別しているので"#line"などで行番号をいじると妙なことになりますが。
lvalueとtieを使うといろいろ遊べて楽しいですね。
print文の成功した場合の戻り値1って数値1?文字列"1"?
>>68 Perlのbool値はPL_sv_yes, PL_sv_noで表される。
/* perlvars.h */
PERLVARIC(GYes, char *, "1")
PERLVARIC(GNo, char *, "")
文字列リテラルさね。
Perlの資格試験ってある?
72 :
名無しさん@お腹いっぱい。 :2001/06/25(月) 18:06 ID:..juuP4w
無いんじゃないかなヽ(´ー`)ノ
>>71 -72
と、いうことは。。。
いまPerlの資格試験を新設したら受験料で大儲けかも?
いや、家元制度+段位制でもいいな。
Perl3級とか、Perl初段とかの免状を発行して大儲け。
>>73 なんで世界規模のものを日本規模の制度にするんだよ(w
つーかネタか。
黒帯きぼーん(藁
76 :
名無しさん@お腹いっぱい。 :2001/06/27(水) 16:13 ID:Mv0nn73w
マルチリンガルって.....というかPerl一筋の人間は 殆んどいないと思うが...
みんなどんな言語使ってる?
C,C++,Perlとか。アマチュアよん。
Perlしか知らないPerl厨房でーすヽ(´ー`)ノ
Perlの他には、VC++(MFC)を少々たしなむ程度。STLってなに?
>>81 STLはPerl使いにはうれしい機能(連想配列モドキとか)がいろいろついてるのでぜひ覚えておくことをお勧めする。
自分も趣味だなー 取りあえず使えるのは C,Perl,Java,C# とか。(C++は知らない) その前はsed,awk(gawk)とかやってたけど、Perl憶えて以来不要になった。 --------- Perl for .NETって、Perlで書かれたコードを一度C#コードに変換してから cscでコンパイルして実行モジュール、DLLを作るみたいだね。
趣味でやってます。 # 社内用にチョコチョコ作らされるけど Perl・・・・厨房程度 PHP・・・・同上 VB・・・・同上 Ruby・・・・厨房以下 ・ ・ ・ Mind・・・・挫折(ワラ N88-Basic・・・・プロ級(ウソ 初めて作ったプログラムは FamilyBasic用ゲームプログラム。
85 :
S :2001/06/28(木) 18:18 ID:???
C++ … 厨房 C … 消防 Prolog … 園児 って感じです。
>>54 っていうかこの条件って誰か別の人が作ったゲームのヤツだ…
俺が見たやつはクリアするとアレなイベントが起きるっていうヤツだったけど。
#アレって何よってのは察してくれ…
…パクリ?
87 :
名無しさん@お腹いっぱい。 :2001/06/28(木) 22:00 ID:DSCSsXU2
>>73 某所で長らく話題にのぼりながら、一向に実現されないやつだな。
本因坊は決まっているのになあ。
某所?
89 :
名無しさん@お腹いっぱい。 :2001/06/28(木) 22:06 ID:DSCSsXU2
>>86 え、そんな新しいものだったのか。
土人と宣教師みたいなトラディショナルなやつかと思ってたよ。
プログラミングの教科書にのってるわけじゃないの?
光栄の大航海時代4に出てきたな・・・ 提督 + 副官 + 謎の老人 + その友人 の4人バージョン もしかしてそれのこと?
>>89 |母がいないと父は娘に手を出す
|父がいないと母は息子に手を出す
|執事がいないと犬は家族を食い殺す
こんな問題のってる教科書があるかよ!
>>91 いや、おいらが最初に見たやつは、砂漠を行く話で、
「父」:=「王」
「母」:=「女王」
「息子」:=「皇子」
「娘」:=「皇女」
「執事」:=「猛獣使い」
「犬」:=「猛獣」
「手を出す」:=「殺す」
だった。
王位継承問題がこじれて……ってな設定をすれば、
十分教科書に出せると思うが。
ちょっとsearch spaceとかprologとか
missionaries and cannibalsとかで
サーチしてみたけど出てこなかったなあ。
>>89 いや、大元のネタはその辺りだと思うんだが。
手を出す食い殺すってのは、半年以上前(多分)に既に使われてるネタだってことだ。
#つーかすれ違いスマソ
「トラやライオンが船をこぐ」設定→うそくせー 「手を出す食い殺す」設定→あるあるー と思ってしまう俺はなにかに毒されているでしょうか。
96 :
名無しさん@お腹いっぱい。 :2001/07/02(月) 17:48 ID:cRPRYcUw
Perl6について語ろう!
97 :
なな :2001/07/02(月) 20:18 ID:???
日本語の「〜なら○○」を正規表現しようと書き始めたら泥沼だった。 /(だった|で((御座|ござ)(い|居)ま)?した|であ(っ|りまし)た)(な)?ら(ば)? |であれば|(である)?なら(ば)?/ …氏にそう。おれに日本語を教えてくれ。いやマジで。
101 :
名無しさん@お腹いっぱい。 :2001/07/03(火) 12:24 ID:fLxGSuZs
>>100 use Perl;でも話題になってた。
Perlのメインサイトがオライリーっぽくなりすぎで興ざめだってさ。
そういえばPerl6では文字列連結演算子はどうなるんでしょ。 矢印演算子?まさかね…。
103 :
名無しさん@お腹いっぱい。 :2001/07/03(火) 21:19 ID:fLxGSuZs
>>103 最初から素直に "+" にしとけば問題なかったものを…。
"100" + "100" が 200 になるっつうのがそもそもの間違い。
>>103 "~" ですか…。
$str = $str ~ $str; $str ~= $str;
うーん…なにか間違っているような気が(汗
素直に参照/メソッド起動はアロー演算子、文字列結合はドット演算子としておけばいいのに。
106 :
名無しさん@お腹いっぱい。 :2001/07/04(水) 20:52 ID:dDBXzh2.
>>104 文字列連結と数値的加算という、意味も動作もまったく違うものに
同じ演算子を使うのは混乱の元だと思う。
演算子オーバーロードに関してはLarryが
数学記号は数学的意味を表わす場合のみにしましょうね
という指針を示している。「+」を使っていいのは複素数とか行列みたいな、
交換法則と結合法則を満たすもののみに限定されるべきという話。
確かに文字列の連結って可換じゃないし、
逆演算を「-」で無理矢理定義してもピンと来ない。
文字列の連結に「+」を使うというのを最初に考えついた人って誰?
その人が素直じゃなかったんだと思う。Smalltalkのころ?
「末尾への連結」に「<<」を使うことを考えついた人もえらい。
常人の発想ではない。狂っている。
ストリームへの出力と配列へのpushを、
「末尾への連結と見れば同じ」と考えてかどうか知らないが、
「<<」という同じ記号っていうのも発想がすごい。
「>>」はきっとその逆演算なのだろうと予想できるが、
popなのかunshiftなのか、はたしてどっち?
Perl6のswitch文(仮名)もこの話と同類の気狂い仕様な気がするな。
これがRubyだと「メソッド===で比較」って言い方になって、
polymorphismというカプセルに入った結果、
同じ気狂い仕様なのに美しく見えるのは不思議だ。
うぐぅ〜!意味わかんないよぉ〜! \____ ____/  ̄ ̄ ̄∨ ̄ ̄ ̄ 〃┏━━ 、 | ノノソハ))) (\リリ;´Д⊂#ヽ (ニ⊂[#~~'∞"_ノ /__∞_| し'(_f)
Perl6、なんかすげえ嫌なものになりそう。 今までRuby信者に汚いと罵られようと、感覚的にとても解りやすい言語だと思ってたが、 アロー廃止、$@%の意味変更は滅茶苦茶な愚行だ。 でももう決定事項なんだろうな。ああ鬱。 マジでRubyに移ろうかしら。
109 :
名無しさん@お腹いっぱい。 :2001/07/05(木) 02:33 ID:NIXF4Exg
Perl6っていつリリースなんですか?
110 :
名無しさん@お腹いっぱい。 :2001/07/05(木) 03:07 ID:f2quMIhg
>>109 予想では再来年のPerl Conference合わせくらいじゃなかったっけ。
111 :
名無しさん@お腹いっぱい。 :2001/07/05(木) 06:48 ID:j7I9hWXA
Ruby最高! イエイ!
113 :
106 :2001/07/05(木) 15:25 ID:???
Rubyはねえ、加算と文字列連結の他に、 配列の連結にも「+」を使うからねえ……。 そういえばCでもポインタの加算という意味のまったく 違う仕事を「+」と書いていたなあ。 「Perlは様々な組込関数のデフォルト挙動を、 たくさん覚えないと使えないからイヤ」って意見をよく聞くけど、 「OO言語は一見同じ記号でもクラスによって全然違う動作をするんで、 たくさん覚えないと使えないからイヤ」とはあまり聞かないね。 むしろ「全然違う動作でも意識せず同じ記号で使える」とか利点として 紹介されている。 でもRubyの言語仕様書とか見てると、 OO言語って演算子オーバーロードなしには、 言語仕様も定義できないのかな、と思ってしまう。 JavaはC++の反省からか演算子オーバーロードできないけど、 結果としてなにがしかの利便性は失われているみたいだ。 Perl6になるとARRAYの「+」は連結になったりするのかなあ。 Larryが防波堤になってくれると信じてるんだけど。 OOスレ逝った方がいいな。スレ違いスマソ。
>>108 ま、Perl6でもPerl5のコードが走るはずだし、それに期待するしか。
なんか暗くなったね。
確かにマンセーマンセーと騒ぐ気にはなれない…。 うーん……
117 :
名無しさん@お腹いっぱい。 :2001/07/06(金) 05:20 ID:dr/SZh9U
マターリ
グターリ.
ゲソーリ
ゾヌーリ
ActivePerl v5.6.1.628 なにがかわったん?
perl6はやくでないかなー
125 :
名無しさん@お腹いっぱい。 :2001/07/09(月) 11:06 ID:nTmH2gQU
5.7.2ってもう出たっけ? 試してみた人いる?
126 :
名無しさん@お腹いっぱい。 :2001/07/15(日) 22:57 ID:3qwmQFts
age
127 :
名無しさん@お腹いっぱい。 :2001/07/16(月) 01:33 ID:OyRSiVOs
Perl5.7.2、コンパイルしてXSデバッグ用ディレクトリに
入れてみたけれど、unicode周りが変更になった他は
大して変わっていないみたいだね。
最近CPAN2の存在を知った・・・
http://cpan2.org/
129 :
名無しさん@お腹いっぱい。 :2001/07/16(月) 21:32 ID: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
>>129 ふぅ。オプティマイザの副作用の気がするなあ。
Perlが与えられたスクリプトを実行する際、コンパイルと実行段階の間に
オプティマイズという段階があって、定数値の埋め込み、
余計なシンボルテーブル検索の削除等を行うことになっている。
例えば、
print 4 + 5;
は、始めのOPコードへのコンパイルの段階で
「4(const)と5(const)をスタックにプッシュ、次にスタックから二つ値を取り出し、
それらを加算(add)、その値をprintで標準出力に出力せよ」
というコードが生成されるのわけだけれど、
Perlのオプティマイザは4と5が数値定数であるから、これらを予め計算して
「9をprintで標準出力に出力せよ」
というコードに修正する。(Perlのオプティマイザの働きについては
他にも色々とあるので、詳しく知りたければop.cのpeep()でも眺めてくれ)
------------ で、今回の場合、問題の out << "==========終了済み=========="; についてだけれど、(ちょいと端折った) out はBEGINブロックのpadlist内に閉じこめられた$stdoutを常に返す *プロトタイプが空の*サブルーチンなので、オプティマイザによって その返す値 $stdout に置き換えられる。 (サブルーチン呼び出しに伴う負荷を押さえるために、プロトタイプが空であり、 かつ定数値を返すものはその値に置き換えられることになっている。 constantプラグマなどがその良い例。) (但しこれは正確ではない。&をつけて呼び出されたものは置き換えられない事に注意。) で、次 「$stdout (blessed "main")」<< "==========終了済み=========="; シフト演算子"<<"(Perl内部の"left-shift"コード)の子は 何れも定数であるため、オプティマイザは(上でも見たように) これを予め実行した結果に置き換えようとし、その結果、オーバーライドされた メソッド(3-7行目)が呼び出され、「"==========終了済み=========="」が出力される、 というわけ。 これらは全て**実行段階前**に行われるので、exit()やdie()の順序は意味を持たない。 試しに、 *out = sub(){ $stdout }; の()を外したり、後ろのout呼び出しに&プレフィックスをつけると、 表示されなくなることを確かめてみればいい。 #いつもながら、間違っている箇所があれば訂正してくれると嬉しい。
_gunzipたん萌え
>>_gunzip あなたマジすげえ。
135 :
129 :2001/07/17(火) 14:56 ID:???
なるほど!
コンパイル時に実行される計算だったわけですか。
確かに-cスイッチの元で実行しても"終了済み"と印字されました。
しかし、"*out = sub(){...}"を"sub out(){...}"に変更すると
そのような置き換えは発生しないのですが、これは何故なんでしょうか。
お手数かけますが、教えてください。
>>133 -134
激しく同意っす。
>>135 >しかし、"*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ブロックから外に出した場合だよね?
----------------------------------- #!/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がそう)スカラー値でなくてはならない。
138 :
129 :2001/07/17(火) 18:16 ID:???
あれ?
ぬぬ、
>>137 のつもりでしたが確かに
>>137 ならOKでした。
勘違いだったらしいです。スミマセソ。
お、今search.cpan.orgをみるとTie::Staticなるモジュールが。
基本的な考え方は
>>64 と変わらないものの、
IDに安全な値を使っているのでTie::Staticの方がマトモか…。
しかし見ていて飽きないですね、CPAN。
日本人でCPAN登録者って居るのかな....? (Jcode.pm以外見たことがない)
perl に付いては凄いがメール欄は凄くない(・∀・)
>>140 CGIメーリングリストの人に何人かいなかった?
SpreadSheet::ParseExcelも日本人
>>140 DBI MLのかわいさん (例のエクセルのやつとか、バーコードのやつ)とか
perl-ooのみやがわさん(macバイナリカッターとか)とか
20人ぐらいはいると思う。
# どうでもいいけど、梅田紀伊国屋コンピュータ書コーナー配置換え。
#もともとおかしかったけど、さらに逝って良しな書店になった。
#場所は便利なのになあ。
146 :
JAPU :2001/07/19(木) 00:30 ID:???
>>142 いや、 CGIメーリングリストには入っていないので....。
>>143 あ、ど忘れしてました。川合氏ですね。(バーコードも)
>>144 macバイナリカッターの方は初耳だった....。
梅田紀伊国屋といえば、何時行っても人が多い
&& コンピュータ書コーナーは隅っこで本も少な目という印象があるな...。
京橋紀伊国屋が出来てからは、大抵そこで済ますようになったし、
無ければ新地のジュンク堂に行けばいいということもあって、梅田の方には最近殆ど行かない。
>>145 いろいろ教えてくれてありがとう。
search.cpan2.orgもあるみたい.。(中身は何もないけれど)
http://search.cpan2.org/ やはり負荷削減のためか.....。
http://take23.org/news/2001/01/26/cpan2.xml >>146 ありがとうございます。探せば色々と有るものですね。
# 自分も何か貢献出来るようなネタがあるかな...と思ったが....
# CPANを探せば大抵は揃っているようですね。
Cの構造体みたいな書き方で $s = new A(); $s->foo = "hoge"; $s->bar *= 50; (foo, barはメンバ) みたいな書き方は出来ますか? トリッキーなのでもイイです。
>>148 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";
151 :
名無しさん@お腹いっぱい。 :2001/07/19(木) 10:32 ID:mCZ55RKw
>> 150 ActivePerl付属の pl2bat じゃだめなの? ドロップすれば @ARGVにファイル名が入るのは一緒だし。
pl2batよりはSOSを奨励したい。 パイプ繋がるから。
153 :
148 :2001/07/19(木) 23:16 ID:???
154 :
わ、 :2001/07/20(金) 03:51 ID:O.8zSDuM
sa
155 :
名無しさん@お腹いっぱい。 :2001/07/20(金) 06:56 ID:C8dQMlbs
こんな質問、いいのかな・・・。 最近perlを憶えたのですが、自分で色々課題を出して解こうとしています。 しかし記念すべき第一号の課題から躓いてしまっています・・・。 あるディレクトリ内にファイル名に全く統一性のないファイルが複数あるとします。 そのファイルのどれだか分からない一部のファイル群に『HOGEHOGE』という文字 があり、それを『FUGAFUGA』という文字に変更するにはどうすれば良いのでしょう ?HOGEHOGEという文字は一つのファイルに一度しか出てきません。 スクリプトを作ろうとしたのですがうまく行かず、結局ここの方に頼ることに・・・。 また、この作業をperlを使ってコマンドラインから実行する方法も是非。
>>155 どちらかと言うとPerl初心者コーナーの方が適当だと思いますが。
とりあえずヒントだけ。
rename($oldfile => $newfile); # 名前変更
use IO::Dir;
@files = IO::Dir->new($dir)->read; # ディレクトリ$dirにあるファイル名全てを得る
perl -e"for(<*HOGEHOGE*>) {$old=$_;s/HOGEHOGE/FUGAFUGA/;rename($old,$_);}" カレントディレクトリ(サブディレクトリは除外)限定の場合
158 :
155 :2001/07/20(金) 18:30 ID:69JZH5Is
>>156 >>157 すみません。訊き方方が悪かったです。
HOGEHOGEはファイル名ではなく、ファイルの中に書いてある内容です。
>>155 まずうまく逝かなかったスクリプトを上げるべきだと思うのだが、
いかがかな?
それが無いようであれば、「教えて君」と見なし、以後放置するよ。
160 :
155 :2001/07/20(金) 23:36 ID:8VNGZ9tA
ごめんなさい。 【Perl 】初心者コーナーPart5に移動しました。
161 :
名無しさん@お腹いっぱい。 :2001/07/23(月) 23:33 ID:D.yGMh3Q
誰かASのVisualPerlのβ版使ってる?感想キボンヌ。
http://aspn.activestate.com/ASPN/Downloads/PerlNET/ Perl.NETはbeta3になっているけれど、試した人いるかな?
(今のところWindows2000,NTでしか動作しないそうなので試せない。)
Perl.NETで、MS Windows上でもPerlで単体実行ファイル(PEじゃないが)や、
DLLを作り、それを C#, C++,JScriptから呼び出したり、逆にC#, C++のクラスライブラリを
Perlから簡単に利用できるようになるらしいな。(実際は知らんが)
use strict;;;foreach(ord( pack(chr(++$*+$*+++$**$*. $*),$=))+--$* .. ord(pack (chr($*+$*+++$**$*.$*),$= ))+--$*+$*++-(($*-$***$*) )+$*+++$***$*-$*---$**$*, $***$***$**$*){push@_,$_} ;foreach($***$**$*+$*/$*, $***$**$**$*+$**$*,$***$* *$**$*+$*,$***$**$**$*+$* *$*-$*/$*,$**$**$**$**$*- $**$**$*+$*,$*-$*,$**$*** $**$*-$*-$*/$*,$**$***$** $*-$*,$***$***$*+$**$*-$* /$*,$**$**$*-$*/$*,$**$*, $***$***$*+$*/$*,$**$**$* *$**$*-$**$**$*+$*,$***$* **$*-$*/$*,$**$*,$***$*** $*+$*/$*,$***$**$*+$*+$*/ $*,$***$**$**$**$*-$**$** $*+$*,$***$**$*-$*/$*,$*- $*,$*,$***$**$*+$*,$**$*, $***$**$**$*+$*/$*){print pack(chr$**$**$**$**$**$* +$**$*+$*/$*-$*,$_[$_]);} こんなことして遊んでいる方とかいますか? いたら是非あなたの作品を見せてください。
164 :
名無しさん@お腹いっぱい。 :2001/08/06(月) 00:10 ID:oWP36vTo
プログラミングPerlの初版って赤色? 改訂(日本語)は青だよね?
ごめんなさい。 参考書スレッドがありました。 そっちにコピペします。
>>163 うーん、その手の話題はプログラム板とかのほうが食いつきがいいんでは?
回文プログラムとかトリッキーなプログラムとかのスレあるし。
167 :
名無しさん@お腹いっぱい。 :2001/08/09(木) 03:07 ID:bI3E6lI.
2chのdatとかの<>区切りのデータを切り分けるときって、 my ($name, $mail, $date, $contents) = split /<>/, $line; ってやるよりも $line =~ /(.*?)<>(.*?)<>(.*?)<>(.*?)/; my ($name, $mail, $date, $contents) = ($1, $2, $3, $4); ってやったほうが速いんですね。 見やすい、書きやすい以外のsplitを使う理由があれば教えてください。 また、もっと速い方法があるならばそちらも教えていただけませんか?
>168 嘘はいけません。 my ($name, $mail, $date, $contents) = split /<>/, $line; こっちの方が圧倒的に早い。 データ量によっては、 my @data = split /<>/,$line; の方が早い。 my は付けない方が早い。 ちなみにスレ違い。このような話題は初心者コーナーへ。
>>169 別に嘘を言いたかったわけではなくて、
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の方が速いという結果が出たから質問したんですが・・・・
これは何故ですか?
あと、どこまでが初心者コーナー行きかの線引きがわかりません。
私としては、初心者コーナーはリファレンスを引けばわかるようなことを
やるところだと思っていたのですが。
>>168 >>170 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を入れ替えている)
>>初心者コーナーはリファレンスを引けばわかるようなこと
まさしく貴方は初心者コーナーへどうぞ。
foo => sub { 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)
# なんの役に立つかは知らんけど、SelectSaverのopen版 # どうでっしゃろ。 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";
今過去ログ読み漁ってたんだけど
>>10 のって面白いね。
自分でも色んなコマンドもどき書いてるんだけど全然違います(-▽-;
モジュールの使い方とか参考になるなぁこれ、
正直、自分はPerl本に赤ラクダしか持ってないのであります。 それ故、オブジェクト指向的な書き方が未だに分からないのであります。 自分の書くコードはPerl4とPerl5がイビツに混じっているのであります。 逝ってよしでありますか?
176 :
名無しさん@お腹いっぱい。 :2001/08/17(金) 10:43 ID:xrVq7k..
177 :
名無しさん@お腹いっぱい。 :2001/08/19(日) 02:16 ID:i6ZuuVgY
PerlOSってどうなったんデシか?
いや流石にPerlでOSは…(ワラ コンパイル可能(?)なPerl6でなら…誰かやるのかねぇ。
>>178 カーネルとPerl処理系のみで、システムは全てPerlで書くとか。
ダメかなぁ。知識0厨房でスマソ。
でもこれだったらスゴック小さい&軽いOSができそうだけどなぁ。
181 :
sage :2001/08/19(日) 16:15 ID:i6ZuuVgY
>>176 ありがとうであります。
新しい書き方も取り入れて行こうと思う次第であります。
183 :
111 :01/08/27 09:56 ID:gtVoupko
>>111 すみません、誤爆です。
逝ってきます。
184 :
183 :01/08/27 10:08 ID:cCFTKgE6
>>183 すみません、誤爆の謝罪を誤爆してしまいました。
申し訳ない。
185 :
名無しさん@お腹いっぱい。 :01/09/05 16:01 ID:8Hg/qZ8I
プロンプト表示して逐次処理するのってどうするんでしょうか Cのgetchar みたいなんすけど、、ARGV?? つーかプリント文が流れて逝くだけだし、、、俺ってあほですか?
186 :
名無しさん@お腹いっぱい。 :01/09/05 16:09 ID:dfrFd246
>>185 うん。
#!perl
use constant PROMPT => '( ´∀`)>';
print PROMPT;
while (<>) {
chomp;
system $_;
print PROMPT;
}
__END__
ぐはあ、STDINだたのか (痴 逝って来ます アホだ。。。
File::statとかTime::localtimeとかFile::chdirみたいに 組み込み関数をかなり違う動作をする関数でオーバーライドするのってどうよ? $s = new File::Stat('foo); $t = new Time::Localtime(time); $c = new ChdirSaver ('..'); などの方が読みやすく安全だと思うのだが。
189 :
名無しさん@お腹いっぱい。 :01/09/07 11:56 ID:.xfvPVkw
>>188 同感。普通のコード書く時はそうですよね。
ただワンライナーを書く時はオーバーライドしてくれた方が便利という背景もある。
@EXPORT じゃなくて @EXPORT_OK に書いてくれてれば良いのにね。
190 :
名無しさん@お腹いっぱい。 :01/09/07 14:36 ID:BHawRKfc
別にオーバーライドさせたくなければできますよ。 use File::Stat (); @EXPORT に入ってるのはあくまで「デフォルト」でEXPORTするだけです。 空リストをuseに渡せばOK。 $st = File::stat($file);
191 :
188 :01/09/07 18:42 ID:???
>>190 そりゃそうだが、デフォルトでエクスポートするのが気に入らん、って事。
だからどうしたと言われりゃそれまでだが。
192 :
名無しさん@お腹いっぱい。 :01/09/08 00:16 ID:TqV0GOBs
なるほど。 組み込み関数の名前をオーバーライドするってのは、 こんな使えない組み込み関数は捨てちまえ!俺のモジュール使え!という モジュール作成者の自信をあらわすものだったりして。
193 :
名無しさん@お腹いっぱい。 :01/09/08 23:45 ID:UUPZ4HXg
TERM:capの使い方教えれ。
今コマンドみたいなのを色々書いてるんですが、入力の受け取りで困ってます cp ./tmp/hoge './tmp/h u" g a' "./tmp/target'dir" こう言う入力がSTDINから有ったとして、これを上手に @argment = ('./tmp/hoge','./tmp/h u" g a','./tmp/target'dir'); つまりShellに与えた時の引数の解釈と同じ動作がしたいのです。 正規表現で削ってみたりと苦戦してみたのですが、引数の数は不定な事も 有って完全にShellと同じ動きをするのは不可能な気がしています。 今は1byteづつ積み上げて解釈するしかないのかなと思ってます。 参考になるソースなんかは無いでしょうか。出来ればperlなら感激なんですが よろしくお願いします。
195 :
194 :01/09/09 16:31 ID:???
ちょっと説明が変ですね、perlshell.plを起動するとそこから 処理モードに入るんです、各コマンドのサブルーチンは大体出来ていて 例えば、 $./perlshell.pl cp ./tmp/hoge './tmp/h u" g a' "./tmp/target'dir" こんな感じなら上手く行くのです(シェルが綺麗に@ARGVに収めてくれるので) ところが$./perlshell.pl として起動して perlshell$←入力待ち cp ./tmp/hoge './tmp/h u" g a' "./tmp/target'dir" とした時の<STDIN>からの入力の処理が出来ないのです。 ここに
197 :
194 :01/09/09 17:08 ID:???
すいません、>196 つまりShellをエミュレートしたいのだと思います。 tcshから、./perlshell.pl とタイプすると perlshell$ こう言うプロンプトが出ます。 そこに cp "dist1" "dist2" "dist3" "target" と入力した時の <STDIN>からの入力を上手に配列(上なら("dist1","dist2","dist3","target")) に収めたいのです。 今bashのソースを拾ってきたのですが、何故か心が重いです・・・
199 :
194 :01/09/09 21:46 ID:???
ありがとう御座います、>198 シェルのソース見てみたんですが、Cが殆ど読めないので良く分かりません でした、ただそれらしきループが有ったんでやはり1byteづつ切り出してる んだと思います。 取り合えずsubstrで1byteづつ切り出してるんですが、難しいです。 フラグだらけで訳が分からなくなってきた。 まずは ' の中では " が使える、" の中では ' が使える。 これを目指して頑張ってます。 パイプとリダイレクトはどうしようかなぁ、何か無理っぽいです。
200 :
名無しさん@お腹いっぱい。 :01/09/09 21:53 ID:NKqI5UNo
$cmd = <SHIFT>; print `$cmd`; で $ perlshell rm -rf / じゃだめなの?
201 :
198 :01/09/09 22:18 ID:???
ダメだな。折れ力じゃ無理らしい(鬱 逝ってきます。 #!perl my $command = q{cmd>foo.txt "double quote" '/single quote/' "cmd>foo.txt"}; print Dumper [parseline($command)]; sub parseline{ my $str = shift; my $quoted_str = qr{(?:[^"' ]|"[^"]*"|'[^']*')*}; my $i = 0; return grep{ $i++ % 2 }(split /($quoted_str)/o, $str); } __END__
こうしとけ。(笑) $arg = q/Sakura "Moe" "\"puni\"" 'hanya-n'/; @arg = split /\0/, `perl -e 'print join "\\0", \@ARGV' $arg`; print "$_\n" foreach @arg;
ご丁寧にバナーまでモノクロにしてある(笑 でもあまり暗いのは好きじゃないですね。鬱になりそう。
205 :
194 :01/09/10 01:25 ID:???
わわ、JAPUさんまで、感謝です>みなさん
>>200 それはちょっと・・(笑
>>201 いえいえ、凄く参考になります。自分では何も思いつかないレベルなので
>>202 凄いトリックですね、こんなの絶対考えつかないです。
今回は、勉強がてらなるべくシステムを呼ばない前提なので、
最後の手段に保存させてもらいました。
>>204 大感謝です、これは凄い。
入れてみてビックリしました、完全にShellの動作をしてます
グロビングまで自前でやってる様です、きっとこの人は偏執狂だ(笑
同じ名前で情けないので dameshell に改名しました。
今、該当部分を探している所です。段々流れがつかめて来た気がします。
今日は寝るので、ある程度形になったらまた報告させてもらいます。
多謝です>みなさん
206 :
:01/09/10 07:13 ID:???
while( $arg ){ $arg =~ s/^\s*//; if( $arg =~ /^"/ ){ if( $arg =~ s/^"((\\.|[^"])*)"// ){ push @args, &parse_meta( $1 ) } else{ die "unmatched" } } elsif( $arg =~ /^'/ ){ if( $arg =~ s/^'([^']*)'// ){ push @args, $1 } else{ die "unmatched" } } elsif( $arg =~ /^`/ ){ if( $arg =~ s/^`((\\.|[^`])*)`// ){ push @args, &parse_command( $1 ) } else{ die "unmatched" } } elsif( $arg =~ s/^(\S+)// ){ push @args, &parse_meta( $1 ); } else{ last; } } うーん。この位なら正規表現一発で綺麗に書けそうだけど… リダイレクトやパイプがないんじゃシェルとは…
207 :
名無しさん@お腹いっぱい。 :01/09/10 10:19 ID:7tqUQO.2
んー shellと同じように分割したいなら標準モジュールの Text::ParseWords つかえば良いのに。 #!perl use Text::ParseWords; @args = shellwords($strings); __END__
208 :
194 :01/09/10 15:53 ID:???
#********************************** use strict; &Main_block; sub Main_block{     my ($input,@output,$count);     print "ひき数をいれてください\n";     $input = <STDIN>;     @output = &Parse_arg($input);     $count = 0;         foreach (@output){             print '$ARGV'."[$count]\t$_\n";             $count++;         }     exit; }
209 :
194 :01/09/10 15:54 ID:2zI8oYIY
#***** 引数を解釈して配列に入れる sub Parse_arg{     my ($input,$charnum,$char,$argpart,$count,$quot_flag,@out);     $input = shift;     chomp ($input);     $charnum = length ($input);         while ($count < $charnum){             $char = substr ($input,$count,1);             if (($char eq ' ')&&(!$quot_flag)){                 $char = '';                     if ($argpart){push (@out,&Unquote($argpart))};                 $argpart = '';             }             elsif ((($char eq '\'')||($char eq '"'))&&(!$quot_flag)){                 $quot_flag = "$char";             }             elsif (($char eq $quot_flag)&&($quot_flag)){                 $quot_flag = '';             }             if ($count == (${charnum}-1)){                 $argpart .= $char;                 if (&Unquote($argpart)){push (@out,&Unquote($argpart));}             }             $argpart .= $char;             $count++;         }     return (@out); } #***** クオートを取り去る sub Unquote{     $_ = shift;     $_ =~ s/^\'([^\']*)\'$/$1/;     $_ =~ s/^\"([^\"]*)\"$/$1/;     return $_; } #**********************************
210 :
194 :01/09/10 15:57 ID:???
こんにちは、またまた有難うございます、勉強になります
>>206 いえいえ、**完全に**とか言ってしまいましたが、本当は
It's my dir と言うディレクトリを開けなかったのと不定な
引数の数に対応出来なかっただけなのです。 " の中では ' が
使える、逆もOK、"と' の中ではスペースが使える、区切り文字の
スペースは幾つでも良い。これ位が目標だったので
リダイレクトは本物の動作がよく理解出来てない厨房っぷりなので
今後の課題にしようと思います。
>>207 知らなかったです、
>>204 さんに教えて頂いたpshもそうでしたが
細かく機能別のサブルーチンに分けて、そこに投げて行くんですね。
今、sub parse_lineとにらめっこしてます。実は、モジュールはrootに
有るの位しか使った事が無いのです(汗)
恥かしいコードですが結果、上の様になりました。
本物のふるまいが理解出来てないので今一つですが、
一応目的は達しました。ループしてるのは効率的じゃないかも、、
まだ比較演算子の優劣が分からないのでカッコだらけですが
ご勘弁ください、変な所有ったら指摘してもらえたら嬉しいです。
ありがとうございました>みなさん。 ホント勉強になる!
この板は2chじゃないですよね 笑)
プライオリティも解らんのにこんなの書けるのかよ(´Д`;)
あるファイルシステムがマウントされているかどうかをPerlから知るにはどうすればいいのかね? それと、実行されている環境のバイトオーダーを知る方法は? 知ってる人はココに書きなさいね。
#!/usr/bin/perl -w use Inline C; our @filesystems = ("/dev/sda1", "/dev/fd0", "/dev/cdrom"); foreach my $fs (@filesystems){ print "$fs: ", is_mounted($fs) ? "mounted\n" : "not mounted\n"; } __END__ __C__ #include <mntent.h> #define TABLE_FILE "/etc/mtab" int is_mounted(char *fsname) { FILE *fp; struct mntent *ent; if((fp = setmntent(TABLE_FILE, "r")) == NULL) return -1; /* error */ while((ent = getmntent(fp)) != NULL){ if( !strcmp(ent->mnt_fsname, fsname) ) return 1; /* found */ } endmntent(fp); return 0; /* not found */ }
#!/usr/bin/perl use Inline C; sub is_little_endian2() { return pack("I", 1) eq pack("V", 1); } sub is_little_endian3() { return vec(pack("I", 1), 0, 1); } __END__ __C__ int is_little_endian1() { union { int val; char byte[sizeof(int)]; } u; u.val = 1; return u.byte[0] == 1; }
-eでいいんじゃねーの? unpack('s', pack('n',1)); 戻り値で判断
せっかくなのでInlineモジュール使ってみました。 #このスレッドに書き込むのも久しぶりな気がする...。 #いつの間にか書き込み200を越えていて嬉しひ。
217 :
名無しさん@お腹いっぱい。 :01/09/13 09:16 ID:FCaipOx6
NFSかどうかを知るにはどうすればいいんですか? flockが使えないなら、自動的に他のロックを使いたいのです。
218 :
名無しさん@お腹いっぱい。 :01/09/13 12:59 ID:skA46.9M
>>217 /etc/mtabの中をみて、マウントタイプ判断すればいいんじゃない?
うちの環境になぜか入っていた Quota モジュールを使う手も。
use Quota;
print is_nfs(/home2/john/path) ? 'Danger!' : 'Safe';
sub is_nfs {
my $path = shift;
my $is_nfs = 0;
Quota::setmntent();
while (my @mntent=Quota::getmntent()) {
if( $path ~= /^$mntent[1]/ and $mntent[2] eq 'nfs'){
$is_nfs = 1;
last;
}
}
Quota::endmntent();
return $is_nfs;
}
flockが使えないファイルシステムは他にもあるでしょうから、
もっと調べないとダメだと思いますけどね。
CfgTie::TieMTab っていうモジュール使うと便利かも。
219 :
218 :01/09/13 13:03 ID:???
あ、is_nfs('/home2/john/path') ね、言うまでもないけど。
お、Quotaという便利なモジュールがあるんですね。勉強になります。 ちなみに、マウントされたファイルシステムのタイプ(nfs, ext2, msdos, etc...)を取得するには mntent構造体のmnt_typeメンバを調べるだけでおっけいです。 --> getmntent(3), fstab(5) #213のは、見つかった場合endmntent(FILE *)を呼ぶのを忘れてる...。
NFSでも、flockは成功するにょ。 ただ、NFS だとうまくロック出来ない場合がある... らしい。 # 何種類佳乃組合わせでためしたけど、全部成功したので "らしい" としか...
223 :
217 :01/09/14 13:09 ID:???
みなさんどうも。
eval { flock(STDIN) };
if ($@) {
# my_flock
}
elsif (is_nfs("mypath/mylockfile") {
# my_flock
}
else {
# flock
}
てな具合でいきたいと思います。
>>222 ># 何種類佳乃組合わせでためしたけど、全部成功したので "らしい" としか...
成功したっていうのは吐いた制御がちゃんとできているってことですか?
# 自分も実験できる環境がないので "らしい" でしかないんですよね。
flock(STDIN)は常にdieすると思うのだがどうかな?
218の is_nfs に相対パスを渡しても、うまくいかないと思う。
あたりまえ。
227 :
226 :01/09/14 18:07 ID:???
すまん。マジ誤爆。
229 :
217 :01/09/15 01:07 ID:???
修行のためCPANのLock関連のモジュールあさってたけど、 NFSの自動判別とかしないでユーザに指定させるか、 flockは完全に無視して独自ロックだけをつかう方法が多かった 前者がLockFile::Simple、後者がFile::FlockDir、File::NFSLock 厨房は厨房らしく自動判別はやめて、ぬるく逝こうと思う。
ここにはすごそうな人が多そうなのでここで聞きます。 ページを見ている人のパソコンのCD-ROMを排出させる方法をCGIでやるやり方を教えてください!!!! ネットを探しまわったのですが見つかりませんでした。
>>230 そいつの家まで逝って、手動で開けてやれ。
真面目な話、PerlからCD-ROMをイジェクトさせるには(Linuxの場合) まず/dev/cdromをアンマウントし、(面倒くさければsystem("umount /mnt/cdrom")とか。) <linux/cdrom.h>で定義されているCDROMEJECTをioctl(2)に渡してやれば良い。 use Fcntl; require 'linux/cdrom.ph'; sysopen(CDROM, "/dev/cdrom", O_RDONLY|O_NONBLOCK); $status = ioctl(CDROM, CDROMEJECT); のような感じ。(無論、これでは動かないが) #'linux/cdrom.ph'は<linux/cdrom.h>をh2phで変換
/dev/audioサウンドデバイスにmu-Lawで書き出して音を鳴らすとか、Perlで無茶をすることは十分可能だろうけど、実験する時間がないなあ。
全然分かりません!!!!! 教えてください!!!!!
優しい方DOSプロンプトの使い方も教えてください!!!
CGIじゃ出来ません!!!!!! Activeでも勉強して下さい!!!!! ついでに首括って芯で下さい!!!!!!!!!!
Activeって何ですか!!!!
帰ってくるまでに教えてくださいね。 よろしくお願いします!!!
馬鹿の相手するなよ・・・。
というわけで話題提供でもしてみる。 誰かXML::RSS使ってる人いますかね? 自分のサイトでRSS使って更新情報吐き出そうと思っているのですが。 使い方教えれってんじゃないよ(w
Perlとcurses使った簡単なキャラクタベースのプログラム作ってるけど、 窓のサイズを途中で変更されると表示が変になったり、全く何も描画されなくなったり。 そこで質問なのだが、窓のサイズが変更されたことを知るにはどうすればいい?
244 :
243 :01/09/19 17:35 ID:???
なるべく、変更されてすぐがいいな...。
>>243 -244
UNIX BSD4.3,SVR4から追加されたシグナルSIGWINCHを使えばいい。
端末サイズの変更の際にカーネルから送られてくるから、適切なハンドラでもって応えてやればいい。(デフォルトでは'IGNORE'になっている)
247 :
243 :01/09/19 20:06 ID:???
248 :
名無しさん@お腹いっぱい。 :01/09/20 22:53 ID:BGTtPH/k
ディレクトリ内のすべてのファイル中の\r\nを\nにしたくて #!/bin/sh OLD=$1 NEW=$2 shift ; shift for file in $* do sed "s/$OLD/$NEW/g ${file} > ${file}.tmp mv ${file}.tmp ${file} done をhage.shとして $ ./hage.sh \r\n \n * を実行したのですが、\r\nのままです。どこが変なのでしょうか?
なぜPerlスレにこんな話題が出るのか分からない。
>>248 いい子だからUNIX板に池。
250 :
248 :01/09/20 23:04 ID:BGTtPH/k
しかられたので少し訂正します #!/bin/sh OLD=$1 NEW=$2 shift ; shift for file in $* do perl -pe "s/$OLD/$NEW/g" ${file} > ${file}.tmp mv ${file}.tmp ${file} done をhage.shとして $ ./hage.sh \r\n \n * を実行したのですが、\r\nのままです。どこが変なのでしょうか? これならここでいいでしょ?
何故 perl -i.bak -pe s/\r\n/\n/ * ではイカンのか。
\r\n \n -> \\r\\n \\n
XML::RSSはXMLスレに書いたほうが良かったかね。
256 :
名無しさん@お腹いっぱい。 :01/09/21 10:27 ID:eCUa7iH.
>>255 オレ使ってるよ。とか言ったとしてどうなるのよ?
>>256 そこから話が盛り上がる可能性に期待して、とか?
259 :
1 :01/09/25 05:00 ID:7Zufx8jA
261 :
Perlあまちゅあ :01/09/27 15:04 ID:n78xCnwc
すいません、コマンドラインで<STDIN>時に「キーボードから入力する文字数」を制限するのは、 どうすれば良いのでしょう? (例えば、コマンドラインで、パスワードを入力するときに、8文字なら8文字と決まっていて、 9文字目は入力しても、画面には表示されない。) OS非依存が良いのですが、依存せざるを得ないのであれば、Win依存でお願いします。 (キーが押されたってことを検出できれば、それをループでまわせるとは思うんですが、 C言語のgetche や kbhitに相当するPerl関数がわからないんです。。とほほ。。。。) 厨な質問ですみません。(板違いなら、さらにごめんなさい)
262 :
名無しさん@お腹いっぱい。 :01/09/27 15:46 ID:WzgjwwkM
>>260 以前、Windows ActivePerl に入れてみたら日本語が表示できなくて
いろいろ情報探したら、「マルチバイトに対応する予定はない」って
いうMLの記事を見つけたんであきらめたんですけど、表示できるのかぁ。
またちょっと試してみようかな。
263 :
名無しさん@お腹いっぱい。 :01/09/27 20:08 ID:OLVunqio
>>261 ないんじゃないか?
俺が知らないだけかも。
でもgetcheもkbhitもDOSやWindowsプラットホーム固有の関数だから
マルチプラットホームなPerlには実装されてないんじゃないかと思われ
Windows2000,Perl6を使用。 <STDIN>を使ってコマンドプロトコルから 入力した値をスカラー変数代入する処理で プロトコルからの入力で、 何バイトまでしか入力ができない・・ っという風にしたいのですが、可能なのでしょうか? もし可能であれば教えて頂きたいのですが。
>>261 1.Term::ReadKeyモジュールのReadKey()関数を利用する。
2.Cursesライブラリのgetnstr()を使って入力文字数を制限するか、
またはgetch()で必要なだけ読み込む。
の二つの方法があります。例を挙げるなら、
---readkey.pl----
#!/usr/bin/perl -w
use strict;
use Term::ReadKey;
use constant PASSWD_MAX => 8;
ReadMode 4;
our $input = "";
foreach(1..PASSWD_MAX){
my $ch;
1 while (!defined($ch = ReadKey(-1)));
last if $ch eq "\n";
$input .= $ch;
}
ReadMode 0;
print "your password is $input\n";
お、インデントが...。 --- curses.pl ---- #!/usr/bin/perl -w use strict; use Curses; use constant TRUE => 1 == 1; use constant FALSE => !TRUE; use constant MAX_PASSWD => 8; sub app_init() { initscr(); keypad(stdscr, TRUE); cbreak(); noecho(); } sub app_exit() { echo(); nocbreak(); keypad(stdscr, FALSE); endwin(); exit(0); } sub read_passwd2() { my $input = ""; getnstr($input, MAX_PASSWD); printw "your password is $input\n"; refresh(); }
sub read_passwd() { my $count = 0; my $ch = ""; my $input = ""; while (($ch = getch()) ne "\n") { last if ++$count >= MAX_PASSWD; $input .= $ch; } printw "your password is $input\n"; # 確認。 refresh(); } #main BEGIN{ app_init() } END{ app_exit() } read_passwd(); #read_passwd2(); sleep(2); # 確かめる暇もなく終わらないように。
いや、俺はROMだけど 良いモジュールの紹介あんがと>>_gunzip コマンドプロトルコイイ(・∀・)!
>>262 まだサンプルをいじって遊んでいる程度ですが、Perl/Tk, GTK-Perlで書いたものより軽快でなかなか気に入っています。
また、ラベル、テキスト、リストボックス等の日本語表示、
kinput2経由での日本語入力についても問題ありません。
自分としては、結構使えそうだ..という感触を持っています。
もし暇があればWindows上ではどうなのか試して欲しいですー。
#今Windowsパーティションが逝っているので試せない...。
>>269 どうもです。Curses使うならCurses::Form, Curses::Widget,Cdkも入れておくと、驚くほどいろんなことができますよー。
(ついてくるサンプルをいじるだけでもいろいろ楽しめるはず)
今は亡き啓学出版からCurses本(for C)も出てますし。
271 :
:01/09/28 01:17 ID:???
>>270 漏れもROMだが、勉強になった。Thanx
272 :
261 :01/09/28 03:35 ID:???
>>265 -267
_gunzipさん、ありがとうございます。
(_gunzipさんの投稿は良くROMさせてもらっています。大変勉強になります)
264 の方は、もしかしたら私のところに質問投稿された方かも。。。
(Windows2000 Perl6っていう「印象的な」環境が同一なので。。。)
ありがとうございました。
ファイルテスト演算子ですが、あるディレクトリが存在することを確かめるには -d "directory name"と書くのと、-e "directory name" and -d "directory name" のどちらがいいですか! あと、Perlの-Tは信頼性が低いというのは本当ですか!! 教えて下さい!!!
どっちでも委員じゃないですか!opendirとかでもイイ鴨! >本当ですか!! ←ハイ!!! 僕も厨房なんです!ゴメンナサイ!!!
ファイルテスト演算子の -T のことかな? Shift_JIS とか EUC-JP で書かれていると判定に失敗することも多いです。あまり当てにしない方がよいかも。
276 :
名無しさん@お腹いっぱい。 :01/09/28 14:51 ID:9NVAEcd.
tieの使い方を勉強してたらバグ(?)発見! package AutoCount; sub TIESCALAR { my $val = 0; bless \$val; } sub FETCH { ${$_[0]}++; } tie my $foo, 'AutoCount'; tie my $bar, 'AutoCount'; foreach (1..3) { print "$foo, $bar\n"; } # ←× $foo が2ずつ増加 foreach (1..3) { print " $foo, $bar\n"; } # ←○ 正常 「読み込むたびに1ずつ増える変数」を作ったつもりなんだけど、 その変数がダブルクォート文字列の先頭にあると、 なぜか2回評価されてしまうよー。文字列の先頭以外なら大丈夫。 使ってるバージョンは This is perl, v5.6.1 built for MSWin32-x86-multi-thread です。
277 :
名無しさん@お腹いっぱい。 :01/09/28 15:04 ID:xYFJBzyw
>>276 v5.6.0 built for i686-linux
version 5.005_03 built for i386-linux
では再現しませんでした。
v5.6.1 built for MSWin32-x86-multi-thread (ActivePerl build628)
で再現。
278 :
名無しさん@お腹いっぱい。 :01/09/28 15:22 ID:8UXDD7TM
ボイスチャットのようなものを作りたいと思っているのですが、 恐らく探し方が悪いのだとは思いますが、cpanで探しても、 良さそうなモジュールが見つかりませんでした。 ・チャットサーバー ・チャットクライアント の両方を作りたいと思っています。 マイクから音声を入力して、 サーバーを通してクライアントソフトを立ち上げている方々に リアルタイムで音声を送れるようなものです。 ・マイクからの入力を受け取る方法。 ・音声をネットを通して送信する方法。 ・受け取った音声を再生する方法。 などが知りたいです。
279 :
278 :01/09/28 15:25 ID:8UXDD7TM
どなたか上記の事を出来る方法やモジュールなどを教えてください。
280 :
276 :01/09/28 16:25 ID:???
>>277 検証どもども。うちは同じWin版のver5.6.1のbuild626でした。
ActivePerlのバグか、5.6.0=>5.6.1でエンバグしたか。
さっきActiveState.comのサイトにいって
バグレポート出そうかと思ったんだけど、このバグが既知かどうか
確認できなかった。英語に弱いのよね俺。。。
281 :
名無しさん@お腹いっぱい。 :01/09/28 17:01 ID:aDO6qmS2
>>280 既知か否かは知らないけど、ActivePerl固有の問題ではなくて5.6.1全般の問題みたいよ。
Solaris2.6でmakeした5.6.1でも同じ挙動
Perl5.7.2(開発バージョン)では正常に動作しますよい。
>273を見て思い出したけれど、ファイルテスト演算子のうち、 stat(2)を内部で利用するものは三種類の値を返します。 PL_sv_yes ("1"\0): テストが成功の場合 PL_sv_no (""\0): テストが失敗の場合 PL_sv_undef(SV): stat(2)システムコールがエラー(-1)を返した場合 ですから、 -------ftest.pl---------- #!/usr/bin/perl use strict; test(q| -d "/etc/passwd" |); test(q| -d "/etc/file_not_exists" |); test(q| -d "/usr/local" |); sub test { my $test = shift; my $result = eval $test; if($result){ print "$test: true\n"; }elsif(defined($result)){ print "$test: false, but defined\n"; }else{ print "$test: false, not defined\n"; } }
結果は、
-d "/etc/passwd" : false, but defined
-d "/etc/file_not_exists" : false, not defined
-d "/usr/local" : true
となります。(....まあ、細かい話だけど)
>>273 >Perlの-Tは信頼性が低いというのは本当ですか!!
ファイルテスト-Tは、指定されたファイルから最大512バイト読み込み、制御文字などの出現数をカウントし、それらが全体の1/3にとどまっていればテキストファイルと判断します。
ですから、日本語のファイルに対して誤判定することは十分あり得ます。(utf8は考慮するようですが)
285 :
age :01/09/28 21:17 ID:???
age
286 :
名無しさん@お腹いっぱい。 :01/09/28 23:09 ID:vu/QVpKY
>>284 日本語ファイル食わせるときには、euc-jpにしておいたら
いいのでは?
>>286 EUC-JPのファイルはたいていバイナリと判定されたぞ。経験上。
JISコード(iso-2022-jp)のほうがテキストと判定されやすいような。
WASPにとっては2バイト文字なんてバイナリと一緒だからそれで良いのです (泣
290 :
名無しさん@お腹いっぱい。 :01/09/29 06:04 ID:n1e2AO4Y
最初の512バイトを見て
* MSBが立っている (文字コードが 0x80 以上) バイト数
* 文字コードが 0x20 未満 かつ "\r\n\b\t\f\e" 以外
の合計文字数が全体の 1/3 を越えたらバイナリと判定されますにゃ。
ただし、途中で \0 (NUL) が見つかったらバイナリ扱い。
というわけで、ISO-2022-JP だと安全です。
>>289 具体的には pp_sys.c を見てください。
マニュアルに載っていたかもしれないけど、探すの面倒。B-)
あ、しまった。サーバ変わっていたから名無しになってしまった。
>
>>289 具体的には pp_sys.c を見てください。
は誤爆です。失礼。
?????????????????????????????? ?どれくらいの事ができたら「脱初心者」といえるのでしょうか? ??????????????????????????????
黙ってコード書きなさい。
?????????????????????????? ?どれくらいの事ができたら「脱初心者」といえるのでしょうか? ??????????????????????????
マジレスお願いします!!!!!!!!!!!!!!!!!!!!!!!!!!1
初心者ばっかりですかココは?
?????????????????????????? ?どれくらいの事ができたら「上級者」といえるのでしょうか? ??????????????????????????
教えて!
>>お馬鹿さん あのねぇ、この板は人少ないから何か書いたからって2.3分でガリガリレス 付かないの、何回も同じ事書かないでくれるかな? Perlコミュニティーに貢献出来ればもう初心者では無いでしょう、それはモジュールの 提供とかでも良いし、BBSで誰かの質問に答えてあげる事でも良い、 質問する側であったとしても、その問題の展開と結果を書くことが出来れば それは後に続く人にとって役立つかも知れない。 「ああ、ネットが有るから助かってるなー、本だけじゃもっと手間取ってただろな・・」 こんな風に感じる時がきっとある筈、 つまり、 「ちょうだい!!!」「おしえて!!!」「はやくしてください!!!」 「??????」 こう言う人と正反対の行動をとれば良いんです。 解りやすいですね?
300 :
:01/09/29 18:57 ID:???
マジレスすんな、アホは放置しようぜ。 結局まともに文章かけないんだよこの手の輩は
301 :
Perlあまちゅあ :01/09/29 20:23 ID:9wErUD8Y
ちょとカテゴリ違いか(プログラム版の画像処理系のほうが良い?)とも
思ったのですが、こちらの方に質問させてもらいます。
文章でいうよりも、見ていただいたほうが話が早いと思うのですが、
例えば、「とほほ」氏のページをGOOで検索しますと、
http://search.goo.ne.jp/search/search.jsp?MT=%A4%C8%A4%DB%A4%DB&SM=MC&DC=10&FR=1&IM=1&BOPE=88&LEVEL=8 となります。ページをよくみると、それぞれのWEBの小さなスクリーンショットがあります。
ロボット自動巡回時(もしくは巡回で集めてきたサイト)を自動でスクリーン
ショットで撮っていると思うのですが、こういうのってどのようにやるのでしょう?
スクリプトで、URL を Netscape などに投げて、それをImageMagickで
加工すれば何とかなる気がするのですが、それでは、常時Xを立ち上げている
必要があり、WEB上で使うには今一つです。(というか普通ほとんどのサーバは
Xは立ち上がってないので。。。)
何か視点を切り替えて、Perlでこう言う風にすればああいうのが実現できるのでは?
というのがあれば、アドバイスいただきたいです。
よろしくお願いします。
>>301 wget で画像を DL したら Perl の ImageMagick モジュールか GD モジュールで縮小。
X 使わなくても全てスクリプトの中だけで済む。
>>301 mozillaのレイアウトエンジンでGeckoってのがあると聞いたけど
あれはPerlから呼び出したりできないのかなー。
#mozilla.orgのGeckoのページ見てみたけど全然わからず。
Windows上ではwxWindows-Perl日本語表示無理っぽいね。 #...ていうか、SetFontFace()無視されてるような。
307 :
名無しさん@お腹いっぱい。 :01/09/30 14:53 ID:PUFRmjNw
Perlから直接システムコールの呼び出し方覚えて、猿のようにつかってる syscall.ph をreqireして、引数をpackして、 SYS_hogehoge とかやってるけど、凄く便利 Posixモジュールつかってもいいんだけど、それには存在しない システムコールもあるんで、 Perlのプログラミングには必須だね
>>305 ImageMagickスゲー。そんな機能もあったんですか。
>...とはいえ、かなり重たい処理ではあるね。しかもレイアウトは(?)
この部分が気になるけど(w
でも実際、HTMLもXHTMLもJavaScriptも自力ですべて解釈して
ちゃんとレイアウトするってのは、もはや一大プロジェクトが
必要でしょうなあ。
305のベクタにあるやつはIEコンポーネント使ってんのかな?
309 :
262 :01/09/30 15:45 ID:FsOWX/IM
310 :
301 :01/09/30 16:56 ID:hjeInKdw
>>302 -305
>>308 皆さんいろいろなご意見ありがとうございます。とても勉強になります。
302 さん、 305の_gunzip さんのご意見を参考にして、さらにトライ
してみようと思います。
良い結果が出たらご報告させていただきます。
他にも何か良い案など、思いついたことなどありましたら、
随時、アドバイスを下さい。
「Perl中級コーナー」に比べて頑張るね。このスレ。
>>309 ありゃりゃ。残念。開発者側にマルチバイト対応を期待するのはちょっと無理なようですね。
ところで、今日立ち読みした「Linuxデベロッパーズバイブル」のPart3「Xプログラミング」で
60ページほど割いてGtk-Perlの利用例が解説されていますね。これを機に利用者が増えるといいのですが。
#そういえば、Gtk-Perlのチュートリアル/リファレンスの日本語訳途中までやってほったらかしにしてたな...。
>>313 標準stringクラスに軽くラッパかませただけじゃないすかー。
でも、To-Do Listに
- Regular Expression support.
と書いてますね。それやってくれたらまじ大喜びです。
#似たようなことやろうとしたけど知力気力不足で挫折
>>314 うわ、申し訳なひ。「こんなものがあるんだなー」って中身を見ずに張ってもた。
今度から気をつけます...。
ちなみに、自分がC言語から正規表現を扱うときは、
---------------------------------------------------
PCRE - Perl Compatible Regular Expressions
http://www.pcre.org/ ---------------------------------------------------を使っていますよい。ちょっと例を挙げると、htmlファイルから<a href="...">のリンクを抽出したいな、というとき、Perlでは、
perl -ne "/<a[^>]+?href\s*=\s*[\"']?([^\"' >]+?)[\"']?>/ and print qq|\$1\n|" < hoge.html
のように書きますが、PCREを利用してC言語で書くと、
/* Galeonって書き込みにくいな...。*/ #include <stdio.h> #include <stdlib.h> #include <pcre.h> #define BUFSIZE 1024 * 8 /* * cc -Wall -ansi -o exturl exturl.c -lpcre */ static const char *pattern = "<a[^>]+?href\\s*=\\s*[\"']?([^\"' >]+?)[\"']?>"; int main(void) { pcre *regex; int *ovec, ovec_size; int i; int rc; const char *error; int error_offset; char buf[BUFSIZE]; if ((regex = pcre_compile(pattern, PCRE_CASELESS, &error,
&error_offset, NULL )) == NULL) { fprintf(stderr, "regular expression %s\n" "compilation failed at offset %d: %s\n", pattern, error_offset, error); exit(EXIT_FAILURE); } pcre_fullinfo(regex, NULL, PCRE_INFO_CAPTURECOUNT, &ovec_size); ovec_size = (ovec_size + 1) * 3; while (fgets(buf, sizeof(buf), stdin) != NULL) { rc = pcre_exec(regex, NULL, buf,
/* 変なところで切れてるなあ */ strlen(buf), 0, 0, ovec, ovec_size); for (i = 1; i < rc; i++) { /* $1, $2 を表示 */ const char *strptr; pcre_get_substring(buf, ovec, rc, i, &strptr); puts(strptr); pcre_free_substring(strptr); } } exit(EXIT_SUCCESS); }
>>315-318 それって、c言語でも、ふつうに性器氷原ライブラリincludeするだけで
いいのでは?
unixだったらosについてくるし、なければ
bsd、lgpl/gpn、pdsとかであるライブラリ使えばいいだけだし
>>319 もちろん、<regex.h>(POSIX)をincludeしてregcomp, regexec等を利用する方法くらいは知ってますよい。他にもGPL rxとかありますし。
結局C/C++で正規表現使うにはどれが好みかって問題でしょうね。 自分もこれから勉強してみたいんだけど、 pcreとregexってどっちを最初に体験するのがいいんでしょ。 それと、上の2つは実行時に動的に正規表現を展開するようだけど、 flexみたいに正規表現をCのソースに変換するタイプも いいかなと思ってたり。 #なんかPerlの話からずれまくりsage
322 :
名無しさん@お腹いっぱい。 :01/10/03 03:17 ID:wb1t8L8o
Perlをコマンドプロンプトから使う方法を教えて!
323 :
名無しさん@お腹いっぱい。 :01/10/03 03:25 ID:wb1t8L8o
沿い得て! 沿い得て! 沿い得て! 沿い得て! 沿い得て! 沿い得て! 沿い得て!
324 :
名無しさん@お腹いっぱい。 :01/10/03 03:32 ID:Vd5CqKFk
PERLに関係ないのだが、319のレスをかちゅーしゃで見て、 びっくりした。
Math::BitInt てやつを使ってみた。これ便利だねえ。 ためしに作った多倍長計算機↓ use strict; use Math::BigInt(':constant'); my $a = "式を入力すると計算します"; while (1) { print "$a\n> "; eval '$a=' . scalar(<>); if ($@) { ($a = $@) =~ s/ in use at.*//s } } 同じようなことをMath::BigFloatでやるのは無理?
326 :
名無しさん@お腹いっぱい。 :01/10/03 05:13 ID:wb1t8L8o
おしえて!!!!!
327 :
名無しさん@お腹いっぱい。 :01/10/03 05:15 ID:wb1t8L8o
!!!!!!!!!!!!!!
328 :
1 :01/10/03 05:17 ID:7eUT1aME
329 :
名無しさん@お腹いっぱい。 :01/10/03 06:46 ID:wb1t8L8o
マジで教えて!!!!!!!!!!!
330 :
名無しさん@お腹いっぱい。 :01/10/03 06:46 ID:wb1t8L8o
お願いします!
331 :
名無しさん@お腹いっぱい。 :01/10/03 07:09 ID:wb1t8L8o
どうして教えてくれ何丘教えてください!!!!!
>wb1t8L8o 環境くらい書けや。
性器氷原。。。 まさか一発変換できたんじゃないだろうね・・・
>>334 うちは、一発目で、「生気氷原」になったよ
このスレッド終わったの?
337 :
(´Д`) :01/10/08 21:54 ID:m2.b6EVc
perlのスクリプトを実行形式にコンパイルして cでいうscanfみたいの使いたいんですが、 どうやらそれに相当するのはperlには無いらしいのです。 そこでその役割を果たすものを実装するらしいのですが わけわかりません。 どうすれば良いのでしょうか?
perl2exe
>338 いやすみません。文章が悪かったです。 perl2exe使って実行形式にして使ってるんですが scanfみたいので変数に値をその時々で与えたいんです。 けどscanfみたい関数が無いらしいのです。 どすれば良いでしょうか?
$data = <STDIN>;
>339 print '名字を入力してください:'; chomp($name1 = <STDIN>); print '名前を入力してください:'; chomp($name2 = <STDIN>); print "こんにちは,$name1$name2さん"; これでいかない?
試したらできました!! ありがとうございます。 scanfそのものに感じるけど ↓MLより引用 > scanfはパールではどのように記述するのでしょうか? 相当するものはありません。scanfのperl版を実装する必要があります。 これはどういう事だったんだろ?
追記です。 cgiとして実行したらどうなんのかな? と思って試したらやっぱり500エラーになるんですね。 勉強になるです。
scanfは入力を指定した書式に則ったものとみなして読むので そのものではないってことなんじゃないの。 printfの入力版見たいな感じのもので。 scanf自体殆ど使わないのでよくわからんけど。
sprintfとか使えば実装できそうだね。
難しい事言うから型決めたいのかと思ったー その辺は関係ないのかな?
CAPNにscanfを実装したモジュールがあった気がした。 goto search.cpan.org;
349 :
名無しさん@お腹いっぱい。 :01/10/09 12:01 ID:o6HwRMHE
search.cpan.orgは行けるんだけど モジュール取ってこれない・・・。 www.cpan.orgのほう、いまサーバ落ちてます?
型ってなんでしょ?
最近www.cpan.orgはよく落ちてる気がするぞ。
require ってプログラム開始時に全部ファイルから読まれるの? それとも、その地点まで実行されて初めて読まれるの?
>その地点まで実行されて初めて読まれるの? たしかこっちが正解。
355 :
名無しさん@MZ-2000 :01/10/09 17:20 ID:khTqWun.
そそ。 だから if ($expression) require 'jcode.pl'; とかもできる。
Dispmes('Jcode.plを入れてくださぃ') unless(require './jcode.pl'); 何故かわざわざjcode捨てて設置する困ったちゃん対策
>>355-356 待て待て、二人ともそれじゃダメだって!
>>355 require 'jcode.pl' if $expression;
>>356 Dispmes('jcode.plを入れてください') unless eval{ require 'jcode.pl' };
358 :
356 :01/10/09 17:50 ID:???
>>357 ほんとだぁ、真しかテストしてなかた ハズカチィ(´Д`;) アヒャー
困ったちゃんは俺じゃん・・・・
ありがとう
>>357
おーう。 ご指摘感謝
360 :
名無しさん@お腹いっぱい。 :01/10/12 08:48 ID:6IAcQL0k
Perl/TKをWindowsで使う場合、日本語対応パッチを当てたいのですが、 Win32版のパッチの当て方が分かりません。 UNIX版のパッチの当て方しか見当たらないのですが、もしかしてWin32では 日本語使用不可ですか?
361 :
名無しさん@お腹いっぱい。 :01/10/12 14:06 ID:3886ncd2
えーと誤解されているようですが、私はそんなに内部に詳しくありません。 たまに必要に迫られてソースを参照しますが、この手の解説は多分できません。 # JAPUTeX. ってトリップも捨てがたいな。
_gunzipたんカムバックきぼん
>>362 そうなんですか。失礼しました。
ヘタレの私には「ソースを参照できるレベル」の方々はみな同じに見えてしまうのです(笑
365 :
名無しさん@お腹いっぱい。 :01/10/14 07:12 ID:RJZp9XsP
366 :
365 :01/10/14 08:57 ID:???
失礼、やっと・・・、ベータになりました。に修正。
>>361 gunzipさんが好きそうな話題ねん。
そいった蘊蓄聞きたい上げ。
Perl/Tk出来る人いる? カスタムウィジェットの作り方知りたいのだけど。
369 :
名無しさん@お腹いっぱい。 :01/10/16 03:09 ID:4v7IUtKc
>>368 Perl/TKを使ったことのない俺が言うのもなんだが
Tk::UserGuideやTk::Widgetのドキュメントは読んだのか?
ほんとビクーリしたよ。ステレオグラム。 それも自分のソース使って表示。 で、そのステレオグラムであるところのPerlソースもそのまま動く。 アホ過ぎ。
最後の4行で減点。
意味わかんねーよ。
375 :
名無しさん@お腹いっぱい。 :01/10/19 01:35 ID:JPPt49tb
>>370 すげー。すごすぎー。ソースそのままと実行後で
ステレオグラムのパターンが変わるでしょ?
それでもスクリプトがちゃんと動くのはなぜ?
セミコロンで調節してるんか?
もちろんコードを読む気はないが。
>>375 そんでもって、実行結果の出力を更に実行すると自分自身への写像になってる。
う〜む。
>>376 その2番目以降みたいな、いわゆる「不動点プログラム」なら、
まだわかるんですよー。
オリジナルと1回目の実行結果はパターンが違うけど
ソースコードはきっちり長方形に整形されてて、
それでも動作する。ほんと、よくやるよって感じ。
分かんないしソースも読めないよぅ....(+_+ monksの中彷徨ってれば何か面白いのあるかなぁ....
暇なので解析した。
意外とやってることは単純。
>>375 が言う、実行後でステレオグラムが変化するというのはどいうこと?
・実際のコードは各行の14文字目まで(15文字目は削除用の目印)
・16文字目以降は15文字目までのコピー
・DATAのステレオグラムを使ってコピーするときに少し変化を加えている
#!/usr/bin/perl
# Copyright (c) Marcus Post, <
[email protected] >
use strict;
# 前準備
# 本来は DATA から読んでいるが書き換えたのでファイルから。
# という大人の理由からファイルポインタを__DATA__の次に移動しておく
open(MONKS, $ARGV[0]) or die "逝ってよし!";
1 until ($_ = <MONKS>) =~ /^_/;
# 以下、実際のコード
my(@dataAreaForWork, @codeArea, @charsOfCode);
# __DATA__以降を読み込む
my @dataArea = @dataAreaForWork = <MONKS>;
# コード部分を読みこむ
seek(MONKS, 0, 0);
@codeArea = <MONKS>;
# __DATA__以降を捨てる
until (($_ = pop(@codeArea)) =~ /^_/) {};
# '__DATA__'を追加
unshift(@dataArea, $_);
# 最初の3行(コピーライトとか)を出力
foreach (1 .. 3) {
print shift(@codeArea);
}
foreach my $data (@dataAreaForWork) { my @charsOfData = split(//, $data); # 実際のコードは最初の14文字のみ # 15文字目は後で削除するときの目印 |zY!%xQ のどれか my $realCode = shift(@codeArea); $realCode =~ s/(.{15}).*/\1/; @charsOfCode = split(//, $realCode); # 最初の15文字を後ろにコピーする。 # その際 DATA のステレオグラムを使ってちょっとランダマイズ # 本当は以下のようになっているので区切り文字の , を . に変換している # q,コード,; # # ごみの削除とか # eval; my $i; foreach my $oneOrZero (@charsOfData) { $charsOfCode[$i + 15 - $oneOrZero] = (($charsOfCode[$i] eq ",") ? "." : $charsOfCode[$i]); $i++; } # 空文字はひとつ前の文字をコピー foreach my $i (1 .. 75) { if ($charsOfCode[$i] eq '') { $charsOfCode[$i] = $charsOfCode[$i - 1] } } print join("", @charsOfCode); print "\n"; } print @dataArea;
何でも聞け。
$fooRef = \$foo; と *fooGlob = *foo; の違いを教えてちょ、上は$だけだ、とかじゃなくて 内部でどんな風にエイリアスされるのかが知り鯛DEATH
あ、コイツ !!!!!!!!!!連発猿じゃん (鬱 吐き気して来た 死ね!!
連発猿?
教えてください!!!!!!!!!! ←こう言う奴だろ? 彼は、〜〜級者、と言うキーワードに酷く敏感な様子 (p
CGI.pm使ってるのってどうなの?
389 :
名無しさん@お腹いっぱい。 :01/10/27 00:20 ID:e8mRTudG
ルーチンを関数にするののデメリットって何?
関数呼び出しは非常に時間がかかる。
ageageageage
移転age
何でも聞け。
394 :
名無しさん@お腹いっぱい。 :01/10/28 18:57 ID:xDgqA1mb
タイムスタンプでソート ってどうやってやるんですか?
俺に相応しいことを聞け。
my $name = 'tinko pinpin'; 1) if($name eq 'tinko pinpin') { cnt++; } --------と 2) cnt++ if($name eq 'tinko pinpin'); をループさせて速度を測ったら 1)21 wallclock secs (20.95 usr + 0.01 sys = 20.96 CPU) 2)10 wallclock secs (10.23 usr + 0.00 sys = 10.23 CPU) くらい違いますが、内部ではどのような処理の違いがあるんですか? アホな私にも分かるように教えていただけませんでしょうか?
>>396 そんなことも分からんのか。とことん程度低いな(ワラ
398 :
396 :01/10/28 19:10 ID:???
教えて!!!!!!!!!!!!!!!!!!!!
まともなスレッドに戻れよ...。
?????????????????????????????? ?どれくらいの事ができたら「脱初心者」といえるのでしょうか? ??????????????????????????????
面白いね
403 :
あげ :01/10/29 16:56 ID:???
なにが?
404 :
[ :01/10/29 23:16 ID:???
なにが?
406 :
名無しさん@お腹いっぱい。 :01/11/06 21:14 ID:0STlIz2P
関数の処理の不可に関する日本のサイトあれば教えて欲しいです。 こんな処理するならこんなコードがベストだよ。みたいのとかです。 あと前でてましたけどこんな処理をすると内部ではこんな事がおきてるよ。 とかでもうれしいです。
サイトではないが 前半: Perlクックブックを読む 後半: ソースを読む なんて。
だれか解説キボン
だれも分からないのかなぁ。
>>408 いやそれで正しいでしょ。
結局ソース読まないと分からないことは多いし。
ま、個々の関数の処理効率なんかよりも、
書くプログラムのアルゴリズムが最適かどうかの方が、
全体の速度にはるかに寄与する。
アルゴリズムが最適でさらに速度を求めるならインライン C で書くべし。
パールのチューンアップについてもっと知りたいです
use Benchmark; use strict; timethese(1, { t1 => q{&addstr1;}, t2 => q{&addstr2;} }); sub addstr1 { my($str) = '_' x 1000000; $str = ''; foreach (0 .. 1000000) { $str .= '_'; } } sub addstr2 { my($str) = ''; foreach (0 .. 1000000) { $str .= '_'; } } Benchmark: timing 1 iterations of t1, t2... t1: 2 wallclock secs ( 1.97 usr + 0.00 sys = 1.97 CPU) (warning: too few iterations for a reliable count) t2: 3 wallclock secs ( 2.81 usr + 0.00 sys = 2.81 CPU) (warning: too few iterations for a reliable count)
Cやれば良いのに (ボソッ
んな程度の差違を気にするくらいならCで書けばいいのに。
417 :
名無しさん@お腹いっぱい。 :01/11/15 11:30 ID:HBIil14t
「オブシェクト指向使えばいろいろ便利だ。」てのがよく言われてます。 掲示板程度ならオブジェクト使わないほうが効率いいんじゃないかと思うんですが, どんな時に,どういう風に使えば便利ですか? いいサンプルや解説ページとかあれば教えてください。
憂鬱なプログラマでも読めば、perlerならRubyやるとか >「オブシェクト指向使えばいろいろ便利だ。」 まあこう言うのはITオヤジのレベル、オブシェクト指向で彼女は出来ないし、 オブシェクト指向で奥歯に詰まったフライドチキンのカスは取れない
>>370 何がどうすごいんだか分からないんですけど。
実行してもコードがでてくるだけだし。
>>419 平行法で見ると#!がうき出て見える。
より目(交差法)で見ると引っ込んで見える。
not 419だが
恥ずかしながら
>>420 のおかげで
>>370 がやっとわかった。
3Dってあるだろうがヴォケが!>俺
Perlのハッシュについての情報きぼんぬ
ハッシュの何を?
naibukouzou!!!!!!!!
baka desuka?
このスレッドには、内部構造についての知識を持った人は居ません。いじょ
内部構造内部構造って女のパンツの中みたいに思ってんだな ワラ リンクリスト繋いでるだけだろ?
例えが人格の卑しさを露わにしてますね(プ
>>428 そんなこと誰でも知ってるだろ。(爆笑)
PERL上級者くんは内部構造が大好きなんだね ケラケラ(^∀^)
432 :
名無しさん@お腹いっぱい。 :01/11/16 01:29 ID:wuoKPRpJ
>>431 うん、じゃないと万年ヘタレどまりだからね。
Effectiveあたりに載ってるので気に入らないなら ソース読めとしか言えないなぁ・・・・ Perlは言語だけど、それ自体はCで書かれてるツールみたいなもん だからね。 ドライバー(Perl書き)に求められるのは上手な車の運転 (常識的なコーディング作法)で、それはPerlに限った事じゃないだろ? メカ(低レベルな内部構造)が知りたいならメカニック(C屋、asm屋)に なってソース読むのが一番だよ
まあ、マターリ行きまひょ。ム板みたいに荒れると嫌だし。
436 :
名無しさん@お腹いっぱい。 :01/11/17 17:28 ID:hx+Z154t
そんな事よりちょいと聞いてくれよ。 先日、OSの再インストールしたんです。WindowsME。 そしたら何故かSOSが使えなくなってるんです。 で、よく見たらなんかそ err 02 とか出力してるんです。 もうね、アホかと。馬鹿かと。 お前な、再インストール如きでエラー吐いてんじゃねーよてんじゃねーよ、ボケが。 再インストールだよ、再インストール。 なんかバックアップし忘れたファイルとかあるし。一家4人で再設定か。これは関係ねーや。 よーしCygwinフルインストールだー、とか言ってるの。これも無関係だな。 お前な、頼むから動いてくれと。 SOSはな、今まで何の問題も無く動いてたんだよ。 ActivePerlのpl2batがいつ捨てられてもおかしくない、 IOリダイレクトは出来るわパイプは繋がるわ、そんな便利さがいいんじゃねーか。バッチファイルはすっこんでろ。 で、再度ダウンロードをしてきたところ、どうやら"#command /c perl ..."だと動くんです。 そこでまたぶち切れですよ。 あのな、command /cなんてきょうび流行んねーんだよ。ボケが。 得意げな顔して何が、command /c だ。 お前は本当にcommand /cが必要なのかと問いたい。問い詰めたい。小一時間問い詰めたい。 俺、何か設定し忘れてるだけとちゃうんかと。 ダレカタスケテ...
あう、省略されていた。 上のような現象に困ってます。 識者の方助けてくだされ…
perl.comって頻繁に記事が追加されてるじゃないですか。 日本語でそういうことをやってるサイトってないんですか?
439 :
名無しさん@お腹いっぱい。 :01/11/22 14:39 ID:5zsxNECC
age
440 :
名無しさん@お腹いっぱい。 :01/11/23 00:18 ID:Xjh4pQJe
Windows上でActive Perl使ってるんですが、 Perlからドライブのボリュームラベルを取得する方法ってありますか? 今のところsystemでdirさせて得てるからダサいんでなんとかしたいっす。
>437 ワラタ 最後の一行が大事ですな。 漏れはわからんです。。。
444 :
436 :01/11/25 22:50 ID:???
うう、今だ解決の兆しなし…;-(
新しいモジュールを書きましたが、根性も勇気もないのでCPANに登録できません。 誰かレビューしていただけないでしょうか。 レビューしていただける方がいらっしゃったら改めてここにURLを貼り付けます。
>446 誰もオメーに根性も勇気も期待してねぇーよ。CPANに 登録しねぇーならウゼェーから消えな。
>>447 ウザイ。お前こそ消えろ。
口先だけのヘタレが大きな口をきくなカスが。
>>446 例えどんな物でも、公開してフィードバックを得ようとするのは有益だと思われ。
ただ2chはどうかな...と思わないでもない。
>>446 *.pmとかmod_perl MLとかperlMLのがいいんじゃない?
普通はcomp.lang.perl.modulesと思うよ。 ただ、似たようなモジュールがないかよーく確認してね。 ここに張っても誰かレビューしてくれるとは思うよ。
452 :
名無しさん@お腹いっぱい。 :01/12/03 08:25 ID:ttBTmnrV
age
Perl5.5ってPerl5.005のこと?
454 :
名無しさん@お腹いっぱい。 :01/12/03 10:25 ID:Jpx3osh/
あ。質問なのにsageちゃった。
ずっと疑問だったんで、誰か教えてください
>>453
455 :
むぎ茶 :01/12/03 12:31 ID:???
>>451 スキル低いので細かいところしか指定できんです(_ _)
@ISA は use base のがかっちょいいかと。
@EXPORT よりは @EXPORT_OK のほうがいいのでは?
名前空間分かれてるほうがいいって人多いと思う
456 :
むぎ茶 :01/12/03 12:34 ID:???
>>451 read_holiday_list だけど
use Time::JapanHolidays(holidaysList => "myHolidays.list");
ってして IMPORT で呼んどいてくれるとうれしいかも。
457 :
むぎ茶 :01/12/03 12:39 ID:???
>>451 デフォルトのデータは日本の祝日だけど中身はそうじゃないんで
Time::Holidays.pm のほうがよいのでは?
あと Holiday だけじゃなく MemorialDay もはいってるから
そういう名前もいいかも
あとね日付のデータだけど デフォルトにマージする仕掛けも欲しいです
身近な記念日とかマージして登録できるとうれしい
458 :
むぎ茶 :01/12/03 12:43 ID:???
>>451 計算を必要とする祝日がべた書きなのがちと悲しい
ここもカスタマイズできるとうれしいなと。
451はやる気なし。
460 :
名無しさん@お腹いっぱい。 :01/12/05 20:13 ID:vhbZliPL
perlでグラフを書きたくて今月号のCマガのperlの連載にのってたGDGraphを いれようと思ったのですが、ppmでinstall GDGraph としてyesを選んでも Error installing package 'GDGraph': Could not locate a PPD file for package GDGr aph というエラーが出ます。 どうすればいいんですか?
462 :
460 :01/12/06 03:51 ID:???
>>461 perlのバージョン上げたらいけました。
ところで、451はどこいった?
464 :
名無しさん@お腹いっぱい。 :01/12/12 11:45 ID:fZlaima3
LWP::UserAgent\?\?\???\????§????´????? credentials\?\?\?\????????????°????????????????????????????????????´?°??????????±????????????????¶??¨?????????? ?????¨?? \???\?192.168.0.1??admin????????\???\¶????root??\?\?\???\?pass?? credentials('192.168.0.1', 'admin', 'root', 'pass'); ??\???\?????????\?\?\¨\?\??????????????? 401 Unauthorized?????????????????±?????????? \?\???\?\?\???v5.6.0 built for i586-linux
465 :
すいません :01/12/12 11:57 ID:fZlaima3
LWP::UserAgentモジュールの認証に関する credentialsメソッドがちゃんと動いていないみたいなんです。(使い方を間違ってるだけかもしれないので教えて下さい) たとえば サーバ192.168.0.1のadmin権限に、ユーザー名root、パスワードpassに credentials('192.168.0.1', 'admin', 'root', 'pass'); をコールしてからリクエストを実行しても、 401 Unauthorizedしか返ってくるだけなんです。 ヴァージョンはv5.6.0 built for i586-linuxです。
466 :
名無しさん@お腹いっぱい。 :01/12/12 15:19 ID:I43ox8JP
マニュアルを見る限りそーいう使い方はしないぞ。 perldoc LWP::UserAgent /credentials $ua->credentials($netloc, $realm, $uname, $pass) Set the user name and password to be used for a realm. It is often more useful to specialize the get_basic_credentials() method instead.
467 :
すいません :01/12/13 00:54 ID:GtMIZEFM
credentials('192.168.0.1:80', 'admin', 'root', 'pass'); というふうに、第一引数に"ホスト名:ポート"と指定したらできました。
詳しい人話題振って欲しいなage
あぼーん
436の人どうだった? age
471 :
名無しさん@お腹いっぱい。 :01/12/23 10:56 ID:DF8u6Gm1
こんなことしてもいいんでしょうか? sub a { my @i = (1, 2,3,3,3,3,3,3,3,3,3,33,3,3,3,3,3,334); return \@i; } my $i = &a; print $_ foreach ( @{$i} ); 一応ちゃんと動くみたいですが、 my変数と C言語の自動変数とは全然意味が違うんでしょうか?
ok! 何の問題もなし。参照がある限り破壊されることはないよん。
473 :
デフォルトの名無しさん :01/12/23 11:30 ID:gQHYl0sG
動くね 何でだろ?リファレンスが有効だとスクラッチパッドって開放されないのかな・・・・ Perlのうんちくは全然分からないや。 個人的には凄く嫌だ(w どなたか解説キボン
あ、有難う>472 (^^ でも気持ち悪いなぁ・・・・
ポインタを返しても変数は死んでるっていうほうが変だと思うけどねぇ……。
呼び出し元で使いたいからリファレンスを返すんでしょ。
使いたいものを返せばそれは使える、というのがPerl的なの。
>>473 >>472 がすでに全て解説している。
age
477 :
名無しさん@お腹いっぱい。 :02/01/02 00:03 ID:0AIkB5pj
ぬぬ。bcc32でなんとかXSモジュールをビルド出来ないものかと 二時間ほど粘ってみたがダメだった。無念じゃ…。
478 :
:02/01/02 10:03 ID:XJ6nVU2M
>>477 どのモジュール?
mingw32とかはだめ?
あと、bcc32付属のmake使わずに、gnu makeつかえば、bcc32でもいけるかもね
makeは付属のmakeだと明らかにダメなのでMake.pm(pmake)使ってます。 問題はperl.hとperlvars.hがコンパイルエラー。 エラー E2257 C:\perl5.6.1\lib\CORE\perl.h 1755: , が必要 エラー E2257 C:\perl5.6.1\lib\CORE\perl.h 1756: , が必要 エラー E2257 C:\perl5.6.1\lib\CORE\perl.h 1757: , が必要 エラー E2257 C:\perl5.6.1\lib\CORE\perl.h 1758: , が必要 エラー E2141 C:\perl5.6.1\lib\CORE\perlvars.h 22: 宣言の構文エラー エラー E2141 C:\perl5.6.1\lib\CORE\perlvars.h 39: 宣言の構文エラー エラー E2141 C:\perl5.6.1\lib\CORE\perlvars.h 22: 宣言の構文エラー エラー E2141 C:\perl5.6.1\lib\CORE\perlvars.h 39: 宣言の構文エラー 因みに #line 1755 perl.h typedef pthread_t perl_os_thread; です。 他のtypedefは引っかからないのに…お手上げです。 mingw32はよくわかりません。
477,479です。 mingwはヘッダファイルのコンパイルは通りますが、 Makefileが全然ダメですね。 Config.pmのcc/ld/cppを分かる範囲で書き換えてもまだダメです。 mingwでコンパイルしたPerlがあればいいのかも…。
ふと思ったんだがPerl6の"is"演算子ってPerl5の":"演算子みたいなものなんだろうか?
>>480 bcc32は独自拡張、独自縮小が甚だしいから(GCCもだけど ^^ )
素直にCygwin入れてgcc使った方が良いような。。。。
「,」引っ掛かりなんていかにもbccが原因っぽい
>>477 , 479-480
うちの(久しぶりに立ち上げた)Windows環境の場合、
Borland C++ Compiler D:/bcc55
ActivePerl5.6.1 D:/Perl
なんだけど、
1. cp, mv, rm, mkdir等の基本的なコマンドが揃っていること確認。
2. d:/bcc55/bin/coff2omf で D:/Perl/lib/CORE にある perl56.libを
perl56-omf.lib(仮称) に変換。(元のファイルは変更されない)
$ coff2omf perl56.lib perl56-omf.lib
3. D:/Perl/lib/Config.pmを以下のように修正する。(必ずバックアップをとる)
34,35c34,35
< cc='cl'
< ccflags='-nologo -O1 -MD -DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DPERL_MSVCRT_READFIX'
---
> cc='bcc32'
> ccflags='-O2 -DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS '
43c43
< libs=' oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvcrt.lib'
---
> libs='import32.lib cw32i.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib version.lib odbc32.lib'
593,595c593,595 < ld='link' < lddlflags='-dll -nologo -nodefaultlib -release -libpath:"D:\Perl\lib\CORE" -machine:x86' < ldflags='-nologo -nodefaultlib -release -libpath:"D:\Perl\lib\CORE" -machine:x86' --- > ld='ilink32' > lddlflags='-L"D:\Perl\lib\CORE" -c -x -Gn -ap -Tpd -machine:x86' > ldflags='-L"D:\Perl\lib\CORE" -c -x -Gn -ap -Tpd -machine:x86' 601c601 < libperl='perl56.lib' --- > libperl='perl56-omf.lib' 668c668 < optimize='-O1 -MD -DNDEBUG' --- > optimize='-O1 -DNDEBUG' 4. テスト用のXSを書いてみる。 $ h2xs -A -n MyTest $ cd MyTest ---- MyTest.xs ---- #include "EXTERN.h" #include "perl.h" #include "XSUB.h" MODULE = MyTest PACKAGE = MyTest void hello() CODE: printf("Hello XS World!\n"); -------------------
$ perl Makefile.PL # "コマンドが見つからない"云々と文句を言われるかもしれないが、何の問題も無い 出来たMakefileを少し修正する。 774行目からのpm_to_blibの辺りで何故かエラーになるので (なぜだぁ) pm_to_blib: $(TO_INST_PM) echo "ahyahya" -- 以降、ファイル終端まで削除 -- とでもしておく。(取りあえず重要な個所ではないので) 408 行目辺りの(見つからなかったら"subst"で検索) $(LD) $(LDDLFLAGS) $(OTHERLDFLAGS) $(LDFROM),$@,,$(subst /,\,$(PERL_ARCHIVE)) $(subs 408 t /,\,$(LDLOADLIBS)) $(subst /,\,$(MYEXTLIB)),$(subst /,\,$(EXPORT_LIST)),$(RESFILES) の部分を $(LD) $(LDDLFLAGS) $(OTHERLDFLAGS) $(LDFROM),$@,,$(PERL_ARCHIVE) $(LDLOADLIBS) $(MYEXTLIB),$(EXPORT_LIST),$(RESFILES) と変更。(substってなんだべさ) $ make makeはBorland C++に付属のものを利用する。 Mksymlists.pmでuse strictが原因で失敗した場合、strictをコメントアウト(おい) ....これで正常にビルドできるはず。(うちでは出来た) make後は、test.plに MyTest::hello(); を追加して $ make test 1..1 Hello XS World! ok ....でめでたしめでたし。内部APIの利用も問題無かった。
普段Windowsを使っていないせいもあって、かなりいい加減な説明なのはお許しを。 何かの参考になれば、ということで。 #書き込める時と書けない時があるなぁ
ヤター! 簡単なテストは成功しました。 substはWindowsのコマンドみたいです。 Makefileは特に変更なしでもオッケーでした(何故?) _gunzipさんありがとうございます! …が!試しにCPANからWant-0.5を取って来てビルドしようとしたんですが… リンクが失敗してしまいます。ガクッ。 > Error: 外部シンボル '_Perl_pop_return' が未解決(D:\PERLARC\WANT-0.05\WANT.OBJ が参照) ちなみにWindows ME・ActivePerl5.6.1-630です。(Win9xだからかな…) 助けて_gunzipさん!
488 :
:02/01/03 16:02 ID:???
gudでperlのデバッグができると聞いてさっそく M-x perldb とやってみて、なるほど 動いているのですが、C-x SPとかで ブレークポイントが設定できなかったり、 スタックさかのぼれなかったりしているんですがそんなもんなんですか?
>>487 むむ..ActivePerlの perl56.lib には Perl_pop_return()が無いのか...。
(他にも無いAPIがあるのかなぁ...。cygwinのlibperl5_6_1.dllにはあるのだが)
代替策としては、Perl_pop_return()の役割から考えて、
Want.xsの564行目の pop_return();を
if (PL_retstack_ix > 0)
--PL_retstack_ix;
と変更すればよい。
Linux, cygwinでは、これで全てうまく行った。("make test"も全て ok)
(もっとも、修正無しでも正常にビルド、テストを通るのだが)
....ただ、ActivePerl5.6.1-629 + Windows98 + bcc32では、
make test段階で「不正な処理」で強制終了になるみたい。
んー取りあえず試してみて欲しいです。
>Makefileは特に変更なしでもオッケーでした(何故?)
pmakeってMakeモジュールに付いてくるコマンドだったのか。
これを使えば>485の修正は不要ですね。
やったーー! Want.pmは成功です! make testも問題なく通り無事インストールできました。 他、Storable・NKFも成功。(他にも色々インストールしてみたかったはずだがイザとなると思い出せず…) ありがとうございましたっ! いや〜、WinでXSなんてVC++がなければ出来ないものと正直諦めていました。 _gunzipさんホントに感謝します。
491 :
名無しさん@お腹いっぱい。 :02/01/05 15:39 ID:DL1rkDyE
492 :
名無しさん@お腹いっぱい。 :02/01/06 16:34 ID:2f+STVY+
>>436 です。
諦めてcommand /cを通じて使っていたのですが、
ふと思いついたことがあって試したら当たりでした。
どうやらSOSはロングファイルネームは受け付けないみたいですね。
OSの再インストールをする際、PerlのパスをC:\PerlからC:\Perl5.6.1に変更したのが原因でした。
皆さんも気をつけてください。
493 :
名無しさん@お腹いっぱい。 :02/01/07 23:43 ID:BNEoib8d
すいません,ファイルハンドルを関数に渡す場合について質問です。 open FILE, '+< data.txt' or die $!; func(*FILE{IO}); sub func { my $fh = shift; print <$fh>,"\n"; seek $fh, 0, 0 or die $!; truncate $fh, 0 or die $!; print $fh "AAA$$\n"; } 以上のようにやると truncate で No such file or directory を吐いてしまうんですが func(*FILE{IO}); を func(\*FILE); に変えると問題なく動きました。 なんででしょう? いろいろ調べたけど,さっぱり分かりませんでした。 教えて!!偉い人!
truncateにはファイル名を渡せるので $fhをファイル名と判断しちゃってる感じ。 IO::Handleへのリファレンスをファイルハンドルと 判断しないっぽいですね。 truncate *$fh, 0 or die $!; でいちおう回避。
495 :
493 :02/01/08 00:37 ID:???
>494 そうでしたか。また一つ賢くなれました。 ありがとうございました。
496 :
:02/01/08 14:47 ID:???
perlのエラーメッセージってファイル名(行数)な形じゃないから タグジャンプが使えなくていやだなあ。
500GET
501 :
名無しさん@お腹いっぱい。 :02/01/11 09:42 ID:IHYyu2/p
sigtrapの使い方がいまいち分からない。 Ctrl+Cでファイルをクローズして終了したくて、 use sigtrap qw(die normal-signals); END{close FH;} のようにしてるけど、アプリケーションエラーになってしまう。(Win2K) どうすればいいんだ。
あげ。
>>501 perldoc sigtrapしてみた?まさにそのまんまの例が載ってるけど(w、
>Die on HUP, INT, PIPE or TERM:
> use sigtrap qw(die normal-signals);
これはdieしたいときの設定。
501がやろうとしているシグナル受信時のハンドラ設定はこんな感じ:
sub my_handler { print "Caught a signal! FH is being closed..."; close FH }
use sigtrap qw(handler my_handler normal-signals);
ちなみに、ハンドラの再設定は、$SIG{...} = \&my_handlerでOK!
終了すべき状況なら、my_hanlderでexit()。
あと、ハンドラ内での再設定も時に有用。(e.g. ALRM)
504 :
503 :02/01/13 12:47 ID:???
>>503 ああ、
>>501 が言いたかったのは、
「dieでアプリケーションエラーになってしまう。(Win2K)」
ということか、、、逝ってくる。
505 :
501 :02/01/13 15:34 ID:???
>>503-504 いえいえ、レスありがとです。
そっちの方もやってみたんですけど、 my_handler() の中で exit() するとやっぱり
アプリケーションエラーになってしまうんですよね。まあファイルクローズまでは
逝くので問題ないと言えばないのですが。
う〜ん、とりあえず我慢してこのまま使います^^;
ところでWinではキーボード入力待ちってできないのかなぁ? 他の環境用には
そういうモジュールがあったと思うけど…
>>505 あるような気がするよ。
perl -MCPAN -e shell
でモジュール入れるときに、テストで入力待ちになるじゃん?
あげとこっと
1は責任持って盛り上げるべし
510 :
プ :02/01/17 20:33 ID:6zEN00QH
func1(); sub func1() { my $ret = func2(); print "return code -> $ret \n"; } sub func2() { eval { return 1; }; # if($@){} # <== } これさあ、コメント外すと返却値が無くなんだけど 分かる人居ます?
そのまんま、 if($@){} が何も値を返さないからでしょ。
もしかして、return 1; で func2 から抜けているつもりなのかな? eval内のreturnはevalから抜けるだけだよ。 でreturnした値はevalの返り値になる。
513 :
プ :02/01/17 21:00 ID:6zEN00QH
ん、ちょっと意味不明系 if($@){return 100;} だとどうなの
>>513 なにがどうなの?
$@に何も入ってないんだから変わらないよ。
たぶんあなたの望んでいる動作は、
sub func2()
{
my $ret = eval {
return 1;
};
return $ret if $ret;
if($@){}
}
こういうことでしょ?
ところで、検証してて思ったけど、
if って評価した値が偽、かつelseがないと評価した値が返るのね。
sub func { if(0){} }
だと 0 が返る。どうでもいいけど。
515 :
heno :02/01/17 23:08 ID:oR04RU/Z
「ファイルグロブが可能なmake」のような効果をPerlで実装して みたいのですが、ファイルの変更時刻を得るにはどのようにすれば 良いのでしょうか?
-M
517 :
515 :02/01/17 23:33 ID:???
(自力解決) stat/lstatで逝けるとわかりました。
518 :
515 :02/01/17 23:35 ID:???
>>516 -M だと日数比較だそうで、makeのような秒単位で比較する
効果が期待できないと思われます。
コメントありがとうございます。
519 :
名無しさん@お腹いっぱい。 :02/01/18 03:40 ID:Z2zR15g4
Perlでプロセスを跨いでディスクリプタパッシングさせたいんですけど、どっかにサンプル転がってないっすかね。
>>520 意味は分かってるよな? サンプルを示すくらい簡単だろ。
523 :
名無しさん@お腹いっぱい。 :02/01/18 09:37 ID:Z2zR15g4
>>522 ありがとうございます。
一応
[email protected] のアーカイブは漁ってるのでSocket::PassAccessRightsの存在は知っていたのですが、
このモジュールはXS使ったモジュールなんですよね。
でIPC::SysVやIPC::Msgだけでなんとかならないかなー、と試行錯誤した結果質問させてもらった次第です。
でも当たり前に考えてファイルディスクリプタのアドレスっちゅーか番号を得る必要があるのですが、Perlのファイルハンドルはそこらへんが抽象化されてるので現行のPerlだけでは無理なんですよね。
おとなしくSocket::PassAccessRights使います。
あー、ディスクリプタパッシングとは何ぞやってヒト向けに説明付けると、異なるプロセス同士でファイルやソケットハンドルを受け渡しする方法のことです。
524 :
:02/01/18 10:13 ID:???
数十万エントリぐらい256バイトデータがあるのですが、連想配列使うのはマヅイですか?
>>524 "/sage/524" wrote in message
news:
[email protected] ...
> 数十万エントリぐらい256バイトデータがあるのですが、連想配列使うのはマヅイ
ですか?
テストデータを作って実験することをお勧めします。
数百Mもメモリをつんでいるマシンなら、大丈夫だとはおもいますが。
----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
>524 foreachとか?(笑) whileで読み込みつつ回すのはだめなんですか?
527 :
名無しさん@お腹いっぱい。 :02/01/18 23:21 ID:fgthOeGG
Perlモジュールの、 fj::void はどこにあるんでしょうか? CPANを探しても有りませんでした
>527 まじかよ! どんなモジュールなの?
529 :
heno :02/01/19 13:55 ID:WCPxz8Ug
Perl上で strings を呼ばずに同様の処理を行うには、一般的にどうすると良いのでしょうか?
>>529 stringsって? 同様って何と?
もっと具体的に書いてください。
531 :
529 :02/01/19 16:02 ID:WCPxz8Ug
532 :
名無しさん@お腹いっぱい。 :02/01/19 16:38 ID:CWyCsorl
533 :
529 :02/01/19 17:21 ID:WCPxz8Ug
>>532 なるほど (^_^ ;;)
ここのあたりをPerlで実装すれば良さそうですね。
#define ISSTR(ch) (isalnum(ch) || ispunct(ch) || \
(isspace(ch) && (!iscntrl(ch) || ch == '\t')) || \
(isascii(ch) && isprint(ch)))
#私も始め strings() という関数があるのではないかと思っていました・・・
534 :
529 :02/01/19 18:22 ID:???
どうも正規表現の [:alnum:] 等を使えばほぼ同様の事ができそうに 思いましたが、今回は個別に置換 (s/\x00// 等) して済ませてしまい ました。 コメントありがとうございました。
535 :
名無しさん@お腹いっぱい。 :02/01/25 03:32 ID:llLEjDhT
どなたか、Perl/Tk使いの方、 windoze上でPerl/Tk使う場合、日本語はsjisじゃないと駄目ですよね。 でも、日本語の文字列処理はeucじゃないと駄目な場合がありますよね。 描画と文字列処理でファイルを分ければ問題なしですが、 同一のファイルで描画と文字列処理を文字化けせずに行う方法知ってたら お願いします。 ファイルを euc で書いて、Perl/Tk で使う日本語部分だけ Jcode.pm を 使って変換してみたりしましたが、駄目でした。 (どうも、Perl/Tkについての理解が足りない気がする…) もし、具体例が必要でしたら書きます。 環境は、Win98SE, ActivePerl 5.6.1(631), Perl/Tk 800.023 Jcode.pm 0.79
536 :
535 :02/01/25 03:59 ID:???
ぎゃふん。フォント名をsjisに変換し忘れてたのが原因でした。 逝ってきます。
537 :
名無しさん@お腹いっぱい。 :02/01/27 02:12 ID:Sw8wyViQ
>537 そうかなぁ?なんか色合いがタクっぽくてやだなぁ。 もっと粋な色使いにして( ゚д゚)ホスィ…
>>538 Child Processの方は子供に欲しいぞ。誰かクレ。
kakkiganaizo-
541 :
名無しさん@お腹いっぱい。 :02/02/02 11:12 ID:+ALef/KR
time() じゃなくて times() じゃないの? 使い方は組み込み関数のtimes()と同じだよ。
543 :
541 :02/02/02 11:33 ID:+ALef/KR
そうです。すみません。times()でした。 じゃ、use BSD::resource; とだけ宣言して、普通にtimes()を使えばいいってことですか。
544 :
名無しさん@お腹いっぱい。 :02/02/02 11:35 ID:toL+Z2MW
/ ̄ ̄ ̄ ̄\
( 人
>>538 _)
|ミ/ ー◎-◎-) そうかなぁ?なんか色合いがタクっぽくてやだなぁ。
(6 (_ _) ) もっと粋な色使いにして( ゚д゚)ホスィ…
_| ∴ ノ 3 ノ
(__/\_____ノ
/ ( || ||
[]__| |さくら命 ヽ
|[] |__|_538______)
\_(__)三三三[□]三)
/(_)\::::::::::::::::::::::::/
(_____):::::/:::::::/
(___[]_[]
READMEは読んだけどPODマニュアルは読んでないってか? use BSD::Resource qw(times); ($user, $system, $child_user, $child_system) = times();
546 :
名無しさん@お腹いっぱい。 :02/02/02 17:48 ID:Ew98jRS/
547 :
541 :02/02/02 20:05 ID:+ALef/KR
>>545 ありがとうございました。
でも、timesってopen2で処理してもらってる時間は計測してくれないのね。
鬱市
548 :
名無しさん@お腹いっぱい。 :02/02/02 20:16 ID:2Jw7igNJ
すいません。perlでピタゴラスの定理やりたいんですけど・・・ Aの2乗=Bの2乗+Cの2乗ですが、 BとCの値を入れて計算が終わったとして、 ルートAの出し方がわかりません。 お助け下さいませ・・・
549 :
名無しさん@お腹いっぱい。 :02/02/02 20:23 ID:BTZXmzNs
550 :
名無しさん@お腹いっぱい。 :02/02/02 20:40 ID:2Jw7igNJ
>549 ありがとうございます。うまくいきました!
551 :
名無しさん@お腹いっぱい。 :02/02/02 22:15 ID:lgb4aC0K
>>550 そんなんでいいんかい?
perkの問題じゃなくて数学の問題だろ
552 :
名無しさん@お腹いっぱい。 :02/02/02 22:35 ID:2Jw7igNJ
>551 いえ、CGIに依存しないPerlのお話だったんです。 sqrt関数がわかんなかったんです。
553 :
デフォルトの7子 :02/02/03 00:54 ID:juTMfXhd
WIN2000+ActivePerl でperl APIを使用したCプログラミングをしようと思っています。 Cのソース上で #include <perl.h>し VC付属のコンパイラ CL.EXEで >cl -I\Perl\lib\CORE perltest.c とすると以下のようなエラーが出てしまいます。 おそらくperl.hで名前解決が出来てないためだと思うのですが、 ご存知の方アドバイスをよろしくお願いします。 ************************** \Perl\lib\Core\perl.h(797) : warning C4273: 'win32_strerror' : しています。DLL にエクスポートされていると仮定します。 \Perl\lib\Core\dosish.h(111) : warning C4005: 'Stat' : マクロが再定 \Perl\lib\Core\win32.h(305) : 'Stat' の前の定義を確認し \Perl\lib\Core\perl.h(1755) : error C2061: 構文エラー : 識別子 'pe ンタックスエラーを起こしました。 \Perl\lib\Core\perl.h(1755) : error C2059: 構文エラー : ';' \Perl\lib\Core\perl.h(1756) : error C2061: 構文エラー : 識別子 'pe スエラーを起こしました。 \Perl\lib\Core\perl.h(1756) : error C2059: 構文エラー : ';' \Perl\lib\Core\perl.h(1757) : error C2061: 構文エラー : 識別子 'pe エラーを起こしました。 \Perl\lib\Core\perl.h(1757) : error C2059: 構文エラー : ';' \Perl\lib\Core\perl.h(1758) : error C2061: 構文エラー : 識別子 'pe ラーを起こしました。 \Perl\lib\Core\perl.h(1758) : error C2059: 構文エラー : ';' \Perl\lib\Core\perl.h(2246) : warning C4273: 'win32_crypt' : DL ています。DLL にエクスポートされていると仮定します。 \Perl\lib\Core\perl.h(2356) : warning C4273: 'win32_environ' : しています。DLL にエクスポートされていると仮定します。 \Perl\lib\Core\perlvars.h(22) : error C2061: 構文エラー : 識別子 ' ックスエラーを起こしました。 \Perl\lib\Core\perlvars.h(22) : error C2059: 構文エラー : ';' \Perl\lib\Core\perlvars.h(39) : error C2061: 構文エラー : 識別子 ' タックスエラーを起こしました。 \Perl\lib\Core\perlvars.h(39) : error C2059: 構文エラー : ';'
554 :
デフォルトの7子 :02/02/03 01:49 ID:juTMfXhd
>553 自己レスです 結局コマンドラインをあきらめてVC のIDEでインクルードパスを C:\Perl\lib\COREにしたらあっさり出来ました。 しかし今度はたったこれだけのソースがメモリエラー 実行できず・・・・ 道は遠いなあ #include <EXTERN.H> #include <perl.h> static PerlInterpreter *my_perl; int main(){ SV *pvalueSV; pvalueSV = newSViv(132); return 1; }
555 :
名無しさん@お腹いっぱい。 :02/02/03 01:53 ID:+IXT+7Wc
>554 がんばれ!
556 :
デフォルトの7子 :02/02/03 03:11 ID:NWocp2us
>555 ありがとう! 頑張ってる! でも newSViv(132); なぜこれがエラーになるのかがわからんです・・・・ 参考ソースもすくないね・・perlAPIは・・
557 :
名無しさん@お腹いっぱい。 :02/02/03 10:17 ID:GN3WrqUC
>>554 perlembedみれ。
インタープリタの初期化しないと駄目だ。
559 :
singleton :02/02/04 13:32 ID:8LIPl4QI
川o・-・) < Singletonクラスを以下のように実装したわけだが、何か問題あ りますか。CPANのClass::Singletonはなんか面倒くさいです。 foreach (1..3) { print Foo->getInstance(), "\n"; print Singleton->getInstance(), "\n"; } package Singleton; my %instances; sub getInstance { my $class = shift; return $instances{$class} ||= $class->_new(); } sub _new { return bless {}, shift; } package Foo; use base q/Singleton/; ----------- Foo=HASH(0x80efc1c) Singleton=HASH(0x80efc34) Foo=HASH(0x80efc1c) Singleton=HASH(0x80efc34) Foo=HASH(0x80efc1c) Singleton=HASH(0x80efc34)
>>559 面倒くさいってアンタ…数文字だけタイプ数が変わるだけじゃん。
車輪の再発明をしたいならせめてもっとマシな物を作らないと。
例えば、Class::Singletonの_new_instanceを
sub _new_instance {
my $instance = bless { }, shift;
$inctance->_init(@_)
return $instance;
}
とでもすれば、_init()さえ定義すれば良いようになるだろ?
561 :
名無しさん@お腹いっぱい。 :02/02/05 16:41 ID:slTopwFT
面倒ってのはそういう意味じゃなくて、Class::Singletonが使ってる方法が 面倒って意味。 それに、Class::Singletonだと、$YourSingletonClass::_instanceでカプセルかが 破壊できちゃうのが何となく嫌。 レキシカル変数だと大丈夫だよね。 あと、_initは貼る時に削っただけでやってます。
562 :
名無しさん@お腹いっぱい。 :02/02/12 23:36 ID:gr8exDbO
スクリプトのなかでrequire "./jcode.pl"; などしてカレントディレクトリのモジュールを取り込んでいるケースに 違うディレクトリから perl /html/test.cgi などしてスクリプトを実行使用とすると、 カレントディレクトリが違うので can't locate ./jcode.pl at /html/test.cgi line 2 などとなりますよね。 このような場合はどのようにして実行できますでしょうか?。 perl /html/test.cgi -I/html/ としてみても結果は同じでした。
requie "/path/to/jcode.pl"; 絶対パスで指定する。
565 :
564 :02/02/12 23:42 ID:???
被鬱
sqrt 知らなくても 0.5 乗すれば良い話なのにとか思ったり。 あ、中学校の範囲じゃない?
567 :
562 :02/02/13 08:07 ID:2kRNjnhV
>563,564 レスありがとうございます。 すみません。少々説明不足でした。 もちろんフルパスでの指定というのがありますが ソースコードを変更しないで実行したいのです。 perlスクリプトの方ではなくWEBサーバを書いているので。 Apacheなんかだとperlがどこにあってもカレントディレクトリの スクリプトを実行できますよね。
>>562 フルパスとか相対パス指定なんてダサいことしてるからそーなる。
use lib '/path/to/lib';
require 'jcode.pl';
ってすれば万事休す。もしくは
use FindBin;
use lib "$FindBin::Bin/../lib";
require 'jcode.pl';
な。とりあえず絶対パスはなんて言ってる奴は*論外*。クソな配布スクリプトを参考になんかしてると、一緒に腐っちゃうぜ。
なんなら .htaccessで
SetEnv PERL5LIB /path/to/lib
で済ましても良いし。
569 :
名無しさん@お腹いっぱい。 :02/02/13 11:01 ID:RcZE7nBS
ネタだろうが、万事休すの使い方間違ってるよ。 プログラム言語ができても国語ができないようで。残念。
いやおれは純粋にネタだと思ってるんだがちがうんかね?(笑)
つーか書いてる事全般がドキュソ風味じゃん。
レス読んでる?
>use lib '/path/to/lib'; 結局絶対パス。大したこと無いね。
>>573 スレ読んでる?
> use FindBin;
> use lib "$FindBin::Bin/../lib";
万事休す。
バンジー急っす!
577 :
環境変数 :02/02/14 23:47 ID:s7CAF/TS
Perlを実行している親プロセス(?)の環境変数(特にWin系)を変える プログラムは、どうすれば良いのでしょうか? たとえば、 MS-DOSプロンプトで、「SET」とすると環境変数が出てきます。-(1) 次に、そのまま、何らかのPerlプログラムを実行。 再び、そのプロンプトで、「SET]で環境変数を表示。-(2) この(1)と(2)で違う状態にしたいのです。(Perlで環境変数を変える) よろしくお願いします。
579 :
名無しさん@お腹いっぱい。 :02/02/15 19:40 ID:8vhXaga7
とりあえず現在の日付と時間がちょいと整形した形でほしいとき、こういう記述する人います? 自分、結構好きだったりするんですけどね、こいうの。 $date_time = sprintf "%04d/%02d/%02d %02d:%02d:%02d\n", sub{$_[5]+1900,$_[4]+1,@_[3,2,1,0]}->(localtime);
>>579 元々C言語な人なんで複数行+sprintfですな。俺は。
>>579 自分のサイトでも載せてるし、実際に使ってます、そんなの。
>>580 そうですか、自分もCからPerlに入ったんで最初は違和感あったんですけど
いちいち中間変数を考えるのが面倒になったときこっちが便利になってきました。
>>581 はい、おっしゃるとおり、そんなのです。
他に使っている人がいて安心しました。
そんなん蛇道とかいわれなくてよかったです。
583 :
581 :02/02/15 23:26 ID:???
>>582 誤解があったようなので。
> そんなの
「そういうの」って言った方が良かったね。
悪意はまったく無いので。スマソ
ちなみに私はPerl厨なので、俗に言うトリッキーな書き方が大好きです。
コンパクトなコーディングもいいですが、sprintf関数はオーバーヘッドが大きくてらっしゃる のでわたしは使いません。
585 :
582 :02/02/16 10:22 ID:???
>>583 いぇいぇ、わざわざすみませんです。
Perlコードのパズル感覚は私も面白くてはまるたちです。
>>584 やはり、そいった御意見もありますよね、ふむふむ。
ここは、使い分けということですよね。
処理時間が短さが重要な処理で、かつ大量の日付表示処理の繰り返し
とかやる場合は、オーバーヘッドの少ない方法を使うわけですね。
ちょっとしたレポートに作成日付をつけるぐらいの処理だったら
>>579 に示した方法でもいいですよね。
よく考えたらPerlでsprintf使う意味ってあんまり無いよね。 型変換は必要ないし0fillとか桁削りも簡単。
>>584 は試してみてからそういってるのか?
手動フォーマットよりsprintf()の方が圧倒的に高速だが…俺のやり方がまずいんだろうか。
それともオーバーヘッドの意味が俺の考えている小物と違うのかな。
WinME perl5.6.1 ActivePerl 631
メモリ320MB CPU Duron 800MHz
#!perl -w
use Benchmark;
my @tm = localtime time;
sub timef1{
($sec, $min, $hour, $day, $mon, $year) = @tm;
$year += 1900;
$mon++;
$_ = sprintf '%d/%02d/%02d %02d:%02d:%02d', $year, $mon, $day, $hour, $min, $sec;
}
sub timef2{
($sec, $min, $hour, $day, $mon, $year) = @tm;
$year += 1900;
$mon++;
($mon < 10) and ($mon = "0$mon");
($day < 10) and ($day = "0$day");
($hour < 10) and ($hour = "0$hour");
($min < 10) and ($min = "0$min");
($sec < 10) and ($sec = "0$sec");
$_ = "$year/$mon/$day $hour:$min:$sec";
}
timethese 100000 => {
sprintf => \&timef1,
handformat => \&timef2,
};
__END__
結果
Benchmark: timing 100000 iterations of handformat, sprintf...
handformat: 6 wallclock secs ( 5.38 usr + 0.00 sys = 5.38 CPU) @ 18587.36/s (n=100000)
sprintf: 1 wallclock secs ( 0.82 usr + 0.00 sys = 0.82 CPU) @ 121951.22/s(n=100000)
s/小物/もの/
591 :
589 :02/02/16 22:41 ID:???
>>590 単発ならそうするのですが、http:〜hoge までが動的に変化する場合の
うまいやり方が思いつかないのでげす・・・
592 :
589 :02/02/16 22:43 ID:SkVhVlKI
具体的には、htmlファイルのリンク書き換えのような事を する場合、今まではエディタを使っていたのですが、perl だとどうするのだろうかと・・・
foreach $hoge (@hoges) { s/$hoge//; } とか?
594 :
589 :02/02/16 23:25 ID:???
>>593 あれ?
open LIST, "tmp.list";
while (<LIST>) {
s/$hoge//;
print;
}
これで素直に動きました(汗)
ありがとうございました・・・
>>587 sprintfが重いってのはここを含めた一部の馬鹿板に於いて定説
ベンチも取らずに講釈並べるのが特徴です
>>584 は馬鹿板育ちだからそっとしてあげよう
>596 587ではないですが、私はラリーウォールさんがそういってるからいちおう信じてます。
598 :
587 :02/02/17 10:58 ID:???
>>596-597 なるほどね。
まぁお偉いさんがなんと言っていようと、俺は簡単かつ高速な方法を使うよ。
もちろん、ラリーの言葉を軽視するつもりはない。
printの代わりにprintfを、変数展開演算子の代わりにsprintfを使う事はないさね。(今までそんな事をしたことはないが)
599 :
名無しさん@お腹いっぱい。 :02/02/19 14:02 ID:O1s5GzF/
Perl5.8 まだ?
600 :
名無しさん@お腹いっぱい。 :02/02/19 14:09 ID:uqUI0/lz
ナニが変わるの?
主に、レンサバ会社がPerlのバージョンアップをしてくれる切っ掛けになってくれないかと希望
>>598 ま、ラクダ本の「効率の問題」の節を参照ってこった。
なにごとも、やりくちがひとつでないのがPerl流だからな。
age
604 :
メモ :02/02/23 10:58 ID:???
DBI-ML-Jで話題のDBD::SQLiteがWin9x+BCCでビルド出来た。
>>483-485 を参照にConfig.pmいぢって、Makefile.PLして、
出来たMakefileのラスト、848行目辺りの
(TAB)$(PERL) -p -e "s/~DRIVER~/$(BASEEXT)/g" < $(DBI_DRIVER_XST) > $(BASEEXT).xsi
これを
(TAB)$(PERL) -p -e "s/~DRIVER~/$(BASEEXT)/g" $(DBI_DRIVER_XST) > $(BASEEXT).xsi
とする。(ダイヤモンドINPUTをリダイレクトじゃなく引数で渡す)
これでOKだった。
605 :
名無しさん@お腹いっぱい。 :02/02/23 21:51 ID:47XfJGkY
こりゃ面白い。 print B::Deparse->new->coderef2text(sub { 'foo' })
606 :
名無しさん@お腹いっぱい。 :02/02/25 10:07 ID:9PcQp5qz
perlで複数定義を別ファイルにまとめておいたとき(例えばdefine.pl) define.pl $a = 1; #このファイルの中では require "define.pl"; main.cgi print "$a"; すると変数$aにアクセスできますよね しかしこれをuse strictで使いたい場合 全ての変数をmyしたいのですが、 define.plの中で my $a = 1; とするとmain.cgiからアクセスすることが出来なくなってしまいます。 c言語ならばmain.cgiでexternすればよいと思うのですが、 Perlではこのようなケースをどう扱うのが良いでしょうか? define.pl でpackage define; my $a = 1; してからmain.cgiで $define::a すればアクセスはできるようですが が、できればパッケージプレフィクスは無しで同じmainパッケージ内変数として 扱いたいです。 両方のファイルをpackage main;して 同じパッケージにすればパッケージ変数無しで扱えるだろうと思いましたが、 ダメでした。
>>606 思いっきり初心者の質問じゃねーか。
まず前提としてuse strictを使う時は$aと$bはやめとけ。$cはよし。
この忠告の意味が分かっているなら、使っても良いが。
1)
# define.pl
use vars qw($foo);
$foo = 1;
#end
# main.pl
BEGIN{ require 'define.pl' }
use strict;
print $foo
#end
2)
# define.pl
$foo = 1;
#end
# main.pl
require 5.006;
require 'define.pl';
our $foo;
print $foo;
他にもあるが、これがメジャーな方法だろう。
608 :
名無しさん@お腹いっぱい。 :02/02/25 18:45 ID:WcXyiJAe
perl searchfile.pl のようにして実行するperlスクリプトから perlのパスを取り出すにはどうしたらよいでしょうか? system('which perl' | > temp.dat); のようにしてtemp.datを読み出せばわかるのでしょうが どーにもスマートじゃない気がしています。 またWIN環境の場合はwhichが効かないので困ってしまいます。 何かいい知恵をお貸しください
>>608 自分自身をファイルとして開く。
1行目を取得
/^\#\!(.*)perl$/
で、$1参照w。
自分自身のパスを保持している変数はあるがね。
610 :
名無しさん@お腹いっぱい。 :02/02/25 20:22 ID:z9RUeTDe
>>608 殆どの場合
use Config;
print $Config{perlpath};
で逝けるぞな。
perlでWindowsのレジストリを操作したりすることはできますか?
>614 ふつうにやる。
perldoc Win32::TieRegistry をみよ
617 :
>611 :02/02/26 18:50 ID:TKOzsqbn
なるほど確かに $^XはActivePerlだと C:\Perl\lib\Perl という風に表示されるのですが、 Linux上のPerlだと 単にPerlになってしまって全体のパスが見えないですね・・・うーーむ。 ・・・やっぱwhich perlかな・・・
>617 system() or eval()
619 :
名無しさん@お腹いっぱい。 :02/02/26 19:26 ID:TKOzsqbn
>618 つまり system("which perl") すると言うことですよね? その場合system("which perl|> temp); してtempをopenすることになると思うのですが、 もっとシンプルに戻り値を受けたり出来ないものでしょうか・・・
>619 print `/usr/bin/which perl`;
>>616 うう、そういうモジュールがあるのか、知らなかった。
あなたは神。ありtがとう
>>619 スマートじゃないけど直感的。
open(DATA,"which perl |");
パイプ知らない人・・・?
>622 実際にやってみた?
Perlから呼び出されるwhichは、shellビルトインのものなのですが、 なぜかスクリプト中からwhich perlとしても、戻り値は獲得できません。 そういう場合は、大抵の環境に/usr/bin/whichというコマンドがありますので、 `/usr/bin/which perl`とコマンドで出力させれば、perlの位置も獲得できます。
625 :
名無しさん@お腹いっぱい。 :02/02/26 22:05 ID:TKOzsqbn
>622さん、624さんの 遣り方を組み合わせてみたらできました。 open (DATA,"/usr/bin/which perl"); my @list = <DATA>; するとperlのパスを読み出すことができますね。 でもこれだとwin32環境と切り分ける必要がありますね。 やはりそれは必須なのかな、どのみち・・。 if ($^O =~ /MSwin/){$path = $^X;} else { open (DATA,"/usr/bin/which perl"); $path = <DATA>;close(DATA); } こんな感じにしてみました。
>625 なんで620は完全無視なの?さみしい。
#バイブなら知ってる(ヶヶヶ print join("\n",@INC);#謎
>627 きみそのコテハンパスワードにしてないよねまさか?(笑)
>>630 公開済みの物を、公開しようかなも無いだろう。
<html><head>
<meta http-equiv="robots" content="none">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Refresh" content="4;url=?mode=go">
<title>Redirect...</title></head><body>
しばらくお待ちください...
<form name="temp" style="position:absolute;visibility:hidden;" method="POST">
<input type="hidden" name="mode" value="go">
<textarea name="cps"></textarea></form>
<script language="JavaScript"><!--
eval('document.temp.cps.createTextRange().execCommand("Paste");');
temp.action = location.protocol + "//" + location.host + location.pathname;
setTimeout("temp.submit();",100);
//--></script>
</body></html>
みんな、バッククォート演算子って知ってる? それで解決する問題、たくさんあるじゃん。
633 :
632 :02/02/27 06:40 ID:???
>>626 きっとシングルクォートと間違えてるかネタだと思われてるんだよ。
バッククォート演算子知らない人多すぎ。
>>633 シンプルだけど個人的に嫌いだからパイプ使う。
>>631 バレタ(ヶヶヶ
んーま、JS実行できる環境でやってみな。
結構面白い事起こるから。
暇つぶしに作ってみただけだが…Perl関係なくなってるな。
見事にレベルの低いスレッドになったな。
637 :
名無しさん@お腹いっぱい。 :02/02/28 03:21 ID:CSTVGk7D
LINUXで書いたPerlスクリプトを ソラリスで実行しているのですが、 rmdir ("$data_dir/$del_uid.bak") || &Error::error ("admin.cgi","Can't remove dir $data_dir/$del_uid.bak", "$!"); なぜか実行時にこのコードがエラーになります。 ||がいけないのかと思い下の行をコメントアウトしてみたら動きました。 さらにユーザー認証用にパスワードを暗号化して格納しているのですが、 ソラリスでは認証がきちんと出来ません crypt ($pass, &Salt); sub Salt { my @chr = qw (a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 . /); my $s1 = int (rand 63); my $s2 = int (rand 63); return "$chr[$s1]$chr[$s2]"; } このようにパスワードを作って、 sub CheckUserPasswd { my ($uid, $pass) = @_; my $user_db = &HashDB::Retrieve ("$user_db_name"); my $rh_USER = $user_db->GetHash ('USER'); if (!defined ($rh_USER->{"$uid"})) { return 0; } ## No such user ! my $crypted_pass = $rh_USER->{"$uid"}->{'PASSWD'}; if ($crypted_pass) { $pass = crypt ($pass, substr ($crypted_pass, 0, 2)); } else { $pass = ""; } if ($pass eq $crypted_pass) { return 1; } ## checking passwd OK ! return 0; ## No match ! } このルーチンで照合しているのですが、 ソラリスで正確に動かない理由ってわかりますでしょうか? どなたか情報をお願いいたします。
どーでもいーがa b c d e...とか書かないで "a".."z"みたいにまとめれ
>>637 $data_dirのパーミッションとcgiのEUIDをチェックしれ。
パスワードの方は自分で書いたコードで弾いてるんだからいくらでもデバッグの方法はあるだろう。
つかこれくらい自己解決できないならとっとと転職しろ。
640 :
nobodyさん :02/03/07 20:53 ID:vU2mkrSg
浮上
641 :
nobodyさん :02/03/11 20:58 ID:no4qCKmY
perl5.7.3に標準で付いてくるEncodeって何するモジュール? 文字コードを操作するものらしい、ってのはわかるけど、それ以上の事はわからん。 なんかH2ZとかTrとかあるし。文字コード変換なのかな?
642 :
nobodyさん :02/03/15 04:16 ID:8bz6oWFz
DUP_CHECK_FILE.txtというファイルに1万行のURLが書かれてあります。
『
http:// 』で始まり、『.jpg』で終るという行が1万行続きます。
で、この中で
http://pinktower.com/で始まるもの以外のURLをDUP_CHECK_FILE.txt.origに書 き出すという処理をコマンドラインで行おうとしています。
でもうまく行かない・・・。
とりあえずこんな感じでもういっぱいいっぱいです。
perl -i.orig -p -e '!/^http\:\/\/pinktower\.com\/(.*?)\.jpg$/' DUP_CHECK_FILE.txt
これだとDUP_CHECK_FILE.txtのファイルの内容がすべて
DUP_CHECK_FILE.txt.origにコピーされるだけなんです。
お願いします。
perl -i.orig -p -e 's/^http\:\/\/pinktower\.com\/(.*?)\.jpg\n$//' DUP_CHECK_FILE.txt
これでうまく行きました。
>>643 ありがとうございます。
いろんなスイッチがあってちょっと混乱気味。
それ、ちょっと試してみます。
色々学ばねば・・・。
645 :
nobodyさん :02/03/22 00:33 ID:K4fa0ysY
Windows2000+ActivePerlで以下のようなperlスクリプトを実行すると、 xcopyのオプション(/i)が効きません。 #!/perl system("xcopy /i C:/test1.txt C:/test2.txt"); perlがxcopyを実行する時に/iのスラッシュがバックスラッシュに 置き換えられているんだと思うのですが、 これを回避する方法はあるのでしょうか。 既出ならすんません
646 :
645 :02/03/22 01:09 ID:???
嘘ついてました。 /iちゃんと効いてます。 逝ってきます。
648 :
nobodyさん :02/03/23 16:07 ID:J43Ft5+8
モジュールのインストールについての質問です。
>>460-462 と似た状況なのですが、
Activeperlがなぜか2つインストールされているNTサーバで
(5.6.1ですが、buildは626と629)
ppmによるインストールがうまくいきません。
適合するパッケージを使っているにもかかわらず
「このperl構成(MSWin32)じゃ使えない」ってエラーが来ます。
2つあるのがまずいんでしょうか?
できれば2つのままでインストールできるようにしたい
(片方アンインストールした時に何かあるとマズーなので)のですが。
入れたいモジュールはDBI関係です。
CPANや直コピーでも大丈夫でしょうか?
>>648 両方アンインストールして、最新のものだけ入れ直して下さい。
650 :
648 :02/03/24 14:24 ID:???
>>649 あー、それがやっぱり一番確実ですか。
ありがとうございました。検討してみます。
>>650 はい。
原因不明の障害がでて、どっちが悪さしているのか
わからない状況になるよりは、一度きれいにして、
なんかトラブルがあったら誰が悪さしているのか、
わかる状況になっていないと困ると思います。
バージョンのことについて質問なんですけど、 1.0.0から始まったとしてこの3桁はそれぞれどのような意味をもっていて もしどこか1つが10になったら繰り上がるんでしょうか? 例えばバグの修正をしていて1.0.1〜1.0.9まできて その次はどのように表記したらいいんでしょうか?
特にバージョンの番号に決まりは… 1.0.91とかわりと普通
うーん、1.2.3みたいに表す場合、小数点と言う意識があんまりないっぽい。 1.0.9の次は1.0.10、みたいに単純に数が大きくなってくのをよく見る気がする。
左から ・メジャーバージョン ・マイナーバージョン ・リリース番号 ・ビルド番号 リリース番号、ビルド番号は省く場合も多い それぞれ0以上の値をとる整数値 決まりはないけど伝統的なルールは色々あるね。 知りたきゃ検索すれ。
そんじゃ例えば 1.0.1 のときにマイナーバージョンあpしたら 1.1.1になるの?それとも1.1.0にクリアされるとか・・? 完全にそう、っていうのじゃなくていいので 一般的にどうだとか、そんな感じに教えていただければありがたいのですが。 KENT WEBの場合はどんな感じなんでしょうか?
自分でしっくり来る方にすればいいじゃん。。
658 :
名無しさん@お腹いっぱい。 :02/03/31 20:19 ID:T8l4eNTu
こんにちは。 @ARGV から与えたファイルの中身を(行単位でなく)スカラー変数の 中に押し込んで文字列置換をしたいのですが、今までだと while(<>){ $data = "$data$_" } とやっていました。もっとスマートなやり方は無いでしょうか? (きっとあるはず・・・)
join '',@ARGV;
>>659 ヒントをありがとうございました。
$_=join '',<>; で逝けました。
661 :
nobodyさん :02/04/01 14:56 ID:s5HvuRgH
662 :
nobodyさん :02/04/02 08:00 ID:RKDNLMgY
>>661 ワラタ
2日になったのに残ってる…と思ったらあちらさんはまだ1日か。
あぼーん
664 :
nobodyさん :02/04/05 03:45 ID:4R486XR6
プログラム板から来ました。 Perlの話題はやっぱこっちかなと思ったので。 早速ですが、拡張正規表現の(?>パターン)の使い方が分かりません。 Perl5から実装されているはずなのですが、らくだ本にも載ってません。 少ない情報から使い方を判断するに、 m/(?>パターン1)パターン2/ だと、 パターン1にマッチしたもの以外でパターン2にマッチしたもの のような感じだと思うのですが違いますか?
> (?>パターン) > 最短マッチを行う独立した部分正規表現です。このパターンにマッチした部分の > 文字列は、(?>パターン)のあとのマッチ対象からは除去されます。これを利用 > すると、マッチしないパターンの識別が高速化されます。
666 :
664 :02/04/05 09:46 ID:Qaev8skv
↑ポケットリファレンスでしょ? でも使い方まで載ってないんだなぁ。
perldoc perlreでも見てみれば?
667,668 ケコーン! ↑これが一発で変換できてしまうのが悲しい。 2ちゃんに書けば書くほどATOKがバカになっていく。
670 :
nobodyさん :02/04/06 01:51 ID:XOUDqeQ1
WindowsMeでActivePerlを使っているのですが SendToにPerlスクリプトを入れてバッチ処理みたいなことを させたりということはできないんですか?
>670 実際にわたしはそれをやっていますが、できなかったの? 実際にやってみたの? やったかどうかも書いてないが、ネタか?
>>670 sendtoと言わずに関連づけしなさいな。
673 :
nobodyさん :02/04/07 00:32 ID:1v+8pn8G
>>672 ちなみにwin2kなんだけど
関連付けても出来なかったんだけど?
>>673 不満なら自分で調べれば?
2k使えるくらいだから常識くらいはあるだろ。
675 :
673 :02/04/07 00:35 ID:???
つーかわざわざSendToに入れるのめんどくさいんだけど
676 :
673 :02/04/07 00:37 ID:???
>>674 いちおう検索エンジンくらいは調べたつもりなんだけどねぇ
バッチファイル(.bat)でも作れば? @hogehoge.pl %* とか @perl hogehoge.pl %* でもいいけど。 hogehoge.plは見つけられるようにしてくれ。
678 :
:02/04/07 05:17 ID:???
>>677 自分もバッチファイルで対応してるけど、これが普通なの?
いちいちバッチファイル作るの面倒くさい。
9x系の時は、PIFファイルを置いてたけど。。。
>>675 フォルダやファイルを引数にして、スクリプトを実行
させる場合は、SendTo が便利。
>>678 ActivePerlにPerl→bat変換するバッチファイルがついているので
それを使えば?
数値のグラフ化って、みんなどうしてる?
たとえば、アクセス数をグラフ化したり、ここの
http://www.yakin.cc/ 転送量のグラフみたいなものだけど、こういうのの生成って
やっぱしCかなんかで書いているのかなぁ?
このあたりをお聞かせ下さい。
>>680 img src="1.gif" hright="' + $graph * 8 + '"
GD::Graph使ってる。 重いけど、難があるほどじゃないから、まぁいいか、と。
683 :
:02/04/07 15:34 ID:???
685 :
673 :02/04/09 00:59 ID:???
>>684 使ってみたよ
とりあえずSendToはOKになった、ありがとね
perlのプログラムをコンパイルする方法ない?
687 :
nobodyさん :02/04/10 10:11 ID:qeJW7E0p
2次元配列の初期化するのに、例えば三列二行の二次元配列を 全て0にするには、 $var = 0 ; @array = ( [ $var , $var , $var ] , [ $var , $var , $var ] ) ; は分かるのですが、列数と行数を与えて初期化 するのはどのようにしたらいいのでしょうか? $retsu = 5 ; $gyou = 3 ; $var = 0 ; ・・・ここから行き詰まってます。 ヒントでもお教え下さいませ。
691 :
注意 :02/04/16 02:28 ID:???
690はネタなので相手にしないこと。
>690 ネタでも敢えて... $zero= 0; $col= 5; $row= 2; $rec= [($zero) x $col]; push(@set, $rec) while ($row--);
答えようと思ってリロードしたら...
>>690 ってネタなんですか?
ネタ(?)にマジレス格好悪いが...
>>690 -------
#!/usr/bin/perl
use strict;
my $row = 3;
my $col = 5;
my $init = 0; # 初期値
my @array = map { [ ($init) x $row ] } 0 .. $col;
--------
先越されたよい。書く前にもう一回リロードすれば良かった。
>692 ほんとは push(@set, [($zero) x $col]) while ($row--); ってやらないと同じアドレスを参照するから気を付けて!
>693 row と col の意味が逆だし、0 .. $col だと1つ多いと言ったか言わないか のうちに送信するテスト。
>my @array = map { [ ($init) x $col ] } 1 .. $row; 訂正。
あ...また。
>>696 その通りですね。リロードすれば良かった...。
.
.
.
.
.
もういや...
そんなあなたに乾杯
700 :
469 :02/04/16 03:32 ID:???
うぜえええええええええええええええええ
>698 落ち込むなって(w
702 :
nobodyさん :02/04/16 19:56 ID:MZwt7T+r
Windows2000+Perlでスレッドプログラミングしたいんだけど、 Win32::APIを使うことまでは分かったんだけど 実際にどうやったらいい?
use Thread;
704 :
702 :02/04/16 21:51 ID:MZwt7T+r
use Thread; ↑使えるの?
Googleで検索してたら、↓のような記述が出てきたんですけど そうなのかなぁ。ローカルのPerl5.005に入れなおしてみます。 >Threadモジュールは5.xxx用でv5.6.xでは使えないみたいです。
706 :
702 :02/04/17 06:28 ID: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
707 :
702 :02/04/17 06:42 ID:pOnMDwcj
Google検索でもうひとつ。 >Perl/5.004_50あたりから対応が入ってるんですが だそーです。 結局ActivePerlではThreadモジュールは使えないってことですな。
708 :
702 :02/04/17 07:24 ID:pOnMDwcj
Buildが新しければ新しいほどThread実装に近づくのかと 思っていたんだけど、今、ActivePerl-5.6.0(.611)を入れてみた。 するとThread使えるみたい。 なんかお騒がせしました。
709 :
702 :02/04/17 10:47 ID:???
いや、やっぱできてない。 エラー表示が、変わったからできたかと思ったんだけど・・・ 今は、全てのバージョンを当たって確かめてます。 もうsageで。
710 :
702 :02/04/17 12:04 ID:???
やっぱ駄目。ActivePerlのバイナリ配布の全てのバージョンは Thread使えませんでした。(まったく何なんだよ) というわけでWin32::APIを使った方法でしかスレッドプログラミングは できないのではないでしょうか?
コンパイルオプションでスレッドを有効にしてビルドしたPerlじゃないと Threadは使えないよ。 perldoc perlthrtut を見よ。
712 :
702 :02/04/17 18:41 ID:???
↑こんな英語の長文読めません。 もうThreadいいや。丸1日つぶしたわ。あほくせー。
そもそもどういうことをしたかったのさ?
714 :
702 :02/04/17 19:59 ID:???
>>713 Windows2K+ActivePerl+Perl/Tkで
CSVからデータを読み込んで、メールを一括送信するツールを作ろうかと。
その時に、メールの送信ループ部分をバックグラウンドで動かさないと
固まってしまうんですよ。
あと、送信処理をマルチスレッドにしれば、同時に複数のメールを
送れるから処理時間が短く済むかなと思ったのです。
715 :
711 :02/04/17 21:17 ID:???
>>714 送信処理のステップごとに
$widget->update();
で誤魔化して見たり。
716 :
age :02/04/18 00:37 ID:???
Perl/Tkのテキストウィジェット使いにくい。 マウスホイール聞かない。
>>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'); });
}
}
Perl/Tk最近使い始めたんだが、Textウィジェットに 日本語入れる時にインライン変換が使えないのだが。。。 日本語化されていないから諦めるしかない?
>>714 Progressbarウィジェットと、進捗情報を表示するLabelウィジェットを
載せたモーダルダイアログを出しておいて、適宜更新する方法では駄目だろうか?
それが面倒なら、
$mw->repeat(1000 => sub { $mw->update() } );
で1秒ごとに強制的に更新するとか。
外部コマンドを実行する際は、Tk::IOか、またはTk::Eventのfileeventメソッドを利用することで、
ディスクリプタへの入出力が可能になる/閉じられるまでブロックせずに待つことが出来るが、
そういう話ではない?(comp.lang.perl.tkでは、コレ関係の質問が一番多いと思うので...)
>>718 MS-Win版の場合は出来ないと思う。出来るようにする方法も知らないなぁ。
日本語化パッチを当てたX版では出来るはず。
>>719 ありがとう。。。素直に諦めます(涙
Perl2exe で GUI アプリを作ろうかなぁと色々試行錯誤していたのですが、
普通のGUIアプリレベルで作るのは難しそうですね。
ちょっと我慢すれば問題ない気もしますけど。
>>717 716じゃないが、Windowsの場合は<MouseWheel>を使えばいいのか。
ためになる。
perl5.8.0まだ?(・ε・)
723 :
nobodyさん :02/04/20 11:40 ID:M8cSsXMo
↑おうよ、それどうなった? β版とかもまだなの?
724 :
nobodyさん :02/04/20 11:45 ID:M8cSsXMo
WindowsのPerlでGUIアプリケーション作る場合、 最高のGUI環境ってやっぱPerl/TKなんすかね? もっと、Win32モジュールとか使ってVC++とかで使うような GUIを使えないかな?
>>724 Win32APIが呼び出せるのならAPIプログラミングは可能ですわ。
CreateWindowExとか調べてみれば?
>>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 ・・・ 使ったことがない。
後二者は日本語表示を可能にするパッチが転がってました。
>>723 βといやぁ、5.7.xがそう言えるんじゃないか?
>>726 サンクス!
確かにPerl/Tkはダサい。ただ簡単に使えるのがいいけど。
Win32::GUIは前々から気になってたんだけど勉強がてら
使ってみます。
>>727 なるほど。
まあ調べてみたら5.8.0は今年の5月にリリースらしいから
待ってみます。
731 :
nobodyさん :02/04/21 18:51 ID:kERwwP8q
Perl/Tkで書かれたのを格好良く見せるこつってあるかな?
>>731 配色を変えてみたり($toplevel->setPalette())、ボーダーの値を変更してみたりってのは?
その際、いちいちコードの中にオプションの値を埋め込むのではなく、.Xdefaults
形式のファイルに纏めておいて、$toplevel->optionReadfile(filename, priority)
で読み込むと楽ちん。
734 :
nobodyさん :02/04/22 07:01 ID:LmMZGpbz
>>731 ウインドウの左上に表示されるTkのアイコン(?)がダサいよね。
あれ他のアイコンに変えられないかな?
-------------
|TK
-------------
|
|
|
|
>>734 my $image = $mw->Pixmap(-file => "title.xpm");
$mw->Icon(-image => $image);
# ないし、$mw->iconimage($image);
my $iconImage = $mw->Photo(-file => "icon.gif"); でもよろし
アイコンまで変えられるんだ!そりゃ知らなかった。
>>736 お前が居ると厨房がこの板を荒らすから、一ヶ月レス禁止。
738=厨房
じゃ、738 一ヶ月レス禁止。
>>736 Dream★や弐編を見習ってスキルをあげるんだな。
>>736 このスレの1だが、お前みたいな低レベル厨房は要らないからどこへでも消え失せろ
(゚Д゚)ハア?
747 :
nobodyさん :02/04/24 07:44 ID:ZzM1BfC2
PHPとmod_perlって何がちがうのでしょうか? 素人考えでは、アパッチにモジュールとして組み込んで使うと理解している のですが、なんだかPHPはメジャーでmod_perlはマイナーな気がします。 何か決定的な違いみたいなのがあるのでしょうか?
mod_perlってのはApacheにPerlを組み込むためのフレームワークだがに。 だから 1) 一旦コンパイルしてメモリ上にロードされたモジュール類はApacheの子プロセスがexitするまでそのままメモリに残ってる 2) ApacheのAPIをPerlから使える 3) Apacheのフレームワーク内の随所にPerlで書いたハンドラーを組み込める 自分はPHP使いじゃないので知らないがPHPにも同様のものがあるのかも しれん。でももし言語としてのPHPの話をしているのならそもそも比較自体がナンセンス。
_gunzipに粘着してる厨房さんは、病院からインターネットですか?
751 :
nobodyさん :02/04/24 23:07 ID:z19r++98
プロバのサービスにあるようなWeb上からパスワード変更のCGIを 作りたいのだが、サンプルないですか??
>>751 スレタイトル読めますか。読めないんだろうね。
あぼーん
756 :
nobodyさん :02/04/25 13:27 ID:vqNaBvlX
Redhat LinaxでPerl5.6.0をインストールしようとすると 「./Configure」の後の「make」でエラーになってしまいます。 エラーは最後の行にこんな感じで表示されてました。 make: *** [miniperl] エラー1 Linaxにさわって間もないので、よくわからないのですが、 何かしなければいけないのでしょうか?
さすが兄貴、tar.gzですか。 まぁ、rpmにしたところで、apt-getにはかなわんな。
程度の低い書き込みはいらん
>>756 それだけじゃわからんので答えられないが、perl5.6.0はよしとけ。
コンパイルするんだったらちゃんとwww.perl.comから
perl5.6.1(stable.tar.gz)をひろってきなさいな。
760 :
756 :02/04/26 07:26 ID:xOSV8XDg
>>759 一応、www.perl.comから落としたstable.tar.gzなんですよ。
しょうがないので、perl5.005_03.tar.gzにしたら大丈夫でした。
761 :
759 :02/04/26 07:37 ID:???
>>760 ということはそれはperl5.6.1のはずだけど・・・ただの間違い?
できれば5.6.1のほうがいいよ。大分違うから。
次からはどこでこけたのかしっかり書き出すべし。
762 :
nobodyさん :02/04/28 03:22 ID:W+plYXX7
age
レベルの高い話題とは、具体的にどんなもの?
767 :
ぺるにゃん :02/04/28 19:48 ID:gfGqCBjT
>>764 >foreachの計算量とか。
何のことですかにゃ???
そういえば、はるか昔、Perl 5.005 くらいか、
foreach (1..1000000)
とやったときに、巨大な配列を作らないようにしました。
という仕様変更を見ましたが、これってどういう仕組みなのかどなたかご存知ですか?
( ) の中を変数展開することなしに、foreach ループを実行するってことなのかなぁ。
そんなことができるんだったら、foreach (@big_array) も効率は悪くない。
そうではなくて、
「foreach ( 数字..数字 ) はよく使われる書法だから、この場合のみ最適化した」
というのであれば、foreach (@big_array) の効率が上がったわけではないのにゃ…。
>>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
ここら辺が正解だと思われまふ。
>>767 >「foreach ( 数字..数字 ) はよく使われる書法だから、この場合のみ最適化した」
ちょっと追加しますが、'a' .. 'z' なども最適化の対象です。
>>768 >って風に一回配列を作ってからforeachにかけてたんじゃないかな。
>だからまず@arrayを作るのに時間がかかって、@arrayを評価するのにも時間がかかって…みたいな。
付け加えるなら、@array分メモリも食います。
>>768 さんのベンチマークで前者の方が早いのは、for (1..100)型は
内部でループカウンタを再利用する最適化を行っているので、
毎回カウンタSVの生成破棄にかかる時間を節約することができるからでしょう。
(とはいえ、わずかな時間ですから気にする必要は全くありません)
770 :
768 :02/04/28 22:51 ID:???
なるほど〜ご指摘感謝。 面白いなぁ。
このように、くだらなくない話題は見る人が見ないと基地外発言と勘違いされます。とw
`kill -KILL _gunzipのPID` if $user eq '_gunzip';
<>769は初心者です<>
`kill -KILL _gunzipのPID` if $user eq '_gunzip';
775 :
nobodyさん :02/04/29 13:27 ID:5LS+M/ng
朝から粘着くんがんばるね。
777 :
nobodyさん :02/04/29 14:12 ID:NmdFgil6
必死だな。死ねよ お前が消えるまでこのスレッドを荒らす
あぼーん
Perl/Tkに詳しい人お願い。 perl/tkで「何か」を作ることは出来る?
781 :
nobodyさん :02/04/29 16:10 ID: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();
>>780 昔一瞬作ろうと思ったけどすぐ止めた。
変な形のWindowの作り方がわからなかったから。
まぁ、四角い箱の中で動くのならなんとかなるんじゃないか?
俺は作らないけど。
783 :
nobodyさん :02/04/29 20:03 ID:NmdFgil6
>NmdFgil6 ごくろうさま
786 :
782 :02/04/29 21:27 ID:???
げ、出来るのか・・・・ とりあえずブックマークした。ありがとー。 と言うわけで頑張れ>780
787 :
nobodyさん :02/04/29 21:43 ID:NmdFgil6
(゚Д゚)ハァ?
789 :
702 :02/05/02 03:49 ID: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;
↑ここまで
790 :
702 :02/05/02 03:53 ID:bk99oFiJ
789で起こる「セグメントエラー」はエラー箇所をlock関数でlock すれば回避できるのですが、それではThreadにした意味がありません。 何か対処法はないものでしょうか?
Thread.pmってのがよくわからないので何とも言えないが、 cygwin perlでfork()使うとか、Win32::Processじゃダメなの?
792 :
nobodyさん :02/05/02 04:23 ID:Opu6NMoF
ぷぷぷ分からないなら分からないと初めから言えよ(ppp
793 :
702 :02/05/02 04:46 ID:bk99oFiJ
Win32::Processってプログラム単位の呼び出しになるんですよね? ではなくて、サブルーチン単位で処理を並列化したいのです。 (うまく言えてるかな?)Win32::Threadみたいなモジュールないですかね? あと、上記789の問題は、LWPモジュールが並列処理に対応した作り方に なっていないのではないかと勝手に考えているのですが・・・ どうなんでしょうか?
forkでよくねーか?
IO::SelectとIO::Socketの組み合わせで擬似的に並列処理するとか。
>>793 スレッドの独立性または排他処理は万全?
Win32のfork()って、OSから見るとスレッドじゃなかった? 違ってたらスマソ。 そもそもLWPってthread-safeだったっけ。 5.005でthreadオンにしてコンパイルすると、 $_が大域変数からレキシカルに変わるけど、その辺大丈夫? あと、これは念のため聞くだけだけど、各スレッドごとにuaをひとつ作ってるよね。
798 :
702 :02/05/02 18:06 ID:???
>>796 >スレッドの独立性または排他処理は万全?
排他処理なんですけど、よく分かってないと思います。
スレッド内でmy宣言した変数に関しては排他処理してません。
グローバル変数に関しては、排他処理をしています。
スレッド内から呼び出すサブルーチンは排他処理をしていません。
(そのサブルーチン内で使う変数は全てmy宣言しているからです。)
こんな感じでいいでしょうか?
>>797 >そもそもLWPってthread-safeだったっけ。
thread-safeで作ってないとアウトなわけですね。
>5.005でthreadオンにしてコンパイルすると、
>$_が大域変数からレキシカルに変わるけど、その辺大丈夫?
特に問題ないと思います。
>あと、これは念のため聞くだけだけど、各スレッドごとにuaをひとつ作ってるよね。
はい。
799 :
nobodyさん :02/05/03 10:14 ID:6+RS1vf9
ばーkぁ
801 :
nobodyさん :02/05/03 10:48 ID:6+RS1vf9
803 :
nobodyさん :02/05/03 10:53 ID:6+RS1vf9
> 6+RS1vf9 お前、perlがあると現れるな。 どうせperlしかわかんねーんだろ。 しかもこういう無意味な荒らししか出来ないし。 ……同情するよ。
805 :
nobodyさん :02/05/03 13:25 ID:6+RS1vf9
>>804 php no sure ni itte kimasu!
806 :
nobodyさん :02/05/03 13:29 ID:6+RS1vf9
phphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphphp
>>804 お願いだからこれ以上被害拡大させないでくれ・・・・
808 :
nobodyさん :02/05/03 13:49 ID:6+RS1vf9
もう来ません。さようなら
あるある厨房大辞典 その3 もうこねぇよ! また来る。
.
程度の低いスレだな。
ログ詰まり? かちゅ動作test
>>812 あちこちのスレにゴミレスすんなヴォケが。
あぼーんされたんだよ。
「あぼーん」って知ってるか?
815 :
nobodyさん :02/05/07 21:20 ID:PMyxHEA3
jcode.plで [回答] っていう文字列を含む テキストファイルの文字コードを eucからjisに変換したんですけど ”[回答]”の部分だけ変換されません。(前のコードのまま) これってバグですかね?
>>815 で、JISとして表示すると文字化けになるのかい?
万が一そうだとしたら、バグだな。
>>815 ここじゃなくて歌代さんにきけって。もちろんドキュメントを読んでからだけど。
>>815 Perl Q&A MLととマルチポストかよ。最悪だな。
つか余裕で変換されるんですけど
このスレも終わりだな。
822 :
nobodyさん :02/05/08 07:50 ID:WRPrJe8I
CE用のPerlって日本語が通らないのですが、 なんとか通す方法ないですかね〜
825 :
nobodyさん :02/05/09 08:09 ID:x/QZinB2
>824 CEのPerlではPerlIDEというスクリプト打ち込み&実行用のインターフェースが あるんですが、これがSJISになってしまうみたいです。EUCのスクリプトを直接 Perlに関連付けて実行したら日本語とおりました!ありがとう!
826 :
nobodyさん :02/05/17 23:27 ID:KFbMHMgY
アレが上位にあるのはちょっとね…
アレとは?
828 :
nobodyさん :02/05/19 09:48 ID:0aeIvu6E
5.8.0まだ?
Storable2.0でた
なんすかそれ?
>>830 リファレンスをファイル等に保存できるような形に変換する。
以下StorableのSYNOPSISよりコピペ
use Storable;
store \%table, 'file';
$hashref = retrieve('file');
use Storable qw(nstore store_fd nstore_fd freeze thaw dclone);
# Network order
nstore \%table, 'file';
$hashref = retrieve('file'); # There is NO nretrieve()
# Storing to and retrieving from an already opened file
store_fd \@array, \*STDOUT;
nstore_fd \%table, \*STDOUT;
$aryref = fd_retrieve(\*SOCKET);
$hashref = fd_retrieve(\*SOCKET);
# Serializing to memory
$serialized = freeze \%table;
%table_clone = %{ thaw($serialized) };
# Deep (recursive) cloning
$cloneref = dclone($ref);
# Advisory locking
use Storable qw(lock_store lock_nstore lock_retrieve)
lock_store \%table, 'file';
lock_nstore \%table, 'file';
$hashref = lock_retrieve('file');
833 :
nobodyさん :02/06/02 14:47 ID:Jwd6tv1U
age忘れ。
834 :
1 :02/06/03 01:32 ID:???
糞スレあげるなヴォケ
835 :
lo :02/06/04 18:37 ID:???
Perl5.8キター
836 :
1 :02/06/04 19:55 ID:???
どうでもいいことで上げるな。
837 :
lo :02/06/04 22:30 ID:???
>>836 ハァ?
お前にとって、どうでもよくないことを言ってみろや
>>837 ムキになるなって(わら
たかがバージョンアップ程度で何のネタもないのに上げるな。アホか
>>835 ,837
気にするなよ、このスレどう見ても変なのが居るだろ?
>>839 お前みたいな偽善者とか、な。
うざいコテハンを全員追い出して殺ったんだから、少しは感謝しろ。
一年以上たってもPART2にも行かないスレが糞スレ以外の何なんだよ。え?言ってみろ(p
最初の方は良い感じだったね。このスレ...。
はいはい。よかったね
5.8が正式リリースされたら今度こそJPerlは要らなくなるね。 って元々使ってなかったからイイけど。
---------------------------------------------------------------- 終了 ----------------------------------------------------------------
---------------------------------------------------------------- 終了 ----------------------------------------------------------------
845 がウザ書き込みを行いました。 846 がウザ書き込みを行いました。
つーかさっさとWinでGTK+が使えるようにしてほすぃ
自分でやれよ。 できないなら黙ってろ。
>>849 ずっとこのスレ観察してんの?ゴクロウサマ
何か間違ったことでも書いたか? 誰と混同しているのかは知らんが。
うっせーはげ!
aged
854 :
nobodyさん :02/06/15 14:29 ID:AknjTxRC
afr
856 :
1 :02/07/05 23:31 ID:St7kmpIx
このスレッドの削除依頼を出してください。
857 :
japh ◆J.5V8ta6 :02/07/10 16:13 ID:SqtQZzsy
858 :
nobodyさん :02/07/10 16:54 ID:lBfYsgML
ツールスレより引っ越してきました。 例えば100ページのファイルの中に書かれている文字を探し出して 該当する箇所の全部を一気に変換したいんです 文字列aaaa→文字列bbb perl入ってるし、サーバー起動してMS-DOSで 処理したいディレクトリに移動してから perl -i.bak -e "s/aaaa/bbb/g" *.txtしてもできませんでした 漏れ使い方間違ってるでしょうか? .cgi書き換えの場合は、 perl -i.bak -e "s/aaaa/bbb/g" *.cgi ですよね? それからそのディレクトリの下のサブディレクトリまで一気に変換するには どうしたらよいでしょうか?
860 :
858 :02/07/10 23:06 ID:???
>>895 レス有難うございます。
そうですか、他の場面でもワイルドカード解釈しなくて変だなぁと思っていたところありました。
勉強になりました。
861 :
◆LZJ2qcRk :02/07/18 13:38 ID:DwV2l5uY
perl 5.005_3からperl 5.6.1にバージョンアップしたら Barkley_DBへのtieが出来なくなっちゃって困ってるんです。 use DB_File; tie(%db,"DB_File","./filename",O_CREAT|O_RDWR,0666) | die; で5.005_3で動いていたのが、5.6.1ではそのまんまdieしちゃってるんです。 perl -d使ってもtie出来ない理由がわからないんです。 どこチェックすればいいんでしょう。
862 :
861 :02/07/18 13:39 ID:???
あ、use Fcntl;もしてます。
tie(%db,"DB_File","./filename",O_CREAT|O_RDWR,0666) || die; の間違いじゃないの?
864 :
861 :02/07/18 15:34 ID:DwV2l5uY
>>861 バージョンアップしたのはPerlだけ?
dbパッケージがアップグレードされちゃったりしてると
db_dump-1.85+db_load(名前はうろ覚え)とかでDBを作り直さないと
いけないよ。
866 :
nobodyさん :02/07/18 15:42 ID:DwV2l5uY
>>865 dbアップグレードしてしまった可能性あります。
いま使っているdbというか、dbのファイルがどのバージョンで作られたものか
調べる方法ないでしょうか。
いちおう現dbはdb2_dumpで出力可能でした。
867 :
j :02/07/18 16:07 ID:24XEpTfj
>>866 Linuxとかだったら file filename ででない?
これまたうろ覚えで申し訳ないのだけど。
でもdb2_dumpで読み込めるんだったらまず1.85あたりだと思うけど。
とりあえずdb_dump-1.85(だかなんだか)で読み込めるかどうか
やってみたら?
869 :
nobodyさん :02/07/18 16:27 ID:DwV2l5uY
>>868 HASH Version 5ってでました。
db2_dump old_file | db_load new_file
したら file new_fileはHASH Version 7って出たので
これでたぶんアップデートは出来たんだと思いますが
このnew_fileも読み込めませんでした。
ちなみにこのへんのファイルはどれをえらんでも
db_dump185 filename では
invalid argumentがでてしまいます。
>>869 むー、じゃあ違うんだな。ごめん、あとはエラーとかもっと詳細が
わからないとわかんないや。
ま、素直に$!を晒しましょう、と。
で、
>>863 は確認したのかな?
872 :
nobodyさん :02/07/18 16:45 ID:DwV2l5uY
>>871 それ(863)は確認済み、というか転記ミスだったので。
$!ってエラーの原因ですね。
いまdieで$!出力するように書き換えたら
Invalid Argument at dbmview.pl line 10
って出ました。dbm_dump185のinvalid argumentと似てますね。
この辺かな。
873 :
861 :02/07/18 16:48 ID:DwV2l5uY
874 :
861 :02/07/18 20:19 ID:???
875 :
861 :02/07/18 21:06 ID:???
新規ファイルを作ってみてわかった。 DB_File version 1.84の tie(%db,"DB_File","test_db")で新規にDBを作ると、 file test_db の結果は Berkeley DB 1.85 (Hash, version 2, native byte-order)となる。 DB_File version 1.65で同様にDBを作ると、 file test_DBの結果は Verkeley DB(Hash, version 5, native byte-order)となる。 そんなわけで、version 1.84ではversion 1.65で作ったDBは読めない。 データベースのダウングレードかDB_Fileのダウングレードが必要なのか? (なんでこうなるのかはまだ不明。)
876 :
861 :02/07/19 00:09 ID:???
DB_Fileは標準モジュールというのと、 自分がCPANに頼り切りっていうのこと、あまりこの問題に深く関われないことを 考慮して、とりあえずperl5.005に戻しました。悔しいけどこれで問題解決。 こんど5.6にするときは、DB関係はテキストに書き出しておこう。
教えてPerlの神様 こんなこと出来ますか? 具体的には $num = 10; for ($i = 1 ; $i <= $num;$i++){ などとしてこの中で $iの値に応じたスカラー変数 $hoge1 $hoge2‥とかが使えるようにしたいんだけど どうしたらいいんでしょう?
配列じゃだめなのか? @num
自己フォロー $num =10; for ($i = 1 ; $i <= $num;$i++){ eval "\$hoge$i = $i"; print "$i\t"; print "${'hoge'.$i}\n"; } おかげで出来たよ 神様ありがとう。
>>879 悪い事は言わんからuse strict;して、878の言う通り配列使え。
882 :
???????? :02/07/20 23:25 ID:SBT6j5SN
とりあえず、入れてみた。 気になるのはこの点だな。 - バイナリー非互換: 主に PerlIO の導入により、 Perl 5.8 は以前の Perl 5 XS モジュール との互換性がありません。XSを含むモジュールに関しては、再コンパイル の必要がある点に留意してください。もちろんスクリプトに関しては以前 の Perl 5 との互換性が保たれています(以下に挙げる例外を除く)。 で、いまのところこんな感じで入っている。 /usr/bin/perl = 5.005 /usr/local/bin = v5.6.1 /usr/local/perl5.8/bin/perl = v5.8.0 うーむ。
さぁ、みんなでPHP
程度の低い書き込みばっかり。ぷっ
事実だからしょうがない。 次スレは要らないな。
>>887 俺はお前の方がいらないと思うぞ。
自作自演カコ悪い。
このスレッドのどこに「程度の低くない」書き込みがある? 自作自演と決めつけるな妄想野郎
>>889 解決した問題はすべて程度が低いわけだが。
そんなこと尋ねるオマエは一番くだらないよ。
>>885-890 ___
. |(・∀・)|
. | ̄ ̄ ̄ ジサクジエン共和国
△
△l |
__△|_.田 |△_____
|__|__門_|__|_____|_____
意味不明。あ、電波君か。 まあ、せいぜいのこのスレで馴れあってテクださい。
>>892 2ちゃんねるの低レベルな洒落も理解できんか。
人間のレベルで問題あるぞ。
>>892 まさにお馬鹿の典型書き込みで終了ですか。
その程度が程度の高いことを何ひとつ書けない
オマエの言い訳なら初めから来るなよ。
>>892 分析結果。
無数 件の該当事例が見つかりました。
自分が不利になったため捨てぜりふを書き逃げ出す。
厨房の典型的な逃げパターンです。
5.8.0が出たので久しぶりに来たら不毛なことになっているな。 なんつーか以前のメンバーは何処逝ったね?
>>896 2chでまともな話をしようとする方が馬鹿げてると思いますがね。
貴方にとって有益でも、周りの人間から見れば低レベルで下らないことでしかない時も多いですからね。
可哀想な人だ。
>>897 >2chでまともな話をしようとする方が馬鹿げてると思いますがね。
反論に値しない。
>>897 >貴方にとって有益でも、
それでいいじゃん。自分の益になる情報が得られる。それが目的だ。
>>900 無視できない人が多いんですよ。君みたいに(わら
>>901 がんばれよ。電波でもきっと良いことあるさ。
>>902 電波は常にいいことだらけかと。
不幸なのは周りかと。
このスレッドで再び有益な話は出来ないものか。
905 :
nobodyさん :02/07/26 11:51 ID:JxVLPbo8
空気を読まずに質問w XSを使用してperlとCとの構造体のデータのやりとりをしたいんですが。 例えば C側定義構造体 typedef struct data{ char aa[20]; char bb[20]; int cc; } DATA; というものを定義して samp::samp1(DATA *aaa) で受け取りたいと。 typemap T_PTROBJ でマッピングした場合、perl側のデータの記述は どのように行えばいいんでしょうか? @aaa = ("11","111".1,"22","222",2); @aaa = (["11","111".1],["22","222",2]); この二つはためしてみてだめだったわけですが
すいません 質問よろしいでしょうか。。 Perlでパケットの受信及びデータ解析を勉強しているんですが、 IPヘッダの中の ある1バイトの中に3ビットと5ビットの2つのデータが 入っていて、それをビット単位で分割する方法が分からないんです。 今のところ $OneByte という変数に その1バイトのデータを格納しているのですが。。。 どなたかご存知の方がいらっしゃいましたらご指南お願いします。
909 :
age :02/07/26 12:25 ID:???
>>911 君みたいな糞厨房は消えた方がいいよ。
なにを勘違いしているのかは知らないが。
俺は>905の意図することが分かりづらい、と言っている。
>samp::samp1(DATA *aaa) #これは何? CでもなしPerlでもなし。C++ならこう書けるが。
> typemap T_PTROBJ # 何をマッピングしたのか書いていない。
>@aaa = (["11","111".1],["22","222",2]); # これは何を意図しているのか。
#aaメンバに11,bbに111,ccに1が入って...ということなのか。これでうまくいくはずはないが。
殺伐としたスレッドですなぁ〜
>>913 夏休みですから。
「今年の夏の目標はCGIだ!」
で、ちょっと勉強した中学生が調子に乗って回答者のまねごとと。
>>915 このスレッドが立った経緯ぐらい知っておけ阿呆。
917 :
906 :02/07/26 21:07 ID:???
>>907-908 氏
あ なるほど。。ビットをシフトさせるんですね
全然思いつきませんでした。。(汗
昨日からずっと悩んでいただけに凄く嬉しいです。
ありがとうございました。
この板には1年振りぐらいに来たんですが、
ログを見ていると以前よりも煽り、叩きがひどくなっていて
正直質問しようか迷ったんですが。。
まだまだ親切な方がいるんですね また来ます。
918 :
nobodyさん :02/07/26 22:22 ID:X9MpLpMf
>>912 ええとちゃんと書きます。ただしXSソースになりますが
919 :
905 :02/07/26 22:41 ID:X9MpLpMf
samp.xs -------------------------- #include <stdio.h> (中略) typedef struct data{ char aa[20]; char bb[20]; int cc; } DATA; MODULE = samp PACKAGE = samp void samp1(aaa) DATA *aaa CODE: while(0){ //構造体のデータ処理 } ----------[eof]----------- typemap(データ型定義ファイル) -------------------------- DATA *<tab>T_PTROBJ ----------[eof]----------- ここまでがxsのソースと、perlとの受け渡しのデータ型定義です
920 :
905 :02/07/26 22:41 ID:X9MpLpMf
>>919 の続き
test.pl
--------------------------
#/use/local/bin/perl
use samp;
#Cの(xsの)ソースに引き渡すデータを作成(仮に$aaa)
&samp1($aaa)
----------[eof]-----------
起動をかけるのはtest.plで、呼び出すのが、samp::samp1()になります。
要は、perlのソースから、Cにデータを渡して処理したいのですが、その
データを構造体で受け渡ししたいということです。そのときperl側でのデー
タの定義はどうすればよいか教えて欲しかったのです。
単に要素を配列に入れるだけでは、アンマッチが発生するようです。
>>919 そのwhile(0)はなんのためにあるの?
typemapには SV <-> Cのデータ型 の変換コードを "自分で"書かなきゃいけないんだよ。大変だけど、Perlはそこまでは面倒を見てはくれないよ。 とりあえずtypemapファイルの構文を勉強してください。 ExtUtilsディレクトリにあるデフォルトのtypemapも参考になるよ。
923 :
nobodyさん :02/07/27 08:18 ID:klNDdAyC
Perlで日付の加減などを行うモジュールに、Date::Calcがありますが、 telnetを使えないレンタルサーバで使いたいので、 同じフォルダに入れるだけで使える手軽な日付計算ライブラリないですかね?
Perl初心者コーナーはスレ違いらしいので、此方で質問させていただきます。。 ファイルのタイムスタンプを変更したいのですが、可能でしょうか?
ん〜む。perl5.8.0をmingw-gccでビルドしようとしたけど、上手く行かなかったなぁ。
5.7はビルド出来たんだけど…。やっぱり無理せずActivePerlを待とう。
>>924 可能か否か、という答えが欲しいの?そりゃ可能だけど。
でも多分知りたいのは可能か否か、じゃ無くてutime()関数のことだよね。
Perl初心者スレでは、スレ違いを指摘したんじゃなくて、
その質問の仕方が悪い、ということを指摘されたんだと思うよ。
926 :
924 :02/07/28 01:20 ID:???
有難う御座いました。出来ました。 >その質問の仕方が悪い、ということを指摘されたんだと思うよ。 そのままの質問だったので、書かなくても解る事をだらだら書いてうざがられるよりは良いかと思ってました・・ ボキャブラリーが少なくて申し訳ないです。
927 :
:02/07/28 08:14 ID:0sVNzuOf
すいません、文字列の MD5 を取りたいのですが、 Digest::MD5 をインストールしないでできますか? CGI で使おうと思っているのですが、同じディレクトリに 上記に付属の MD5.pm を置いて use MD5; とか記述 するだけではできませんよね? rfc1321 の日本語版は読んでみたのですが、全然 わかりませんでした。
p://zurubon.strange-x.com/uploader/md5_pl.txt 多分動く。がんがれ。
929 :
927 :02/07/28 16:04 ID:???
>>928 見事に MD5 コマンドと同じ結果が出ました。
有難う御座いました ヽζ゚)ノ
930 :
nobodyさん :02/07/30 23:42 ID:ZOuiEpQs
現在perlで quota の設定ができるものを作成中なのですが、 通常であればシェルで edquota ユーザー名 (Enter) でエディタが起動して Disk quotas for user okada (uid xxx): Filesystem blocks soft hard inodes soft hard /dev/hdax xxx xxxx xxxx xx x x 上記のテンプレートを編集する事になるのですが、 これを Perl のスクリプトで変更することはできないのでしょうか? exp) perl ./edquota.pl ユーザー名 blocks値 soft値 hard値 inodes値 soft値 hard値・・ Linux Slackware8.0 Perl5.6 を使用しております。 それでは宜しくお願いいたします。
932 :
マルチです :02/08/09 23:54 ID:yPKlUuWH
マジか? そんなドラスティックな変化は望んでないんだが・・・ @arry[0] %hash{key} う〜ん
エンコードでもするんなら兎も角ファイルが開けないってのはヴァカだと思われ
936 :
932 :02/08/10 01:51 ID:???
Perl6スレの人ってRFCとかただ記事みて議論してるだけなんですかね? 自分がいまテストしてるPerl6はParrotにふくまれてたやつで 昨日からopen関数が実行できねーよ!みたいな。
取り合えずその調子じゃ誰も相手してくれないんじゃない 世の中の人間はアンタの50年来の嫁じゃ無いんだから 言葉に乗せなきゃ何言いたいのか解らないよ そんなに大変ならPERL6のMLに投げてみ HELP PLZ!!!! ってさ
938 :
932 :02/08/10 02:36 ID:???
>>937 まぁ忠告は心に刻んでおくが
技術的な反論はできんのか。
939 :
932 :02/08/10 02:37 ID:???
>言葉に乗せなきゃ何言いたいのか解らないよ これが俺には何を言ってるのかわからん
941 :
nobodyさん :02/08/10 04:02 ID:SdI5yvJj
ふぁいる開く時は open FH,file; でいいみたいだよ がんばってね★ミ
ま、そうなるわな(笑 ここguzipが居なくなって廃れたなあ みんなPerl6入れてるの? 早くParrotでスピード上げて遊びたいな
943 :
932 :02/08/10 04:45 ID:???
$ ./perl6 -w my5ofile.p6 "arse error [line 2]: Invalid statement near "open FH,"my4.p6"; Can't call method "tree" on an undefined value at ./perl6 line 183. ============================================================ [my5ofile.p6] sub main(){ open FH,"my4.p6"; print "ujgh\n"; }
Perl6では、ファイルを開く際は、 my $fh = open $path : mode => 'r' or die "Can't open"; とします。 parrot-latest(8/9現在)では、open関数は"not yet implmented"です。
945 :
932 :02/08/10 05:34 ID:???
糞コテ師匠キタ━━━━━(゚∀゚)━━━━━!!!!
>>944 サンクス
なんだコイツ 死ねよお前
なんだコイツ 死ねよお前
なんだコイツ 死ねよお前
949 :
148 :02/08/10 15:51 ID:???
削除以来出しました。
Perlで"真に"グローバルな常数を作ることは出来ないのでしょうか? 常数(use constant)を別モジュールにまとめて利用しようとしたのですが、 呼び出し元ではその常数を使えますが、別に呼び出しているモジュールでは strict subsに引っ掛かってしまいます。 no strict subsをするしか無いのでしょうか。
コード例を。
つか、そのモジュールでもuseすればよか。
953 :
nobodyさん :02/08/10 22:43 ID:M8XpcEtN
ご返答ありがとうございます。
>>951 スペース確保出来次第アップします。
今はまだアップロードできる場所ありません。
ちなみに常数モジュールでは、
package Hoge;
use strict;
use base qw(Exporter);
@Hoge::EXPORT = qw(
const1;
);
use constant const1 => 0;
1;
みたいにして、本スクリプトおよび、
そこから呼び出されるモジュールでuseして、双方で利用しています。
>>952 そのモジュールでもuseしているのですが・・・
試してみたが、OKだったよ。
>>950 何か勘違いしてる予感。
それだと多分no strict 'subs'しても期待する動作はしないでしょ。
ちなみにmainパッケージで定数を定義すれば常に"::"接頭子で参照できるよ。
普通は個別にimportした方がいいけどね。
package main;
use constant TRUE => 1;
package hoge;
print ::TRUE;
age
>>953 俺はそういうモジュールいつも使ってる。
Hoge.pmをuseしているファイルではどういうふうに使用してるの?
959 :
エロ助 :02/08/15 11:30 ID:h1WzO6+x
マルチは放置。
961 :
nobodyさん :02/08/15 14:35 ID:oToZdaAw
CPAN重くない? 全然ファイルが落ちてこない
963 :
nobodyさん :02/08/16 18:12 ID:yy/Fieut
メール送信で
my ($To,$Sub,$Name,$Value) = @_;
my $FromMailAddr = '
[email protected] ';
my $msg;
my $smtp;
if ($MailServerActive){
$smtp = Net::SMTP->new('192.168.2.2');
if (!$smtp){
$msg = "SMTPサーバ[$Server]との接続に失敗しました\n";
$msg = jcode($msg)->sjis;print $msg;exit;
}
$Sub = jcode($Sub)->mime_encode;
$Name = jcode($Name)->mime_encode;
$Value = jcode($Value)->jis;
$smtp->mail($FromMailAddr);
$smtp->to("$To");
$smtp->data();
$smtp->datasend("Content-Transfer-Encoding: 7bit\n");
$smtp->datasend("Content-Type: text/plain; charset=\"iso-2022-jp\"\n");
$smtp->datasend("From:\"$Name\"\n");
$smtp->datasend("To:$To\n");
$smtp->datasend("Subject:$Sub\n");
$smtp->datasend("\n");
$smtp->datasend("$Value\n");
$smtp->dataend();
$smtp->quit;
return 1;
}
return 0;
このようにしてるのになぜかjphoneのメアドで受信したときのみ
タイトルが "=?ISO-2022-JP?Bッテ感じに文字化けします・・・・ナゼでしょう?
漏れなら、Mail::Mailer。
Parrotの話題でも出して見ろやカスども
>>965 バカで性格悪くて誰にも相手にされない寂しがりやは悲しいよね。
968 :
967 :02/08/19 00:23 ID:???
何か言えよ!ああ?
>>◆4XfSMGTg Linux Conferenceかjus勉強会でParrotについて講義してください。 おながいします。
>>971 「Perlの世界にようこそ」は改訂しないのですか?
$a = 1 << 5; print 'HIT' if vec($a,4,1); でHITと表示されるのはPerlでは普通なのですか?
当たり前です。 ネタ?それともvecのマニュアルも読めない馬鹿?
975 :
nobodyさん :02/08/20 08:01 ID:5HfNqmVJ
二つのリファレンス間の関係を得るにはどうしたらよいですか? 例えば $a = { b => { c => { d=> { e => "f" } } } }; で、 $b = $a->{b}; $c = $a->{b}{c}{d}; とあって、 &rel($b,$c) で "{c}{d}" とか返してくれるような(表記方法は何でもいいんだけど)
>>972 Perl5についてはエラータだけ直してます。
Perl6の本を書きたい人、編集さんを紹介してあげます(笑)。
>>971 本物っていう証拠がゼロだからな、、、、
それと◆4XfSMGTgはオープントリップ#kusokote
だから。
お前らみんな死ね
オープントリップってものがあったのか……。
ガクーリだよ。
しかし、Parrotを実際にコンパイルしてる人に
例会でも会ったことないので、正直どんな感じか教えてホスイ。
>>936 図星です。すんまそん。
おいらは勉強会とかでえらそうなこと言ってるけど、
ApoとExe(とRFCとperl6-language)あたりから知識得てるだけなんで。
なんだかなぁ〜本物っていう確証がないのがアレだが オープントリップって言うのは適当に考えたもんだから気にしないでいい cygwinがありゃコンパイルはできるはずなんだがなぁ〜。 ==perl初心者コ−ナーpart14のメモ *.p6 //perl6 のコード ->parrot/languages/perl6/perl6[perlスクリプト] 使用 *.colac //C#っぽい ->parrot/languages/cola/colacc.exe 使用 *.imc //.,,pasmとなにが違うの? ->parrot/languages/imcc/imcc.exe 使用 *.pasm //、、、アセンブラ? ->parrot/assemble.pl 使用 *.pbc //perl byte Code ->parrot/parrot.exe 使用
981 :
メモ :02/08/21 00:25 ID:???
[colac の流れ] ./colacc.exe kusokote.colac =>a.imc ./imcc.exe a.imc =>a.pasm ./assemble.pl a.pasm => a.pbc ./parrot.exe a.pbc [実行] [perl6 の流れ] ./perl6 test.p6 ->test.imc test.pasm test.pbc 生成 ->test.pbc [実行] *assemble.pl自体はXSとかつかったPerlスクリプトでないのでActivePerlでも実行できた(はず) perl6もActivePerlで動きそうだけどまぁ試したときは動かんかった。 (コンパイルしたオブジェクトコード参照してる?) まぁassemble.plが動けばparrot.exeを試すことぐらいはできるはず。
また変なコテ半が出てきやがったな。 ホント、ゴキブリみたいだな(大爆笑)
983 :
nobodyさん :02/08/21 02:18 ID:oahOU1tj
暗号強度とかは問わないのですが、\w* でマッチするような文字列を簡単な 暗号化(ぱっと見無意味な文字の羅列に見える程度でOK)して、 別のサーバーで復号化するようなスクリプトってかけますかねぇ? できれば、日時かなにかを暗号キーにして、1時間程度時間が経過すると その文字列が無効になるような感じがよいのですが・・・ 時間はntpdである程度シンクロしていて、多少のずれているときはあきらめるとして。
984 :
nobodyさん :02/08/22 14:05 ID:ZyNFWurg
>>983 tr/a-zA-Z/Za-zA-Y/ とかやって、1時間毎に Za-zA-Y 部分ずらす、とか。
そのオフセット・有効時間ともに保存しておく、とか。
986 :
983 :02/08/23 00:12 ID:???
おぉぉ、なるほど、面白そうですね。試してみよー。(^^) でも、ずらすのって、 %word(00,"Za-zA-Y" ,01,"YZa-zA-X" ,02,"X-Za-zA-W" ,03,"W-Za-zA-V" ,04,"V-Za-zA-U"); tr/a-zA-Z/$word{$time}/; こんな感じですかね、、24パターンくらいなら大丈夫かな?
987 :
mad-p ◆FaOqqhYM :02/08/23 13:36 ID:DBSoD3F/
>>986 tr///の変換リストには変数展開が使えないので、eval使ってね。