トップページ⇒php
1001コメント315KB

Perl コーディング初心者質問コーナー Part25

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/06/28 01:18ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

関連スレ
【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/

過去ログやお勧めサイトは >>2-10
0002nobodyさん03/06/28 01:18ID:???
[過去ログ] 1 of 2

Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
 DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
 DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 http://pc.2ch.net/php/kako/1026/10269/1026977659.html
Part15 http://pc.2ch.net/php/kako/1028/10288/1028816385.html
0003nobodyさん03/06/28 01:18ID:???
[過去ログ] 2 of 2

Part16 http://pc.2ch.net/php/kako/1032/10320/1032070299.html
part17 http://pc.2ch.net/php/kako/1034/10345/1034583844.html
part18 http://pc.2ch.net/php/kako/1037/10377/1037797479.html
part19 http://pc.2ch.net/php/kako/1042/10422/1042260745.html
part20 http://pc2.2ch.net/php/kako/1044/10447/1044717887.html (タイトルに19と誤記)
part21 http://pc2.2ch.net/php/kako/1047/10479/1047980851.html
part22 http://pc2.2ch.net/test/read.cgi/php/1050369328/l50
part23 http://pc2.2ch.net/test/read.cgi/php/1053051519/l50
part24 http://pc2.2ch.net/test/read.cgi/php/1054992610/

[ひまぢん氏のミラー]
Part1 http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.html
Part2 http://www.angelfire.com/ak5/2ch-web-program/kako/971817087.html
Part3 http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
Part4 http://www.angelfire.com/ak5/2ch-web-program/kako/984430156.html
Part5 http://www.angelfire.com/ak5/2ch-web-program/kako/988728069.html
0004nobodyさん03/06/28 01:19ID:???
[総合]
 ・Perl Com: http://www.perl.com/pub/
 ・CPAN.com: http://search.cpan.org/
 ・ActivePerl: http://www.activestate.com/
 ・CGI-ML:http://forest.ne.jp/cgi-ml/

[お薦め]
 ・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm ★読んどけ
 ・Perl Recipes: http://www.effectiveperl.com/recipes/
 ・Randal's WebTechniques columns: http://www.stonehenge.com/merlyn/WebTechniques/
 ・Perlの部屋: http://www.cc.rim.or.jp/~midorin/mad-p/perl/index.html
 ・Perl初心者の部屋:http://www.harukaze.net/~mishima/perl/
 ・Perlリファレンス:http://www.big.or.jp/~mio/ga/pl/plref/pl_ref.htm
 ・Perlのページ:http://homepage1.nifty.com/nomenclator/perl/
0005nobodyさん03/06/28 01:19ID:???
[Document&Tutorial]
 ・Perl News: http://www.news.perl.org/
 ・Perl Monks: http://www.perlmonks.org/
 ・use Perl; : http://use.perl.org/
 ・Learn Perl - Perl Education: http://www.devdaily.com/perl/edu/index.shtml
 ・Perldoc.com: http://www.perldoc.com/
 ・Using Perl5 in Web: http://docs.rinet.ru/Using_Perl5_in_Web/
 ・Rex Swain's Home Page: http://www.rexswain.com/
 ・Robert's Perl Tutorial: http://www.netcat.co.uk/rob/perl/win32perltut.html
 ・Perl Tuts: http://savage.net.au/Perl-tutorials.html
 ・Beginning Perl Tutorials: http://www.pageresource.com/cgirec/index2.htm
 ・jcode.pl の私的な解説書: http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
 ・Logical Choice Software, Home Page: http://www.logsoft.com/perltips/
 ・Perlfect Solutions: http://perlfect.com/
 ・The Perl Archive : http://www.perlarchive.com/
 ・Perl6 & Parrot VM についての情報: http://dev.perl.org/perl6/
 ・use Object; : http://perl.infoware.ne.jp/
0006nobodyさん03/06/28 01:19ID:???
[Module]
 ・Perl Module Reference: http://www.bekknet.ad.jp/~bero/docj/module_/
 ・PPMPackages: http://www.activestate.com/PPMPackages/
 ・河馬屋二千年堂's Page: http://member.nifty.ne.jp/hippo2000/index.htm

