Perlについての質問箱 43箱目at TECH
Perlについての質問箱 43箱目 - 暇つぶし2ch551:507
10/06/11 06:33:39
>>550
丁寧にありがとうございます。
色々調べてやっと仰っていることが理解できた気がします。
やはり、初めてのPerl初版本を読んでいた弊害がありそうです。

でもこのサンプルコードによるPerl入門は素晴らしいですね。
URLリンク(d.hatena.ne.jp)

552:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/15 19:01:09
>>552
ちょっと面倒だけど新たにAnalyst.pmを作成し、そこにanalyst.plの機能を全部放り込んだサブルーチンを作り、
hoge.plとanalyst.plはそれを読み込み実行すれば両立出来るよ。

hoge.plとanalyst.plの二つのファイルだけでは・・・できるのかな?

554:デフォルトの名無しさん
10/06/15 20:02:21
>>553
そこまでするならモジュール化すればいいだろw

555:デフォルトの名無しさん
10/06/15 20:06:22
試してないけど ':raw :encoding(cp932)' みたいにレイヤー重ねがけすればとりあえず動くんじゃね

556:デフォルトの名無しさん
10/06/15 20:43:23
>>552
requireする前にbinmode STDOUT=>":raw";
あるいはanalyst.pl内のbinmode文をbinmode STDOUT=>":raw:encoding(cp932)";

557:552
10/06/15 21:25:50
なるほど、:rawを重ねると生データにリセットできるんですね。
requireする前に一行追加することで簡単に実現出来ました。
呼び出し前に:rawにして呼び出し先で:cp932に再セットされるという流れもなんだか良いです。

>>553-556
みなさんレスありがとうございました。

558:552
10/06/15 21:54:21
このスレ雰囲気良いね

559:デフォルトの名無しさん
10/06/16 03:43:58
一気に雰囲気が悪くなった

560:デフォルトの名無しさん
10/06/16 05:22:30
そんなこというなよ…

561:デフォルトの名無しさん
10/06/16 17:53:09
perlスクリプトファイルのコメント部分だけ取得する良い方法はないでしょうか?

単純に # より前を消すみたいのを自分で作ってたんですが、print '#'; とか、s#a#b#;
というのも考えられるなとか、ヒアドキュメント中の # はどうするとか、、、

私の脳みそでは確実に無理なので、なにかないでしょうか?

562:デフォルトの名無しさん
10/06/16 19:11:59
つ正規表現

563:デフォルトの名無しさん
10/06/16 19:59:14
m{
hoge # not comment
}



m{
hoge # comment
}x

の区別とか想像しただけで嫌になるよなw

564:デフォルトの名無しさん
10/06/16 20:23:53
>>561
perltidyとかは?

565:デフォルトの名無しさん
10/06/16 20:30:46
$_ = '1"##"#a"';
print qq#\# match #, '#', "\n" if /"#a/ && m#[^\#]\##; # こめんと; { #" ですよ}

考えてみようとして例を作っただけでつらくなってきた

566:デフォルトの名無しさん
10/06/16 20:42:23
PPIとか使ってみれば? 正規表現の中のコメントは対応
できてないみたいだけど、他は結構いけるようだよ。

567:デフォルトの名無しさん
10/06/16 23:08:27
正規表現のxオプション使ってる?

568:デフォルトの名無しさん
10/06/17 00:40:40
>>561
Text::Balanced とかは?

569:デフォルトの名無しさん
10/06/17 03:22:58
とりあえず#の後に;がない行を抜き出してみて、それでどれくらい引っかかるか見てみれば?
厳密にやろうと思えば何らかのPerlパーサを使わないと、正規表現でちょいちょいやるっていうのは無理だろうな。

570:561
10/06/17 10:33:00
>>562-569
ありがとうございます。なかなか難しいんですね・・。

気づいたのですが、秀丸とか(ほぼ)ちゃんとコメント色分け出来てますよね。
やっぱり偉大なソフトですね・・。

571:デフォルトの名無しさん
10/06/17 11:57:22
どの辺までフォローしてるのかしらんけど
Regexp::Common::commentとか


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch