1 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 00:07:22 ] "The duct tape of the Internet" こと、Perlについての質問箱です。 "There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。 CGIについての質問は板違いです。WEBプログラミング板でどうぞ。 CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。 (WEBプログラミング板 ttp://pc11.2ch.net/php/ ) CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。 このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 ttp://www.perl.org/get.html ● 2008/01/11現在の最新版: 5.10.0 ● 2007/01/11現在の開発版: 5.9.5 前スレ Perlについての質問箱 33箱目 pc11.2ch.net/test/read.cgi/tech/1192463997/ リンク集は>>2-3 過去スレは>>4 あたり
449 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 13:14:02 ] >>446 2ch語を適当に組み合わせるしか脳のない「普通の厨」なら、 似たようなクオリティの人工無能も書けるかもしれないけど、 天然素材は模しようがないなw
450 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 13:19:08 ] >>449 実は本人はスーパーハカーで,2chに書き込んでるのはサイタマンに作られた人工知能なんじゃないか… そしてあのコードも学習して自動生成されたんじゃないかと妄想してみたwww
451 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 13:29:30 ] >>447 ゴールドポイントカードならぼくも持ってるよ。
452 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 13:33:07 ] ま、スレ違いだから去れ
453 名前:デフォルトの名無しさん [2008/02/13(水) 15:54:58 ] aaa1 aaa2 aaa3 aaa4 というファイルがあったときに 通番どおりに結合して1つの出力にする上手い方法ありませんでしょうか?
454 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 15:59:00 ] cat 呼び出す
455 名前:453 mailto:sage [2008/02/13(水) 18:25:02 ] >>454 ありがとうございます。 catは盲点でした。無事解決しました。
456 名前:デフォルトの名無しさん [2008/02/13(水) 18:31:44 ] 配列のなかに配列を複数持っている場合 それらをうまく結合する手段ってないでしょうか? 具体的には以下のような感じです @array[1] = {aaa, bbb} @array[2] = {ccc, ddd} @array[3] = {eee, fff} このとき、一つの変数にまとめて {aaa, bbb, ccc, ddd, eee, fff} となるようにしたいです。 申し訳ないのですが、知恵を貸してください。
457 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 18:46:13 ] 544 :デフォルトの名無しさん:2007/05/12(土) 02:54:05 深さのある配列を左から順番に呼んでフラットな配列を作りたいんですが、 よい方法ご存知の方いませんか @a = ([1,2,3], [4,5,6], [[7,8],[9,0]]); @b = flatten(@a); # 1,2,3,4,5,6,7,8,9,0 546 :デフォルトの名無しさん:2007/05/12(土) 03:16:52 >>544 sub flatten(@) { map { ref $_ eq "ARRAY" ? flatten(@$_) : $_ } @_ } こんなんどうよ。
458 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 19:26:12 ] >>457 456です、回答ありがとうございます。 しかしながら、私が挙げた例の場合にはどのように用いればよいか分からず困っています。 ヒントだけでもいただけないでしょうか?
459 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 19:29:20 ] {}はハッシュだろ
460 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 19:31:12 ] >>459 理解できました、ありがとうございます!
461 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 00:42:53 ] Pgを使って(DBIじゃなく)複数スレッドから同時にDBアクセスを使用と思います。 DBへの接続は各スレッドで行います。 Perl自体はスレッドに対応していても、関連モジュールとかの対応状況がわかりません。 バージョンは以下の通りです。 Perl 5.8.8 libpg 2.1.1 PostgreSQL 8.1 ディストリビューションは、Debian etchです。 スレッドの方が子供の面倒が見やすそうなので、できればスレッドにしたいのです。
462 名前:デフォルトの名無しさん [2008/02/14(木) 01:19:43 ] で、自分では試したくないので、だれかヒマなヤツ、オレのかわりに試してくれんか。 オレは家でゴロゴロしてアニメ観るのに忙しいから。 ・・・とか?
463 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 01:27:23 ] いえ、アニメじゃないです。 アニメの実写劇場版です。
464 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 21:24:49 ] >>462 せっかくぼけてくれたところをマジレスすると、試して問題なかったからと言って、スレッドに対応しているとは限らないから困ってるんです。 たまたま動いているだけってことがあるし。
465 名前:デフォルトの名無しさん [2008/02/15(金) 09:03:33 ] perl5.10が普及するのっていつごろ?
466 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 22:25:02 ] >>464 その当たりの情報は、ソースやリリースノートを追うしかないと思う。 やたら古くてあまり参考にならないけど tp://homepage3.nifty.com/hippo2000/perltips/DBI/FAQ.htm#5_1_Can_I_do_multi_threading_wit
467 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 02:06:19 ] ActivePerlの5.10の最新版(ほかいくつかのバージョン)で、 ppm search (モジュール名) でモジュールをネットから探してくれないのですが、 何か指定が必要でしょうか。
468 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 02:59:34 ] >>467 5.8 と5.10ではバイナリ互換性がないので、単に5.10向けにビルドしたのがないと思われる。
469 名前:デフォルトの名無しさん [2008/02/17(日) 01:17:31 ] winで、perlからmysqlを使っているのですが、 insert into a(a) value("あ"); コマンドラインで打つとうまくいくのですが、perlのDBIではうまくいきません。助けてください。
470 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 03:10:36 ] >>469 向こうの(mysql)スレでも言われているように、mysqldのdefault-charsetは確認したか?
471 名前:デフォルトの名無しさん [2008/02/17(日) 09:58:05 ] はい、sjisになっていて、win なのでPerlで書いているソースもそうじゃないかと。
472 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 11:02:29 ] >>471 ほんじゃ、unpack()つかって、バイナリの並びを表示して確認してみるとか?
473 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 11:04:16 ] >471 最近の Perl は内部 UTF-8 だべ。
474 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 12:00:13 ] >>471 >>470 で聞いたのは、mysqldの’connect’と’client’のcharsetのこと。 mysqldのversionを明記してないけど、多分4.1か5.0だと仮定して、 perl-DBD-mysqlで接続したときの、default-charsetがちゃんと’sjis’なり’cp932’になってない。 (mysqldとDBD-mysqlを自前でコンパイルしてない限り) つうことでそこを確認、変更しましょう。 ちなみに>>469 で書いてるみたいに、コマンドラインのmysql.exeからLoginして確認した ’charset’関係は、あくまでもコマンドラインのmysqlからの接続時のみに効いてる状態なんでそれとは別。
475 名前:デフォルトの名無しさん [2008/02/17(日) 13:47:20 ] >>469 insert 以前にさ、select はうまくいくの? 初心者なら、簡単な事からはじめてみよう。 use utf8; use DBI; my $db = DBI->connect("DBI:mysql:以下省略・・・ $db->do('SET NAMES UTF8'); $id = 1; my $sql = "SELECT name,address FROM members WHERE id=$id;"; my $sth = $db->prepare($sql); $sth->execute or die DBI::errstr; $sth->bind_columns(undef, \(my($M_name,$M_address))) or die DBI::errstr; my $rc = $sth->fetch(); utf8::decode($M_name); utf8::decode($M_address); insert はこの逆をすればいいだけ。
476 名前:デフォルトの名無しさん [2008/02/17(日) 16:29:46 ] 設問1 f-e-d-c-b-a-0-a-b-c-d-e-f
477 名前:デフォルトの名無しさん [2008/02/17(日) 16:31:00 ] 設問2 9-8-7-6-5-4-3-2-1-X-1-2-3-4-5-6-7-8-9
478 名前:デフォルトの名無しさん [2008/02/17(日) 17:13:02 ] 以下の問題を定義しなさい。 1{"f" = "-f == f" && "+f == f"} 2{"9" = "-9 == 9" && "+9 == 9"} 3{構成文省略} "9" は "f" に等しく、また "-9" は "-f" に等しい "0" は "X" に等しいので "0" == "X" = "n" とする 先ず此の構成を "x,y,z && n" を成型にしなさい また "n" は "y" で在り "9…0…9" まで存在する しかし "n = y" の配列は"次の"配列 "9…0…9" を使用する事! 残された "9…0…9" は "1/3" の後の "1/4" で使うが? "n" == "0 = X" && "x,y,z" = "x,y,z" == "n/4" に為りますが構成は入り組んで居りますね?
479 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 17:17:15 ] 日本語が苦手なら英語でおk
480 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 17:19:52 ] どちらのお国のガイジンさんですか
481 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 17:26:21 ] 宿題は自分でやるか先生に聞きなさい。ためにならん。
482 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 17:26:35 ] いくらなんでも丸投げすぎワロタw
483 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 17:28:26 ] 解読できません>< 誰か和訳たのむ
484 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 18:52:46 ] >>476-478 くだらねぇ問題はここへ書け ver.3.14(57桁略)4592 science6.2ch.net/test/read.cgi/math/1197828000/
485 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 20:29:46 ] >>476 ん? >>477 え? >>478 パルプンテ
486 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:40:18 ] >>478 居りますよ
487 名前:デフォルトの名無しさん [2008/02/17(日) 22:24:11 ] おちんちんの傘のまわりに小さいギザギザがあるんですが 医者に見せたほうがいいですか?
488 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:28:07 ] >>487 このスレ的には大きなツブツブのほうが好まれますね 死ね
489 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 21:53:13 ] active perl をダウンロードしようと思い www.activestate.com/ にいったのですが 久々に訪れてみたら、 ずいぶん様子が違いダウンロードする場所がわかりません どこにあるのでしょうか
490 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 21:55:36 ] www.activestate.com/store/download.aspx?prdGUID=81fbce82-6bd5-49bc-a915-08d58c2648ca
491 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 21:58:52 ] >>490 即答ありがとうございます 助かりました
492 名前:デフォルトの名無しさん [2008/02/18(月) 23:48:34 ] XML処理用のマッピングファイルを以下を参考にして作成しました。 homepage3.nifty.com/hippo2000/perltips/xml/xmlenc.htm 作成したマッピングファイルは、規定のディレクトリに置けば良いのですが、 ローカルディレクトリに置いたまま使用したいと考えています。 任意のディレクトリをマッピングファイル検索パスに追加する方法はあるのでしょうか?
493 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 10:39:35 ] 中身見た?
494 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 18:14:27 ] $moji = 'a<>b<>c<>';
495 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 18:15:38 ] ミスです。 $moji = 'a<>b<>c<>';があって 2番目だけを切り取るいい方法ってありますか? 配列ならspliceみたいな
496 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 18:20:22 ] 配列にしてspliceすればいい。
497 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 18:52:37 ] $moji =~ s/^([^<>]+<>)([^<>]+<>)/$1/;
498 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 18:54:53 ] s/^((?:.*?<>){1})(?:.*?)(?:<>|$)/$1/;
499 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 18:59:54 ] s/qあwせdrftgyふじこlp. くぁwせdrftgyふじこlp;/;
500 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:39:18 ] >>495 「切り取る」とは 除去なのか $moji =~ s/(?<=<>).*?(?=<>)//; # a<><>c<> $moji =~ s/(?<=<>).*?<>//; # a<>c<> 取得なのか $value = (split /<>/, $moji, 3)[1]; # $value = 'b';
501 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 19:15:50 ] Windows Excel から Perl スクリプトを実行し、その結果を受け取ることはできますか? 目的は Perlスクリプトに GUIラッパーをかぶせることです。 処理結果を Excel に渡してグラフ表示することなども考えてますので、 その意味でも Excel から一貫して操作できれば、と考えています。 具体的には Web サーバからダウンロードした Apache の access log を 見やすく解析したいと思っています。 業者さんの設置してくれた アクセスログ解析CGI では得たい情報が得られないので、自分でなんとかしようと思いました。 実行するのは会社のパソコン上です。Perl の実行環境は用意しようと思っていますが、 それ以外のローカルサーバでの CGI とか PHP とかは今のところ考えていません。 環境は WindowsXP、Excel 2003 です。 どうぞよろしくお願いします。
502 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 20:21:42 ] Excelスレ池
503 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 20:45:24 ] Perlで解析結果をファイルに書き出して Excelのマクロでグラフにすればいいんじゃないかな
504 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 20:46:10 ] え、Perlいらなくね?
505 名前:>>501 mailto:sage [2008/02/21(木) 22:11:59 ] レスありがとうございます。 >>502 やはりスレ違いでしたか…Excel VBAスレのテンプレ読んでこちらに来てしまったのですが、 書き込んでからやっぱりこっちのスレは違うかもと思いました。申し訳ありませんでした。 >>503 Perlを実行するのを、DOS窓からコマンドを打ち込むのではなく、例えば Excel の マクロの中から実行できないかと思いまして…。 >>504 Excel の VBAでスクリプトを作りかけたんですけど、簡単な置換をさせただけでも 結果が帰ってくるまでに5分ぐらいかかってしまいました。それでPerlに変えたんです。 もっとも実行させたのがPPCのMac上だったので、Windowsだったらもっと早いとは思うのですが…。 ではExcelのスレに移動することにします。 レスいただきどうもありがとうございました。
506 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 09:29:51 ] 携帯のアクセス制限はどうすれば良いの? IPアドレスだと毎回変わるんだが
507 名前:デフォルトの名無しさん [2008/02/22(金) 14:50:54 ] perlで、「iostat -x」の出力結果の ---------------------------------------------------- extended device statistics device r/s w/s kr/s kw/s wait svc_t %b twed0 6.3 35.9 81.1 565.8 0 9.8 7 ---------------------------------------------------- の中の、「81.1」と「565.8」だけ標準出力したいのですが、 試行錯誤したのですが、うまくいきません。 最後に試したのが、以下のスクリプトですが、 何も表示されずにちょっとお手上げです。 どなたかご指摘頂けないでしょうか? どうぞお願いします。 ---------------------------------------------- #!/usr/bin/perl open(FILE, "iostat -x"); while (<FILE>) { if (/^twed0?\s+?[0-9\.]+?\s+?[0-9\.]+?\s+?([0-9\.]+)?\s+?([0-9\.]+)?\s+?[0-9]+?\s+?[0-9\.]+?\s+?[0- 9]+$/) { print "$1\n"; print "$2\n\n\n"; } } close(FILE); ----------------------------------------------
508 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:55:33 ] open(FILE, "iostat -x |")
509 名前:デフォルトの名無しさん [2008/02/22(金) 15:01:39 ] >>508 アドバイスありがとうございます。 >>508 さんの方法でもやってみたのですが、やはり何も表示されませんでした。 何がまずいんだろう・・・
510 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:11:34 ] ……
511 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:15:43 ] >>507 最後の改行コードは大丈夫?
512 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:25:30 ] chomp汁!
513 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:35:15 ] kwsk見てみたが正規表現が間違ってるっぽいな もうちょっと見てみるわ
514 名前:507 [2008/02/22(金) 18:56:36 ] >>511 >>512 >>513 お手数お掛けしてすみません。 私は、いつもphpを使っているので、phpのperl互換の正規表現で色々と試行して、 phpでは正規表現の部分で正常にできました。 どこが動かないのかデバックコードを書いてみました。 ---------------------------- #!/usr/bin/perl open(FILE, "iostat -x |"); print"-"; while (<FILE>) { if ("/^twed0\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)$/i") { print "$2\n"; print "$4\n\n\n"; } print "*"; } close(FILE); ------------------------------------- 上のスクリプトで実行すると、出力結果が 「- * *」(改行つめました)が出力されます。 シェルから、「iostat -x」とたたくと、前述ようにきちんと出力します。 たぶん、if文の使い方が悪いと思うのですが、 どのようにやるのが正しいのでしょうか?多分、初歩的なことかも? 引き続き、宜しくお願いします。お手数お掛けします。
515 名前:507 [2008/02/22(金) 18:58:41 ] あ!、改行が複数飛び飛びに入っている実行結果から$2と$4は空文字になっているのだと思います。 でも、そこからどう解決できるのかが分かりません。う〜ん。
516 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 19:16:33 ] >>514 if(〜)は何でdouble quoteしてるの?
517 名前:507 [2008/02/22(金) 19:21:21 ] >>516 これは初めてつけていなかったのですが、試行錯誤していて試しにつけてみたら、 if文の中を実行ができるようになりました。(複数改行が出力されます) 本来はつけないのが正しい記法なのでしょうか? そうだとしますと、ますます混乱してきました。
518 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 19:27:11 ] >>517 "で括った文字列は空文字列でなければ必ず真と判断される。だから意図した条件を満たさない行も出力されてるでしょ 付けちゃだめだよ 今iostatが使えない環境なので>>507 のデータをファイルに入れているんだが、これはきっと期待通りの動作だろう #!/usr/bin/perl open(FILE, "iostatdata.dat"); print"-\n"; while (<FILE>) { chomp; if (/^twed0\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)$/i) { print "\$2 = $2\n"; print "\$4 = $4\n"; } print "*\n"; } close(FILE);
519 名前:507 [2008/02/22(金) 19:44:14 ] >>518 わざわざコードまで書いて下さって、本当に親切にどうもありがとうございました。 早速試してみたのですが、う〜ん...結果はうまくいきませんでした。 ●iostatの実行結果 ------------------------------------------------------------------------------ www# iostat -x extended device statistics device r/s w/s kr/s kw/s wait svc_t %b twed0 5.1 37.6 78.3 598.9 0 10.5 7 ------------------------------------------------------------------------------
520 名前:507 [2008/02/22(金) 19:44:38 ] ●perlでの実行結果 ---------------------------------------------------------------------------- #!/usr/bin/perl open(FILE, "iostat -x |"); print"-"; while (<FILE>) { # if (/^twed0\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)$/i) { # print $1 . "\n"; # print $4 . "\n\n\n"; # } chomp; if (/^twed0\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)$/i) { print "\$2 = $2\n"; print "\$4 = $4\n"; print "*"; } print "*\n"; } close(FILE); ------------------------------------------------------------------------------ # /home/test/test.pl -* * * ------------------------------------------------------------------------------
521 名前:507 [2008/02/22(金) 19:45:41 ] ●【参考】phpの参考結果 ---------------------------------------------------------------------------- $word = "twed0 5.1 37.6 78.3 598.9 0 10.5 7"; $word = preg_replace("/^twed0\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)$/", "$2--$4", $word); echo "->". $word . "<-"; ---------------------------------------------------------------------------- ->37.6--598.9<-
522 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 20:29:58 ] >>506 各社の携帯電話が使うIPアドレスの範囲は公式ページに載っているので、それで制限することはできる。 特定の携帯電話をはじくのは無理かな。同じ機種使ってれば、区別のしようがないし。端末IDを送信してれば区別できるけど。
523 名前:デフォルトの名無しさん [2008/02/22(金) 20:35:23 ] じゃオレも。 ●>>521 のphpをそのままperlの文法に書き換えただけでの結果 ------------------------------------------ $word = "twed0 5.1 37.6 78.3 598.9 0 10.5 7"; $word =~ s/^twed0\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)$/$2--$4/; print "->". $word . "<-"; ------------------------------------------ ->37.6--598.9<- ほらちゃんと>>521 と同じ結果が出たぞ。 何が違うのか、よ〜く見てみろ。 「問題の切り分け」 って習わなかったのか? phpだろうがperlだろうがjavaだろうが、 どんな言語でもデバッグの手法は同じだよ。 もういちど基本に帰れ。
524 名前: ◆TWARamEjuA mailto:sage [2008/02/22(金) 21:41:04 BE:1524672-2BP(7072)] つ s
525 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 22:58:53 ] >506 やっぱ端末情報を拾うのが一番じゃないか?
526 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 03:38:59 ] >>507 ,523 x フラグつけてくれ。読みにくくてかなわんw
527 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:25:03 ] そもそも正規表現で拾う必然性すらない。 #!/usr/bin/perl -w use strict; # open IOSTAT, 'iostat -x |' or die $!; *IOSTAT = *DATA; scalar <IOSTAT>; # extended device statistics my @col = split /\s+/, <IOSTAT>; my %v; $v{'device'} eq 'twed0' and print "$v{'kr/s'}\n$v{'kw/s'}\n\n\n" while @v{@col} = split /\s+/, <IOSTAT>; close IOSTAT or die $!; __DATA__ extended device statistics device r/s w/s kr/s kw/s wait svc_t %b twed0 6.3 35.9 81.1 565.8 0 9.8 7 twed1 5.1 37.6 78.3 598.9 0 10.5 7
528 名前:デフォルトの名無しさん [2008/02/23(土) 15:19:23 ] それを言っちゃオシマイよ
529 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 21:35:32 ] // データを1行読み出す。 function GetNextData(){ if( $line = fgets($this->m_file_hd, 1024) ){ $line2 = split($this->m_pause_chr, $line); $ans = new Line(); $ans->SetData($line2[0], $line2[1]); }else{ $ans = ""; } return $ans; } 変数名の最後に数字使うのは初心者だろ? もしコード拡張で数値計算が入ったら紛らわしい
530 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:04:21 ] だって、変数名の最初に数字がつかえないんだもん。
531 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:22:52 ] 誤爆か? 考え込んでしまった
532 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:25:43 ] evalって、エラーがなければ$@が空文字列であることが保証されるとのことですが、 evalのリターンはエラーがあった場合、undefであることが保証されますか? definedな戻り値と$@が両立するケースはありますか?
533 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 10:18:31 ] >>532 <q cite="perldoc.jp/docs/perl/5.10.0/perlfunc.pod#item_eval_BLOCK "> 構文エラーや実行エラーが発生するか、die 文が実行されると、 eval の値として未定義値が返され、$@ にエラーメッセージが設定されます。 エラーがなければ、$@ は、空文字列であることが保証されます。 </q>
534 名前:530 mailto:sage [2008/02/24(日) 11:01:47 ] >>531 ごめん。ぼけてみたんだけど、はずした。
535 名前:デフォルトの名無しさん [2008/02/24(日) 11:42:40 ] >>533 どうもです!構文エラーと実行エラー以外に$@が設定されるエラーはないと 考えていいんですよね??素人丸出しな質問ですが。
536 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 13:15:54 ] >>535 search.cpan.org/dist/perl-5.10.0/pod/perlvar.pod#EVAL_ERROR <q cite="perldoc.jp/docs/perl/5.6.1/perlvar.pod "> 最後の eval() 操作子による Perl の構文エラーメッセージです。 </q>
537 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:02:29 ] >>534 いやまあ、あなたのことじゃないんで気にしないで
538 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:30:35 ] コンパイル時にパッケージ名とサブルーチン名を区別できない可能性があるから、 サブルーチンの名前には大文字を使わないと聞いたことがあるのですが本当でしょうか? また実際に区別できないことがあるのは、どういった使い方をした場合でしょうか?
539 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 11:05:25 ] >>538 コンパイラが大文字小文字でパッケージ名と関数名の 区別を付ける事はないので嘘。 perldoc.jp/docs/perl/5.8.0/perlstyle.pod > 実際に区別できないことがある 人間が区別を付けにくいという意味では func_or_method FuncOrClassOrFh @arg;
540 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 15:03:13 ] あ
541 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 16:07:27 ] >>539 回答ありがとうございます。 一般的にパッケージ名に大文字を使うため、サブルーチンの名前にも大文字を使うと、 パッケージ名とサブルーチン名が重複する可能性があり、 重複するとコンパイラが区別ができないことがあるのかと、 疑問に思ってるのですが、これについてはどうでしょうか?
542 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 16:50:13 ] 「名前空間」の勉強してこいよ
543 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 17:11:44 ] ?
544 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 18:01:02 ] 重複して困るのはサブルーチン名でなくラベルやファイルハンドル。 #!/usr/bin/perl -w use strict; package Foo; sub Foo { join '', @_ } package Bar; sub Bar { print 'Bar!' } package main; # これはOK # print Foo Foo Foo => "\n", Foo->Foo("Foo!\n"); # FooFoo\nFooFoo!\n # Bar Bar; __END__ Bar! # パッケージ名と同名のファイルハンドル # open Foo, '>./Foo.txt' or die $!; # Foo->Foo('Foo!'); # ここで混乱して実行時エラー # close Foo; __END__ # goto EXPR を goto LABEL で解釈してコンパイルエラー # for (1..5) { $_ > 2 ? goto Foo Foo 'Foo' : print "$_, " } # FooFoo: print 'foo!'; __END__ # 優先順位の明確化で解決 # for (1..5) { $_ > 3 ? goto(Foo Foo 'Foo') : print "$_, " } # FooFoo: print 'foo!'; __END__ 1, 2, 3, foo!
545 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 18:45:04 ] >>544 非常に分かりやすく解説してくださってありがとうございます。 perl.g.hatena.ne.jp/bosh/20060409 こちらで書いてあるのは間違いということで、理解しました。
546 名前:デフォルトの名無しさん [2008/02/26(火) 21:59:27 ] 素人が趣味で書いたホームページを鵜呑みにされても・・・
547 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:18:46 ] 何かあるのかと思って確認のために聞いただけじゃないか
548 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 10:27:01 ] 素人かどうかなんてわからないだろ
549 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 10:28:24 ] わからないなら素人として扱うのが安全だろ
550 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:18:38 ] じゃあここでレスしてるのも素人ばっかりだなw
551 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 16:12:38 ] お前はその前提で喋ってればいいんじゃね? 馬鹿だなーって思われるだけだけど。
552 名前:デフォルトの名無しさん [2008/02/27(水) 16:23:09 ] わかった。>>551 は超素人ってことで。
553 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 16:42:13 ] 笑うところだろw まぁ鵜呑みにするな、っていうのは真理だな
554 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:22:22 ] 素人です。教えてください。 何もわかりません。動きません。 絶対プログラムは正しいので、Perlのバグだと思うのです。 ・・・・。
555 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:32:58 ] どっかのコピペか?
556 名前:デフォルトの名無しさん [2008/02/28(木) 09:41:09 ] 質問です。 func_hoge() というサブルーチンがあります。 このサブルーチンは、内部でエラーが起こった場合のみ、エラー番号やエラーメッセージを返してきます。 何も問題なければ 0 やら空文字列が返ってくるとします。 func_hoge()を呼び出すときは、 my $err = func_hoge(); if ($err) { die "Error func_hoge [$err]"; } というように返り値を保持しておき、 エラーがあれば、その時のエラー番号(可能であればサブルーチン名などの目印も)を表示したい。 これはこれで全く問題ないのですが、func_hoge()の呼び出し箇所が増えると エラー格納用の一時的な変数が増えてしまいますし、何より面倒です。 何か楽できる方法ありませんか?
557 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 11:00:53 ] func_hoge de die
558 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 11:13:37 ] func_hoge()の中でuse Carpしてcroakすればいいんじゃね? die させないときはeval{}で囲えばいいし。
559 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 11:46:45 ] サブルーチンの中を弄らないと無理かー。 呼び出し側だけで何とか小手先の変更で出来ないかなとか考えてた。ありがとう。
560 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:41:38 ] ん? push @err, func_hoge(); みたいなもんでいいのかな。
561 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:53:34 ] 新しいサブルーチン作ればいいじゃん。
562 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:44:00 ] if (my $err=func_hoge()) { die "Error func_hoge [$err]"; }
563 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 22:13:15 ] >560 状況にもよるけど、サブルーチンを呼ぶたびにエラー判定しなきゃならないような類だと 結局手間は変わんないかも。 >561 最終的には多分そうなると思う。 >562 やっぱそれが一番スマートなのかなあ。
564 名前:デフォルトの名無しさん [2008/02/29(金) 00:37:04 ] Perlってパースした後の構文木をプログラムで書き換えることはできないの?
565 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 03:20:56 ] dieで死ぬだけなら再利用しちゃえばいいんじゃないの?w
566 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 09:02:53 ] >>564 目的は?
567 名前:デフォルトの名無しさん [2008/02/29(金) 10:51:40 ] Perl の localtime 関数はエポックからの秒数をローカル時刻の年月日に 分解してくれますね。これとは逆に、ローカル時刻の年月日を エポックからの秒数に変換するにはどうしたらよろしいでしょうか?
568 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:05:27 ] timelocal
569 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 13:23:58 ] 一度くらい自分で作ってみるのも悪くないけど(簡単だから)、 出来上がったらそれ以降は>>568 を使っておけばいいな。
570 名前:デフォルトの名無しさん [2008/02/29(金) 14:22:22 ] Perl で split 関数が返す配列を、一度配列に入れずに、すぐに配列参照として 受け取ることはできますか? $ar = split(/,/, $str); $ar_ref = \@ar; じゃなくて $ar_ref = split(/,/, $str); のようにしたい。 ↓こんなのじゃうまくいかなかった。 $ar_ref = \split(/,/, $str);
571 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:38:52 ] anonymous array reference constructor
572 名前:デフォルトの名無しさん [2008/02/29(金) 14:43:44 ] >>571 つまり、こういうことですか? $ar_ref = [ split(/,/, $str) ]; でも、これだと、配列の要素をコピーすることになりそうで (なりますよね?) 無駄ではありませんか?
573 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:45:55 ] >>572 実際の動作がどうなるのかはソースを読む。 読みたくないなら、明らかにコピーしそうなperlコードとBenchmarkで比較。
574 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:05:51 ] >>572 最適化されるよ。
575 名前:デフォルトの名無しさん [2008/02/29(金) 16:29:22 ] >>574 証拠はある?
576 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 16:39:17 ] 証拠がソースだったら読むのか?
577 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 16:47:30 ] 他人に頼りすぎだ。 パフォーマンスが気になるなら、ちょっと確かめてみればいい。 こんなコード断片が書けないのなら、パフォーマンスなど気にするだけ無駄。 use Benchmark qw(timethese); my $source = join(',', ('abcdefg')x80000); my $result_ref; timethese(100, { temp => sub { my @temp_array = split(/,/, $source); $result_ref = \@temp_array; }, bracket => sub { $result_ref = [ split(/,/, $source) ]; }, none => sub { split(/,/, $source); }, }); Benchmark: timing 100 iterations of bracket, copy, none, temp... bracket: 9 wallclock secs ( 8.94 usr + 0.00 sys = 8.94 CPU) @ 11.19/s (n=100) none: 6 wallclock secs ( 6.76 usr + 0.00 sys = 6.76 CPU) @ 14.80/s (n=100) temp: 15 wallclock secs (14.27 usr + 0.00 sys = 14.27 CPU) @ 7.01/s (n=100)
578 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 17:00:25 ] >>575 証拠は俺の脳内。 信じられないなら自分でソース読もう。
579 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 17:54:31 ] >>577 void コンテキストで split 使うと @_ に入るので注意な。
580 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 19:05:26 ] lala-zコンテキストなら?
581 名前:ジミー [2008/02/29(金) 21:41:12 ] $str = "a,b,"; @ar = split(/,\n/, $str); print join(',', @ar); これを実行すると a,b と表示されます。 つまり、split は末尾の空文字列を取り出してくれないようです。 末尾の空文字列を取り出して、このコードが a,b, と表示させるように するための簡単な方法ってありませんかね。 (もちろん愚直に工夫すれば何とでもなるが、スマートな解がほしい)
582 名前:ジミー [2008/02/29(金) 21:41:59 ] >581 コード間違えた。(実験してたコードにしてもた。) × @ar = split(/,\n/, $str); ○ @ar = split(/,/, $str);
583 名前:ジミー mailto:sage [2008/02/29(金) 21:46:48 ] 解決した。 @ar = split(/,/, $str, -1); ですね。
584 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:48:12 ] print join ',', split /,/, q/a,b,/, -1;
585 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 00:44:11 ] >>566 特にないけど、Perlならそういう面白いインターフェイスが用意されてそうだなと思ったまでで
586 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:06:48 ] 麻雀なのに、娘とか嫁とか家族とかw 乞食は想像を絶するなw
587 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:07:14 ] スマン、誤爆
588 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 09:16:39 ] 色々と妄想させてくれる。 世の中には「義妹が最強だろ」という誤爆レスが元になって作られたゲームとかあるからな。 人間の妄想力ってのは凄いもんだぜ。
589 名前:デフォルトの名無しさん [2008/03/02(日) 10:27:48 ] おにぃちゃん、ヤメテ!
590 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 10:48:55 ] ヘッヘッヘ、いいじゃねぇか ポン ヘッヘッヘ
591 名前:デフォルトの名無しさん [2008/03/02(日) 11:09:57 ] Active Perl 5.10.0 用の DBD-mysql ってどこにあるの?
592 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 11:48:26 ] >589-590 エロゲじゃねーよw
593 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:23:27 ] >>591 cpan.uwinnipeg.ca/PPMPackages/10xx/
594 名前:591 [2008/03/02(日) 21:46:50 ] >>593 ありがとう。無事インストできたよん。
595 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 09:11:40 ] インスト
596 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 09:43:34 ] 泣いても笑っても、お前のまんじゅうは無いよ。
597 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 16:28:09 ] Wiki文法でのテキスト整形で悩んでいます。 改行含めた長い文章が $i に入ってます。 文章中のリンクアンカーに相当する部分はWikipediaなどでお馴染みの [[テキスト]] という感じで書かれています。 これを $i =~ s/\[\[(.+?)\]\]/<a href="$1">$1<\/a>/g; で変換しているのですが、できれば <a href="$1"> の中のほうの$1をURLエンコードして収めたいのです。 URLエンコードのサブスクリプトはこんな感じです。 sub url_enc { local($_) = @_; s/(\W)/'%' . unpack('H2', $1)/eg; s/\s/+/g; $_; } よろしくお願いします。
598 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 16:49:12 ] すみません、補足です。 CGIにはインフォパスか引数で渡します。 <a href="hoge.cgi?$1"> こんな感じで。
599 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 17:31:00 ] サブルーチンに置換部分をまとめて、 $i =~ s/\[\[(.+?)\]\]/&url_enc($1)/eg;
600 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 17:58:47 ] そっか!e修飾子を利用した時は置換部分は関数以外は入れたらダメなんですね。 $i =~ s/\[\[(.+?)\]\]/<a href="&url_enc($1)">$1<\/a>/eg; だとエラーが出るんで何でだろうとずっと思ってたんです。 ありがとうございます。勉強になりました。
601 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 18:25:15 ] >>600 自分で '%' . unpack('H2', $1) なんてのを入れてるじゃん。 sub html_escape { my $str = $_[0]; $str =~ s/&(?!(?:\w+|#(?:[Xx][0-9A-Fa-f]+|[0-9]+));)/&/g; $str =~ s/([\x00-\x09\x0B\x0C\x0E-\x1F"'<>\x7F])/${ \ ord $1 };/g; $str; } sub uri_escape { my $str = $_[0]; $str =~ s/%(?![0-9A-Fa-f][0-9A-Fa-f])/%25/g; $str =~ s/([\x00-\x20"'<>\\^`{|}\x7F-\xFF])/ sprintf '%%%02X', ord $1 /eg; $str; } $i =~ s{ \[\[ (.+?) \]\] } { my($url, $face) = ($1, $1); $url = uri_escape($url); $face = html_escape($face); qq|<a href="$url">$face</a>|; }egx;
602 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 18:40:50 ] >>601 すみません、 実はurl_encは誰かから教えてもらったもので丸写しなんです ^_^ でも今回のことでやっともろもろ判りました。 コード、参考になります(というかありがたくいただきます)。 ありがとうございます。
603 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 05:49:41 ] JavaのプログラムからCGIを実行しようとしたのですが、302エラーが返されます。 何故なんでしょうか?
604 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 10:21:39 ] >>603 302 はエラーじゃないし Perl の話でもない。 www.studyinghttp.net/cgi-bin/rfc.cgi?2616#Sec10.3 CGI: Common Gateway Interface part 13 pc11.2ch.net/test/read.cgi/php/1126436361/
605 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 10:22:39 ] Moved Temporarily
606 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 13:38:15 ] >>604-605 パーミッションの設定をしたら動きました;; お騒がせしました
607 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 15:23:38 ] perlのuntil文っていらないと思うんですけど、皆さんどんなときに使ってますか?
608 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 16:30:42 ] 使わなきゃいいじゃん
609 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:00:16 ] while (! hoge)よりも直感的に書ける場合もある気がする とくに後置したときに英文っぽくておさまりがいいような
610 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:23:51 ] while ( !( ... || ... && ... || ...) ) とかになったらさすがに使うw
611 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:26:43 ] あー、あと成功したら0エラーならエラーの種類が1以上って関数が 成功したらとにかく実行って時とかに == 0 とかやらなくて済むとか。
612 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 18:07:48 ] >>609->>611 なるほど。参考になりました。 untilも使い道はいろいろあるんですね。
613 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 18:32:27 ] 意味的に「〜になるまで続ける」って感じの時も until のがわかりやすいかも
614 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 18:37:39 ] >>613 確かに。これは考えたことなかったな。
615 名前:デフォルトの名無しさん [2008/03/06(木) 02:27:57 ] XSでCライブラリを使ったモジュールを作ったが、 それが$HOME/local/libのライブラリを使っていて CGIにLD_LIBRARY_PATHが設定できないのでモジュールで使っている.soが読めない。 $ENVとuse Envでやったが、無視されるみたいだし 共有サーバでhttpdがsuExecで動いているので.htaccessでSetEnvすることもできない。 DynaLoaderがロードする.soがリンクしているsoのパスを指定できる方法ある?
616 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 12:16:11 ] >>615 ldの-Rオプションでバイナリに埋め込むのはどう?
617 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 19:32:32 ] >>615 前スレの570〜580あたりで書き込みした者ですが、 DynaLoader.pmがLoadするだけならば、 use DynaLoader; @DynaLoader::dl_library_path に、対象のPATHを放り込んでやればLoad出来ます。 その{perl_module}.soがよその(/use/lib,/lib以外の)ライブラリをロードするようにコンパイルされていたら、 多分 use した時点でエラーになります。