Perlについての質問箱 30箱目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/03/14(水) 22:54:12"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc8.2ch.net/php/ )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
http://www.perl.org/get.html
● 2006/12/21現在の最新版: 5.8.8
● 2006/12/21現在の開発版: 5.9.3
前スレ
Perlについての質問箱 29箱目
http://pc11.2ch.net/test/read.cgi/tech/1166708139/
リンク集は>>2-3
過去スレは>>4
0002デフォルトの名無しさん
2007/03/14(水) 22:55:02Perlプログラミング講座: http://www.site-cooler.com/kwl/perl/
[本]
リャマ: http://www.oreilly.co.jp/books/4873111269/
駱駝: http://www.oreilly.co.jp/books/4873110963/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/books/4873112028/
[オンラインマニュアル] (追加)
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.8/
perl5.8.xのドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: http://www.cpan.jp/search.cgi
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
0003デフォルトの名無しさん
2007/03/14(水) 22:55:32CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://homepage3.nifty.com/hippo2000/
[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
Perlの小技: http://homepage3.nifty.com/hippo2000/perltips/index.htm
[Perl5.8Unicodeメモ]
http://www.pure.ne.jp/~learner/program/Perl_unicode.html
http://www.namazu.org/~tsuchiya/perl/perl-5.8.html
http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0004デフォルトの名無しさん
2007/03/14(水) 22:56:031 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/
0005デフォルトの名無しさん
2007/03/14(水) 23:28:350006デフォルトの名無しさん
2007/03/14(水) 23:33:020007デフォルトの名無しさん
2007/03/15(木) 00:13:380008デフォルトの名無しさん
2007/03/15(木) 09:55:340009デフォルトの名無しさん
2007/03/15(木) 11:27:42前スレだけでいいんじゃないかと思うが。
0010デフォルトの名無しさん
2007/03/15(木) 12:02:31---------------------------------------------------------
# 【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);
0011デフォルトの名無しさん
2007/03/15(木) 12:38:080012デフォルトの名無しさん
2007/03/15(木) 12:56:560013デフォルトの名無しさん
2007/03/15(木) 20:59:500014デフォルトの名無しさん
2007/03/15(木) 21:49:50テンプレ化することで、くだらない質問が減るのなら十分意味があることだと思う。
0015デフォルトの名無しさん
2007/03/15(木) 22:28:23これじゃあ結局変わらないんじゃないか。
># 上記は、あくまで文字処理がわからない人のためのおまじないです。
># 上記以外のことをやろうと思ったら、自分で勉強してください。
わからんやつに、手取り足取り説明してもやっぱりわからん。
こっちで動くように書き直した方が100倍早い。
Cのポインタみたいな状況になってる。
0016デフォルトの名無しさん
2007/03/15(木) 22:42:070017デフォルトの名無しさん
2007/03/15(木) 22:43:560018デフォルトの名無しさん
2007/03/15(木) 22:48:47あんたらはどうせバカ以前だろ。
あれが今となっては誤解を引き起こす要因になっていることすらわかっていない。
0019デフォルトの名無しさん
2007/03/15(木) 23:14:570020デフォルトの名無しさん
2007/03/16(金) 00:19:43多分、>>18は、「Perl5.8 でもJcode.pm を使って文字コードを変換しなければならない」
と誤解したのではないだろうか。
初心者は、回答者が>>10のように回答できるような質問をすることすらできないのが現実。
前スレの>>68-71 なんか見てると、悲惨だね。
この点を解説している入門書も少ないと思うし、テンプレに入れてやってもいいんじゃないの?
0021デフォルトの名無しさん
2007/03/16(金) 00:48:59皆さん使ってますか?どんなときに使うか教えてください
0022デフォルトの名無しさん
2007/03/16(金) 17:39:12ttp://d.hatena.ne.jp/naoya/20060109/1136812096
ttp://d.hatena.ne.jp/tociyuki/20060110/1136910241
0023デフォルトの名無しさん
2007/03/16(金) 17:52:52・・・
return (\@a, \@b, \@c);
}
(@a, @b, @c) = func();
ってやると全部@aに合体してるんだけど
どうすればいいの?
0024デフォルトの名無しさん
2007/03/16(金) 17:53:400025デフォルトの名無しさん
2007/03/16(金) 18:30:51002623
2007/03/16(金) 20:32:440027デフォルトの名無しさん
2007/03/16(金) 22:56:12print OUT reverse @data;
メモリに入りきらない巨大csvファイルを上のように
逆順にするにはどうすればいいでしょうか?
0028デフォルトの名無しさん
2007/03/16(金) 23:06:510029デフォルトの名無しさん
2007/03/16(金) 23:57:22http://www.din.or.jp/~ohzaki/perl.htm#File_Reverse
0030デフォルトの名無しさん
2007/03/18(日) 04:31:05プロセスの終了を待たずにhoge.exeを起動して
次の処理へと移りたいのですが、どうすればいいのでしょうか?
&routine;
system('hoge.exe'); # ここで終了を待ちたくない
&routine2;
0031デフォルトの名無しさん
2007/03/18(日) 04:42:090032デフォルトの名無しさん
2007/03/18(日) 06:32:23スカラーの場合だと、こんな感じの関数で。
sub Del {
my $v = $_[0];
$_[0] = undef;
return $v;
}
0033デフォルトの名無しさん
2007/03/18(日) 06:40:08system('start hoge.exe');
0034デフォルトの名無しさん
2007/03/18(日) 11:33:47ない。
0035デフォルトの名無しさん
2007/03/18(日) 13:50:21第一引数に1を。
ActivePerlだけだっけ。
0036デフォルトの名無しさん
2007/03/18(日) 14:22:24Win32::Processは?
0037デフォルトの名無しさん
2007/03/18(日) 16:01:200038デフォルトの名無しさん
2007/03/18(日) 16:42:21あってもどうせ過疎る。
だからここでけっこう雑談もしてる。
0039デフォルトの名無しさん
2007/03/18(日) 17:16:31perl って普及してるのにそう言う人あまり居ないんだね
道具として使っている人がほとんどなのかな
0040デフォルトの名無しさん
2007/03/18(日) 17:29:290041デフォルトの名無しさん
2007/03/18(日) 17:52:44本スレがあれば変な分散抑えられるかもだけど…。でもやっぱ過疎りそうだね。
0042デフォルトの名無しさん
2007/03/18(日) 18:18:380043デフォルトの名無しさん
2007/03/18(日) 18:43:54ありがとうございます。
一瞬演算子レベルであっても良さそうな気はしたが、あってもあまり使わないか。
0045デフォルトの名無しさん
2007/03/18(日) 22:36:23再度繋ぎなおしたいのですが、接続が切れると、
「No active connections left, exiting...」という表示と共に
スクリプト自体が死んでしまいます。
どうすれば接続が切れたときに再度繋ぎ直すことが出来ますか?
0046デフォルトの名無しさん
2007/03/19(月) 00:20:460048デフォルトの名無しさん
2007/03/20(火) 16:10:23print 'hello!'; だけでもメモリを 20M くらい使うようになりました。
サーバのメモリが 2G のため、同時に 100 アクセスくらいあると
サーバがかなり重くなってしまいます。
サーバのスペックを上げることになったのですが、
同時に消費メモリも下げろと言われています。
CPAN のモジュールは外せないのですが、
ソフトウェア的に何か解決策はありませんか?
0049デフォルトの名無しさん
2007/03/20(火) 16:13:480050デフォルトの名無しさん
2007/03/20(火) 16:17:42いろいろあるだろうけど、コードの再利用で量を減らすとか、
容量の大きい配列は、他の変数への複製を一切せず、全て
参照等で解決するとか。
0051デフォルトの名無しさん
2007/03/20(火) 16:21:240052デフォルトの名無しさん
2007/03/20(火) 16:35:110053デフォルトの名無しさん
2007/03/20(火) 18:44:580054デフォルトの名無しさん
2007/03/20(火) 18:53:15例えばソケットを作ってから新規スレッドを作った場合、ソケットも2つ存在し、
my $sock = IO::Socket::INET - > new(attributes);
my $thread = threads -> create(\&example);
$thread -> detach;
$sock -> close();
この場合、生成されたスレッドからはまだソケット利用できるということでしょうか?
ソケットの実体がいまいち掴めてないので余計に混乱してしまいました・・・
0055デフォルトの名無しさん
2007/03/20(火) 20:04:040056デフォルトの名無しさん
2007/03/20(火) 20:32:31配列をサブルーチンへ渡したりサブルーチンから返したりする場合に、
複数の配列ではなく(1つのリストにまとめられる心配がない)、
大きくもない配列の場合だったら、
そのまま渡したり返したりした方が
ほとんどパフォーマンスが変わらない上にコードの見通しが良くなったりしますか?
0057デフォルトの名無しさん
2007/03/20(火) 20:43:08再度勉強してきます。有難うございました。
0058デフォルトの名無しさん
2007/03/20(火) 22:10:03???
一つのリストにまとめられない心配がない、じゃなくて?
0059デフォルトの名無しさん
2007/03/20(火) 22:44:25そりゃあ使わないで済むなら、リファレンスなんて使わないほうがシンプルになるだろうね。
でも、後で「やっぱり大きな配列を扱うようにしたい」とか「複数の配列を受け取りたい」とか
思った時の事を考えると、あらかじめリファレンス受け取りにしといた方が、少ない変更で済んで
互換性を保ちやすいのは確かだと思うよ。
006050
2007/03/20(火) 23:00:32先のメモリ最適化は、perlみたいな高級言語(BASICとか)では
できる事には限界があるでしょね。
メモリの解放だってできないすぃ。いかに使わないか、なのかな。
006156
2007/03/21(水) 07:11:38自分の書き方がまどろっこしくてごめんなさい
●複数の配列ならまとめられてしまうので、リファレンスのリストで渡す・返すのは必須
●考えていたサブルーチンでは、複数の配列を渡さない・返さない
= リストがまとめられる心配がないので、リファレンスを使わず無精でウマー
と考えていました
>>59-60
サンクスです
短期的には何はともあれプロファイラで見るか、という勢いだったのですが、
中長期的な視点も大事ですね
ループで回しているようなサブルーチンだとかだと、
塵も積もれば……にもなりそうですので、節約することにします
0062デフォルトの名無しさん
2007/03/21(水) 14:03:20プロセス間通信を使うのがいいんじゃないかな。
モジュールを呼び出して実行するプロセスを一つ立ち上げて、
他のプロセスはこのプロセスと通信して実行結果をもらうようにする。
0063デフォルトの名無しさん
2007/03/21(水) 14:07:03MP3::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の文字列にしようと試みたのですが、
激しい文字化けに見舞われたり、だめでした。
どうか、お力をお貸しいただけませんでしょうか。宜しくお願いします。
0064デフォルトの名無しさん
2007/03/21(水) 14:54:56書いてあるから
006563
2007/03/21(水) 15:08:22すみません、英語は正確に読めません。
フィーリングで適当にイグザンプルを斜め読みして書いてます。
use_mp3_utf8() の事でしたら、違います。
確かにこれでShiftJISは治るのですが、
Unicodeが全部"?"に変換されてしまいます。
0066デフォルトの名無しさん
2007/03/21(水) 15:24:47shiftjisにutf8フラグが付いてるだけじゃないの?
006763
2007/03/21(水) 15:41:15その通りだと思うのですが、
_utf8_off、encode、decode等してみたのですが
全て化け化けの結果が返ってきたのです…
0068デフォルトの名無しさん
2007/03/21(水) 16:19:55英語を勉強しろよ。
別のモジュールを使おうとしたときに同じような目に遭うぞ
0069デフォルトの名無しさん
2007/03/21(水) 17:58:000070デフォルトの名無しさん
2007/03/21(水) 18:34:37Rubyでもモジュールの内臓を引き摺り出して書き換える必要があったけど。
0071デフォルトの名無しさん
2007/03/21(水) 21:42:27お約束の「はまり」だ。自力で頑張ってくれ。
例のごとく「PODを読め」とかほざいているやつは、Jcode使えとか言ってるバカと同様
八割方テメエでもできないから心配することはない。
ちなみに、あんたが既に挙げている材料だけでうまくいくよ。
007263
2007/03/21(水) 22:28:13もうかなり悩んでるんです…
挙句の果てにはUnicode文字が含まれてたら
_utf8_off で普通の文字列にし、それ以外はShiftJISとしてutf-8にエンコードしてます。
本当にお願いします…コードをいくつか書いて頂ければ…
0073デフォルトの名無しさん
2007/03/22(木) 00:07:550074デフォルトの名無しさん
2007/03/22(木) 04:24:32掲示板に貼られる画像のサニタイジングをしたいのですが、CPANか
どこかにコードがなかったでしょうか。とりあえずJPEGとPNGだけでも
処理できたらいいのですが。
0075デフォルトの名無しさん
2007/03/22(木) 05:05:440076デフォルトの名無しさん
2007/03/22(木) 08:35:230077デフォルトの名無しさん
2007/03/22(木) 08:43:350079デフォルトの名無しさん
2007/03/22(木) 16:11:560080デフォルトの名無しさん
2007/03/22(木) 17:12:58これがエラーになるのですが考えられる原因はなんでしょうか?
0081デフォルトの名無しさん
2007/03/22(木) 17:22:22・useしてない
・モジュールが無い
・ブラウザで表示してるのにContentヘッダを出力してない
・脳内鯖にしかアップしてない
とりあえずエラーログ見ればいいと思う
0082デフォルトの名無しさん
2007/03/22(木) 17:44:290083デフォルトの名無しさん
2007/03/22(木) 17:55:050084デフォルトの名無しさん
2007/03/22(木) 18:03:420085デフォルトの名無しさん
2007/03/22(木) 18:03:460086デフォルトの名無しさん
2007/03/22(木) 18:14:190087デフォルトの名無しさん
2007/03/22(木) 18:28:020088デフォルトの名無しさん
2007/03/22(木) 19:39:440089デフォルトの名無しさん
2007/03/22(木) 19:43:350090デフォルトの名無しさん
2007/03/22(木) 20:24:23正規表現で伸ばし棒を使うとエラーが出てしまうのですがこれを回避する方法はないでしょうか?
よろしくお願いいたします
0091デフォルトの名無しさん
2007/03/22(木) 20:25:370092デフォルトの名無しさん
2007/03/22(木) 20:26:57これです
0093デフォルトの名無しさん
2007/03/22(木) 20:27:490094デフォルトの名無しさん
2007/03/22(木) 20:30:15具体的にエラーがでる正規表現と、エラーの文も書いてくれ
■ このスレッドは過去ログ倉庫に格納されています