[Security]
 ・安全なプログラミングのためのガイドライン:http://www.FreeBSD.org/ja/security/#spg
 ・Perl security:http://www.perldoc.com/perl5.6/pod/perlsec.html
 ・Perl security和訳:http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsec.html
 ・CGI and Security http://www.ansi.co.jp/tech/cgi/security/
 ・The Unofficial Web Hack FAQ:http://www.nmrc.org/faqs/www/
 ・How to Write Secure Code:http://www.shmoo.com/securecode/
 ・Safe CGI Programming :http://www.improving.org/paulp/cgi-security/safe-cgi.txt

[OS]
 ・Linux日本語マニュアル:http://www.linux.or.jp/JM/
 ・FreeBSD日本語マニュアル:http://www.jp.freebsd.org/man-jp/
0007nobodyさん03/06/28 01:32ID:???
CGIについての質問もじゃんじゃん待ってます。
0008nobodyさん03/06/28 01:32ID:???
#!/perl/bin/perl
open( DATA, "ls -1 . | " );
@aList = <DATA>;
close( DATA );
@aArg = split( /=/, <STDIN> );
print "Content-type: text/html\n\n";
print << "END_OF_HTML";
<HTML>
<BODY>
<FORM action="test.pl" name=testform method="POST">
END_OF_HTML
print "<SELECT name=file onChange=submit();>";
foreach $file (@aList) {
print "<OPTION value=".$file.">".$file;
}
print "</SELECT>";
print "<BR>";
print "プルダウン名称:".$aArg[0]."<BR>";
print "プルダウンの値:".$aArg[1]."<BR>";
print << "END_OF_HTML";
</FORM>
</BODY>
</HTML>
END_OF_HTML

これを実行するとファイル一覧のプルダウンが作成されて、選択すると内容が表示されます。
ただ、日本語ファイル名が含まれていると文字化けします。
どうすればよいか分かる方、おられましたらご教示願います。

環境はWinXP Apache1.3 ActivePerl5.8です。
0009803/06/28 01:41ID:???
自己レスすいません。
packすればよかったんですね。。。

ゴミレスすいませんでした。
0010nobodyさん03/06/28 01:41ID:???
文字化けする文字だからじゃない?
5cで終わってるヤツ
0011nobodyさん03/06/28 01:42ID:???
あら、解決してた
0012803/06/28 01:43ID:???
ごめんなさい_(._.)_

URLエンコード?されてたから、それを戻さないと使えなかったようです。

本当に、申し訳ないです。
0013nobodyさん03/06/28 08:31ID:???
せっかくだから use CGI; しようよ。
パラメータのデコードや出力のエンコードを面倒見てくれるし、
HTMLの文法間違いや入れ子のミスも防げるから楽だよ。
0014 ◆hMJAPH9PWA 03/06/28 09:11ID:???
テンプレにperldoc.jpも入れたほうが良いんじゃないかな。
http://perldocjp.sourceforge.jp/
0015nobodyさん03/06/28 10:54ID:???
>>13
CGI.pmって読み込むだけで0.2秒くらいかからない?
0016nobodyさん03/06/28 11:03ID:???
>>15

かえれ
0017nobodyさん03/06/28 11:29ID:???
>>16
なぜに? 何か勘違いしてましたか?
0018nobodyさん03/06/28 11:36ID:SawIuqpj
>>16-17
うちの環境だと確かに読込に0.2秒ほどかかるな。
7年落ちのHDDとCPUが133MHzだけど。
0019nobodyさん03/06/28 11:48ID:???
>>18
1000MHzで時間かかるんですが。てか、とにかく重いんですが。
全部読んでるから?
0020nobodyさん03/06/28 12:41ID:???
あれはかなり重い。
俺の環境だと200KBくらいあるな。コメントが多いといっても、これはなかなかのものだ。
0021nobodyさん03/06/28 12:54ID:???
メモリもくう
0022nobodyさん03/06/28 13:16ID:SawIuqpj
使ったことないし、使う必要性を感じたこともないのだが>CGI.pm
何が便利なん?
0023nobodyさん03/06/28 13:17ID:???
>>22
速攻同意。
0024あぼーんNGNG
あぼーん
0025nobodyさん03/06/28 14:16ID:???
>>22
楽

Perl使いにとっては重要な要素だと思うが。
0026nobodyさん03/06/28 14:18ID:???
>>25
22じゃないけど、楽か?


お前は使いこなせてない、とか言うなよ
0027nobodyさん03/06/28 14:19ID:???
>>26
お前は使いこなせてない
0028nobodyさん03/06/28 14:20ID:???
>>27
そうくると思った。どういう点で楽?
0029あぼーんNGNG
あぼーん
00302703/06/28 14:34ID:???
>>28
いや、俺25じゃないけど。でも答えてみる。

