1 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 21:17:36 ] "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/02/09 現在の最新版: 5.10.0 ▼ 前スレ Perlについての質問箱 38箱目 pc11.2ch.net/test/read.cgi/tech/1221967332/ リンク集は >>2-3 Perl 日本語処理の基礎の基礎 >>4 過去スレは >>5-6 あたり
2 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 21:18:35 ] [プログラミング自体の経験が無い奴はまずココを読め] Perl プログラミング講座: ttp://www.site-cooler.com/kwl/perl/ [本] リャマ: ttp://www.oreilly.co.jp/books/4873111269/ 駱駝: ttp://www.oreilly.co.jp/books/4873110963/ Effective Perl: ttp://www.ascii.co.jp/books/books/detail/4-7561-3057-7.shtml (修正) クックブック: ttp://www.oreilly.co.jp/books/4873112028/ Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/ Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/ [オンラインマニュアル] 最新のドキュメント: ttp://search.cpan.org/dist/perl/ perl5.8.x のドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/ perl5.005_03 のドキュメント: ttp://www.kt.rim.or.jp/~kbk/perl5.005/ 日本語ドキュメント検索: ttp://www.cpan.jp/search.cgi (停止中) perldoc.jp: ttp://www.perldoc.jp/ perldoc.com: ttp://www.perldoc.com/
3 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 21:19:37 ] [モジュール] CPAN.com: ttp://search.cpan.org/ 河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/ [テクニック] Perl メモ: ttp://www.din.or.jp/~ohzaki/perl.htm Perl のページ: ttp://homepage1.nifty.com/nomenclator/perl/ Perl の小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm [Perl 5.8 Unicodeメモ] ttp://www.rwds.net/kuroita/program/Perl_unicode.html (修正) ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
4 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 21:20:36 ] # [Perl 日本語処理の基礎の基礎] # このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。 # このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。 # 入出力ともシフト JIS 形式のファイルまたは DOS 窓を想定しています。 # まず、以下の行を先頭に入れて下さい。 use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; # ※1 use Encode; # 次に、あなたが実行したい処理の内容を入れて下さい。 $file = 'C:/なんたら/かんたら.txt'; open my $fh, '<', encode("cp932", $file) or die $! ; # ※2 print <$fh>; # 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう # おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。 # 【注】※1. の行を入れると、DOS 窓への日本語出力は簡便になりますが、 # ソースファイル名に非 ANSI 文字が含まれる場合に die 文の出力が失敗します。 # ※2. OS に渡す文字列(ファイル名,dos コマンドのオプションなど)は、 # この例のように cp932 でエンコードする必要があります。
5 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 21:21:35 ] [過去スレ1] 1 pc.2ch.net/tech/kako/1017/10177/1017736187.html 2 pc3.2ch.net/tech/kako/1033/10336/1033688230.html 3 pc2.2ch.net/tech/kako/1041/10412/1041205885.html 4 pc2.2ch.net/tech/kako/1048/10485/1048519394.html 5 pc5.2ch.net/tech/kako/1053/10530/1053053082.html 6 pc5.2ch.net/tech/kako/1060/10606/1060689008.html 7 pc2.2ch.net/test/read.cgi/tech/1068051036/ (事故により消滅) 8 pc2.2ch.net/test/read.cgi/tech/1074151549/ (事故により消滅) 9 pc5.2ch.net/test/read.cgi/tech/1079114157/ 10 pc5.2ch.net/test/read.cgi/tech/1085564875/ 11 pc5.2ch.net/test/read.cgi/tech/1090889189/ 12 pc5.2ch.net/test/read.cgi/tech/1094579428/ 13 pc5.2ch.net/test/read.cgi/tech/1097851764/ 14 pc5.2ch.net/test/read.cgi/tech/1101649274/ 15 pc5.2ch.net/test/read.cgi/tech/1105953092/ 16 pc8.2ch.net/test/read.cgi/tech/1111034732/ 17 pc8.2ch.net/test/read.cgi/tech/1117870308/ 18 pc8.2ch.net/test/read.cgi/tech/1121804136/ 19 pc8.2ch.net/test/read.cgi/tech/1126977805/ 20 pc8.2ch.net/test/read.cgi/tech/1131286411/
6 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 21:23:01 ] [過去スレ2] 21 pc8.2ch.net/test/read.cgi/tech/1134327348/ 22 pc8.2ch.net/test/read.cgi/tech/1138519327/ 23 pc8.2ch.net/test/read.cgi/tech/1141742901/ 24 pc8.2ch.net/test/read.cgi/tech/1146022352/ 25 pc8.2ch.net/test/read.cgi/tech/1149259409/ 26 pc8.2ch.net/test/read.cgi/tech/1153412251/ 27 pc8.2ch.net/test/read.cgi/tech/1157874614/ 28 pc8.2ch.net/test/read.cgi/tech/1162273941/ 29 pc11.2ch.net/test/read.cgi/tech/1166708139/ 30 pc11.2ch.net/test/read.cgi/tech/1173880452/ 31 pc11.2ch.net/test/read.cgi/tech/1181500187/ 32 pc11.2ch.net/test/read.cgi/tech/1186995713/ 33 pc11.2ch.net/test/read.cgi/tech/1192463997/ 34 pc11.2ch.net/test/read.cgi/tech/1199977642/ 35 pc11.2ch.net/test/read.cgi/tech/1208674881/ 36 pc11.2ch.net/test/read.cgi/tech/1215569470/ 37 pc11.2ch.net/test/read.cgi/tech/1218449440/ 38 pc11.2ch.net/test/read.cgi/tech/1221967332/
7 名前:1 [2009/02/09(月) 21:24:29 ] 遅らせながら無いと寂しいので立てました。
8 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 21:29:52 ] 1おつ
9 名前:デフォルトの名無しさん [2009/02/10(火) 16:19:34 ] 下記のような配列を値として持つハッシュがある時 %hoge = { "A" => [ 100, 300, 800 ], "B" => [ 150, 50, 320 ], "C" => [ 160, 220, 500 ] }; 配列n番目の値をソートしてハッシュからKey値を取り出したい。 たとえば、配列2番目(配列[1])の昇順に、ハッシュKeyを "B", "C", "A" の順番に取り出す、ってなことをやりたい場合 どういうコーディングをすればいいのでしょうか? よろしくお願いいたします。
10 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 20:33:01 ] >>9 sort命令使えば一行でできるよ。 my @sortedkeys = sort { /* ここに配列の二番目を比較する方法を書く */ } keys(%hoge);
11 名前:デフォルトの名無しさん [2009/02/10(火) 21:40:03 ] >>10 その配列の二番目を比較する方法の書き方を知りたいっていうのが質問の主旨なんじゃ・・・
12 名前:デフォルトの名無しさん [2009/02/10(火) 21:51:32 ] $hoge{$a}[1] <=> $hoge{$b}[1]
13 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 01:45:35 ] 糞スレ立てんな、ほげ
14 名前:デフォルトの名無しさん [2009/02/11(水) 12:57:48 ] 調べてもよくわからなかったので質問です。 perlを用いてexcelデータから行、列ごとにデータを取りこみ、計算処理した後データをファイルに出力することは可能ですか?
15 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 12:59:50 ] Yes, we can CPANで探したらそれっぽいモジュールがあると思うよ
16 名前:デフォルトの名無しさん [2009/02/11(水) 13:13:05 ] >>15 即レスありがとうございます。 ちょっと自分で調べてみますね
17 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 09:54:53 ] ブックマークや直接入力したときでも、直前のURLを取得するには どうしたらよいでしょうか?
18 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 10:18:54 ] >>17 △▲ WebProg 初心者の質問 Part18 ▼▽ pc11.2ch.net/test/read.cgi/php/1219842559/
19 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 10:21:31 ] >>18 誘導ありがとうございます 行ってきます
20 名前:デフォルトの名無しさん [2009/02/12(木) 15:40:13 ] Catalyst-Plugin-FormValidator-0.02 で困っています。 全てのエラーチェックをエラーを表示するように設定しているのですが、 エラー項目が出力されず、かといって先に進めません。 エラーチェックは if(not $result->has_error){ $c->stash->{template} = "form/cfm"; $c->detach("cfm", $item_id); のようにして、エラーがなければ次へ行っているのですが$result->has_errorはなぜか真です。 どこがエラーしたか分かる方法とかありませんか? すみませんがよろしくお願いします。
21 名前:デフォルトの名無しさん [2009/02/12(木) 15:45:14 ] name属性のヴァリデート > name => [qw/NOT_BLANK/, [qw/LENGTH 0 20/] ], を外したら正常動作しました。不思議なのは、ブランクにすると エラーが出ますし値を埋めても正常動作しない点です。 どなたか助けてください。
22 名前:デフォルトの名無しさん [2009/02/12(木) 15:58:39 ] $result->invalidで調べると、間違ってもないのに nameがinvalidになってます。何故なんでしょう・・・。
23 名前:デフォルトの名無しさん [2009/02/12(木) 16:00:28 ] > name => [qw/NOT_BLANK/, [qw/LENGTH 0 20/] ], の20を40にすると動きました。お騒がせしました。急いでいたので荒らし気味になってスマソ。
24 名前:デフォルトの名無しさん [2009/02/12(木) 18:20:56 ] 7文字で3x7=21でオーバーしてたのね・・・・。 しかも半角文字もUTF-8扱いで困った。
25 名前:デフォルトの名無しさん mailto:sage, [2009/02/13(金) 02:00:09 ] 以前、perlに詳しい人にソースを見てもらったときに 「もっと短くできる。とにかくperlは文字量、行数を節約して書くものだ」と言われました。 有名なperlの参考書にもそう書いてあります。 とにかくあらゆるテクニックを駆使して短く書くのがperlの美学のように書いてあります。 私は、他の言語では行数にこだわらず可読性を重視してソースを記述していました。 今、perlでやや大きめのプログラム(個人で使うツール)を作ろうとしています。 テクニックや行数圧縮にこだわらず自分が保守しやすい読みやすいコードを書きたいと 思っていますが、それはperlでは許されないのでしょうか。
26 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 02:18:43 ] あまりにトリッキーなのはあれだけど 基本的にはシンプルに書けるなら 短い方がわかりやすいものだと個人的には思っている
27 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 02:25:18 ] 誰が許さないんですか? 言語仕様が許さないんならともかく、 書けるんなら自分が書きたいように書けばいいじゃないですか。 There's more than one way to do it っていう言葉もありますよ。
28 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 02:28:18 ] >>25 お好きにどうぞ
29 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 10:11:00 ] 「 可 読 性 」 は 禁 句 このスレの掟。
30 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 16:53:34 ] >>25 許しまへんでー
31 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 16:58:26 ] ひとつの事をするのにいくつものやり方があるのがPerlの哲学 自分の好きなように書けばおk
32 名前:デフォルトの名無しさん [2009/02/13(金) 17:31:37 ] 長く書いても短く書いてもどっちでもいいけど、 abc => "cde" 1 while or die $flag and $_=$flag /abc/ and 処理 /cdf/ and 処理 /ghi/ and 処理 $name->firstname->camel->output 辺りは知っといて欲しい。
33 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 19:49:49 ] perlは簡潔に書いたときに可読性が増すように設計された言語だと思う。 ほかの言語だと、したい処理を表現するのに余計なことを書き込まなくてはいけない。 その余計なことはプログラムの流れにとって不自然なので注釈が必要になる。 25はほかの言語の仕様に毒されていてプログラムに無駄が多いんだろうね。 perlが可読性に乏しいと主張する人は単にperlについての知識が乏しいだけだ。
34 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 21:22:44 ] Perlをよく知ってる人はより完結に書けるけど、あまり知らなくても 知ってる知識だけでプログラムが出来ちゃうところがPerlのいいところだと思う
35 名前:デフォルトの名無しさん [2009/02/13(金) 21:28:43 ] でもuse strictしてないのとか、goto使ってるのとか、 ファイル1枚で絵巻物みたいに長いのは勘弁してください。
36 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 12:14:44 ] Active perl にてwperlを使用してコマンドプロンプトを開かないようにしたいのですが ソース内でシステムコマンド(たとえば`tasklist`とか)を使うとプロンプトが一瞬開きます。 これを開かないようにする方法ってありますか?
37 名前:9 mailto:sage [2009/02/15(日) 00:40:34 ] >>10 >>12 ずいぶん亀になってしまいましたが・・・ ありがとうございます。 おかげさまでうまくいったデス。
38 名前:デフォルトの名無しさん [2009/02/15(日) 05:33:13 ] Perl で、バイナリーデータを検索するにはどうしてますか? 1Mぐらいのデータを読んで、特定のデータを検索するのですが、 最初、index を使っていたら、これは、\r\nを1文字と解釈するようで、 位置がずれてしまいます。 代わりになる関数を探したけど、見つからないです。
39 名前:デフォルトの名無しさん [2009/02/15(日) 08:14:08 ] >>38 Windowsで使ってるでしょ? 特殊変数の$/に「\n」を代入してから検索してみ?
40 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 12:01:37 ] >>38 バイナリを扱うなら \r や \n といった論理的な表現を使わず \x0D や \x0A を使え。 print index join('', map chr, 0..31), "\x0A"; # 10 www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
41 名前:デフォルトの名無しさん [2009/02/15(日) 12:08:27 ] >>40 1行目は重箱の隅で本件とは関係なし。 2行目はなんなの? $/ = "\n"; print index($a,$b); で済む問題。
42 名前:デフォルトの名無しさん [2009/02/15(日) 13:07:18 ] Perl始めて数日の初心者です ActivePerlでWindowsでやっているのですが、Webで見つけたサンプルが use strict; use warnings; use HTML::ExtractContent; use LWP::UserAgent; となっているのですが、モジュールのインストールの方法がまったくわかりません。 HTML::ExtractContentというのはsearch.cpan.org/dist/HTML-ExtractContent/ ここからダウンロードできたのですが、その先をどうしたらよいのでしょうか LWPというのはとりあえずppmからインストールできました
43 名前:デフォルトの名無しさん [2009/02/15(日) 13:08:54 ] >>42 >su >password: ******** > cpan : : [1]cpan>install HTML::ExtractContent おしまい。
44 名前:42 [2009/02/15(日) 14:45:18 ] コマンドプロンプトを開いて install HTML::ExtractContent と入力しエンターを押すとたくさんズラーっとでてきて最終的に NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code '0xff' Stop. TARAO/HTML-ExtractContent-0.05.tar.gz nmake test -- NOT OK //hint// to see the cpan-testers results for installing this module, try: reports TARAO/HTML-ExtractContent-0.05.tar.gz Running make install make test had returned bad status, won't install without force Failed during this command: ROBIN/Want-0.18.tar.gz : make NO RCLAMP/Class-Accessor-Lvalue-0.11.tar.gz : make_test NO TARAO/HTML-ExtractContent-0.05.tar.gz : make_test NO cpan > と表示されました。 インストールが完了したと思ったのでサンプルプログラムa.plを実行すると C:\Documents and Settings\SX3WX06MA\デスクトップ>perl a.pl Can't locate HTML/ExtractContent.pm in @INC (@INC contains: C:/Perl/site/lib C:/ Perl/lib .) at a.pl line 3. BEGIN failed--compilation aborted at a.pl line 3. となってしまいました これはインストールが失敗したということでしょうか もしかして、ダウンロードしたモジュールを特別な場所に移動してから cpan>install HTML::ExtractContent をしなければいけないのでしょうか
45 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 14:50:18 ] >>44 > これはインストールが失敗したということでしょうか そう書いてありますが。
46 名前:デフォルトの名無しさん [2009/02/15(日) 15:33:12 ] >>44 cpanのログを読んでどこでcpan installがつまづいたか自力で探すしかないね。
47 名前:デフォルトの名無しさん [2009/02/15(日) 15:36:46 ] 追記。 d.hatena.ne.jp/KNOPP/ の一番最後の方を読むと幸せになるかもしれん。 ただWindowsだからどうなのかは知らん。 > Class-Accessor-Lvalue > File-Slurp > をPPMであらかじめいれておき、 そのあと cpan >installしてみたらどーなる?
48 名前:デフォルトの名無しさん [2009/02/15(日) 15:39:14 ] もしかしてコンパイル環境がないからコケてるのか? ぽつぽつとスマソ。
49 名前:38 [2009/02/15(日) 21:14:22 ] >>39 ありがとうございました。 $/なる変数は、初めて知りました。 しかし、どうやら原因は、ほかでしたw。 FTP転送の際に、改行を勝手に変換してたため、\r\nが、\nだけになってたことでした。 これで、2文字が1文字扱いされてるなってw
50 名前:デフォルトの名無しさん mailto:binmode(sage) [2009/02/15(日) 21:16:42 ] >>38 indexや正規表現を使ってる。 文字列がutf8に汚染されないように気をつけている程度かな。
51 名前:デフォルトの名無しさん [2009/02/15(日) 21:22:34 ] >>50 それだとバイナリにindexや正規表現を使っちゃいけないように読める。
52 名前:50 mailto:sage [2009/02/15(日) 21:56:57 ] しまった元ファイルが壊れていたってオチか。 >>51 言われてみればそう読める。 指摘tnx. ついでに >>36 方法はあるけど、それなりに難しそう。 GUIアプリからコンソールアプリを実行 でググると吉。 もしかしたら既存モジュールがあるかも。
53 名前:42 [2009/02/15(日) 23:00:58 ] >>47 ついさっきまでCentOS5をインストールしてCPANで試してもうまくいかず絶望していましたが、 書き込みを見てリンク先の指示通りにやったら無事プログラムが動きました。 本当にありがとうございました。いくら感謝しても感謝し切れません。
54 名前:デフォルトの名無しさん [2009/02/16(月) 11:55:30 ] >>53 おお動いたか、よかったな。少し心配してたw
55 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 22:19:33 ] >>36 >>50 僕もよく知らないのだが、下のはどうかな? use Win32::OLE; my $WshShell = Win32::OLE->CreateObject("WScript.Shell"); $WshShell->Run('tasklist', 0);
56 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 07:10:12 ] パッケージの外から変数を覗き見たいです ググったところ、グローバル変数ならシンボルテーブルとかいうものを検索すれば見られそうな感じですが、 レキシカル変数は無理なのでしょうか
57 名前:デフォルトの名無しさん [2009/02/17(火) 09:16:53 ] >>56 なぜそんなことが必要な状況になったかが問題だと思う。
58 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 09:32:52 ] >>56 つPadWalker
59 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 13:26:55 ] >>57 デバッグのときにあまり本体を汚さずに中の変数を覗きたいんですよ 最終的には一行書くだけで自動的に変数をトレースしたいです >>58 それ素晴らしく完璧ですね ありがとうございます
60 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 14:03:35 ] >>57 知らないならレスしないでください
61 名前:デフォルトの名無しさん [2009/02/17(火) 14:25:23 ] 知ってるがお前の態度が気に入らない。
62 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 14:36:07 ] >>61 後出しみっともない
63 名前:デフォルトの名無しさん [2009/02/17(火) 15:42:16 ] >>62 コピペにマジレスみともない。
64 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 15:49:58 ] >>63 そう思うならやるなよ
65 名前:デフォルトの名無しさん [2009/02/17(火) 16:31:29 ] >>64 いつまでもみっともない。
66 名前:デフォルトの名無しさん [2009/02/17(火) 17:50:44 ] >>65 必死だな!
67 名前:デフォルトの名無しさん [2009/02/17(火) 18:40:21 ] >>66 >>66
68 名前:デフォルトの名無しさん [2009/02/17(火) 18:41:46 ] キモイ、粘着、IDストーカー、 もう返信しないで下さい。キモいです。
69 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 19:08:44 ] なにこのスレ
70 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 23:44:42 ] 文字列取得の質問です "a,b,c:ABC,d,e,DEF"ghi のような文字列があった場合に、 ABC(コロンとカンマの間) DEF(カンマとダブルクオテーションの間) の文字を取得するにはどのようにすればよいでしょうか? indexとsubstrを駆使してみましたが、 カンマやダブルクオテーションが複数あるため indexの位置が正しく取得できずに断念しました。
71 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 23:51:51 ] >>70 っ[パターンマッチ]
72 名前:デフォルトの名無しさん [2009/02/18(水) 00:29:51 ] >>71 ありがとうございます。 $tmp =~ /:(.+)\,/; のようにやってみましたが、下記の結果になってしまいました。 $1⇒「ABC,d,e」 後ろのカンマのマッチを無視するにはどのようにすればよいでしょうか?
73 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 00:39:30 ] >>72 (.+?)で最小マッチングできるよ
74 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 00:50:47 ] >>73 ABC ⇒ /:(.+?)\,/ DEF ⇒ /.+\,(.+?)"/ ↑で、うまくいきましたー。 ありがとうございました
75 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 06:44:36 ] 呼び出したモジュールから、本体の出力命令 ( print とか die とか )を察知して 内容を置換して出力し直すことは可能でしょうか
76 名前:デフォルトの名無しさん [2009/02/18(水) 07:48:50 ] 可能です。
77 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 14:57:23 ] >>76 どうもです
78 名前:75 mailto:sage [2009/02/18(水) 23:09:04 ] どうやら print をオーバーライドするのが一番手っ取り早そうですね ですが、perl はサポートしてないんですよね 実現してるモジュールなんかはありますでしょうか
79 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 01:33:04 ] >>78 親切な僕が変態 ReplacePrint.pm をそれっぽく書いたげたお。 die のほうはせっかく例外投げてんだから catch してあげて。 使い方: use ReplacePrint; print "string\n"; # ここから ReplacePrint.pm package ReplacePrint; use strict; sub TIEHANDLE { bless [], $_[0] }; sub PRINT { my $self = shift; my @str = @_; for (@str) { s/$/ is replaced/; print STDOUT; } } my $out; open *OUT, ">", \$out; my $stdout = select(OUT); tie *OUT, "ReplacePrint"; 1;
80 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 03:00:45 ] ありがとうございます まだファイルハンドルあたりやtaiについての知識が薄いので、 ここ2,3日で実験しながら学びたいと思います また何か分からないことがあると思うので、 よろしくお願いします
81 名前:79 mailto:sage [2009/02/19(木) 22:56:32 ] >>80 正直、想定外の好反応にあわててる僕がいるお。 外野からの「こんなひどいことするくらいなら設計見直したほうがいい」系のツッコミを期待してたので。 >>79 は猛烈にやっつけで、行儀の良くないことをいくつもやっている点が「変態」の所以。 なのでこのまま流用したりすると後でひどい目にあうことうけあい。 ヒント程度にしておくのが吉です。
82 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 00:25:08 ] Mooseっていったん適当なクラスにrole付加したら、あとでそのrole使わないようにってできないの?
83 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 09:24:24 ] :>>81 :viaレイヤ使うといいのかもしれない。使ったことないけど。
84 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 10:12:57 ] StringRandomモジュールを使用せずに2chのIDのようにランダムな文字列を生成するにはどうすればよいでしょうか?
85 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 11:43:28 ] その程度のプログラムも書けないのは全くプログラミングの勉強が 不足しているのでもうすこし勉強しましょう。
86 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 14:09:07 ] >>84 っ[Digest]
87 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 14:28:40 ] 解決しました。ありがとうございました。勉強してきますorz
88 名前:デフォルトの名無しさん [2009/02/20(金) 18:27:25 BE:1369512858-2BP(150)] UTF-8のテキストファイルから">"一文字を正規表現で検索して置き換えたいのですが、 s/>/test/g とやってもうまく検索できません EUC-JPへのエンコードなどしてみたのですが、そうすると他の文字が一部文字化けなどしてしまい更に 面倒なことになったので、できれば文字のエンコードなしで日本語の置き換えをしたいです Dumpで表示した\xxxなどの形式で検索もしてみましたが、うまく置き換えできませんでした 日本語の置き換えに何かいい方法はないでしょうか? 置き換えしたい文字は">"だけです。
89 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 18:31:12 ] なんといういやがらせ
90 名前:88 [2009/02/20(金) 18:56:00 ] 自己解決しました index関数とsubstr関数で置換できました
91 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 18:58:52 ] とあるプログラムの一部に書かれてたんですが これはどういう意味なんでしょう? # untaint $0 =~ /^(.+)$/; my $self = $1; $0でスクリプト自身のファイル名を取ってきて 正規表現に掛け、マッチしたものを別の変数に入れてますけど、 これだと$0と$selfは一緒なものが入る気がするんですが・・・。
92 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 19:21:24 ] >>91 志村〜、コメント、コメント 汚染されたデータからパターンマッチで部分文字列を取り出すことで 汚染を取り除いている(=untaint)のだが、汚染とは何かとか言い出すと 長くなるので「perl 汚染」でぐぐっていろいろと調べてみるといいよ。
93 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 20:02:26 ] $0が汚染されてたらスクリプト自体が実行出来ないもんじゃねえの? (汚染チェックの重要性は十二分に解ってはいるんだけど)
94 名前:91 mailto:sage [2009/02/20(金) 21:38:11 ] >>92 レスありがとうございます。 なるほど、不正なコマンド含んでたりするものを取り除いてるわけですね。 でもこの正規表現だと任意の文字列にマッチしてしまって取り除いたりは できないような気もしますが・・・。一回正規表現を通して見かけだけ汚染を 取り除いたとみなしてるんでしょうか。 まぁ調べる方針はわかったのでもう少し調べてみます。どうもでした。
95 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 23:19:11 ] .*は何にでもマッチしちゃうので、全くその通り。無理矢理に汚染フラグを 取り除いただけです。よい子は真似しないこと!
96 名前:デフォルトの名無しさん [2009/02/21(土) 18:23:38 ] perl -e 'use strict;my%H;sub A{@H{qw/A B C/}=(1,2,3);return \%H};*H=A();print "$H{C}\n"' perl -e 'use strict;my%H;sub A{my %H@H{qw/A B C/}=(1,2,3);return \%H};*H=A();print "$H{C}\n"' この二つ 上は何故かコンパイルも通り、意図したようにデータも返すことが出来る 下は一見すると正しい文法だし問題もないように見えるけどなぜかデータを取得できない 原因がわかる人いますか?
97 名前:デフォルトの名無しさん [2009/02/21(土) 18:24:12 ] 下は perl -e 'use strict;my%H;sub A{my %H;@H{qw/A B C/}=(1,2,3);return \%H};*H=A();print "$H{C}\n"' の間違いです。スマソ
98 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 20:00:22 ] >>96-97 スコープが違うから。 上はサブルーチンの外側で宣言した %H に代入している。 下はサブルーチンの内側で宣言した %H に代入している。 型グロブはパッケージ変数。
99 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 20:18:27 ] >>98 なるほど パッケージレベルのmy変数はどの関数からも見えるんですね あと型グロブはmy変数とは異なるパッケージ変数と。勉強になりました
100 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 11:53:36 ] ここ(kage.monazilla.org/system_DOLIB100.html )を参考に ●ログインするプログラムを書いてみました。 しかし、認証に失敗して、以下のセッションIDが返ってきます。 SESSION-ID=ERROR:ppppppppppp 何かアドバイスお願いします。 ※IDとパスワードはここではダミーのものとしていますが 実際には自分自身のIDとパスワードを使用しています。 use strict; use Socket; use FileHandle; use LWP::UserAgent; use HTTP::Request::Common qw(POST); my $id='id'; my $pw='password'; my $ua = LWP::UserAgent->new; $ua->agent('DOLIB/1.00'); $ua->default_header('X-2ch-UA' => 'Hoge/1.00'); my $url='https://2chv.tora3.net/futen.cgi'; my %form = ('ID'=>$id,'PW'=>$pw); my $req = POST($url,[%form]);