Perl コーディング初心者質問コーナー Part25
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/06/28 01:18ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
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
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:???・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:???・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:???0008nobodyさん
03/06/28 01:32ID:???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です。
00098
03/06/28 01:41ID:???packすればよかったんですね。。。
ゴミレスすいませんでした。
0010nobodyさん
03/06/28 01:41ID:???5cで終わってるヤツ
0011nobodyさん
03/06/28 01:42ID:???00128
03/06/28 01:43ID:???URLエンコード?されてたから、それを戻さないと使えなかったようです。
本当に、申し訳ないです。
0013nobodyさん
03/06/28 08:31ID:???パラメータのデコードや出力のエンコードを面倒見てくれるし、
HTMLの文法間違いや入れ子のミスも防げるから楽だよ。
http://perldocjp.sourceforge.jp/
0018nobodyさん
03/06/28 11:36ID:SawIuqpjうちの環境だと確かに読込に0.2秒ほどかかるな。
7年落ちのHDDとCPUが133MHzだけど。
0020nobodyさん
03/06/28 12:41ID:???俺の環境だと200KBくらいあるな。コメントが多いといっても、これはなかなかのものだ。
0021nobodyさん
03/06/28 12:54ID:???0022nobodyさん
03/06/28 13:16ID:SawIuqpj何が便利なん?
0024あぼーん
NGNG0029あぼーん
NGNG003027
03/06/28 14:34ID:???いや、俺25じゃないけど。でも答えてみる。
一応CGI.pmは使ってます。
でも特に楽というわけじゃなくて、俺が標準っぽいのが好きなだけです。
前は自作のライブラリ使ってたけど、大して変わらない。
特に不満は無いけど、強いて言えばパラメータを自動で保持してくれるのがちょっとうざかったり。
スクリプトの方で保持してもらいたくない奴を削除するのがマンドクセー。
0031nobodyさん
03/06/28 14:36ID:???0032nobodyさん
03/06/28 14:46ID:???0033nobodyさん
03/06/28 15:01ID:???自分用のコード(2,30行くらい)をrequireするくらいで、後は
CGI特有の処理でモジュール用意するほどのものって思いつかない。
ヘッダ出力のprint文とか、「こんたいぷれ」とか「こんたいえい」とかで漢字変換
するようになってるし。(text/plain text/html)
0035nobodyさん
03/06/28 15:16ID:???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:???なるほど。
まぁ、僕は、自分用のゴチャゴチャしたモジュールんなかにcontentってサブルーチン作ってるからそれでいいんだけど。
いちいち日本語に切り替えるのが面倒そう?そうでもない?
0037nobodyさん
03/06/28 15:19ID:???正確に入力できなそうで困らないかな。
0038nobodyさん
03/06/28 15:20ID:???そうでもない。慣れかも。一時的な短いスクリプトをさっと書きたい時とか
いちいちモジュール呼ばないので。
まぁこの辺は好き好きだと思うけど。
0040nobodyさん
03/06/28 16:47ID:???あと、
my($sec, $min, $hou, $day, $mon, $yea, $wek) = localtime();
なんかも入れておくと便利。
0041nobodyさん
03/06/28 16:53ID:???0043あぼーん
NGNG0045nobodyさん
03/06/28 17:53ID:???0048あぼーん
NGNG005025
03/06/28 19:47ID:???タグの閉じ忘れとかやだよー。
ファイルアップロード含む入力の取得でガチャガチャすんのやだよー。
要するに基本的な部分であれこれ悩むのやだよー。
アルゴリズムに労力割きたいよー。
開発時間短いよー。
……まあ、そんな感じでつ。
0051nobodyさん
03/06/29 00:51ID:x7Ccxqe1書けばいいのですか?
添付付きのメールの受信システムを作りたいのですが、ネットで探しても
なかなか情報が無かったためよろしくお願いします
0053nobodyさん
03/06/29 01:21ID:WiALlB7N1からちゃんとやりたいのであれば、
http://www.kt.rim.or.jp/~kbk/perl5.005/perlipc.html#Internet_TCP_Clients_and_Servers
これと、
http://www.ietf.org/rfc/rfc1939.txt
これ。あとは頑張れ。
0054あぼーん
NGNG0055nobodyさん
03/06/29 01:55ID:15+Vm9kHunicodeの文字列をURLエンコードするにはどうすればいいのでしょうか?
JavaScriptのescapeのように、あいうえお->%u3042%u3044%u3046%u3048%u304A
といった感じで変換したいのです。
$value =~ s/(\W)/'%' . unpack 'H2' , $1/eg;
とやっただけではムリでした。
どのようすればいいのでしょうか?
0058nobodyさん
03/06/29 03:58ID:???$value =~ s/(\W)/'%' . unpack 'H2' , $1/eg; が
何をしているか理解できていれば分かりそうなもんだが。
正規表現と pack/unpack について、もうちっと勉強すれ。
$value =~ s/(..)/'%u' . unpack 'H4' , $1/eg;
0059nobodyさん
03/06/29 08:56ID:???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:???で、***** が使えるかどうか評価する関数ってありますか?
0061nobodyさん
03/06/29 09:18ID:???open(FILE, "hoge.txt");
while(<FILE>) {
(置換とか)
push @new, $_; # ここ追加
}
open(WRITE, ">test.txt");
print WRITE @new; # ここ変更
こうだろ?
0062nobodyさん
03/06/29 09:21ID:???専用の関数はない。
@INCの中に、use(とrequire)がモジュールを探してくるディレクトリが入ってる。
それをreaddirとかで開いて使いたいモジュールがあるかどうかさがしなされ。
0063nobodyさん
03/06/29 10:14ID:???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);
}
0065nobodyさん
03/06/29 10:27ID:WiALlB7N>>62
そ、それは面倒くさすぎないか・・・?いつもそうやってんの?
eval("use MODULE");
error("Can't locale MODULE") if $@;
my $ins = new MODULE(xx,yy,zz);
これで済むじゃん。
0067nobodyさん
03/06/29 10:32ID:???ありがとうございます。
今回は61さんの方法でやって上手く行きました。
0069nobodyさん
03/06/29 13:34ID:???0071nobodyさん
03/06/29 14:44ID:???0073nobodyさん
03/06/29 21:22ID:???0074nobodyさん
03/06/29 21:34ID:15+Vm9kH&function($year,$mon,$day,$hour,$sec,$min);
とすると1056889951がリターンされてくるような。
0075nobodyさん
03/06/29 21:36ID:???0076nobodyさん
03/06/29 21:36ID:oIT5F8QqPOSIX::mktime()
ちなみに標準ライブラリ
007755
03/06/29 21:37ID:???>>56-58のみなさん
ありがとうございます。
解決しました。
UNICODEは%uに(4桁の16進数)が組み合わさるので、
Hで16進数、4で4桁ということでいいんですよね…?
007855=74
03/06/29 21:39ID:???>>75-76のお二人
ありがとうございました。
標準ライブラリももっと勉強した方がよさそうです(汗)。
0080あぼーん
NGNG0081119
03/06/29 22:52ID:tnHKF+kRこれをそのままフォームのボタンを押すことで同一のページに返したいのですが、
いちいち<input type="hidden" name="test" value="test">などとしないといけない
のでしょうか。
0082nobodyさん
03/06/30 00:13ID:???0083nobodyさん
03/06/30 00:19ID:???0084nobodyさん
03/06/30 01:01ID:???ググっても分かんないッス・・
0085nobodyさん
03/06/30 01:34ID:???0086nobodyさん
03/06/30 01:58ID:???0087nobodyさん
03/06/30 02:01ID:???>>84
coding
アルゴリズムや処理をコンピュータプログラムとして具現化すること。
または単にプログラムを作成すること。
0088nobodyさん
03/06/30 02:32ID:???0089nobodyさん
03/06/30 03:30ID:???0090nobodyさん
03/06/30 03:35ID:???0092座敷荒氏
03/06/30 06:49ID:???あのあと自分なりに勉強し、パラメータファイルを使用して
ファイル確認することができるように下のように書き換えました。
こちらはうまく動作しています。
#! /usr/bin/perl
while (<>){
($cmd_para) = split;
unless(-e $cmd_para){
exit(100);
}
}
exit(0);
そこで次にファイル削除を作成しようとおもい、
上記の箇所unlessをunlinkに書き換えたところ
シンタックスエラーが発生してしまいます。
どう修正すればいいのでしょうか。
よろしくお願い致します。
0093nobodyさん
03/06/30 07:04ID:???なんか基本がなってないような……
unlessは制御構造。unlinkは関数。名前は似てても、使い方は全く違うものだよ。
前スレ読めないんで、どうやりたいのかもうちょっと具体的に説明して。
それから今回はいいけど、エラーはできるだけ原文をそのまま書いてね。
カタカナで書くと、読み方を間違えていたり、肝心なところ(大抵読み方が分からない単語)を省略してたりして
意味が正しく伝わらないことがあるから。
0094nobodyさん
03/06/30 08:15ID:???0095nobodyさん
03/06/30 08:45ID:???いけないの?
0096座敷荒氏
03/06/30 10:20ID:???92に記載したのは確認したいファイルのフルパスを記載した
パラメータファイルを用意し、そのファイル名を指定して実行すると
ファイルがある場合には0を返して終了し、ない場合には100を返して終了する、
というプログラムです。
これと同じように、削除したいファイルのフルパスを記載した
パラメータファイルを用紙し、そのファイル名を指定して実行したときに
ファイルが削除できた場合には0を返して、ない場合には100を返して終了する、
というように動作するものを作りたいと思います。
92に記載したようにunlessをunlinkに書き換えただけで実行すると
syntax error at ./test line 4, near "){"
syntax error at ./test line 5, near "}}"
Execution of ./test aborted due to compilation errors.
と表示されてしまいます。
0097nobodyさん
03/06/30 10:31ID:???0099543
03/06/30 15:38ID:???お教え頂いたように修正しましたが
bash: ./Perltest: bad interpreter: Permission denied
と表示されてしまい、うまく動作しません。
使用したPerlファイル・パラメータファイル・削除対象ファイルの
パーミッションは設定済みです。
0100nobodyさん
03/06/30 16:03ID:???0101nobodyさん
03/06/30 16:05ID:???Content-Lengthが付いて無いファイルのサイズを取得する手段は無いものでしょうか。
■ このスレッドは過去ログ倉庫に格納されています