1 名前:nobodyさん mailto:sage [2007/09/16(日) 19:49:43 ID:???] Perlのコーディングで困ってる人のスレです。 【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 「コマンドの意味がわかんない」とかはマニュアル見ましょう。 回答者さんは何でも屋じゃありません。 1: 自分はこういう事がしたい。 2: それでこんな風にやってみたが・・・ 3: こんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。 お勧めサイトは >2 以降 前スレ ttp://pc11.2ch.net/test/read.cgi/php/1180492441/ 過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
654 名前:nobodyさん mailto:sage [2007/12/18(火) 10:34:57 ID:???] たとえば、sample.plに、 require('lib/lib.pl'); &dosomething(); と書いておいて、lib/lib.plに、 sub dosomething{ open(FH, '>> baka.log'); print FH time."\n"; close(FH); } とすると、lib/の中にファイルができるのではなく、ひとつ上にできてしまいます。 これをlib/の中に保存したいのですが、ライブラリからの相対パスで保存する方法はないでしょうか。 または絶対パスを使うしかないのでしょうか。 ヒントだけでもお願いします。
655 名前:nobodyさん mailto:sage [2007/12/18(火) 11:18:35 ID:???] >>654 じゃあ、ヒントだけ… つ %INC
656 名前:654 mailto:sage [2007/12/18(火) 16:52:48 ID:???] >>655 ありがとう! こーゆー用途に使うのな。
657 名前:nobodyさん mailto:sage [2007/12/19(水) 01:05:36 ID:???] ハッシュ配列の各要素をリファレンスとして関数の引数に渡したいのですが よくわからなくて試行錯誤の末下のような方法にたどり着きました $AA{'name'} = '1234'; $BB[0]{'name'} = 'abc'; $BB[1]{'name'} = 'ああああ'; $BB[2]{'name'} = '!?'; kansuu( \%AA ); $tmp = \@BB; kansuu( ${\$tmp->[0]} ); kansuu( ${\$tmp->[1]} ); kansuu( ${\$tmp->[2]} ); sub kansuu { my $h = $_[0]; print "$h->{'name'}<br>"; } BBの要素を kansuu() に入れるために もっとスマートな方法(っていうか正しい書式)がありましたら教えていただけないでしょうか?
658 名前:nobodyさん mailto:sage [2007/12/19(水) 01:14:31 ID:???] my %AA = ( name => 1234 ); my @BB = ( {name => 'abc'}, #$BB[0]に無名ハッシュ(リファレンス)をいれる {name => 'ああああ'}, #$BB[1]に〃 {name => '!?'} #$BB[2]に〃 ); kansuu( \%AA ); #\をつけることで%AAのリファレンスがわたる kansuu( $bb[0] ); #$bb[0]の無名ハッシュリファレンスを渡す kansuu( $bb[1] ); kansuu( $bb[2] ); sub kansuu { printf('%s<br>',shift->{name});#ハッシュリファレンスは->をつけて要素を取り出す }
659 名前:nobodyさん mailto:sage [2007/12/19(水) 02:00:39 ID:???] $,@,%,\と(),{},[]と->の組み合わせで大抵何とかなる。 正直スカラーのリファレンスの説明は自身がないけどおよそあってると思う my $scalar = 'abc'; #スカラー my $scalar_ref = \$scalar; #スカラーのリファレンス my $anon_scalar_ref = \do {my $anon;}; #微妙に無名じゃないけど my @array = (1,2,3); #配列 my $array_ref = \@array; #配列のリファレンス my $anon_array_ref = [1,2,3]; #無名配列のリファレンス my %hash = (a=>1,b=>2,c=>3); #ハッシュ my $hash_ref = \%hash; #ハッシュのリファレンス my $anon_hash_ref = {a=>1,b=>2,c=>3}; #無名ハッシュのリファレンス my $slacar_object = bless $scalar_ref => __PACKAGE__; # スカラー使ったオブジェクト my $array_object = bless $array_ref => __PACKAGE__; # 配列使ったオブジェクト my $hash_object = bless $hash_ref => __PACKAGE__; # ハッシュ使ったオブジェクト #素直に取り出せる printf "scalar=%s\n",$scalar; printf "array=%s\n",$array[0]; printf "scalar=%s\n",$hash{a}; #アドレスっぽいのがとれる printf "scalar_ref=%s\n",$scalar_ref; printf "array_ref=%s\n",$array_ref; printf "scalar_ref=%s\n",$hash_ref; #リファレンス先の値書き換えたり取り出したり $$scalar_ref = '書き換えちゃった';printf "scalar=%s\n",$$scalar_ref; $array_ref->[1] = '書き換えちゃった';printf "array=%s\n",$array_ref->[1]; $hash_ref->{b} = '書き換えちゃった';printf "scalar=%s\n",$hash_ref->{b}; #デリファレンスする(copyが作られる) my $scalar2 = ${$scalar_ref}; my @array2 = @{$array_ref}; my %hash2 = %{$hash_ref};
660 名前:nobodyさん mailto:sage [2007/12/19(水) 07:53:49 ID:???] CGI.pmでmetaを出力したいのですがうまくいきません。 ↓これを出力したいのですが・・・ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ttp://www.geocities.co.jp/SiliconValley-Sunnyvale/6128/perl/cgipm.html このページの解説によると、 use CGI; my $q = CGI->new; print $q->start_html( -head=>meta({'http-equiv' => 'Content-Type' -content=>"text/html; charset=$CharSet"} ), このようなコードになるはずなのですが、やってみると Undefined subroutine &main::meta called というエラーがでます。meta()がメインのサブルーチンだと解釈されてるみたいです。
661 名前:660 続き mailto:sage [2007/12/19(水) 07:54:19 ID:???] print $q->start_html( -head=>$q->meta({'http-equiv' => 'Content-Type' -content=>"text/html; charset=$CharSet"} ), とやると一応うまくいくのですが、なぜか <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> このようにもう一つ余計なメタが出てしまいます。どうすればいいのでしょうか? CGI.pmは3..31です。
662 名前:nobodyさん mailto:sage [2007/12/19(水) 10:23:45 ID:???] >>660-661 perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod my $q = CGI->new; $q->charset('UTF-8');
663 名前:660 mailto:sage [2007/12/19(水) 23:37:11 ID:???] >>662 ありがとうございました!
664 名前:657 mailto:sage [2007/12/20(木) 08:31:41 ID:???] >>658-659 ありがとうございます! 超わかりやすくて助かりました 今のプログラムの色んなところがもっと簡潔に書けそうです
665 名前:nobodyさん mailto:sage [2007/12/20(木) 10:28:40 ID:???] > 超わかりやすくて助かりました > 今のプログラムの色んなところがもっと簡潔に書けそうです 本当はわかってないくせに。
666 名前:nobodyさん mailto:sage [2007/12/20(木) 13:33:18 ID:???] >>658-659 ですべてが理解できれば天才
667 名前:nobodyさん mailto:sage [2007/12/20(木) 13:39:25 ID:???] 最低限は書かれてて分かりやすいとは思ったぞ
668 名前:nobodyさん mailto:sage [2007/12/20(木) 16:21:00 ID:???] 読む気もしねぇよ
669 名前:nobodyさん mailto:sage [2007/12/21(金) 21:13:42 ID:???] でもああやって思いつく限りの書き方試して要素やハッシュ値見てればなんとなくでもわかってくるはず。 めんどいけど。
670 名前:nobodyさん mailto:sage [2007/12/22(土) 18:50:11 ID:???] あんな変な列挙を眺めるんじゃなくて、続初めてのPerl読むべきだろ。
671 名前:nobodyさん mailto:sage [2008/01/02(水) 06:47:19 ID:???] perl5.10 に移行した人います?
672 名前:nobodyさん mailto:sage [2008/01/02(水) 20:07:21 ID:???] ノ 依存コードは書いてないけど
673 名前:nobodyさん mailto:sage [2008/01/03(木) 00:16:04 ID:???] ノシ cygwinで5.10入れてみた use 5.10;で書いてみてる
674 名前:nobodyさん mailto:sage [2008/01/05(土) 22:21:41 ID:???] 変数の中身を展開せずに確認したい場合ってどうすればいいんでしょうか? $test = "今日は\n いい天気です $wether"; こんな変数があるとして、$test自体は展開してほしいんですが、 中身の\nや$wetherは展開せずに出力したいのです。
675 名前:nobodyさん mailto:sage [2008/01/05(土) 22:58:36 ID:???] ' ちなみに、weather?
676 名前:nobodyさん mailto:sage [2008/01/06(日) 03:58:05 ID:???] >>674 $testに代入した時点で展開しちゃってるでそ そもそも確認したい意図は何? リファレンスにしてアドレスを確認する手もあるけど
677 名前:674 mailto:sage [2008/01/06(日) 14:08:20 ID:???] うーん、無理みたいですね。諦めます。一応問題は解決しましたので >>675 そうです; >>676 なるほど・・・ 意図は正規表現でゴチャゴチャいじったあとの文字列が どうしてもめちゃくちゃくになってしまうので、変数の位置関係を調べたかったのです。
678 名前:nobodyさん mailto:sage [2008/01/06(日) 16:36:10 ID:???] >>674 はなぜ>>675 の一行目を無視するんだ? それが答えじゃないか。 >>676 はそれもわかってないみたいだが。
679 名前:nobodyさん [2008/01/06(日) 23:12:25 ID:wcb81UNa] $kekka = int(200 * 0.29); print "$kekka"; このような計算をしたら、結果が57になりました。 intって小数点が発生した時に切り落とすはずですよね? えと、なぜこんなことになるのか意味が分からないのですが、 誰かご教授お願いします
680 名前:nobodyさん mailto:sage [2008/01/07(月) 01:59:09 ID:???] >>679 www.tt.rim.or.jp/~rudyard/torii009.html
681 名前:nobodyさん mailto:sage [2008/01/07(月) 11:17:24 ID:???] それ、今じゃ間違いじゃないってのが一般的。 語源の知識としてはありだけど、誤用が定着するなんていくらでもあることだから。 いつもいつも空気読めない人が指摘するよな。
682 名前:nobodyさん mailto:sage [2008/01/07(月) 11:27:36 ID:???] >>679 $kekka = int(((my $n=200 * 0.29)=~/(.*)/)[0]); print "$kekka"; こう書けばOK
683 名前:nobodyさん mailto:sage [2008/01/07(月) 11:29:04 ID:???] >>681 誤用でない方が一般的だとする根拠は?
684 名前:nobodyさん mailto:sage [2008/01/07(月) 11:38:36 ID:???] 回答にはなってないけれど、こちらの環境でもいくつか試してみた ので、その結果を書いておく。 何でこんな風な結果になるのだろうか。私も分からなかった。 $kekka = 200 * 0.29; print "$kekka"; 出力:58 $kekka = 200 * 0.29; $kekka = int($kekka); print "$kekka"; 出力:57 $kekka = int(200 * 0.29); print "$kekka"; 出力:57 $kekka = int(2 * 29); print "$kekka"; 出力:58
685 名前:nobodyさん mailto:sage [2008/01/07(月) 12:30:31 ID:???] 浮動少数の扱いの問題。 use bignum; これで解決。
686 名前:nobodyさん [2008/01/07(月) 21:15:48 ID:XSyaqzwg] >>685 おぉ いきました! 詳しい原因はよくわからないですが、ありがとうございました。
687 名前:nobodyさん mailto:sage [2008/01/07(月) 21:22:49 ID:???] ためしにPerlじゃなくてLispで (* 200 0.29) ってしてみたら57.99999999999999だってさ。機械の計算って難しいことがあるな
688 名前:nobodyさん mailto:sage [2008/01/07(月) 22:41:02 ID:???] 誤差については、がっこで習うものだと思ってたけど、そうでもない?
689 名前:nobodyさん mailto:sage [2008/01/07(月) 22:44:33 ID:???] 俺は習ったけど、もしかしたら教えてないところも少なくないかもしれん
690 名前:nobodyさん mailto:sage [2008/01/07(月) 23:59:36 ID:???] 情報工学を扱う授業でもなきゃ教わらないんじゃね? 少なくとも俺は浮動小数点の丸め誤差については習ったことない。 あと高校の世界史も。
691 名前:nobodyさん mailto:sage [2008/01/08(火) 00:07:25 ID:???] >>683 >>681 じゃないがなんかの辞書に載ってた気がする ソースはない
692 名前:nobodyさん [2008/01/08(火) 00:31:05 ID:k+nta2fc] 丸め誤差の知識はありますけど、 コンピュータの中で200*0.29ってどうやって計算してるか分からない そもそも結果が57.9999・・・・になると言われても、どういう計算をしているのか さっぱりw
693 名前:nobodyさん mailto:sage [2008/01/08(火) 00:34:28 ID:???] しかも (* 20 0.29) これは5.8って表示されるから困るw
694 名前:nobodyさん mailto:sage [2008/01/08(火) 00:38:53 ID:???] 自前のショッピングカートの消費税を int($sum * 0.05) みたいに計算してるんだけど、大丈夫だろうか…
695 名前:nobodyさん mailto:sage [2008/01/08(火) 07:14:24 ID:???] >>694 >>685 にすれば大丈夫かと
696 名前:nobodyさん mailto:sage [2008/01/08(火) 08:15:35 ID:???] 俺は一番最初の質問者ではないが、浮動小数点の丸め誤差については、 wikipediaにも載ってたね。 問題の解決には、 use bignum; つかえばいいわけで、それでいい のは分かるけれど、それとは別の話で、小数を100倍して整数で演算をして、 あとで100で割ったりする方法だったらちゃんとでるから use bignum; しなくてもいいんだよね?
697 名前:nobodyさん mailto:sage [2008/01/08(火) 22:01:08 ID:???] >>696 0.29が有効数字2桁だとあらかじめ分かっているなら100倍すればいいけどなあ。 既知でないときにはuse bignum;じゃないか?
698 名前:nobodyさん mailto:sage [2008/01/09(水) 00:10:32 ID:???] >>697 レスサンクス。 いや、意味の無い部分の考えかなと思ったんだけど、 そっちの方がメモリが少なくて済み、処理が早くなったりするのかなとか 思ったのよね。ま、すごく小さな世界をいっているんだろうけれど。
699 名前:nobodyさん mailto:sage [2008/01/09(水) 01:01:57 ID:???] うーん、俺も難しいことはわからんけど、 俺は細かい実行時間を気にしてミスをするより、コードの可読性を優先したいな。と思った。 大量のデータを扱う人から見ればふざけた態度かもしれないけどね。
700 名前:nobodyさん mailto:sage [2008/01/09(水) 02:01:45 ID:???] LL的には人間にとっての最適化(コードの可読性)のほうが重要だからそれでいいと思うな
701 名前:nobodyさん [2008/01/09(水) 03:08:01 ID:480klIK2] リーダビリティ重要。(高橋メソッド風に)
702 名前:nobodyさん mailto:sage [2008/01/10(木) 23:51:33 ID:???] IPを10進数に変換したものと、 サブネットマスク形式のリストをマッチングさせたいんですが、 どんなループさせればいいですかね? #判定ルーチン内 foreach (@list) { my ($min,$max) = subnetMinMax($_); return ($ip >= $min and $ip <= $max) ? 1 : 0; } としてるんですが、grep等を使ったほうが良いんでしょうか? ループ内でサブルーチン呼ぶのがちょっと気になります。
703 名前:nobodyさん mailto:sage [2008/01/11(金) 00:04:09 ID:???] 訂正orz x: return ($ip >= $min and $ip <= $max) ? 1 : 0; o: return 1 if($ip >= $min and $ip <= $max);
704 名前:nobodyさん mailto:sage [2008/01/11(金) 11:44:26 ID:???] @listの中にマッチするものが複数存在する可能性があって 何にマッチしたか全て取りたいならgrepだけど 有るか無いかだけでいいならループ回して見つけ次第結果返していいんじゃない?
705 名前:nobodyさん mailto:sage [2008/01/11(金) 16:30:20 ID:???] return $ip >= $min and $ip <= $max;
706 名前:nobodyさん mailto:sage [2008/01/11(金) 20:31:41 ID:???] >>704 なるほど。このままにしますありがとうございました。 >>705 そっか、そうですよね。 聞いてみて良かったです。
707 名前:nobodyさん mailto:sage [2008/01/12(土) 13:10:11 ID:???] 「うんこ」を含む行の最後に「出る」と追加することってできますか? 「うんこ」の前後は英数字・日本語交じりで文字数は不定です。 $_ =~ s/(うんこ)/$1でる/; だと、うんこ〜出るの間の文字が文末にきてしまいます。 文末指定は$みたいなので $_ =~ s/(うんこ)/$1でる$/; としてperlを実行させると、エラーなのか、プログラムが終わりません。
708 名前:nobodyさん mailto:sage [2008/01/12(土) 13:13:01 ID:???] if ( $うんこ =~ /うんこ/ ) { $うんこ .= ’でる’ }
709 名前:nobodyさん mailto:sage [2008/01/12(土) 13:38:43 ID:???] 「うんこを含む行」「改行」 ⇒ 「うんこを含む行」「でる」「改行」 if (index($_, 'うんこ') >= 0){ $_=~ s/$/でる/; }
710 名前:707 mailto:sage [2008/01/12(土) 13:54:47 ID:???] >>708 全角を半角にしてやってみたりしましたが、エラーでした。 >>709 できました。ありがとうございます。 ただ、>=0の意味が分かりません。 改行は\nじゃないんですか?
711 名前:nobodyさん mailto:sage [2008/01/12(土) 18:35:26 ID:???] なにこのうんこスレ
712 名前:nobodyさん mailto:sage [2008/01/12(土) 19:18:44 ID:???] >>710 index
713 名前:707 mailto:sage [2008/01/12(土) 22:50:20 ID:???] >>712 すみません、わかりました。ありがとうございました。
714 名前:nobodyさん [2008/01/13(日) 13:16:41 ID:rzzkvCmj] 怠惰が美徳だの エロエロ言語だの 言うけどさ 俺が習ってきた主な4つの言語のなかじゃ 間違いなく一番習得が苦しかった ぞ つまり、学習コストは高い Perlより習得が難しい言語ってあるの? 私見では達人レベルを目指すならC++が全言語のなかで一番習得困難 そこそこのプロレベルを目指すならPerlが一番困難(C++はそこそこのプロならまだ簡単)
715 名前:nobodyさん [2008/01/13(日) 13:17:19 ID:rzzkvCmj] スレ間違えた( ゚д゚ )
716 名前:nobodyさん mailto:sage [2008/01/13(日) 21:52:12 ID:???] 配布用のスクリプトを書く予定なんですが、 変数名のつけ方で悩んでいます。 たとえば、 my $title; my $script_content_title; my $ScriptContentTitle; sub param{} sub parse_URL_encoded_string{} sub ParseURLEncodedString{} 等、色々書き方ありますが 短い方が良いのか、わかりやすい名前が良いのか、 又、大文字、小文字を混ぜて使うべきか、覚えやすい名前にするべきか、 意見ください。 賛否両論あると思いますが、極力万人受けするものを選びたいです。 長文すみません
717 名前:nobodyさん mailto:sage [2008/01/13(日) 21:53:50 ID:???] 配布スクリプトの中身の変数名なんて誰も見ねぇよ
718 名前:nobodyさん mailto:sage [2008/01/13(日) 21:56:06 ID:???] >>717 学習、改造用として配布したいんです。
719 名前:nobodyさん mailto:sage [2008/01/13(日) 22:43:42 ID:???] perldoc perlstyle
720 名前:nobodyさん mailto:sage [2008/01/13(日) 23:03:26 ID:???] 変数や関数の名前の付け方は、どんなプログラムを書こうとしている かというところもあるからな。 例えば、関数名で html_ をつけるとそうでないものとの区別がついて 分かりやすくなるけれど、全部の関数に html_ がついてたら 逆に無意味に長いだけとなる。 ここでアドバイスが欲しかったら、その書こうとしているプログラムや ソースをもう少し具体的にだすとかしないと話は進まないと思う。
721 名前:716 mailto:sage [2008/01/13(日) 23:22:17 ID:???] >>719 ありがとうございます。全部読みました。 基本的にはアンダースコアを使うべきだそうです。 スコープによって使い分けるのが良いみたいですね。 $Global_Data #グローバル $tmp #局所 $LOCK_KIND #定数 >>720 プログラムの種類によって書き方が変わる、変えられるのがperlの利点かもしれませんね。 >全部の関数にhtml_ そういうのはパッケージにまとめればOKですかね。 おかげ様で書き方が頭に浮かんできました。ありがとうございました。
722 名前:nobodyさん mailto:sage [2008/01/14(月) 02:09:11 ID:???] Perlプログラマは"不精"なので面倒なタイピングはしません。 でもPerlプログラマは"傲慢"なので他人のコーディングスタイルを気にしません。 こんなイメージ。
723 名前:nobodyさん mailto:あげ [2008/01/14(月) 02:26:48 ID:???] 怠惰と傲慢と短気だっけなラリーの三原則。 ネーミング重要。(高橋メソッド風に) でも職人芸的なところあるよねネーミングセンスって。 なかなかそこは難しい。
724 名前:nobodyさん mailto:sage [2008/01/14(月) 04:10:53 ID:???] 果たして自閉症の描くイメージとは
725 名前:nobodyさん mailto:sage [2008/01/14(月) 04:15:16 ID:???] >>716 もう解決したみたいだけど、Perlベストプラクティスもおすすめ ダミアン先生の盲信はいけないけど、かなりためになるYo
726 名前:nobodyさん mailto:sage [2008/01/14(月) 17:41:01 ID:???] ダミアン先生はPerl界屈指のハッカーだが、著作物での記述にクセが全くないわけではないからね。 一般論としては、上を目指すならいろんなハッカーのコードや文章にたくさん触れることが必要。 これがなかなか大変だし難しい。 そのためにはネット上のコミュニティーやリアルのイベントにこまめに参加したり ブログを定期的にチェックし続けないといけないから。 そういうことをしてない自称Perl使いが結構俺の周りにはいて、 そういう奴らは我流のあまりエレガントじゃないスタイルから抜け出せないでいる。
727 名前:nobodyさん [2008/01/14(月) 18:57:12 ID:4AKnbZN2] ファイルに入っている文字を出力するつもりなのですが、 メタ字が混ざっていることもあり、ちゃんと出力できません。 あらかじめファイルの中のメタ字に\を振って置くとしても、かなりの手間になりそうですし、 何か効率の良いメタ字対策はないでしょうか?
728 名前:727 [2008/01/14(月) 19:02:23 ID:4AKnbZN2] すみません。微妙に文書が狂っていました。 ファイルに入っている文字からの出力の際の 文字化けする文字の対策をお願いします。
729 名前:716 mailto:sage [2008/01/14(月) 20:00:43 ID:???] >>725-726 オライリーファンの俺には最高の本かもです。 >>727-728 余計な事してるからじゃないですかね? quotemetaなんてのはどうですか? 文字コードなんかも書くと返事もらえるかも。
730 名前:nobodyさん mailto:sage [2008/01/14(月) 20:08:53 ID:???] >>727 情報不足です。 「ファイルに入っている文字」…どんな文字? 文字コードは何? 「出力するつもり」…どこに出力するの? 「メタ字」…具体的にどの文字ですか? 「ちゃんと出力できません」…具体的にどのように出力できないのですか? ありがちなのは、ファイルの中と、コンソールの文字コードの設定が異なっていて、文字化けしたように見えるとか。 メタ文字をいったん解釈してしまっているとか。 ヌル文字とかタブとか垂直タブとかグループセパレータとかasciiの制御コードはそもそも「文字」ではないですし。 「文字」をどう「出力」したいのかにもよります。 コードを示してはどうですか。
731 名前:727 [2008/01/14(月) 20:18:57 ID:4AKnbZN2] $i = 0; while($list = <IN>){ (undef,$name[$i],undef) = split(/:/, $list); $i++; } @name = sort(@name); while($line = <@name>){ print "<option value='$line'>$line</option>"; } えーっと、コードはこのような感じです。 ファイルのDBにアクセスして、その中の一部を取り出しソートしてhtmlで出力するという形です。
732 名前:nobodyさん mailto:sage [2008/01/14(月) 20:21:10 ID:???] メタ文字がhtmlの解釈の問題を引き起こしてるんじゃないよね?
733 名前:nobodyさん mailto:sage [2008/01/14(月) 20:23:30 ID:???] metaタグで宣言している文字コードと異なるとか… html中で使われてる文字コードと出力してる変数の文字コードの不一致とか…
734 名前:727 mailto:sage [2008/01/14(月) 20:30:22 ID:???] >>733 タグで宣言しているコードは関係ないのではと思います。 出力するとき、一部の文字がうまく表示出来ていませんから。
735 名前:727 mailto:sage [2008/01/14(月) 20:32:56 ID:???] 現状としてはファイルの中の「ソ」とかに\を付けていけば表示はうまくいくのですが、 ファイルをその後書き換えたりするとそれも出来なくなるのではないかと思っております。
736 名前:nobodyさん mailto:sage [2008/01/14(月) 20:40:00 ID:???] これか?www.kentweb.jp/pubc/jcode/
737 名前:nobodyさん mailto:sage [2008/01/14(月) 20:46:05 ID:???] >>735 use utf8; binmode STDIN, ':encoding(shiftjis)'; binmode STDOUT, ':encoding(shiftjis)'; # windowsなら shiftjis -> cp932 ↑やってみて ソース中に日本語文字列書くならutf8で保存してね。
738 名前:nobodyさん mailto:sage [2008/01/14(月) 20:54:55 ID:???] あw binmode IN, ':encoding(shiftjis)'; かな?
739 名前:nobodyさん mailto:sage [2008/01/14(月) 20:57:33 ID:???] >>731 DBにアクセスしているのにファイルハンドルから@nameに格納しているとはいかに? @nameへの格納の仕方が心許ないです。せめて以下のようにするとか。 my @name = map { (split(/:/))[1] } <IN>; splitの対象が全角のコロンですが、perlソースと取り扱うデータの文字コードが合っていないと 間違いの元ですよ。 で、optionタグで書き出すべき文字列のリストが@nameに入っていて、それをどうしてグロブ 演算子を使っているのかわかりません。私はこんなこと一度もしたことありませんが…。 ここで、@nameの各要素がいったん解釈されてしまっていて、カタカナのソなどSJISの2バイト目の \x5cが取り除かれてしまっています。単に for (sort @name) { print qq{<option value="$_">$_</option>\n}; } でいいと思うのですが。
740 名前:nobodyさん mailto:sage [2008/01/16(水) 00:34:21 ID:???] CGI::Applicationで index.cgi?rm=<デタラメなキー> のように run_modesで定義されなかったrun_modeを指定するとエラーが発生させられてしまうのですが 未定義の場合デフォルトのrunmodeを起動させる方法は無いでしょうか?
741 名前:nobodyさん mailto:sage [2008/01/16(水) 02:08:57 ID:???] $self->run_modes( AUTOLOAD => \&catch_my_exception, );
742 名前:nobodyさん mailto:sage [2008/01/16(水) 02:17:14 ID:???] >>741 ありがとうございます!試してみます。
743 名前:nobodyさん [2008/01/16(水) 04:59:20 ID:FWbaTTLj] 5.005です。 以下のような、引数が省略可能なサブルーチンがあるとします。 sub Func(;$\@\%) { (省略) } このとき、引数が渡されたのか、それとも省略されたのかを Func内で判断する方法を教えてください。 なお、そのままifに入れると偽となるような値(例えばスカラーの値が0)の場合も、 引数が渡されていると判断します。
744 名前:nobodyさん mailto:sage [2008/01/16(水) 05:29:59 ID:???] >>743 引数の数から判定 sub Func(;$\@\%) { print scalar @_ } Func(); # 0 Func(undef); # 1 Func(1, @hoge); # 2
745 名前:nobodyさん mailto:sage [2008/01/16(水) 05:44:10 ID:???] >744 ありがとうございます。 なるほど、サブルーチンを使う時は常に@_を意識しないとダメだってことですね。
746 名前:nobodyさん mailto:sage [2008/01/16(水) 11:29:46 ID:???] @_ ってカタツムリみたいだよね。 @_ii
747 名前:nobodyさん [2008/01/16(水) 14:19:16 ID:Z4nycbhz] かたつむり大作戦
748 名前:nobodyさん [2008/01/16(水) 20:06:54 ID:L/Qn1HzA] 質問です! 入門書を見ながら「URLにパラメータを加える」というのをやりました。 〜〜/test.cgi?list=man とURLにパラメーターをくっつけ、cgiで &ReadParse( *form ); $sex = $form{ 'list' }; と受け取ったつもりだったのですが、結果をprintしてみると manman と2回表示されてしまいます。これは何が悪いのでしょうか?
749 名前:nobodyさん mailto:sage [2008/01/16(水) 20:30:55 ID:???] いるんだよ、自分で勝手に照会用のコードを切り詰める奴
750 名前:748 mailto:sage [2008/01/16(水) 20:51:36 ID:???] 失礼しました。手当たりしだい試してたら解決しました。 なんだか色々と間違ってたようです。
751 名前:nobodyさん [2008/01/16(水) 22:40:40 ID:QOevDgBW] CGIモジュール等を使わない、 一般的なuriデコードのバグってどんな事ですか? 同じkeyに複数のvalがある場合の対処はしてます。
752 名前:nobodyさん mailto:sage [2008/01/17(木) 00:41:41 ID:???] >>751 区切り文字が & でなく ; のときとか、マルチタイプで送られてきたときとか、XSS対策とかかな?
753 名前:nobodyさん mailto:SAGE [2008/01/17(木) 12:39:49 ID:???] ちょっと考えてみてほしい ドラゴンボールというのは、集めれば願いがかなうアイテムだ それに対して、 ウンコは、いくらドッサリ集めてもウンコにしかならない このように両者は一見似ているようで本質的に異なる
754 名前:nobodyさん mailto:sage [2008/01/17(木) 12:41:44 ID:???] >>751 巨大なクエリーとか、lengthがでたらめとかかな? # httpdの仕様にもよるな