一応CGI.pmは使ってます。
でも特に楽というわけじゃなくて、俺が標準っぽいのが好きなだけです。
前は自作のライブラリ使ってたけど、大して変わらない。

特に不満は無いけど、強いて言えばパラメータを自動で保持してくれるのがちょっとうざかったり。
スクリプトの方で保持してもらいたくない奴を削除するのがマンドクセー。
0031nobodyさん03/06/28 14:36ID:???
print('A');マンドクセ
0032nobodyさん03/06/28 14:46ID:???
自分用の物は、CGI::Minimalしか使いません。
0033nobodyさん03/06/28 15:01ID:???
うーん、CGIスクリプト書く時って、パラメタ切り分けるのに
自分用のコード(2,30行くらい)をrequireするくらいで、後は
CGI特有の処理でモジュール用意するほどのものって思いつかない。

ヘッダ出力のprint文とか、「こんたいぷれ」とか「こんたいえい」とかで漢字変換
するようになってるし。(text/plain text/html)
0034nobodyさん03/06/28 15:10ID:???
>>33
わざわざそんなことせんでも
Content-type: text/html
って撃ったほうが早くないか?
0035nobodyさん03/06/28 15:16ID:???
>>34
print "Content-Type: text/html; charset=EUC-JP\n\n";
print "Content-Type: text/html; charset=Shift_JIS\n\n";
まで出るようになってる。
「kontaiei」の方がはるかに早い。
0036nobodyさん03/06/28 15:18ID:???
>>35
なるほど。
まぁ、僕は、自分用のゴチャゴチャしたモジュールんなかにcontentってサブルーチン作ってるからそれでいいんだけど。
いちいち日本語に切り替えるのが面倒そう?そうでもない?
0037nobodyさん03/06/28 15:19ID:???
確かに早いと思うけど、違う環境になると
正確に入力できなそうで困らないかな。
0038nobodyさん03/06/28 15:20ID:???
>>36
そうでもない。慣れかも。一時的な短いスクリプトをさっと書きたい時とか
いちいちモジュール呼ばないので。
まぁこの辺は好き好きだと思うけど。
0039nobodyさん03/06/28 16:40ID:???
>>33
ワラタ
俺も使わせてもらうわ。
0040nobodyさん03/06/28 16:47ID:???
>>39
あと、

my($sec, $min, $hou, $day, $mon, $yea, $wek) = localtime();

なんかも入れておくと便利。
0041nobodyさん03/06/28 16:53ID:???
#!/usr/bin/perl = いつもの
0042nobodyさん03/06/28 17:07ID:???
>>41
絶対普通に書いたほうが早い
0043あぼーんNGNG
あぼーん
0044nobodyさん03/06/28 17:27ID:???
>>41
そんなもんファイルを新規作成した時点で自動的に書かれる。
0045nobodyさん03/06/28 17:53ID:???
CGI.pm をやたら use したがるヤシは基礎的なコーディングできないから楽したいだけでは?
0046nobodyさん03/06/28 18:00ID:???
>>45
「基礎的なコーディングできない」と「楽したい」につながりがありませんよ。
できる人ほど楽をするための努力をするものです。
0047nobodyさん03/06/28 18:06ID:???
>>40
my @dates = localtime();
にしる!
0048あぼーんNGNG
あぼーん
00493303/06/28 19:40ID:???
>>41
俺もソレは登録してない。
>>44
さすが。
>>47
コードが読みにくいからやだ(好みの問題)。なんかよく間違うし。
00502503/06/28 19:47ID:???
HTMLべたがきすんのやだよー。
タグの閉じ忘れとかやだよー。
ファイルアップロード含む入力の取得でガチャガチャすんのやだよー。
要するに基本的な部分であれこれ悩むのやだよー。
アルゴリズムに労力割きたいよー。
開発時間短いよー。

……まあ、そんな感じでつ。
0051nobodyさん03/06/29 00:51ID:x7Ccxqe1
perl でpop3のメールを受信するにはどのようなコードを
書けばいいのですか?

添付付きのメールの受信システムを作りたいのですが、ネットで探しても
なかなか情報が無かったためよろしくお願いします
0052nobodyさん03/06/29 00:57ID:???
>>51
自分で調べれ。調べればある。
0053nobodyさん03/06/29 01:21ID:WiALlB7N
>>51
1からちゃんとやりたいのであれば、
http://www.kt.rim.or.jp/~kbk/perl5.005/perlipc.html#Internet_TCP_Clients_and_Servers
これと、
http://www.ietf.org/rfc/rfc1939.txt
これ。あとは頑張れ。
0054あぼーんNGNG
あぼーん
0055nobodyさん03/06/29 01:55ID:15+Vm9kH
前スレでも質問しましたが、1000行ってしまったようなのでもう一度。

