1 名前:nobodyさん mailto:sage [2011/09/09(金) 18:11:49.71 ID:???] Perlのコーディングで困ってる人のスレです。 【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 「コマンドの意味がわかんない」とかはマニュアル見ましょう。 回答者さんは何でも屋じゃありません。 1: 自分はこういう事がしたい。 2: それでこんな風にやってみたが・・・ 3: こんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。 お勧めサイトは >>2 以降 前スレ hibari.2ch.net/test/read.cgi/php/1295170172/
21 名前:nobodyさん mailto:sage [2011/09/18(日) 04:20:28.78 ID:???] my $error_message; for my $data (@isbn){ if (length $data != 13){ $error_message = "length error"; last; } if ($data !~ /^\d+$/){ $error_message = "charactor error"; last; } } 次から >>1 には「use strict; use warnings; を必ず使う事」とでも書いとけ。
22 名前:nobodyさん mailto:sage [2011/09/18(日) 06:57:46.48 ID:???] break は last の誤用だと思われるのだが・・・ ってことで break が自作の関数だったりしなくて、ループから抜けることを意図としてるなら last としませう。
23 名前:nobodyさん mailto:sage [2011/09/18(日) 07:08:32.40 ID:???] % perldoc -f break break Break out of a "given()" block. This keyword is enabled by the "switch" feature: see feature for more information. Alternately, include a "use v5.10" or later to the current scope.
24 名前:nobodyさん mailto:sage [2011/09/18(日) 08:49:12.63 ID:???] >>22 Perl以外のほとんどの言語はcontinueやbreakだから 他の言語を先に知っててPerlにあまり馴染みがないと 最初のうちは間違っちゃったりするよね Perl / C,JavaScript,PHP,Ruby,Python,etc. next / continue last / break
25 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 09:43:41.96 ID:???] 単語の意味を考えると、Perl で採用した next, last の よさがじわじわと分かる。continue, break だとあいまい な感じがして、(単語からは)何をしてくれるのか想像しに くい。
26 名前:nobodyさん mailto:sage [2011/09/18(日) 10:47:25.20 ID:???] printlnとか書いてて発狂しないのかな、あっちの言語圏は。
27 名前:nobodyさん mailto:sage [2011/09/18(日) 12:27:04.36 ID:???] printlnってperlでいえばsayだよな。
28 名前:nobodyさん mailto:sage [2011/09/18(日) 12:29:59.21 ID:???] あっちの言語圏は変数名と被ると駄目なんだっけ?
29 名前:nobodyさん mailto:sage [2011/09/18(日) 12:36:42.87 ID:???] >>28 関数名は動詞、変数名は名詞にしましょうねw
30 名前:nobodyさん mailto:sage [2011/09/18(日) 12:47:06.08 ID:???] 形容詞は?
31 名前:nobodyさん mailto:sage [2011/09/18(日) 15:24:44.69 ID:???] 引数
32 名前:nobodyさん mailto:sage [2011/09/18(日) 18:47:48.04 ID:???] はじめまして 現在SQLを勉強するためにPERLを使いMYSQLにつなぐ練習をしています DBIを使用してデータベースへの接続およびテーブルを作成することはできました。 このデータを更新する為にユーザーから ユーザーIDおよびパスワード データを新規ユーザー登録フォームなどから受け取るにはどうしたらいいのか、 またデータベースから受け取ったデータから全体のソートをかけたい全表示したい場合 どうしたらいいのかわからず困っています かってですがURLのところに?userid=foo&password=fooのようにはできるだけ表示しない方向でよろしくお願いします
33 名前:nobodyさん mailto:sage [2011/09/18(日) 20:09:22.61 ID:???] >>32 >>1 www.ifdefdebug.com/cgi_introduction/ perldoc.jp/docs/modules/CGI-3.49/CGI.pod 依頼されたツールを誰かが作るスレ hibari.2ch.net/test/read.cgi/php/1078997682/ 金出すからスクリプト作ってよvol.1 hibari.2ch.net/test/read.cgi/php/1150508106/ DBの絡んだWEB制作の相場 hibari.2ch.net/test/read.cgi/php/1004437935/ 手伝ってくれるかた募集 hibari.2ch.net/test/read.cgi/php/1083303786/ 【総合】 Webprog板質問雑談スレッド 1 hibari.2ch.net/test/read.cgi/php/1131016915/
34 名前:nobodyさん mailto:sage [2011/09/18(日) 20:29:52.84 ID:???] >>33 すみません・・・リンクの中を見るとフォームのデータはこれでできそうですね テンプレを読まず・・・申し訳ない
35 名前:nobodyさん [2011/09/19(月) 03:55:08.18 ID:tSer8QMI] すみません、質問です XML::Simpleを使ってXMLを解析しているのですが、 <Creator Role="イラスト">名前</Creator> のような属性(エレメント?)付きの値を取り出すにはどうすればいいのでしょうか? 普通に~~~->{Creator}->{Role}とすると属性の中身?の"イラスト"は取り出せるのですがその先が分かりません・・・。 もしかして::Simpleでは取り出せないのでしょうか?
36 名前:nobodyさん [2011/09/19(月) 05:24:45.14 ID:tSer8QMI] 失礼、解決しました ~~~{creator}->{content}で中身を取り出すことが出来ました
37 名前:nobodyさん [2011/09/19(月) 07:45:02.88 ID:tSer8QMI] 再度失礼します 現在Padreで開発しているのですが、なぜかPadre上ではうまく動いているのですが、 サーバーにUPすると500エラーを吐いてしまいます。 確認してみた所、my $ua = LWP::UserAgent->new();が原因でエラーを吐いているようで、 ライブラリ自体はちゃんと所定の場所にあり、パーミッションも他のライブラリと同じ設(705)で問題は無いはず。 そもそも頭のuse LWP::UserAgent;ではエラー吐いてないのでライブラリ自体は読み込めてるようです。 エラーの無い状態で上記のmy $ua = LWP::UserAgent->new();を追記した時点でエラーになるのですが、 これってただnewしただけでも他の物に影響を与える物なのでしょうか?
38 名前:nobodyさん mailto:sage [2011/09/19(月) 09:21:31.99 ID:???] >>37 perldoc.jp/docs/perl/5.10.1/perlfaq9.pod
39 名前:nobodyさん [2011/09/19(月) 13:08:32.75 ID:tSer8QMI] >>38 すいません、そこは既にチェックした後だったのですが一向に解決していません LWP::UserAgentは止めて、LWP::Simpleを使おうとするも今度はuseした時点でエラー・・・。 use LWP::Simple (); にして、後でgetすればエラーでないというのも見かけましたが関係なくエラーが。
40 名前:nobodyさん mailto:sage [2011/09/19(月) 13:24:50.46 ID:???] エラーの内容を画面に表示すればわかるよ。
41 名前:nobodyさん [2011/09/19(月) 14:01:11.27 ID:tSer8QMI] すいません、use worningsだけじゃエラーが出なかったんですね・・・ Can't locate HTTP/Config.pm in @INC エラー先を見たらUserAgent.pm内の require HTTP::Config; これがエラーの原因のようです
42 名前:nobodyさん [2011/09/19(月) 16:11:08.06 ID:tSer8QMI] まさかと思ってHTTP::ConfigをDLしてきてユーザー固有のフォルダに入れてみたら動きました LWP:;UserAgent自体が使うファイルも色々CPANから拾ってきておかなきゃだめだったようです・・・というか外部ソース依存多すぎる そして私の場合、レンタルスペースを利用している為、XML::Parserのコンパイルとか出来ないんですがこの場合どうしたらいいんでしょうか・・・?
43 名前:nobodyさん mailto:sage [2011/09/19(月) 16:24:36.58 ID:???] >>42 > この場合どうしたらいいんでしょうか・・・? ・管理者にインストールしてもらう ・設置先と同じ環境を手元にも構築してコンパイルしたものを持っていく ・設置先で利用できる形にまとめてくれている人を探して一式もらう ・Pure Perl なモジュールのみを使うよう書き換える ・サーバを替える いずれにしてもスレ違い。
44 名前:nobodyさん mailto:sage [2011/09/19(月) 16:30:26.87 ID:???] pure perlな実装で代用すれば良いんじゃね。
45 名前:nobodyさん mailto:sage [2011/09/19(月) 18:25:25.97 ID:???] コンパイルもできるレンサバに替えるのがいいとおもふ。 #そして次は「すいません、できないと思ってたけどコンパイルできました」とか書き込まれそうな予感
46 名前:nobodyさん [2011/09/19(月) 20:13:19.63 ID:tSer8QMI] すいません、できないと思ったけどコンパイル・・・という冗談は置いといて、 結局 XML::UserAgent も XML::Simple も使わずに済むPurePerlな XML::TreePP を使う事にしました。 こういう放置は本当はあまりよくないんでしょうけど、とりあえず完成させたいもので、とりあえず後で再考する事に。 失礼しました。
47 名前:nobodyさん mailto:sage [2011/09/19(月) 20:32:26.25 ID:???] >>46 > こういう放置は本当はあまりよくないんでしょうけど、とりあえず完成させたいもので、とりあえず後で再考する事に。 いえいえ、良い選択だと思います。ご健闘を。
48 名前:nobodyさん mailto:sage [2011/09/19(月) 23:13:46.60 ID:???] コンパイルができないと諦めるもんじゃない。 たとえshellが使えなくともtelnet.cgiみたいなのを使って コンパイルすればいいのだ。 サーバーの環境を特定し、それに近い環境で 自宅コンパイルしたものをアップする方法もある。 諦める必要はないぞ!
49 名前:nobodyさん [2011/09/20(火) 00:23:18.16 ID:VRYqCB7t] 初心者です。2ちゃんの統計を出力するスクリプトを作りたくて、色んな場所からつぎはぎして作っていたのですが、問題がでて進めなくなりました。 板の中のスレの内容を表示しようというところまできたんですが、カウンターの i が動いていないような感じで、同じスレ(dat)が何回も表示されてしまいます。 ほかにもツッコミどころがあったら教えてください。 ソースは次のレスです。
50 名前:nobodyさん [2011/09/20(火) 00:24:28.62 ID:VRYqCB7t] 全部は入らないので関わってると思うところだけ抜きました。 use LWP::UserAgent; use HTTP::Request::Common; $url = "hidar.2ch.net/news4vip/subject.txt "; $durl = "hidari.2ch.net/news4vip/dat/ "; &getData($url); $threadlist = $response->content; while($threadlist =~ m|\n(.*?)\.dat<>|g){ push(@dat, $1); } for ($i=0; $i<=$#dat; $i++){ $url = $durl . $dat[i] . ".dat"; &getData($url); $content .= $response->content . "\n"; } print $content; sub getData { $ua = LWP::UserAgent->new; $ua->agent(''); $request = GET($_[0]); $response = $ua->request($request); }
51 名前:nobodyさん [2011/09/20(火) 00:41:47.24 ID:VRYqCB7t] ごめんなさい、>>50 です。 $url = "hidar.2ch.net/news4vip/subject.txt "; $durl = "hidari.2ch.net/news4vip/dat/ "; はそれぞれ $url = "hibari.2ch.net/news4vip/subject.txt "; $durl = "hibari.2ch.net/news4vip/dat/ "; でした。別なURLでテストしてたのをごまかしたので、URLが間違っていたせいじゃないです。 ていうかdatディレクトリがそのまま見られるみたいだからそっちから抽出したほうがよかったかな・・・
52 名前:nobodyさん mailto:sage [2011/09/20(火) 00:41:59.51 ID:???] >>50 コードはともかく、とりあえずiはミスタイプで正しくは$iだね
53 名前:nobodyさん [2011/09/20(火) 00:54:00.21 ID:VRYqCB7t] >>52 できました! ありがとうございます!!!
54 名前:nobodyさん mailto:sage [2011/09/20(火) 02:27:48.40 ID:???] use strict; use warnings; この2つは必須!
55 名前:nobodyさん [2011/09/20(火) 21:27:29.45 ID:P4zYemZJ] 他のスレからこちらに誘導していただきましたのでここでも質問させていただきます。 初心者なのですが、どなたか教えてください。 サーバーに最新のapache(onWindowsXP)をインストールし、Activeperl(最新版) によるcgiで、Win32::OLEをつかって、 サーバー側でAccess起動→マクロを走らせる→Access閉じる を行いたいのですが、上手くいきません。 同じPERLソースで、AN HTTPD だと上手くいくので、apacheの設定の問題だと思うのですが、 どこをどう設定するのかが分かりません。
56 名前:nobodyさん [2011/09/20(火) 21:29:54.54 ID:P4zYemZJ] つづきです。すみません。 ちなみにソースは # Accesオブジェクトを生成、起動 my $access = CreateObject Win32::OLE 'Access.Application' || die "Cannot create Access object\n$!\n"; my $mdb = 'C:/hoge.mdb'; $access -> {'Visible'} = 1; $access -> OpenCurrentDatabase($mdb); $access -> DoCmd -> RunMacro('hoge'); $access-> quit(); undef $access; です。
57 名前:nobodyさん mailto:sage [2011/09/20(火) 21:30:56.13 ID:???] >>55-56 >>1 perldoc.jp/docs/perl/5.10.1/perlfaq9.pod Apache〜嗜みとして〜 Part3 hibari.2ch.net/test/read.cgi/php/1043851302/
58 名前:55 [2011/09/20(火) 21:33:07.43 ID:P4zYemZJ] つづきです。最後です。すみません。 現象としては、ログにもエラーはなく、サーバー側でタスクマネージャで確認すると Accessが起動していることまでは確認できるのですが、そのまま止まってしまいます。 タスクマネージャーからAccessを強制終了すると、それ以後のperlスクリプトが処理されるようです。 どなたか同じようなご経験をお持ちの方はおられませんでしょうか。 宜しくお願い致します。
59 名前:nobodyさん mailto:sage [2011/09/20(火) 21:57:09.80 ID:???] >>56 my $access = CreateObject Win32::OLE 'Access.Application' || die "Cannot create Access object\n$!\n"; は my $access = Win32::OLE->CreateObject('Access.Application' || die "Cannot create Access object\n$!\n"); と等価なので CreateObject() が偽を返しても die しない。 perldoc.jp/docs/perl/5.14.1/perlop.pod#Operator32Precedence32and32Associativity >>58 「それ以後」がどのステップを指していて処理自体は期待通りに終わっているのかどうか不明なので 同じ症状かは分からんが、「perl Win32::OLE access」でググれば www.kaimei.org/read/internal/perl_w32 > 私が Win32::OLE から Excel へアクセスするプログラムを書いてみたところ、 > Perl スクリプトからだと問題ないのに CGI からこれを呼び出すと失敗するケースがあった。 > きちんとした原因まで把握できていないのだが、少なくともオープンする Excel ファイルのパスは > / ではなく \ で区切らないとアプリケーション・オブジェクトの取得に失敗するようである。 という話が出てくる。
60 名前:nobodyさん mailto:sage [2011/09/21(水) 12:11:47.99 ID:???] PSGI に対応した WAF では何が使い易いのでしょうか? それぞれの WAF の特色とか違いとかが分かるサイトとかあるのでしょうか? ご教示いただければと思います。
61 名前:nobodyさん mailto:sage [2011/09/21(水) 15:19:36.21 ID:???] スレッドごとにファイルがあって それをまとめるスレッドリストファイルがある場合のロックについて ファイルロック1 スレッドNファイルへの書き込み スレッドリストファイルへの書き込み ファイルロック1の解除 というようにしなければならないので 例えばスレッド1にだれかが書き込んでいる最中は他スレッドでも書き込みができない ということになる。 ということで間違いないんですか? それとスレッドを誰かが見るだけの場合でも ファイルロック1 スレッドNファイルの読み込み スレッドリストファイルの読み込み ファイルロック1の解除 としなければならないので 誰かが任意のスレッドを見ている間はどこのスレッドにも書き込めない ということでいいんでしょうか? そうするとロックかかりまくりじゃないんですか?
62 名前:nobodyさん mailto:sage [2011/09/21(水) 15:57:23.72 ID:???] それぞれのファイルに対してロックすればいいだろ
63 名前:nobodyさん mailto:sage [2011/09/21(水) 16:36:39.63 ID:???] >>62 それぞれのファイルにロックすると スレッドNファイルには書き込まれて スレッドリストファイルにロックがかかるという場合も考えられる そうするとデータの連動がずれる
64 名前:nobodyさん mailto:sage [2011/09/21(水) 16:43:12.02 ID:???] >>61 マルチスレッドプログラミング相談室 その8 hibari.2ch.net/test/read.cgi/tech/1253521167/
65 名前:nobodyさん mailto:sage [2011/09/21(水) 19:47:38.85 ID:???] >>64 スレッドってそのスレッドじゃないと思うんだw
66 名前:nobodyさん mailto:sage [2011/09/21(水) 20:45:57.38 ID:???] >>61 ロックかかりまくりとはいうけど 実際は各リクエストがケンカしないように順番に処理されていくわけだから特に問題はないだろ。
67 名前:nobodyさん mailto:sage [2011/09/21(水) 21:52:54.67 ID:???] DBMSみたいに、まとめ役のプロセスが1つだけ起動して、もちろん複数起動しないようにして、 そいつが全部取り仕切るように動かせばいいんだ。疑似マルチタスクみたいに。
68 名前:nobodyさん mailto:sage [2011/09/22(木) 00:58:45.67 ID:???] ロックには排他ロックと共有ロックがあってだな ・・という話ではない、これ?
69 名前:nobodyさん mailto:sage [2011/09/22(木) 01:17:49.95 ID:???] シェケナベイベー
70 名前:nobodyさん mailto:sage [2011/09/22(木) 01:23:50.84 ID:???] >>68 この件は全部排他 横からだけど>>61 の解答は気になる
71 名前:nobodyさん [2011/09/22(木) 12:59:33.86 ID:nJD1QeKS] 教えてください Perlで2chの特定のキーワードのスレを自動取得するCGIを改造したいのですが、 #板名「@BoadName」にある、スレッド名に「$KeyWord」を含む板の一覧を表示する。 $BoardName[0] = "大規模MMO"; $BoardName[1] = "ネトゲサロン"; $BoardName[2] = "ネットwatch"; $Keyword = "●○"; この条件のところで、大規模MMO板だけでなく、例えば ニュー速等複数の板を指定するにはどういう風にコードを書き換えれば良いでしょうか? なるべく簡単な方法を教えてください。 スクリプト aceof.s57.xrea.com/?p=sp
72 名前:nobodyさん mailto:sage [2011/09/22(木) 13:11:19.13 ID:???] >>71 正規表現を使えるようにすればいいんじゃないの。
73 名前:71 [2011/09/22(木) 13:39:16.30 ID:nJD1QeKS] >>72 …?どうやるのでしょうか? COBOLは昔習いましたが… 条件のところの $BoardName[0] = "大規模MMO"; を A(大規模MMO) AND B(ニュー速) のような条件にしたいのですが、 parlでの表記が分かりません。 コードを教えてください。
74 名前:71 [2011/09/22(木) 13:54:59.74 ID:nJD1QeKS] 例えば $BoardName[0] = "大規模MMO" AND "涙目ニュース"; ではエラーになりますよね??
75 名前:nobodyさん mailto:sage [2011/09/22(木) 14:45:57.55 ID:???] $BoardName[0] = "大規模MMO"; $BoardName[1] = "ネトゲサロン"; $BoardName[2] = "ネットwatch"; $BoardName[3] = "ニュース速報"; $BoardName[4] = "WebProg"; でいいんじゃないかな? Socket って使ったことないからわかんないけど BoardName で追ってみると www.ff.iij4u.or.jp/~ch2/bbsmenu.html ↑ここから $BoardName[n] でURL取ってるみたいだし 確認してないけど
76 名前:71 [2011/09/22(木) 15:29:52.18 ID:nJD1QeKS] >>75 すみません、基本的に大きな勘違いをしていました $BoardName[0] = "大規模MMO"; 板名 $BoardName[1] = "ネトゲサロン"; スレット名 $BoardName[2] = "ネットwatch"; ? かと思っていましたが、全部板名で、番号を増やしていけばいいだけですよね^^: で、 $Keyword = "●○"; の所を2〜3個指定したいんですが、 複数指定したい場合はどう書けば良いのでしょうか? $Keyword = "●○" "●▲" "××"; $Keyword = "●○" AND "●▲"; でしょうか? ANDの代替がぐぐっても分かりません・・・ ちなみにスレ一覧のURLは移動してましたので書き換えます。
77 名前:nobodyさん mailto:sage [2011/09/22(木) 15:44:33.61 ID:???] >>71-76 【 スクリプト改造依頼スレ 】(丸投げ) part8 hibari.2ch.net/test/read.cgi/php/1314546533/ ★三 【 スクリプト改造工房 PART 9 】 ★三 hibari.2ch.net/test/read.cgi/php/1143834740/ 金出すから改造してよvol.3 hibari.2ch.net/test/read.cgi/php/1162147035/
78 名前:71 [2011/09/22(木) 16:01:22.71 ID:nJD1QeKS] >>77 ありがとうございます。 あと、条件を複数指定する場合にどう記述すれば良いかだけ教えていただければ 十分なのですが…。 $Keyword = "●○" "●▲" "××"; $Keyword = "●○" AND "●▲"; でしょうか? それとも $Keyword = "●○","●▲"; ?
79 名前:nobodyさん mailto:sage [2011/09/22(木) 16:13:15.01 ID:???] うーん COBOLをやってたというのがよく伝わってくる思考だw $Keyword は GetData で if (/$Keyword/){ というふうに正規表現で使われてるから論理演算子は使えないと思われ $Keyword を @Keyword にしていっぱい入れられるようにして正規表現で | を使うか if じゃない関数を使うかじゃないかな〜
80 名前:nobodyさん [2011/09/22(木) 18:12:10.54 ID:5FtK50r8] 読み込んで表示だけのページ=ロックの必要はない 読み込んだデータを更新して書き込むページ= ファイルロック1 ファイル読み込みモードでオープン ファイルを配列に読み込み ファイルを閉じる データ更新 ファイル書き込みモードでオープン 更新したデータをファイルに書き込む ファイルを閉じる ファイルロック1の解除 これでいいはず 仮に読み込んで表示だけのページを ファイルロック1 ファイルを読み込みモードでオープン データを配列に入れる ファイルを閉じる ファイルロック1の解除とすると 表示するだけのページを開く間は書き込みができなくなるから そうすると書き込める隙がなかなかない
81 名前:nobodyさん [2011/09/22(木) 19:43:11.98 ID:7t8BkGQU] use strict; use warnings; my @city = ("東京", "大阪", "名古屋"); delete($city[0]); print "@city"; こんな簡単なので Use of unitialized value in join or string at *** line 6. っていう警告が出たんですが、どうしてですか? それに Use of unitialized ... というエラーしょっちゅう見かけますが、調べてみてもよくわかりませんでした。 教えてくださいm(_ _)m
82 名前:nobodyさん mailto:sage [2011/09/22(木) 19:52:11.16 ID:???] delete $city[0]; で undef になった $city[0] を print するのに使ったから とりあえずexcite翻訳から初めてみたらどうでしょうか
83 名前:nobodyさん mailto:sage [2011/09/22(木) 20:01:45.61 ID:???] >>81-82 perldoc.jp/docs/perl/5.10.0/perldiag.pod
84 名前:nobodyさん [2011/09/22(木) 20:15:05.37 ID:7t8BkGQU] >>82-83 ありがとうごさいます。 @city = grep($_ ne "", @city); で $city[0] を消しても残ってたので不便な関数だなと思いました。 undef の値を消すような操作をすればいいんですね。
85 名前:nobodyさん mailto:sage [2011/09/22(木) 20:16:16.72 ID:???] つshift
86 名前:nobodyさん mailto:sage [2011/09/22(木) 21:48:02.28 ID:???] $city[0] = "東京" を削除して詰めちゃってもいい ($city[0] = "大阪" とずれていい) なら shift @city; 要素をずらさずに $city[0] だけ消したいなら $city[0] = "";
87 名前:nobodyさん mailto:sage [2011/09/22(木) 21:53:14.20 ID:???] あれ、$city[0] = undef;とdelete($city[0]);って同じ?
88 名前:nobodyさん mailto:sage [2011/09/22(木) 22:07:16.08 ID:???] >>87 perldoc.jp/func/delete perldoc.jp/func/undef
89 名前:nobodyさん mailto:sage [2011/09/22(木) 23:43:44.90 ID:???] delete が非推奨とか・・・splice で削除しろとか書いてあるけどさ、 巨大な配列に対して splice すると、すごく遅そう・・・
90 名前:nobodyさん mailto:sage [2011/09/22(木) 23:56:59.38 ID:???] >>89 Perl処理系のソースを見ずに言うが、 そのへんはパフォーマンスがガタ落ちにならん程度にはうまいこと処理してるだろうと思う。
91 名前:nobodyさん mailto:sage [2011/09/23(金) 00:35:13.51 ID:???] ん?配列の要素に対する delete が非推奨なのは別に問題ないっしょ? delete $array[$n] は要素を削除するのではなくて、むしろ undef $array[$n] に近いんだから。
92 名前:nobodyさん mailto:sage [2011/09/23(金) 00:37:24.81 ID:???] spliceは引数多くて邪魔くさい
93 名前:nobodyさん mailto:sage [2011/09/23(金) 00:38:06.92 ID:???] >>89 誤読すんなよ。 (特殊挙動の切り詰めの事を想定してるなら別だが) splice で対処しろってのは、要素を本当に削除するケースに関してだ。 @arr = 1 .. 5 ; => @arr = qw( 1 2 5 ); delete の代りなら、 splice @arr, 2, 2, (undef) x 2 なんてしなくても @arr[2,3] = (undef)x2 ;なりの方法があろう。
94 名前:nobodyさん mailto:sage [2011/09/23(金) 01:21:24.31 ID:???] 8万の配列に長さ1の文字列を入れて、delete、undef、spliceでベンチマーク取ったけど、 spliceが一番遅かったけど大きな速度差は出なかった
95 名前:nobodyさん mailto:sage [2011/09/23(金) 01:24:44.39 ID:???] >>94 あと1つか2つ桁増やしてよろしく。
96 名前:nobodyさん mailto:sage [2011/09/23(金) 07:44:14.40 ID:???] use Benchmark qw( timethese cmpthese ) ; cmpthese timethese ( undef, { delete => sub{ my @arr = ARRAY ; delete @arr[ 99999 .. 999999] }, splice => sub{ my @arr = ARRAY ; splice @arr, 99999, 900000, (undef) x 900000 }, slice => sub{ my @arr = ARRAY ; @arr[99999 .. 999999] = (undef) x 900000 } }); __DATA__ ARRAY => (q{x}) x 1000000 Benchmark: running delete, slice, splice for at least 3 CPU seconds... delete: 3 wallclock secs ( 2.91 usr + 0.15 sys = 3.06 CPU) @ 2.94/s (n=9) slice: 4 wallclock secs ( 3.17 usr + 0.14 sys = 3.31 CPU) @ 2.72/s (n=9) splice: 3 wallclock secs ( 3.06 usr + 0.19 sys = 3.25 CPU) @ 3.08/s (n=10) Rate slice delete splice slice 2.72/s -- -8% -12% delete 2.94/s 8% -- -4% splice 3.08/s 13% 5% -- ARRAY => 1 .. 1000000 Benchmark: running delete, slice, splice for at least 3 CPU seconds... delete: 3 wallclock secs ( 3.12 usr + 0.00 sys = 3.12 CPU) @ 12.82/s (n=40) slice: 3 wallclock secs ( 3.02 usr + 0.01 sys = 3.03 CPU) @ 6.93/s (n=21) splice: 3 wallclock secs ( 3.03 usr + 0.07 sys = 3.10 CPU) @ 9.35/s (n=29) Rate slice splice delete slice 6.93/s -- -26% -46% splice 9.35/s 35% -- -27% delete 12.8/s 85% 37% --
97 名前:nobodyさん mailto:sage [2011/09/24(土) 11:44:49.89 ID:???] 文字コードで分からないことがあるのでご教授お願いいたします。 (utf-8 でソースを書いています) utf-8 の半角ア -> EFBDB1 utf-16 の半角ア -> FF71 utf-8 でソースを書いているのだから、print "0xEFBDB1" で半角アが出力されるだろうと思ったら、 print "0xFF71" でないと半角アが表示されませんでした。
98 名前:nobodyさん mailto:sage [2011/09/24(土) 16:12:39.72 ID:???] cryptって絶対に復号化できないんですか? パスワードをこの関数を使って暗号しようと思っていますが この関数を使う上で欠点や注意点がありましたら教えてもらえませんか?
99 名前:nobodyさん mailto:sage [2011/09/24(土) 16:30:15.23 ID:???] >>98 >>1 perldoc.jp/func/crypt
100 名前:nobodyさん mailto:sage [2011/09/24(土) 16:48:02.74 ID:???] >>97 半角のイなら、0xFF72です。
101 名前:nobodyさん mailto:sage [2011/09/24(土) 18:00:52.20 ID:???] >>97 0xは数値に対してなので、\xだと思いますが、\xは2桁までしか拾わないので、 3桁以上の場合は、{ }を使って\x{123}とする必要があります。 2桁の場合は(\x{00B1}としても2桁と解釈されます)、その値そのもののバイナリ 文字列となります。 print "\xEF\xBD\xB1"; これ↑は、UTF-8として解釈すれば「ア」を意味するバイナリ文字列です。 ただし、Perlがこれを文字列処理するときはISO 8859-1という文字コードの3文字 として扱います。 3桁以上の場合は、その値のUnicodeコードポイント(U+FF71)のテキスト文字列となります。 ( Perlは、"\x{FF71}"を「ア」という1文字として扱う) バイナリ文字列(=バイト文字列)とは、バイト単位で処理される文字列のことです。 テキスト文字列とは、文字単位で処理される文字列のことです。
102 名前:nobodyさん mailto:sage [2011/09/24(土) 18:01:21.98 ID:???] >>99 リンクありがとう〜 とりあえずこれ使ってみることにします
103 名前:nobodyさん mailto:sage [2011/09/24(土) 19:43:27.75 ID:???] >>101 ありがとうございます!
104 名前:nobodyさん mailto:sage [2011/09/26(月) 12:35:58.38 ID:???] トリップを生成する仕組みなんですが、 if (length $handle_pass >= 12) { my $mark = substr($handle_pass, 0, 1); if ($mark eq '#' || $mark eq '$') { if ($handle_pass =~ m|^#([[:xdigit:]]{16})([./0-9A-Za-z]{0,2})$|) { $GB->{TRIPSTRING} = substr(crypt(pack('H*', $1), "$2.."), -10); } 文字列12バイト以上で、先頭が#または$の場合、 $handle_pass =~ m|^#([[:xdigit:]]{16})([./0-9A-Za-z]{0,2})$|を行なって cryptによって生成していると思います。 しかし、$GB->{TRIPSTRING}や$1や$2をprintすると何も表示されません。 $handle_pass =~ m|^#([[:xdigit:]]{16})([./0-9A-Za-z]{0,2})$|では何を行なっているのですか? 教えてください。
105 名前:nobodyさん mailto:sage [2011/09/26(月) 12:55:07.21 ID:???] >>104 関係ないけど、これ $ から始まる場合何もしてないよね
106 名前: ◆??? mailto:sage [2011/09/26(月) 13:01:10.88 ID:???] >>104 ##0123456789abcdefxx 形式のトリップキーかどうかのチェックだろ >>105 >>104 は書いてないけど実際はelseがある 2chでは今のところ単に予約としてとってあるだけらしいから???になるだけだけど
107 名前:104 mailto:sage [2011/09/26(月) 14:03:37.14 ID:???] >>105-106 ご回答ありがとうございます。 もう一度正規表現を調べますので、 その後、質問させてください。
108 名前:104 mailto:sage [2011/09/26(月) 17:00:08.24 ID:???] 先頭が#で始まり16進数文字が16個連続し、 末尾は./0-9A-Za-zのいずれかが0個以上2個以下連続する。 ですよね? #0123456789abcdefxxは真 #0123456789abcdefxxxは偽 #0123456789abcdefは真 #0123456789abcdefあ が偽なのは、なぜでしょうか? また、[[:xdigit:]]の[]が二重でくくられている意味を教えてください。
109 名前:104 mailto:sage [2011/09/26(月) 17:01:58.51 ID:???] すみません、書きこんで気づきましたが、 #0123456789abcdefも偽ではないのか?と思います。
110 名前:nobodyさん mailto:sage [2011/09/26(月) 18:06:25.07 ID:???] あ は [a-zA-Z0-9] かどうか f の後ろに続く判断が ? なのか + なのかで意味合いが変わってくるかと。 トリップキーの規格をもっかい調べてみればよいかと。
111 名前:nobodyさん mailto:sage [2011/09/27(火) 00:54:20.16 ID:???] ファイルのロックはmkdirなどでロック用ディレクトリ を作る方法は良く見かけますがディレクトリではなく openでロック用ファイルを作るというのは問題があるんでしょうか?
112 名前:nobodyさん mailto:sage [2011/09/27(火) 01:02:44.10 ID:???] rename とか mkdir はシステムコールを使ってるから、open より割り込まれる余地が少ない。 とかじゃなかったっけ?
113 名前:nobodyさん mailto:sage [2011/09/27(火) 01:31:29.84 ID:???] >>111 www.din.or.jp/~ohzaki/perl.htm#File_Lock 今時 flock を使えない環境に出くわす事も稀だがな。 perldoc.perl.org/perlport.html#flock
114 名前:nobodyさん mailto:sage [2011/09/27(火) 02:07:22.29 ID:???] モジュールを作ってて、そのモジュールの中では use utf8 とか、open(my $in, '<:utf8', '〜') とかしてます。 しかし use utf8 してないスクリプトから呼ばれた時には、これだと文字化けが起きてしまいます。 そのため use utf8 されていない場合にはフラグを落として返したいのですが、 モジュールを呼んだスクリプトで use utf8 されてるかどうか調べる方法はあるのでしょうか? モジュールが特定の文字コードに依存すること自体が駄目だとは分かっては居るのですが・・・
115 名前:nobodyさん mailto:sage [2011/09/27(火) 04:57:52.69 ID:???] >>112 余地が少ないんじゃなくて余地が無い、 つまり処理がアトミックでないとだめなんだよ。 「余地が少ない」んじゃ意味ないの。
116 名前:nobodyさん mailto:sage [2011/09/27(火) 11:02:16.14 ID:???] flock(XX, 2) でデッドロックが発生した場合はどうなるんでしょうか? あと、待ってる間は自動でsleepしてくれるんでしょうか? flock(XX, 6) で自分で実装するのとどちらが良いのか迷ってます。
117 名前:nobodyさん mailto:sage [2011/09/27(火) 19:02:14.19 ID:???] すいません。プログラムを定刻になると自動で実行するようにしたいんですが、できますか? レンタルサーバに置きます。 全体を無限ループをしてsleep()で休むというのを考えたのですが、無限ループは一番やってはいけないらしいですね。 あと検索するとすぐJavaScriptで自動更新する方法が出てきますが、 この方法だと時限以外にもCGIにアクセスされたときに実行してしまうと思います。 JavaScriptだけに実行させたいときはパーミッションをどう設定すればいいですか?
118 名前:nobodyさん mailto:sage [2011/09/27(火) 19:46:39.67 ID:???] >>116 >明白ではないものの、伝統的な flock の動作としては、ロックが得られるまで 無限に待ち続けるものと、単に勧告的に ロックするものの二つがあります。 >>117 cronのことを聞いてる?
119 名前:nobodyさん mailto:sage [2011/09/27(火) 21:07:32.00 ID:???] >>118 その説明を読んで具体的にどうなるのかが分からなかった 伝統的とか無限とか ・複数のプロセスが待ち状態になった場合に、次にロックを得られる順番は? ・デッドロックかかったらプロセスはどうなるのか ・待ってる間の負荷は この辺りが気になる。
120 名前:nobodyさん mailto:sage [2011/09/27(火) 22:48:37.67 ID:???] ・複数のプロセスが待ち状態になった場合に、次にロックを得られる順番は? システムにしか分かりません ・デッドロックかかったらプロセスはどうなるのか flock を待つオプションで呼び、他のプロセスが死ねばロックは外れるので先に進めますが、 mod_perlなどではプロセスは死なないのでflockは掛かったままになります。 なので、flockを呼ぶときは待たないようにしましょう
121 名前:nobodyさん mailto:sage [2011/09/27(火) 23:25:00.27 ID:???] flock呼んだ順番になるのか、ランダムになるのかの2択くらいかと思ったんですが、後者って認識でいいです? 無限に待ち続けるとあるんですが、待たないようにする方法もあるんでしょうか? あと、大量のプロセスが待ち状態になった場合の負荷も気になります。 大人しく待ってるんでしょうか?