1 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 03:03:00 ] "The duct tape of the Internet" こと、Perl についての質問箱です。 "There's more than one way to do it" ということで、 Perl の奥深さについて皆で語り合い、追求してまいりましょう。 CGI についての質問は板違いです。WEB プログラミング板でどうぞ。 CGI と Perlの区別がつかない人も WEB プログラミング板に行ってください。 (WEB プログラミング板: pc11.2ch.net/php/ ) CGI の質問は答えが Perl と全然関係ない話に帰着する場合が 多かったりするので WEB プログラミング板に行って聞いたほうが得ですよ。 このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 www.perl.org/get.html ● 2009/08/07 現在の最新版: 5.10.0 ▼ 前スレ Perlについての質問箱 40箱目 pc12.2ch.net/test/read.cgi/tech/1243631674/ リンク集は >>2-3 Perl 日本語処理の基礎の基礎 >>4 過去スレは >>5-6 あたり
321 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 19:36:58 ] >>318 ディレクトリをマウスで右クリック 「検索(E)」 ファイルに含まれる単語
322 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 19:44:52 ] >>321 すいません、windowsを使っていないので それはできませんorz
323 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 19:50:03 ] >>314 >質問の内容が書いてあるとは一言もいっていないが? すげー!質問したやつに関係ないURLを紹介しておいて、文句をいわれたら『答えが書いてあるとは誰もいってない』と逆切れ! 言い訳もここまでくるといっそすがすがしいな。 >勝手に勘違いしてファビョって礼もなしにそれか。 無関係なURLを紹介しておきながら「読み取れないのか」と言って相手のせいにするようなやつのくせして、礼だけは求めるのかよ。 相変わらずのdank○gai的傲慢さだな。論理がつながってないところもdank○gaiにそっくりだ。 あれか、Perl使うとみんなdanみたいなのになるのか?danが今のようなdanになったのはPerlのせいなのか?
324 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 19:56:32 ] >>323 > あれか、Perl使うとみんなdanみたいなのになるのか?danが今のようなdanになったのはPerlのせいなのか? うん! その通りだよ!! 逃げて!! Perlから逃げて!! 手遅れにならないうちにPerlから逃げてぇ!!
325 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 19:56:35 ] >>320 シンタックスレベルのバリデータなら既にCPANに転がってるよ search.cpan.org/dist/Test-JSON/
326 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:00:13 ] >>260 , >>313 の話から考えると、 Perlのある値は、(その時点で)文字列or/and数値としてメモリ上に表現されているって情報しか持ってなくて その値の由来が文字列か数値かなんて情報は持ってないとか? そうだとすると、型っていうより、Perlの値は文字列と数値の二つの側面があるってイメージで 型の判別が出来る・出来ない、というより、そもそも判別する対象(文字列型・数値型)がないのかな これであってる?教えてくださいPerl上級者さん><
327 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:11:31 ] >>326 方向はだいたいあってるんだぜー。 もっと詳しく知りたければ Devel::Peek あたりで遊んでみることだぜー。
328 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:14:00 ] しらんけど C++には Variant型ってクラスで作られた型があるな
329 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:15:08 ] >>327 ありがとう sv.hにスカラー値っぽいのが定義されてたけど、どうもそうみたいですね〜 もうPerl使ってないけど、4間年も使ってたのに気付かなかったw 勉強になりました
330 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 22:12:10 ] >>323 何でそんなに興奮してるのか知らないけど、 続ければ続けるほど自分が皆から馬鹿にされるだけの書き込みを続けても 意味無いと思うよ。
331 名前:デフォルトの名無しさん [2009/09/08(火) 22:45:32 ] >>318 grep -rh 検索文字列 ディレクトリ
332 名前:デフォルトの名無しさん [2009/09/08(火) 22:48:13 ] >>320 ことか。どのバージョンで削除されたか教えてくれ。 0 > そんなわけない。だったらJSもRubyもPythonも煩わしいことになるけど、そうはなってない。 煩わしいよ。 > 上のほうで出たのはJSONのバリデータなんだけど、それはすでにPerlにあるの? こまけーことイチイチ聞かなきゃ作れないひとには期待してない。
333 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 23:25:33 ] >>331 わかりました。ありがとうございます
334 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 23:30:58 ] 数値と文字列の区別が煩わしいと思う人も居るし 文字列に数値のように振舞われるのが煩わしい人も居る 前者にとって、数字を足すのにいちいち変換するのは苦痛だし 後者にとって、"0"が偽なのは地雷でしかない
335 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 23:32:01 ] まだデュエルしてんのか。デュエリスト板でやれ
336 名前:デフォルトの名無しさん [2009/09/09(水) 00:56:14 ] >>334 > 文字列に数値のように振舞われるのが煩わしい人も居る プログラマが区別できてないなら何しても同じ。 シンタックスエラーかランタイムエラーかの違いすらない。 > 後者にとって、"0"が偽なのは地雷でしかない イミフ。 歴史的にゼロを偽とするのが習慣。 シェルについては、これも歴史的理由でゼロを真とする習慣だが。
337 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 01:31:16 ] 0でなく"0"な
338 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 02:39:02 ] >>284 ためしにJSON::Syckに1000桁の数字入れたら数値 : Infになりやがった。 JSON.pmは優れたことに文字列に変換して格納してくれてる。マニュアルにも 書いてあったがこれは立派な挙動。 >>313 どう考えても君が悪いと思う。ヌル文字は偽じゃないし、なにを勘違いしてるのか知らんが、 '0000'も真だ。'0'が真で'0x00'を偽にしたいんなら、アスキーコードで判定させればいいし Perlはその手段を提供している。 > あと、明示的に指定せずにほっといたら'0000'を勝手に0にすんのもやめてくれ、って思った。 は。ソース出してみ。Perlはそんなにお行儀悪くない。 >>326 当然由来までは保存してない。だいたいその解釈であってる。 >>334 よく初心者が引っ掛かるところだが、仕様を理解すれば地雷を踏むことはなくなる。 ただし、テキストファイル末尾の改行文字なし'0'だけはどうすることもできない。
339 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 07:30:14 ] >>325 それはJSONが文法的に正しいかどうかをチェックするだけのチェッカーであってバリデータではない。 きみはスキーマバリデータが何かわかってないようだ。 文法をチェックするだけなら1と’1’の違いが問題になるわけがない。
340 名前:デフォルトの名無しさん [2009/09/09(水) 08:06:39 ] >>339 自分が何を言ってるか、理解してる?
341 名前:デフォルトの名無しさん [2009/09/09(水) 09:14:15 ] >>337 > 0でなく"0"な 文字としての比較なら eqとかne 使えば? 比較演算子使わずに済ますのってZ80でXOR Aするような古くさいイメージ。
342 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 10:02:56 ] 地雷ってのは思わぬところで踏むものだと思うよ
343 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 10:44:44 ] >"0"が偽なのは地雷でしかない ↑コイツ・・・最高にアホだな
344 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 10:46:15 ] $unko = undef ; print "\nundef is " , ($unko ? "TRUE" : "FALSE"); $unko = 'KUSO'; print "\n'KUSO' is " , ($unko ? "TRUE" : "FALSE"); $unko = '' ; print "\n'' is " , ($unko ? "TRUE" : "FALSE"); $unko = '1'; print "\n'1' is " , ($unko ? "TRUE" : "FALSE"); $unko = '0'; print "\n'0' is " , ($unko ? "TRUE" : "FALSE"); $unko = 1 ; print "\n 1 is " , ($unko ? "TRUE" : "FALSE"); $unko = 0 ; print "\n 0 is " , ($unko ? "TRUE" : "FALSE");
345 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 11:09:02 ] ひとりだけまともな人がいる! >>306 >Validateする目的は、(JSONを媒体とした)データを受け取ったPerlのプログラムを正常に動作させるためですよね? 残念ながら違います。そういう場合もありますが、バリデータは単に 「入力となるJSONがスキーマ定義を見たしているかどうか(あるいは どこが間違っているか)」を調べるのが目的です。 そのJSONをPerlで使うかどうかはまた別のことです。 >それなら、データがJSONレベルで数値だったか否かは全く問題にならないのでは? >JSON表現の "1" と 1、このどちらも、Perlレベルでは文字列としてでも整数値としてでも正常に扱えるんですから 文字列としても整数値としても扱えることが問題なのではなく、 文字列か整数値かを判定できるかどうかが問題です。(違いはわかりますよね?) >どうしてもJSONレベルでのValidateを望むのであれば、 >JSONデコーダから作るしかないのですね。Ruby等、データに型が備わっている言語であれば、 >確かにJSONデコーダとJSONレベルのValidatorは完全に分離可能でしょう。 >でも、Perlにはそれが出来ない。仕方のないことです 妥当な結論だと思います。 が、Perl信者に言わせると「そういうことをすること自体が間違い」らしいです。 別にどんな言語だって万能じゃないのだから、うまくできないことがあったら 「それはこの言語ではうまくできない」と素直に認めればいいだけなのに、 「そんなことをするほうが間違っている」とわめく痛い信者が多い今日この頃。
346 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 11:39:31 ] >>345 そのすぐ後の >307 をスルーしてるのはわざとか どうしてもPerl自体の問題にすり替えたい様子だが
347 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 11:42:09 ] JSONバリデータなんぞ、再帰下降法使っても3時間ありゃ書けるだろうに。 出来ないという奴は、もう、そういうことにしとけ。
348 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 11:43:10 ] ほらまた、すぐそういうこと言う。3時間以内に書いて来いって言われるぞw
349 名前:デフォルトの名無しさん [2009/09/09(水) 12:02:28 ] >>345 「自分にはできないから言語が悪い」のですね。 わかります。
350 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 12:16:20 ] CPANをユーザーディレクトリで利用するために本当に必要な記述ってなに?
351 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 12:26:16 ] >>350 CPANは管理者権限で利用するのが正統
352 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 13:13:10 ] >>348 いいんじゃない言われても。馬鹿は放置するだけ。
353 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 15:03:46 ] ”0” は48(0x30)で真だろ?
354 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 15:11:09 ] >>351 わかりました 諦めます
355 名前:デフォルトの名無しさん [2009/09/09(水) 15:36:48 ] >>350 use lib 'ディレクトリ'; のこと? 質問の意図がつかめない。
356 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 16:34:03 ] >>353 いったいどこの3流学校でそんな事を習ったんだ?
357 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 16:46:30 ] 東村山第三小学校だけど
358 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 18:24:29 ] 中州産業大学だけど
359 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 19:25:45 ] nullとの比較は$hoge == undefでおk?
360 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 19:31:17 ] えっ?
361 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 19:37:56 ] >>359 nullは無い。 defined($hoge) で未定義をチェック。
362 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 19:38:34 ] >>361 ありがとう。 久しぶりにperlをやったから、完全に忘れてる
363 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 22:15:59 ] あと、 == は数値比較だから気をつけろ
364 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 22:18:43 ] > defined($hoge) すぐカッコつけたがるよね、最近の若者は。
365 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 22:36:10 ] あー、おれもカッコつけたがる若者だわ。 カッコつける場合とつけない場合ってなに?
366 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 22:42:30 ] なんかjavaよりめちゃくちゃ速く感じた 本当に速いかわからないけど
367 名前:デフォルトの名無しさん [2009/09/10(木) 00:19:45 ] >>365 優先順位をはっきりさせたいとき。 好み。
368 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 00:26:44 ] 昔中途半端にカッコつけてたらドツボにハマった それ以来できる限り自然体でいようと思った print (1 + 2) * 3, "\n";
369 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 00:28:04 ] ifの括弧内に単品で書くなら省くかな でも複数条件組み合わせるとか、後置ifの条件に入れるときは書きたい まあ好みだな
370 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 02:13:48 ] if (defind $i) {ほげ} if (defind($i)) {ほげ} ほげ if defind $i; ほげ if defind($i); if (i instanceof Object) ほげ; if (i instanceof(Object)) ほげ; if ($i >= 1 && $i <= 10) {ほげ} if (($i >= 1) && ($i <= 10)) {ほげ}
371 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 03:03:38 ] C使いからすると括弧の無いifは我慢ならん
372 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 03:30:32 ] JSONを知らないから、外れた事言ってるかもしれないが、 perlは文字と数値を区別しないんだから、区別したいケースが あるとしたら、外部からのデータな訳だよね?それなら外部から 入力する時に文字をエスケープすれば良いだけじゃないの? "123"→"%31%32%33",123→"123"とかして。
373 名前:デフォルトの名無しさん [2009/09/10(木) 08:00:24 ] >>372 JSONは通常文字入力をエスケープする仕様にはなってないので、 そういう迂回はすべきでない。 ぎゃーぎゃー騒いでたひと、しまいには Perlで使うわけではないのにPerlでバリデーション処理したいという 訳のわからないことをいいだした。 重箱のスミつついて意味のない優越感に浸りたかったのだろう。 ほら、あれだ。 「俺の出身小学校からオリンビック選手が出たんだぜ。(俺って)スゲーだろ?」「お前んとこはしょぼいお笑いタレントしかでてないよな?俺の勝ちだな。」 ってレベルな感じ。
374 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 11:28:58 ] >>371 かなり重症なC言語脳ですね。 視野が狭すぎますよ。 じぶんの殻に閉じこもりすぎです。 世間は広いんですよ。 もっと多くのものを見て聞いて学ぶべきですよ!
375 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 11:44:46 ] かっこを付けてPerlの世界から弾き出され、$を付けてCの世界からも弾き出され
376 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 11:53:36 ] かっこ付けない専売特許はRubyのほうが上でしょ?
377 名前:デフォルトの名無しさん [2009/09/10(木) 12:06:15 ] >>376 ベタPerlを自認するRubyが?
378 名前:デフォルトの名無しさん [2009/09/10(木) 12:07:49 ] >>374 そうです! リスプはカッコの多い言語ですって坂村先生がいってました!
379 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 13:24:09 ] >>376 おいおい。それはもしかしてマジレスなのか?
380 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 14:38:13 ] >>376 やってみれば分かると思うが、文法的にはRubyのが省略できる条件は制限されるよ 逆に、出来る場面は省略する人が多いけど
381 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 15:07:30 ] >>374 えらく風呂敷広げたなw
382 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 16:13:15 ] if文のかっこなしはPerl 6からだね
383 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 16:29:23 ] >>382 おいおい。それはもしかしてマジレスなのか?
384 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 16:42:53 ] >>383 これ↓ができるのはPerl 6からでしょ? if $x < 0 { $y = 2; $z = 3; }
385 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 16:45:56 ] 後置の話してたんだろ
386 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 17:09:11 ] $a = 1 if $b ne ""; こんなやつでしょ? これはC++使いだけど特に気にならなかった。 要は三項演算みたいな感じだし
387 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 19:34:55 ] >>198 今更ながらありがとう。 結局ループになってしまったけど…… 一応、該当があれば別のサブルーチンに飛んで、無い場合は最も近い配列の場所を見つけ出すようにしたつもり 既に配列(@hai)を取り込んであって $in が入れたい内容。 $min = 0; $mid = 0; $max = $hairetu - 1; # $hai〜は取得した配列の個数 if($max != 0 and $max != -1) { while ($min <= $max) { $mid = int(($min+$max)/2); $space = $max - $min; if($space == 2) { last; } elsif ($space == 3 ) { if ($hai[$mid] >= $in) { last; } else { $mid += 1; last; }
388 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 19:36:35 ] } else { if ($hai[$mid] lt $in) { $min = $mid - '1'; } elsif ($hai[$mid] gt $in){ $max = $mid + '1'; } elsif ($hai[$mid] eq $in){ &・・・・・ #サブルーチンへ last; } } } } スペース消えてるけど、一応二分探索ループです…… >>198 さんのような再帰はうまくつかえなかった……
389 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 23:35:57 ] 久しぶりにCを書いたら、 @array = (0, 1, 2); に相当するようなことの書き方すら判らなくなってた
390 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 00:03:44 ] perl でソースを複数のモジュールに分けて書いた場合 配布する時は汎用モジュールと同じ様に 個人的なモジュールも CPAN に登録するの? そのプログラムを使うユーザは プログラムの入ったディレクトリ・ツリーごと扱って $HOME/bin とかに入れたりするの? コンパイルすれば単体の実行ファイルになって扱い易くなるだろうけど ソースのまま配布したいんだけど……。
391 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 00:06:53 ] つ perldoc FindBin つ perldoc lib
392 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 02:50:22 ] use FindBin; use lib "$FindBin::Bin/lib"; とするか use FindBin::libs; でいけるんですね。 取っ掛かりが出来たので OOP だとどうなるのかとか 標準的なディレクトリ構成とかを調べて見ようと思います。 ありがとう。
393 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 07:50:59 ] >>390 今CPANはネームスペースがアレなことになっているので、それだけはやめれ。手段ががいしゅつだから省く。 モジュール登録する時も、IRCなどで名前空間の妥当性とCPANに登録する必要性を審議しらもらってからにした方がいい。
394 名前:デフォルトの名無しさん [2009/09/11(金) 07:53:17 ] >>387 ファインチューニングしてないけど、こんな感じ? sub bsearch($$;$$){ my ($a,$t,$s,$e)=@_; $s=$[ if !defined $s; $e=$#$a if !defined $e; &subroutine if $$a[$s] == $t; return $s if $s>=$e; $m=floor(($s+$e)/2); $x=bsearch($a,$t,$s,$m); $y=bsearch($a,$t,$m+1,$e); return ($a[$x]-$t < $a[$y]-$t) ? $x : $y; }
395 名前:デフォルトの名無しさん [2009/09/11(金) 09:06:50 ] >>394 自己レス。 > &subroutine if $$a[$s これは削除して呼び出し側でチェックしないとだめだわ。 でないと何度も呼ばれてしまう。
396 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 16:51:05 ] 数値の 0 を参照させたい時はどうしたらいいのでしょう?
397 名前:396 mailto:sage [2009/09/11(金) 17:02:32 ] 自己解決しました
398 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 11:10:10 ] ファイル名を取得するとき、opendirとglobどっちを使うべきなのでしょうか?
399 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 11:47:16 ] File::Slurpのread_dirオススメ
400 名前:デフォルトの名無しさん [2009/09/12(土) 16:42:48 ] ファイルグロブなんか使ったらいかんと誰かがブログで書いてたよ
401 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 17:41:16 ] >>400 それって結局「いかん根拠なんてないじゃん」という話じゃなかったか?
402 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 20:35:07 ] .と..をいちいち除外しなくていい
403 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 22:42:15 ] 古いperlは、ファイルグロブはシステムに依存してた。 (「ファイル名が長過ぎます」エラー等のperlの外の問題を切り離す事が出来ない。) つー事で古くからの人間は「グロブなんざ使うんじゃねえ。」と言いがち。 で、それら諸先輩に影響を受けた人々が、本来の根拠と別に理由をこじつけ 「だからグロブは使いません!」って言ってる(人もいる)。 今となってはどっちでも良いんでねえの?10年以上前の常識だし、 俺はグロブ使わんけど。
404 名前:デフォルトの名無しさん [2009/09/12(土) 23:31:36 ] >>398 opendirはファイル名のみとりたいときに便利。 globはパスごととりたいとき便利。
405 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 00:38:38 ] あー パスは自前で管理してファイル名とくっつけて開くのが当然だと思ってたけど、 別にそんなことしなくてもいいか
406 名前:デフォルトの名無しさん [2009/09/13(日) 01:48:50 ] > "There's more than one way to do it" ということで、
407 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 03:34:06 ] Perl界の重鎮、子飼弾氏は以下のように述べております。 404 Blog Not Found:perl - glob,readdir, and regexp blog.livedoor.jp/dankogai/archives/51058540.html
408 名前:400 mailto:sage [2009/09/13(日) 08:39:41 ] 今更ただのシャレだったなんていい出しづらい雰囲気だな
409 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 11:02:01 ] えっ・・・みんな気づいてなかったのか?
410 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 11:58:28 ] はいはい、>>407 は気がついていた。偉い偉い。
411 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 12:55:27 ] 関数名を動的に指定して実行することはできますか。 sub f1 { print "f1()¥n"; } sub f2 { print "f2()¥n"; } ... とあるときに、 my $func = "f2"; $func(); のように実行したいんですけど、できないでしょうか。 ちなみに $func() はシンタックスエラーになり、&$func() は use strict しているとエラーになりました。
412 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 13:15:31 ] >>411 my $func = \&f2; &$func(); もしunix環境があるなら man perlref を見るといいよ。 サブルーチンへの参照の扱いがいろいろ書いてあるから。
413 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 13:16:47 ] >>411 その関数に限れば、 main->$func; で呼べますが。
414 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 13:19:49 ] eval "&$func()"とかも使えるね
415 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 14:08:14 ] どうもありがとうございます。 >>412 関数名は変数で指定したいので、残念ながらその方法は使えないようです。 >>413 パッケージ名を指定すると呼び出せるのですか。なるほど。 パッケージ名が長いと面倒ですけど、この方法でやってみます。
416 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 14:34:00 ] >>415 クラスメソッドとして呼び出してるから第一引数が 自動的に追加されるが、それでもいいのか? #!/usr/bin/perl -w use strict; sub f1 { "f1()\n" } sub f2 { 'f2(', join(',', map "'$_'", @_), ")\n" } my %dt = ( f1 => \&f1, f2 => \&f2, default => sub { 'anonymous(', join(',', map "'$_'", @_), ")\n" }, ); my($func, @arg) = @ARGV; print main->$func(@arg); print $dt{ exists $dt{$func} ? $func : 'default' }->(@arg); __END__
417 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 14:56:26 ] スコープを絞って、no strict 'refs'するのが正攻法? { no strict 'refs'; $func->(); }
418 名前:デフォルトの名無しさん [2009/09/13(日) 17:17:12 ] >>411 これでよければ簡単。 $func{f1}= sub { print "f1() n"; }; $func{f2}= sub { print "f2() n"; } my $func = "f2"; $func{$func}();
419 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 18:25:33 ] Text::MicroTemplate でキャッシュを使うにはどうしたらいいでしょうか。 ドキュメントを見るかぎりにおいては、 use Text::MicroTemplate::File; my $mt = Text::MicroTemplate::File->new(use_cache=>1); $mt->render_file("example.mt", $arg1, $arg2); のように、new() に use_cache=>1 を渡すだけでいいと思うのですが、 キャッシュファイルが作成されません。 またベンチマーク結果も、Template-Toolkitよりだいぶ遅いです。 Text::MicroTemplate の使い方を知っている人がいれば教えてください。
420 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 22:39:43 ] >>411 AUTOROAD じゃダメなの?
421 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 23:48:59 ] windowsXP+ActivePerl5での質問です。 windows media encoderで映像をライブ中継したいのですが ライブ中継中だけ、ブラウザにメディアプレイヤーが表示されるようにしたいです。 サーバ側のwindows media encoderが起動されていることがPerlで確認できれば そのようなことが可能だとおもったのですが、そのような関数はありますか? また、もっといい方法あったら教えていただきたいです。