unicodeの文字列をURLエンコードするにはどうすればいいのでしょうか?
JavaScriptのescapeのように、あいうえお->%u3042%u3044%u3046%u3048%u304A
といった感じで変換したいのです。
$value =~ s/(\W)/'%' . unpack 'H2' , $1/eg;
とやっただけではムリでした。

どのようすればいいのでしょうか?
0056nobodyさん03/06/29 02:19ID:???
>>55
$value =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
0057nobodyさん03/06/29 02:22ID:???
>>55
Jcode.pmを使えば?
0058nobodyさん03/06/29 03:58ID:???
>>55
$value =~ s/(\W)/'%' . unpack 'H2' , $1/eg; が
何をしているか理解できていれば分かりそうなもんだが。
正規表現と pack/unpack について、もうちっと勉強すれ。

$value =~ s/(..)/'%u' . unpack 'H4' , $1/eg;
0059nobodyさん03/06/29 08:56ID:???
open(FILE, "hoge.txt");

while(<FILE>) {
(置換とか)
}

open(WRITE, ">test.txt");
print WRITE <FILE>;

とやったのですがtest.txtにhoge.txtを処理した内容が書き込まれません。
何処が間違っているのでしょうか…。

Win2K、Apache1.3.27、ActivePerl5.6を使用。

0060nobodyさん03/06/29 09:09ID:???
use *****

で、***** が使えるかどうか評価する関数ってありますか?
0061nobodyさん03/06/29 09:18ID:???
>>59
open(FILE, "hoge.txt");

while(<FILE>) {
(置換とか)
push @new, $_; # ここ追加
}

open(WRITE, ">test.txt");
print WRITE @new; # ここ変更

こうだろ?
0062nobodyさん03/06/29 09:21ID:???
>>60
専用の関数はない。
@INCの中に、use(とrequire)がモジュールを探してくるディレクトリが入ってる。
それをreaddirとかで開いて使いたいモジュールがあるかどうかさがしなされ。
0063nobodyさん03/06/29 10:14ID:???
>>59
hoge.txt 全てをオンメモリにしたくなければこう。

open IN, '<' . 'hoge.txt' or error();
open OUT, '>' . 'test.txt' or error();

while (<IN>) {
 ...
 print OUT $_;
}

>>60
use Foo @arg; は
BEGIN { require Foo; Foo->import(@arg) } と等価。

BEGIN {
 eval { require Foo } or error();
 Foo->import(@arg);
}
0064nobodyさん03/06/29 10:20ID:???
>>62
むぅ…eval じゃ駄目っすかね?
0065nobodyさん03/06/29 10:27ID:WiALlB7N
>>60について
>>62
そ、それは面倒くさすぎないか・・・?いつもそうやってんの?

eval("use MODULE");
error("Can't locale MODULE") if $@;

my $ins = new MODULE(xx,yy,zz);

これで済むじゃん。
0066nobodyさん03/06/29 10:27ID:???
>>64
あ、ケコーン
0067nobodyさん03/06/29 10:32ID:???
>61,63
ありがとうございます。
今回は61さんの方法でやって上手く行きました。
006860 = 6203/06/29 11:58ID:???
レスありが�d
>>62 さんの方法は「実行しないで」確認する方法として関数化して使う事にしました
0069nobodyさん03/06/29 13:34ID:???
そしたらさア
0070nobodyさん03/06/29 14:04ID:???
>>69
ナンダッテ━━━━ヽ('A`)ノ ( ;゜Å゜)n‘∀‘)η´Д`)゚∀゚)=3━━━━
0071nobodyさん03/06/29 14:44ID:???
厨な質問で申し訳ないですが、PerlはSMAPで言うと誰ですか?
0072nobodyさん03/06/29 14:45ID:???
>>65
>>68の言うとおりです。
あらかじめこれで実行環境を確認してからスクリプト組むようにしてます。
0073nobodyさん03/06/29 21:22ID:???
evalは少しだけ遅いような気がするから、::を/に直してrequireして戻り値を調べるっていうのはどう?
■ このスレッドは過去ログ倉庫に格納されています