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 あたり
784 名前:デフォルトの名無しさん [2009/10/09(金) 08:52:12 ] >>782 普通に代入じゃだめなのん?
785 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 09:14:52 ] >>774 そういうシステムならcryptもsha512対応してると思うので そっち使えばいいと思う。同じライブラリ呼ぶので確実な 筈だよ。 print crypt('password', '$6$salt');
786 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 14:08:33 ] >>774 車道クラックか? >>777 解決したならそれを書くのが筋。HTTPレスポンスのことならHTTPヘッダの Content-Length: 行で取れるよな。 >>782 スカラ型の内部値を変えたいのか?質問の意図がよくわからん。 数値にしたけりゃ $foo += 0; 文字列にしたけりゃ $foo .= ''; 内部的にリファレンスとか整数型にしたいとかだったら簡単な方法は知らん。
787 名前:774 mailto:sage [2009/10/09(金) 17:07:06 ] >>785 普通にcryptで出来るんですね・・・ありがとうございました。 >>781 >>786 趣味で自宅サーバーをやっているのですが Perlからsystem関数でuseraddを使うためです。 誤解を招く質問をしてしまい申し訳ありません。
788 名前:777 mailto:sage [2009/10/10(土) 03:46:06 ] >786 おっしゃる通り、HTTPレスポンスから取得出来ました。 Perlの質問ではありませんでした…
789 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 01:53:02 ] 自己解決しましたっつーのは自分が苦労して答えを導き出せたから 掲示板に答えが書かれてしまうと自分の苦労の価値が下がってしまうから それを避けるための自慰行為。 「Webリソース」とか書くようなバ力は788なんかじゃなくてwcとかで解決したつもりだろ。
790 名前:デフォルトの名無しさん [2009/10/11(日) 03:25:57 ] >>787 お陰さまで私も勉強になりました。 今時のシステムはパスワード暗号化にsha512使ってるなんて 知りませんでしたから。 うちのシステムは何を使ってるんだろ?
791 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 20:13:01 ] gzファイルをgzopenを使って読み込みこむことはできたんですが 日本語が文字化けしてしまいます 普通のtxtファイルなどは日本語でも文字化けしません どうしたらいいんでしょうか
792 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 20:20:33 ] >>791 使うな。
793 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 20:25:11 ] gzopenを使うなってことですか?
794 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 20:54:51 ] perlを使うな
795 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 21:03:41 ] perlだとできないんですか? それじゃphpでやってみます・・
796 名前:デフォルトの名無しさん [2009/10/11(日) 23:57:04 ] 連想配列について質問です。 たとえばkeysでとりだしたハッシュの順序は一定ではないそうですが、 何回もperl *.plで実行しても同じ順序でキーが取り出されます。 ハッシュの順序はOS依存なんですか?それともperlのバージョン依存なんですか? 同じ環境のもとで同じプログラムにした場合はkeysでとりだされるキーも同じ順序になるのですか?
797 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:12:59 ] ハッシュ依存じゃないの?
798 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:17:12 ] >一定ではないそうですが これは誰から聞いたの?
799 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:35:34 ] 別に乱数は使ってないよ
800 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:51:45 ] 一定ではないというのは環境によるんだろうが ハッシュに順序の保障を求めるべきではないとは思う 順序の保障が欲しければリストを利用/併用すべきだろうな
801 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:24:16 ] perlのバージョン依存。 perl5.10.0のperldoc -f keysでは、 =========== 超訳。 perl5.8.1までは、セキュリティー上の理由から、 keysはプログラムを実行する度に違う順序で取り出されてた。 (順番自体は見た目上ランダムに決定されてる。ただし、 同一プロセス内で、hashに変更が無いならeach, valuesでも keysと同じ順である事は保証される。) =========== 暗に「より新しいperlではkeysはhashに変更が無いなら プログラムを複数回実行しても同じ順に取り出される。」 と言ってはいるが、それをkeysのperldocでは明文化は してない。 ここまで調べて面倒になった。 俺も>>800 氏と同じ見解だし。
802 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:32:14 ] うそっ わざわざランダムにしてたんだ for (keys っていう処理はするけど、大抵はsortとセットだから気にしたこともなかった
803 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 02:52:49 ] >>801 逆だ。5.8.0までは特定の順序で取り出されていたのを、 5.8.1以降で変わるようにしたんだ。 perldoc.perl.org/functions/keys.html > Since Perl 5.8.1 the ordering is different even between different runs of Perl > for security reasons (see "Algorithmic Complexity Attacks" in perlsec). perldoc.perl.org/perlsec.html#Algorithmic-Complexity-Attacks perldoc.jp/docs/perl/5.10.0/perlsec.pod
804 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 03:59:09 ] セキュリティが理由なら、止めてしまう訳ないしな
805 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 05:43:17 ] 質問です。サブルーチンの途中でreturnせずに戻り値を返すことは可能でしょうか? 長文処理の自作モジュールに引数としてファイル名を渡し、 サブルーチン内でopen、while(各行処理)、closeまで行なっています。 行数が数千行になるので各行で処理を終えたい(@本文のようなリストは作りたくない)のです。 現在サブルーチン内で各行をprintしていますが、どうもスマートではないと思い質問しました。 いまの状態を簡易に書くとこんな感じです。 (呼び出し側) $foo->get('file') (package foo内のサブルーチン) sub get { my $self = shift; my $file = shift; open my $in, "< $file" or die($!); while (<$in>) { #ここで各行を処理してprint } close $in; return 1; } 素直に呼び出し側でファイルを開いて行単位でサブルーチンを呼ぶべきかとも思うのですが、 それもなんかスマートでない気がしてモヤモヤしています。よろしければ方向性だけでも示唆ください。
806 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 06:03:32 ] コルーチン