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
2 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:55:02 ] [プログラミング自体の経験が無い奴はまずココを読め] Perlプログラミング講座: www.site-cooler.com/kwl/perl/ [本] リャマ: www.oreilly.co.jp/books/4873111269/ 駱駝: www.oreilly.co.jp/books/4873110963/ Effective Perl: www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html クックブック: www.oreilly.co.jp/books/4873112028/ [オンラインマニュアル] (追加) 最新のドキュメント: search.cpan.org/~nwclark/perl-5.8.8/ perl5.8.xのドキュメント(一部): www.kt.rim.or.jp/~kbk/perl-5.8/ perl5.005_03 のドキュメント: www.kt.rim.or.jp/~kbk/perl5.005/ 日本語ドキュメント検索: www.cpan.jp/search.cgi perldoc.jp: www.perldoc.jp/ Perldoc.com: www.perldoc.com/
3 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:55:32 ] [モジュール] CPAN.com: search.cpan.org/ 河馬屋二千年堂: homepage3.nifty.com/hippo2000/ [テクニック] Perlメモ: www.din.or.jp/~ohzaki/perl.htm Perlのページ: homepage1.nifty.com/nomenclator/perl/ Perlの小技: homepage3.nifty.com/hippo2000/perltips/index.htm [Perl5.8Unicodeメモ] www.pure.ne.jp/~learner/program/Perl_unicode.html www.namazu.org/~tsuchiya/perl/perl-5.8.html www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
4 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:56:03 ] [過去スレ] 1 ttp://pc.2ch.net/tech/kako/1017/10177/1017736187.html 2 ttp://pc3.2ch.net/tech/kako/1033/10336/1033688230.html 3 ttp://pc2.2ch.net/tech/kako/1041/10412/1041205885.html 4 ttp://pc2.2ch.net/tech/kako/1048/10485/1048519394.html 5 ttp://pc5.2ch.net/tech/kako/1053/10530/1053053082.html 6 ttp://pc5.2ch.net/tech/kako/1060/10606/1060689008.html 7 ttp://pc2.2ch.net/test/read.cgi/tech/1068051036/ 8 ttp://pc2.2ch.net/test/read.cgi/tech/1074151549/ 9 ttp://pc5.2ch.net/test/read.cgi/tech/1079114157/ 10 ttp://pc5.2ch.net/test/read.cgi/tech/1085564875/ 11 ttp://pc5.2ch.net/test/read.cgi/tech/1090889189/ 12 ttp://pc5.2ch.net/test/read.cgi/tech/1094579428/ 13 ttp://pc5.2ch.net/test/read.cgi/tech/1097851764/ 14 ttp://pc5.2ch.net/test/read.cgi/tech/1101649274/ 15 ttp://pc5.2ch.net/test/read.cgi/tech/1105953092/ 16 ttp://pc8.2ch.net/test/read.cgi/tech/1111034732/ 17 ttp://pc8.2ch.net/test/read.cgi/tech/1117870308/ 18 ttp://pc8.2ch.net/test/read.cgi/tech/1121804136/ 19 ttp://pc8.2ch.net/test/read.cgi/tech/1126977805/ 20 ttp://pc8.2ch.net/test/read.cgi/tech/1131286411/ 21 ttp://pc8.2ch.net/test/read.cgi/tech/1134327348/ 22 ttp://pc8.2ch.net/test/read.cgi/tech/1138519327/ 23 ttp://pc8.2ch.net/test/read.cgi/tech/1141742901/ 24 ttp://pc8.2ch.net/test/read.cgi/tech/1146022352/ 25 ttp://pc8.2ch.net/test/read.cgi/tech/1149259409/ 26 ttp://pc8.2ch.net/test/read.cgi/tech/1153412251/ 27 ttp://pc8.2ch.net/test/read.cgi/tech/1157874614/ 28 ttp://pc8.2ch.net/test/read.cgi/tech/1162273941/ 29 ttp://pc11.2ch.net/test/read.cgi/tech/1166708139/
5 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 23:28:35 ] RTFM = マニュアルを参照してください
6 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 23:33:02 ] 乙
7 名前:デフォルトの名無しさん [2007/03/15(木) 00:13:38 ] しょーりゅーけn
8 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 09:55:34 ] テンプレにPBPがはいってないのはどうかと
9 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 11:27:42 ] DAT落ちした過去スレって貼る意味あるの? 前スレだけでいいんじゃないかと思うが。
10 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 12:02:31 ] これもテンプレに入れない? (前スレの115) --------------------------------------------------------- # 【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)"; # 次に、あなたが実行したい処理の内容を入れて下さい。 print "やあ!\n"; sleep(1);
11 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 12:38:08 ] テンプレに入れる必要性が分からない
12 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 12:56:56 ] よくある質問のまとめサイトでも作って載せとけ
13 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 20:59:50 ] encodingに手を出すと泥沼にしかならないからなあ
14 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 21:49:50 ] 現実問題として、encodingまわりの質問は多いわけで、 テンプレ化することで、くだらない質問が減るのなら十分意味があることだと思う。
15 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 22:28:23 ] ># 編集の仕方はご自分で勉強するか、このスレで質問して下さい。 これじゃあ結局変わらないんじゃないか。 ># 上記は、あくまで文字処理がわからない人のためのおまじないです。 ># 上記以外のことをやろうと思ったら、自分で勉強してください。 わからんやつに、手取り足取り説明してもやっぱりわからん。 こっちで動くように書き直した方が100倍早い。 Cのポインタみたいな状況になってる。
16 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 22:42:07 ] テンプレなら一言 use Jcode; 使えってレベルでいいでしょ。
17 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 22:43:56 ] Jcodeだとコアにはいってないじゃん。どうやってインストールするんですか?とかになるよ。
18 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 22:48:47 ] >>16 >>17 あんたらはどうせバカ以前だろ。 あれが今となっては誤解を引き起こす要因になっていることすらわかっていない。
19 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 23:14:57 ] 誤解って何の話? そんなの初めて聞いたが。
20 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 00:19:43 ] >>19 多分、>>18 は、「Perl5.8 でもJcode.pm を使って文字コードを変換しなければならない」 と誤解したのではないだろうか。 初心者は、回答者が>>10 のように回答できるような質問をすることすらできないのが現実。 前スレの>>68-71 なんか見てると、悲惨だね。 この点を解説している入門書も少ないと思うし、テンプレに入れてやってもいいんじゃないの?
21 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 00:48:59 ] Perlにもクロージャがあるようですが、 皆さん使ってますか?どんなときに使うか教えてください
22 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 17:39:12 ] ぐぐればいいのに ttp://d.hatena.ne.jp/naoya/20060109/1136812096 ttp://d.hatena.ne.jp/tociyuki/20060110/1136910241
23 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 17:52:52 ] sub func { ・・・ return (\@a, \@b, \@c); } (@a, @b, @c) = func(); ってやると全部@aに合体してるんだけど どうすればいいの?
24 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 17:53:40 ] ($a, $b, $c) = func();
25 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 18:30:51 ] (*a, *b, *c) = &func;
26 名前:23 mailto:sage [2007/03/16(金) 20:32:44 ] リファレンスやっと理解できた
27 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 22:56:12 ] @data = <IN>; print OUT reverse @data; メモリに入りきらない巨大csvファイルを上のように 逆順にするにはどうすればいいでしょうか?
28 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 23:06:51 ] Tie::Fileを使えば幸せになれる予感
29 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 23:57:22 ] >>27 www.din.or.jp/~ohzaki/perl.htm#File_Reverse
30 名前:デフォルトの名無しさん [2007/03/18(日) 04:31:05 ] WindowsXP Proで、 プロセスの終了を待たずにhoge.exeを起動して 次の処理へと移りたいのですが、どうすればいいのでしょうか? &routine; system('hoge.exe'); # ここで終了を待ちたくない &routine2;
31 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 04:42:09 ] forkを使え、ルーク
32 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 06:32:23 ] delete の一般版というか、undef の削除した内容を返すような関数はあるのでしょうか? スカラーの場合だと、こんな感じの関数で。 sub Del { my $v = $_[0]; $_[0] = undef; return $v; }
33 名前:デフォルトの名無しさん [2007/03/18(日) 06:40:08 ] >>30 system('start hoge.exe');
34 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 11:33:47 ] >>32 ない。
35 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 13:50:21 ] 前スレぐらいで出てた気がするけど、 第一引数に1を。 ActivePerlだけだっけ。
36 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 14:22:24 ] >>30 Win32::Processは?
37 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 16:01:20 ] perl って質問じゃない本スレみたいなのないの?
38 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 16:42:21 ] >>37 あってもどうせ過疎る。 だからここでけっこう雑談もしてる。
39 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 17:16:31 ] なる perl って普及してるのにそう言う人あまり居ないんだね 道具として使っている人がほとんどなのかな
40 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 17:29:29 ] 英語圏のコミュニティがたくさんあるからだと思うよ
41 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 17:52:44 ] Perl関連のスレがあちこちに散らばってるしなぁ。 本スレがあれば変な分散抑えられるかもだけど…。でもやっぱ過疎りそうだね。
42 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 18:18:38 ] もう道具以上の発展がないんじゃないの
43 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 18:43:54 ] >>34 ありがとうございます。 一瞬演算子レベルであっても良さそうな気はしたが、あってもあまり使わないか。
44 名前:27 mailto:sage [2007/03/18(日) 20:40:07 ] >>28 >>29 ありがとう。ずっと前から愛してました。
45 名前:デフォルトの名無しさん [2007/03/18(日) 22:36:23 ] Net::IRCで、サーバーとの接続が切れたら 再度繋ぎなおしたいのですが、接続が切れると、 「No active connections left, exiting...」という表示と共に スクリプト自体が死んでしまいます。 どうすれば接続が切れたときに再度繋ぎ直すことが出来ますか?
46 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 00:20:46 ] eval
47 名前:デフォルトの名無しさん [2007/03/19(月) 13:54:47 ] >>31 >>33 >>35-36 アリガトウゴザイマシタ。とりあえず>>33 で*.lnkを呼び出して済ませました。
48 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 16:10:23 ] CPAN のモジュールをいろいろ組み込んだ結果、 print 'hello!'; だけでもメモリを 20M くらい使うようになりました。 サーバのメモリが 2G のため、同時に 100 アクセスくらいあると サーバがかなり重くなってしまいます。 サーバのスペックを上げることになったのですが、 同時に消費メモリも下げろと言われています。 CPAN のモジュールは外せないのですが、 ソフトウェア的に何か解決策はありませんか?
49 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 16:13:48 ] お前は何を言っているんだ?(画像ry
50 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 16:17:42 ] >>48 いろいろあるだろうけど、コードの再利用で量を減らすとか、 容量の大きい配列は、他の変数への複製を一切せず、全て 参照等で解決するとか。
51 名前:デフォルトの名無しさん [2007/03/20(火) 16:21:24 ] mod_perl とか FastCGI とか使って、プロセスを使いまわすようにすればいいじゃない
52 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 16:35:11 ] モジュールは何を使ってるの?
53 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 18:44:58 ] そもそも、同時に100アクセスも来るサイトに鯖1台で、CGIでPerlを起動したらCPUが間に合わない
54 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 18:53:15 ] threadsについての質問ですが、 例えばソケットを作ってから新規スレッドを作った場合、ソケットも2つ存在し、 my $sock = IO::Socket::INET - > new(attributes); my $thread = threads -> create(\&example); $thread -> detach; $sock -> close(); この場合、生成されたスレッドからはまだソケット利用できるということでしょうか? ソケットの実体がいまいち掴めてないので余計に混乱してしまいました・・・
55 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 20:04:04 ] >>54 perl以前にまずスレッドについて勉強したほうがいい。 プロセスとスレッドを混同してる。
56 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 20:32:31 ] >>50 に関連しているのかいないのかだけど、 配列をサブルーチンへ渡したりサブルーチンから返したりする場合に、 複数の配列ではなく(1つのリストにまとめられる心配がない)、 大きくもない配列の場合だったら、 そのまま渡したり返したりした方が ほとんどパフォーマンスが変わらない上にコードの見通しが良くなったりしますか?
57 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 20:43:08 ] >>55 再度勉強してきます。有難うございました。
58 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 22:10:03 ] >>56 ??? 一つのリストにまとめられない心配がない、じゃなくて?
59 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 22:44:25 ] >>56 そりゃあ使わないで済むなら、リファレンスなんて使わないほうがシンプルになるだろうね。 でも、後で「やっぱり大きな配列を扱うようにしたい」とか「複数の配列を受け取りたい」とか 思った時の事を考えると、あらかじめリファレンス受け取りにしといた方が、少ない変更で済んで 互換性を保ちやすいのは確かだと思うよ。
60 名前:50 mailto:sage [2007/03/20(火) 23:00:32 ] そうでしょうね。 先のメモリ最適化は、perlみたいな高級言語(BASICとか)では できる事には限界があるでしょね。 メモリの解放だってできないすぃ。いかに使わないか、なのかな。
61 名前:56 mailto:sage [2007/03/21(水) 07:11:38 ] >>58 自分の書き方がまどろっこしくてごめんなさい ●複数の配列ならまとめられてしまうので、リファレンスのリストで渡す・返すのは必須 ●考えていたサブルーチンでは、複数の配列を渡さない・返さない = リストがまとめられる心配がないので、リファレンスを使わず無精でウマー と考えていました >>59-60 サンクスです 短期的には何はともあれプロファイラで見るか、という勢いだったのですが、 中長期的な視点も大事ですね ループで回しているようなサブルーチンだとかだと、 塵も積もれば……にもなりそうですので、節約することにします
62 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 14:03:20 ] >>48 プロセス間通信を使うのがいいんじゃないかな。 モジュールを呼び出して実行するプロセスを一つ立ち上げて、 他のプロセスはこのプロセスと通信して実行結果をもらうようにする。
63 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 14:07:03 ] 突然すみません、エスパーを募集します。 MP3::InfoモジュールがどうもShiftJISを想定してないのかどうかは知りませんが、 とにかくID3v1(エンコードはShiftJIS)で曲名など、日本語を含んだ文字列を取得すると utf8フラグを持っているのに中身はShiftJISという訳の分からない文字列が出ます。 そしてGuessでfrom_toでutf8に変換しようとすると、 iso-8859-1 or utf8 at C:/Perl/lib/Encode.pm line 186 上記のエラーで止まってしまいます。Jcodeのgetcodeでもutf8と判別されました。 これを、通常のShiftJISの文字列にするにはどうすれば良いでしょうか。 ID3v1にShiftJIS以外の文字列が入るかどうかは置いといて、 色々やって通常のShiftJISの文字列にしようと試みたのですが、 激しい文字化けに見舞われたり、だめでした。 どうか、お力をお貸しいただけませんでしょうか。宜しくお願いします。
64 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 14:54:56 ] POD嫁 書いてあるから
65 名前:63 mailto:sage [2007/03/21(水) 15:08:22 ] >>64 すみません、英語は正確に読めません。 フィーリングで適当にイグザンプルを斜め読みして書いてます。 use_mp3_utf8() の事でしたら、違います。 確かにこれでShiftJISは治るのですが、 Unicodeが全部"?"に変換されてしまいます。
66 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 15:24:47 ] > utf8フラグを持っているのに中身はShiftJIS shiftjisにutf8フラグが付いてるだけじゃないの?
67 名前:63 mailto:sage [2007/03/21(水) 15:41:15 ] >>66 その通りだと思うのですが、 _utf8_off、encode、decode等してみたのですが 全て化け化けの結果が返ってきたのです…
68 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 16:19:55 ] >>65 英語を勉強しろよ。 別のモジュールを使おうとしたときに同じような目に遭うぞ
69 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 17:58:00 ] 必要なのは、RAW_V1なんだよな〜
70 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 18:34:37 ] 1年くらい前に同じ問題で七転八倒したことがあるけど、Rubyに逃げたわ。 Rubyでもモジュールの内臓を引き摺り出して書き換える必要があったけど。
71 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 21:42:27 ] >>63 お約束の「はまり」だ。自力で頑張ってくれ。 例のごとく「PODを読め」とかほざいているやつは、Jcode使えとか言ってるバカと同様 八割方テメエでもできないから心配することはない。 ちなみに、あんたが既に挙げている材料だけでうまくいくよ。
72 名前:63 mailto:sage [2007/03/21(水) 22:28:13 ] >>71 もうかなり悩んでるんです… 挙句の果てにはUnicode文字が含まれてたら _utf8_off で普通の文字列にし、それ以外はShiftJISとしてutf-8にエンコードしてます。 本当にお願いします…コードをいくつか書いて頂ければ…
73 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 00:07:55 ] utf8フラグだけ落としたらいいじゃない
74 名前:デフォルトの名無しさん [2007/03/22(木) 04:24:32 ] ご存じの方ありましたら教えてください。 掲示板に貼られる画像のサニタイジングをしたいのですが、CPANか どこかにコードがなかったでしょうか。とりあえずJPEGとPNGだけでも 処理できたらいいのですが。
75 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 05:05:44 ] しかし、文字コードになるとキレる奴がいるなw
76 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 08:35:23 ] >>74 適当なモジュールでデコードしてエンコードすればいいんじゃ
77 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 08:43:35 ] ImageMagick
78 名前:74 mailto:sage [2007/03/22(木) 15:14:14 ] >>76-77 ありがとうございます。試してみます。
79 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 16:11:56 ] The GUI LoftのようなGUIデザインツールがTkにもあれば教えていただけないでしょうか?
80 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 17:12:58 ] $q = new CGI; これがエラーになるのですが考えられる原因はなんでしょうか?
81 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 17:22:22 ] ・perlのパスが違う ・useしてない ・モジュールが無い ・ブラウザで表示してるのにContentヘッダを出力してない ・脳内鯖にしかアップしてない とりあえずエラーログ見ればいいと思う
82 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 17:44:29 ] use strictをはずしたら動きました
83 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 17:55:05 ] それはまず、なぜstrictありで怒られてたのかを考えるべきところじゃないのか?
84 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 18:03:42 ] っ my
85 名前:デフォルトの名無しさん [2007/03/22(木) 18:03:46 ] ・$qをmyしてない
86 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 18:14:19 ] >>82
87 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 18:28:02 ] いろいろな点で酷過ぎる
88 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 19:39:44 ] strictはずのは自殺行為
89 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 19:43:35 ] エラー隠蔽者には、まずエラー内容を吟味することを教えようぜ。
90 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 20:24:23 ] 質問です。 正規表現で伸ばし棒を使うとエラーが出てしまうのですがこれを回避する方法はないでしょうか? よろしくお願いいたします
91 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 20:25:37 ] 伸ばし棒ってどれ。
92 名前:デフォルトの名無しさん [2007/03/22(木) 20:26:57 ] ー これです
93 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 20:27:49 ] これも同じ人?向こうの方がいいんじゃないかな。
94 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 20:30:15 ] >>90 具体的にエラーがでる正規表現と、エラーの文も書いてくれ
95 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 20:33:42 ] >>94 my $str = "test"; $str =~ s/ニート//; Unmatched [ in regex; marked by <-- HERE in m/ニー <-- HERE ト and Settings\\デスクトップ\httpd142p\test.pl line 3. こんな感じです >>93 >>90 =>>92 です
96 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 20:34:12 ] >>92 2バイト目が [ になってるんでperlが混乱してるんだな。
97 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 20:37:10 ] >>95 \Q\Eで囲め
98 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 20:40:14 ] >>97 !!!!! できました!!ありがとうございます!!!
99 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 21:22:20 ] \Q\Eか。それ忘れてた。前それではまって、m/コピ\x{81}\x{5b}/なんてことやってた。
100 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 21:33:38 ] あほうは、新テンプレ通りやれよ。同じ事何度も言わせんな。
101 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 21:52:35 ] そうだな。 >>98 は黙って>>10 に書いてある通りのことをやれ。
102 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 21:53:25 ] シフトJISって懐かしい。
103 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 22:08:34 ] #!/usr/local/bin/perl use strict; use LWP::Simple; use XML::Simple; my $api = 'd.hatena.ne.jp/exist?mode=xml&url= '; my $url = 'www.yahoo.co.jp/ '; my $document = LWP::Simple::get($api.$url) or die "cannot get content from $url"; my $parser = XML::Simple->new; my $data = $parser->XMLin($document); print $data->{count}->{bookmark}->{content}, "\n"; www.itmedia.co.jp/enterprise/articles/0702/26/news011.html ここのサンプルなんですがエラーがでました 何が悪いのでしょうか?そんなに難しいことをやってるわけではないと思うのですが
104 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 22:40:11 ] なんていうエラーがどこで出たのよ?
105 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 22:45:19 ] HTTP 500 - 内部サーバー エラー です
106 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 22:48:42 ] なんでブラウザにエラーが出るわけ?
107 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 22:48:48 ] テンプレに >エラーが出たらエラーをそのままコピペしろ と入れた方がいいね。 >>105 コマンドラインで実行した結果を出せよ。出せないなら、WebProg逝き。
108 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 22:56:48 ] 自己解決しました コピペした括弧が全角でした なんで括弧だけ全角なのか意味不明です わざとなんでしょうかね ひどいサンプルです
109 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 23:02:58 ] ここって初心者向けのスレなの?
110 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 23:05:47 ] 行番号が付いてるところからも、コピペを前提とはしてない、実際に 手を動かして理解するためのコードだとは思うが、なんで括弧が半端 に全角になってるんだろうな。(9行目の2つと13行目の閉じ括弧)
111 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 23:35:37 ] 普通の記事をいつも上げるときに使ってるスクリプトがお節介でもしたんだろう。
112 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 23:37:14 ] ftpで相手サーバの接続先にあるファイルのリスト(ワイルドカードで指定した名前に 一致するファイルの一覧)を配列に取得したいのですが相手サーバの設定の関係で wgetとやらを使って接続しないといけません。 wgetの使い方は調べてみたのですが、それをPerlから実行してファイル一覧を取得 するにはどうやったらよいのでしょうか?
113 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 23:44:57 ] open("wget -O- $url |"); どんな内容が返ってくるかは実際に見てみれ。
114 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 00:07:22 ] >>74 サニタイジングなんて言ってたら高木大先生に張り倒されるぞ!
115 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 00:43:28 ] たいていの場合wget呼ぶよりはLWP使うほうがプログラムは楽だと 思うのだが、wget使わないと取れないってどういう仕掛けなのだろう??
116 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 02:01:06 ] FTPで接続だから、LWPよりもNet::FTPじゃね?
117 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 07:36:19 ] >>113 ありがとうございます。やってみます。 >>115-116 Net::FTPで作ってたのですがこれだと相手に繋がらなくて客先の担当の方が 「wget使ってください」とのことでした。
118 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 08:57:31 ] wgetでとれてNet::FTPだとだめというのもかなり不思議だな。 原因はわかってるのかな。それともwgetだと実績あるから 調べるの面倒だしそれにしとけとあしらわれたか?
119 名前:デフォルトの名無しさん [2007/03/23(金) 09:41:38 ] 突然ですが、xxxyyy.html というファイル名のファイルの、 全てのa要素のhref属性値をzzzwww.html というファイルに出力する方法を教えてください。
120 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 09:56:38 ] >>118 passiveコマンド叩けば通るとかいうオチだったりして……
121 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 10:23:13 ] >>119 突然だねぇ・・・
122 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 10:24:01 ] >>119 ググレカス module.jp/blog/monday_module_HTML-LinkExtor.html
123 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 17:56:12 ] 突然DOMで対抗してみたり javascript:a=document.getElementsByTagName('a');b='';for(i=0;i<a.length;i++)b+=a[i].href+'<br>';document.write(b);
124 名前:デフォルトの名無しさん mailto:sage [2007/03/26(月) 16:19:01 ] >>117 pasv() しても駄目か? ファイヤーウォールがある場合は passive mode にしないと駄目なことがあるぞ。
125 名前:デフォルトの名無しさん mailto:sage [2007/03/28(水) 11:20:00 ] 初心者質問で申し訳ないのですが、perlでコロン単体にはどのような意味があるのでしょう。 リファレンスを引いても載ってないし...。
126 名前:デフォルトの名無しさん mailto:sage [2007/03/28(水) 11:49:02 ] 三項演算子?
127 名前:デフォルトの名無しさん mailto:sage [2007/03/28(水) 11:54:00 ] >>126 下記(*)の$_の手前にあるヤツなんですが・・ # CSV形式の $line から値を取り出して @values に入れる { my $tmp = $line; $tmp =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/; @values = map {/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_} …(*) ($tmp =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g); } Perlメモ www.din.or.jp/~ohzaki/perl.htm#CSV2Values
128 名前:デフォルトの名無しさん mailto:sage [2007/03/28(水) 12:05:15 ] どう見ても三項じゃん
129 名前:デフォルトの名無しさん mailto:sage [2007/03/28(水) 12:12:49 ] なるほど。ありがとうございました。
130 名前:デフォルトの名無しさん [2007/03/29(木) 01:14:28 ] substrで数値文字列から”001”のような文字列を切り出したいのですが、 デフォルトでは数値として扱われてしまい、1になってしまいます。 キャストの方法を調べたけど思うような情報が得られません。 もうしわけありませんが、教えていただけないでしょうか。
131 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 01:41:02 ] sprintfとかは?
132 名前:デフォルトの名無しさん [2007/03/29(木) 08:07:32 ] >>130 ウチの環境下だと、普通に文字列認識なんだが変数かなんかに突っ込んで、 計算かましたりしてない? % perl -le 'print substr qq{00001}, 3' 01 % perl -le 'print unpack qq{x3A2}, qq{00001}' 01
133 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 08:08:16 ] 上げてもた…
134 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 08:27:21 ] 文字列比較で $name == "admin" とかやってるのでは
135 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 14:13:36 ] +で連結してるとか。
136 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 19:40:09 ] $val="2007年3月29日○○の温度は20度、○○の温度は10度、○○の温度は15度"; のような文字列があった場合 ○○の温度は10度の"10"を取得したいのですが、 どのように正規表現を書けばいいんでしょうか。 $value =~ /([0-9]+)/ のようにすると $1=2007 となりますが、 最大マッチしたうちのn番目を取得できたりする書き方があるんでしょうか 例がちょっとあれですが、○○には同じワードが入ることを想定してます。
137 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 19:42:39 ] 本嫁
138 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 19:57:25 ] while ($val =~ /([0-9]+)/g){ push(@val, $1); } print "$word[3]\n"; 汚くなったけど、上記のようにしてなんとかできました。失礼しました。
139 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 20:08:05 ] まー本人がいいっていうのならいいよね(´・ω・`)
140 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 20:10:40 ] なにか他にやりかたあれば教えてください(つД`)
141 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 20:28:37 ] 3年後に自分のコードみて「俺アホやん」 と思えたら、 君は著しく成長できたということだ。
142 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 20:45:58 ] 3年とはのんきな話だな。3ヶ月で一定のレベルに達しないなら、その人が向いてないかまたはその言語に悪意が混入されているかだな。
143 名前:壁|・ x ・)つ○ mailto:usage [2007/03/29(木) 22:09:20 ] $val =~ /(\d+)度/g
144 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 12:21:03 ] >>142 そんなこと言うなよ
145 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 17:55:55 ] コーディングテクは日々進化し続けると思うけどなぁ。 俺が還暦を迎えた頃にはスゲーことになってると思うんだ。
146 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 21:01:15 ] base.pmなんだけど、 sub get_fields { () = \%{$_[0].'::FIELDS'}; return \%{$_[0].'::FIELDS'}; } 「() =」これって何してるんでしょう? perl5.003で動作するように書き換えられないかな?
147 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 21:06:28 ] >>146 コメントで「『タイポじゃねーの警告』は黙れ」と書いてあるだろ。 つまりその部分は動作とは無関係。 しかし5.003とはまた随分古いバージョンだな。せめて5.005あたりにしとけよ…。
148 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 22:23:03 ] >>147 すまん。 エラー書いてなかった。 Can't modify stub in list assignment at /path/to/base.pm line 43, near "};" こんなのが出る。 > しかし5.003とはまた随分古いバージョンだな。せめて5.005あたりにしとけよ…。 大人の事情というやつで・・・。
149 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 22:58:15 ] >>148 search.cpan.org/~nwclark/perl-5.8.8/pod/perldiag.pod#Can 't_modify_%25s_in_%25s - () = \%{$_[0].'::FIELDS'}; + # () = \%{$_[0].'::FIELDS'}; + local $^W = 0;
150 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 00:24:17 ] > 大人の事情というやつで・・・。 そんな仕事辞めてしまえよ
151 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 01:14:49 ] 5.003を理由に依願退職する>148であった。
152 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 02:08:39 ] linuxのperl向けのIDEでお薦めはなんでしょうか
153 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 02:12:15 ] emacs一択。 あとEPICとか? つーかPerlにはいいIDEないよ。
154 名前:152 mailto:sage [2007/03/31(土) 02:51:38 ] ども そうですか、ではボチボチとやってみます
155 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 02:53:14 ] 春先は150みたいな 社会のしがらみスルー系のレスの ネタっぽさが薄まるんだよな
156 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 03:48:41 ] (1..10) は1から10までの数を持つリストを生成する式だと思うんですが、 $hoge = (1..10); print $hoge; とやればリストの最後の値である10が変数$hogeに代入されると思ったのに なにも出力されません。 スカラー変数にリストを代入すると、リストの最後の値が代入されると思うんですが どこが間違っているんでしょうか?
157 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 03:59:22 ] Perl7っていつ出るんですか?
158 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 04:02:35 ] >>156 ↓を実行するとわかるけど、範囲演算子(..)が範囲内の値リストを生成するのは、 リストコンテキストの時。スカラーコンテキストでは、違う意味になるよ。 d.hatena.ne.jp/palmo/20060724/rangeop while (<DATA>) { chomp; $hoge = (1..3); print "$_ = $hoge\n"; } __DATA__ AAA BBB CCC DDD EEE FFF
159 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 04:05:29 ] ..は範囲演算子。 $hoge = (1..10) のようにスカラコンテキストで用いた場合、..の左項が真になった 時点から右項が真になるところまで真を返す。(...だとちょっと変わる) いずれかの項が定数値であった場合、それは $. との比較であるとみなされる。 全く読み込んでいない状態なら $hoge の値は $. == 1 の結果に等しい。
160 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 04:17:29 ] 最後のとこ、全く読み込んでいないなら、$. == 1の結果は偽、で。
161 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 16:28:17 ] >>158 ,159 ...演算子もコンテキストで意味が変わるんですね。 わかりました。ありがとうございます。
162 名前:デフォルトの名無しさん [2007/04/02(月) 04:58:36 ] perlのコミュは初心者に優しくて好きだ。 スクリプト言語経験者でも表記にとっつきにくいからかな。 マニュアル嫁で突っ返されることが少ない気がする。 (マニュアル読んでもわかんなかったりするし;ω;)
163 名前:デフォルトの名無しさん [2007/04/02(月) 06:06:27 ] XpSP2でActivePerl-5.8.8.820-MSWin32-x86-274739.msiを インストールしたんだけど、Jcode.pmがインストールされない。 なぜ?教えてください。
164 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 07:17:48 ] ActivePerlのことはよく知らんが、 Perl 5.8.0以降Jcodeが標準モジュールじゃなくなったからじゃないかな
165 名前:デフォルトの名無しさん [2007/04/02(月) 09:35:55 ] >>164 5.8.0以降はJcode.pmが標準と聞きましたので 当然、インストールされると思ってたのですが、 探しても見つからないんですよ。
166 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 09:41:41 ] 5.8.0からEncodeモジュールが標準装備になってるからそれ使え。
167 名前:デフォルトの名無しさん [2007/04/02(月) 10:17:24 ] >>166 使っているアクセス解析プログラムがJcode.pm使っているんですよ。 perlのPG経験がないんで、改造も出来ないんです。 これです。 ttp://www.bflets.dyndns.org/Tools/AWStatsJpn.html
168 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 10:23:07 ] >>167 池沼か?標準じゃ入ってないと言ってるだろうが。
169 名前:デフォルトの名無しさん [2007/04/02(月) 10:29:59 ] それじゃ別の方法、考えています
170 名前:デフォルトの名無しさん [2007/04/02(月) 10:30:15 ] 考えます
171 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 10:34:35 ] 普通にJcode.pmインストールすりゃいいじゃないか。莫迦か
172 名前:デフォルトの名無しさん [2007/04/02(月) 10:46:55 ] >>171 インストールしてもうまくいかないんですよ やりかたが間違ってるかもしれませんが。 説明しているページで、そんなモジュールなかったり。 以下は参考にしたページです。 ttp://sakaguch.com/SetJcodePm.html win_install.plなんてないし。 マニュアルで置いても、変換後のファイルは0バイトだし。
173 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 11:33:15 ] >>172 Jcodeインストールするならコマンドプロンプトからppm(今時はppm-shellかな)を起動させて install Jcode(enter) で一発で入ると思うが。
174 名前:デフォルトの名無しさん [2007/04/02(月) 11:57:01 ] >>173 ありがと 意味不明だけど、勉強してやってみる
175 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 12:17:49 ] つ[ perl -MCPAN -e shell ]
176 名前:デフォルトの名無しさん [2007/04/02(月) 12:23:33 ] ありがと。ppmでインスコできた。 でも、うまく動かなった。 これはperlが原因じゃないから ここで、さよなら。 じゃ、教えてくれた人、ありがと。
177 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 12:25:27 ] っ ttp://openlab.jp/Jcode/index-j.html
178 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 12:31:16 ] 次から低レベルな質問は webprog板でやってくださいね
179 名前:デフォルトの名無しさん [2007/04/02(月) 13:02:54 ] >>178 そのわりに、明確な回答書いてる奴いねーけどな
180 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 13:14:06 ] こんな時間帯だからじゃないの?w 公式のは古いからいつものサードパーティの 所にver.2.06があるからそれをインストールするだけじゃん
181 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 09:34:45 ] すいません。正規表現についての質問なのですが・・・ abcあいうえお123./<>~"@ の様な文字列から日本語だけマッチするもしくはASCIIコードだけマッチさせるようにするには どうすればよいのでしょうか?
182 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 10:12:57 ] >>181 文字コードをeucにして、 my $pat = pack("C*",0x20,0x21..0x7e); /[$pat]+/ でASCII /[^$pat]+/ で日本語(と制御コード)
183 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 10:15:20 BE:264938483-PLT(12980)] module.jp/blog/regex_unicode_prop.html
184 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 20:53:28 ] 正規表現でのグループ化について質問です $_ = 'AAAbarbarbazZZZ'; だとして @a = /AAA(foo|bar|baz)+ZZZ/; とすると、@a の中身は最後にマッチした @a = ('baz') 一つとなりますが、 これを @a = ('bar', 'bar', 'baz') とする正規表現はあるでしょうか? (){n} でなく ()+ を使ったのは数量が固定ではないためです。 なんらしか正規表現方法で 上記一文で済ませられたら…と思い質問させていただきました。
185 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 21:38:28 ] >>184 何でも一行に詰め込みゃいいってもんでもないけど… @a = splice @{[ grep length, split /(foo|bar|baz)/, 'AAAbarbarbazZZZ' ]}, 1, -1;
186 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 21:55:26 ] 確かに一行ですが…^^;レスありがとうございます。 'AAAfooXXbarYYYYYbazZZZ' のように目的外の物が混ざっている場合 のチェックを別にしなければなりませんが。 やはり ()+ でのマッチを正規表現の修正で全部リストする無理でしょうか
187 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 22:27:05 ] m/AAA((?:foo|bar|baz)+)ZZZ/ とかすれば全部とれることはとれる。 リストにはならないけど。
188 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 22:29:35 ] >>186 > 'AAAfooXXbarYYYYYbazZZZ' のように目的外の物が混ざっている場合 その場合 @a は () とするべきか AAA foo XXbarYYYYYbazZZZ と分けるべきか AAAfooXX bar YYYYYbazZZZ と分けるべきか AAAfooXXbarYYYYY baz ZZZ と分けるべきか >>184 からは読み取れないよ?
189 名前:184 mailto:sage [2007/04/05(木) 23:22:15 ] レスありがとうございます >>187 ()+ での一気取得が駄目だった場合、私もそれを候補の一つに考えていました リストにするには(foo|bar|baz)のマッチングがもう一回必要になってしまいますが >>188 説明不足でした。申し訳ありませんでした (ある程度大きいテキストから) 'AAA' と 'ZZZ' の間が (foo|bar|baz)+ のみで構成されている箇所を探し その部分をリストとして取得したいと思っております ですので、提示くださった選択肢の中では >その場合 @a は () とするべきか を考えています (foo|bar|baz) の部分は実際はかなり重そうな正規表現の羅列と選択(|)で構成されていて ()+ による繰り返しも回数も非常に多く (foo|bar|baz) のマッチングによる2度手間(切り出し・リストへ分割)は避けようと思い 今現在は下記の感じの処理を考えています if (/AAA/) { while ($' =~ /^(foo|bar|baz|ZZZ)/) { if ($1 eq 'ZZZ') { OK; last; } push(@a, $a); } } } そこで >>184 の質問するに至りました マッチングも一回で一文で済ませられたら…と 長文失礼
190 名前:184 mailto:sage [2007/04/05(木) 23:38:24 ] >>189 の while ($' =~ //) は while ($' =~ //o) を考えています 今docを読み込んでいるんですが ()+ でのグループの繰り返しマッチングの 全リスト取得は、正規表現工夫しても仕様的に無理なのかな…
191 名前:184 mailto:sage [2007/04/05(木) 23:40:39 ] push(@a, $a) の行も間違えていました… 慌てて書き上げたもので 連投すみません
192 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 23:44:49 ] AAAとZZZの間だけでいいのか? AAAの前や、ZZZの後ろは無視していいのか?
193 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 23:47:12 ] あと、入力データと出力データの例を具体的に示してくれ。 入力文字列と、それに対する@aの中身はどうなるのか。
194 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 23:51:08 ] >>190 1対の括弧につき1つの値が保存される仕様なんだから、 1回のマッチにおいて1対の括弧で複数個の値を得るのは そりゃ無理だわな。 それに複雑な正規表現でバックトラックの嵐にするより、 幾つかのシンプルな処理に分けた方が速い。 if (/AAA/g) { push @a, $1 while /\G(foo|bar|baz)/g; }
195 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 23:52:06 ] マジレスすると、速度とか考慮するなら切り出して二段階とかにした方が速い。 まぁ、元のデータの性質が分からんと何とも言えんが。
196 名前:こういうこと? mailto:sage [2007/04/06(金) 00:00:11 ] if(($x) = /^AAA(.+)ZZZ$/){ $x =~ s/(foo|bar|baz)/push @a, $1/ge; }
197 名前:196 mailto:sage [2007/04/06(金) 00:06:16 ] ああ、AAAが行頭とは限らないのか。
198 名前:184 mailto:sage [2007/04/06(金) 00:15:33 ] >>192 はい。 /AAA(foo|bar|baz)+ZZZ/ これに厳密にマッチするところの(foo|bar|baz)のみを取得したいので 111AAAfooZZZ222 : 111 222 等は要りません 111AAAfooXXXbarZZZ222 : この場合 foo bar も要りません 111AAAfoofoofoobazbarZZZ222 : @a = ('foo', 'foo', 'foo', 'baz', 'bar') を取得したい >>193 申し訳ありません。実際の入力データはお見せすることが出来ないので、 等価な具体例の作成も時間がかかってしまうかも知れません 上記例でご容赦ください >>194 >そりゃ無理だわな。 ありがとうございます。 これが出来るのかどうかが一番知りたかったので、ふんぎりがつきました。 実際の具体例のデータを示せないので、(主に速度に関する)お答えは難しいですよね。 その中でも例やヒントを示してくださった方々ありがとうございました。 内部的な処理は詳しくないのですが、試行錯誤しながら参考にさせていただきたいと思います。 皆さんレスありがとうございました。(_ _)
199 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 04:08:13 ] >>198 どういたしまして
200 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 08:54:56 ] 仕事丸投げするのはいいが、藻前さんが辞めた後にメンテする人のことも わかってやれよな。
201 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 09:31:06 ] 括弧に量指定子使うのきめえ
202 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 10:26:07 ] foo,bar,bazが3文字って決まってるならこれでどうよ。 $_ = '111AAAfoofoofoobazbarZZZ222'; /AAA(?:(foo|bar|baz)(?{push(@a,substr($&,-3))}))+ZZZ/; print join(",",@a),"\n";
203 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 11:15:13 ] つーか、そもそもどうしてそんなデータ構造なのかが気になる件。
204 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 11:30:16 ] 宿題?
205 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 13:27:01 ] ######################################## # データ内に改行が無ければ最初の二行は # $_ = <>; で置き換え可能 ######################################## chomp(@tmp = <>); $_ = join '', @tmp; $re = qr/foo|bar|baz/i; s!(AAA(?:$re)+ZZZ)!push @a,$1=~/($re)/g !ge; print join("-", @a); これはひどい。
206 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 13:37:01 ] qrのオプションは i じゃなくて o だった。
207 名前:デフォルトの名無しさん [2007/04/08(日) 15:55:23 ] perlでlogの基数が2の場合を求めるには何をつかうのが ベスト?? 車輪の再発明はしない方向で・・・
208 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 15:56:59 ] >>207 底の変換公式
209 名前:デフォルトの名無しさん [2007/04/08(日) 16:29:00 ] >>208 thx
210 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 21:57:13 ] 仕事で初めてPerl使うんだが難しいな('A`)
211 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 23:12:16 ] Cやってりゃ、Cのマクロ言語だと思って書いてれば当座はしのげる。 嵌りどころはあるが、「難しい」ではなく「勝手にいじるなよ!」ってな感じ。 Cの派生言語からでも同様。 「難しい」ってのは今までまっとうな言語の経験がないからじゃないかと思う。
212 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 23:59:21 ] つーか、Cみたいな型がキッチリしたのから移行すると、 なんとなく気持ち悪いw
213 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 00:12:22 ] >>212 Cの原始的な型じゃ、実際にコードを書くときたいして助けになってくれてないだろう。 目糞鼻糞だと思うんだけど。
214 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 00:21:03 ] 俺は、あくまでもテキスト処理用と考えたらすんなり入れた。 Cだと文字列めんどくせえし、C++と比べても正規表現処理のためのコード量がぜんぜん違うからな。
215 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 00:22:52 ] >>213 そうでもない。例えばプロトタイプ宣言をちゃんと使っていれば 誤った引数を渡したりしたときなど、コンパイルエラーとして コンパイルの時点で捕捉出来るし、プロトタイプ宣言自体が 関数の使い方に関する一番簡単なドキュメントになる。
216 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 00:27:16 ] >>214 テキストをちょろっと弄くるには便利だよね。 クラスやリスト、リファレンス等の基本的な仕組みが adhoc過ぎて汚いし(←個人的見解) プログラムが大きくなればなるほど型付静的言語の有り難味が増す。 Perlで小さいプログラム以上のものを書く気にはとてもなれない。 同じ動的言語でも、Pythonあたりならまだ許容量大きいかな。
217 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 00:28:33 ] そゆことだな。主にバイナリ扱うとなると、Cみたいなのが書きやすい。 文字列はperlみたいなのが楽だが。
218 名前:213 mailto:sage [2007/04/09(月) 00:40:57 ] >>215 ああ、そういえばそうだ。目糞鼻糞は撤回する。
219 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 00:41:27 ] >>217 バイナリとかバイト/文字単位の処理だとpack(), unpack()の嵐だわな。 それ考えると、文字列処理とか言っても正規表現使いやすいだけって希ガス。 エンコーディング周りもそんなに便利とは言えないし。
220 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 06:15:36 ] っ 適材適所
221 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 07:43:02 ] ある種の物事を異常に早く片付けられる、それがPerl。
222 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 19:15:26 ] 元々perlは文字列処理用なんしょ。 しかし、たとうばHTMLのタグを外す処理を書く ってなった時、 perlなら簡単だけど、Cで書くとなると工程からして憂鬱だ…。 regexp.dll使うけど、メモリリーク等に気を遣わないとで面倒だ…。
223 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 20:53:41 ] やっぱ言語組み込みのが楽だよね・・・正規表現は
224 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 21:53:11 ] >>222 まぁCで文字列処理はちょっとな。 どうしても(C++でなく)Cを使う必要があるのなら、せめて GCライブラリを使いたいところ。 C++なら、文字列処理は別に苦にはならないはず。 それとCで字句/構文解析ならlex/yaccを使う場合も 多いんじゃないかな。
225 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 17:49:24 ] この記事どうしてくれよう ttp://gigazine.net/index.php?/news/comments/20070410_libwww/
226 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 18:03:28 ] >>225 マジかと思ってUserAgentをlibwwwにしてググったらほんとに検索できなかった。 一時的な効果しか無いだろうに、アホな対応するなぁ…。 これからは適当なAgentを騙れってことでOK?
227 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 18:18:39 ] IEのにあわせておくもんだろ
228 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 19:15:26 ] >>226 libwww-perlを拒絶しても、本当に悪い奴は遮断できず、 入門過程の新参者を困惑させ余計な時間をとらせるだけ。 まさに1000害あって1利なし。
229 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 19:59:13 ] 所詮Google。
230 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 22:32:59 ] つまり、おまえらpython使えの意
231 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 22:39:48 ] その発想はなかったわ・・・
232 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 22:59:00 ] フォームへのスクリプト拒否してるからでしょ
233 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 00:55:09 ] >>232 んなもんどうでもなるやん。何の意味があるのかさっぱりわからん。
234 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 01:45:44 ] 2,3日で元のスパムの量に戻るに1ペリカ
235 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 10:26:47 ] 今更ながらどうもコマンドラインがよく飲み込めてないかもしれないので、 少しお尋ねします。 例えば perl -pi.bak -e "tr/A-Z/a-z/"*.html とか便利ですよね? これを.plとして使いたいのですが無理なのでしょうか? コマンドラインから打ち込むしか手がないのでしょうか?
236 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 10:40:03 ] >>235 perlrun(1)の-iオプションの説明のとこに例があるだろ。よく嫁。 From the shell, saying $ perl -p -i.orig -e "s/foo/bar/; ... " is the same as using the program: #!/usr/bin/perl -pi.orig s/foo/bar/; which is equivalent to #!/usr/bin/perl $extension = '.orig'; LINE: while (<>) { if ($ARGV ne $oldargv) { (改行大杉でおこられるので以下略)
237 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 10:40:50 ] pc11.2ch.net/test/read.cgi/php/1171102883/593 pc11.2ch.net/test/read.cgi/tech/1173880452/235
238 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 10:49:06 ] >>236 アリガトウございます。 なお、質問するスレが似つかわしくないと重い他スレにも同じ内容を質問させていただきましたが ご迷惑かけたようで申し訳ないです。
239 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 11:06:13 ] >>235 windowsだとどうも面倒なようなので他の手にします。お騒がせしました。
240 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 11:33:56 ] 手軽に使えるようになればいいだけなら、適切なオプション 与えたperlをsystemかexecで起動するようなスクリプト書く 手もあるよ。 病的に効率を気にする人にはお勧めしませんけど。
241 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 21:53:06 ] >>239 Windowsなら.batに書けばいいんじゃね? なんで.plにこだわるのかわからん
242 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 22:50:12 ] YAPC::Asia 2007 Tokyoのpodcastでてるけど、これは聞いとけってものある?
243 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 23:15:28 ] んだ
244 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 01:10:07 ] > YAPC::Asia 2007 Tokyoのpodcastでてるけど、これは聞いとけってものある? 馴れ合いなので、聞く必要なし
245 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 04:01:25 ] >>242 見事になんにもなし。
246 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 05:01:57 ] >>240 ありがとうございます。 >>241 いえ。こだわってないから他の手にするつもりです。 UNIX環境でないとなかなか不便なものなんですね。
247 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 22:58:40 ] >>246 >UNIX環境でないとなかなか不便なものなんですね。 この点は同意なんだけどね。 しかし、キミが不便だと言っている点についてオレは不便を感じたことはないな。
248 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 00:31:00 ] そんなに頻繁に使うようならスクリプトをちゃんと書けよ てかperlの質問じゃなくて、コマンドラインについての質問だよな・・・
249 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 13:30:37 ] >>247 >しかし、キミが不便だと言っている点についてオレは不便を感じたことはないな。 主観的且つ感情的な意味でしょうか?そうではないとしたら何か理由がおありですよね? 不便と思わない理由はなんでしょうか? >>248 スレ違いになるかもですね。 そろそろ退散したいと思います。
250 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 13:32:25 ] >そんなに頻繁に使うようならスクリプト ?
251 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 17:11:52 ] #!/usr/bin/perl # >>235 の望みを叶える夢のスクリプト: exec 'perl', '-pi.bak', '-e "tr/A-Z/a-z/"', shift; __END__
252 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 22:29:21 ] >>251 頭大丈夫?
253 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 22:41:39 ] 大丈夫な人も大丈夫じゃない人も大丈夫って答えるから 間抜けな質問というしかない。
254 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 22:55:57 ] >>184 @a = grep {/(foo|bar|baz)/} split /(foo|bar|baz)/ , $_;
255 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 23:30:26 ] こんばんは。 会社のHP作成を引き継いだのですが、わからないことがあるのでどなたか教えていただけないでしょうか。 コンボボックスを外部のテキストから読み込んでいるのですが、途中までしか表示されないのです。 0<>--<><> 1<>A<><> 2<>B<><> 3<>C<><> 4<>D<><> 5<>E<><> 6<>F<><> 7<>G<><> 8<>H<><> (中略) 14<>N<><> 上記が外部テキストの中身なのですが、コンボボックスには8までしか表示されないのです。 コンボボックスの方は #編集モード以外は表示するだけ、編集モード時はコンボボックスで表示 if (!$edit) {$html .= "<td align=\"center\"><table width=\"100%\">"; for ($l = 0; $l < $periods; $l++) { if ($showpname) { $html .= "<tr><td>$periodname[$l]</td>"; } $html .= "<td align=\"center\">$STATUSSTR[$stats[$l]]</td></tr>";} $html .= "</table></td>\n";} となっています。 全てを表示させるようにするにはどこを変えたらいいのでしょうか。 (これだけの情報では不十分でしたらすみません。 他にどんな情報が必要かも教えていただければ幸いです) Perl関連の本など読んでみたのですがわからなくて… 宜しくお願いします。
256 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 23:36:54 ] コンボボックスじゃなくて表で表示するコードに見えるが・・・。
257 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 23:48:58 ] >>256 さん あ、もしかしてここは関係なかったですかね… カレンダーの1日ごとにコンボボックスが入っているので、そのカレンダーの方のコードなんでしょうか… わからないことだらけのまま質問してしまってごめんなさい。 もう一度コードを見直してみます。
258 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 23:53:55 ] 読み込まれたテキストデータがコンボボックスのどの変数になってるのかがわからない。 perlコードの、$periods、$showpname・・・とやらが何なのかわからないと 何もアドバイス出来ないよ。
259 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 00:03:49 ] >>258 さん そうですか… $periodsなどなどは専門用語なのかなぁ、と思っていたのでそこから間違いだったのですね。 前任者とは全く連絡が取れず、初心者の私には何がなにやらさっぱりで… 失礼致しました。 もっと勉強して出直します!
260 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 00:23:13 ] periodつーたら何らかの「期間」じゃないのか?
261 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 00:39:39 ] >>260 さん 期間…カレンダー関係ですかねぇ。 日ごとにアルファベッドを選択して登録するんですけど、 何ヶ月か分をまとめて登録してそれをScriptで(?)違うページに呼び出すので、それですかねぇ… それにしても8番までしか出てこないのもどこかで指定してるんですかねぇ。 あまりにファイルが多すぎて、探すのに時間がかかりそうです…
262 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 00:52:49 ] >>255 本当にそのコードが該当コードなのかどうか怪しいね ありうるとすれば@STATUSSTRの中が"<select>…"といったhtmlになってるとか とりあえずPerlの配列変数は先頭の記号が $ だったり @ だったりするので それだけ注意して変数をさかのぼって行くとか お節介だけど$showpnameのif文、通らない場合に開始<tr>タグ欠けるよ
263 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 01:03:42 ] 俺なら解読するの諦めて書き直したくなるな
264 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 01:56:12 ] >>255 エスパーのおいらが予測するには、>>255 が挙げた箇所の次に } else { という行があり、その後の部分が問題の部分なんだろうな。
265 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 06:52:58 ] perlのソースコードの中に直接HTMLが書かれているなら 「type="select"」あたりで検索すれば、該当個所の近辺の コードに当たるんじゃないか?
266 名前:265 mailto:sage [2007/04/15(日) 06:55:31 ] 間違えた。「type="select"」じゃなくて「<select」だな。
267 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 23:51:49 ] >>255 さんには内緒で、実はその前任者さんをこのスレにお呼びしています^^。 実は前任者さん、その書き込みの様子をモニターを通して見ておりました。 では、心に引っかかっていた辛い過去。 あの時、伝えられなかった想いを今、、、
268 名前:デフォルトの名無しさん [2007/04/16(月) 00:50:06 ] perlの時代は終わった・・・ これからの初心者は、今の時代に合った言語を使ってくれ・・・ ・・以上
269 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 00:53:48 ] ruby?python?
270 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 01:04:26 ] 情報保護の時代だからな。 Whitespaceだろ。
271 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 04:53:46 ] 仕事をPHPいじってから、Perlを汚い言語だなんて言ってた自分の愚かさに気づいた。 Perlは消えなくていい。PHP、頼むから消滅してくれ。
272 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 04:56:25 ] s/(?<=仕事)を/で/
273 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 06:08:15 ] 255です。 皆さんどうもありがとうございます。参考になりました! ここで皆さんにお聞きするにはあまりにも自分が無知すぎて申し訳ないです。 更新は休みの土日しかできないので、来週までに色々調べてまた挑戦します。 >>262 さん なるほど… <tr>タグの件、ご指摘ありがとうございます! >>263 さん 書き直すなんて絶対無理ですので頑張って解読したいと思います… >>264 さん } else { って部分あります!! その部分に注意してみます。 >>265 さん 検索ですね。htmlがperlの中にあるので試してみます! >>267 さん 実は前任者とは全く面識がないので、あの時も何もあったもんじゃない、って感じなのですが…
274 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 14:16:33 ] >>225 すんげー今更だな google出来た頃から規約に書いてあるし www.google.co.jp/accounts/TOS
275 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 06:50:02 ] まさかLWP使ったらすべて自動クエリだとか思ってる訳じゃないよな。
276 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 06:59:52 ] >検索結果ページに対して ってあるからなぁ
277 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 13:36:22 ] 質問です $var = 010203 とあります これを $var = 01/02/03 このように2桁ごとにスラッシュを入れるにはどうしたらよいでしょうか? 0102 や 01、01020304 の場合などどの桁数にも対応したいです
278 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 13:43:51 ] perl -e '$var="010203"; $var=~s/([0-9]{2})/$1\//g;print $var;'
279 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 15:07:07 ] ありがとうございます できました
280 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 15:48:19 ] 正規表現の中にスラッシュがあるときはエスケープするより s{([0-9]{2})}{$1/}g とかの方が良い気がする
281 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 16:06:26 ] 0-9より\dのがいい気がする
282 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 16:11:38 ] '010203' のとき '01/02/03/' になる気がする
283 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 16:44:03 ] s{\d{2}(?=\d)}{$&/}g; かな
284 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 17:15:38 ] $& 使うくらいだったら普通に join したくなるなあ、俺は。 perl -le '$var = qq{010203} ; print join q{/}, ( $var =~ /(\d{2})/g )'
285 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 19:37:56 ] まあ一般には \d は 0-9 の必要条件であって同値ではないけどな。
286 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 19:46:31 ] こういうことか $ perl -e 'use utf8; print q[0] =~ /\d/' 1
287 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 22:03:19 ] J2EEの方がいい気がする
288 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 22:40:33 ] >>277 3桁区切りにカンマをつけるというのがよくあるから それを参考に好きなの使えば?
289 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 22:57:26 ] >>282 答えはそれでいいんだろ?
290 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 23:59:03 ] >>289 質問者の出してる例はそうは言ってないぞ。
291 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 03:02:24 ] >>277 Date::Manipでできんじゃね?
292 名前:壁| x ・)つ○ mailto:sage [2007/04/18(水) 03:09:07 ] こういうのは こうりつわるいですか? for ($i = 2; $i < rindex($var, ""); $i += 3) { substr($var, $i, 0) = "/"; }
293 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 12:07:56 ] $var = reverse( ( $var = reverse $var ) =~ s{(\d\d)(?=\d\d)}{$1/}g );
294 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 12:18:50 ] 近頃はs#・・・#・・・#って書き方見なくなったな
295 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 13:07:55 ] >>292 人間の読み書きの部分で効率悪いと思う
296 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 14:36:58 ] 1 while $var =~ s/(\d{2})(\d{2})/$1\/$2/g;
297 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 14:43:01 ] s/(\d{2})(?=\d{2})/$1\/$2/g
298 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 16:53:45 ] >>297 $2なんてないじゃん
299 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 17:11:53 ] >298 なにを言っているんだお前は。
300 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 17:40:37 ] いやさ、 (?= ) は後方参照を生成しないだろう? > perl -e "q/123/ =~ /(\d)(?=\d)(\d\d)/; print $2;" 23 そもそも、(?= )はゼロ幅先読みだろう。 > perl -e "q/123/ =~ /(\d)((?=\d))/; print $2;" (出力なし)
301 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 20:54:57 ] >>295 なるほど ワンライナーでさらっとかけるよう しょうじんいたします ・)つ● ←おれいのしな
302 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 10:56:55 ] >>300 そのとおり。適切な指摘ありがと。書いてから気がついた。 >>283 か、 s|(\d\d)(?=\d)|$1/|g みたいな感じで。
303 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 22:59:05 ] ファイル出力の質問です open IN , ">$failename"; print IN , "test; close IN; で、$filenameに絶対パスを入れたいんですが、なんかうまく言ってくれないんです Orz 助けてエロい人
304 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 23:02:26 ] >>303 > で、$filenameに絶対パスを入れたいんですが、なんかうまく言ってくれないんです Orz さあ、「なんかうまく言ってくれないんです」の「なんか」を推定するクイズです!!
305 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 23:08:28 ] これは流石に釣りだろう
306 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 23:11:10 ] エスパーの私がお答えしよう。 Windows で \ 記号がディレクトリ名の区切りなもんだから ダブルクォーテーションで括っただけだとエスケープと 解釈されちゃって変な文字列完成。→オープン→エラー。 そんなファイルはねえよヴォケと $! に入っている。
307 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 23:34:21 ] $failename (フェイルエネーム?) だからではないか・・・なんてことはないか。 そもそも IN じゃなくて OUT だろうと use Fatal qw(open close); open my $out, '>', $filename; print {$out}, "test"; close $out;
308 名前:307 mailto:sage [2007/04/19(木) 23:39:40 ] - print {$out}, "test"; + print {$out} "test";
309 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 23:40:55 ] {$out}
310 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 23:54:37 ] {$safe}
311 名前:265 mailto:sage [2007/04/19(木) 23:58:02 ] $failename =~ s/^/zettaipath\/;
312 名前:303 mailto:sage [2007/04/20(金) 00:05:38 ] みなさま マジでありがとうです こんな初心者をささえてくれてありがとお つω;
313 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 01:32:59 ] なんかうまく言えました
314 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 03:42:05 ] うまく言えないけれど宝物だよ
315 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 03:53:44 ] 僕たちはできる!! できるんだ!!
316 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 03:54:26 ] 最高ですか!!? 最高です!!!
317 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 12:14:51 ] プラス思考のスレはここですか?
318 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 15:30:27 ] プラス指向プログラミング POP
319 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 19:25:20 ] @http = $_ =~ /s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+/g; print FILEA @http; このような記述をしたら、 Variable "@http" is not imported at http-client.pl line 53. Variable "@http" is not imported at http-client.pl line 54. Global symbol "@http" requires explicit package name at http-client.pl line 53. Global symbol "@http" requires explicit package name at http-client.pl line 54. と言われました。 これは何のエラーですか!?
320 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 22:19:47 ] @httpを括弧でくくってください
321 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 23:21:12 ] >>319 Variable "@http" is not imported については、perldiagをどうぞ。 というか、「何の」もなにもperlが出しているエラーなんだからまずはここで調べるべし。 つ perldoc.jp/docs/perl/5.6.1/perldiag.pod とりあえず、use strictなのに @http が生で使われているのが原因ですので、パッケージを明示的に 指定して使うか、my宣言すればいいのでは。
322 名前:デフォルトの名無しさん [2007/04/21(土) 23:17:55 ] PDFを解析したいんですが、どのような方法で読み込んでいったらいいと思いますか? ちなみに、PDFの仕様として: ・改行文字はCR,LF,CRLF,のどれでもよい。 ・文字列内での改行文字はそのままのかたちで残さなければならない。 ・文字列内で(見た目のために)改行したいときは \改行文字 とする。 read(FILE, $buf, 512) ってのもめんどくさそうだし、できれば while(<FILE>) で 済ましたいんですが、意味のある改行もあるしなぁ。。。
323 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 00:20:39 ] >>322 何をしたいのか知らんが、まずCPANでPDF関係のモジュールを サーチしたほうがいいね。 あなたがしたいことを既に実現しているモジュールがあるかもしれないし、 少なくとも、改行文字の扱い方については、ソースの中にお手本が あると思うし。
324 名前:303 [2007/04/22(日) 04:50:29 ] 303ですが またまた超初心者な質問です。 requier './jcode.pl'; sub jis { $msg = $_[0]; &jcode'convert(*msg, 'jis'); } ってコードがあったのですが &jcode の後ろについている ' の意味がわかりません。 もしかして &jcode::convert(*msg,'jis'); と同義ですか? エディターの色分けが気持ち悪くなるので直したいです。教えてエロい人 Orz
325 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 05:35:13 ] Perl4
326 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 05:37:45 ] >>324 エロい人よりマニュアルに頼ろうよ。 <q cite="www.kt.rim.or.jp/~kbk/perl5.005/perlmod.html"> 古いパッケージ区切り子はシングルクォートでしたが、 現在はダブルコロンを使うのが推奨されています。 </q> mikeneko.creator.club.ne.jp/~lab/kcode/jcode.html#h2-2
327 名前:324 mailto:sage [2007/04/22(日) 11:13:18 ] なるほど! ありがとうございました >< Jcodeの使い方も含めて勉強してきます ><ノ
328 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 14:43:25 ] CPAN でインストールする際に以下のようなメッセージが出て失敗します。 Undefined subroutine &Compress::Zlib::gzopen called at /usr/local/lib/perl5/5.8.8/CPAN.pm line 5721. 何をインストールしても大体このエラーが出て失敗します。 Zlib は、 /usr/local/lib/perl5/site_perl/5.8.8/Compress/Zlib.pm にあって、サブルーチン gzopen もありました。 また、@INC に /usr/local/lib/perl5/site_perl/5.8.8 は含まれていました。 どこに問題があるか分からないのですが、教えてもらえないでしょうか。 環境は、 OSX 10.4.9 で Perl 5.8.8 を /usr/local/bin にインストールしました。
329 名前:デフォルトの名無しさん [2007/04/22(日) 16:09:08 ] >>328 あえて /usr/bin/perl ではなく /usr/local/bin/perl を使いたいわけね? で、実際に使ってる(環境変数 PATH で優先的に参照される)のは /usr/bin/perl ではなく、 /usr/local/bin/perl ってことに間違いはない?
330 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 16:35:51 ] >>329 レスありがとうございます。 >あえて /usr/bin/perl ではなく /usr/local/bin/perl を使いたいわけね? はい。ソースコードからインストールしたらそこにインストールされたので、 /usr/local/bin/perl を使っています。 >で、実際に使ってる(環境変数 PATH で優先的に参照される)のは /usr/bin/perl ではなく、 >/usr/local/bin/perl ってことに間違いはない? 間違いないはずです。 which perl で確認しました。 CPAN.pm の該当箇所をみると、 $CPAN::META->has_inst("Compress::Zlib") で判定した後に、 Compress::Zlib::gzopen を呼び出していました。 そこで gopen がないとなる理由がよく分かりません。
331 名前: ◆TWARamEjuA mailto:sage [2007/04/22(日) 17:40:08 BE:2287837-2BP(6823)] >>330 > >で、実際に使ってる(環境変数 PATH で優先的に参照される)のは /usr/bin/perl ではなく、 > >/usr/local/bin/perl ってことに間違いはない? > 間違いないはずです。 > which perl で確認しました。 $env してみると判るけれども標準ではpathが通っていないと思うですです。 PATH=/bin:/sbin:/usr/bin:/usr/sbin @MacOSX 10.4.9 もっぺん確認してみよう♪ ♯tu-ka未だに5.8.6のままなんだよなぁ。。。(´・ω・`) $ perl -v This is perl, v5.8.6 built for darwin-thread-multi-2level (with 3 registered patches, see perl -V for more detail)
332 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 17:55:38 ] >>331 レスありがとうございます。 $env で確認してみましたが、先頭に/usr/local/binがありました。 PATH=/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin こうなるように、以前./bash_profile に追加しました。 となると、原因は不明でしょうか? インストールの仕方が悪かったのかなあ。
333 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 20:53:01 ] CPANなんてまともに動作すると思うほうがおかしい。 手動で入れろ。
334 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 21:21:50 ] >>323 THX PDFファイルのすべてを把握するのが目的です。 CPANをみたところ、PDFのテキストや書誌情報を抽出したりするためのAPIは用意されてる のですが、もっと低レベルなパーサーがないようです。。 各種トークンが出現するたびにイベントを起動するような奴がほしいんですが。 HTML::ParserのPDF版でPDF::Parserみたいな感じの奴です。
335 名前:デフォルトの名無しさん [2007/04/22(日) 23:26:59 ] 日曜潰してまだ分からないので、どなたか助けてください\(ToT)/ UTF-8でURIエスケープされた文字列を、アンエスケープするPerlの処理でけつまづいてます。 元の文字列をURIエスケープした文字列がサーバ側まで来ているのは確認しました。 「質問」→「%E8%B3%AA%E5%95%8F」だとか、「ü」→「%C3%BC」だとか。 これを $utf8str =~ s/%([a-f\d]{2}/pack('H2',$1)/egi; しても、正しくアンエスケープされない(文字化けする)のです。 UTF-8が可変バイトなのが曲者なのでしょうか。。。 ググった先(ttp://oshiete1.goo.ne.jp/kotaeru.php3?q=1644542)の $utf8str =~ s/%(e[a-f\d])%([a-f\d]{2})%([a-f\d]{2}/pack('H2',$1).pack('H2',$2).pack('H2',$3)/egi; してもやはりだめでした。
336 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 23:56:33 ] >>333 むあじっすか。
337 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 23:59:22 ] >335 use Encode qw/from_to/; my $str = '%E8%B3%AA%E5%95%8F'; # utf8の'質問'をエスケープ (my $dec = $str) =~ s/%([a-f\d]{2})/pack 'H2', $1/egi; from_to($dec, 'utf8', 'cp932'); # Winのコマンドプロンプトで表示するのでcp932にしてる print $dec; とりあえずこれで動いてるけど? ブラウザに出してるんなら、Shift_JISって解釈されてるとかじゃない??
338 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 00:01:31 ] >>335 > $utf8str =~ s/%([a-f\d]{2}/pack('H2',$1)/egi; $1のための括弧が閉じられてません。 あとは、UTF-8に対応したEditorで開いてないとかでしょうか。 上の式で正しくアンエスケープされました。
339 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 00:35:06 ] 括弧閉じ忘れでごめんなさいorz >>337 さんのスクリプトを実行したところ、文字化けしませんでした。 また、from_toする前でも、ファイルにリダイレクトして、 そのファイルをエディタで開いても同様に文字化けしていませんでした。 しかし、サーバに持って行ってブラウザに結果を出すと文字化けしてしまいます。 エディタはUTF-8に対応していて、Perlスクリプトもutf-8で保存して、 use utf8; use open ":utf8"; use open ":std";して、 print "Content-type: text/html; charset=utf-8\n\n"; いるのですが、 >>337 さんのものでprint $dec;でもprint $str;でも駄目(文字化け)でした。 環境はWin XP SP2 + IE7、[表示]-[エンコード]でもUTF-8であることを確認しているのですが。。 。 度々で申し訳ないのですが、他に何か怪しい箇所がありますでしょうか?
340 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 00:49:03 ] #!/usr/bin/perl my $str = '%E8%B3%AA%E5%95%8F'; (my $dec = $str) =~ s/%([a-f\d]{2})/pack 'H2', $1/egi; print "Content-Type: text/plainl; charset=utf-8\n\n"; print $dec; __END__ とりあえず手元だとこれで動いてる。まずは問題の発生する最小限のコードまで切り詰めてみ?
341 名前:337 mailto:sage [2007/04/23(月) 01:17:20 ] ありがとうございました!解決しました。 use open ":std";が余計でした(よく分からないのに「おまじない」で書くのは駄目でしたね)。 問題のスクリプトから上記を除いて、かつ、 自分で作って読んでいるモジュールからも上記を除きました。 本当にありがとうございます!
342 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 01:18:56 ] 自分(↑)は>>337 さんでなくって>>335 でした。お目汚しでごめんなさい。 標準入出力を使わないなら、use open ":std";等は確かに不要でした。
343 名前:335 mailto:sage [2007/04/23(月) 03:15:36 ] 事後報告がてら・・・ use open ":std";を外せばアンエスケープで文字化けしないものの、 今度は後続処理でUTF-8な文字を処理できないという問題がありました。 結局、以下のサイトを参照して、 ttp://naoya.dyndns.org/~naoya/mt/archives/000611.html use open ":std";は残したままで、アンエスケープ処理の後に utf8::decode($str);でUTF8フラグを落とせば、 スクリプトへのUTF-8文字列の受け渡しも、後続処理も、うまく行きました。 夜更けにお答えくださって、本当にどうもありがとうございました。 これで安心して眠れそうです。
344 名前:デフォルトの名無しさん [2007/04/23(月) 18:08:16 ] ■ Perl言語 ■ 何でも質問コーナー ■ mixi.jp/view_bbs.pl?id=17607679&comm_id=1401396 Perlに関すること、cgiに関すること なんでも質問できるコーナーです(たとえばApacheとかでもOKとします!) (Web系であればOK) ルール: Google検索で調べてわかるようなことでも質問してもOKです (初心者のうちは、どの情報を取捨選択したらイイのかわからないと思うので) 回答してくださるかたは、暖かく質問者を迎えてやってください o(^^o) (o^^)o
345 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 18:19:57 ] そのトピック自体はどうでもいいんだが コミュニティのタイトルとか説明文が凄く気になって仕方が無い。
346 名前: ◆TWARamEjuA mailto:sage [2007/04/23(月) 19:56:34 BE:3485748-2BP(6823)] コミュニティの名前 PERL言語 CGI言語 コミュニティの説明 perl言語 cgi言語のコミュニティです だそうです。。。
347 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 04:11:19 ] Web系NGなこのスレとうまく連携していければいいですねo(^^)o
348 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 08:17:44 ] 未だにCGIが(ry
349 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 10:36:14 ] ダメそうなコミュだなw
350 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 22:51:58 ] どうしようもない質問の数々に、「ちったぁマニュアル読んでください!」と、 最後に管理者がキレるに1票。
351 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 02:27:30 ] いやあ管理人もろくすっぽ読んでないんじゃないか?
352 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 11:12:27 ] 実は、管理人自身が2ちゃんねるで質問したところ、 「ググれカス」だの「マニュアル嫁」みたいな回答しか 返ってこなかったので、管理人にやさしく教えてくれる ところが欲しかったんじゃないの?
353 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 12:06:40 ] >>352 もちろんそうでしょ。 そうじゃなきゃルール書きの冒頭が「Google検索で調べて わかるようなことでも」で始まるわけないっすよ。
354 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 12:33:51 ] モヒカン族はお断りです><
355 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 17:38:48 ] モヒカン族の土地に侵入してきたくせに、大きい顔をするな
356 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:00:43 ] 座り込んで動かない、口だけ達者なでっぷり太ったモヒカン族ほど 役に立たないものはない。 川に流してしまいたい。
357 名前: ◆TWARamEjuA mailto:sage [2007/04/25(水) 20:55:45 BE:980633-2BP(6824)] 不法投棄しちゃダメです♪
358 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 21:32:05 ] 食肉に加工するというのはどうだろう
359 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 22:08:09 ] 強くなれ!! と願いを込めて、子供たちに食べさせるとよいね。
360 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:13:46 ] 弱者の肉なんかいくら食べても強くなれないよ
361 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 23:27:06 ] 食べるのなら、戦場で最前線に立つモヒカンを食べよう。
362 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 09:20:12 ] / : 》:、∩ (===○=)/ センセー __ / ⇔ / 話しについてけませーん \⊂ノ ̄ ̄ ̄\ ||ヽ|| ̄ ̄ ̄ ̄|| ...|| ̄ ̄ ̄ ̄||
363 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 22:17:39 ] >>346 CGI言語と来たか・・・。 本当に作ってしまって混乱させるというのはどうか? もちろんその言語はクライアントマシンの限られた 中でしか使えず、 Web の CGI になんて使えないのだ。
364 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 22:18:42 ] Common Graphics Interface とかいう紛らわしいグラフィック操作用言語を新たに作る。
365 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 23:07:10 ] parrot上で走らせたらもっと混乱の元に。
366 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 23:15:11 ] コモン グラフィックス インタープリター 池袋で乗車してきた女の子がハロプロエッグの子とかたかまりこ
367 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 11:39:27 ] ついでだ。IT言語というのも作ってしまえ。
368 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 11:57:03 ] そろそろここは質問箱だということを思いだそう。
369 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 15:28:36 ] そういえば Perl の質問がないなあ・・・。
370 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 15:34:31 ] Chanto Gugure Internet de
371 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 17:29:18 ] perlってグーグル八分されてるんだってね
372 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 18:13:20 ] WindowsでDOSコマンドの結果を取り込むには、 どうすればよろしいでしょうか?例えば、 dir c:\trash の結果を取り込もうとしても、次のスクリプトではうまくいきません。 $files = `dir c:\\trash`; print "The files are $files\n";
373 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 18:43:53 ] GW前に出された宿題で質問が増えるから大丈夫w
374 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 18:53:55 ] >372 手元だとそれでうまくいってるけど。
375 名前:372 mailto:sage [2007/04/27(金) 20:04:12 ] >>374 すみません。書き忘れていました。>>10 にある先頭の5行を入れていました。 use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; 「use open IO => ":encoding(cp932)"; 」の行を削除して 次のように修正すると動きました。 use Encode; $orgfiles = `dir c:\\trash`; $files = decode('cp932', $orgfiles); print "The files are $files\n";
376 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 21:23:44 ] >>372 例によって cmd.exe /c dir ... じゃない?
377 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 21:24:53 ] 失礼、関係なかったのね。
378 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 21:35:08 ] >371 記号が多いから、とか?
379 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 22:21:10 ] >>378 うんにゃ、LWPのUAがはじかれる件でしょ?
380 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 22:23:19 ] >>378 Perlで書かれたボットの多くがLWPのデフォルトUser-Agentをそのまま名乗って おり、403を食らうようになった。当然だがUAを変えれば通れる。
381 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 22:24:27 ] Google八分ってのは、Googleの検索結果に出なくなる話だから、 今回のそれとは違うよな。
382 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 22:30:29 ] 新しく覚えた言葉を使ってみたかっただけだろ そう責めるな
383 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 00:19:39 ] perlのモジュールって一気にアップデートできないの? それとも使う奴だけ手動でアップデートさせるしか方法ない?
384 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 00:39:19 ] >383 cpanシェルでupgrade
385 名前:378 mailto:sage [2007/04/28(土) 01:18:47 ] Perlに限らないけど、プログラミング言語の仕様として存在する演算子や記号は検索しづらいよなあ。
386 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 03:22:17 ] 不満を抱えるものが改善する。それが基本である。
387 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 05:09:49 ] でもそれを誰かが改善したらPythonっぽい何かになるからPythonでいいよねw
388 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 17:56:47 ] 比較演算子は記号じゃなくて文字列にすりぁいいんだよな Pealのeqとかみたいにさ
389 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 19:26:07 ] >>380 なったと言っても数年前からだよ。 今頃騒いでるやつらはアンテナが低すぎると思ったのだった。
390 名前:デフォルトの名無しさん mailto:sage [2007/04/29(日) 01:57:47 ] struct { char len1; char word1[len1]; char len2; char word2[len1]; char len3; char word3[len1]; } みたいな構造の可変長のバイナリなデータがあるんですが、 これをperlで綺麗でかっこよく展開する方法ってないですか? 今は下のようなことをしてるのですが、なんか見辛いし汚いので… $data = "\4ABCD\3EFG\7HIJKLMN"; ($len1,$data) = unpack("Ca*",$data); ($word1,$data) = unpack("a${len1}a*",$data); ($len2,$data) = unpack("Ca*",$data); ($word2,$data) = unpack("a${len2}a*",$data); ($len3,$data) = unpack("Ca*",$data); ($word3,$data) = unpack("a${len3}a*",$data); print "$word1\n$word2\n$word3\n";
391 名前:デフォルトの名無しさん mailto:sage [2007/04/29(日) 03:40:49 ] 少なくともループ構造にするべきだと思う
392 名前:デフォルトの名無しさん mailto:sage [2007/04/29(日) 04:06:37 ] >>390 perldoc -f pack して目を皿のようにして熟読せい。 The "/" template character allows packing and unpacking of strings where the packed structure contains a byte count followed by the string itself. You write *length-item*"/"*string-item*.
393 名前:デフォルトの名無しさん mailto:sage [2007/04/29(日) 05:12:56 ] >>392 あああああ、そんなテンプレートがあったんですね。 日本語の5.6ベースのman見てたので気づきませんでした… ありがとうございます。
394 名前:デフォルトの名無しさん mailto:sage [2007/04/30(月) 02:59:39 ] >>393 あ、すまん。 5.6からの拡張だと思ってたが、違ったか(393には問題ないみたいでよかった)。
395 名前:デフォルトの名無しさん [2007/05/01(火) 17:38:05 ] ファイル内の文字列を置換するスクリプトを書いているところなのですが、 「置換する」「置換しない」(飛ばす)「残り全て置換」「キャンセル」という 処理を行うにあたって、見つけた文字列を置換せずに飛ばして次を置換する 方法が思いつきません。置換しないテキストは適当な文字列に置換しておいて 最後に戻すという方法も考えたのですが、あまりスマートではないと思いまし た。何かよい方法があったら、お知恵をお貸しください。 while($text =~ /($regexp)/) { if($all == 0) { $before = $1; $after = $1; $after =~ s/$regexp/$replace/m; print "置換前:\n$before\n置換後:\n$after\n"; do { print "置換する? [y]es [n]o [a]残り全て [g]キャンセル "; $key = <STDIN>; chomp($key); } while ($key ne "y" and $key ne "n" and $key ne "a" and $key ne "g"); if($key eq "y"){ $text =~ s/$regexp/$replace/m; }elsif($key eq "n"){ # ここをどうする? }elsif($key eq "a"){ $text =~ s/$regexp/$replace/gm; $all = 1; }else{ exit; } }elsif($all == 1) { $text =~ s/$regexp/$replace/gm; } }
396 名前:395 [2007/05/01(火) 17:39:43 ] 補足です。$textはファイルの内容、$regexpは置換前の文字列、$replaceは 置換後の文字列です。
397 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 17:51:02 ] >>395 ヒント: posと\G perl -e '$x = "aaaaaa"; pos($x) = 2; $x =~ s/\Ga/x/; print $x,"\n";' aaxaaa
398 名前:395 [2007/05/01(火) 21:09:08 ] ありがとうございます、無事できました。コードはこのようになりました。(たぶん問題ないはず…) $p = 0; while($text =~ /\G(?:.*\n)*?.*?($regexp)/gm) { $p = pos($text) - length($1); pos($text) = $p; if($all == 0) { $before = $1; $after = $1; $after =~ s/$regexp/$replace/m; print "置換前:\n$before\n置換後:\n$after\n"; do { print "置換する? [y]es [n]o [a]残り全て [g]キャンセル "; $key = <STDIN>; chomp($key); } while ($key ne "y" and $key ne "n" and $key ne "a" and $key ne "g"); if($key eq "y"){ $text =~ s/\G$regexp/$replace/m; pos($text) = $p + length($after); }elsif($key eq "n"){ pos($text) = $p + length($before); }elsif($key eq "a"){ $text =~ s/\G$regexp/$replace/gm; $all = 1; }else{ exit; } }elsif($all == 1) { $text =~ s/\G$regexp/$replace/gm; } }
399 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 21:31:38 ] \Gの使い方がおかしいような 最後の全置換は絶対うまくいかんだろ
400 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 22:01:18 ] せっかく書いたんだからたぶんとかいってないで動かしてみるべきだな。
401 名前:395 mailto:sage [2007/05/01(火) 22:02:38 ] すみません、やっぱ問題がありました。置換位置\Gが正規表現に含まれている と、置換される文字列に改行が含まれている際に、オプション"g"をつけても 複数置換してくれなくなってしまうのですが、どうすればいいんでしょうか。 perl -e '$text = "a\na\na"; $text =~ s/\Ga/b/gm; print "$text\n";' 結果: b a a perl -e '$text = "aaa"; $text =~ s/\Ga/b/gm; print "$text\n";' 結果: bbb perl -e '$text = "a\na\na"; $text =~ s/a/b/gm; print "$text\n";' 結果: b b b
402 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 22:23:56 ] \Gは置換文では使わないほうがいいよ。代入されるとposがリセットされてしまうから あとを置換しながらposを保持することはできないのでコピーを作ることを考えてみては 自分ならこう書く my $replaced_text; pos $text = 0; while (pos $text < length $text) { if ($text =~ m/\G $regexp/gcsx) { # ここで入力による分岐処理を行う } elsif ($text =~ m/\G(.+?) (?=$regexp)/gcsx) { $replaced_text .= $1; } else { $text =~ m/\G (.*)/gcsx; $replaced_text .= $1; }
403 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 22:28:17 ] s///gが一種のループなのでこんな手もある。 my $mode; $text =~ s{($regexp)}{ my $r; if (!defined $mode) { my $key; do { print "置換する? [y]es [n]o [a]残り全て [g]キャンセル "; $key = <STDIN>; chomp($key); } while ( $key ne "y" and $key ne "n" and $key ne "a" and $key ne "g" ); if ($key eq 'y') { $r = $replace; } elsif ($key eq 'n') { $r = $1; } elsif ($key eq 'a') { $mode = 'a'; } else { $mode = 'g'; } } if ($mode eq 'a') { $r = $replace; } elsif ($mode eq 'g') { $r = $1; } $r; }gme;
404 名前:395 [2007/05/01(火) 23:34:11 ] >>402-403 おお、これはすごい、正規表現でループができるんですね。 >>403 の方法できれいなスクリプトになりました。ありがとうございます。
405 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 03:13:40 ] CPANシェルについてなんですが、 インストールするごとに[1]とか[2]とか増えるのはなんなんでしょうか?
406 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 03:44:02 ] >>405 現在実行したコマンドを識別するIDみたいなもの。 何に使ってるかまでは見てないけど。 ちなみに↓とやるとIDを変えてしまうこともできる。特に意味はない。 cpan[1]> ! $CPAN::CurrentCommandId = 100;
407 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 05:56:50 ] >>406 レスありがとうございます。 そうなんですか。 なんか Bundle::CPAN をインストールしてからそうなったような気がしたので、 間違えたかと思いました。 そのような情報ってどこで得ているのでしょうか?
408 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 09:35:32 ] モジュール(lib/CPAN.pm)のコードを読む。
409 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 14:03:43 ] >>406 知らないけど、ヒストリ用では? よくUNIX用のシェルであるんだけど、 ! の直後にその番号入れて 実行するとその番号のコマンドが動くんだよ。全く同じなら再入力 する必要がないの。(更に後ろに :s/// のようなのを付けて文字列 置換できたりもする。 !30:s/aa/bb/ みたいな。全てのシェルが 同じこと出来るかどうかは知らないが)。
410 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 21:18:49 ] cpanpのメリットがイマイチわからん
411 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 21:20:37 ] 最近CPAN.pmがだいぶ進化したからCPANPLUS.pmの意義が相対的に薄くなったしねー
412 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 06:35:39 ] awkは多少かじったのですが、perlはまるっきりの初心者です。どなたかお知恵を貸して下さい。 2つのファイル a.txt と b.txt を比較して、条件にあった行を抽出、出力するスクリプトを作りたいのです。 具体的には、 [a.txt] ID, field1, field2 1, 5.8, 7.3 2, 6.3, 8.2 3, 3.2, 4.1 4, 4.8, 4.0 5, 8.3, 10.2 [b.txt] ID, field1, field2 1, 6.8, 7.7 3, 4.3, 5.5 4, 5.9, 4.9 というファイルがあったとき、b.txt のIDに数値が存在する行だけを a.txt から抽出して a2.txt として保存したいのです。 [a2.txt] ID, field1, field2 1, 5.8, 7.3 3, 3.2, 4.1 4, 4.8, 4.0 と言った具合にです。よろしくお願いします。
413 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 07:47:00 ] #!/usr/bin/perl use strict; use warnings; open my $a, '<', 'a.txt' or die; open my $b, '<', 'b.txt' or die; my %ids = map { $_ => 1 } map { (split /,/)[0] } <$b>; while (<$a>) { my $id = (split /,/)[0]; print if $ids{$id}; }
414 名前:412 mailto:sage [2007/05/03(木) 08:00:05 ] >>413 さま 早速のレス、ありがとうございます。助かりました。 こんなに簡単にできちゃうんですね。しかし、私にはスクリプトの内容は不明...。解読して勉強させていただきます。
415 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 13:36:22 ] use IO::File; sub func { my $file = shift(@_); my $input = IO::File->new($file,"r") or die; ごにょごにょ ・ ・ } $filename = (ディレクトリからファイルネームをとるロジック); &func($filename); みたいに書くと、一番最初にいきなりファイルオープンのエラーが出ます。 その後、ファイルネームをとるロジックが走ってる模様…。 何故か解らないのですが原因解りますでしょうか。
416 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 13:48:01 ] >>415 原因はわかりますよ。 あんたが、そう動くようにプログラムを作ったから。
417 名前:415 mailto:sage [2007/05/03(木) 13:53:53 ] >>416 早い回答ありがとうございます。 やっぱり自分が悪いんですね。 調べてみます。
418 名前:415 mailto:sage [2007/05/03(木) 14:26:25 ] うーんやっぱり解らない…。 サブルーチンが先に実行される事なんてあるのか…?
419 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 14:50:10 ] >>415 まあエラーメッセージでも貼ってみ
420 名前:415 mailto:sage [2007/05/03(木) 15:05:12 ] >>419 そのようなファイルやディレクトリはありません at (何行目) としか出ないんですが…。
421 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 15:08:03 ] >>420 訳したりせずにそのまま貼れ
422 名前:415 mailto:sage [2007/05/03(木) 15:16:54 ] そのようなファイルやディレクトリはありません at test.pl line 32. だけです。 CentOS4.4、perl5.8.5です。
423 名前:415 mailto:sage [2007/05/03(木) 15:30:01 ] フルパス指定してなかった…。 >>422 さん、親身になってくれてありがとうございます。 くだらないミスで申し訳ありません。 本当にすみませんでした。
424 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 15:40:40 ] >>423 s/422/421/g;
425 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 15:47:38 ] 突っ込みどころはいろいろあるけど、エラーメッセージは自分のためにも他人のためにもわかりやすくすべし。 my $fp_in = IO::File->new($filename, "<") or die qq(cannot open '$filename': $!);
426 名前:415 mailto:sage [2007/05/03(木) 16:07:57 ] >>425 了解です。ただ or die $!;だけしてました。 連休中にコメントありがとうございました。
427 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 14:17:50 ] chompって何の略ですか?
428 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 14:26:54 ] >>427 略じゃないよ。 噛み切るとかそんな感じ。
429 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 14:41:24 ] chomp 【自動】 〜をムシャムシャ食う◆【同】champ
430 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 14:43:41 ] へー。ありがとうございました。
431 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 15:30:31 ] オブジェクト指向で書いていないので、巨大モジュールの分割がうまいこといかんのです>< 具体的には、親パッケージが子パッケージをuseしているとき、 子パッケージから親パッケージのサブルーチンを呼べません。 Giko.pm [------- package Giko; use Giko::Mona; (omaemonaサブルーチンをEXPORTしている) sub omaemona { .... } -------] Giko/Mona.pm [------- package Giko::Mona; -------] となっていた場合、 Giko::Monaの中でomaemonaを呼ぶ方法は、Giko::omaemonaしかないでしょうか? Giko::Monaでuse Gikoはできないし、use base 'Giko';は違うみたいですし。
432 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 17:12:46 ] Encodeモジュールのfrom_toを用いて 「@」「A」や「T」「U」などを sjis <-> euc-jp 変換すると文字化けしてしまいます。 回避するにはどうすればいいでしょうか?
433 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 19:33:33 ] >>432 つEncode::EUCJPMSのcp51932
434 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 20:32:56 ] それは拡張文字なので、 sjis じゃなく cp932 を指定。
435 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 20:40:22 ] 単純に分割するなら、全部同じ名前空間に展開すればいいんじゃない Giko/Mona.pm [------- package Giko::Mona; package Giko; -------]
436 名前:431 mailto:sage [2007/05/06(日) 01:14:39 ] 遅レスで申し訳ないです。 >>435 なるほど。 まとめると巨大ファイルになりがちで不安だったのですが、 今のところはまだなんとか1ファイルにまとめられそうなので、 同じファイルスコープで仲良く共存してみます。 ありがとうございました。
437 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 17:12:14 ] 例 ( split /\//, $x )[0 .. bar]; リストの末尾要素を除いたリストを返す方法、知りませんか? barをどう記述すりゃいいのやら。 Perl ならできそうな気がするんですが。思い当たりません。 検索してみたものの、それらしいものも見つけられません。
438 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 17:31:22 ] ( @hoge, undef ) = split //, $foo ; じゃダメなの?
439 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 17:43:01 ] >>437 尻尾だけ消すのじゃだめなの?
440 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 17:44:40 ] 最後から2番目の要素をひとつ抜き出すだけなら (〜)[-1] でいいんだけど、範囲演算子で(〜)[0..-1]とは書けないんだよな。 配列変数なら@x[0..$#x-1]という書き方もあるが、リストでは$#xに 相当するものが書けない。 とりあえずおもいついたのはこれ。 sub{@_[0..$#_-1]}->(〜)
441 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 18:03:14 ] >>437 @list = split(/\/(?=.+\/)|\/.+$/, $x) とかやってないで、全部入れてから$#list--すればいいんじゃね?
442 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 18:31:19 ] >>429 首チョンパの略と思ってた
443 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 18:38:52 ] まずchopありき。 やがてより安全なchomp生まれり。
444 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 18:52:28 ] え…普通にpop関数じゃだめなの
445 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 19:51:31 ] popの第1引数は左辺値つーかARRAYじゃないと×じゃ?
446 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 20:19:01 ] splice @{[split /\//, $x]}, 0, -1 というのはどうだ
447 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 20:35:56 ] ちょんぱ
448 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 21:07:48 ] # 悪い例 (split /\//, $x)[0..(split /\//, $x)-2]
449 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 21:21:14 ] >>448 scalar contextのsplitは@_を上書きしちゃうからねぇ。
450 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 22:19:22 ] (split m{/})[0..(s{/}{/}g)-1]
451 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 00:17:23 ] みんなよく頑張ったな。先生感心したぞ。 my $str = 'foo/bar/baz/quux'; sub p { printf ">>%d:[%s]\n", shift, join ',', @_ } p(438, (my @arr, undef) = split m{/}, $str); p(439, do { @arr = split m{/}, $str; pop @arr; join ',', @arr }); # & >>444-445 p(440, sub { @_[ 0 .. $#_ - 1 ] }->(split m{/}, $str)); p(441, split m{/(?=.+/)|/.+$}, $str); p(446, splice @{[ split m{/}, $str ]}, 0, -1); p(448, (split m{/}, $str)[ 0 .. (split m{/}, $str) - 2 ]); p(450, (split m{/}, $str)[ 0 .. $str =~ tr|/|/| - 1 ]); p(451, $str =~ m{(.+?)/}g);
452 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 00:52:33 ] >>451 my $str = 'foo/bar/baz/quux'; を my $str = '/foo/bar/baz/quux/'; にすると、いろいろ違いが出てくるね。
453 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 00:58:21 ] >>451 重箱の隅つつき。 p(451 の行の正規表現。(.+?) ではなく(.*?) でなければ split を用いた他の例と挙動が違うぞ。 $str = q{/foo/bar/baz/quux} で確かめろ。
454 名前:437 mailto:sage [2007/05/07(月) 01:10:11 ] 多くのお返事ありがとうございました。 >440 単純な範囲演算子で記述できそうに思った私が考え足らずだったようです。 sub { @_[0 .. $#_ - 1] }->(split /\//, $x) は見た目にわかり易いですね。 いろいろ応用できそうだし。しかし、私は露とも思い至りませんでした。 >441 まぁ、そうなんですよね。 $file = "/usr/local/bin/bar"; # ファイル名が与えられて。。。 $fold = join "/", 〜split /\//, $file を使った記述〜; # フォルダ名を得る。 ここで余分に変数を使わず、可読性も損なわない方法がありそな気がしたもので。 >446 splice の第一引数はARRAYしかダメだと諦めてしまったのです。 リファレンスについて熟知すると、こんなやり方に気付くんですね。 自分の頭の硬さとリファレンスに対する理解の浅さを恥じて 精進したいと思います。 まず、>440 さんと >446 さんの方法、どっちを使うか悩みます。
455 名前:デフォルトの名無しさん [2007/05/07(月) 01:17:53 ] >>454 いいからFile::Specを使え。
456 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 01:19:48 ] >>454 いや、可読性が低下するから、いったん配列に入れてからスライスした方がいいと思うぞ 上のは遊びなんだから
457 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 02:28:37 ] こういうよくありそうな処理が案外スラっとかけないもんなんだね。 Dだと [0 .. $ - 1] でいけるんだが。
458 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 05:57:16 ] >>456 しかし落ち着いて俯瞰すればこういう雑用の可読性を気にする時点でそのソース全体が残飯ですね。
459 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 08:33:53 ] 超初心者でふが良いですか? 標準のキーボードから入力を受け取ってどうやれば入力を反映させれるかわからないです・・・ #!/usr/local/bin/perl -w require 'jcode.pl'; print"あなたはどれを使いますか?<br/>\n1:ドラゴン<br/>\n2:ゴーレム<br/>\n3:こねこ<br/>\n"; while(<>){ if($_=m/3/){print"これはこねこ"}; }; ↑これでは3を入力するたびに、これはこねこって出てくるんですが、 #!/usr/local/bin/perl -w require 'jcode.pl'; print"あなたはどれを使いますか?<br/>\n1:ドラゴン<br/>\n2:ゴーレム<br/>\n3:こねこ<br/>\n"; while(<>){ if($_=m/3/){print"これはこねこ";$kyara=3} elsif($_=m/2/){print"これはゴーレム";$kyara=2}; }; これのelsif文が実行されないぽいんですがなんででふか? 頭硬くてすみません・・・
460 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 09:30:09 ] > $_=m/3/ でなにをやっているのか良く考えてみ。
461 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 11:52:54 ] >>460 さん> $_=m/3/ の部分を$_==3 にすると、うまく行きました! 最初$_==3でエラーが出て、良くわからなくて正規表現にすればうまくいくかなとか思って$_=m/3/に直して、(他の部分も少し直して、)それで3の時うまくいったのでてっきり正解かと思いこんでました。 $_=m/3/を$_==3と同じ意味で使ったつもりだったけど、動作は違うんですね。 もうちょっと調べてきます。 ありがとうございました。
462 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 12:40:19 ] うまくいきました! 正規表現、はじめてで意味もよく知らずに=m/3/とかしてたけど、=~/3/とするのが正しかったんですね(汗 ==3にすると数字以外の時の入力で(変数は数字ではありませんみたいな)無駄なエラーが出たけど=~/3/ならそういう変なエラーも出ないみたいなので=~/3/を使うことにしました! ↓ $kyara=4; while($kyara==4){ $_=<STDIN>; if($_=~/3/){print"これはこねこ";$kyara=3} elsif($_=~/2/){print"これはゴーレム";$kyara=2} elsif($_=~/1/){print"これはドラゴン";$kyara=1}; }; もうちょっとがんばってきます!
463 名前:連カキスマソ mailto:sage [2007/05/07(月) 13:11:33 ] もうちょっとがんばってきました(滝汗 if($_=~/3/){処理1} elsif($_=~/2/){処理2} とすると、3でも23でも32でも先に$_=~/3/にマッチしてしまう(32なんかは$_=~/2/にマッチさせたい)ので、ちょっと修正しました。 ↓ #!/usr/local/bin/perl -w require 'jcode.pl'; print"あなたはどれを使いますか?<br/>\n1:ドラゴン<br/>\n2:ゴーレム<br/>\n3:こねこ<br/>\n"; $kyara=4; while($kyara==4){ $_=<STDIN>; if($_=~/3$/){print"あなたはお昼ね好きのこねこを選びました☆";$kyara=3} elsif($_=~/2$/){print"あなたはお人よしのゴーレムを選びました☆";$kyara=2} elsif($_=~/1$/){print"あなたは気の強いドラゴンを選びました☆";$kyara=1}; }; print "(番号=)$kyara"; ↑ これなら33111とかって入力でも3ではなく1のドラゴンとして判断してくれます☆ 正規表現って便利ですね☆ >>460 さん、アドバイスdクスでした!
464 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 13:18:31 ] 一つ攻略おめ そこで更に便利な連想配列をどうぞ
465 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 13:19:13 ] あっ、この場合だったら配列だけでいいのか
466 名前:460 mailto:sage [2007/05/07(月) 16:10:24 ] 462 なんか前向きなやつだなw どっかの知恵袋のとは大違いだ。 ちょっと補足しておくと、Perlの場合処理対象の 変数を省略できることが多い。 たとえば $_ =~ /1/ なら /1/とか。 $_ = m/1/ と書いちゃうと、マッチの結果を $_ に代入と解釈されて前の値を壊しちゃう。 ほかにもいろいろあるが長くなるので書かない。 まあがんばれ。
467 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 16:18:01 ] >>459 のチラ裏日記は、他人が見ても役に立ちそうだな。続けてくれ。
468 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 17:04:17 ] てか $inkey = <STDIN>; これで読み取ったときって改行コード入ってない? そこらへんも気をつけたほうがいいかな
469 名前:デフォルトの名無しさん [2007/05/07(月) 17:27:02 ] XML::Parser::PerlSAX のエラーハンドリングについて、どなたかご存知でしたら教えてください。 Parse対象のXMLにエラーがあった場合に、ユーザー関数をコールバックさせようと考えています。 デフォルトだと mismatched tag at line **, column **, byte ***, at /user/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/XML/Parser.pm line 187 のように出力されてdieします。
470 名前:デフォルトの名無しさん [2007/05/07(月) 17:27:31 ] search.cpan.org/~kmacleod/libxml-perl-0.08/lib/XML/Parser/PerlSAX.pm をみると、ParserがnewされるところでErrorHandlerに自分で作ったもの(例えばMyErrorHandler等)を指定すればよさそうなのですが、具体的になんという名前の関数を用意し、どのタイミングで呼び出されるかなど、よくわかりませんした。 すみませんが、どなたかお分かりでしたらアドバイスをください。
471 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 18:14:52 ] 使ったことないので分からんけど ErrorHandlerに無名サブルーチンを渡しておけばパースに失敗したときにコールバックしてくれるんじゃないの?
472 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 18:37:28 ] >>470 俺も使ったことないけど、フツーに考えて $parser->{ErrorHandler}で例外をキャッチできるってことなんじゃなないの?
473 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 18:59:18 ] >>466 さん&>>468 さん> dクスです!参考にして少し書き換えました! #!/usr/local/bin/perl -w require 'jcode.pl'; print"あなたはどれを使いますか?<br/>\n1:ドラゴン<br/>\n2:ゴーレム<br/>\n3:こねこ<br/>\n"; while (<>){ if (/[1-3]$/) {chop;$kyara=chop;last;} }; if($kyara==1){print"あなたはお昼寝好きのこねこを選びました☆"} elsif($kyara==2){print"あなたはお人好しのゴーレムを選びました☆"} elsif($kyara==3){print"あなたは強気なドラゴンを選びました☆"}; while (<>){}; こんな感じに☆ >>464 さん> 必要になってからがんがります☆(コラ
474 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 19:00:38 ] あ、よく見たら、ドラゴンとこねこが逆(汗
475 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 19:10:56 ] キメラは?キメラはいないの?
476 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 19:14:49 ] 1しか押さないだろこれは・・・
477 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 19:27:33 ] >>475 が「イサキは?」に見えた。 配列や printf を覚えて欲しくなるけど、楽しみながらコツコツやってそうでいいな。
478 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 19:38:06 ] >>475 ああ、大きなキメラが入るよ。 今年一番の大幅改良だ。
479 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 21:43:44 ] たった今Perlにprintfやsprintfがあることを知った。 俺は車輪を10も20も発明していたらしい。すばらしい!
480 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 23:31:32 ] むしろ、どういうルートで習得していけば そいつらと鉢合わせずに済むか、を考えるのが難しいかも。
481 名前:473 mailto:sage [2007/05/07(月) 23:32:46 ] 質問してもいいでしょうか。。 print system("cls"); と書くと、PCではちゃんと画面クリアしてくれるんですが、サーバにアップしたら画面クリアしてくれませんでした。 ブラウザの画面をクリアする方法って無いんでしょうか・・? あと、サーバにアップしたら、 while (<>){ if (/[1-3]$/) {chop;$kyara=chop;last;} }; という部分も全て無視されました。 たぶん、while(<>)の部分がサーバでは無視されてしまってるんだと思うんですが、 どうすれば良いですか? HTMLでフォームを表示させてそこから入力させるしか無いのでしょうか?
482 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 00:03:55 ] clsはWinのコマンドだし (一応リンクは張ってはあるらしいが・・・)、 そもそも 「コンソールとブラウザの挙動を勉強してください」 としかいえない ブラウザに対して print ""; でえぇんとちゃうのんかと STDIN になんもデータ無いからあたりまえです
483 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 01:16:20 ] これはどう見ても新手の荒らし
484 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 02:59:42 ] >>481 荒らし以前に板違い。>>1 嫁
485 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 05:32:43 ] すみません。 CGI以外の純粋なperlのみって書いてありますね。 気をつけます。 >>482 なんとなく理解しました。 clsをclearとしても無理だったので普通にフォームからの入力にします。 ご迷惑かけてすみませんでしたm(__)m
486 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 09:09:04 ] >>478 「大幅改良っ!!キメラぁぁ!!おにいちゃんかっこいいいいぃぃぃい ぃくううううう!」
487 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 14:52:59 ] >>481 JavaScript 埋め込んでクリアすれば良いんじゃない?
488 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 13:07:53 ] すみません、 ・ローカル変数の一覧を取得する方法 ・ハッシュの内容をローカル変数に一括して設定する機能(PHPのextract()関数に相当する機能) があれば教えてください。
489 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 13:32:01 ] >>488 use Dumpvalue とか。 hashの展開はこんなんでいけるだろ。 while (($key, $value) = each %hash) { eval("\$$key = \$value"); } ただし任意のキーが使われる場合はexploitになるんで別の方法で。
490 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 13:56:22 ] デバッガでも作ろうというのでなければハッシュのまま使ったほうが いいと思うよ。たぶんろくなことにならない。
491 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 14:20:02 ] cpanなしでHTML::Entitiesをインストールする方法を教えていただけませんか。 「Perl "HTML::Entities" インストール」でぐぐってもヒットせず困ってます。
492 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 14:58:35 ] >>491 OSは?
493 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 15:06:48 ] ActivePerl(Win)だと初めから入ってるし、Unix系で「CPANなしで」ってのも ピンと来ないし何だろう。「レン鯖で使いたい」なのかな。
494 名前:491 mailto:sage [2007/05/10(木) 15:50:52 ] >>492 Linuxです。Perl5.8。 >>493 その通り、海外のレンタルサーバーです。 ただ今はロ−カルのMacでやってるんで、CPANにトライしてみたんですが、最初にいろいろ英語できいてきて、適当に答えてたら設定がおかしくなったのか、 cpan install HTML::Entities がfetchできないとかでインストールできませんでした。 CPANむずい・・・
495 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 16:01:10 ] >>494 要するに、ロ−カルのMacにインストールできずに > CPANむずい・・・ と言ってるわけだ。 こんなこと言っている人がCPANなしでレンタルサーバにインストール しようってわけね。考えるだけ時間の無駄というものでしょう。
496 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 16:04:37 ] >>491 READMEに書いてあるじゃん
497 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 16:18:17 ] HTML-Parser-*.tar.gz ひろってきて展開して perl Makefile.PL && make && make install だけどcpanの英語がわからんとか言ってるレベルじゃもっと無理じゃね?
498 名前:491 mailto:sage [2007/05/10(木) 18:34:51 ] >>497 HTML::EntitiesはHTML::Parserの一部ということでしょうか。 試しにHTML::Parserをインストールしてみると・・・たしかにHTML::Entitiesも印ストールされました。 貴重なヒントをありがとうございました。 #こんな情報どこにあるんですか。www.xav.com/perl/site/lib/HTML/Entities.html とか見ても書いてないし。 ちなみにHTML::ParserはMacPortsをつかって sudo port install p5-html-parser でいけました。CPANは難しくて分からなかった人でもMacPortsなら楽勝!MacPorts万歳!
499 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 18:37:45 ] そ、それはよかった
500 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 19:02:37 ] >>498 search.cpan.org/dist/HTML-Parser/lib/HTML/Entities.pm
501 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 19:08:36 ] >>498 search.cpan.org/ をブックマークしておくといいね。
502 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 19:08:43 ] >>498 cpanモジュールなんだからcpanで調べろよ。 search.cpan.orgでHTML::Entitiesをサーチすれば一番上に出てくる ttp://search.cpan.org/~gaas/HTML-Parser-3.56/lib/HTML/Entities.pm を見れば一発でわかるだろ。
503 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 22:17:13 ] Tkを使用して、GUIアプリを作成しています。 大きく二つのフレームから構成しています。 1.左フレーム 2.右フレーム この二つのフレームにそれぞれScrollbarを設けたいのですが、 Frameウィジェットには何故か-yscrollbarオプション等が無く Scrollbarウィジェットを動作させることができません。 Scrolledで強引に取り付けると、レイアウトがおかしくなります。 どうおかしくなるかというと、 1.Frame内部のウィジェットの配置が決まらない (HTMLでいう、alignやvalignが効かない) 2.そもそも、実行時にワーニングのような表示が出る(実行はできる) 1.に関しては、スクロールバーを外せば正常に(期待通りに)配置されます。 Tkを使用される方は、こういうフレーム分けしたレイアウトで、 かつ各フレームにスクロールバーを表示させたい場合、どのような ウィジェットの使い方をされるのか、教えていただけないでしょうか。
504 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 22:51:49 ] Paneというものを見つけました。 Tk::Pane provides a scrollable frame widget. Once created it can be treated as a frame, except it is scrollable. 自己解決です。 スレ汚し申し訳ありません。
505 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 23:08:52 ] Tkのことは分からんけど、そういうときはコンテナにしたフレームの中に それぞれウィジェットを作って、その中で更にスクロールバーを設けるんでないかい
506 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 23:09:22 ] ずこー リロードしときゃよかった
507 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 02:34:36 ] ($1, $2, $3, $4 ...) に相当するような配列の表現はありますか?
508 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 02:56:54 ] もっと詳しく できるならやろうと思ってることも
509 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 03:40:44 ] ($name, $age, $sex) = ($1, $2, $3); みたいな部分を、 ($name, $age, $sex) = @foo; とかで済ませられないかと
510 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 05:02:32 ] これじゃ駄目? my $str = 'name=名前,age=年齢,sex=性別'; my ($name, $age, $sex) = $str =~ /name=(.*),age=(.*),sex=(.*)/; 正規表現がアホなのは見逃して。
511 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 08:22:51 ] おお パターンマッチってリストで評価するとそれが返ってくるんだ よくできてるなあ でも、 my ($name, $age, $sex) = $str =~ /name=(.*),age=(.*),sex=(.*)/ || next; という使い方はさすがに無理だった
512 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 09:18:49 ] >>511 ヒントは演算子の優先順位 (my ($name, $age, $sex) = $str =~ /name=(.*),age=(.*),sex=(.*)/) || next; または my ($name, $age, $sex) = $str =~ /name=(.*),age=(.*),sex=(.*)/ or next;
513 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 09:34:40 ] 括弧の方にします 普通にパターンマッチをスカラーで評価した時は、 マッチしたかどうかを返すのに対して、 パターンマッチのリストでの評価の代入の評価は、 リストの要素数だから、動作は同じでも意味は違いますよね
514 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 09:47:23 ] 从*・ 。.・)<SEXよりかはGENDERまたはGENの方がいいかなと思うの
515 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 11:34:00 ] ふつう、sex。
516 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 11:37:09 ] >>514 入会申込書とかの該当欄に「週2回」って書いたたちか?
517 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 11:54:30 ] なにそのゆとりんぐ回答
518 名前:Aransk [2007/05/11(金) 13:09:15 ] >509 何かこちらが勘違いしていたら、ゴメン。 でも、 my @foo=qw(joe 25 male); my ($name, $age, $sex) = @foo; print $name,"\n"; print $age,"\n"; print $sex,"\n"; って普通に出来るけど?
519 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 13:12:30 ] じゃなくて、マッチングの結果のリストの表現方法のことです
520 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 13:19:37 ] ここまで回答出て勘違いするってどういうことだよw
521 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 17:13:50 ] >>511 木の実の問題だが、next / last を絡めると途端に可読性が低くなる 気がする。next を絡める予定なら普通に next if $str !~ /name=(.*),age=(.*),sex=(.*)/ ; my ($name, $age, $sex) = ( $1, $2, $3 ); でいいじゃんと遅レス。
522 名前:デフォルトの名無しさん [2007/05/11(金) 17:41:10 ] 質問です。 Webで拾った以下の数値切り上げ関数を使用しています。 ---------------------------------------- $one = ceil(19.1); # $one = 20 sub ceil { my $var = shift; my $a = 0; $a = 1 if($var > 0 and $var != int($var)); return int($var + $a); } ---------------------------------------- しかし、このceil関数に、(4.4 * 6000)という数値(26400)を引数として計算すると、26401が帰ってきます。 perl -e 'print sprintf("%.50f", (4.4 * 6000));'; を実行すると、 26400.00000000000363797880709171295166015625000000000000 という結果が返ってきました。 これを回避して、期待したとおりの切り上げ結果を返すにはどうすればいいでしょうか?
523 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 17:54:28 ] なにを期待してるんだ? そのceil関数は整数じゃなければ1足すってだけだろ
524 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 17:56:06 ] >>522 丸め誤差でググっとけ。 perl -e 'print sprintf("%.50f", int((4.4 * 6000) * 1e6) / 1e6);'
525 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 18:02:20 ] 丸めには銀行方式が絡むか絡まないかがあるから気をつけろ 銀行の丸めは1桁が偶数のときに小数点以下があれば繰り上げだったっけ? 詳細忘れた
526 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 18:05:36 ] 銀行は四捨六入で0.5のときは一の位を見て切上げか切捨てを行う。 今回は全く関係ない。
527 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 18:27:48 ] まず「期待したとおりの切り上げ結果」ってのがわからんのだが。
528 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 18:34:21 ] >>522 > これを回避して、期待したとおりの切り上げ結果を返すにはどうすればいいでしょうか? そんなどこの馬の骨ともわからないサブルーチンを使わずに、CPANで Math-RoundとかMath-Round-Varとか拾ってきて見てみる。 実地の科学技術計算で使われている、充分な仕様のものがあるはず。
529 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 19:10:59 ] 付け焼刃的だが $a = 1 if($var > 0 and $var != int($var)); ここの後半の比較式を int($var) != int($var+0.9999・・・) にするとか
530 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 20:54:42 ] CPANに落ちてるのも作者が有名人なのを除くと どこの馬の骨かわからないきがしなくもない
531 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 21:10:46 ] >>530 有名な馬の骨もいるから気をつけな。
532 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 21:20:42 ] 麻雀の丸めは四捨六入
533 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 21:24:12 ] >>521 現状はまさにそんな感じなんだけど、 ($1, $2, $3) っていちいち書くのがなんか気持ち悪くて どうせ内部で持ってそうなデータなのに というのが質問の発端
534 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 21:25:39 ] そういえばINT関数って、負の数について、 数直線の右に丸めるか左に丸めるかが 言語によって違うよね
535 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 21:26:44 ] それで?
536 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 22:07:13 ] あるフォルダ内のファイル(個数や名前は分からない)を一つずつ読んでいくにはどうしたいいでしょうか?
537 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 22:10:48 ] ディレクトリを読んで、ファイル名を配列に入れて、 ループで回したら?
538 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 22:13:24 ] >>536 use File::Slurp; してread_dir
539 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 22:13:51 ] opendir して、リストに対して readdir するか、readdir を while の中でぶん回して下さい で、処理後は closedir で後始末を。 サブディレクトリも探したいなら再帰でググればヒントは見つかるかと思います
540 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 22:16:59 ] 実は glob で>>537 の1行めまで片づく要件なのかもしれない。
541 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 22:25:07 ] リストに入れないで済むならぶん回した方がいい
542 名前:536 mailto:sage [2007/05/11(金) 23:47:01 ] 皆さんありがとうございました。 readdirをwhileでぶん回す方法でやってみます
543 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 00:51:52 ] サブディレクトリまで検索するならFile::Findを使うのが簡単。 Unixのfindを使ったことがあるならfind2perlでPerlのコードを生成できるよ。 File::Find search.cpan.org/~nwclark/perl-5.8.8/lib/File/Find.pm
544 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 02:54:05 ] 深さのある配列を左から順番に呼んでフラットな配列を作りたいんですが、 よい方法ご存知の方いませんか @a = ([1,2,3], [4,5,6], [[7,8],[9,0]]); @b = flatten(@a); # 1,2,3,4,5,6,7,8,9,0
545 名前:デフォルトの名無しさん [2007/05/12(土) 02:58:46 ] nkfと似たような動作するプログラムってPerlについてなかったっけ?
546 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 03:16:52 ] >>544 sub flatten(@) { map { ref $_ eq "ARRAY" ? flatten(@$_) : $_ } @_ } こんなんどうよ。
547 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 03:25:10 ] 回答しようとして>>546 とほぼ同じ定義を書いていたが、 うごかなくて悩んでた。 eqじゃなくて==を使っていたぜorz
548 名前:544 mailto:sage [2007/05/12(土) 03:50:18 ] >>546-547 おお、ありがとうございます。 再帰を使うと意外とすっきり書けるもんですね。 頭が硬直化して思いつきませんでした。 ありがたく使わせていただきます。
549 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 04:16:20 ] ActivePerlの時は、File::Findは使わずに自前で書いた方がいいよ。 パスのダメ文字が不完全だから、想定外の動作をする。
550 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 04:17:18 ] ×パスのダメ文字が不完全だから ○パスのダメ文字への対応が不完全だから
551 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 02:20:04 ] 例えば「__LINE__ ってどういう意味だったかな?」とかと思ったとき それをperldocで調べようとすると、どういう風にコマンド叩けばいい? そういう調べものにはperldocは向かない?
552 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 03:04:18 ] podのディレクトリに移動してgrep
553 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 12:02:01 ] $perldoc perl して Reference Manualのカテゴリーからあたりを見つけられるぐらいには慣れておいても損はないかも
554 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 14:26:50 ] my $obj = new Foo::Bar::Baz($arg); というコードで、クラス名を動的に指定するにはどうしたらいいですか。 $klass = 'Foo::Bar::Baz'; my $obj = eval "new $klass(¥$arg)"; $@ and die($@); のようにevalを使うしかないのでしょうか。なんかもっとスマートな方法があるような気がします。
555 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 16:22:37 BE:264938764-PLT(13092)] newする時にevalしなくてもおk むしろパッケージが別ファイルならロード時にevalしる my $class = "Foo::Bar"; eval "require $class;" die $@ if $@; $class->new; イマドキはUNIVERSAL::requireなんでしょうけど
556 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 16:45:48 ] 普通に、こんなんでいいでしょ。 ---- package Foo::Bar::Baz; sub new{ bless [] } sub qux{ print "qux!!" } package main; eval{ my $klass = "Foo::Bar::Baz"; my $obj = new $klass; $obj->qux; };
557 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 16:49:53 ] eval EXPR はインジェクションの可能性があるからなるだけ使わんほうがよいね。
558 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 19:08:29 ] >>557 この一連のコードで具体的にどうやって?w
559 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 19:20:02 ] そりゃサンプルコードなんだから汚染された文字列が紛れ込む分けなかろう
560 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 19:59:57 ] やはり妄想で危険を煽っただけか。その妄想を極めればプールに入っただけで受精するとか言い出す外基地になれるよ。
561 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 20:49:22 ] もうゴールデンウィークはおわったよ?
562 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 06:21:05 ] 影さん「evalがあればどんなプログラムでも書けるぜ!」
563 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 13:44:05 ] 文字列eval使わなくてもいいところで使うのはあんまり美しくないと思うけどな。 >>555 のも eval { require $class }; のほうが綺麗だと俺は思う。
564 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 15:48:00 ] NET::POP3とMIME::Parserを使ってメールの送信元で振り分けて処理をするプログラムを 作りたいんだけど、headのfromってメルアドが入ってなかったりしてどこをみたらいいかわかりません。 送信元メルアドを参照するにはどこをみたらいいんでしょうか?
565 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 17:44:40 ] >>564 rfc2822を読め
566 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 00:07:34 ] >>563 それを実行したことある?
567 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 10:45:02 ] >>565 それじゃ何の答えにもなってないだろ馬鹿 >>564 ヘッダに送信元が正しく入っているかは保証されてないから入ってないときは取りようがないよ
568 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 11:15:16 ] >>565 これからは全ての質問に「仕様書読め」「解説書読め」で解決していくんですか?
569 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 11:26:10 ] Perlの質問じゃなくてメールの仕様に関する質問だからしゃあないのでは。 確かに不親切だけどね・・・
570 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 13:35:28 ] >>568 なぜそうしたいの?
571 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 14:19:50 ] 570は小学校の国語をやり直した方がいいと思うの
572 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 14:34:27 ] いま算数やってるの
573 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 14:38:52 ] >>565 にレスしてる奴って全部 >>564 の自演だろ。 メールの仕様に関してはスレ違い。
574 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 14:45:29 ] おお、帰ってきた。>>565 が黄泉の国から帰ってきた。
575 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 15:22:10 ] >>573 なんで>>564 に>>567 が自分で回答すんだよw まあみんなやさしめに行こうよ。
576 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 15:37:37 ] 英語こわいからヤダヤダ だからRFCなんか読むのもヤダヤダ
577 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 15:51:24 ] もしかして「RFC」という文字列が荒しを板中から集めてる?
578 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 15:55:46 ] 全然荒れてねえだろwww
579 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 16:17:56 ] >>565 は、RFCを読んだことがあるのを自慢したいだけ。
580 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 16:19:50 ] 自慢てwwwゆとり乙www
581 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 16:52:34 ] >>575 他人を装って自分を擁護するのって結構あるからな。 別に珍しくもないから、一応そう書いただけ。
582 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 17:18:06 ] 標準規格の類を挙げると必ず変な流れになるな。
583 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 17:28:10 ] めんどくせぇから書きたいように書けよ
584 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 21:53:54 ] 昼間子供が書き散らしたようだな
585 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:52:22 ] >>584 やっと起きたか、ひきこもり君
586 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 23:36:02 ] どこを読めばわかるよってのも教え方の一つだと思うんだ
587 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 00:07:36 ] >>579 RFCを読んだことが自慢になると思っている時点で(ry >>586 ざっとでも一通り目を通しておかないと他の部分の実装ですぐに詰まってまたスレ違いの質問してくるでしょ。 スタンドアローンアプリなら好きなように実装汁だけど そもそもネットワークアプリは相互に協調するものなんだから 「とりあえず動いている」「自分だけよければいい」という存在は迷惑だろ。
588 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 00:17:48 ] どうせただのメールフィルタなんだからどうだってかまわんだろう
589 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 05:26:48 ] まぁ、仕様書は基本としても、それを守ってない場合も多々あるわけでw
590 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 07:24:45 ] そうそう、RFC読まなくていい言い訳は 探せば結構見つかるよねw
591 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 10:32:13 ] でもまぁ読むのだるいじゃん。 遠回りすぎるし。 必要だとは思うが。
592 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 13:12:16 ] 104で電話番号聞いたら電話帳読めって返すようなもんだもんな
593 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 13:14:50 ] >>592 違うだろ。携帯販売店にどっかの会社の電話番号を聞くようなもん。 んなもん、104で聞け、つまりスレ違いだ。
594 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 13:24:53 ] ここを104番に例えられると認識している人間がいるのも怖ろしいな。
595 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 14:02:54 ] 交番で道を尋ねたら「地図を見れ」ってのがしっくりくる
596 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 14:18:25 ] 104や交番は仕事だけど、ここはただの掲示板だ
597 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 14:58:15 ] 道に迷っている人に通りすがりの人が「地図板はあそこにある」と言ったら、 別の通りすがりの人が食ってかかっているわけか。 「地図の見方を知ってるのを自慢したいだけ!!」と叫びながら。
598 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 15:44:27 ] 質問させて下さい [初めてのPerl 3版]という本を読みながら勉強しているのですが、 3章の練習問題をしていて疑問に思いました。 @list = qw/ a b c d /; print @list . "\n"; #こうすると、リストの個数が表示される。 print @list; #こうすると、リストの内容が表示される。 print @list , "\n"; #こうすると、リストの内容が表示される。 上記のように、3つの記述ほうほうで内容が変わってきます。 私が疑問に思ったのは、どうして"."で連結すると、リストの個数が 表示されるのでしょうか? また、","が急に出てきたのですが、どう いった意味があるのでしょうか? すみませんが、宜しくお願いします。
599 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 15:51:33 ] >>565 が暴れてます
600 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 15:59:25 ] 義務ってわけじゃないだろうけど質問スレなんだから質問に答えたくない奴は スルーすればいいだけなんじゃねーの? それをわざわざ嫌味ったらしく書き込むから多いから荒れるんだよ。 黙ってろよ。
601 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 16:15:12 ] >>598 print @list . "\n"; まず、配列(ここでいう@listね)をprintすると配列の中身をすべて出力するのね。 それで↑は、@listと\nをつなげてひとつの文字列としてる。 配列はスカラ参照するとその要素数を返すから、「配列の要素数+改行」というひとつの文字列として出力される。 print @list; これは上で言ったとおりそのまま配列の中身をぶちまける。 print @list , "\n"; printは出力対象をカンマで区切って複数指定できるのね。 だから、↑の場合は一つ目の例と違って@listと\nは別物として並列に並んでるのね。 print @list; print "\n"; と同じというわけ。 だから配列の中身+改行となる。
602 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 16:18:22 ] >>600 逆だろ。「RFCを読め」という回答があっという間に返ってきたのに、 それを気に入らなかった奴が騒いでいる。わざわざ嫌味ったらしくね。 黙っていればいいのにね。
603 名前:598 mailto:sage [2007/05/16(水) 16:32:22 ] >>601 スカラーとして参照されたから、要素数を返したんですね。 詳しく説明していただけたおかげで、理解できたと思います。 ありがとうございました。
604 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 16:36:58 ] >>601 部外者だが俺も勉強になった。ありがとう。
605 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 17:27:58 ] >>567 と>>568 が発端になっているわけか。 まあみなさん、不足だと思ったら、攻撃しないで補うということで。
606 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 19:05:20 ] ボク今夜寝る時、ママにRFC読んでもらうんだ。
607 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 19:07:15 ] フーン
608 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 19:33:23 ] ⊂二二二( ^ω^)二⊃ フーン
609 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 19:43:17 ] まぁ優しい俺が貼ってやるよ ttp://www5d.biglobe.ne.jp/~stssk/rfcjlist.html え、みんなこれ全部読んだの??
610 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 19:48:27 ] 荒らしてるのはいつも質問者 これ、豆知識な
611 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 19:57:54 ] そうなの?
612 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 20:17:47 ] そういえば質問者のフォロー全然ないな
613 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 21:26:11 ] 暴れ杉だろう・・・ 業務で使うときでも読まないのかだぜ?
614 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 21:34:58 ] さらに優しい俺が、>>565 が指摘した該当文書を>>609 から晒す www.puni.net/~mimori/rfc/rfc2822.txt 次の人: 上の文章からFromの仕様が書いてある文章を見つけ、行番号等の場所を報告 さらに次の人: 的確に抜粋して、ここに書く 以上で当スレのミッションは終了となる。
615 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 21:51:39 ] そーいや、番号がすぐ出てくるRFCって822(2822)と1149くらいだな、俺。
616 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 00:28:17 ] >>565 は、rfc2822読むのをやめへんでぇ〜
617 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 02:12:42 ] RFC自重
618 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 04:34:55 ] CRC556
619 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 07:08:02 ] そろそろスレ違いで引っ張るの止めないか?… RFC 読もうが読ままいが、perl についての質問に該当しなかった訳だし RTFM ってのは最低限わきまえとく事だし (ようするに俺も RFC 嫁よって思ってる訳だけど)
620 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 10:16:00 ] . ______________ | i┬┬┬┬┬┬┬┬┬┬┬┬┬i | | |┼ ,r-l^i ‐┼y'⌒~}ー┼y'⌒~}ー┼| | | |┼と::_;;;:_}┼じ;_;:;ナ┼ヽ;:;:: :;;:;:;)┼| | | |┼┼┼┼┼┼┼┼┼┼┼┼┼| | | |┼f_:::_:;;;り┼{:;;;::_;;う┼( ;;:;:;:"")┼| | | |┼く:;;;_:;;Jー|ーじ;_;:;ナ┼f_::_::;;;;り┼| | | |┼┼┼┼┼┼┼┼┼┼┼┼┼| | |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ .|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ とりあえず焼肉でも食って落ち着こうぜ
621 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 10:40:54 ] >>609 小説を読むわけじゃないんだから、必要なときに必要な箇所を読むんだよ。
622 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 19:06:20 ] つうか今回の事でRFCが頭に入ったww
623 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 20:59:23 ] パッケージの名前は「foo」のような小文字にするのか、それとも「Foo」のように 大文字で始めるのか、どちらがいいのでしょうか。 perl5.8.8のライブラリを見るとどちらもあるのですが、Perlの流儀だとどのような命名規則がいいのでしょうか。
624 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 21:24:06 ] >623 foo みたいに小文字で始まってるのは pragma 扱いだと思う。
625 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 21:28:28 ] 根拠見っけてきた。 perldoc perlmodlib より >Package/Module names are an exception to this rule. Perl informally >reserves lowercase module names for 'pragma' modules like integer >and strict. Other modules normally begin with a capital letter and >use mixed case with no underscores (need to be short and portable).
626 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 23:08:09 ] pragmaが何かわかりませんが、とりあえず自作のパッケージは大文字で始めるのがいいということでしょうか。 どうもありがとうございます。
627 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 01:56:34 ] use strictとかは使ったことあるかお?そーいうことだお
628 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 02:52:38 ] pragmaっつーのは端的に言えばインタープリタの動作を変えるもんだ。 よく見かけるのは"strict", "warnings","lib", "overload", "vars", "constant", "blib"あたりかな。 あとは、マルチバイト圏の人が"utf8", "encoding", "open"を使ってたりすることあるな。 P.S 分からないことは恥ではない、分からないことを放置することが恥なのだ
629 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 03:08:16 ] baseも仲間に入れてあげてください;;
630 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 03:14:05 ] あ、めんごw baseはOOで継承するときに使うやつな。 よく使うのに、度忘れしてたw
631 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 20:35:21 ] 有限の整数の集合の中から偶数だけを取りだしてその数を2倍するといった (1 2 3 4 5 6) -> (4 8 12) みたいな処理を簡潔にperlで表現したいなら、どのように書くんでしょうか?
632 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 20:42:42 ] map { $_ * 2 } grep { $_ % 2 == 0 } (1,2,3,4,5,6)
633 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 21:20:39 ] 自作のperl script にドラッグ&ドロップして使いたいんですが、 皆さん、どうされてます? 外部補助ツール等を使用しない方法で、perlのみで行いたいんです。 ググッてもうまくヒットしないので…恐縮ですが教えてください。
634 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 21:22:10 ] >>633 すいません。WindowsXPでactiveperlの環境です。
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 ] リャマ本なんであんなに高いの?
736 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 20:36:07 ] 古本買え
737 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 20:45:58 ] 2版の厚さがちょうどよかったよね(´・ω・)
738 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 21:49:02 ] -P オプション で使えるCのプリプロセッサですが 起動が多少遅くなるので 別な方法がないか教えてもらえませんか 使用用途としては 下記のようなものです 単にifで分けると モジュール部もすべて読み込むようなので 両方ともないとエラーになりました evalで囲めばそれっぽくうごきますが しっくりきません。 #ifdef HOGEHOGE use HOGEHOGE; 〜〜〜 #else use HOGEHOGE2; 〜〜〜 #endif
739 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 22:51:27 ] >>738 UNIVERSAL::require 使えば解決するようなコトじゃないかな?
740 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 22:52:13 ] 質問では、条件で分けたいのはuseだけじゃないっぽいけど: use $ENV{'HOGEHOGE'}; とかして環境変数HOGEHOGEから渡せないかなと思ったがダメだった。
741 名前:738 mailto:sage [2007/05/22(火) 22:58:53 ] >>739-740 趣旨的には 740のとおり useだけじゃなくて 汎用的に使える方法がないかと(まぁ -Pで出来るんですがあんまり標準的じゃないような気がして) 目的としては、環境がある程度違っても ソースを複数管理するのは面倒なので同一ソースで動かしたいです 下記のようなのも出来ると非常に助かります #ifdef hogehoge while(1) { #endif 〜〜〜〜〜 #ifdef hogehoge } #endif
742 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 23:39:45 ] evelじゃちょっと違うよな
743 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 23:41:58 ] BEGIN { eval } かと思ったけどなんか違うよね
744 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 00:20:43 ] よく判らんのだが、 -P 使うからには、pure perl じゃなく C 関係? それとも pure perl でホスト毎に挙動を変更したいの? 前者だったら、 Inline::C と後述を噛み合わせて… 後者だったら、ベタだけど Sys::Hostname で hostname ゲットして BEGIN{if ( $hostname ...){}else{} } あたり? 後者なら、もっとべたべたにソース全般で挙動を分けられるし、 実際やってるけど、前者だったらやろうと云う気にもならぬ。 って素人の口出しすまぬ。
745 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 00:29:53 ] OOで書いて環境依存部分はサブクラスに分けるが良いよ
746 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 00:52:02 ] 俺は環境依存部分は、モジュール化して突っ込んであるなあ ソコでSys::Hostnameは使っているけど、もっと良い手があれば知りたいものだ
747 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 01:16:42 ] 俺はwindowsローカル時はbatファイルで適当に環境変数設定して その環境変数によってunix系の時と動作変えてる。
748 名前:738 mailto:sage [2007/05/23(水) 08:38:37 ] >>744 当面の目標としては PurePerlでmod_perl2(ModPerl::RegistryPrefork)とFastCGIで 同一ソースを使えるようにしたいと思ってます FastCGI対応にするためには 読み込みモジュールの差し替え(CGI->CGI::Fast)とループ処理が増えるので 738,741のようなことができないかなと思った次第です、 良い方法がないかなと
749 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 09:35:25 ] そんな用途かよ Catalystあたりを参考にしれ
750 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 09:49:31 ] なるほどFastCGIか。 Rubyだとわりと簡単にFastCGI対応できるみたい。 Perlでも同じようにできないかな? 既存のCGIを変更無しでFastCGIに ttp://sugi.nemui.org/wiki/%B4%FB%C2%B8%A4%CECGI%A4%F2%CA%D1%B9%B9%CC%B5%A4%B7%A4%C7FastCGI%A4%CB
751 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 09:55:29 ] てか、CatalystとかCGI::Applicationとかのフレームワーク使えばいいじゃん。 Catalyst::Engine::FastCGI search.cpan.org/~mramberg/Catalyst-Runtime-5.7007/lib/Catalyst/Engine/FastCGI.pm CGI::Application::FastCGI search.cpan.org/~naoya/CGI-Application-FastCGI-0.02/lib/CGI/Application/FastCGI.pm
752 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 12:07:10 ] >>738 がなんでわざわざWebProg板からこっちに着たのかわからない
753 名前:デフォルトの名無しさん [2007/05/23(水) 14:12:31 ] すみませんが 質問させてください あるファイル(数万行の数字データ)の上から1行ずつ順番に読み込んで 最終行になるとまた1行目に戻って・・・という作業をしたいのです 途中でプログラムを閉じて再開したときも次の行から開始が可能であれば もう言うことナシですが,残念ながら自分では何とも出来ず 丸2日間ネット上で調べに調べ srand(); open(FILE, "data.txt"); rand($.) < 1 and $line = $_ while <FILE>; close(FILE); $line =~ s/\n//g; とランダムで1行読み込む仕様で妥協するのが限界でした もし上記作業がperlで可能でしたら申し訳ないですが 教えていただけないでしょうか 可能な方いらっしゃいましたら どうかお願いします。
754 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 14:13:46 ] いつ終わるんだそれは
755 名前:753 mailto:sage [2007/05/23(水) 14:27:55 ] すみません イカのような感じで半永久的に作業が続くわけでして・・・^^; print <<"_HTML_"; Content-type: text/html <html><head> <meta http-equiv="refresh" content="5; url=aaa.cgi">
756 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 14:34:48 ] 何行目まで読んだかどこかに書いとけばいいじゃん。
757 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 14:38:03 ] >>755 の「イカ」がどっから出てくるのかがわからん。 とりあえずCGIは置いといて、まずファイルの入力の基本をググって調べればいいんじゃね
758 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 14:38:30 ] 以下、だろ。
759 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 14:47:34 ] イカ=以下、がわからんじゃなくて イカ=print <<・・、がどこから出て来たかわからん、ってことだよ
760 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 14:52:37 ] 続きでなんか書こうとしてるんじゃないの?
761 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 14:54:09 ] >>759 以下のように、が、"<meta http-equiv="refresh" content="5; url=aaa.cgi">" を指してるんじゃないの? 大体、何を言わんとしてるかはわかる
762 名前:753 mailto:sage [2007/05/23(水) 14:56:30 ] わかんないヤツが説明すると伝わりにくいですね すみません・・・ えーっと 5秒おきにaaa.cgiにアクセスしてIEの画面に数字を順番に 表示させたいだけなんです 753で書いた方法で $line の数値を表示させるだけと言えば 伝わりますかね・・・
763 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 15:02:20 ] webprogの所轄だが、行数をどこかに保存すればいいだけだろう? CookieやURIのクエリ部分だとか、サーバ上のファイルとかメモリとか。
764 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 15:02:57 ] とりあえずWebProg板いってこいな
765 名前:753 mailto:sage [2007/05/23(水) 15:05:13 ] 板違いでしたか すみません どっちか悩んだあげくこっちに書いてしまいました お邪魔しました
766 名前:764 mailto:sage [2007/05/23(水) 15:06:45 ] 大体、数万行のテキストデータだとしてもかなりの容量になるだろ 対象マシンのメモリ可哀想だな。 しかも、IEがそのデータを表示仕切る前に IE落ちるだろうし、表示仕切る前に5秒経って更新かかるだろうな。 しかも、更新しようにもかなりの負荷がかかってるからモッサリ。 ブラウザクラッシャーでも作ろうとしてるのか?
767 名前:753 mailto:sage [2007/05/23(水) 15:10:09 ] いえ 表示自体はその数万行のうち上から1行ずつでいいんです 1行目表示して5秒後には2行目・・・みたいな感じで。 順番に表示されるのを見て 手元のデータと比較していくだけの 単調な作業なんです
768 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 15:26:28 ] 表示した行数を覚えておく方法は>>763 でほぼ答えが出てるけど、ファイルの指定行を読むところはTie::Fileとか使えば楽だと思うよ。
769 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 15:56:50 ] ちょっ待って! さっきまで>>753 が居た場所がイカ臭い
770 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 16:12:49 ] 753のやりたいことを考えると、サーバ上で処理させず、 数万行のデータを手元に持ってきてjavascriptで順次表示させた方が増しな気がする。 何行目を表示させているかも、少し離して表示させておけば、中断したときには手書きでメモれば十分だろう。 表示開始行数は引数で与えれば再開できるし。
771 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 17:25:55 ] perlでいいじゃん
772 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 17:34:38 ] "Black Perl" BEFOREHAND: close door, each window & exit; wait until time. open spellbook, study, read (scan, select, tell us); write it, print the hex while each watches, reverse its length, write again; kill spiders, pop them, chop, split, kill them. unlink arms, shift, wait & listen (listening, wait), sort the flock (then, warn the "goats" & kill the "sheep"); kill them, dump qualms, shift moralities, values aside, each one; die sheep! die to reverse the system you accept (reject, respect); next step, kill the next sacrifice, each sacrifice, wait, redo ritual until "all the spirits are pleased"; do it ("as they say"). do it(*everyone***must***participate***in***forbidden**s*e*x*). return last victim; package body; exit crypt (time, times & "half a time") & close it, select (quickly) & warn your next victim; AFTERWORDS: tell nobody. wait, wait until time; wait until next year, next decade; sleep, sleep, die yourself, die at last # Larry Wall これどういう意味?暇だったら訳してくれ
773 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 17:35:38 ] Webサーバー(Webブラウザ)使うのが必要条件なのかにもよるな。 Excelでも十分かもしれん。
774 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 17:42:02 ] local環境でいいんなら、1行読んで、25行ぐらい改行してからprintするだけじゃないの? で、sleep(5)とか
775 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 18:14:28 ] >>773 excel だけど win は一万行平気で開く? cat -n hoge.log | more で十分だったりw
776 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 18:26:06 ] >>772 ラクダ本3版Volume2に訳が出てるお
777 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 18:39:22 ] >>774 本当はそんな感じ(と、行番号カウンタか)でいいんだと思うよ。 Web鯖に吐かせるべき理由があるんだかどーなんだか。
778 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 18:45:09 ] webprog板でgrepとmapだとgrepの方が早いという意見があり確認してみました。 for >= grep > mapって感じみたいなのですがなんでmapだけこんなに遅いのでしょう? ■テストコード use Benchmark qw/cmpthese/; use strict; use warnings; my $LOOP = 100; my @SEED = ('a'..'z','A'..'Z',0..9); my @DATA = map {$SEED[int rand @SEED]} 1..10000; my %TABLE = map {$_=>$SEED[int rand @SEED]} @SEED; cmpthese($LOOP, { #非破壊 'map1' => sub {my @hoge = map { $TABLE{$_} } @DATA; 1;}, 'grep1' => sub {my @hoge;grep push(@hoge,$TABLE{$_}),@DATA;1;}, 'for1' => sub {my @hoge;push(@hoge,$TABLE{$_}) for(@DATA);1;}, #破壊 'map2' => sub {map {$_=$TABLE{$_}} @DATA ;1;}, 'grep2' => sub {grep $_=$TABLE{$_},@DATA;1;}, 'for2' => sub {$_ = $TABLE{$_} for(@DATA);1;}, });
779 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 18:47:30 ] ■結果 1回目 Rate map1 map2 for1 grep1 grep2 for2 map1 25.8/s -- -14% -32% -33% -66% -69% map2 30.1/s 17% -- -21% -22% -60% -64% for1 38.0/s 48% 26% -- -2% -50% -54% grep1 38.6/s 50% 28% 2% -- -49% -53% grep2 75.8/s 194% 152% 99% 96% -- -8% for2 82.6/s 221% 174% 117% 114% 9% -- ■結果 2回目 Rate map1 map2 grep1 for1 grep2 for2 map1 24.6/s -- -16% -33% -33% -71% -71% map2 29.2/s 19% -- -20% -21% -65% -66% grep1 36.6/s 49% 26% -- -1% -56% -57% for1 36.9/s 50% 27% 1% -- -56% -57% grep2 83.3/s 239% 186% 127% 126% -- -3% for2 85.5/s 248% 193% 133% 132% 3% -- ■結果 3回目 Rate map1 map2 grep1 for1 grep2 for2 map1 23.3/s -- -17% -33% -37% -72% -73% map2 27.9/s 20% -- -20% -25% -66% -67% grep1 35.0/s 50% 25% -- -6% -57% -59% for1 37.0/s 59% 33% 6% -- -55% -56% grep2 82.0/s 252% 193% 134% 121% -- -3% for2 84.7/s 264% 203% 142% 129% 3% --
780 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 19:28:11 ] map1が遅いのはでかいリスト返してるから。 一つだけ全く別のことやってりゃそりゃ遅い罠。 map2が遅いのはfor2grep2と違ってブロック評価してるからだと思う。 とりあえず 'map1' => sub { my @hoge; map { push @hoge, $TABLE{$_} } @DATA; 1; }, 'map2' => sub { map $_ = $TABLE{$_} , @DATA; 1; }, に書き換えたらグループごとの速度は大差なくなるはず。 関係ないけど最近のPerlのmapは 同じことやるforeachより速くなったりするのでびっくり。 古いバージョンなら戻り値使わない時は絶対forって言えたんだけどな。
781 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 19:30:42 ] 一応貼っておく Rate grep1 for1 map1 grep2 map2 for2 grep1 19.8/s -- -1% -3% -64% -64% -65% for1 20.0/s 1% -- -2% -64% -64% -65% map1 20.4/s 3% 2% -- -63% -63% -64% grep2 55.2/s 179% 176% 171% -- -1% -3% map2 55.5/s 180% 177% 172% 1% -- -3% for2 57.0/s 188% 185% 180% 3% 3% --
782 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 20:02:21 ] その後の調べで map2はsub {map {$_=$TABLE{$_};1;} @DATA ;1;} とすると順位があがりました。余計なメモリコピーが発生してたみたいです。 さらに>>780 さんの指摘を受けて 'map1' => sub {my @hoge;map push(@hoge,$TABLE{$_}),@DATA; 1;}, 'map2' => sub {map $_=$TABLE{$_},@DATA ;1;}, に変更したところ若干forが優勢っぽいですがほとんど同じ結果になるようになりました。 組み込みの関数なのでperlのバージョンによって変わってくる部分もありそうですね。 テスト環境はperl v5.8.5でした。(書き忘れ) 大変わかりやすい説明ありがとうございました。
783 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 20:05:52 ] 良くわからんがデータベース使え。
784 名前:738 mailto:sage [2007/05/23(水) 21:51:32 ] >>751 Catalystみてみます、サンクス
785 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 01:12:04 ] あーの、恐縮ですが質問なんですけど、 Perlでは初めてオブジェクト指向のコードを書いているのですが、 下記のようなコードでアロー演算子と行入力演算子が併用できなくて困っています。 一度他のローカル変数にファイルハンドルを代入してやればうまくいくのですが、 もっとスマートに、オブジェクトが持つファイルハンドルから行入力する方法はあるのでしょうか。 use strict; sub parse { my $this = shift; my @data = <$this->{fh_lex}>; # 文法エラー # 下のコードなら成功 # my $fh = $this->{fh_lex}; # my @data = <$fh>; for (@data) { ;# 省略 } }
786 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 01:59:16 ] <>をファイル読み込みとして認識させるには、 括弧の中を $fh のような形をしたスカラ変数にしないとダメだから、 一時的に変数を作るしかないね。 my @data = sub{$_=shift;<$_>}->($this->{fh_lex}); とかw
787 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 02:08:24 ] ヒント:<()>
788 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 02:09:52 ] <()> はファイルグロブ。
789 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 02:22:28 ] <${this->{fh_lex}}> とかダメ? 試してないけど。
790 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 02:31:13 ] >>789 ダメだよ。やってみたw <>を放棄した技だけどw my @data = readline $$this{fh_lex} ;
791 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 02:37:14 ] 普通に<>の内部関数のreadline使って、 my @data = readline $this->{fh_lex}; でよかろ。
792 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 04:08:38 ] >>785 別に無理に1行に書かなくても地味に$fhに代入した方がよっぽど明示的で よいコードに見える。 どうしてもっていうんなら、$thisがオブジェクトならオーバーロードを使ってみては?
793 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 18:39:22 ] 遅レスだが >>780 search.cpan.org/~nwclark/perl-5.8.8/pod/perl581delta.pod#Miscellaneous_Enhancements > map in void context is no longer expensive. map is now context aware, > and will not construct a list if called in void context. perlstyle でやるなって言われてるのに、悪い癖を直そうとしない子が あまりに多いから実装側でフォローした、と俺は解釈してる。
794 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 18:48:26 ] 見た目すっきりするからついやっちゃうんだよね・・・
795 名前:デフォルトの名無しさん [2007/05/25(金) 19:11:11 ] 俺すごいだろって思ってついやっちゃうんだよな・・・
796 名前:785 mailto:sage [2007/05/25(金) 22:27:59 ] >>786-792 みなさんどうもありがとうございます。 やはりPerlとはいえ表記上の制約はあるんですね。 にも関わらず他の方法がいくつもあると言うのはさすがですが。 どれを使おうか迷ったのですが、とりあえず今回は、readlineを使うのが一番綺麗に見えたので、それを使わせてもらおうと思います。 本当に勉強になりました。
797 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 02:42:48 ] 長文にて失礼します。 以下の[data.csv]ようなカンマ区切りのデータがあるとします。 横軸がX座標、縦がY座、各格子の数値がZ座標(標高)を示しています。 このデータを、[out.csv]のように変換したいのですが、2次元配列でつまずいてしまい、途方に暮れてしまいました。 どなたかお知恵を授けて下さい。よろしくお願いします。 あと、入力データのうち行頭が"#"で始まる行は無視する、というのはどうすればできるのでしょうか。合わせてご教授いただけると助かります。よろしくお願いします。 [data.csv] , 1, 2, 3, 4 5, 12.63 , 33.82 , 31.71 , 29.73 4, 34.75 , 32.14 , 29.31 , 26.70 3, 33.55 , 30.27 , 27.17 , 23.43 2, 31.02 , 29.42 , 26.65 , 23.61 1, 28.00 , 27.04 , 25.39 , 22.60 [out.csv] X,Y,Z 1,1,28.00 1,2,27.04 1,3,25.39 1,4,22.60 2,1,31.02 2,1,27.04 (中略) 5,3,31.71 5,4,29.73
798 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 03:41:35 ] >>797 宿題乙^^
799 名前:デフォルトの名無しさん [2007/05/26(土) 04:09:08 ] >>797 さてコレをどれくらい短くできるだろうか use strict; open FILE, "data.csv"; my @data; my @index; my @ys; for my $line (<FILE>) { chomp $line; unless (@index) { @index = split(/\s*,\s*/, $line); shift @index; next; } my($y, @d) = split(/\s*,\s*/, $line); push(@ys, $y); for (my $i=0; $i < @d; $i++) { $data[ $index[$i] ][ $y ] = $d[$i]; } } close FILE; open FILE, ">out.csv"; for my $x (@index) { for my $y (@ys) { print FILE "$x, $y, $data[$x][$y]\n"; } }
800 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 08:04:48 ] >>799 use strict; open FILE, "data.csv"; my(@data, @index, @ys); while(<FILE>) { chomp; my($y, @d) = split /\s*,\s*/; @index = @d, next unless @index; push @ys, $y; $data[ $index[$_] ][$y] = $d[$_] for 0..@d-1; } open FILE, ">", "out.csv"; for my $x (sort {$a <=> $b} @index) { for my $y (sort {$a <=> $b} @ys) { print FILE "$x, $y, $data[$x][$y]\n"; } } close FILE;
801 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 08:26:14 ] 一応質問者の為に一行サービスしといたけど。本嫁本。 こんなの例題に出てくるだろが。 open IN, "data.csv" ; open OUT, ">", "out.csv" ; print OUT "X,Y,Z\n" ; (undef,my @index ) = split /,/, do{ $_ = <IN> ; s/\s+//g ; $_ } ; for ( reverse (<IN>) ){ s/\s+//g ; next if /^#/ ; my ( $index, @dat ) = split /,/ ; for my $i ( 0 .. $#dat ){ print OUT join "," ,$index,$index[$i],$dat[$i] . "\n" ; } } close IN ; close OUT ;
802 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 10:48:45 ] >>799-801 おまいらやさしいな
803 名前:797 mailto:sage [2007/05/26(土) 13:30:30 ] >>799-801 皆さん、どうもありがとうございます。 教えていただいたコードを読んで勉強します。 ところで、私のような初心者向けの本にはどんなものがありますか? 現在手元には、「Perlの絵本」といわゆる「らくだ本」の2冊がありますが、前者はまったくの初心者向けで今回の質問の答えは見いだせません。 一方、後者は私には取っつきにくくて、ヒントが書いてあるのかも知れませんが、見つけられませんでした。 なお、Visual BASICとTurbo PASCALはある程度勉強しました。 近くに大きな本屋がないので、現物を手にとって見比べることができません。アドバイスをいただければ幸いです。よろしくお願いします。
804 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 14:26:34 ] リャマ本かクックブックあたり嫁
805 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 15:31:12 ] /(\b\w+)\1/ という正規表現が hogehogeにマッチして /(\b\w+\b)\1/ という正規表現が hoge hogeにマッチしないのは何故なんでしょうか?
806 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 15:36:26 ] * キャプチャされるのは、正規表現ではなくマッチした文字列 * \b は文字を消費しない。
807 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 16:15:33 ] >>803 時間をかけて、「らくだ本」じっくりと2回読めばいい。 1回目は、解らない部分には「?」印を付けて、深追いしない。 2回目は、「?」印を付けた部分を重点的に読む。 その過程がなければ、らくだ本を辞書のように使うことはできない。
808 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 17:09:49 ] リャマ本の第四版まだかなー 本家だと2005年に出てるんだよね ラクダさんも早く新しいの出して欲しいな
809 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 18:15:30 ] そういえば新しいの出るね。 "Mastering Perl" By brian d foy ttp://www.oreilly.com/catalog/9780596527242/
810 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 19:24:22 ] 大変にスマソ ひょっとして use encoding でコード指定すると \w が日本語(文字)にもマッチする仕様?
811 名前:803 mailto:sage [2007/05/26(土) 20:02:47 ] >>807 アドバイス、ありがとうございます。 昔やった受験勉強と同じことですね。腰を据えて勉強します。
812 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 20:17:05 ] >>810 perl + 日本語には興味無いんで調べたが、perlunicode にまんま書いてあるぞ。 o Character classes in regular expressions match characters instead of bytes and match against the character properties specified in the Unicode properties database. "\w" can be used to match a Japanese ideograph, for instance.
813 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 20:27:38 ] >>810 基本的には空白や記号類ではないような文字にマッチする。 通常は全ての言語の文字にマッチするけど、 use locale;すればロカールである程度は制御できるね。
814 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 20:39:14 ] >>812-813 おお、すまそ。そしてありがd 今更だけど jcode.pl からの乗り換えに躓いてました 精進してきます
815 名前:デフォルトの名無しさん [2007/05/26(土) 21:20:04 ] 懐かしいな jcode.pl ってまだあったんだ cgiのもなんかライブラリあったな
816 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 21:22:41 ] cgi-lib.plナツカシス
817 名前:デフォルトの名無しさん [2007/05/26(土) 23:38:11 ] >>816 ああ、それそれ! 名前忘れる位懐かしいw
818 名前:気まぐれアナスイ mailto:お腹いっぱい@気まぐれアナスイ [2007/05/27(日) 01:28:48 ] …。perl…。 perl.といえば、perldl-command.が… !(-_Φ+){yes, So sexy.}
819 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 04:04:33 ] ログファイルを合成する処理で、困っています。 @log=("1.txt","2.txt","3.txt","4.txt"); foreach $filename(@log) { open(LOG,$filename) || &er_("Can't open $filename"); @lines = <LOG>; close(LOG); } @linesの中に、全てのテキスト内容を合成させた物が 入ってほしいのですが、最後に代入した4.txtの内容しか 入ってくれません。なぜでしょうか。 また、foreachで廻すのを条件として、 改造案を指南いただけると嬉しいです。
820 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 04:22:02 ] @lines = <LOG>; の部分を my @tmplines = <LOG>; push(@lines, @tmplines); の2行に置き換えてください。 千奈美に最後のやつしか残らないのは、 @lines = <LOG>; が上書きしてるからです。 だから最後の結果しか残らない。
821 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 06:28:04 ] >>820 ありがとうございます!できました。
822 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 18:20:34 ] cpanで >Are you ready for manual configuration? [yes] 毎回、noを答えるんですけど、これ抑制できないんですか?
823 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 00:37:04 ] >>822 > Are you ready for manual configuration? 俺は個人macもsolarisもyes選択してカスタマイズしたから、 最初にnoを選んだ時の挙動は分らんが、抑制もくそもこれって 最初の一回きりだろ?俺の環境だと出てこないんだけど。 何か変な事やってないか?
824 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 15:48:16 ] >>546 の sub flatten(@) { map { ref $_ eq "ARRAY" ? flatten(@$_) : $_ } @_ }」 の flatten(@)は配列以外を引数に取れないということでしょうか? あと @deff = grep{ !{map{$_,1}@FileA }->{$_}}@FileB; のmap{$_,1}@FileAなのですが{$_,1}はどういう式なのでしょうか
825 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 16:55:50 ] >>824 1) プロトタイプの@は残りの引数をすべてリストとして取り込むという意味。 (@) にはあまり意味がないんだけど、perlsubでも読んどき。 2) map の引数のBLOCKはリストコンテキストで評価されるから、 $_, 1 は $_ と 1 からなるリスト。
826 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 10:44:52 ] はじめまして、 Perl 5.005_03 の世界から来ました。こんにちは。 最近の Perl でコマンドラインオプションの処理をする場合の標準を教えてください。
827 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 11:02:55 ] >>826 Getopt::StdかGetopt::Longを使うのがいいよ。どっちも標準モジュール。 Getopt::LongはGetopt::Stdの機能も含むからGetopt::Longのほうがおすすめ。
828 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 11:04:23 ] @_ で済まなかったっけか
829 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 12:00:06 ] >>828 自分でちまちまとオプション解析するならそれでいいけどな。
830 名前:829 mailto:sage [2007/06/01(金) 12:01:08 ] いや、そんなことない。だまされるところだった。
831 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 13:21:53 ] >>827 早速 Getopt::Long 使ってみました。使いやすそうですね。 御回答ありがとうございます。 >>828 すみません、ちょっと私には意味わからなかったのでスルーさせてくださいー。
832 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 16:08:31 ] >>825 ありがとうございます
833 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 16:39:29 ] my $text = join '', <>; $text =~ s/\s*//g; を1行でする方法ないですか. 1行でなくとも見た目がよければいいです。 あとファイルの最初にmy宣言すると、その後のサブルーチン内でも 使えてしまうのですが、これは何か対策はありますでしょうか
834 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 16:51:36 ] (my $text = join '', <>) =~ s/\s*//g; とか出来んわけではないが分けて書いたほうが見た目はよいだろ。 > あとファイルの最初にmy宣言すると、その後のサブルーチン内でも > 使えてしまうのですが、これは何か対策はありますでしょうか ファイルスコープのmyはグローバル変数だから、そういうもの。 嫌なら中括弧で囲っとけばいい。
835 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 16:58:41 ] なるほど、ありがとうございました
836 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 17:06:21 ] my $text = join '', map {s/\s*//g; $_} (<>); このぐらいなら、まあいい?
837 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 17:10:06 ] $/使った方が速いと思うけど、2文にならざるを得ないな。
838 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 17:17:50 ] my $text = do{ local $/ ; $_ = <> ; s/\s*//g ; $_ } ; 実質4行w
839 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 19:21:13 ] s/\s*//g, $text.=$_ for <>;
840 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 19:23:33 ] ああ、my付けなきゃいけないのか my $text = join "", map { s/\s*//;$_} <>;
841 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 19:43:02 ] (my $text = do {local $/; <>}) =~ s/\s+//g;
842 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 20:35:25 ] >>837 pu
843 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 23:04:43 ] ぶっちゃけ遊びとしても「1行で書く」っていうのは意味ないと思うw
844 名前:デフォルトの名無しさん [2007/06/01(金) 23:14:33 ] >>826-831 @ARGV を使うだけなのにご苦労様
845 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 23:45:56 ] >>844 >826 名前:デフォルトの名無しさん:2007/06/01(金) 10:44:52 >はじめまして、 Perl 5.005_03 の世界から来ました。こんにちは。 > >最近の Perl でコマンドラインオプションの処理をする場合の標準を教えてください。 >コマンドラインオプションの処理をする >コマンドラインオプションの処理をする >コマンドラインオプションの処理をする
846 名前:デフォルトの名無しさん mailto:sage [2007/06/02(土) 00:07:52 ] おまんこライン
847 名前:デフォルトの名無しさん [2007/06/02(土) 01:45:09 ] >>845 え!?もっと詳しく!!
848 名前:デフォルトの名無しさん mailto:sage [2007/06/02(土) 02:56:27 ] 単純にコマンドライン引数を見たいなら@ARGVを順番に見ていけばいいけど、 >>826 は -Rrt -l --color=auto とかのコマンドラインオプションをパースしたいってことだろ。 学習目的ならいざ知らずそんなもんいちいち自前で処理する奴はマゾ。
849 名前:デフォルトの名無しさん mailto:sage [2007/06/02(土) 12:28:03 ] そうそう、Perl 5.005_03が先端だった頃の、 use Getopt::Stdするだけでプラス0.4秒 という時代とは違うんだから。
850 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 18:25:59 ] 文字列の全角英数→半角変換って $j =~ tr/0-9a-zA-Z/0-9a-zA-Z/; じゃダメなん? 5.8.4で文字列はutf-8なんだけど。
851 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 18:42:50 ] >>850 use utf8 した上でなら、それでいいんじゃね? 確かめてないけど。
852 名前:850 mailto:sage [2007/06/03(日) 19:02:08 ] >>851 英数以外が化けるんだよなぁ…
853 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 19:13:39 ] 化けてるってのはどうやって確認してるの?
854 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 19:15:52 ] 日本語のマルチバイトはsjis、euc-jp、utf-8(他にもいろいろ)あるわけで、 スクリプトのソースや$jに入っているcharsetが何かがわかんないと答えようがないわな。
855 名前:850 mailto:sage [2007/06/03(日) 19:28:12 ] 853>> 入力と出力をprintして見比べてるけどマズかった?
856 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 19:31:18 ] それは大いにマズい。 $jの文字コード/UTFフラグの有無で挙動が変わってくる。
857 名前:850 mailto:sage [2007/06/03(日) 19:37:59 ] >>854 入力、ソースはutf-8(のつもり)。 もしかしたら違うかもしれないから、入力のエンコード方式の調べ方があるなら教えてくれ。 >>856 マズいのか。
858 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 19:49:23 ] use Devel::Peek; Dump $j;
859 名前:850 mailto:sage [2007/06/03(日) 20:02:10 ] >>858 dumpの出力の読み方は? ググってみたけど、どう読んでいいのかサッパリ。
860 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 20:06:37 ] なんか要領がつかめないんだけど、 入力ソースはなんなわけ?
861 名前:850 mailto:sage [2007/06/03(日) 20:13:48 ] >>860 適当なサイトから拾ってきたフィード。
862 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 20:18:46 ] binmodeでストリームに適当なレイヤをかぶせるか、 Encode::decodeに通して適切にutf-8フラグが立つようにせにゃならん。
863 名前:850 mailto:sage [2007/06/03(日) 22:06:39 ] >>862 $j = decode('utf-8', $j); の1行通したらうまくいった。ありがと。
864 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 13:51:27 ] ねえ。これから態度の悪い質問者には答えない様にしろよ。 付け上がって調子乗ってくるのがオチなんだからさ。
865 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 14:05:21 ] 俺が正規表現でボコボコにしてやんよ ∧_∧ ( ・ω・)=つ≡つ (っ ≡つ=つ / ) s/.*/ババババ/g ( / ̄∪
866 名前:デフォルトの名無しさん [2007/06/04(月) 14:35:29 ] >>864 付け上がっているのはどっちですか? ここは質問箱でしょ? 質問してください、というスレなんでしょ? 質問者あってのスレなんですよ。 そんな逆切れ見たいなことを言っていないで、 質問してもらったら「質問してくださってありがとう」くらい言ったらどうですか!
867 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 15:48:30 ] これは酷い釣り糸
868 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 16:27:29 ] >>866 とっとと質問せんかボケ
869 名前:デフォルトの名無しさん [2007/06/04(月) 17:02:53 ] >>868 質問があったら質問しますよ。 自分の至らなさを指摘されたからって、急に喧嘩腰にならないでください。 頭の悪い人はいちいち無駄な書き込みをしなくていいです。
870 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 17:07:09 ] >>866 何が質問者あってだよ。回答者があってだろ。 回答者が居ないと何も出来ない癖に。 後 >>1 にも書いてあるけどここは "Perlの奥深さについて皆で語り合い、追求する"スレ。 低レベルな質問と会話はwebprog板でお願いします。
871 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 17:14:03 ] >>869 無いんなら今すぐ作れや 俺は無職で一日中暇なんじゃアホ
872 名前:デフォルトの名無しさん [2007/06/04(月) 17:15:39 ] 「>>1 にも書いてあるけど」などという書き出しで あたかも「みんなの意見」であるように強調しておきながら、 結局はラスト1行で単なる頭の悪い煽り屋さんであることをばらしてしまっていますね。 何だかんだいいつつ、自分の「低レベルな会話」は全面的に許してしまっている時点で、 説得力はゼロですね。修行を積んで出直しましょう。
873 名前:デフォルトの名無しさん [2007/06/04(月) 17:19:05 ] >>871 暇なら自分で質問を作って自分で回答していればいいじゃないですか。 内容によっては決して無意味ではありませんよ。 高度な質問と高度な回答をセットで提供するぶんには、結構喜ばれると思います。 とはいえ、無職の能無しがそういう問答を自演するのは難しいでしょうが…。
874 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 17:21:42 ] 皆の意見として言ったつもりは無いな。建前のような物。 ついでに俺は許してないよ? WebProgに案内してるだけ。 お前も個人叩きをするタダの頭の悪い煽り屋にしか 見えないんだが、本文に対する反論は結局ナシなのかな?
875 名前:デフォルトの名無しさん [2007/06/04(月) 17:28:38 ] >>874 なるほど、自分で自分を許していないのですね。 ではあなたが黙れば解決です。あなたにできる最大の「低レベルな会話の排除」ですね! あと、「本文」というのは面白い言い方だと思います。 相手に突っ込まれて、いかに馬鹿なことを言っていたかが自覚できた途端に そこを蜥蜴の尻尾みたいに切り捨てて、「ノーダメージだよーん」ということにするのですね。
876 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 17:34:27 ] どうでもいい議論はよそでやれよ。
877 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 17:40:23 ] 定期的に沸いてる奴だろw ほっとけ
878 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 17:53:57 ] >>875 んーそうじゃないな。あくまでwebprog板でやれと希望してるだけだ。 本文って言い方そんなに面白いかな? お前に言われた事は自覚した、 とする。その次の段階の話だ。その次の話が出来なければただの 煽り合いで終わってしまうだろう? 後俺は120%黙る気は無いので宜しく。
879 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 17:55:19 ] >>864-878 お前らまとめて詞ね
880 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:01:04 ] >>878 低レベルな質問と会話はwebprog板でお願いします。
881 名前:デフォルトの名無しさん [2007/06/04(月) 18:07:51 ] まぁ、こんなもんでしょう。 「ここは "Perlの奥深さについて皆で語り合い、追求する"スレ」であるという理由で 「低レベルな質問と会話はwebprog板でお願い」していた人間も、 つまらないプライドをちょっと傷つけられたら、Perlの奥深さとまるで関係のない低レベルな会話だと自覚しつつも 「120%黙る気は無い」とまで言い切ってしまうのですよ。 俺はやっていいけどお前はダメ、の精神で物事を動かせると思ってるボクちゃんってこんな感じなんです。
882 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:14:12 ] スーパーキチガイタイム
883 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:14:54 ] なんか、ここぞとばかりに言い負かそうとしてるが、それも違う。 俺は毎回このスレで変な奴が出る度に相手してやってるし、 俺自身もwebprogに行く気なんかハナから無い訳で。本音と建前ってやつだな。 ついでに言うとさっさと僕の"本文"に反論してくれませんか。
884 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:17:40 ] webprog板じゃなくてもいいから議論なら他スレでやれよ
885 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:18:35 ] >>883 相手すんないっとるんじゃボケ。
886 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:34:14 ] > 俺は毎回このスレで変な奴が出る度に相手してやってるし、 やめてください。
887 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:43:06 ] >>883 > 俺は毎回このスレで変な奴が出る度に相手してやってるし、 かんべんして(><;)
888 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 19:08:39 ] これだな。 ttp://www.so-net.ne.jp/vivre/kokoro/psyqa1087.html
889 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 19:33:07 ] 自分が一番変な奴だという自覚が無いんだなw こんだけ嫌われまくってもきづかないほうに賭ける
890 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 20:04:26 ] 殆ど一人でやってるように見えるんだけど。
891 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 20:18:16 ] >>890 ということにしたいわけですね。
892 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 20:22:43 ] バレたか・・・
893 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 21:33:09 ] バロスw
894 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 21:50:35 ] 自演荒らしのImageMagick君ってこれと同一人物っぽいなw www.gac.jp/article/index.php?stats=question&category=12&id=20208&command=msg 2chなんかに来ずにここで教えてクン続けてればよかったのに
895 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 21:59:04 ] さすがにそこまでストーキングっぽいことしなくてもいいのに・・・
896 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 22:45:50 ] >>894 どっちもImage-Magi'c'になっててワラタ 借りてる鯖はlolipopかな?
897 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 23:15:20 ] 質問します! open FH,"/hoge/hoge.txt" #hoge.txtを開く while (<FH>) { #FHファイルを行単位で読み込んでいく $Str = $_; #変数Strにデフォルトで入力やパターンマッチになる特殊変数を代入 if( $Str =~ /__\w+__/g ){ #@??? if( $Str =~ /__KEYWORD__/ ){ #A??? $Str =~ s/__KEYWORD__/KEY/; #__KEYWORD__をKEYに置換する } } print $str; } close FH; コメントの部分の@とAの説明がうまくできません。 @は=~の部分がわからず、Aは/と/で挟まなくて__KEYWORD__だけでも 同じ結果が返ってくるのではないかと思って悩んでいます。 よろしかった教えて頂けないでしょうか?
898 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 23:24:58 ] %hoge; $age = {%hoge}; というコードがあった場合、最後の代入で行われているのは 無名ハッシュコンストラクタの中でハッシュを評価することで、ハッシュのキーと値 からなるリストが生成され、それらを要素とする無名ハッシュが生成されて、そのリファレンスが $ageに代入される。つまり%hogeのコピーのリファレンスを代入しているという考えでいいんでしょうか?
899 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 23:46:46 ] >>897 Perl 正規表現でググればウンザリするほど答えが見つかると思います >>898 そうです
900 名前:デフォルトの名無しさん [2007/06/04(月) 23:47:18 ] なるほど、自分で自分を許していないのですね。 ではあなたが黙れば解決です。あなたにできる最大の「低レベルな会話の排除」ですね! あと、「本文」というのは面白い言い方だと思います。 相手に突っ込まれて、いかに馬鹿なことを言っていたかが自覚できた途端に そこを蜥蜴の尻尾みたいに切り捨てて、「ノーダメージだよーん」ということにするのですね。
901 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 00:05:57 ] >>897 なんかすごい無駄だらけなソースだなあ・・・
902 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 00:31:50 ] ノーダメージだよーん
903 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 00:33:23 ] >>900 なんかすごい無駄だらけな文だなあ・・・
904 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 00:42:53 ] なんかすごい無駄だらけなスレだなあ・・・
905 名前:デフォルトの名無しさん [2007/06/05(火) 00:48:01 ] 粘着荒らし酷いな
906 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 00:52:00 ] 粘着した方が勝ち!
907 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 01:14:38 ] ノーダメージだよーん
908 名前:デフォルトの名無しさん [2007/06/05(火) 01:34:33 ] 荒らしはやめてー><
909 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 04:03:09 ] 変な奴が現れたら一人も漏らさず全部相手するように それがこのスレのお約束
910 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 09:34:09 ] >>909 お前、もう帰っていいぞ。
911 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 10:21:08 ] 次スレのテンプレのことについて、次の提案があるのだが、どうだろうか? 1.過去スレを入れるのはやめる。(前スレだけがあればよいと思う) 2.「エラーなどの問題への対処の相談には、問題が再現する完全かつ最短のソースを 作成して下さい。作成する過程で問題が解決する場合も多いです。」 との注意書きを >>1 に入れる。 (質問者が必要な情報を小出しにするのを防ぐため) 3.>>10 をテンプレを入れる(但し、内容は、以下のように少し変更する)。 --------------------------------------------------------- # 【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)"; # 次に、あなたが実行したい処理の内容を入れて下さい。 print "SJISには、「十表貼申予暴」のようなダメ文字がある。\n"; sleep(1); # 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう # おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。
912 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 11:44:29 ] あれ?過去スレ保管所みたいなのなかったっけ?
913 名前:デフォルトの名無しさん [2007/06/06(水) 12:20:20 ] ttp://namahage.dip.jp/blog/archive/2007/06/06/98399.aspx