1 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:54:12 ] "The duct tape of the Internet" こと、Perlについての質問箱です。 "There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。 CGIについての質問は板違いです。WEBプログラミング板でどうぞ。 CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。 (WEBプログラミング板 pc8.2ch.net/php/ ) CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。 このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 www.perl.org/get.html ● 2006/12/21現在の最新版: 5.8.8 ● 2006/12/21現在の開発版: 5.9.3 前スレ Perlについての質問箱 29箱目 pc11.2ch.net/test/read.cgi/tech/1166708139/ リンク集は>>2-3 過去スレは>>4
635 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 21:31:03 ] DropHandlerや{60254CA5-953B-11CF-8C96-00AA00B8708C}でググるといいと思うよ。
636 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 21:39:21 ] >>635 OS側の設定だったんですね。助かりました。
637 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 16:16:37 ] >>632 mapもgrepもおなじものだが、意味的に条件で抽出のときはgrepを使いたくなるな。 式が偽になったものは返値には残らないので map { $_ % 2 == 0 && $_ * 2 } ( 1,2,3,4,5,6); でもOK
638 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 16:46:07 ] いや、それだと空文字がたくさん残るだろ。 map { $_ % 2 ? () : $_ * 2 } (1,2,3,4,5,6); としないと。
639 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 16:47:21 ] >638 =~ s/空文字/空文字列/;
640 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 00:28:19 ] mapとgrepが同じとな?あなおそろしあ
641 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 01:38:54 ] map !($_&1)&&$_<<1||()=> ( 1,2,3,4,5,6) 配列に 0 が入ってたらどうするんだろ 想定外でどうでもいいのかな? これだと(当たり前だけど)要素の値が 0 の時には戻り値無し。
642 名前:631 mailto:sage [2007/05/20(日) 12:31:03 ] ありがとうございます。 Lispを勉強して、次はPerlにスイッチしたいと思っていて、なるべくLispスタイルで プログラミングできるようにしたいと思っているんですが、二つ以上のリストを元にして 結果を返すような (1 2 3 4 5) (6 7 8 9 10) -> ((1 6) (2 7) (3 8) (4 9) (5 10)) といった処理はどうするのでしょうか?mapの使いかたを見ると使えるのは$_だけみたいなのですが。
643 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 12:40:10 ] 普通にmapでできるだろ map { $a = $_; $b = shift @b; 処理 } @a
644 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 12:43:41 ] どうすれば納得するのか知らんが、 とりあえずリファレンス使わないと、リストのリストとかはできんと思うが。
645 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 14:06:29 ] $,=q/,/;$\=qq/\n/; print @$_ for foo([1 .. 5], [6 .. 10]); sub foo { map [map shift @$_, @_], (1 .. (sort map scalar @$_, @_)[-1]) } こんな感じか。
646 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 14:09:46 ] sub foo { map [map shift @$_, @_], (1 .. (sort {$b <=> $a} map scalar @$_, @_)[0]) } 間違えた。
647 名前:デフォルトの名無しさん [2007/05/20(日) 15:07:14 ] >>642 っ[List::MoreUtils]
648 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 15:27:33 ] ある文字列を一文字単位で全部分解して、配列に格納させたいのですがうまくいきません。 (空白も含みます。) $text = 'aあ かf漢字'; 例えば、上の$textを分解して、 @array = ('a', 'あ', ' ', 'か', 'f', '漢', '字'); のような配列を作りたいのです。 splitを使って @array = split(/[\w\s]/, $text); としたのですが、何も格納されずうまく出来ませんでした。 どのようにすれば出来るでしょうか?
649 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 15:35:50 ] use encoding cp932; # ソースの文字コードにあわせる $text = 'aあ かf漢字'; @array = split(//, $text);
650 名前:648 mailto:sage [2007/05/20(日) 15:47:43 ] >>649 何も指定しないと一文字単位で分解されるんですね。splitは。 その後、 while($text){ push(@array, substr($text,0,1,'')); } といったコードを思いついたのですが、 649さんのコードの方がすっきりしてるのでそちらを使わせていただきます。 ありがとうございました。
651 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 16:32:30 ] >>650 俺は初心者で、この前俺もそういうコード考えて使ってみてわかったんだが、 substrは1バイト単位で長さ見てるけど日本語は2バイトコード使ってたりしてて、 結局その>>650 みたいなコードでひらがなやカタカナや漢字取り出すときにsubstr($text,0,1,'')ってところで2バイト中の1バイトしか取り出せなくて中途半端になるんだよな。 2バイト文字限定なら取り出す長さを2バイトにすれば問題無いし、アルファベットや数字は1バイトで問題無いけど。 >>649 のコードなら、俺は大丈夫なのかどうかは知らないけど、なんとなく大丈夫っぽい感じする。
652 名前:デフォルトの名無しさん [2007/05/20(日) 16:39:13 ] >>651 substrのOFFSETやLENGTHの単位は文字数だから、>>650 でも use encodingで文字コードを適切に指定すれば何の問題もないよ。
653 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 16:59:52 ] >>652 トンクス 参考書見て、substrの説明に「文字数ではなくバイト数で取っていることがわかります。日本語の入った文字では使わないようにしましょう」 ってあったから、substrでは永遠に2バイト文字と1バイト数字アルファベットは同時に処理できないものと思ってました。 use encodingで指定すればsubstrでも2バイト文字部分は長さ1となるんですね。 use encodingでコード指定するのが大切ってことを理解しますた。
654 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 17:20:46 ] その機能入ったのはつい最近(といっても5年前だが)だから、古い本だったら書いてないだろうし、 厚みで値段稼いでるような本なら、そのあたりいい加減でも不思議じゃないな。
655 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 17:45:13 ] >>654 なるほど、確かに初版第1刷が2003年ってなってる。 初心者質問ですが my@b=("$a[1]","$a[2]","$a[3]","$a[4]","$a[5]","$a[6]","$a[7]","$a[8]"); ↑ こういう書き方をもっと短く書けませんか? 既に@aには$a[0]や$a[9]から先にも変数が入ってる状態で、$a[1]〜$a[8]までを@bに入れたいです。 $a[1〜8]みたいな表現が存在するなら表現方法を教えてほしいです。
656 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 17:57:06 ] >655 @a[1..8] で OK。 キーワードはスライス。 ところで、なんで "" で囲ってるの?
657 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 17:58:21 ] 文字列化する必要があるんじゃね? my @b = map "$_", @a[1..8];
658 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 18:14:52 ] >>656 >>657 激しくトンクス! そういえばfor(0..7)とか使ってました。 @a[1..8]という書き方があったとは。
659 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 18:23:29 ] $a @a ^これや^これの名前ってなんだっけ?
660 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 18:39:44 ] 普通にドルとアットでいいんじゃない? なんか$でプレフィクスとか見つけたけど。 @は配列ArrayのAを表し $は・・・なんだっけ?Sからはじまるなんかの単語じゃなかったっけ? %は/の左の丸がキーで、/の右の丸が値を示すんだっけ? なんかそんな感じ。 どうせ声出して読まないし気にするまでも無いような・・・
661 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 18:45:22 ] ファニー文字?
662 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 18:57:19 ] ああ、思い出した。$はスカラーのS。
663 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 18:59:10 ] >>659 ,660,661 sigil だと思う。 sigilsと複数形にすることも多いが
664 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 19:10:35 ] ネットショップなんかで自動監視・購入できるスクリプトが組めるらしいのですが どういったものなんでしょう。 役に立ちそうなサイトがあったら教えてください。
665 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 19:44:38 ] >>663 あーそれそれ。さんくす
666 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 20:34:14 ] なんかPerlスゲー人が書く魔法みたいなコードなんか紹介してください 友達が言ってたんですが他の言語だと20行くらいかかりそうな処理も1行で記述できるくらい魔法ちっくなことができるって聞いたんですが本当ですか?
667 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 20:51:05 ] 本当です すべてが魔法なので紹介しきれません
668 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 21:07:49 ] 少なくともCOBOLで20行文の命令を1行にまとめることはできるよ。
669 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 21:14:04 ] 確かにPerlを使えばどんな複雑な処理でも一行でかけるなw
670 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 21:31:15 ] 何行で書けるとかPerlたん変態っぷりはそんなことじゃないだろ
671 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 21:36:44 ] python見習え
672 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 21:46:12 ] >>667-668 もっとやさしく!! >>669 a + b; b + c; c + d; ... はい1行wwwwwとかは禁止なんです >>670 もっとやらしく!!
673 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 22:03:30 ] >>666 では、とっておきの電卓プログラムを紹介しようか。 C++で書くと、何十ステップも必要だろう。 while(<>){print eval($_)}
674 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 22:23:07 ] >>673 カレントディレクトリ以下のファイルがすべて消えました!><
675 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 22:43:53 ] >>672 きもい
676 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 22:50:56 ] それも計算によって実現してるからな
677 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 22:55:32 ] >>674 がマジなのか気になる。 >>673 をしたらキーボードからどんな文も実行できてしまうよな? >>674 を書いて実行してキーボード触らずにマウスで閉じたら何も起きないよな? 恐怖体験アンビリーバブー
678 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 22:56:20 ] ちょっと安価ミスしたが気にしないでくれorz
679 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 23:18:11 ] 1行で書けるかれしれんが、書く人の労力は20行だよ。
680 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 23:30:26 ] でも短く書く技術は知っておきたいかも。 サブルーチンは、多少汚くても短くまとめたいし。 なんか良いサイト無い?
681 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 23:31:39 ] 結局、正規表現アクロバットきぼんってこと何でしょw
682 名前:クロニクル ◆ob60wHXQlc [2007/05/20(日) 23:32:46 ] VISTAでACTIVE PERLをインストールしたいんですが、 Build 820 setup の CustomsetUP のところでInnstlationErroが出るんです。 初心者なのでわからないことがたくさんあります。 以前XPで何度かインストールしたのですが、VISTAになったとたんできなくて 苦労しております。どうかご教授お願いいたします。
683 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 23:34:48 ] >>680 一子相伝も特殊技術だから。
684 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 23:45:25 ] 正規表現使ってアクロバットするのと、正規表現使わずに少し長いの書くのって、 正規表現使ったほうが早いとかある?
685 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 23:48:10 ] そんなの場合によるとしか言いようがないだろ。
686 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 23:51:35 ] >>680 このスレの前の方だけでもいくつかあると思うよ。 過去ログ辿ればもっとあるし。
687 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 00:12:00 ] 結城浩の『Perlクイズ』の過去ログ漁ってみるとか (結城さんではなく回答者が時々アクロバティック)
688 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 15:57:04 ] >>667 のコメントだけで、後はスルーすれば良かったのにな
689 名前:8 [2007/05/21(月) 16:50:18 ] CGIを自由に使えるようになりたくて独学で勉強しようとしたのですがCGIはPERL 記述?だからと思いPERLの詳しくなればわかると思いこの板にきました。 PERLに強くなるにはなにを学べばいいですか?ラクダ本というのがいいとどっかで 見たのですが間違いないですか? そもそもCGIを自由に使えるようになるのはPERLを詳しくなっても意味ないですか? CGIを自由に扱えるようになりたいので勉強の仕方わかる方お願いします。
690 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 16:54:26 ] 日本語がお上手ですね!
691 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 16:57:15 ] >>1 嫁 > CGIについての質問は板違いです。WEBプログラミング板でどうぞ。 > CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。 > (WEBプログラミング板 pc8.2ch.net/php/ )
692 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 18:50:54 ] >>691 向こうでも相手にされていない件についてw
693 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:01:22 ] >689 かわいそうだからマヂレスしてあげるよ 勉強しなほうが身のため
694 名前:8 [2007/05/21(月) 19:01:30 ] 気長に待ちますよ^^
695 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:01:48 ] 相手にできる最低レベルってのはあるからな
696 名前:8 [2007/05/21(月) 19:02:41 ] 勉強しなほうが身のため なぜ!?
697 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:03:45 ] 日本語でおk
698 名前:8 [2007/05/21(月) 19:07:37 ] 相手にできる最低レベルってのはあるからな 悲しいこと言うなぁ・・
699 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:08:32 ] しゃぶれよ
700 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:11:06 ] とりあえず句読点を勉強しる!
701 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:37:26 ] こういう低レベルな質問はwebprogでやれよ
702 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:39:59 ] お前が >>8 氏でないことだけは確かだ。名前欄の詐称を止めろ CGI を覚えるより何より、ここの使い方をまず真鍋
703 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:50:23 ] そして>699
704 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 21:19:43 ] >>689 マジレスするのもどうかと思うが、 CGIを勉強したいならラクダ本よりネズミ本がオヌヌメ。 Perlをきちんと習得したいなら、ラクダ本よりリャマ本をまず嫁。 リャマ→ラクダ→ネズミの順で読むといい。 後はWebProg板逝け。
705 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 21:23:45 ] 逝く前にしゃぶれよ
706 名前:8 [2007/05/21(月) 21:24:52 ] ここは恐いインターネッツですね
707 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 21:38:57 ] リャマの次にラクダ読んだら死ぬって タダで読めるPerl本 ttp://www.perl.org/books/library.html ネズミ(初版) ttp://www.oreilly.com/openbook/cgi/ ただリャマだけは小遣い溜めてでも買うべきだと思うんです
708 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 23:06:21 ] 個人的にはリャマの次にCookbookでもいいと思う。 ラクダも読み物として面白いけど、Cookbookのほうが実践的なテクニックを身に付けられるんでないかな。
709 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 23:57:50 ] CookbookもいいけどPBPも読んだほうがいいと思う なんつーか、その、K○NTクローンが増えても困るっつーか
710 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 00:20:38 ] 中途半端な伏字を使うやつは大抵頭が悪い
711 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 00:38:13 ] やっぱ王道は ○ャ○から入って、○○○と○○○○○○○○を併用さ。 ラクダ?○○○○○○c で十分 …中途半端じゃない伏せ字も頭悪い。
712 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 00:52:26 ] Perl Hacksでハァハァする
713 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 00:56:24 ] >>711 > ○ャ○から入って、○○○と○○○○○○○○を併用さ。 ジャバ、コボル、N88BASIC? > ラクダ?○○○○○○c で十分 わがんね。 本題のほうは「なんでバレバレの伏せ字を使う人がいるのか」が昔から不思議。
714 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 01:04:42 ] perldoc
715 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 01:08:17 ] >>713 あえて理由付けするなら、検索に引っかからないため。 まぁ、やってる方の心理としては○○だと思うがw
716 名前:713 mailto:sage [2007/05/22(火) 01:20:11 ] >>714 ボケが思いつかなくて「わがんね」でした。手間をかけさせてごめんなさい。 >>715 うーん、検索ですか。なるほど。 でも、△△△にする○○の大半は××なだけなんでしょうね。
717 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 01:51:29 ] ○○○○、○○○○○○○○。
718 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 02:37:09 ] はじめまして。最近Perlを使い始めた初心者です。 useを使用し、下位ディレクトリにあるモジュールを読み込むには use ディレクトリ名::モジュール名; なのはどの初級者本にも書いてあるのですが、 上位ディレクトリにあるモジュールの読み込み方が分かりません。 パスはどう書けばよろしいのでしょうか?
719 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 03:48:18 ] use lib
720 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 07:22:32 ] >>710 十代後半の女オタクの馴れ合いみたいで気持ち悪いよね。
721 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 08:20:44 ] ○まん○
722 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 13:39:11 ] ○ま○こ
723 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 15:24:14 ] ○まんこ
724 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 15:43:31 ] 8まんこ
725 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 15:58:39 ] レベルの低い会話はwebprogでやれ
726 名前:デフォルトの名無しさん [2007/05/22(火) 16:30:10 ] >>719 ありがとうございました。できました。
727 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 18:07:33 ] >>725 爆笑
728 名前:デフォルトの名無しさん [2007/05/22(火) 18:08:03 ] cgiでPOSTされたデータを標準入力から一度取得した後 同じプログラム内で再度、標準入力から取得することは可能ですか? 既存のプログラムに、入力チェックを追加したいのですが、2回目はデータが空になります(当たり前? 一応、seekしてみたのですが、うまく戻りそうにありません バカな質問している気がしていますが、「そんなことできるワケねぇだろ、バカ」でも良いのでアドバイス下さい
729 名前:デフォルトの名無しさん [2007/05/22(火) 18:11:19 ] ワークの変数にとっといたらいいんじゃないの?
730 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 18:23:30 ] >>728 >>1 嫁
731 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 18:25:33 ] 標準入力がSEEKで戻れたらすごいな 過去に戻れるなんて素敵だぜ
732 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 18:26:16 ] なるほど、WEBプログラミング板で聞くのが良かった内容でしたか すみませんでした そちらで質問してみます
733 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 18:41:44 ] >>731 このコメントだけで十分な説明になってるな
734 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 19:03:04 ] CPAN探せばありそうだが普通に変数に入れといたほうが楽だろうな
735 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 20:34:55 ] リャマ本なんであんなに高いの?