1 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 16:47:06 ] "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 ● 2010/02/19 現在の最新版: 5.10.1 ▼ 前スレ Perlについての質問箱 42箱目 pc12.2ch.net/test/read.cgi/tech/1257139591/ リンク集は >>2-3 Perl 日本語処理の基礎の基礎 >>4 過去スレは >>5-7 あたり
545 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 22:19:50 ] my @pi = map {$_ / 100} (1 .. 8); print "$_, " for (@pi);
546 名前:540 mailto:sage [2010/06/10(木) 23:13:47 ] >>541 、>>544 、>>545 わざわざ理解しやすい回答ありがとうございます 早速スプリクトに組み込んでみます
547 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 00:01:18 ] >>542 その数ならDBに突っ込んでSQLでやる
548 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 00:24:13 ] 合計と平均なら頭から読んで足したり数えたりするだけで いいと思うけど。
549 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 03:47:48 ] >>539 コメントありがとうございます。 問題点は、入力用ファイルの改行コードでした。 改行コードをUnixではなくMacの改行コードにしていたので、 2行が1行と認識されてしまっていたようです。 ずっと正規表現の問題だと思っていたので、コメントのおかげで別の観点で見直すことができました。 素人なのでもう一つ質問させてください。 >$a , $b はつかうな というのは、意味のない変数名を使うのではなく、 $infile,$outputfileなどのように一目で意味のわかる変数名を使いなさいということでしょうか?
550 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 03:51:22 ] >>549 $aと$bはsortの時に使われる。つか、use strictしてるのにmyなしで動いてる時点で「あれ?」ってなったでしょ? perldoc -f sort > global variables $a and $b
551 名前:507 mailto:sage [2010/06/11(金) 06:33:39 ] >>550 丁寧にありがとうございます。 色々調べてやっと仰っていることが理解できた気がします。 やはり、初めてのPerl初版本を読んでいた弊害がありそうです。 でもこのサンプルコードによるPerl入門は素晴らしいですね。 d.hatena.ne.jp/perlcodesample/20091120/1246679588
552 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 18:38:48 ] 指定の処理を行いログを出力するプログラム hoge.plと そのログを読み込み解析し出力する analyst.plを作り、 普段はhoge.plを使いたまにanalyst.plを実行するという事をしてきました。 今回その解析済みログを利用するためにhoge.plの中でanalyst.plを実行させたくなったのですが require('analyst.pl');としたところ"\x{00cd}" does not map to cp932 at analyst.pl line 12. というエラーが大量に出ました。 これは両方のplファイルにuse utf8; binmode STDOUT ":encoding(cp932)";があり analyst.plでutf8からcp932に変換されたものがhoge.plでさらにcp932に変換されているからのようで analyst.pl内のbinmode〜;をコメントアウトするとうまく動くようになりました。 しかしanalyst.plの単独実行時にうまく動かなくなりました。 このような場合どうすれば両立させることができるのでしょうか?お知恵を貸して欲しいです。 This is perl, v5.10.1 built for MSWin32-x64-multi-thread
553 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 19:01:09 ] >>552 ちょっと面倒だけど新たにAnalyst.pmを作成し、そこにanalyst.plの機能を全部放り込んだサブルーチンを作り、 hoge.plとanalyst.plはそれを読み込み実行すれば両立出来るよ。 hoge.plとanalyst.plの二つのファイルだけでは・・・できるのかな?
554 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:02:21 ] >>553 そこまでするならモジュール化すればいいだろw
555 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:06:22 ] 試してないけど ':raw :encoding(cp932)' みたいにレイヤー重ねがけすればとりあえず動くんじゃね
556 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:43:23 ] >>552 requireする前にbinmode STDOUT=>":raw"; あるいはanalyst.pl内のbinmode文をbinmode STDOUT=>":raw:encoding(cp932)";
557 名前:552 mailto:sage [2010/06/15(火) 21:25:50 ] なるほど、:rawを重ねると生データにリセットできるんですね。 requireする前に一行追加することで簡単に実現出来ました。 呼び出し前に:rawにして呼び出し先で:cp932に再セットされるという流れもなんだか良いです。 >>553-556 みなさんレスありがとうございました。
558 名前:552 mailto:sage [2010/06/15(火) 21:54:21 ] このスレ雰囲気良いね
559 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 03:43:58 ] 一気に雰囲気が悪くなった
560 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 05:22:30 ] そんなこというなよ…
561 名前:デフォルトの名無しさん [2010/06/16(水) 17:53:09 ] perlスクリプトファイルのコメント部分だけ取得する良い方法はないでしょうか? 単純に # より前を消すみたいのを自分で作ってたんですが、print '#'; とか、s#a#b#; というのも考えられるなとか、ヒアドキュメント中の # はどうするとか、、、 私の脳みそでは確実に無理なので、なにかないでしょうか?
562 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 19:11:59 ] つ正規表現
563 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 19:59:14 ] m{ hoge # not comment } と m{ hoge # comment }x の区別とか想像しただけで嫌になるよなw
564 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 20:23:53 ] >>561 perltidyとかは?
565 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 20:30:46 ] $_ = '1"##"#a"'; print qq#\# match #, '#', "\n" if /"#a/ && m#[^\#]\##; # こめんと; { #" ですよ} 考えてみようとして例を作っただけでつらくなってきた
566 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 20:42:23 ] PPIとか使ってみれば? 正規表現の中のコメントは対応 できてないみたいだけど、他は結構いけるようだよ。
567 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 23:08:27 ] 正規表現のxオプション使ってる?
568 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 00:40:40 ] >>561 Text::Balanced とかは?
569 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 03:22:58 ] とりあえず#の後に;がない行を抜き出してみて、それでどれくらい引っかかるか見てみれば? 厳密にやろうと思えば何らかのPerlパーサを使わないと、正規表現でちょいちょいやるっていうのは無理だろうな。
570 名前:561 [2010/06/17(木) 10:33:00 ] >>562-569 ありがとうございます。なかなか難しいんですね・・。 気づいたのですが、秀丸とか(ほぼ)ちゃんとコメント色分け出来てますよね。 やっぱり偉大なソフトですね・・。
571 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 11:57:22 ] どの辺までフォローしてるのかしらんけど Regexp::Common::commentとか