Perlコーディング初心者質問スレ Part 44
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2005/10/17(月) 00:47:17ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0002nobodyさん
2005/10/17(月) 00:47:57ID:???CGI: Common Gateway Interface part 13
http://pc8.2ch.net/test/read.cgi/php/1126436361/
【Perl,CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/
【Perl】ファイルロック(排他処理)について語ろう
http://pc8.2ch.net/test/read.cgi/php/1024795138/
★負荷軽減対策委員会(Perl、PHP)★
http://pc8.2ch.net/test/read.cgi/php/1034645635/
Perlモジュールについて
http://pc8.2ch.net/test/read.cgi/php/997829243/
CGIに依存しないPerlの話題一般/Part2
http://pc8.2ch.net/test/read.cgi/php/1030548610/
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1077525387/
【 スクリプト改造依頼スレ 】(丸投げ) part4
http://pc8.2ch.net/test/read.cgi/php/1127916965/
0003nobodyさん
2005/10/17(月) 00:48:29ID:???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
0004nobodyさん
2005/10/17(月) 00:49:52ID:???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
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と誤記)
0005nobodyさん
2005/10/17(月) 00:50:39ID:???part21 http://pc2.2ch.net/php/kako/1047/10479/1047980851.html
part22 http://pc2.2ch.net/php/kako/1050/10503/1050369328.html
part23 http://pc2.2ch.net/php/kako/1053/10530/1053051519.html
part24 http://pc2.2ch.net/php/kako/1054/10549/1054992610.html
part25 http://pc2.2ch.net/php/kako/1056/10567/1056730690.html
part26 http://pc5.2ch.net/php/kako/1059/10590/1059043704.html
part27 http://pc5.2ch.net/php/kako/1060/10608/1060808783.html
part28 http://pc5.2ch.net/php/kako/1063/10635/1063562491.html
part29 http://pc5.2ch.net/php/kako/1066/10662/1066286828.html
part30 http://pc5.2ch.net/test/read.cgi/php/1069846177/
0006nobodyさん
2005/10/17(月) 00:51:22ID:???part31 http://pc5.2ch.net/test/read.cgi/php/1072896288/
part32 http://pc5.2ch.net/test/read.cgi/php/1075545279/ (タイトルに31と誤記)
part33 http://pc5.2ch.net/test/read.cgi/php/1078076768/
part34 http://pc5.2ch.net/test/read.cgi/php/1081148490/
part35 http://pc5.2ch.net/test/read.cgi/php/1085557731/
part36 http://pc5.2ch.net/test/read.cgi/php/1089779036/
part37 http://pc5.2ch.net/test/read.cgi/php/1093106507/
part38 http://pc5.2ch.net/test/read.cgi/php/1097158988/
part39 http://pc5.2ch.net/test/read.cgi/php/1101522903/
part40 http://pc5.2ch.net/test/read.cgi/php/1106816922/
part41 http://pc8.2ch.net/test/read.cgi/php/1110383236/
part42 http://pc8.2ch.net/test/read.cgi/php/1116970588/
part43 http://pc8.2ch.net/test/read.cgi/php/1123777607/ (前スレ)
0007nobodyさん
2005/10/17(月) 00:52:36ID:???[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: 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/4873110378/
[オンラインマニュアル] (追加)
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.7/
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://search.cpan.jp/
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
0008nobodyさん
2005/10/17(月) 00:53:16ID:???[モジュール]
CPAN.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
関連スレ
正規表現道場@2ch Part4
http://pc8.2ch.net/test/read.cgi/php/1105930285/
0010nobodyさん
2005/10/17(月) 01:08:17ID:???0011nobodyさん
2005/10/17(月) 01:42:22ID:???誰か (ちゃんとしたスクリプトを書いてくれるとこ) に依頼した方が会社もお前もいい判断だろうに。
1〜2週間やそこら悩んでできないくらいだったらそのほうがはるかにコストパフォーマンスがよいハズ。
つかそんなことで雇ってもらえてるのが、何ていうか、うらやましい。
0012nobodyさん
2005/10/17(月) 01:48:57ID:???0013766
2005/10/17(月) 01:57:00ID:???おっしゃるとおりです。おいらもできるってゆっちゃったのがいけなかったんです。ほんとに前スレの999ですね。。。情けないです。
0014766
2005/10/17(月) 01:59:05ID:???今回だけマジで助けてほしい。。お願いします。
0015nobodyさん
NGNG0016nobodyさん
2005/10/17(月) 02:20:21ID:???まだ出来てないなら要点まとめて頂戴。
まずは、送信したフォームの情報が正しく所得できているのか。
↓
POSTでなく、GETで値をみられるようにする。
データを保存する方法はわかっているのか。
↓
変数に入れた文字が保存できたのか調べる。
0017nobodyさん
2005/10/17(月) 02:43:10ID:???買い物などのWEBで、検索や完了まで時間がかかるとき、「ただいま検索(登録)中です」のような一時的画面を表示させたいのですが、
perlではどのような方法があるでしょうか?
一定時間(例えば1分とか)は、特定の一時ページを表示して、
完了した時に完了ページを表示するものをイメージしています。
javaなどでは時々このようなページを使っているとこがあるのですが。。。。
一応、小枝とかその他有名なサイトは見たんですが、
こういう点での会報がわからなくて。。。。
0018766
2005/10/17(月) 02:50:52ID:???すいません。ありがとうございますです。
・送信したフォームの情報はexcelで開いたとき、名前が文字化け(EUCでやってるからだと思いますが、解決策わからず。。)
・変数にいれた文字(回答番号 1とか2とか)はcsvに数字で保存できています。
【お手上げ】
・前スレ >>981 に書いたような並びでexcelに保存ができなし。。
・名前をいれてなかったらエラー(送信できない)ようにしたい。
です。何卒ご指導お願いいたします。。まじですいません。
001916
2005/10/17(月) 03:04:21ID:???「エクセルは関係ない」。
エクセルで読める表示形式で保存したいって言うのは最後の手段で、今はそこまでいってないので頭から忘れてください。
送信する
↓
データを受け取る
↓
ファイルに保存する
第一段階でHTMLのメソッドをgetに・・・
って現段階のコード、どっかにアップしてもらったほうが早そうね。
もうちょっと常駐しとく。
002016
2005/10/17(月) 03:21:03ID:???0021nobodyさん
2005/10/17(月) 03:41:01ID:???現段階のコードは前スレに。
参考にやり取りを列挙すると
前スレ http://pc8.2ch.net/test/read.cgi/php/1123777607/ の
Q >>922-925
A >>931,932
Q >>936-938
A >>950
Q >>954-956
A >>958
Q >>981,982-986 (現状の全ソース)
その要件を実装するのはすぐにできるけれど、
完成物を渡してしまっても766のためにはならないしな…
0022nobodyさん
2005/10/17(月) 03:51:17ID:???じゃないとまた同じ事繰り返す羽目になる
002316
2005/10/17(月) 04:19:43ID:???0025766
2005/10/17(月) 04:40:42ID:???レス有難うございます。
ヒントだけでも結構です。。後はもちろん自分でなんとか完成させるつもりです。
何卒宜しくお願いいたします。
0027766
2005/10/17(月) 04:54:56ID:???http://www.nextftp.com/sentobeat/
皆さんに頼りっぱなしなのもわかっております。
ヒントだけでもいただければもちろん自分でもなんとかするようにします。
なんとか宜しくお願いいたします。。マジ泣
002816
2005/10/17(月) 05:03:25ID:???希望動作は最初のとおりでいいのよね?
002916
2005/10/17(月) 05:12:34ID:???0030766
2005/10/17(月) 05:13:39ID:???まじですか ほんとに有難うございます。。
はい。希望動作は >>18 に書いたものです。
今なんとか自分でもとりあえずエラー機能をつけようと思って
#入力チェック
if ($in{name} eq '') { &error('名前を入力してください',''); }
を頭につけてみたんですが、動きませんでした。。orz
何卒宜しくお願いいたします。
0031766
2005/10/17(月) 05:16:11ID:???ありがとうございます。
http://other.free-uploader.com/up/
でお願いしますです。
003216
2005/10/17(月) 05:30:28ID:???ソース汚いままだけど保存はちゃんとされるはず。
読みにくかったfont size=2はスタイルに勝手に変えちゃったままですが。
003316
2005/10/17(月) 05:32:40ID:???003416
2005/10/17(月) 05:41:52ID:???0035766
2005/10/17(月) 05:42:40ID:???有難うございますです。マジで感謝です。
今試してみたんでうが、動かない。。泣
パーミッションもなおしますた。
はじめのはquestion_1.inc っていうふぁいると連動してたんですが、
作っていただいたものは関係ありますか?
question_1.cgiにいきなりアクセスですよね?
003616
2005/10/17(月) 05:44:24ID:???usestrictでエラー追いやすいように一つにまとめました。
0037766
2005/10/17(月) 05:53:08ID:???!!!!
でけてるー!!! 感謝です!
こんな朝方まで付き合ってくださって本当にありがとうございます。大泣
ソースみたらやっぱり全然違いますた。。
これは質問をquestion_1.tsvから読み込まなくても、index.html → post でquestion.cgiでももしかしていけますか?
003816
2005/10/17(月) 05:57:15ID:???perlの中の変数はかなり弄ったけど、フォームの部分は触ってません。
0039766
2005/10/17(月) 06:04:44ID:???わかりましたです!やってみますです。
本当に有難うございます。
あと名前をcsvに書き出したいんですが、$in{name}で書き出せるのでしょうか?(配列は自力でやりますです。)
あとその名前が入っていなかったら、エラーにしたいんですが、さっき入れた if ($in{name} eq '') { &error('名前を入力してください',''); } じゃだめでしょうか?
これで最後の質問です。。ご指導おねがいできませんでしょうか?
0040766
2005/10/17(月) 06:16:25ID:???すませんです。。せっかく作っていただいたのですが、
1人目の名前: name1
その人の1〜3問目の回答番号: hoge1, hoge2, hoge3,
1〜3問目の正解番号: anser1,anser2,anser3
2人目の名前: name2
・
とすると
name1、hoge1, hoge2, hoge3,(改行)
”空欄”,anser1,anser2,anser3(改行)
name2、hoge1, hoge2, hoge3,(改行)
”空欄”,anser1,anser2,anser3(改行)
・
になってませんでした。。。泣
hoge1,anser1(改行)
hoge2,anser2(改行)
・
になってました。。もう一度みてもらえませんでしょうか、、再度大泣
004116
2005/10/17(月) 06:23:47ID:???いつのまにか名前入力とか増えてたのね。
>あと名前をcsvに書き出したいんですが、$in{name}で書き出せるのでしょうか?(配列は自力でやりますです。)
フォームで<input type="text" name="name" value="">としていれば$in{name}に入る。
>あとその名前が入っていなかったら、エラーにしたいんですが、さっき入れた if ($in{name} eq '') { &error('名前を入力してください',''); } じゃだめでしょうか?
cgi-lib.plでのエラー表示用はCgiDie。CgiErrorでもいいけどどっちがいいとかは忘れた。
unless ($in{name}) { &CgiDie('名前を入力してください');}
とりあえず、ヒキなおいらに頼るような仕事は今後受けないようしましょうね。
昔、友達に頼まれたCGIが、これによく似てたから作ってみただけですので。
↑これも、ただ働きだったけど。
0042766
2005/10/17(月) 06:36:14ID:???レス有難うございます。やってみますです。
はいです。今後出来ない仕事は請けないです。(絶対)
>>40 の内容をいただいたソースもとにいじってみたんですけど
やぱりエラーでした。。
# CSVへの書き出し
open (CSV , '>>file.csv');
flock (CSV,2);
print CSV join(',', $in{name}, $in{'Q'.$i}), "\n";
print CSV join(',', '', $array[1]), "\n";
flock (CSV,8);
close (CSV);
004316
2005/10/17(月) 06:36:39ID:???こゆこと?
my$data;
my@q1;
my@q2;
for (my$i = 1; $i <= @question; $i ++) {
my@array = split("\t", $question[$i - 1]);
push(@q1, $in{'Q'.$i});
push(@q2, $array[1]);
}
$data = $in{name}.','.join(',', @q1)."\n".','.join(',', @q2)."\n";
正解を保存する理由もよく分からないままなんですが。
あと、選択する問題が4つ目とか増えるなら36行めを
for (my$s = 1; $s <= (@array - 2); $s ++) {
にしないとだめです。
0044766
2005/10/17(月) 06:46:20ID:???はっ!! できてる!
有難うございますー!! (泣きっぱなし)
名前は今EUCなので、excel開けたときに文字化けすてるんですが、
こいつをcsvに書き出すときに直すソースってありますでしょうか?
(ほんとにこれで最後でございます。。)
0045766
2005/10/17(月) 06:53:52ID:???をrequire "cgi-lib.pl";の後に挿入したら、名前しれているのに
でっかく 名前を入力してください て出ます。。
いれるとこ間違ってるのかな?
004616
2005/10/17(月) 06:56:07ID:???読み方 : シーエスブイ
フルスペル : Comma Separated Values
別名 : コンマ区切り
データの保存形式のこと。文字コードの指定はない。
エクセルはShift_jis限定だっけ?
メモ帳じゃないテキストエディターで変換保存すれば読めるはず。
保存時からShift_jisにしたいのならコード変換の処理が必要。
というか、ラジオボタンで値が数字だけだからいらなかったのに、テキストフォームつけるなら、Jcodeとか必要よ?
>>45
&ReadParse;の後
0047766
2005/10/17(月) 07:08:46ID:???jcode.pl 入れますた。
下のコードをどっかにいれたりしたらokだったりしますか?
# jcode.plを用いたコード変換
require 'jcode.pl';
open READ, '<sjis.txt';
open WRITE, '>euc.txt';
while(my $data = <READ>){
jcode::convert(*data, 'euc');
print WRITE $data; }
close WRITE; close READ; exit;
004816
2005/10/17(月) 07:17:18ID:???先頭で
require 'jcode.pl';
さっき変えたところで
$data = $in{name}.','.join(',', @q1)."\n".','.join(',', @q2)."\n";
jcode::convert(\$data、'sjis');
# CSVへの書き出し
というかエクセルは文字コード固定なの?
OOoしか使ってないからエクセルのことは知らないよ。
0049nobodyさん
2005/10/17(月) 07:31:39ID:???2ch外でやってもらえません?
0050766
2005/10/17(月) 07:49:53ID:???長い間ほんとにお手数おかけしました。
無事完成いたしましたです。
本当に感謝です。たすけていただいて本当にうれしくて泣きそうでした。
有難うございました。
これから教えていただいたことを無駄にしないように自分で勉強かさねていきますです。
>>49
すいませんでしたです。
0051nobodyさん
NGNG005216
2005/10/17(月) 07:53:59ID:???次の質問どぞー
↓
0053nobodyさん
2005/10/17(月) 08:09:02ID:???0054nobodyさん
2005/10/17(月) 08:39:52ID:???0055nobodyさん
2005/10/17(月) 09:18:14ID:???0056nobodyさん
2005/10/17(月) 10:19:11ID:???0058nobodyさん
2005/10/17(月) 13:09:39ID:???二度と来ないでくれ。
0059nobodyさん
2005/10/17(月) 17:49:53ID:???0060nobodyさん
2005/10/17(月) 18:40:37ID:???そこに誘導(隔離?)するのがいいかもね。
0061nobodyさん
2005/10/17(月) 19:11:36ID:???http://pc8.2ch.net/test/read.cgi/php/1102980903/
ここに誘導しとけばよかったね
0062nobodyさん
2005/10/18(火) 00:10:47ID:aW0OtyWyプログラム名は test.cgi です。手元で、% ./test.cgi > log として、出力されたログを見ると、きちんと
EUC-JPで出力されているのですが、ブラウザでアクセスしたり、fetch コマンドでアクセスしたり、telnet で
直接WebServerと話したり、とにかくApache を通すと、日本語の部分が、&xxx; と、文字実体参照の形に
なってしまいます。どうすれば文字化けを無くせるでしょうか。
(余計な部分を切り詰めた)プログラムを貼ります。
#! /usr/local/bin/perl -w
binmode(STDOUT, ":encoding(euc-jp)");
$filename= "/usr/local/man/ja/man3/strlen.3.gz";
$command = "gzcat $filename | /usr/local/bin/groff -man -Thtml -dlang=ja_JP.eucJP";
open(PIPE, "-|:encoding(euc-jp)", "$command") or die;
@html = <PIPE>;
close(PIPE);
print "Content-type: text/html; charset=euc-jp\n\n";
for $text (@html) {
print $text;
}
006362
2005/10/18(火) 00:12:05ID:aW0OtyWyコマンドライン上で ./test.cgi > log とした時の、ファイル log の中の一部分。
<a href="#名称">名称</a><br>
WebServer にCGIを起動させて結果を得た場合の、上と同じ部分。(アンド記号はわざと全角にした。)
<a href="#&Igrave;&frac34;&frac34;&Icirc;">&Igrave;&frac34;&frac34;&Icirc;</a><br>
環境。
OS: FreeBSD 5.4-RELEASE i386
WebServer: Server version: Apache/1.3.33 (Unix)
Perl: This is perl, v5.8.7 built for i386-freebsd-64int
0065nobodyさん
2005/10/18(火) 00:27:48ID:aW0OtyWyHTMLにするのはあきらめて、Plain text で我慢しろ、っていう意味ですか?
0067nobodyさん
2005/10/18(火) 03:43:48ID:???いちいちCGIで出力するより、htmlで吐いてアップした方が良いとは思うが・・・。
コマンドラインとApacheで動作が異なる場合はまず環境変数を疑う。
とりあえず2行目あたりに
$ENV{'LANG'} = 'ja_JP.eucJP';
を挿入。これで大丈夫だと思う。確かめてないけど。
0069nobodyさん
2005/10/18(火) 13:57:42ID:???フォルダの中身を全て消す処理というのはどうすれば良いのでしょうか?
ファイルの場合は @Test=''; これだけで消せますが、
フォルダの中身全てを消去する方法が判らず製作が滞っています。
何方かお知恵をお貸し下さい。お願いします。
0070nobodyさん
2005/10/18(火) 14:03:18ID:???0072nobodyさん
2005/10/18(火) 14:29:41ID:???ここにツッコミを入れる奴はおらんのか?(笑)
0073nobodyさん
2005/10/18(火) 14:48:42ID:???@Test = `del c:\*.*`;
とするんじゃなかったっけ?
0074nobodyさん
2005/10/18(火) 15:15:57ID:???0075nobodyさん
2005/10/18(火) 15:41:11ID:???また>>16が降臨して、>>69の掲示板スクリプトを全部作ってやればいい。
但し、↓のスレでやってほしい。
■こんなCGI作ってください■
http://pc8.2ch.net/test/read.cgi/php/1102980903/
0076nobodyさん
2005/10/18(火) 17:06:06ID:???0077nobodyさん
2005/10/18(火) 17:11:13ID:???0078nobodyさん
2005/10/18(火) 21:16:25ID:???> とりあえず2行目あたりに
> $ENV{'LANG'} = 'ja_JP.eucJP';
> を挿入。
で、うまく行きました。
%gzcat /usr/local/man/ja/man3/strlen.3.gz \
| env -i /usr/local/bin/groff -man -Thtml -dlang=ja_JP.eucJP
と、環境変数無しで実行すると、groff が実体参照を吐くことも確認できました。
ありがとうございました。
0079nobodyさん
2005/10/18(火) 22:15:08ID:???レンタル鯖のCGIで接続したい場合、どういった方法を取ればいいのでしょうか。
CGI自体はローカル起動、ローカルのMySQL、ローカル起動、レンタル鯖のMySQLで正しく動くので、スクリプト上のエラーではないと思います。
0080nobodyさん
2005/10/18(火) 22:25:23ID:???htmlの方で、
<form method="post" action="****.cgi">
コメント<Input Type="text" Name="com" Size="**" Maxlength="**">
<INPUT TYPE="image" SRC="img/send.jpg" align=right>
<form>
としておいてテキストを書込み、SENDボタンを押すと、CGIが動作しコメントがログに書込される、というものです。
でperlのCGIの方で(既存のCGIを自分で修正)
#!/usr/bin/perl -w
use CGI;
変数宣言
$form = new CGI;
$com = $form->param('com');
open (TEXTFILE,">>./log.txt")
print TEXTFILE $com;
print TEXTFILE "\n";
close (TEXTFILE);
としてるのですが、どうにもうまくいきません。
どうすればうまくいくかヒントでもいただけませんでしょうか?
0081nobodyさん
2005/10/18(火) 22:27:43ID:???「変数宣言」がコメントになってないとか
あと、何がうまくいかないのか不明。
500エラーなのかファイルに保存されないのか、詳しく書くように。
008280
2005/10/18(火) 22:32:41ID:???すみません。
インターナルサーバエラーを起こして動かないという状況です。
ちなみに変数宣言は
my ($form, $com);
としています。
0083nobodyさん
2005/10/18(火) 22:41:45ID:???ヒント:Content-type(たぶん)
008479
2005/10/18(火) 23:10:34ID:???0086nobodyさん
2005/10/18(火) 23:42:22ID:???0089nobodyさん
2005/10/19(水) 00:52:35ID:???何に使われるのかが非常に気になるのだが・・・
0091nobodyさん
2005/10/19(水) 17:01:02ID:mMzWKjOm指定したディレクトリ内にある、ファイルとディレクトリの名前、
そしてそれらのパーミッションを取得して表示させるCGIを作成してます。
stat でファイルのパーミッションは上手く取得できるのですが、
ディレクトリのパーミッションは 000 が返ってきます。
どうやったらディレクトリのパーミッションも取得できますか?
該当部分の今のソースはこんな感じです。
$dir ="cgi-bin";
opendir(DIR, $dir);
while (defined($uhaha = readdir(DIR))) {
if ($uhaha ne '.' && $uhaha ne '..') {
@st = stat "$permis";
$per = substr((sprintf "%03o", $st[2]), -3);
print "$uha:$per<br>\n";
}
}
closedir(DIR);
0092nobodyさん
2005/10/19(水) 17:13:00ID:mMzWKjOmopendir(DIR, $dir);
while (defined($uhaha = readdir(DIR))) {
if ($uhaha ne '.' && $uhaha ne '..') {
@st = stat "$uhaha";
$per = substr((sprintf "%03o", $st[2]), -3);
print "$uhaha:$per<br>\n";
}
}
closedir(DIR);
0093nobodyさん
2005/10/19(水) 17:18:56ID:???こちらの環境ではちゃんと表示されるよ
問題は他のところにあると思う
関係ないけれど、
> $per = substr((sprintf "%03o", $st[2]), -3);
ここは
$per = sprintf "%03o", $st[2] & 0700;
の方が良いんじゃないかと思ったり
009493
2005/10/19(水) 17:20:55ID:???$per = sprintf "%03o", $st[2] & 0777;
0095nobodyさん
2005/10/19(水) 17:36:12ID:???パーミッションを000にすることは普通ないだろうから、
statに失敗している可能性があるな。
opendir(DIR, $dir);
while (defined($uhaha = readdir(DIR))) {
if ($uhaha ne '.' && $uhaha ne '..') {
@st = stat "$uhaha";
if (@st > 0) {
$per = substr((sprintf "%03o", $st[2]), -3);
print "$uhaha:$per<br>\n";
} else {
print "$uhaha:stat失敗($!)\n";
}
}
}
closedir(DIR);
とでもして試してみたらどうだろうか。
0096nobodyさん
2005/10/19(水) 17:57:17ID:???stat "$dir$uhaha"
じゃなかろうかカレントディレクトリでテストしちゃったから気づかなかった
009791
2005/10/19(水) 17:57:31ID:mMzWKjOmありがとうございます。
後述しますが、こちらの環境のせいかもしれません.....
あと、$per = sprintf "%03o", $st[2] & 0777; の方が何故良いのか、
パッと見てまだわからないので、後で調べてみます。
>>95
やってみました。
全部「stat失敗(No such file or directory)」でした。
そして、なんらかの原因でうまく情報を取得できていないみたいだったんで、
情報を取得したいディレクトリの中に、このスクリプトを放り込んで実行した所、
完璧に表示されました。
上位でも下位でも、階層が違うディレクトリを指定すると、
上手く情報が取得出来ないようです。
なんでだ...
009891
2005/10/19(水) 18:00:40ID:mMzWKjOm全て謎がとけましたw
その通りですね。
テンパってるとダメですね.....ありがとうございました!
0099nobodyさん
2005/10/19(水) 23:56:03ID:???0,yamada,A32,333
1,tanaka,B22,555
上記のようなCSVファイルから1行ずつ読み込んでハッシュに入れたいのですがどのように
すればいいのでしょうか。問題点がCSVの一行目をカンマごとにばらしたのをハッシュのキー名
にして2行目からをそれぞれの値として入れなくてはいけないのです。
モジュールも使えないのでよりどうしたらいいのかわかりません。
$filename="test.csv";
%arr2 = &COUNT($filename);
foreach $value (values %arr2) {
print "$value\n";
}
sub COUNT{
open (IN, $filename)or die "$!";
while(<IN>){
$buff = $_;
chomp($buff);
@buff = split(/,/, $buff);
%arr2 =();
$arr2[] = @buff[];
$arr2[] = @buff[];
$arr2[] = @buff[];
close IN;
return %arr2;
}
}
whileの前に先に一行だけ読み込んでキーを作ってしまうべき何でしょうか。
ずっと堂々巡りで悩んでしまいました。
0100nobodyさん
2005/10/20(木) 00:29:03ID:???>whileの前に先に一行だけ読み込んでキーを作ってしまうべき何でしょうか。
それが一番ラクだと思うけど。むしろ何故ソレを実行しないのかわからん。
0101nobodyさん
2005/10/20(木) 00:32:14ID:???@buff = split(/,/, $buff);
%arr2 =();
$arr2[] = @buff[];
$arr2[] = @buff[];
$arr2[] = @buff[];
の意味が分からん。俺の知識不足。つまり
@buff = split(/,/, $buff);
%arr2 =();
$arr2[0] = @buff[0];
$arr2[1] = @buff[1];
$arr2[2] = @buff[2];
ってことなの?
0102nobodyさん
2005/10/20(木) 00:36:48ID:???$arr2[0] = shift(@buff);
$arr2[1] = shift(@buff);
...
だろうな。そもそもハッシュ使いたいっぽいからこれでも違うけど。
てか今はどうしていいかわからなくなってる状態だと思われ。
0103nobodyさん
2005/10/20(木) 00:36:51ID:???これでいいのか分からんが。
count('test.csv' => \%data) or die 'Failed to count';
print "$_: ", join(' / ', @{$data{$_}}), "\n" for sort keys %data;
sub count {
-f (my $file = shift) or warn('No such file'), return;
open IN, '<' . $file or warn($!), return;
my $hash = shift;
my @key = <IN> =~ /\w+/g;
while (<IN>) {
chomp;
my $i = 0;
push @{ $hash->{$key[$i++]} }, $_ for split /,/;
}
close IN;
}
010499
2005/10/20(木) 00:47:28ID:???この次の段階としてCSVファイルの任意の部分だけを読み込み、書き換えよう
にしなくてはいけないので、できるだけ汎用性を持たせた関数を作るよう心がけるように
との事なので、悩んでいました。
配列のところはそのようにするつもりです。whileでまわして配列をハッシュに移すのに
途惑っていて流れが整理できなくなっていました。
家の環境ではすぐに試せないのですが皆さんいろいろアドバイスありがとうございます。
010699
2005/10/20(木) 01:20:15ID:???0107nobodyさん
2005/10/20(木) 01:46:11ID:???my @data;
open(IN, $file) or die $!;
(my $key = <IN>) =~ s/^#\s*|\n//g;
my @keys = split(/,/, $key);
for (<IN>) {
chomp;
local %_;
@_{@keys} = split(/,/);
push( @data, { %_ } );
}
close(IN);
---
結果、以下のように代入される。
@data = (
{ 'ID' => '0', 'NAME' => 'yamada', 'TEL' => '333', 'ADDRESS' => 'A32' },
{ 'ID' => '1', 'NAME' => 'tanaka', 'TEL' => '555', 'ADDRESS' => 'B22' }
);
アクセスは、
print $data[0]{NAME}; # yamada
print $data[1]{TEL}; # 555
0108nobodyさん
2005/10/20(木) 02:51:02ID:???と書いてあるのは分かってるが、あえてCPAN モジュール版を。CSVって、
カンマで区切ってるだけと思ってる人も多いけど、泥くさいフォーマットだよ。
use strict;
use warnings;
use IO::File;
use Text::CSV;
my $parser = Text::CSV->new();
my $in = IO::File->new('test.csv', 'r')
or die('test.csv: ' . $!);
(my $field_names_line = <$in>) =~ s/^#\s*//;
$parser->parse($field_names_line)
or die('field keys are not found');
my @field_names = $parser->fields();
my @list = ();
while (1) {
my $row = $parser->getline($in);
last unless 0 < @$row;
my %hash = ();
@hash{@field_names} = @$row;
push(@list, \%hash);
}
@list = (...>>107 と同じ内容...);
0109nobodyさん
2005/10/20(木) 17:31:51ID:jR9yJZEclinuxサーバでパスワードの変更の際(passwdコマンド)に、
推測されやすいと判断をした場合、再入力を求めるようにするプログラムをperlで作る事は可能でしょうか?
可能な場合はどのような設置をすればよいのでしょうか?
0111nobodyさん
2005/10/20(木) 19:53:12ID:???passwdコマンドにそのチェックをする機能を追加した
ようなものをperlで書いてもとのpasswdコマンドを
置き換えてしまうのが一番楽じゃないかと思われ。
0113nobodyさん
2005/10/20(木) 20:31:40ID:???可能。だが、その質問をしている時点で現在の>>109には敷居が高いだろう。
また、いくらシステム側で対処しても、
その手の脆弱性の根本部分はユーザーのセキュリティー意識にある。
「推測されにくいパスワードを使う」ことと教えてあげる方がよい。
0114nobodyさん
2005/10/20(木) 20:45:15ID:jR9yJZEc例えば、4桁未満は駄目とか、数字のみは駄目等です
>>112
それはpasswdコマンドを書き換えるのはどこを操作すればよいのでしょうか?
また、perlで無くてもっと簡単にかける方法は無いものでしょうか
(どのファイルをどのように書き換えたらよいか等)
>>113
全くその通りなんですけど、自分の今後の為にと思いまして。
0115110
2005/10/20(木) 20:59:52ID:???> 例えば、4桁未満は駄目とか、数字のみは駄目等です
これって既に、生の passwd コマンドが実装している機能では?
同じ機能を Perl で再実装したいって思うのは自由だけどね。
とりあえず、passwd のマニュアルページとソースコードを読んでみることをお勧めします。
0116nobodyさん
2005/10/20(木) 21:03:16ID:???0117nobodyさん
2005/10/20(木) 22:05:06ID:???その質問レベルを見る限りではpasswdコマンドをどうこうしようとか
思う前に基本を勉強した方がよさそうだな...
0118nobodyさん
2005/10/20(木) 22:29:24ID:???同感
rootで動くためにはパーミッションに細工した上で実行時にIDを変えてやる必要があるが、
この方法を知らないようなレベルで作ろうとしてもセキュリティホールを作ってしまう危険の方が高いと思う…
011999
2005/10/21(金) 00:50:33ID:???4つめのキーの部分が出てこないのはどうしてでしょうか?
少しソースを変えていますが、
スカラーで確かめてみるとハッシュのキーは4つ確保されているのにADDRESSの項目だけが
表示されません。よろしくお願いします。
0121119
2005/10/21(金) 01:28:01ID:???print $data[3]->{ID};
print $data[3]->{NAME};
print $data[3]->{TEL};
print $data[3]->{ADDRESS};
のようにやっています。
4つ目のキーがうまくついていないのでしょうか。
0123nobodyさん
2005/10/21(金) 01:41:21ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq8.html#How_do_I_ask_the_user_for_a_pass
>>119-122
改行コードが原因なら
- (my $key = <IN>) =~ s/^#\s*|\n//g;
+ (my $key = <IN>) =~ s/^#\s*|\s*\z//g;
ASCII 互換なら文字コードは関係無い。
0125nobodyさん
2005/10/21(金) 01:59:13ID:???改行コードかも知れません。最初の読み込みではずしてしまっているみたいなので。
いろいろ試してみます。
これとは別なcsvなのですがこちらの値は"yamada" のように"とタブでで区切っていていてこれを
=~ s/" //g;
ではずそうといろいろいじてるうちになってしまったみたいです。
こちらは今何とか自分で試行錯誤しています。
ありがとうございました。
0126nobodyさん
2005/10/21(金) 02:39:27ID:???修正サンクス。
あと、細かいけどこっちの方がよかった。展開が減るので。
- push( @data, { %_ } );
+ push( @data, \%_ );
>>125
改行の取り扱い不足でした。sorry。
> これとは別なcsvなのですがこちらの値は"yamada" のように"とタブでで区切っていていてこれを
> =~ s/" //g;
tab 文字も \s でマッチするので
s/"\s*//g;
がおすすめ。
0127nobodyさん
2005/10/21(金) 04:21:29ID:???\%_ にするんだったら local %_; じゃないほうがよいのでわ。
Excelなら、クオーテーションは Perlメモ の CSV の項を読むといいと思う。
0128nobodyさん
2005/10/21(金) 04:30:43ID:???local $_ は単に global な %_ を壊さないようにしている
のだけど(このコードだと不要だけど)、
それ以外にデメリットってあります?
0129nobodyさん
2005/10/21(金) 04:32:11ID:???0130128
2005/10/21(金) 04:40:25ID:???値を上書きしまいますね。
まぎらわしいので my 変数の方がいいのでは、ってことですね。
0131nobodyさん
2005/10/21(金) 15:03:57ID:???0132nobodyさん
2005/10/21(金) 15:24:58ID:???0133nobodyさん
2005/10/21(金) 17:35:12ID:???アンケイートをつくっているのですが、
【hoge.html1】
<FORM ACTION="hoge1.cgi" METHOD="post">→送信→log1
【hoge.html2】
<FORM ACTION="hoge2.cgi" METHOD="post">→送信→log2
↓
【hoge.html1】
<FORM ACTION="hoge.cgi" METHOD="post">→次へ→この分をまずlog3へ
【hoge.html2】
<FORM ACTION="hoge.cgi" METHOD="post">→送信→log3→おわり
てしたいんだけど、(2つのフォームの内容繋げて一気に送ってlog残したい)
どんなソース書けばいいですか?
0134nobodyさん
2005/10/21(金) 17:38:17ID:???javascript でも勉強したら?
0135nobodyさん
2005/10/21(金) 20:29:51ID:???一意のIDをcookieか何かで発行する、いわゆる「セッション」を使うのが普通だが、
htmlで、と言われると困る。mod_rewriteでも使って誤魔化すか。
で、言語は何よ?
0136nobodyさん
2005/10/21(金) 20:33:21ID:???0137nobodyさん
2005/10/21(金) 20:49:56ID:???=~s/\Eアンケ(イ|ー)ト\Q/アンケ$1ト/g;
0138nobodyさん
2005/10/21(金) 20:55:34ID:???0139nobodyさん
2005/10/21(金) 21:01:40ID:???>>133
元のhoge1.cgiとhoge2.cgiはコピーして2つにしただけでしょ?
1のクエリはすぐに処理せず
2のフォームのhiddenにでも入れておいたら?
0140nobodyさん
2005/10/21(金) 21:03:44ID:???0141nobodyさん
2005/10/22(土) 15:11:53ID:m3HcshJvフォームで入力後、WEBに以下のような感じでフィルに書き出すんですが
if(open(FILE,">>hogehoge.log")) {
$record .= $in{'name'}."\t";
$record .= $in{'kana'}."\t";
jcode::convert(\$record,'sjis');
print OFILE $record;
close(OFILE);
name が空白でないかを書き込み前にチェックしたいのですが、うまく動きません。
以下の記述を入れるかと思いますが、どの行に入れたら動作するでしょう?
if ($FORM{'name'} eq "") { &errexit("お名前は必ず入力してください"); }
以下のエラーが出ます。
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
よろしくお願いします。<(_ _)>
0143nobodyさん
2005/10/22(土) 15:27:16ID:G1Q0Ugqh0144nobodyさん
2005/10/22(土) 15:33:15ID:m3HcshJvエラー行が表示されました。ありがとうございます。<(_ _)>
>>143
OFILE と FILE の違いがよくわかっておりません。 ご教授下さい <(_ _)>
0145nobodyさん
2005/10/22(土) 15:35:19ID:m3HcshJvUndefined subroutine &main::errexit called at /virtual/hogehoge.cgi line 18.
追記した↓この行があかんみたいです
if ($FORM{'name'} eq "") { &errexit("お名前は必ず入力してください"); }
0146nobodyさん
2005/10/22(土) 15:43:00ID:???知識レベルとしては、Cで普通にプログラムは書けますが、
perlは本当に始めたばかりです。
<質問事項>
基本の基本ということで以下のコードを書いたのですが
画面上に何も表示されません。(エラー等も表示されません)
printは画面(標準出力)に文字列を表示させると思っています。
コードもしくは認識に誤りがあるのでしょうか?
<コード>
■test.cgi
#!/usr/bin/perl
print "Program start\n";
print "Program end\n";
■実行方法
./test.cgi
■ファイルの属性
-rwxrwxrwx 1 root www 129 10月 22 15:37 test.cgi
■whichの結果
which perl
/usr/bin/perl
0147nobodyさん
2005/10/22(土) 15:54:11ID:???・・・
0152nobodyさん
2005/10/22(土) 16:04:32ID:m3HcshJvご指導ありがとうございます。
文字列が入ってても以下のメッセージが表示されます。
「お名前は必ず入力してください。」
0154nobodyさん
2005/10/22(土) 16:14:10ID:m3HcshJv#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
sub errexit { print "\n", @_; exit; }
require "cgi-lib.pl";
require "jcode.pl";
if ($FORM{'name'} eq "") { &errexit("お名前は必ず入力してください。"); }
if(open(OFILE,">>hogehoge.log")) {
$record .= $in{'name'}."\t";
print OFILE $record;
close(OFILE);
#フォームの表示
print "Content-type: text/html\n\n";
print qq!
<HTML>
<HEAD>
0155nobodyさん
2005/10/22(土) 16:17:36ID:JX8EwRu8「AAA AAAA」と「BBBBBBB」というデータを保存する際にスペースで区切ったために
「AAA\ AAAA BBBBBBB」のようにデータ上のスペースの前には\を置いて保存されています、
またデータ上の\は\\で保存されています。
これを読み出すための簡約化された手順がありましたら教えてください。
とりあえずデータ上で9文字目が区切りであることを検出できればいいです。
それとも、フォーマットについてもっとこうするべきだというものありましたら
いまからでも変更の余地がありますので提案お願いします。
0156nobodyさん
2005/10/22(土) 16:20:06ID:m3HcshJvif ($FORM{'name'} eq "") { &errexit("お名前は必ず入力してください。"); }
↑この行を省くと動作するのですが、空白でも post してしまいますので。
0157nobodyさん
2005/10/22(土) 16:22:39ID:???固定長なら \ でエスケープする必要ないんじゃ?
0159nobodyさん
2005/10/22(土) 16:34:17ID:m3HcshJv<HTML>以下のフォームにて取得してます。
<FORM ACTION="hogehoge1.cgi" METHOD="post" name="FORM" id="FORM">
<td colspan="2" nowrap><font size="3">ご氏名</font></td>
<td height="25"><input type="text" name="name" style="ime-mode: auto;" size="30">
</td> </tr>
0161nobodyさん
2005/10/22(土) 16:41:24ID:m3HcshJvFORM ACTION で name に入力された文字が代入されて
$record .= $in{'name'}."\t";
のところで タブ入りで record に渡されて
hogehoge.log ファイルに書き込むのと違うのですか?
0162nobodyさん
2005/10/22(土) 16:44:35ID:JX8EwRu89文字の固定長ではありません。
サンプルに対して取得したいデータが9であるという、あくまでも例です。
やはり自分で1文字ずつ検証して作るしかないでしょうか?
0163nobodyさん
2005/10/22(土) 16:47:54ID:???えーっとだ。
>>152でHTMLから送信してもエラーが出ちゃうと言う問題だろ?
書き込むとかどうでもよい。
受け取りができてないのよ。
cgi-lib.pl使ってるみたいだから↓読んで。
http://www.futomi.com/lecture/form/cgilib.html
0165nobodyさん
2005/10/22(土) 17:05:01ID:m3HcshJv以下の感じでよろしいんでしょうか?
my %input;
&ReadParse(\%input);
$YourName = $input{'name'};
if ($FORM{'YourName'} eq "") { &errexit("お名前は必ず入力してください。"); }
0168nobodyさん
2005/10/22(土) 17:09:47ID:???違う。
my %input;
&ReadParse(\%input);
if ($input{'name'} eq "") { &errexit("お名前は必ず入力してください。"); }
--以下保存処理
あと、試してから聞きなさい。
0169nobodyさん
2005/10/22(土) 17:25:59ID:???0170nobodyさん
2005/10/22(土) 17:30:16ID:m3HcshJv入力文字があっても 以下のメッセが表示されます。(・_・、)
"お名前は必ず入力してください。"
0171nobodyさん
2005/10/22(土) 17:38:30ID:???変数に何が入ってるかわからんのなら、printしてみようね。
あと、めんどいからどっかにCGIプログラムとHTMLのソースうpしる。
0172nobodyさん
2005/10/22(土) 17:47:29ID:???0173nobodyさん
2005/10/22(土) 18:02:37ID:m3HcshJvhttp://other.free-uploader.com/up/
hoge_1.cgi です。
0175nobodyさん
2005/10/22(土) 18:14:20ID:m3HcshJvたびたび、すいません。
0123
0176nobodyさん
2005/10/22(土) 18:18:44ID:???if (!$in{'name'}) { &errexit("お名前は必ず入力してください。"); }
0177nobodyさん
2005/10/22(土) 18:19:41ID:???0178nobodyさん
2005/10/22(土) 18:27:02ID:vPMo38wNhttp://allabout.co.jp/career/cgiperl/closeup/CU20040805A/index4.htm
0180nobodyさん
2005/10/22(土) 18:36:12ID:m3HcshJvひとつを消したんですが、結果は
>>170 と同じです。 (×_×)
0181178
2005/10/22(土) 18:39:17ID:???うまくいきました
ありがとうございました
0182nobodyさん
2005/10/22(土) 18:41:13ID:???hoge.tmpl も見当たらないし。
in っていう名前の hash と input っていう名前の hash が存在してるようだけど、
タイプミスかな?意味があって別な変数名にしてるのかな?
0183nobodyさん
2005/10/22(土) 18:42:05ID:???my %input;
&ReadParse(\%input);
if ($input{'name'} eq "") { &errexit("お名前は必ず入力してください。!"); }
↓
if ($in{'name'} eq "") { &errexit("お名前は必ず入力してください。!"); }
0184nobodyさん
2005/10/22(土) 18:43:36ID:???open FILE の中だと、ファイルが開いたまま終わることになるぞ。今はいいとしても。
0185nobodyさん
2005/10/22(土) 18:46:02ID:???print qq!
ソース
!;
じゃなくてヒアドキュメントを使え。
print <<__EOT__;
ソース中に ! をひとつでも書いたらそこで終了しちゃうだろ危うすぎ。
__EOT__
0187nobodyさん
2005/10/22(土) 19:31:38ID:m3HcshJvすいません、レスが遅れまして
うまくいったと思って、 名前以外に電話番号とメールもチェックをして・・・
って やったら、
お名前は必ず入力してください。!
になりました。(・_・、)
0188nobodyさん
2005/10/22(土) 19:55:02ID:???0189nobodyさん
2005/10/22(土) 20:00:34ID:???0190nobodyさん
2005/10/22(土) 20:06:29ID:m3HcshJv結局うまく、行きません。
別ファイルでもいいので、他に良い方法ないでしょうか?
0191nobodyさん
2005/10/22(土) 20:14:21ID:???いちからべんきょうしなおす
0192nobodyさん
2005/10/22(土) 20:28:02ID:???解決いたしました。
&ReadParse;
のすぐ下ではなくて、if(open(OFILE," の前の行に
貼り付けたら、いけました。
スレ汚し、すんませんでした。 <(_ _)>
0193nobodyさん
2005/10/22(土) 20:44:35ID:???---test<DIR>----
AfIlE
bFiLe
----------------
というファイルがあるディレクトリがあるとき、
$file = "afile";
open(IN,$file);
〜〜略〜〜
というような形で、大文字小文字関係なくファイルを指定したいのですがどのような方法を使えばよいでしょうか?
0194nobodyさん
2005/10/22(土) 20:55:29ID:???0195nobodyさん
2005/10/22(土) 20:56:04ID:???open(IN,$files{'afile'});
ハッシュを使ってこんな感じとか。
0196nobodyさん
2005/10/23(日) 03:47:54ID:???ファイル名が case sensitive なシステムでは AfIlE と aFiLe が
混在可能なので、afile と指定した時にどちらを指すのか判別
できない。よって正しく AfIlE と指定するか、実際のファイル名の
方を小文字に正規化した方が余計なハマり処を減らす事ができる。
ファイル名が case insensitive なシステムでは AfIlE と afile が
同じファイルを指すので、AfIlE を open する時でも afile と指定
できる。よってプログラム側では正確なファイル名を気にせず
全部小文字で指定してもよい。
それでも尚「大文字小文字関係なくファイルを指定したい」なら、
>>195 のように実際のファイル名と正規化したファイル名の
対応表を作る事になる。
0197nobodyさん
2005/10/23(日) 11:32:59ID:???了解しました。ファイル名のシステムはよく分かっていないため、>>195さんのような方法をとることにします。
ありがとうございました。
0198nobodyさん
2005/10/23(日) 15:14:57ID:DuuvQiFdPerlでファイルを読み込む場合は open を使うと思うのですが
外部のファイルを読み込む(http経由)ときはどうすればよいですか?
例えばlinuxでいうと wget なんかは、外部ファイル(実行結果)を取得するのには最適ですよね。
perlだと 内部のindex.cgiをopenするとプログラム内容までもってきちゃいます。あたりまえですがね。
index.cgiの実行結果のみ持ってきたいので、http経由でopenできればとか思っているのですが。
wget http://www.yahoo.co.jp/
と同じようなことが出来るコマンドありませんか。
わかりにくい説明で申し訳ないんですが、要は実行結果部分のみ読み込みたいです。
ちなみにsystemコマンドでwgetという方法はなしで。
0201nobodyさん
2005/10/23(日) 16:49:13ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq9.html#How_do_I_fetch_an_HTML_file_
0202nobodyさん
2005/10/23(日) 17:54:02ID:GDjLAzvgwgetを使って、そのまま内容を得ることもできる。
0203202
2005/10/23(日) 17:57:42ID:???socketでやるとモジュール無しでもいける。ヒント↓
socket(S, 2, 1, 0);
connect(S, $name);
binmode(S);
select(S); $| = 1;
select(STDOUT); $| = 1;
print S "GET $dir HTTP/1.0\r\n";
print S "Host: $host\r\n";
print S "\r\n";
while(<S>){}
close(S);
0204nobodyさん
2005/10/24(月) 09:55:17ID:???0207nobodyさん
2005/10/24(月) 13:46:58ID:???0209nobodyさん
2005/10/24(月) 16:19:03ID:???0210mona
2005/10/24(月) 16:40:28ID:???◎ファイル構造
・main.cgi(掲示板のトップページ、フォームあり)
・confirm.cgi(書き込み内容確認)
・regist.cgi(書き込み専用 HTMLによる出力はなし)
・finish.cgi(書き込み完了ページ)
・value.pl(独自に作成した変数、サブルーチンのセット)
・jcode.pl
・cgi-lib.pl
・log.cgi(ログファイル)
@main.cgi→ main.cgiのフォームに入力した後、送信ボタン(submit)でPOST送信
Aconfirm.cgi→ main.cgiから$ENV{'CONTENT_LENGTH'}で値を受け取ってsplitで各変数にばらし、
[この内容で書き込みボタン]が押されたら、それをまたPOST送信でhiddenで1つずつ送信。
Bregist.cgi→ confirmからきた値をAと同じように$ENV{'CONTENT_LENGTH'}で受け取って
splitでばらし、各変数に値を格納、時刻の取得、トリップ処理、フィルタリング処理(\n\r→<br>など)をした後、
ログファイルからデータを読みこんで(それまでのデータを読み込んで、すべてを上書きする形を
とっていますので・・)ログファイル書き込み。そのあと、すぐにfinish.cgiへロケーションヘッダで飛ばす。
Cfinish.cgi→ 書き込み完了しました画面が出るので、掲示板へ戻るリンクをクリック。
Dmain.cgi 最初の掲示板に戻ってきます。
という流れなのですが、不明な点が2つありまして、
続く
0211mona
2005/10/24(月) 16:41:31ID:???例えば、@で改行を含む、本文を
あいうえお
かきくけこ
と、フォームに入力して送信した場合に、
confirm.cgiの内容確認で同様に
あいうえお
かきくけこ
と、改行して表示してほしいのですが、うまくいきません。confirm.cgiで画面出力する前に、&data_filter($message); などとすると
書き込むリンクのとなりへ
かきくけこ
>
などと出力されてしまうのです。そしてそれを書き込んでmain,cgiで見た結果は
無題 New!
名前: 名無し 投稿日: 2005/10/24 (月) 16:15:11
あいうえお<br
です。もちろん改行はされていませんorz
つづく
0212mona
2005/10/24(月) 16:42:35ID:???2つ目は、トリップ機能を使って
名前欄に モナー#1234と入力した場合に、 名前: モナー「。tr.t4dJfuU のように文字化けを起こしてしまうのです。
トリップ部分はきちんと10桁 表示されているので、#の部分で不具合が起きているのだとは思いますが・・。
ちなみに、mona-#1234 などと、アルファベットで入力すると、きちんとmona-◆tr.t4dJfuU のように
出力されます。でもひらがな、カタカナ、アルファベット、どの場合の入力でも
◆を◇には置換してくれません。。この機能、ちゃんと動いたんですが…(1つのCGIで入力&出力してたときは)
なので、この#の文字化け&◆→◇の処理がうまくいかない理由を、教えてくださいorz
以下、ソースです。
main.cgi
ttp://imbbs1.net4u.org/1/sr3_bbss/4874isimin/65_1.txt
confirm.cgi
ttp://imbbs1.net4u.org/1/sr3_bbss/4874isimin/66_1.txt
regist.cgi
ttp://imbbs1.net4u.org/1/sr3_bbss/4874isimin/67_1.txt
finish.cgi
ttp://imbbs1.net4u.org/1/sr3_bbss/4874isimin/68_1.txt
value.pl
ttp://imbbs1.net4u.org/1/sr3_bbss/4874isimin/69_1.txt
0215nobodyさん
2005/10/24(月) 18:31:56ID:???ソースを見たところ、日本語を扱うにあたって、注意を払っている
形跡が何も見当たらない。ここでも読んで、勉強してください。その上で
解らないことを質問するといいでしょう。
http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0217nobodyさん
2005/10/24(月) 19:55:08ID:???form から post されてくるデータを、&で split するとか、
それをさらに = でsplit するという処理を自分で書いてるけど、
それをやってもらうために cgi-lib.pl を require してるんじゃないのかい?
あ、ReadParse を使ってるところもあるね。。うーん、混乱してる。w
0218nobodyさん
2005/10/24(月) 20:05:43ID:???エラーチェックも「必要なところ」だという意識の欠落を
指摘されているんだと思うよ。
LWP を使わず自前で HTTP を喋るにしても、最低でも
Socket.pm を使って定数のハードコーディングを避けるべきだろう。
それ以上は趣味の世界で人に勧めるものじゃないよ。
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlipc.html#Internet_TCP_Clients_and_Servers
Socket.pm すら用意されていないような環境に対応する必要は無い。
それは管理者がやってほしくなくて故意に削除してあるのだから。
>>217
>>55
0219nobodyさん
2005/10/24(月) 20:32:46ID:???0220nobodyさん
2005/10/24(月) 21:37:24ID:t9lvkN6wダイス機能のついてるCGIとして
KENTWEBさんのPONNY CHATを再配布されてるサイトさんから
DLさせてもらって、ちょっとチャットを作りたいのですが
↓スクリプトをいただいてきたところ
『http://www.big.or.jp/~t-shun/trpg/trpg_cgi/dicechat/dchat03.html』
↓自分で作りかけのチャット
『http://firemind.maxs.jp/reidai/index.html』
↓dicechat.cgiの中身(メモ帳にコピーしたもの)
『http://firemind.maxs.jp/reidai/1.txt』
よくメールアドレス欄を改造してPBCとかだとキャラクターのプロフィールを入れたり
普通のチャットだと今日の気分とかを入力したりするようにしたいのですが
初心者系のネット講座を見てもいまいち理解できませんでした
似たようなスクリプトを配布しているところがあったので応用できないかと思ったのですが
やはりエラーが出てしまいました
もしよろしければアドバイスをお願いします、
そうでなければ良いアドバイスのサイト、もしくは書籍を教えて下さい
素人の書き込みですいません
0221nobodyさん
2005/10/24(月) 21:46:06ID:???どう書けばよいでしょうか。初歩的ですいません
0222nobodyさん
2005/10/24(月) 22:18:02ID:???use CGI::Enurl;
$string =~ s/\[((.)+?)\]/[enurl($1)]/eg;
これでどう?
確認してないけど。
0223nobodyさん
2005/10/24(月) 22:19:54ID:???ごめん間違えた。
use CGI::Enurl;
$string =~ s/\[((.)+?)\]/"[".enurl($1)."]"/eg;
print $string;
0224220
2005/10/24(月) 22:28:03ID:???板違な事を書き込みまして申し訳ありませんでしたスルーして下さい(平伏)
022599
2005/10/24(月) 23:45:35ID:???ハッシュに入れたものを指定した値を書き換えて別なCSVに出力するにはどうしたらいいのでしょうか。
CSVの中身
ID,NAME,ADDRESS,TEL
0,yamada,A32,333
1,tanaka,B22,555
sub write{
@arr;
open (IN, "+<$file")or die "$!";
#キー作成
(my $key = <IN>) =~ s/^\s*|\s*\z//g;
my @keys = split(/\t/,$key);
#ハッシュ代入
for(my %hash = <IN>){
chomp %hash;
chop;
@hash{@keys} = split(/\t/);
push( @arr, {%hash});
}
でprint $arr[13]->{ID}; print $arr[1]->{NAME};
のように関連付けて扱えるようになったのですが
$arr[2]->{ID} =~ s/$arr[2]->{ID}/5/;
で置き換えをしたものをCSVに入れることが出来ません。
foreach my $buff(@arr){
print OUT "$buff\t";
}
では無理でこんがらがってしまいました。
アドバイスをお願いします。
0226nobodyさん
2005/10/25(火) 00:03:26ID:???そう思うんだったらちょっとは自分で考えろよ。
基本的なアルゴリズムも分からないんだったら出直してこい。
0227nobodyさん
2005/10/25(火) 00:36:09ID:???0230mona
2005/10/25(火) 09:26:27ID:???そうです、今まではすべて、cgi-libのReadParseで事を、済ませていたのですが
ReadParse使わなくてもできるようにしておいたほうがいいかなということで
処理を自分で書いています。まだ残ってるReadParseは、その名残です。。
書き換え忘れというか・・・orz
にしても、いまだ正常に動きません…。
0231225
2005/10/25(火) 09:37:32ID:???ロジックが詰まってどうしたら良いのか進まなくなってしまいます。
発想の転換がうまくできないもので。
すいません
0233nobodyさん
2005/10/25(火) 10:21:14ID:???会員認証ごとの認証をおこなった後にその認証情報に基づいたページを作る場合、クッキーを利用する方法と、都度HIDDENで情報をひっぱる方法のどちらが良いのでしょうか?
ちなみに、携帯でもアクセスする可能性が大なサイトを作ろうと思っています。
やっぱりHIDDENの方が無難なのでしょうか?
0235nobodyさん
2005/10/25(火) 12:12:56ID:???課題は自分でやれ。
ここ自助努力をサポートする場所であって、お前の家庭教師じゃないよ。
>>233
携帯は Cookie 使えん機種が多いので NG。セッション管理を Web アプリ側で
行なって、セッション ID を Cookie ではなく type="hidden" で引っ張るのが吉。
0236nobodyさん
2005/10/25(火) 15:43:33ID:???というCGIを作ろうとして、下記のようなものを作ってみました。
#!/usr/bin/perl -w
use CGI;
use CGI::Carp qw(fatalsToBrowser);
my ($form, $ht, $datafile, $data_line, $dir);
$dir = './test';
$form = new CGI;
print "Content-Type: text/plain; charset = shift_jis\n\n";
$ht = $form->param('ht');
$datafile = $dir."/".$ht."html";
open(FH, $datafile);
@list = <FH>;
foreach $data_line( @list ) {
print $data_line;
}
close (FH);
これを実行してhtmlを表示しようとしたのですが、うまく表示されません。
できましたら修正のヒントを教えてもらえますでしょうか?
0238nobodyさん
2005/10/25(火) 15:56:07ID:???せっかく fatalsToBrowser 使ってるんだから、せめて
openのエラーはチェックしろよ。
open(FH, $datafile) or die "cannot open $datafile: $!";
ぐらいでいいからさ。
0239236
2005/10/25(火) 16:16:12ID:???openのエラーチェックしたら、見事にミスってました。
$datafile = $dir."/".$ht."html";
のところで拡張子のピリオド付け忘れてました_| ̄|○
修正したら無事表示されました。
ありがとうございました。
0240nobodyさん
2005/10/25(火) 18:33:41ID:???http://www.ipa.go.jp/security/awareness/vendor/programming/a04_01.html
0241nobodyさん
2005/10/25(火) 20:18:09ID:acj/FLSv実際にプログラム test.pl を実行している様子です。
なぜ、ファイル data の最後の行が表示されてしまうのでしょうか。
最後の行の末尾には改行文字がないので、最後の行(内容は一文字のゼロ)を $line に読み込んだ直後に、
while を抜けるはずだと予測したのですが。
%cat test.pl
#! /usr/local/bin/perl
while ($line = <>) {
print $line;
}
%hexdump -C data
00000000 33 0a 32 0a 31 0a 30 |3.2.1.0|
00000007
%./test.pl < data
3
2
1
0
# 最後の行に改行文字を持たないファイルは、truncate コマンドを使って作成しました。
0242nobodyさん
2005/10/25(火) 20:43:30ID:???perldoc perlop を見るとわかると思うけど、
while ($line = <>) { } は while (defined($line = <>)) { } と等価なので。
0243nobodyさん
2005/10/26(水) 03:47:32ID:WCtFX3bD一度アップした画像を、最大記事件数を超えた時点で削除する
プログラムを書いていたのですが、どうしてもうまくいきません。
一個一個の記事に、画像のアドレスが$file_nameとして入っていて、
if($file_name ne ''){ push (@img_dels , "./img/$file_name"); }
で、最大記事件数を超えた分の記事に付いている画像のアドレスを配列に入れて、
unlink @img_dels;
としても、きちんと画像が削除されません。
if(-e )を使って調べてみると、
./img/$file_nameでは、存在しないことになっており、
一方、./img/2005001.jpgというように、具体的な値をプログラム内に入れれば
問題なく削除できるのです。
つまり、変数$file_nameを使っているとうまく作動せず、
その変数の部分を、何か具体的なファイル名を入れてみると、
きちんと動作するのです。
なので、パーミッションの問題ではないかと思うのですが、
他にどういった点が怪しいのでしょうか?
以上、よろしくお願いいたします。
0244殿ツー
NGNGどなたかお力添えくださればうれしいとです
まずなにをインストールすればいいとですか??
0246nobodyさん
2005/10/26(水) 07:33:22ID:???0247nobodyさん
2005/10/26(水) 10:42:10ID:???>>7
http://www.site-cooler.com/kwl/perl/environment.htm
0249nobodyさん
2005/10/26(水) 14:39:04ID:???1<>あああ<>
2<>いいい<>
3<>ううう<>
@testに上記データの読込
$hikakuに比較する変数
$bbb_newは$aaaが合致した場合に入れる
foreach (@test) {
($aaa,$bbb) = split(/<>/);
if ($hikaku eq $aaa){
push(@test_new,"$aaa,$bbb_new");
} else {
push(@test_new,"$aaa,$bbb");
}
}
全上書きで@test_newをデータ書き込み
こんな感じで、要はデータ修正用のものを組んでみたのですがなぜかこれを走らせる都度先頭に半角スペースが入ってしまいます。
1<>あああ<>
2<>いいい<>
3<>ううう<>
なぜなんでしょうか?
0251nobodyさん
2005/10/26(水) 15:03:54ID:???走らせるって@test_newをprintするとってことか?
そもそも
push(@test_new,"$aaa,$bbb_new");
は
push(@test_new,"$aaa<>$bbb_new");
にしたいんじゃないかと
0252249
2005/10/26(水) 15:11:27ID:???>>251
すいません。カキコ時ミスでした。
そうです。
push(@test_new,"$aaa<>$bbb_new<>\n");
です。
保存時は
&Memory2($dataname,"@test_new");
…とし、保存時流用のため、サブに飛ばしています。
そのサブは以下のようにしています。
sub Memory2 {
local ($param) = @_[0];
local (@param2) = @_[1];
open(OUT, "> $param");
print(OUT @param2);
close(OUT);
chmod(0666,$param);
}
0253nobodyさん
2005/10/26(水) 15:13:11ID:???0254nobodyさん
2005/10/26(水) 15:28:49ID:???> &Memory2($dataname,"@test_new");
~~~~~~~~~~~~~
しっかり括ってるじゃないか・・・原因はこれ
ダブルクォーテーションで括った場合の配列変数の展開は以下と同等
join(@array, $")
$"のデフォルト値は半角スペースだからこういうことになる。
&Memory2($dataname,@test_new);
とすればよい
0255254
2005/10/26(水) 15:30:08ID:???join($", @array)
が正解
0256249
2005/10/26(水) 16:01:49ID:???&Memory2($dataname,@test_new);
…とすると1行目の変数しか書き込まなかったので、ダブルクォーテーションを付けていました。
サブに飛ばさず、
open(OUT, "> $dataname");
print(OUT @test_new);
close(OUT);
…とすれば、半角スペース問題が解決しました。
本当にありがとうございました!!
0257nobodyさん
2005/10/26(水) 16:12:14ID:???ああ、スマソサブルーチンのほうをよく読んでなかった。こっちも間違ってるな
local ($param) = shift @_;
local (@param2) = @_;
とか
local ($param) = @_[0];
local (@param2) = @_[1..$#_];
とかにしないと。
でも、いまさらlocalは古いと思うが・・・
Perl4にも対応しなくてはならないということでなければmyを使うのがお勧め
my $param = shift;
my @param2 = @_;
0259nobodyさん
2005/10/26(水) 18:29:58ID:???0260nobodyさん
2005/10/27(木) 18:26:04ID:MmBYG7yb@flagの中に一つでも1があったら
1を返したいのですがよい方法があったら教えていただけないでしょうか?
今の所
if(@flag == 1 && $flag[0] == 1){
return 1;
}elsif(@flag == 2 && $flag[0] == 1&& $flag[1] == 1){
return 1;
}elsif(@flag == 3 && $flag[0] == 1&& $flag[1] == 1&& $flag[2] == 1){
return 1;
}elsif(@flag == 4 && $flag[0] == 1&& $flag[1] == 1&& $flag[2] == 1&& $flag[3] == 1){
return 1;
}elsif(@flag == 5 && $flag[0] == 1&& $flag[1] == 1&& $flag[2] == 1&& $flag[3] == 1&& $flag[4] == 1){
return 1;
}else{
return 0;
}
とやっているのですが不恰好なので。
0261260
2005/10/27(木) 18:29:10ID:MmBYG7yb>@flagの中に一つでも1があったら
じゃなくて@flagの中全部1だったらです。
0262nobodyさん
2005/10/27(木) 18:44:52ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_can_I_tell_whether_an_list_o
sub check {
$_ == 1 || return 0 for @_;
1;
}
print check(@flag) ? 'OK' : 'NG';
0263nobodyさん
2005/10/27(木) 19:43:10ID:???0265nobodyさん
2005/10/28(金) 01:41:57ID:bf2gwUIh/(^0^)/;
/(f^_^)/;
}
0266nobodyさん
2005/10/28(金) 01:54:14ID:???0267nobodyさん
2005/10/28(金) 06:37:45ID:OMxdiAJ2foreach (@flag){
if($_ == 1){ return 1; }
}
じゃ駄目?
>>257
my($param, @param2) = @_;
ってやっちゃ駄目ですか?
自分のスクリプトではこうやって渡しちゃってるんですが・・・
0268nobodyさん
2005/10/28(金) 06:48:30ID:zLDMG+JKsub flagcheck{
my(@flag) = @_;
foreach (@flag){ if(!$_){ return 0; }}
return 1;
}
0269nobodyさん
2005/10/28(金) 06:49:19ID:zLDMG+JKforeach (@_){ if(!$_){ return 0; }}
return 1;
}
これでよかったか
0270nobodyさん
2005/10/28(金) 07:01:39ID:???if(!$_){ return 0;
より
return 0 unless $_;
の方が……どうでもいいか。
それより、0と1しか入っていないことは保障されてる?
0271nobodyさん
2005/10/28(金) 07:11:26ID:zLDMG+JK書きながらそれは思ったけど、質問の段階で 0 と 1 しか出てこなかったので ^^;
1 以外が入ってれば … も考えるなら
if($_ != 1){ return $_; }
かな?
0272nobodyさん
2005/10/28(金) 07:20:20ID:???次の行に return $_;
個人的にだけど、否定だけで分岐する場合にはunlessが見やすいと思う。
0273nobodyさん
2005/10/28(金) 07:33:02ID:FKANG7gPrequireしたファイルの中でグローバルを宣言するにはどうしたらいいのでしょうか?
requireしたソース中でmy宣言したらその中でしか見えず、エラーが出てしまいました
0274nobodyさん
2005/10/28(金) 07:52:12ID:???kentのように、1つの変数をずっと使うような設計は止めたほうがいい。
>requireしたソース中でmy宣言したらその中でしか見えず、エラーが出てしまいました
ソースのmyというか、スコープをもう一度勉強して。
むりやりstrictでエラーを出させないようにするなら、qw($hoge);
0275nobodyさん
2005/10/28(金) 09:05:27ID:???274の言うように可能なら変数を見せなくてすむように設計を見直した方が
いい場合が多いが、どうしてもやりたいのならモジュールにしてimport/export
するのがいいんじゃないかね。
0276nobodyさん
2005/10/28(金) 09:15:21ID:FKANG7gPrequireした先でのグローバル確保したいってのは止めた方がいいというのは分かってはいるのですが・・・
やっぱ面倒くさがりはじめるとエラーが多くなるんでしょうかね。
出来る限り引数、戻り値を設定して呼ぶようソース見直します。
ありがとうございました。
0277nobodyさん
2005/10/28(金) 09:23:34ID:???コーディングはファイルサイズ増えても、半角スペースとタブをうまく使うようにするといいよ。
あと、コメントも適度にあるといいね。
0278nobodyさん
2005/10/28(金) 10:43:47ID:???参照/設定専用のサブルーチンを作ってそれでアクセスするようにすればいい。
オブジェクト指向で言うところのアクセサってやつ。
0279nobodyさん
2005/10/28(金) 10:59:28ID:???といったカッコをつけたコードはどういう意味があるのでしょうか?
0280nobodyさん
2005/10/28(金) 11:10:09ID:???リスト。
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perldata.html#List_value_constructors
0281nobodyさん
2005/10/28(金) 11:14:37ID:???myをまとめて指定する場合()でくくる必要がある。
別にmy @flag = @_;でも可
my ($hoge,@flag) = @_; としていて、$hogeを消した名残かもしれない。
my (@flag) = @_;
my ($foo, $bar);
my (@age, @sage); と連続して書く場合、見た目の為?に括弧くくりしてあるのも見かける。
0282nobodyさん
2005/10/28(金) 11:26:27ID:3fcMXuGTってする時に括弧をつけるので、見た目統一のために1つのみの宣言でも括弧を付けてます。
0283279
2005/10/28(金) 12:31:13ID:???右辺のコンテキストを変えた、もしくはmyの適用範囲を指定したコーディングでもないのに
カッコを付けるのが紛らわしく感じたのです。
0284nobodyさん
2005/10/28(金) 13:18:53ID:???> my($param, @param2) = @_;
> ってやっちゃ駄目ですか?
もちろん構わない
shiftを使って引数を取り出すかリストコンテキストで一気に代入するかは好みが現れる所だろうな
しかし、自分でも書いた後、説明とはいえ
> local ($param) = @_[0];
> local (@param2) = @_[1..$#_];
こんな回りくどいやり方は無いなと思った…しかも上間違えてるし$_[0]
0285nobodyさん
2005/10/28(金) 13:36:59ID:???それ激しく同感。上手くタブとスペースを使い分けて書かれてるソースってめったに見られないよな
よくあるのがこういうインデントだけど、タブ幅が変わると悲惨なことになる
if (expression) {
____for (range) {
[_TAB__]{ #Some blocks
[_TAB__]____function(multiline,
[_TAB__][_TAB__]_____arguments)
[_TAB__]}
____}
}
漏れの思う理想形はこんな感じ。これならタブ幅がいくら変わっても適切なインデントで見られる
if (expression) {
[TAB]for (range) {
[TAB][TAB]{ #Some blocks
[TAB][TAB][TAB]function(multiline,
[TAB][TAB][TAB]_________arguments)
[TAB][TAB]}
[TAB]}
}
0286nobodyさん
2005/10/28(金) 15:23:43ID:???上の例、ひどすぎないか?
tab size を 8 にして、indent size を 4 にしているということ?
> よくあるのがこういうインデントだけど、
よくあるのか・・・?
0287nobodyさん
2005/10/28(金) 15:30:15ID:???そういうこと
Perlの標準モジュールとか見てみれ 大半がこんなだよつд`)
CGI.pmとかMemoize.pmとか
0288nobodyさん
2005/10/28(金) 15:36:36ID:???同じソースを複数人で弄っていて、コーディング規約も何もない場合
tab と space が混在してもっとひどいことに・・・。
0289nobodyさん
2005/10/28(金) 15:58:45ID:???Emacs のデフォルトがそんなんだったような。
漏れの思う理想形は、タブは一切使わず SPACE のみでインデント。
Emacs なら (setq-default indent-tabs-mode nil) しると。
0290nobodyさん
2005/10/28(金) 16:52:13ID:???スペースのみか、それも良いな
でも、漏れが読むときは全部タブに置換することが度々
スペースで固定しちゃうと、その人の好みのインデント幅に合わせて
読めないというのがあるんだよなぁ…
# 個人的に、使い慣れてるエディタ上でのタブを表す→を、
# インデントとしてみるように目が慣れちゃってるのもあるのかも
まあ好みは人それぞれ分かれるから、他人のソースを読むときは
PerlTidyを通すのを習慣付けろってことか、これは
0291nobodyさん
2005/10/28(金) 17:03:56ID:???0293nobodyさん
2005/10/28(金) 17:43:28ID:???何かの間違いじゃ・・・
ttp://search.cpan.org/src/LDS/CGI.pm-3.11/CGI.pm
こことか。133行目付近
unless ($OS) {
unless ($OS = $^O) {
require Config;
$OS = $Config::Config{'osname'};
}
}
0294nobodyさん
2005/10/30(日) 20:33:55ID:???ファイルハンドルを局所化することは可能でしょうか。
再帰したサブルーチンの中で毎回違うファイルを扱いたいのです。
0295nobodyさん
2005/10/30(日) 20:49:09ID:???ファイルハンドルへのリファレンスだか型グロブだか(よく理解していない)を
局所化した変数に入れておけば解決できるのではと思いつきました。
その方向で調べてみますが、方向性が間違っていましたら教えてください。
0296nobodyさん
2005/10/30(日) 20:51:31ID:???引数にファイルを指定するぐらいかな?
0297nobodyさん
2005/10/30(日) 21:05:36ID:???オープン、処理、クローズの、処理の部分でもう一度再帰的に自分自身を呼び出しているので、
クローズする前に同じハンドルで別ファイルをオープンしてしまってるんです。
0298nobodyさん
2005/10/30(日) 21:14:33ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_can_I_make_a_filehandle_loca
0299nobodyさん
2005/10/30(日) 21:59:42ID:???ありがとうございます!!そのままずばりの質問でしかもFAQということで
まことに恐縮です。おかげさまで解決しました。
0301nobodyさん
2005/10/30(日) 23:02:00ID:ZWocYOMF意味を教えて、と言うものです。ごめんなさい。
既存のソースを使って勉強中に、フォームをデコードしたい部分で
read(*******略*******);
undef(%in);
というものが出てきました。
undef とはどういう関数なのでしょうか。
リファレンスで探してみたのですが、名前付き単項演算子として列記されているだけで、
解説が載っていませんでした(初心者向けだから?)
ぐぐってみたものの、他の項目の解説用のソースばかり出てきてしまい、
undef の解説が見つけられず、困っています。よろしくお願いします。
0302nobodyさん
2005/10/30(日) 23:06:21ID:???どういう調べ方してんだ。
0303nobodyさん
2005/10/30(日) 23:09:40ID:ZWocYOMFで検索してみたのですが…
何か手がかりがあれば教えていただきたいのですが。お願いします。
0304nobodyさん
2005/10/30(日) 23:11:28ID:???まあまあ
>>301
Perlの組み込み関数は
perldoc -f 関数名
でマニュアルが見られる。ただし英語だけど。
日本語訳は
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod
http://www.att.or.jp/perl/man/perlfunc.1.html
このへん
で、undefがどういうものかというと、その変数の値を未定義にする関数。
まあ、その例ならば%inを空にすると考えてもらっても良いと思うよ
0306nobodyさん
2005/10/30(日) 23:20:17ID:ZWocYOMF(つづりまちがいは、ここに書いたときだけでした;)
ソースに undef(%in); と出てくるものの、 %in は後にも先にもここ一つなのですが…、
どこにも出てこない変数をクリアすることに意味はあるんでしょうか?
(もしかして、悪いモノを見本にしてしまったのでしょうか)
(呼び出しているプログラムは jcode.plのみです)
0308nobodyさん
2005/10/30(日) 23:46:23ID:???%inじゃなくて$in{...}の形ででてきてるかもね。
しかし%inをundefして使いまわそうとしている
あたりあまり筋がよさそうではないので、手本に
はしないほうがいいんじゃないかなー。
0309nobodyさん
2005/10/30(日) 23:48:12ID:???> (もしかして、悪いモノを見本にしてしまったのでしょうか)
模範的といえるような綺麗なPerlスクリプトって正直なかなか無いからねぇ。
現状良い見本を見て育った人のほうが少ない気もする
0310nobodyさん
2005/10/30(日) 23:51:26ID:???0312301
2005/10/31(月) 00:25:50ID:8r5lDkYL載っていないことが多かったのですが、
教えていただいたリファレンスとかも読んで、わかってきました。
これまでに、COBOLしかやったことがなかったので、
勘違いしていることもありました(汗
ありがとうございました。
0313nobodyさん
2005/10/31(月) 00:27:31ID:???0314nobodyさん
2005/10/31(月) 00:33:54ID:???0315nobodyさん
2005/10/31(月) 00:37:35ID:???phpとかrubyでは良くみるけどperlで使えたっけ?
0316301
2005/10/31(月) 00:50:00ID:8r5lDkYLcgi-lib.plは使ってないんです。
コボラーとしては、宣言もなしに変数がイキナリ使われていることに慣れません…
0317nobodyさん
2005/10/31(月) 00:58:02ID:???use strict;してないのはそんなのばっかりですよ。
大手よりも細々とやってるとこの方が、意外としっかりしたコードかいてることが多いです。
kentのはジンマシン出るかもしれないので注意してください。
0318nobodyさん
2005/10/31(月) 01:00:04ID:???英語アレルギーじゃないならCPANにあるソースでも読んでみると良いかもよ
http://www.cpan.org/scripts/index.html
0319301
2005/10/31(月) 01:17:17ID:???てか、[安全ではないコンストラクトを制限]と言われても
具体的にピンと来ないのですが・・・
自分で全部ソース書くよりも、
便利なモジュール使ったほうが間違いがない…ってことですかね。
Kent-webのCGIは、そのまま(改造とかナシで)使ったことがあります。
見た感じでは、ダラダラ〜っと大きいルーチンが書いてあって
読みづらいと思ったのですが(だからあんまり見てない)
見本にするには不向きってことですか?<ジンマシン
0320nobodyさん
2005/10/31(月) 01:40:06ID:???use strictは一言で言えば安全にプログラミングするためのプラグマだが…
とりあえず、一番のご利益は宣言の強制かな
my宣言をせずにいきなり変数を使おうとすると
エラーにするなどの機能を有効にする。というようなのがuse strict 'vars';
my $hoge = 'hogehoge';
print $hage; # use strict;すれば$hageは宣言されて無いのでエラー
見たいなミスを予防したりできる。
Kentは・・・まあ見本にはお勧めしないとだけ言っておこうか
0321nobodyさん
2005/10/31(月) 02:43:49ID:???いい見本は、コアモジュールのコードを読めばいいと思う。あと高いけど駱駝本
0322nobodyさん
2005/10/31(月) 02:55:53ID:???0324名無し募集中。。。
2005/10/31(月) 03:15:06ID:s3JdPwyc0325301
2005/10/31(月) 03:24:24ID:???ありがとうございます。
VBで言うところの、Option Explicit みたいな役割ってことでしょうか。
またまた質問なんですが、グローバル変数の宣言は、
$hensu;
だけでOKなんですか?
my とか local に相当する言葉はナシで良いのでしょうか。
(my と localについての解説しか見当たらないので)
検索していて our というのも見つかりましたが…
0326nobodyさん
2005/10/31(月) 03:42:25ID:???見るんじゃない、感じるんだ。
>>325
文法を 1 から 10 まで習うつもりか?
入門書か、perlsyn と strict.pm の perldoc ぐらい読んでから来いよ。
0327321
2005/10/31(月) 10:23:36ID:???ま、ああいう言いにくいことは、自分のblogで書けないからね
ここでなら言っちゃってもいいかなーって思ってぶっちゃけたw
0328nobodyさん
2005/10/31(月) 14:02:09ID:???0329nobodyさん
2005/10/31(月) 16:26:16ID:mS98tkDz<div id="aaa">から</div>までの間には、<div id="bbb">〜</div>とか<div id="cc">〜</div>とかがいっぱい入ってるんですが。。。
0330nobodyさん
2005/10/31(月) 17:16:04ID:???開きが見つかれば+1
閉じが見つかれば-1
0の時点で閉じがあれば、そこで終了。
0331ヽ(´ー`)ノ ◆.ogCuANUcE
2005/10/31(月) 17:17:06ID:???use warnings;
use HTML::TreeBuilder;
my $doc = HTML::TreeBuilder->new_from_file('test.html');
map { $_->delete() } $doc->look_down('_tag' => 'div', 'id' => 'aaa');
print $doc->as_HTML();
こんでいいかね。
0332nobodyさん
2005/10/31(月) 17:34:43ID:???<q cite="http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlstyle.html">
戻り値をただ単に捨ててしまうような void 文脈で、grep() や map()、
`backticks` (訳注: `ls`のようにバッククォートで括った実行文のこと) を
使うことは避けましょう。そういった関数はすべて戻り値を持っているの
ですから、それを使うべきです。戻り値に用がないのであれば、代わりに
foreach() を使ったループか system() 関数を使いましょう。
</q>
0333ヽ(´ー`)ノ ◆.ogCuANUcE
2005/10/31(月) 18:42:21ID:???あぁ、そうね。スマンカッタ。
$_->delete() for $doc->look_down('_tag' => 'div', 'id' => 'aaa');
0334nobodyさん
2005/10/31(月) 22:40:16ID:???print"OK!!\n";
}
$test =1, $sample =1,
の時変数が数字なのか文字列なのかそれとも両方混じっているのか分からない時の
演算子はどうしたら言いのでしょうか。
eqで事足りると思うのですが、文字列と数字は分けなくて演算子をつかわなくてはいけないそうなのです。
すごく初心者的な質問ですいません。
0335nobodyさん
2005/10/31(月) 22:50:00ID:???たぶん宿題かなんかなんだろうが、お前はperlの前に
まず日本語を勉強しろ。何が言いたいのかさっぱり
わからん。
0336nobodyさん
2005/10/31(月) 22:56:00ID:???使わなくてはいけない、ではなくて自分がその中身をどう扱いたいか。
数値として扱いたいなら==を使えば良いし、文字列として扱いたいならeqを使えば良い。
数値として扱うというのは、"1.0"と"001"みたいなのも同じ1とする。
文字列として扱うというのは、これらを別のものとして扱うということだ。
0337336
2005/10/31(月) 23:01:33ID:???数値として扱えない文字が入っているのに数値として扱おうとする場合、
それ以降は無視される(1q3 => 1)
数値が入っているか文字列が入っているかわからないときに比較したいということは、
1q3と1axが同じ、と判断されちゃまずいということだよな。なら文字列として扱えば良い
0338334
2005/10/31(月) 23:43:09ID:???演算子で数字と文字列同じように使えるeqの方が便利だからと言う理由でeqを多く使っていたのですが、
計算するわけでもないので、無理して==を使う必要がなく、「いけないではなくどう扱いたいか」で
凄く納得がいきました。
解りやすく説明していただきありがとうございます。
0340334
2005/11/01(火) 01:06:49ID:???基礎的過ぎて詳しく説明しているところがあまりなかったので。
ありがとうございました。
0341nobodyさん
2005/11/02(水) 15:33:18ID:lpDOmIjlCGIからCSVを読み込むにはどのようにすればよいでしょうか?
お願いします。
0342nobodyさん
2005/11/02(水) 16:22:11ID:???Socketモジュール系を使う
ftp.plライブラリを使う
0344341
2005/11/02(水) 16:38:32ID:lpDOmIjl返信ありがとうございます。
ftp.plライブラリはどのようにして使うんでしょうか?
また、テキストファイルを定期的に更新したいんですが
どのようにすればよいでしょうか?
お願いします。
0346345
2005/11/02(水) 16:42:13ID:???「ぐぐる」か「ググる」方が的確かl。
0347nobodyさん
2005/11/02(水) 16:45:10ID:???グルルは
0348nobodyさん
2005/11/02(水) 17:19:18ID:???も少し詳しく書かないと分からないよ。
> また、テキストファイルを定期的に更新したいんですが
> どのようにすればよいでしょうか?
環境は? win? unix?
また、CGIスクリプトから更新したいの? 他のプログラムから?
0349nobodyさん
2005/11/03(木) 17:31:58ID:???if($cgi -> param(save)){
open(OUT,"> ./test.dat") || die;
$cgi -> save(OUT);
close(OUT);
}
このように,テキストエリアとチェックボックスのフォームデータを保存して,
別のcgiファイルで,読み込みをしています.
#フォームデータの読み込み
$file = "./test.dat";
open(IN,$file) if (-f $file);
$cgi = new CGI(IN);
close(IN);
テキストエリアはきちんと保存値が表示されたのですが,
チェックボックスが全て未チェックの状態になってしまいます.
なにかチェックボックスでは処理が必要なのでしょうか?
0350nobodyさん
2005/11/03(木) 17:50:23ID:???<input type="checkbox" name="hoge" value="hage" checked>
0351nobodyさん
2005/11/03(木) 17:51:21ID:???チェックボックスをチェックOn状態にするにはchecked属性が必要というのは理解してる?HTMLの話。
CGI側はvalueを複数受け取るけどね。
0352nobodyさん
2005/11/03(木) 17:54:36ID:???pirnt $保存値 eq '保存値'
? qq|<input type="checkbox" name="hoge" value="hage" checked>
: qq|<input type="checkbox" name="hoge" value="hage">|
;|
0353nobodyさん
2005/11/03(木) 17:56:14ID:???事故レスorz
pirnt $保存値 eq '保存値'
? qq|<input type="checkbox" name="hoge" value="hage" checked>|
: qq|<input type="checkbox" name="hoge" value="hage">|
;
0354nobodyさん
2005/11/03(木) 18:50:59ID:???0355nobodyさん
2005/11/03(木) 21:48:20ID:???そうやって,デフォルト値を操作して,チェックを入れた状態で表示するのではなく,
$cgi = new CGI (IN);
こうやって,ファイルを渡してあげて,保存値を反映したいのです.
テキストエリアではこの方法が上手く使えたのですが,
チェックボックスでは保存値が反映されなかったのです.
どうにかして,チェックボックスに保存値を反映したいのですが,どうすれば良いのでしょうか?
という趣旨でした.混乱させてもうしわけありませんでした.
0356nobodyさん
2005/11/03(木) 23:42:33ID:???ドキュメントを熟読して問題を切り分けよう。
http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod
1. フォームから送られてくるデータはプログラムに渡される時点で
コントロールの種別に関係なく name=value の形になっているので、
テキストエリアなら受け取れるがチェックボックスでは受け取れない
という事が起こるならそれはフォームの書き方かブラウザがおかしい。
2. save メソッドはドキュメントにあるように human readable な形で
書き出してくれるので、まず全てのデータが正常に受け取れ、且つ
書き出せているかを確認。更にファイルハンドルを渡して生成した
CGI オブジェクトが全ての保存値を読み込めているかを Vars メソッド
等で確認。ちなみに >>349 の読み込みコードはファイルの読込権限
が無いと open に失敗するのでエラーチェックになっていない。
3. 読み込んだデータは 1. と同じく名前と値のペアの集合でしかない
ので、保存値を反映したフォームを出力したいなら、それらを適切な
要素に当てはめ直す作業が必要。→ >>350-353
0357nobodyさん
2005/11/04(金) 01:23:13ID:???順を追って確認してみます.
特にVarsの使い方を教えていただき感謝いたします.
0358nobodyさん
2005/11/04(金) 10:40:02ID:???保存値はちゃんと渡せていましたが,チェックボックスの生成方法がオブジェクトを介さずに
CGI::checkbox と行っていたためでした.
みなさんほんとうに有り難うございました.
0359nobodyさん
2005/11/04(金) 18:07:49ID:???変数の後ろの文字列も含めて変数と解釈されてしまいます。
"${str}文字列"
"$str\文字列"
$str . "文字列"
などのようにエスケープなり逐一処理するしかないのでしょうか?
0361nobodyさん
2005/11/04(金) 22:23:15ID:???CPAN のエラーが出てモジュールを入れられなくてコマってます。
--01:20:02-- ftp://ftp.perl.org/pub/CPAN/authors/id/M/MS/MSCHWERN/CHECKSUMS.gz
(試行:18) => `-'
ftp.perl.org[163.143.1.21]:21 に接続しています... 接続しました。
anonymous としてログインしています...
サーバの応答にエラーがあるので、接続を終了します。
再試行しています。
こんなのがでて、ずっと先へ勧めません。
いった移動してよいやらこまってます。
FTPへ手動での接続はできているんですけど・・・
Convert::UUlib
Convert::TNEF
あたりも、みんな ftp/perl.org への接続で失敗してるようです。
どなたかお知恵を拝借できればと思います。
よろしくおねがいします。
0362nobodyさん
2005/11/04(金) 22:45:51ID:???http://www.ss.iij4u.or.jp/~somali/web/_ppm.html
0363nobodyさん
2005/11/05(土) 03:57:34ID:???文字列$commentがあって、
while($comment=~m//g){}を使って<tag>または</tag>を順々にマッチさせたいのです。
んでマッチしてから<tag>と</tag>のどちらがマッチ…
あ、わかった…$&で判定できるんですね…
鬱だ死のう
0364nobodyさん
2005/11/05(土) 04:13:08ID:???0365nobodyさん
2005/11/05(土) 04:14:32ID:???foreach( $comment =~ /<.*?>/g ){ print "tag = $_\n"; }
みたいに先にリストに展開するもよし
0366nobodyさん
2005/11/05(土) 23:49:03ID:???#保存ボタンが押されたらデータをファイルに保存する
if(($cgi -> param(add)) && ($cgi -> param(yomi)) && ($cgi -> param(kanji))){
open(OUT,">> $file") or die;
$kanji = $cgi -> param(kanji);
$yomi = $cgi -> param(yomi);
$data = "$kanji\t$yomi\n";
$cgi -> delete_all();
print OUT $data;
close(OUT);
}
param(add)には,submitボタンの値,yomiとkanjiにはテキストフィールドの値が入っています.
保存ボタンが押されるとちゃんと,ファイルにデータが追加されるのですが,
保存ボタンを押して,リロード(F5を押す)を行うと,データが繰り返し追加されてしまいます.
delete_all()して,Varsでもパラメータは消去されているのを確かめたのですが,
リロードすると,やはり値が繰り返し追加されてしまいます.
0367nobodyさん
2005/11/05(土) 23:53:00ID:???続き…
delete_allを行ったにもかかわらず,値が追加されるということは,どこかに値が保存されている
ということだと思いますが,それはどこにあるのでしょうか?
よろしくお願いします.
0368nobodyさん
2005/11/05(土) 23:56:09ID:???解決策はググルとたぶん見つかる
どっかで見た
0369nobodyさん
2005/11/06(日) 04:41:46ID:???0370nobodyさん
2005/11/06(日) 14:09:39ID:???$comment =~ s/<.*?>//gs;
これだけでは何か穴がありますか?
0372366
2005/11/06(日) 20:09:02ID:???以前のログを参照して,同じ投稿がないかチェックするようにして,二重投稿を防ぐようにして解決しました.
みなさんありがとうございました.
0373nobodyさん
2005/11/07(月) 11:47:17ID:92Mo7mCMDBI::Pg使用し、1度の接続で下記要件を満たすSQL文を教えて下さい。
SQLではなく、Perl+DBIのプログラミング方法で可能であれば、その方法を教えて下さい。
顧客テーブルと購入履歴テーブルがあります。
顧客一覧を出力する時に、顧客ごとに購入件数も表示したいです。
顧客一覧をwhile($hash= $sth->fetchrow_hashref){}で取得し、
whileの中でさらに、$hash->{hoge_no}から購入履歴をSELECTしたのですが、
うまくいきません。お願いします。
0374nobodyさん
2005/11/07(月) 12:30:03ID:???>>1
Perl::DBI
http://pc8.2ch.net/test/read.cgi/php/1015943725/
0375nobodyさん
2005/11/07(月) 12:36:56ID:???それよりこっちでしょ。SQL文一つでできるし。
0376nobodyさん
2005/11/07(月) 13:21:51ID:???Data::Dumperモジュールなどを使ってハッシュ内容をダンプしてみれ。
0377nobodyさん
2005/11/07(月) 21:52:51ID:ErqtfEJb画像の「横幅」を判別して設定値以上なら縮小
設定値以下ならそのまま表示というのをしたいです。
2:
if文で何とかなると思い、扱えるように勉強しましたが、
「画像の横幅を判別する」というのはどうやってやったらいいのか・・・。
ヒントだけでも構いません。宜しくおながいします。
0379nobodyさん
2005/11/07(月) 21:59:49ID:ErqtfEJb即レスどうも
と言うことはできるんですね。
勉強してきます。
0380nobodyさん
2005/11/07(月) 22:07:40ID:???0381nobodyさん
2005/11/07(月) 22:16:16ID:???0382nobodyさん
2005/11/07(月) 22:22:21ID:???横幅取得くらいなら自前コーディングで十分。
0383nobodyさん
2005/11/07(月) 23:54:29ID:???0387nobodyさん
2005/11/09(水) 07:29:42ID:???すごい久し振りにCGIをうPしたら、まったく忘れていたらしくエラーが出てしまいます。
しょうがないので、初心に返ってhello perlを出力しようとしたら、これもエラーです。
むかついたので、別に契約してあるプロバイダにCGIチェッカがついてるので
うPして何がおかしいか調べたら、
ファイルの先頭が
#!/bin/perl
#!/usr/bin/perl
#!/usr/local/bin/perl
でないか、CGI プログラムが ASCII モードで転送されていません
だそうです。????
ちなみにソースは
#!/usr/bin/perl
# HTML表示
print "Content-Type: text/html\n\n";
print "<HTML><HEAD>\n";
print "<BODY>\n";
print "Hello Perl World!\n";
print "</BODY>\n";
print "</HTML>\n";
ASCII モードになってないんですかね?
秀丸でファイル名:hoge.cgi ファイルの種類:その他 文字コード:自動選択
で保存したものです。何年ぶりかなので何か忘れてるのかもしれません。
ど素人で済みませんがお願いします。
0388387
2005/11/09(水) 07:30:43ID:VFhSh5VA0390387
2005/11/09(水) 08:05:29ID:5otQfz0T0391387
2005/11/09(水) 08:16:09ID:5otQfz0Twakwakの解析が逝かれてるのですかね?
0392nobodyさん
2005/11/09(水) 08:53:46ID:???0393nobodyさん
2005/11/09(水) 09:06:00ID:BFWlWPsiがエラーです。
多分正規表現の指定がおかしいと思います。
0394nobodyさん
2005/11/09(水) 09:29:22ID:???正規表現なら
@imglist = grep /\.jpg$/, readdir DIR;
ワイルドカード使おうとしてるところを見るとこのへんと混同してるのかも
@imglist = glob("*.jpg");
@imglist = <*.jpg>;
0395nobodyさん
2005/11/09(水) 11:29:02ID:???ちゃんとASCIIモードで転送しているのか?
ファイルの先頭に変なバイナリが付いていないかバイナリエディタ等で確認したのか?(UTF-8保存とかね)
0396nobodyさん
2005/11/09(水) 11:51:52ID:???> ファイルの先頭が
> #!/bin/perl
> #!/usr/bin/perl
> #!/usr/local/bin/perl
> でないか、
このメッセージは、列挙された3つの行のうち好きなものを書けば
いい、という意味ではなく、サーバに対して指定された、何れか一つの行を
書かなきゃだめ、ということだと思うが。
#!/usr/bin/perl
は本当に正しいのかな?
0397nobodyさん
2005/11/09(水) 18:03:19ID:???ttp://www.wakwak.com/info/connection-setup/ftp/custom-cgi.html
0398nobodyさん
2005/11/09(水) 18:24:22ID:???ASCIIモードかどうかは、文字コードとかの問題じゃなくて
FTP転送の問題ジャマイカ?
ていうかここまで来るともはやスレ違い。
0400nobodyさん
2005/11/10(木) 00:00:36ID:???PHPでNet_DNSBLを使っていて、PerlでもDNSBLチェックをしたいです。
0401nobodyさん
2005/11/10(木) 01:43:05ID:???こんなんとか。
http://search.cpan.org/~tjmather/Net-DNSBLLookup-0.03/lib/Net/DNSBLLookup.pm
0402nobodyさん
2005/11/10(木) 03:41:03ID:???入れました
0403387
2005/11/10(木) 06:37:47ID:XPue5Djf色々ありがとう。
とりあえず
>>389で、ロリポは動きました。
で、>>395御指摘のutf-8でwakwakも逝けました。
解決できました。
>>396
>サーバに対して指定された、何れか一つの行を
>書かなきゃだめ、ということだと思うが。
そうみたいですね。
#!/usr/bin/perlはダメで、#!/usr/local/bin/perlはいけました。
>>397のリンクで
>スクリプト先頭行には #!/usr/local/bin/perl と記述して下さい。
と書いてありました。
でもあの書き方ではわかんないですよ。僕だけですかね・・・
>FTP転送の問題
でなくてよかったです。
とにかく、supecial thnxです。
0404nobodyさん
2005/11/10(木) 06:43:00ID:???>でもあの書き方ではわかんないですよ。僕だけですかね・・・
おまいだけ。あと「supecial thnx」は恥ずかしいからやめておけ。
0406nobodyさん
2005/11/10(木) 10:11:45ID:???0407nobodyさん
2005/11/10(木) 10:52:53ID:CqV/pVhDビルダーとかみたいな
0408nobodyさん
2005/11/10(木) 11:38:03ID:???Perl書くのにどんなエディタ使ってる?
http://pc8.2ch.net/test/read.cgi/php/1014357485/
0409nobodyさん
2005/11/10(木) 22:41:58ID:???現在フォームメールを作っているのですが、どうもうまくいきません。
スクリプトの流れとしては、
(サブルーチンA)フォームデータの取り込み、デコード、データをハッシュ(%FORM)に代入。
ハッシュのデータをソートしてメールボディー用の変数($body。もちろんグローバル変数)へ代入。
↓
(メインルーチン)送信ボタンが押されたかチェック。
押されたら送信用のサブルーチンへ。
↓
(サブルーチンB)確認ページの表示。ハッシュのデータをソートして表示。
なのですが、確認ページで送信ボタン(キー名はsubmit)を押すとハッシュの中身はsubmitだけになってしまうし、$bodyはどこかへ消えてしまうし、どうにもさっぱりです。
どなたか導いてください。宜しくお願いします。
0410nobodyさん
2005/11/10(木) 22:44:24ID:???0412nobodyさん
2005/11/10(木) 23:53:03ID:???0413nobodyさん
2005/11/11(金) 00:15:11ID:???サブルーチンとか言ってるけど、ページの遷移はないってこと?
0415nobodyさん
2005/11/11(金) 08:59:41ID:???0416nobodyさん
2005/11/11(金) 18:22:32ID:???Perlでテキストファイルから1行ずつ読み込んで処理する時には
while(<>){}
で済みますが、
既に変数に入っているテキストを1行ずつ処理する場合、どうしたらよいのでしょうか?
0417nobodyさん
2005/11/11(金) 19:03:57ID:???0418nobodyさん
2005/11/11(金) 19:15:49ID:???テキストの内容がでかいとでかい配列ができちゃうのがイヤだけど、
foreach my $line (split(/^/, $txt)) {
# $line に何かする
}
0419nobodyさん
2005/11/11(金) 19:18:47ID:???レスありがとうございます。
>>418
すいません。splitの/^/というのは??
この場合の^は行頭を表す^ですか?
0422nobodyさん
2005/11/11(金) 20:30:27ID:???とかでも
0424nobodyさん
2005/11/11(金) 22:14:13ID:???ありがとうございます。
だいたいどんな事をやっているのか理解するのに
しばらくかかりました。^^;
オプションを使いこなせると便利になりそうですね。
0425nobodyさん
2005/11/11(金) 23:15:24ID:???原因は何でしょうか?
0426nobodyさん
2005/11/11(金) 23:23:21ID:???0427nobodyさん
2005/11/13(日) 16:57:21ID:???これを使ってBasic認証通過させたいんですが
鯖側の$realmが日本語になってるせい?なのか失敗します
アドバイスお願いします。。
0429nobodyさん
2005/11/13(日) 22:03:50ID:???文字コードがわからなければLWP::UserAgentのget_basic_credentialsを再定義して
$realmになに渡ってきてるのか調べてあわせてやればいいと思うよ。
0431nobodyさん
2005/11/14(月) 11:00:01ID:W63Ukjvmopen関数を使用して、UTF-8でテキストファイルに出力したいのですが
その方法がよくわからず困っています。
フォームから取得した変数はSHIFT_JISなので、
そのままopen関数で出力すると、テキストファイルの文字コードは
SHIFT_JISになってしまいます。
どなたか知っておられる方がいましたら、よろしくお願いします。
0433nobodyさん
2005/11/14(月) 17:51:10ID:WMignAMjつまり、やりたいことは、配列をランダムに並び替えることです。
0434nobodyさん
2005/11/14(月) 18:03:25ID:???http://boobar.hp.infoseek.co.jp/bench/randlist.txt
0435nobodyさん
2005/11/14(月) 18:12:42ID:???パフォーマンスなんて問題になってから考えれば良い。
気になるならそもそも Perl なんか使わんし。
0436nobodyさん
2005/11/14(月) 18:39:21ID:3zfzQPqEDLPass:1234
windowsでActivePerl5.8を使っています。
IO::Socketを使い、コンソールでのチャットを作ろうと思っています。
現在は、サーバー側はechoserverのプログラムを、
クライアント側にはプロセスを受信・送信に分けたものを使おうと思っています。
実行すると文字は入力できるのですが、うまくserver側にデータが行かないようです。
たぶん原因はclient側なんですが・・。
煮詰まってしまいました。。ヒントお願いします(つд⊂)
0437nobodyさん
2005/11/14(月) 19:04:07ID:???■こんなCGI作ってください■
http://pc8.2ch.net/test/read.cgi/php/1102980903/
0438436
2005/11/14(月) 21:57:56ID:3zfzQPqEどんな本やwebページがオススメですか?
0440nobodyさん
2005/11/14(月) 22:09:16ID:???0442436
2005/11/14(月) 22:23:16ID:3zfzQPqEラクダもドキュメントも読んだけどよくわかんね^^;
神はー神はいないのかー>w<;
0443nobodyさん
2005/11/14(月) 22:33:57ID:???0444436
2005/11/14(月) 22:59:47ID:3zfzQPqE0445nobodyさん
2005/11/14(月) 23:09:56ID:???ラクダもドキュメントも読んだのに分からないのなら、Socket や
ターミナルを扱う為の基本的な知識が君には欠けている。
そしてその解説はこのスレの範疇ではない。
0446436
2005/11/14(月) 23:20:04ID:3zfzQPqE出直してきます。
0447nobodyさん
2005/11/15(火) 00:24:28ID:???0448nobodyさん
2005/11/15(火) 13:35:44ID:???0449nobodyさん
2005/11/15(火) 14:05:37ID:???0450nobodyさん
2005/11/15(火) 15:28:57ID:???Programming UNIX Socket FAQ in Japanese
http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html
UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
http://www.amazon.co.jp/exec/obidos/ASIN/4894712059/
どちらもCを読めること。
0451nobodyさん
2005/11/15(火) 18:19:07ID:5cRd32ic現行
インターネット--------WEBサーバ(DBなど含む)
現行↑の単純な構成を
↓の構成(WEBサーバ3台、DBサーバとにしたいのですが、
イメージ
WEBサーバ1
インターネット--------ロードバランサ----WEBサーバ2--------Perlプログラム&DBサーバ
WEBサーバ3
この時にPerlのプログラム等に関して注意事項、不具合予測等はありますか?
0453nobodyさん
2005/11/15(火) 18:20:45ID:5cRd32ic現行
インターネット--------WEBサーバ(DBなど含む)
現行↑の単純な構成をロードバランサーを加えて
↓の構成(WEBサーバ3台、Perlプログラム&DBサーバ)にしたいのですが、
イメージ
WEBサーバ1
インターネット--------ロードバランサ----WEBサーバ2--------Perlプログラム&DBサーバ
WEBサーバ3
0455453
2005/11/15(火) 18:26:44ID:???退散します
0456nobodyさん
2005/11/16(水) 00:22:50ID:F5yPWKpZ0457nobodyさん
NGNG0458nobodyさん
2005/11/16(水) 01:49:10ID:???画像掲示板をCGI-Perlで作ったんですが、
アドレス先に画像が存在しているかどうかを判別する事は可能でしょうか?
0460nobodyさん
2005/11/16(水) 02:26:25ID:???0461nobodyさん
2005/11/16(水) 03:50:28ID:???0462nobodyさん
2005/11/16(水) 11:27:12ID:???マルチすんな
0463nobodyさん
2005/11/16(水) 13:37:18ID:???誘導されて来た、ってんだからマルチじゃないんじゃないの?そゆことじゃなくて?
>>458
リモートのサーバにある画像なら、HTTP でアクセスして存在確認する必要があるかと。
LWP とか使って HTTP で HEAD とか GET することになると思うけど、
具体的なやり方はまずぐぐって調べてみれ。
0464659
2005/11/16(水) 19:05:42ID:nAWFz8uaページャー機能(ページ送り)を加えたいんどえすが、
DBI::Pagerがレンタルサーバに入っていないため、
簡単は方法はないかと探してます。何か方法はありませんか?
pure perlなモジュールがあれば一番良いのですが。
0465nobodyさん
2005/11/17(木) 14:07:26ID:AgumOSx0更新記録CGIと検索CGIを別々に見つけてそれを合わせて実現させようとしています。
この中で「○円以内のもの」を抽出するというのをしたいんです。
ドロップダウンリストに
〜100円
101円〜200円
201円〜300円
〜〜
1,000円〜
という設定をしておいて、リストからその価格帯だけを表示させるという物です。
ドロップダウンリストに
<option value="1">〜100円</option>
<option value="2">101円〜200円</option>
<option value="3">201円〜300円</option>
として、普通にif文で
if($FORM{'data'} eq '1'){
if($data =< 100){ ; } else { next; }
}
elseif($FORM{'data'} eq '2'){
if($data => 101 && $data =< 200 ){ ; } else { next; }
}
〜〜
とすればOKなのでしょうか?(データには桁区切りのカンマが入ると思います。)
ほかによい方法がありますか?または、参考となるCGIがあれば同時に教えてもらえるとありがたいです。
0466nobodyさん
2005/11/17(木) 14:27:44ID:???>>1
>>7-8
【CGI】こんなCGI探してますver.18
http://pc8.2ch.net/test/read.cgi/hp/1123833110/
■こんなCGI作ってください■
http://pc8.2ch.net/test/read.cgi/php/1102980903/
0467nobodyさん
2005/11/17(木) 14:32:54ID:AgumOSx0回答ありがとうございます。
自分で改造を考えているので、他のCGIを利用するとかすべてを作ってもらうわけでもないのですが、
ここじゃだめなんでしょうか?
0468nobodyさん
2005/11/17(木) 14:59:14ID:???>>1 を読めと。未来の話をせず、実際に躓いてから >>7-8 で
調べた上で質問しろと。
> 更新記録CGIと検索CGIを別々に見つけて
については >>466 。
> 自分で改造を考えている
については
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1077525387/
自作の部分に関してはココ。
0469nobodyさん
2005/11/17(木) 15:01:10ID:???データを array か hash に入れておき、grep 等で取り出せば OK。
ex.
my @data = (
{ name => 'a', price => 100, },
{ name => 'b', price => 200, },
...
};
...
my $lower = 100; # 実際は form から入力された値を検査し、代入。
my $upper = 200;
my @out = @data;
@out = grep { $_{price} >= $lower } @out if $lower;
@out = grep { $_{price} <= $upper } @out if $upper;
...
for (@out) {
print "$_{name}: $_{price}\n";
}
0471nobodyさん
2005/11/17(木) 17:05:22ID:vCe+doXklockfって実際どれくらいの実績があるのでしょう?
バージョンはいくつから使えるのでしょうか?
0472nobodyさん
2005/11/17(木) 17:37:43ID:???lockf という組込関数は perl に存在しない。
http://search.cpan.org/~nwclark/perl-5.8.7/pod/perlfunc.pod
perl の組込関数である処の flock() は標準 C ライブラリに用意
されている flock(2) か fcntl(2) か lockf(3) で実装されていて、
これらの関数が環境によっては NFS 越しのロック処理に対応
していない。なのでどんな環境で走らせるか決め打ちできない
場合は、システムコールレベルではなくスクリプトレベルでの
排他処理機構を用意する必要がある。
http://search.cpan.org/modlist/File_Name_System_Locking
http://www.din.or.jp/~ohzaki/perl.htm#File_Lock
【Perl】ファイルロック(排他処理)について語ろう
http://pc8.2ch.net/test/read.cgi/php/1024795138/
0473nobodyさん
2005/11/17(木) 18:11:47ID:+ypcUw74PHPの「setcookie($cookie,$setword,$expire);」で発行したCookieは、
CGI等で読み込めないのでしょうか?
0474nobodyさん
2005/11/17(木) 18:32:19ID:???ここは CGI スレではなく Perl のスレです。
△▲ WebProg 初心者の質問 Part12 ▼▽
http://pc8.2ch.net/test/read.cgi/php/1125215604/
CGI: Common Gateway Interface part 13
http://pc8.2ch.net/test/read.cgi/php/1126436361/
0475nobodyさん
2005/11/17(木) 19:10:47ID:vCe+doXkありがと
0476nobodyさん
2005/11/17(木) 21:47:27ID:7TvwAtmaこの2ch型掲示板に表示されるIDを環境変数REMOTE_USERに一致させたいのですが
どうしたらよいでしょうか
sub id {
my($id,$sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst,$month,$date,$identify);
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$identify = substr($ENV{'REMOTE_ADDR'},-2).substr(crypt($ENV{'REMOTE_ADDR'},$year-$mon*100),2);
$id = crypt($identify,$mday."L");
$id = substr($id,-10);
return $id;
を
$id = $ENV{'REMOTE_USER'};
if ($id eq '') { $id = ":"; }
にしてみたりしたのですがよくわかりません。。
0477nobodyさん
2005/11/17(木) 21:55:58ID:???質問がよく分からん。
また、
> にしてみたりしたのですがよくわかりません。。
の、何がよくわからんのかよく分からん。
0478nobodyさん
2005/11/17(木) 22:02:17ID:???★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1077525387/
0479nobodyさん
2005/11/17(木) 23:05:58ID:???携帯用のフォームを作ってるんですけど
フォームから送信したデータって
当然、携帯のメモリ内にあるわけですよね?
あるフォームから送信、その先にもフォームがあり
そこからさらに今受け取ったデータも含めて新たなデータ送信と
要はどんどん送信するデータ増えていくわけですが
こういうのは問題ないのでしょうか?
どなたか教えてください。
よろしくお願いします。
0480nobodyさん
2005/11/17(木) 23:12:26ID:???△▲ WebProg 初心者の質問 Part12 ▼▽
http://pc8.2ch.net/test/read.cgi/php/1125215604/
0481nobodyさん
2005/11/17(木) 23:20:50ID:???0482nobodyさん
2005/11/18(金) 03:21:21ID:???0483nobodyさん
2005/11/18(金) 03:52:36ID:b/mBx1Hf%hash = (
'audio' => "オーディオ",
'video' => "ビデオ",
'cd' => "CD-ROM",
'dvd' => "DVD",
'bench' => "ベンチマーク",
'text' => "テキスト",
'bin' => "バイナリ"
);
の様に値をセットして
while(($k, $v) = each(%hash)){ print "$k = $v\n"; }
とか
foreach (keys(%hash)){ print "$_ = $hash{$_}\n"; }
ってやっても
'audio', 'video', 'cd', 'dvd' => "DVD", 'bench', 'text', 'bin'
の順番 (代入した順番) で出力してくれないんですけど、代入順での出力を
希望するなら
@list = ('audio', 'video', 'cd', 'dvd' => "DVD", 'bench', 'text', 'bin');
の様に“順番”を別で保持しておくしか無いんでしょか?
ちなみに上記のコードだと
audio
cd
bin
dvd
video
text
bench
の順番で出力されます。
0485nobodyさん
2005/11/18(金) 04:13:25ID:???標準モジュールじゃないからサーバで使えるかは疑問だけどFAQにこういうのがある
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#how_can_i_make_my_hash_remember_the_order_i_put_elements_into_it
これが使えないならデータ構造の工夫次第だろうな。
まあ、キーの順番を覚えておくのが一番簡単かと思う。
もしハッシュである必要性が無いなら…つまり$hash{$key}の形で使うことが無いなら、
こういう構造が考えられるね。
@list = (
['audio' => "DVD"],
['video' => "ビデオ"],
...
);
0486485
2005/11/18(金) 04:24:50ID:???補足
確認してみたらTie::IxHashはPure Perlだった。
そのままディレクトリ下にTie/IxHash.pmとして配置すれば動くよ
http://search.cpan.org/~gsar/Tie-IxHash-1.21/lib/Tie/IxHash.pm
ここのSourceからダウンロードね
0488nobodyさん
2005/11/18(金) 07:56:03ID:???'audio' => {index=>0, value=>"オーディオ",},
'video' => {index=>1, value=>"ビデオ",},
'cd' => {index=>2, value=>"CD-ROM",},
);
オレはこれでやってる。。
0489nobodyさん
2005/11/18(金) 10:58:48ID:???キーだけ受け取って値はハッシュから取った方が効率がいい。
0490nobodyさん
2005/11/18(金) 11:09:40ID:???普通に考えるとeachがせっかく返す値を捨てて値をハッシュから
とったらハッシュをひく手間がかかる分損しそうなものだが...
foreach (keys ...)でまわせって意味かな? それならわかる。
とりあえず論よりベンチ。
use Benchmark;
my %h = (1..2000);
timethese(undef, {
foreach => sub {
foreach my $k (keys %h) {
my $v = $h{$k};
}
},
each => sub {
while(my($k, $v) = each %h) {
}
},
each_key => sub {
while(my($k) = each %h) {
my $v = $h{$k};
}
},
});
Benchmark: running each, each_key, foreach for at least 3 CPU seconds...
each: 3 wallclock secs ( 3.18 usr + 0.00 sys = 3.18 CPU) @ 594.34/s (n=1890)
each_key: 3 wallclock secs ( 3.24 usr + 0.00 sys = 3.24 CPU) @ 470.68/s (n=1525)
foreach: 3 wallclock secs ( 3.21 usr + 0.00 sys = 3.21 CPU) @ 686.60/s (n=2204)
0491nobodyさん
2005/11/18(金) 11:32:55ID:???timethese(undef, {
foreach => sub {
foreach $k (keys %h) {
$h{$k};
}},
each => sub {
while(($k, $v) = each %h) {
$v;
}},
each_key => sub {
while(($k) = each %h) {
$h{$k};
}},
undef => sub {
while(($k,undef) = each %h) {
$h{$k};
}},
});
0492nobodyさん
2005/11/18(金) 12:18:06ID:???http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_each_HASH
my($k) = each %h も ($k) = each %h もリストコンテキスト。
my $k = each %h なり $k = each %h として計らないと意味無し。
0493nobodyさん
2005/11/18(金) 12:38:34ID:???OS : Windows XP
Ver: Active Perl 5.8.7 build 815
CPU: Athlon 1.6GHz -> 1.0GHzにクロックダウン
Mem: 256MB
ベンチマーク部>>491のものに>>492の修正を加えて使用
my %h = (1 .. $data_count*2);
データ数 2^2
Benchmark: running each, each_key, foreach, undef for at least 3 CPU seconds...
each: 4 wallclock secs ( 3.01 usr + 0.00 sys = 3.01 CPU) @ 142105.46/s(n=427169)
each_key: 2 wallclock secs ( 3.11 usr + 0.02 sys = 3.13 CPU) @ 138342.29/s(n=432458)
foreach: 2 wallclock secs ( 3.17 usr + 0.00 sys = 3.17 CPU) @ 118013.55/s(n=374575)
undef: 4 wallclock secs ( 3.13 usr + 0.01 sys = 3.14 CPU) @ 124147.58/s(n=390320)
データ数 2^4
Benchmark: running each, each_key, foreach, undef for at least 3 CPU seconds...
each: 2 wallclock secs ( 3.18 usr + 0.00 sys = 3.18 CPU) @ 42106.14/s (n=133687)
each_key: 3 wallclock secs ( 3.00 usr + 0.01 sys = 3.01 CPU) @ 40220.63/s (n=120863)
foreach: 4 wallclock secs ( 3.30 usr + 0.00 sys = 3.30 CPU) @ 48033.28/s (n=158750)
undef: 3 wallclock secs ( 3.10 usr + 0.00 sys = 3.10 CPU) @ 35960.05/s (n=111620)
データがごく少ない場合においてはeachでまわしたほうが若干速い。
でも2^3個程度までの話だしkeysをforeachで回したほうが良さそうだな
0494nobodyさん
2005/11/18(金) 15:29:22ID:???多くなるに連れて遅くなり7000個あたりでeach系に抜かれた。
list eachとscalar eachでは微妙にscalar eachのが速いが、
ループ内で値をたくさん使うならlist eachのがよさそう。
0495nobodyさん
2005/11/18(金) 15:42:17ID:???追試とまとめ。
http://boobar.hp.infoseek.co.jp/bench/hash.txt
0496493
2005/11/18(金) 16:18:46ID:???データ数1024よりも多くして実験してなかった・・・こちらでは2050付近で抜かれた
>>495
詳しい検証乙
データ数が増えるとkeysの戻り値の配列の大きさがネックになるわけか
0498nobodyさん
2005/11/18(金) 16:49:18ID:???こういうのはどこで言えばいいんだろ(´・ω・`)
0499nobodyさん
2005/11/18(金) 17:03:10ID:b/mBx1Hf@list = (['key' => 'val'], ...);
これで値をセットしたときってどうやって取り出すんでしょうか?
for(my($i) = 0; $i < $#list; $i += 2){
my($key, $val)= ($list[$i], $list[$i + 1]);
〜処理〜
}
って感じですか?
>>485, 486
ちょっと使い方を覚えてみようかな
>>488
そうやって値をセットしたときの取り出しはどうやるんでしょか?
0500nobodyさん
2005/11/18(金) 17:07:32ID:???その要求が通るとは到底思えないが、弾の人にでもメールしてみたらぁ?
>>499
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perldsc.html
0501nobodyさん
2005/11/18(金) 17:25:13ID:b/mBx1Hf慣れるまでに時間かかりそうですが、ありがとうございました m(_ _)m
0502nobodyさん
2005/11/18(金) 17:35:46ID:b/mBx1Hf@list2 = (
{'audio' => "オーディオ"},
{'video' => "ビデオ"},
{'cd' => "CD-ROM"},
{'dvd' => "DVD"},
{'bench' => "ベンチマーク"},
{'text' => "テキスト"},
{'bin' => "バイナリ"}
);
foreach (@list2){
my($key, $val) = each(%$_);
print "$key => $val\n";
}
順番を保持しなくちゃならないときはこんな感じでいこうかなって思います。
0503nobodyさん
2005/11/18(金) 17:40:35ID:???ちなみに
>>485 みたいに配列使うなら
foreach my $elem (@list) {
my($key, $val) = @$elem;
}
で行ける。
>>502 のやり方だと要素が1つだけのハッシュがいくつか出来てしまうので
少しだけ空間効率が悪い。
まぁ、小さいから気にならないだろうけど。
0504nobodyさん
2005/11/18(金) 17:45:08ID:b/mBx1Hfおぉ〜、そのやり方のほうがスマートな気がする。
いやはや勉強になります。
0505nobodyさん
2005/11/18(金) 18:15:21ID:???「ハッシュはリストである」ということを知っていれば、簡単にわかる。
@foo = (1,10,2,20,3,30);
%bar = @foo;
print "$_ -> $bar{$_}\n" foreach keys %bar;
0506nobodyさん
2005/11/18(金) 18:15:31ID:lIGSV4IR【5.1登場】PHP時代到来 他言語終了【Perl即死】
http://pc8.2ch.net/test/read.cgi/php/1129715894/842
842 名前:nobodyさん[sage] 投稿日:2005/11/18(金) 18:05:46 ID:???
PerlはKE★Tの糞コードのせいで全てが終わった
0507nobodyさん
2005/11/18(金) 18:29:06ID:???続きはこっちでやって
http://pc8.2ch.net/test/read.cgi/php/1078991985/l50
いちいち解説してられないから
0509nobodyさん
2005/11/18(金) 18:32:14ID:EJTafLuMぐぐっても九行で書かれたP2Pしか出てこなくてorz
0510nobodyさん
2005/11/18(金) 18:53:23ID:???デバッグに必要なのは「P2Pアプリを作成するチュートリアル」ではなくて
Perl のマニュアルではないのか? >>7-8
0511nobodyさん
2005/11/18(金) 19:03:33ID:???すいません。やりたいことの整理が出来てませんでした。
新月作者がPerl版の開発を放棄してるので、余分な機能を付与しない掲示板だけのP2Pソフトを作りたいんです。
ただP2Pアプリを弄ったことがないものでどうしたものかなと。
ソース読んで改造するのがてっとりばやいにしても概念が分からないので・・
0512nobodyさん
2005/11/18(金) 19:09:55ID:???pdfで流れてる
0514nobodyさん
2005/11/18(金) 19:28:27ID:???概念や基本的な設計に関してはスレ違いだし、Google さんにでも
尋ねた方が早そう。具体的に Perl でのやり方となると改造ベース
が転がってるんだからソース読みながら学んだ方が効率いいわな。
コレだよね?
http://prdownloads.sourceforge.net/shingetsu/shingetsu-0.5b5.tar.gz
あと CPAN にはこういうのがあるね。
http://search.cpan.org/~klimkin/P2P-pDonkey-0.05/
0516nobodyさん
2005/11/19(土) 22:11:13ID:???0517nobodyさん
2005/11/19(土) 23:26:30ID:???0518nobodyさん
2005/11/20(日) 00:14:24ID:???インストール成功したかの確認方法ってありますか?
0521nobodyさん
2005/11/20(日) 00:20:29ID:???0522nobodyさん
2005/11/20(日) 00:47:10ID:???0523nobodyさん
2005/11/20(日) 01:29:36ID:q2W9WK5M0524nobodyさん
2005/11/20(日) 01:54:09ID:???0525nobodyさん
2005/11/20(日) 02:34:35ID:???変数名をループで作り出すにはどうすればいいのでしょうか?
my $chk0 = param('chk0');
↑の数字をforループでインクリメントして宣言するにはどうしたらいいでしょうか?
0527nobodyさん
2005/11/20(日) 19:45:49ID:???で、得点順に順位をつけるんだが、同点の場合同じ順位にし、次の順位は飛ばすって事ができなくて詰まっている。
現在は配列をforループし、$iをインクリメントして順位としている。
何かいい方法は無いだろうか。
0530nobodyさん
2005/11/20(日) 20:30:19ID:???既に回答を用意してる漏れがはっきり言ってやろう
> 名前1->得点1 名前2->得点2 っていうような配列があり
ここが意味不明。
以下に漏れが適していると考えたデータ構造とそのソースを貼ったるから
これで満足できないならちゃんと伝わるように説明汁
my %name2score = (hoge => 100, fuga => 90, hage => 100);
my %score2name;
foreach my $name (keys(%name2score)) {
push @{$score2name{ $name2score{$name} }}, $name;
}
my $rank = 1;
foreach my $score (sort {$b <=> $a} keys(%score2name)) {
foreach my $name (@{$score2name{$score}}) {
printf "%2d: %s(%3dpt)\n", $rank, $name, $score;
}
$rank += @{$score2name{$score}};
}
0531nobodyさん
2005/11/20(日) 20:35:37ID:???0532527
2005/11/20(日) 20:46:03ID:???thx
考え方さえわかれば後は自分で弄れると思いましたので、データ構造を適当に書いてしまいました。
申し訳ありませんでした。
あ、>>529は自分ではありませんので、念のため。
0536nobodyさん
2005/11/20(日) 21:01:02ID:???0537nobodyさん
2005/11/20(日) 21:23:44ID:???0538nobodyさん
2005/11/20(日) 21:32:49ID:???さっさと強制IDにしろよこの板
0539nobodyさん
2005/11/20(日) 21:33:46ID:???0540nobodyさん
2005/11/20(日) 21:35:51ID:???0542nobodyさん
2005/11/20(日) 21:39:20ID:???0544nobodyさん
2005/11/20(日) 21:41:55ID:???それよりム板も・・
0545nobodyさん
2005/11/20(日) 21:42:34ID:sql5orzi0547nobodyさん
2005/11/20(日) 22:45:33ID:Va/OuDM70548nobodyさん
2005/11/21(月) 01:50:14ID:???0549nobodyさん
2005/11/21(月) 02:08:53ID:???0550nobodyさん
2005/11/21(月) 02:12:55ID:???0551nobodyさん
2005/11/21(月) 03:36:00ID:m9z0lXWM純粋に順位を加えていく変数($i)と、状況に応じて順位を加えていく変数($j)の2つをつくる。
$iはループ中でひたすらインクリメントのみ。
$jは直前の人の点数と異なれば$iを採用する。 同じであれば$jをそのまま採用。
で出来ないかな?
0552nobodyさん
2005/11/21(月) 07:40:49ID:HZcu4vs3質問があります。
perlで$ENV{'PATH_INFO'}を取得しようとしていますが、
なぜか取得してくれません。
これはサーバー側の設定が影響しているのでしょうか。
ちなみに、他の環境変数については、正常に取得しています。
よろしくお願いします。
0554552
2005/11/21(月) 09:10:44ID:HZcu4vs3今やりたいことは、稼動中の掲示板の改造です。
$ENV{'QUERY_STRING'}からGETで取得している値を、
$ENV{'PATH_INFO'}から取得したいと思っています。
◆サーバー:ロリポップです。
◆コード
値を確かめるために、下のようなコードだけを記述したファイルを
アップし、適当な引数を付けてテストしていました。
print"Content-type: text/html\n\n";
print qq(
<HTML><HEAD><meta http-equiv=Content-Type content=text/html; charset=shift-jis>
</HEAD>
<BODY>
$ENV{'PATH_INFO'}
</BODY>
</HTML>
);
exit;
よろしくお願いいたします。
0555nobodyさん
2005/11/21(月) 09:19:28ID:???PATH_INFOを勘違いしてるって事は無いよね
テストに使ったURLはどういう形式?実在じゃなくていいから
0556nobodyさん
2005/11/21(月) 09:26:41ID:HZcu4vs3このような形式です。
http://ドメイン/bbs/index.cgi?room=1
よろしくお願いいたします。
0557nobodyさん
2005/11/21(月) 09:30:28ID:???getメソッドの取得はquery_stringのままでいいと思うけど、変更しないといけない理由は?
0558ヽ(´ー`)ノ ◆.ogCuANUcE
2005/11/21(月) 09:39:19ID:???それ、PATH_INFO 含まれてないし。とりあえず CGI.pm のドキュメント嫁。
OBTAINING THE SCRIPT'S URL と FETCHING ENVIRONMENT VARIABLES の path_info() のところ。
多分探せば日本語訳もある。
0559nobodyさん
2005/11/21(月) 10:31:19ID:HZcu4vs3何か私が勘違いをしているのでしょうかね。
ドキュメントを読んで見ます。
0560nobodyさん
2005/11/21(月) 11:37:26ID:5KZiaClrif(@abc[1] eq $name){&error}
@abc=split(/\,/,@aaa[1]);
if(@abc[1] eq $name){&error}
@abc=split(/\,/,@aaa[2]);if(@abc[1] eq $name){&error}
これを一行にしたくて@abc=split(/\,/,@aaa[0,1,2]);
if(@abc[1] eq $name){&error}
にしたんですけど機能しません
どこを直したらよいのでしょうか?
0561nobodyさん
2005/11/21(月) 11:44:26ID:???splitは配列を受けられない
見たところその処理はチェックのみで代入は不要?
(split(/\,/, $_))[1] eq $name && &error foreach @aaa[0,1,2];
こんな感じでどうだろ
0562nobodyさん
2005/11/21(月) 11:52:25ID:5KZiaClrレスありがとうございます
実際にはサブルーチンで代入します
すみません
使用目的は連続投稿を防ぐためで、ログファイルに同一内容があるのかチェックをしたいのです
0563nobodyさん
2005/11/21(月) 12:02:55ID:???@abc=split(/\,/,@aaa[0,1,2]);
のsplit(/\,/,@aaa[0,1,2]);の部分がサブルーチンの戻り値ということかな
期待する内容は(0の名前, 1の名前, 2の名前)という配列ということでOK?
それなら
map { +(split /,/, $_)[1] } @aaa[0,1,2];
とか。
でも、それは構造を考え直したほうが良いかも・・・
0565nobodyさん
2005/11/21(月) 12:29:45ID:???この辺参考にどぞー
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perldsc.html
0566nobodyさん
2005/11/21(月) 15:57:20ID:???$ascii = '[\x00-\x7F]';
$twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]';
$threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';
open (DATA, "<$log");
flock (DATA, 1);
@line = <DATA>;
close (DATA);
# $wordはフォームから受け取った検索対象文字列です
# 検索対象文字列はスペース区切りで複数設定可能にしてあります
$word =~ s/ | /\t/g;
&jcode::convert (\$word, "euc", "sjis");
@words = split (/\t/, $word);
foreach (@line) {
&jcode::convert (\$_, "euc", "sjis");
# ログはタブ区切りです
@data = split (/\t/, $_);
foreach (0 .. $#words) {
# &error ($words[$_]); # ※1
# $data[6]が記事の本文です
if ($data[6] =~ /^(?:$ascii|$twoBytes|$threeBytes)*?(?:$words[$_])/) {
# &error ($words[$_]); # ※2
検索文字に\を入れて※1の部分でエラーを出そうとすると正常にエラー画面に\が表示されるのですが、
※2で出そうとしても、その前にCGIエラーで落ちてしまいます。
下から2行目のif文内の$words[$_]に\が入った時点で落ちると思うのですが、
どのようにしたら正常に検索処理を行なえるでしょうか。
0567nobodyさん
2005/11/21(月) 16:06:06ID:???最低限そうしないと、いろいろ死ぬぜ?
0568566
2005/11/21(月) 16:19:18ID:???レスありがとうございます。
以下のように修正することで解決できました。
- @words = split (/\t/, $word);
+ @words = split (/\t/, quotemeta ($word));
0569nobodyさん
2005/11/22(火) 16:26:52ID:???オンラインのレンタルスペースにアップロードして稼動させようとしています.
ローカルできちんと動くスクリプトを組むまではOKだったのですが,
レンタルスペースで動かそうとすると,様々なエラーがでてしまいます.
レンタルスペースの仕様書を見て,使えないモジュールのチェックなどはもちろんですが,
ファイル名の大文字や小文字の判定など,他に気をつけることはありますでしょうか?
0570nobodyさん
2005/11/22(火) 16:36:17ID:???0571nobodyさん
2005/11/22(火) 17:10:04ID:???0572nobodyさん
2005/11/22(火) 17:18:46ID:???質問が少し漠然すぎたかもしれませんので,具体的な質問に変更します.
$year=2005,$month=11;
@allfiles=(haman200511,Amuro200511);
@persons=(Amuro,Quess,Char);
#指定された年月かつ,存在する人物のファイル名を取得
for my $file (@allfiles) {
for my $person (@persons) {
if($file eq "$person$year$month.dat"){
push(@files,$file);
}
}
}
0573nobodyさん
2005/11/22(火) 17:19:42ID:???SAJAX
http://www.modernmethod.com/sajax/
0574nobodyさん
2005/11/22(火) 17:21:11ID:???ローカル @files=(Amuro200511.dat);
レンタル @files=();
この箇所の挙動がレンタルとローカルで異なっています.
ローカルのPerlのVerは5.8で,レンタルのほうは5.6なのですが,
Verによる挙動の違いというようなものがあるのでしょうか?
訂正
@allfiles=(haman200511.dat,Amuro200511.dat);
0577nobodyさん
2005/11/22(火) 17:31:51ID:???CGI設置について質問 【Part2】
http://pc8.2ch.net/test/read.cgi/php/1104624784/
0579nobodyさん
2005/11/22(火) 17:53:28ID:eRlqTFqT@allfiles=(haman200511,Amuro200511);
@persons=(Amuro,Quess,Char);
↓
my($year, $month) = (2005, 11);
my(@allfiles) = ("haman200511", "Amuro200511");
my(@persons) = ("Amuro", "Quess", "Char");
0581nobodyさん
2005/11/22(火) 18:08:43ID:???0582nobodyさん
2005/11/22(火) 19:46:43ID:???0583nobodyさん
2005/11/22(火) 20:01:32ID:???0584nobodyさん
2005/11/22(火) 20:08:08ID:???0585nobodyさん
2005/11/22(火) 20:22:48ID:???use warningしてみましたが,状況は進展しませんでした.
>>579
実際のスクリプトではクォートしています.
抄写するにあたり,変数の中身を示しておこうと思い,
記述したときの手抜かりで,クオートし忘れました,申し訳ありません.
0587nobodyさん
2005/11/22(火) 20:35:50ID:???なんで誰も突っ込まないw
0588nobodyさん
2005/11/22(火) 21:08:47ID:???WInXp&Apacheのローカル環境だと大丈夫なのですが,レンタルスペースだとダメなんです.
ローカルとサーバの違いというものがよく判らなくて,デバッグに四苦八苦という状態です.
>>587
#!/usr/bin/perl ですね.すみません.
もう少し自分で頑張ってみてダメなようでしたら,また質問するかもしれませんが,
そのときはよろしくお願いします.
0589nobodyさん
2005/11/22(火) 21:15:52ID:???ローカルがWinってのは先に言おうな。話が全然違ってくるからな。
で、俺が言ってるのは>>572にクォート入れても動かないのか、なんだが。
もういいや。
0590nobodyさん
2005/11/22(火) 21:25:32ID:???無駄なやりとりが増えるから落ち着いてから出直してきなさい。
OSが異なれば改行の扱いが変わったりもするし、
スクリプトやデータファイルの文字コードに起因しているかもしれんし、
マルチバイトなファイル名/ディレクトリ名なんて脱力ものな原因かもしれんし、
FTP転送がまずいだけかもしれん。
typo
様々なエラーがでてしまいます。
挙動がレンタルとローカルで異なっています。
・・・神かエスパーじゃなきゃわからんよ。
0591nobodyさん
2005/11/22(火) 22:02:19ID:???0593974
2005/11/22(火) 23:14:39ID:???文字コードなんか気にせずに秀丸で文字コードをshift_jisに設定して書いて
マスタ、所が全角英数字を半角英数字にしようとしたら、プログラム自体は
jcode::tr(\$arg_[$i], '0-9A-Za-z', '0-9A-Za-z');
たったのこれっぽっちなんだけど、これって文字コードがEUC-JPじゃないと
正確に変換出来ないんだよね、やっぱり皆さんもperlのプログラム書くときの
文字コードはEUC-JPデツカ?
0594nobodyさん
2005/11/22(火) 23:18:40ID:???0595nobodyさん
2005/11/22(火) 23:21:51ID:???0596nobodyさん
2005/11/23(水) 04:24:57ID:fNvsPnqm本のサンプルコードで理解できないところがあるんで教えてください。
$Value =~ /(\w+)\.(\w+)$/;
なんて書くときの、最後の、
$/
って何を表すんですか?
ファイル名を取り出すようなところで使われてるんだけど…。
これなに?
下の例だと$っていらない気がするんだが…。
こんな感じ
例:
if($FileName =~ /(\w+)\.(\w+)$/){
$FileName = "$1\.$2";
}
0597nobodyさん
2005/11/23(水) 04:32:09ID:???http://x-web.pobox.ne.jp/fcgi/fcgi_20.html
0598596
2005/11/23(水) 04:38:15ID:fNvsPnqmネ申!!
ありがとうございます。
ちゅーか、大喜びするほどじゃない…。基礎ネタ?
修行していつか還元します…。
0599nobodyさん
2005/11/23(水) 08:50:52ID:???0600nobodyさん
2005/11/23(水) 08:56:54ID:???0601nobodyさん
2005/11/23(水) 10:33:48ID:???0603nobodyさん
2005/11/23(水) 16:24:36ID:???書かれているんだろうか?
0604nobodyさん
2005/11/23(水) 16:45:50ID:???コストが折り合えば使えるものはなんでも柔軟に使い、使えないものは使わない。
これを使わなきゃダメなんて・・・ やり方がいくらでもある以上、口が裂けても言えん
0605nobodyさん
2005/11/23(水) 16:52:23ID:???0606nobodyさん
2005/11/23(水) 16:57:40ID:JssfbXnp0607nobodyさん
2005/11/23(水) 16:59:58ID:???異常な執念深さだな。 File::Spec と File::Basename に何かコンプレックスでもあるのか?
0608nobodyさん
2005/11/23(水) 17:11:23ID:???>>599と>>602は俺じゃないけど。
標準で付いてくるモジュールぐらい、ちゃんと使ったらどうよ。
(不完全な)車輪の再発明を見てると馬鹿かと思う。
0609nobodyさん
2005/11/23(水) 17:20:16ID:???ほほう。
元質問が「本のサンプルコード」に関する質問だっていうのに、
File::Spec や File::Basename を持ち出すのが適切だとでも?
0610nobodyさん
2005/11/23(水) 17:30:15ID:QqvL0TVYやはり化けてしまいます。原因として何が考えられるでしょうか?
0611nobodyさん
2005/11/23(水) 17:32:10ID:???0613nobodyさん
2005/11/23(水) 17:40:21ID:???0616nobodyさん
2005/11/23(水) 18:34:04ID:???0617nobodyさん
2005/11/23(水) 19:20:27ID:???0619nobodyさん
2005/11/23(水) 20:09:38ID:???0620nobodyさん
2005/11/23(水) 20:10:39ID:???0621nobodyさん
2005/11/23(水) 20:21:18ID:???良かったらどうぞです
http://user.ftth100.com/mirrorhenkan/perl/
0622nobodyさん
2005/11/23(水) 20:57:03ID:???俺様専用スクリプトだって、Unix環境専用スクリプトだってアリなんだし、
必ず使えってことも無いでしょ。
必要要件を満たさないものを自作するよりは、
素直に使った方がいいけどさ。
0623nobodyさん
2005/11/23(水) 22:28:38ID:5cxNyXSuwindowsXPSP2
ActivePerl-5.8.7.813-MSWin32-x86-148120.msi
を使っています。
plファイル自体の文字コード EUC
内部で扱う文字コード EUC
標準出力 Shift-JIS
標準入力 EUC
POSTデータ等で受け取ったデータはshift-jisであれば内部処理用にEUCに変換する。
という構成でプログラムを書きたく、検索した結果、下記の他いろいろ試してみた
のですがうまくいきません。
文字化けで出力されたり、
"\x{fffd}" does not map to shiftjis at〜〜
と出力されたりします。
↓
#STDIN と STDOUT を別々にコード変換する
use encoding 'euc-jp', STDOUT=>'shift_jis';
どうかお力添えをして頂けないでしょうか。
よろしくお願い致します。
0624nobodyさん
2005/11/23(水) 22:34:46ID:???いろいろやったんなら試したこと全部書かないと
レスしても 「それはやってみましたがダメでしたとかいわれて」殴ってやりたくなるからな〜
レスつきにくいぞ
とりあえず jcode.pl でも使っとけ
0625nobodyさん
2005/11/23(水) 22:48:30ID:???0626nobodyさん
2005/11/23(水) 23:04:32ID:???携帯?
0628623
2005/11/23(水) 23:46:19ID:???>>625
>>626
>>627
みなさんアドバイスありがとうございます。
携帯からの入出力を想定しているためこのような仕様で書きたいと思いました。
Perl5.8Unicodeメモのページを読み、記載されてあった
簡単なところから
まず、
use encoding "euc-jp";
print "こんにちわ\n";
としてDOSで実行してみたのですが
「、ウ、、ヒ、チ、・」
と表示されてしまいます。
自分なりに
use encoding "euc-jp";
use Encode qw/ encode decode /;
use Encode qw(from_to);
print from_to("あああ", "shift_jis", "euc-jp");
ともしてみたのですが、
Wide character in subroutine entry at C:/Perl/lib/Encode.pm line 186.
と出てしまいます。
おそらくこれはutf8フラグを切り落としていないからだと
思いますが、euc-jpでソースを書いて出力する際には
一つ一つ文字コードを変換していかないといけないのでしょうか?
0629nobodyさん
2005/11/24(木) 00:02:56ID:???> 「、ウ、、ヒ、チ、・」 と表示されてしまいます。
君が自分で EUC-JP の文字列を Shift_JIS のコンソールへ
出力しているのだから化けて当然。
http://www.kt.rim.or.jp/~kbk/perl-5.8/encoding.html
> 自分なりに(略)ともしてみたのですが、
from_to() の使い方を間違えている。
http://www.kt.rim.or.jp/~kbk/perl-5.8/encode.html
0630nobodyさん
2005/11/24(木) 00:46:53ID:???>>623に書かれている
> use encoding 'euc-jp', STDOUT=>'shift_jis';
これでだめなん?
0631nobodyさん
2005/11/24(木) 04:22:56ID:QV+2W1Ju&sub1;
sub sub1{$hogeをさらに加工;&sub2;return}
sub sub2{$hogeをさらにさらに加工;return}
というようなことをしたいんですが、sub2になるとせっかく加工した$hogeが初期化されてしまってるようなんですが、どう対処すればいいでしょうか?
0632nobodyさん
2005/11/24(木) 04:35:08ID:???my宣言でもしてない限り、その書き方なら$hogeは初期化されないけど。
何か間違ってない? つかuse strictやれと小一時間(ry
0633nobodyさん
2005/11/24(木) 04:57:27ID:QV+2W1Juよく見てみたら意味もわからずmy宣言してました。
これをとったらうまくうごきました。
これからも御鞭撻のほど宜しくお願いします。
0634nobodyさん
2005/11/24(木) 09:21:02ID:???グローバルの$hogeをそのまま複数のサブルーチンからいじるのは一般的にいうとあまり行儀のいい
プログラムではないな。変な癖をつけると大きいプログラム書くようになると苦労するよ。
0635nobodyさん
2005/11/24(木) 10:41:05ID:???0636nobodyさん
2005/11/24(木) 11:40:57ID:???0637nobodyさん
2005/11/24(木) 20:39:28ID:???0638nobodyさん
2005/11/24(木) 21:50:23ID:EJIyCJlG0639nobodyさん
2005/11/24(木) 22:02:42ID:???0640nobodyさん
2005/11/25(金) 00:36:53ID:???0641nobodyさん
2005/11/25(金) 06:48:37ID:s5kWftCOmy %data = check('hoge');
if(%data) {print "OK";} else {print "NG";}
exit;
sub check
{
my ($text)=@_;
if($text ne 'hoge') {my %data={'text'=>$text}; return %data;}
return undef;
}
2行目の位置で正常なハッシュ返ってくればエラーが出ないのですが、
undefが返ってくると「Odd number of elements in hash assignment」と
出てしまいます。
こういう、正常ならハッシュ値、異常ならundefみたいな事をしたい
場合には、どういう感じでコーディングすれば良いのでしょうか?
0643nobodyさん
2005/11/25(金) 07:18:43ID:???ありがとうございます。
それでやってみたのですが、やはり
「Odd number of elements in hash assignment」と
出てしまいます。
「return undef;」の所を「my %data; return %data」にしたら
エラーが出なくなったのですが、なんか書き方が
すっきりしないような気もします…。
0644nobodyさん
2005/11/25(金) 07:22:13ID:???'or'と'||'で違うんですね。勉強になりました。
0646641
2005/11/25(金) 07:57:32ID:s5kWftCO正常なハッシュ値が返ってきた時に
「Odd number of elements in hash assignment」と
出てしまいます。
もう、何が何だかわからなくなってきました…onz
0647ヽ(´ー`)ノ ◆.ogCuANUcE
2005/11/25(金) 08:25:17ID:???理解を深めた方がいいかもしれない。
my %data={'text'=>$text};
↓ こう
my %data=('text'=>$text);
return undef;
↓ こう
return ();
0648nobodyさん
2005/11/25(金) 08:35:56ID:???>return undef;
>↓ こう
>return ();
これで解決しました。
>my %data={'text'=>$text};
>↓ こう
>my %data=('text'=>$text);
これについては、最初は()の方で書いていたのですが
http://pc8.2ch.net/test/read.cgi/tech/1131286411/223
ここで、正しくは{}と掲示されたのですが…。
どちらにしても、リストやハッシュについて、理解を深めようと思います。
ありがとうございました。
0649nobodyさん
2005/11/25(金) 11:39:19ID:???http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.html
0651nobodyさん
2005/11/25(金) 15:44:43ID:63zT9z2i半角英数字、英字は大文字、小文字も含めて
10桁の乱数を生成しようと思い以下のプログラムを書いてみたのですが
数字の乱数しか生成出来ません、どこを直したらいいでしょうか、ご指摘お願いします。@array = (0..9,'A'..'Z','a'..'z');
foreach (1..10) {
my $bar = (rand scalar(@array));
print qq|"$bar"\n|;
}
0652nobodyさん
2005/11/25(金) 15:46:10ID:63zT9z2i@array = (0..9,'A'..'Z','a'..'z');
foreach (1..10) {
my $bar = (rand scalar(@array));
print qq|"$bar"\n|;
}
ご勘弁です
0653nobodyさん
2005/11/25(金) 15:56:15ID:???↑ ↑
scalar(@array)の戻り値は@arrayの要素数
randの引数にそれを渡してるんだから、当然数値しか戻ってこない罠
0654ヽ(´ー`)ノ ◆.ogCuANUcE
2005/11/25(金) 15:56:26ID:???+ my $bar = $array[rand scalar(@array)];
0655nobodyさん
2005/11/25(金) 16:24:41ID:???0656nobodyさん
2005/11/25(金) 16:35:51ID:1cmYWuzn「〜」が「?」になるんですが何とかならないでしょうか
0657nobodyさん
2005/11/25(金) 16:39:31ID:???あなたが無知なだけですね
0659nobodyさん
2005/11/25(金) 16:54:46ID:???652です
デキマスタ、ありがとう
0660nobodyさん
2005/11/25(金) 17:26:20ID:???この辺の絡みなので個別対処。
http://www.opengroup.or.jp/jvc/cde/ucs-conv.html
>>658
じゃあ scalar も外せよ、半端君。
0662nobodyさん
2005/11/25(金) 18:10:22ID:1cmYWuzn有難うございますー
これを参考になんとかやってみますです。
0663nobodyさん
2005/11/25(金) 18:15:31ID:???>>647
>return undef;
>↓ こう
>return ();
つまり return; だよね
search.cpan.org: Perl::Critic::Policy::Subroutines::ProhibitExplicitReturnUndef
http://search.cpan.org/~thaljef/Perl-Critic-0.13/lib/Perl/Critic/Policy/Subroutines/ProhibitExplicitReturnUndef.pm
0664nobodyさん
2005/11/25(金) 18:45:52ID:???スクリプトが速くなったりするんでしょうか
0665nobodyさん
2005/11/25(金) 18:51:59ID:ykRqgxjmasciiファイルに\r\nが含まれることはあっても
バイナリファイルに\rのない\nが含まれていることはありえない、
と考えてバイナリファイルを選別していくやり方は問題ありますか?
0666age
2005/11/25(金) 18:55:49ID:PaUDYDn8バイナリーファイルは何でもありだからだめだよ
0667nobodyさん
2005/11/25(金) 19:09:11ID:???http://perldoc.jp/docs/perl/5.8.0/strict.pod
http://perldoc.jp/docs/perl/5.8.0/perlstyle.pod
0668nobodyさん
2005/11/25(金) 19:18:35ID:???> バイナリファイルに\rのない\nが含まれていることはありえない、
扱うバイナリファイルがその前提なら、
その方法でもいいと思うよ。
0669nobodyさん
2005/11/25(金) 19:49:39ID:???0670nobodyさん
2005/11/25(金) 19:54:43ID:???0671nobodyさん
2005/11/25(金) 19:55:27ID:???0672nobodyさん
2005/11/25(金) 20:19:10ID:???0673nobodyさん
2005/11/25(金) 20:21:34ID:???0674nobodyさん
2005/11/25(金) 20:51:44ID:???自前でチェックするならx00のあり/なしだな。手抜きの場合は。
0675nobodyさん
2005/11/25(金) 20:55:26ID:???使用者感想
use strictで肩こりが解消しました。(茨城県 I.・Y様)
もうuse strict無しではコーヒーは飲めません。(北海道 H・N様)
use strictのお陰で宝くじが当り、彼女もできました。(東京都 A・J様)
0676nobodyさん
2005/11/25(金) 21:22:52ID:???>>675みたいなおちゃらけじゃなくマジレス
use strictでkentの呪縛から逃れることが出来ますた。(京都府 M・N)
0677nobodyさん
2005/11/25(金) 21:31:13ID:???答え)use strict;の一文を削除してからどうぞ。
0679nobodyさん
2005/11/25(金) 21:41:37ID:???0680nobodyさん
2005/11/25(金) 21:47:22ID:???0681nobodyさん
2005/11/25(金) 21:48:38ID:???0682nobodyさん
2005/11/26(土) 00:24:41ID:???use strictを使う理由は、use strict 'vars';が一番大きいかな。
完全に修飾されてない、宣言の無い変数を使うとエラーになる。
つまり、タイプミスなどで間違った変数名を使うとエラーで教えてくれる。
0683nobodyさん
2005/11/26(土) 02:02:52ID:???0684nobodyさん
2005/11/26(土) 02:32:09ID:???スタイルを強制するわけじゃないからね。
0686nobodyさん
2005/11/26(土) 09:02:53ID:???例えば、上のほうに設定系の変数をわかりやすくまとめておいて、ここまでが
設定ですよ〜、、、みたいな。。
0687nobodyさん
2005/11/26(土) 09:07:23ID:???0688ゆーき
2005/11/26(土) 09:27:08ID:yGTXOsFBprint "Location: mailto:aaa\@aaa.com?subject=件名\&body=1行目%0D%0A2行目\n\n";
「%0D%0A」を入れてみましたがだめでした。文字コードや、URLエンコード関係が原因なんでしょうか???
ちなみにPERLのスクリプト自体はShift-jisで書いています。
0689愛とゆーきだけが友達さ
2005/11/26(土) 09:33:48ID:???bodyなんてメーラー依存度が高いわけだし。。
0690ゆーき
2005/11/26(土) 09:42:03ID:yGTXOsFB0692ゆーき
2005/11/26(土) 11:51:53ID:yGTXOsFBそれも、最終手段としては考えていますが、
ユーザのひと手間が増えますので、なるべく他の方法を使いたいと思っているのですが...
0693nobodyさん
2005/11/26(土) 12:00:07ID:???Outlook を使ってない人、プレビューしたく無い人もいるわけだけど、
そういう人の手間が増えたり、ウザいと感じるのはいいわけ?
0695ゆーき
2005/11/26(土) 12:29:09ID:yGTXOsFB今回は、1人のクライアント専用に作っていまして、こちらの要望なんです。
0696ゆーき
2005/11/26(土) 12:49:51ID:yGTXOsFBprint "Location: mailto:aaa\@aaa.com?subject=件名\&body=1行目\%0D\%0A2行目\n\n";
としてみましたが、だめでした。
0697nobodyさん
2005/11/26(土) 13:18:09ID:???<meta http-equiv="refresh" content="0; url=mailto:aaa@aaa.com?subject=件名&body=1行目%0d%0a21行目">
</head>
HTMLタグで飛ばしてやるのはだめなの?
0698nobodyさん
2005/11/26(土) 13:49:44ID:???0699ゆーき
2005/11/26(土) 13:51:51ID:yGTXOsFB完璧です!!!(^^)!
上手くいきました!ありがとうございましたm(_ _)m。
とても丁寧にアドバイス頂きまして、本当にありがとうございました。
おかげさまでクライアントにも顔がたちます。感謝!感謝!感謝!感謝!感謝!
0700289
2005/11/26(土) 14:52:54ID:EqqUKm3R連想配列をファイルやDBのカラムに保存したいのですが、
可能でしょうか?
可能であれば方法をご教授お願いいたします。
0701nobodyさん
2005/11/26(土) 15:26:01ID:???もちろん可能だけどどのあたりがわからないの?
連想配列にどんなキーがあるのか知る方法がわからないとか→keys, each
ファイルへの記録方法がわからないとか→open, print, close
PerlからDBを使う方法がわからないとか→http://search.cpan.org/modlist/Database_Interfaces
それを連想配列に戻す方法がわからないとか→それぞれのキーに対して値を代入
0702nobodyさん
2005/11/26(土) 15:35:34ID:???0703nobodyさん
2005/11/26(土) 16:18:41ID:???ハッシュをそのままDBのテーブルにマッピングしたいってこと?
0704nobodyさん
2005/11/26(土) 16:33:28ID:???それならStorableだよな
0705700
2005/11/26(土) 17:02:03ID:EqqUKm3R>>704
そういう事です。説明足りなくてすいません。
普通に連想配列をファイルやカラムにinsertしても
読み取りにに失敗したので(当然)。
Storableとはなんでしょうか?ググってみます。
0706nobodyさん
2005/11/26(土) 20:35:13ID:zmLMleB62chのSETTING.TXTみたいなのです。
2chってどうやってるんだろう・・・。
0707nobodyさん
2005/11/26(土) 20:38:46ID:???と言うか物凄く初歩です
0708nobodyさん
2005/11/26(土) 20:42:51ID:???こんな感じで・・・
open IMAGE, "<:raw", "img.gif";
print "Content-type: image/gif\n\n";
print <IMAGE>;
close IMAGE;
しかしこれを実際にテストしてみると、ブラウザには
画像がシュレッダかけられたみたいなへんてこりんな
画像で、しかも縦の長さが押しつぶされてしまった
感じの画像が表示されます。要は、正しく表示されません。
jpeg画像にしてやってみると、今度はバッテンのアイコンが
でてしまいます。
なぜうまく表示できないのでしょうか?
0709nobodyさん
2005/11/26(土) 20:49:30ID:???0710nobodyさん
2005/11/26(土) 20:51:22ID:???:rawだから違うんじゃね?
0711710
2005/11/26(土) 20:52:06ID:???STDOUTに対してbinmodeか
0713708
2005/11/26(土) 21:19:39ID:???一応raw指定でbinmodeのつもりです。
あと自鯖でやってます。Apache2です。
0714708
2005/11/26(土) 21:29:15ID:???逆にIMAGEに対してはbinmodeにしなくてもいいようですね。
ありがとうございました。
0716nobodyさん
2005/11/26(土) 21:37:16ID:zmLMleB6そんじゃおしえてください
0717nobodyさん
2005/11/26(土) 21:41:42ID:???open(FH, 'SETTING.TXT');
while (<FH>) {
chomp;
my($key, $val) = split(/=/, $_, 2);
$set{$key} = $val;
}
close(FH);
print $set{'BBS_TITLE'};
0719708
2005/11/26(土) 21:47:53ID:???それがですね、読み出し元ファイル(IMAGE)に対してはbinmodeにしなくても
いいようなんです。書き出し先ファイル(STDOUT)に対してはやらねば
ならないようです。
それと、1つサンプルコードを見つけたのですが、これは読み出し元ファイルに
しかbinmodeやってないですね。
http://www.aimix.jp/cgi/syohoimgview.html
この辺があやふやというか・・・。
0720nobodyさん
2005/11/26(土) 21:55:55ID:???0721708
2005/11/26(土) 22:10:24ID:???>>720ということで、結論付けてしまいたい気分です。
やってられんです。
ようはI/O両方バイナリにしとけば確実ってことですね。
0722nobodyさん
2005/11/26(土) 22:10:48ID:???0723720
2005/11/26(土) 22:12:35ID:???ttp://www.sixnine.net/cygwin/translation/cygwin-ug-net/using-textbinary.html
0724715
2005/11/26(土) 22:12:44ID:???・テキストモード入力時の変換:0D 0A → 0A
・テキストモード出力時の変換:0A → 0D 0A
・たまたま画像に0D 0Aが無かった
・サイトが間違ってる # コピペして試してみな
0725708
2005/11/26(土) 22:16:09ID:???画像ファイルに<CR><LF>がなければ、読み込みでは変換されず
しかし<LF>があれば、書き出しで変換されるという寸法ですかね。
0726nobodyさん
2005/11/27(日) 06:03:43ID:PNI5NdX4unless($codeflag){ &error("不正投稿の可能\性があります。リロードして再投稿して下さい。");}
if ($allow_submit && !$letout_ip) {
if (($cc_time - $last_ctime) { &error("アクセスしてから投稿するまでは$noprx_stime秒以上開けて下さい。");}
}
elsif (($cc_time - $last_ctime) { &error("アクセスしてから投稿するまでは$submit_time秒以上開けて下さい。");}
で構文エラーがでます。
Perlのエラー出力は
syntax error at tmp.pl line 749, near ";}"
syntax error at tmp.pl line 751, near "elsif"
tmp.pl had compilation errors.
でした。
ちょっと原因がわからないんで、おしえてください。
0727nobodyさん
2005/11/27(日) 06:22:19ID:???| |(_)(_)l .l | | ,' |│ | | │
l └─‐、 `ー─ ' l レ ,'=コ |└─‐┐ ! `ー─┐ !
| ノ / lゝ-'ゝ、 l l | / 〈
l l ̄ ̄ r─‐ ´ / r─‐´ / ┌─‐┘ ! r─‐´ ヽ
| ! │ , r' l , r' | |│ ,r、 ,!
└‐┘ └─ ' ´ └─ ''´ └───‐' └─ ' ´ `ー'
/\___/ヽ
(.`ヽ(`> 、 /'''''' '''''':::::\
`'<`ゝr'フ\ + |(●), 、(●)、.:| +
⊂コ二Lフ^´ ノ, /⌒) | ,,,ノ(、_, )ヽ、,, .::::|
⊂l二L7_ / -ゝ-')´ .+ | `-=ニ=- ' .::::::| + .
\_ 、__,.イ\ + \ `ニニ´ .:::/ +
(T__ノ Tヽ , -r'⌒! ̄ `":::7ヽ.`- 、 ./| .
ヽ¬. / ノ`ー-、ヘ<ー1´| ヽ | :::::::::::::ト、 \ ( ./ヽ
\l__,./ i l.ヽ! | .| ::::::::::::::l ヽ `7ー.、‐'´ |\-、
_,∩_ _,∩_ _,∩_
(_____)ゝ、 (_____) y (_____)
/ :: :: :: ヽ 〉 /-‐:: ::‐-ヽ / / :: :: :: ヽ
_./ (・ )ll(・ ) ∨ _/ 0) i! 0) ∨ _/ ( ・)i!(・ ) ゙、_
// :: :: ∈ゝ :: ::ヽ // :: ‐-‐ :: ヽ // :: ー一 :: ヽ\
0728nobodyさん
2005/11/27(日) 06:26:12ID:C29mLJPMこちとらエスパーじゃねぇんだ
0729nobodyさん
2005/11/27(日) 06:28:08ID:C29mLJPMelsif (($cc_time - $last_ctime) { &e 〜 以下略
とりあえず文法を学んでみよか?
0730nobodyさん
2005/11/27(日) 07:00:10ID:???0731nobodyさん
2005/11/27(日) 07:59:17ID:???0733nobodyさん
2005/11/27(日) 16:58:11ID:???0734nobodyさん
2005/11/27(日) 17:21:56ID:6lDMwL/xprint "Content-type: text/html; charset=Shift_JIS\n";
print "set-Cookie: $COOKIE_NAME=$value; expires=$date\n\n";
と書いてクッキーを出力しているのですが、画面に
Content-type: text/html; charset=Shift_JIS
の1行が表示されてしまいます。どうしてですか?一応クッキーは作成されています。
0735nobodyさん
2005/11/27(日) 18:01:28ID:???print "set-Cookie: $COOKIE_NAME=$value; expires=$date\n\n";
この2行のあとにさらに Content-type〜 をprintしてるからでしょ。
0739nobodyさん
2005/11/28(月) 17:59:22ID:cDaON9yM秩父
hogehoge 癒し系
松本
↓上のテキストを処理後、下のようにしたい↓
松島
秩父→hogehoge 癒し系
松本
処理の1つ先回りをして、対象の1つ前の行の先頭に「hogehoge」がある場合、対象の列とhogehogeが先頭に存在する列に対して指定の処理するようにしたいのですが、
for my $ii (0..$#text) {
if("hogehoge" eq substr($text[$tn+1],0,8)){
$text1 .= "$text[$ii]→$textall[$ii+1]\n";
$ii++;
}else{$text1 .= "$textall[$ii]\n";}
}
↑のように組んで実行したところ
松島
秩父→hogehoge 癒し系
hogehoge 癒し系
松本
のようになってしまいます。
ループのたびにmyで初期化してしまうため$ii++が無駄になってしまうために起こってると思うのですが、$ii++を生かすようにするには、どのように変えたらよいですか?
0740nobodyさん
2005/11/28(月) 18:14:59ID:???こっちのforループ。
for(my $ii = 0; $ii < @text; $ii++) {
どうでもいいかも知れないけど、
substr()よりindex()使ったほうがスマートに思う。
0741nobodyさん
2005/11/28(月) 18:18:12ID:???その場合、行を無視すると単純になる(sオプションを使う)
松島\n秩父\nhogehoge 癒し系\n松本 が
松島\n秩父→hogehoge 癒し系\n松本 に置換できればいい。
あとn行先読みするときはpush,shiftを一時配列に対して使うのが楽かも。
0743nobodyさん
2005/11/28(月) 18:44:40ID:???my $test =<<"EOT";
松島
秩父
hogehoge 癒し系
松本
EOT
$test =~ s/\n(?=hogehoge)/→/g;
0745743
2005/11/28(月) 18:56:49ID:???0746741
2005/11/28(月) 19:32:34ID:???0747nobodyさん
2005/11/28(月) 20:20:33ID:???知り使うようになりました、今までPOSTやGETメッソッドによる
変数の受け渡しなんか、フォームのデコード処理とか、その逆とか
ゴリゴリ書いていましたが、これを使うようになって
なんとなく、あまりにあっけなくて
( ゜д゜)ポカーン状態なのですが
こんなヌル湯に漬かって漏れは一人前のperl使いに成れるでしょうか?
それと、CGI.pmの弊害とかってありますか?
0748nobodyさん
2005/11/28(月) 20:31:37ID:???わざわざ内部までさぐるのは時間の無駄ですので
その調子でモジュールを使いまくりましょう
0749nobodyさん
2005/11/28(月) 20:33:10ID:???0750747
2005/11/28(月) 20:52:10ID:???ライブラリ使うと確かに内部で何をやってるのか、全く分からないが
良い点としては、コードが少ない!見やすい!読みやすい!ですね
ゴリゴリ時代は自分でプログラム組んでいても3日もすればハァ?ってな
事がたまにありましたが今は逆なのらー、
ライブラリにおまかせする部分はおまかせして
簡単に正規表現による、文字処理とかハッシュによる構造体の変数の受け渡しや
参照の仕方等がスラスラできるように禿げみます。
0751nobodyさん
2005/11/28(月) 20:52:24ID:???使うモジュールは strict, vars, lib ぐらいかな。
0752nobodyさん
2005/11/28(月) 20:52:31ID:???0753nobodyさん
2005/11/28(月) 21:03:26ID:???0754nobodyさん
2005/11/28(月) 21:04:41ID:???無駄にコンパイルする時間を食ってる。
0756nobodyさん
2005/11/28(月) 21:15:18ID:???0757nobodyさん
2005/11/28(月) 21:38:42ID:???0758nobodyさん
2005/11/28(月) 22:22:30ID:???0759nobodyさん
2005/11/28(月) 23:17:50ID:???0760nobodyさん
2005/11/28(月) 23:21:46ID:???0761nobodyさん
2005/11/28(月) 23:33:07ID:jymxeugYテキストエリア(<TEXTAREA></TEXTAREA>)から送信されたテキスト内容を受け取って、
ファイルに書き出す処理を書いてます。
各行に、例えば、<BR>なんてタグをつけて出力しなおしたくて書いているんですが、どうも
意図しない改行がきてしまいます。
こいつはどこからやってきているのか。
あるいは、ここコードこうだろなんて教えていただけないでしょうか。
($buffの取得の時点でおかしい?)
コード:
#$buff取得したマルチラインのテキスト
@s_text = split(/(\r\n|r\|\n)/, $buff, 20);
open(FN, ">new.htm");
foreach $mod_line (@s_text){
$mod_line = "$mod_line" . "<BR>\n";
print FN "$mod_line";
}
元データ:
1行目
2行目
3行目
結果:
1行目<BR>
2行目<BR>
3行目<BR>
↑改行が一個多い。
0762761
2005/11/28(月) 23:38:52ID:jymxeugY出来たファイルの中身をコピペすると、以下のようになります。
コピペするとなんか改行増えてる?とにかく欲しいのは3行のデータなんです。
1行目<BR>
<BR>
2行目<BR>
<BR>
3行目<BR>
0763nobodyさん
2005/11/28(月) 23:41:43ID:???- @s_text = split(/(\r\n|r\|\n)/, $buff, 20);
+ @s_text = split(/\r\n|r\|\n/, $buff, 20);
ではどう?
0764nobodyさん
2005/11/28(月) 23:46:41ID:???http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_2BR
0765nobodyさん
2005/11/28(月) 23:52:08ID:LjPWibfYhttp://www.neet-ch.net/home3.html
0766761-762
2005/11/29(火) 00:25:17ID:???>>764
ありがとう!
>>763
一発で動きました。ただし理解できんかったです…。
括弧のあるなしっていったい…?
良かったらどう違うのか教えていただけたら幸いです。
>>764
勉強になります。
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_2BR
<BR>変換のコードは使えたら使いたいですね。
(自分のコードは
元のテキストの前後に修飾処理する用途で使いますので、
すぐに構文書けません…。)
>ちゅーか、s///の基本の利用方法ですね。
>>こんな書き方あり?
s/\x0A/後方修飾\x0A前方修飾/g;
↓こんなんなっちゃうよな…。
1行目後方修飾
前方修飾2行目後方修飾
前方修飾3行目後方修飾
前方修飾
ちゅーか、いずれにせよ、ありがとう!
0768nobodyさん
2005/11/29(火) 00:39:01ID:???() があれば、マッチしたものが 返されるリストに含まれるのよ。
If the PATTERN contains parentheses, additional list elements
are created from each matching substring in the delimiter.
split(/([,-])/, "1-10,20", 3);
produces the list value
(1, '-', 10, ',', 20)
0770761-762
2005/11/29(火) 00:50:25ID:???細かいとこまでみてもらってありがとう
>>768
な、なにょー!?
そうだったんですか…。
なんかのときに、splitに関する質問をするところでした…。
ちゅーか、split勉強しなおせって言う感じですか。
あるいは、正規表現の項目に書いてありそうですね。
ありがとうございました。
0771761-762
2005/11/29(火) 00:54:53ID:???突っ込みすぎかもしれませんが、
capturingって、
どんなことに使うつもりになったんですか?
また、しばらくperlから離れちゃいそうなので教えてもらいたいのですが。
0772nobodyさん
2005/11/29(火) 01:08:01ID:???どんなことに使うつもりになったって言うと…
splitの中でグルーピングする必要性が出た場合は、
?:をつけてclusteringにするのを忘れないようにしないとな、という話です。
0774nobodyさん
2005/11/29(火) 01:24:46ID:???0775nobodyさん
2005/11/29(火) 01:33:40ID:jT6RPKnvs/¥x0D¥x0A|¥x0D|¥x0A/¥n/g
がおすすめ
0776nobodyさん
2005/11/29(火) 01:41:13ID:???イラッとした
ハ_ハ
('(゚∀゚∩ イラッとした!
ヽ 〈
ヽヽ_)
0778nobodyさん
2005/11/29(火) 10:55:30ID:jT6RPKnvそんなにパフォーマンスに影響しなうのでは?
って思う。
書き込みよりも読み込みの回数のが多いのがほとんどだと思うし…
0779nobodyさん
2005/11/29(火) 12:08:00ID:???ついでに、>>766は改行コード統一それ自体の話をしているわけではないし、
投稿時以外にも膨大なデータで改行コードを統一する必要がある場合もあるだろう。
わざわざ突っかからないで…
0782nobodyさん
2005/11/29(火) 13:54:21ID:skNvEddZs/¥x0D¥x0A/¥n/g;
tr/¥x0D¥x0A/¥n¥n/;
がおすすめ
0783nobodyさん
2005/11/29(火) 14:07:54ID:???('(゚∀゚∩ イラッとした!
ヽ 〈
ヽヽ_)
0784nobodyさん
2005/11/29(火) 14:11:20ID:???イラッとした!
0785nobodyさん
2005/11/29(火) 14:49:06ID:???みたいなメッセージが出ます。
Permission解除するのってconfのどこでしょうか。。
0787nobodyさん
2005/11/29(火) 15:50:53ID:???PerlじゃなくてApacheの質問だね…まあいいや、OptionsにExecCGIを設定
それにしても5.8.2って随分古いものを使ってるな…最新版は5.8.7だぞ
0788nobodyさん
2005/11/29(火) 17:51:42ID:???win2kやwinxp proの時はすんなり言ったんですが。xp homeだと何か
先にインストール必要なものがあったりしますかね。
0789nobodyさん
2005/11/29(火) 17:57:25ID:???0790nobodyさん
2005/11/29(火) 18:26:02ID:???0791nobodyさん
2005/11/29(火) 19:46:51ID:???コマンドプロンプトからはtest.cgi動くんですが・・・うーむ。
apacheの設定であることまでは絞れたけど相変わらず
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, root@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
・・・でadministratorに聞けって俺?
0792nobodyさん
2005/11/29(火) 19:51:28ID:???>this error may be available in the server error log.
って出てるだろーが。
0793nobodyさん
2005/11/29(火) 19:52:03ID:???http://pc8.2ch.net/test/read.cgi/php/1043851302/
0794nobodyさん
2005/11/29(火) 20:13:28ID:???スレ違いっていうか根本的にわかっとらんな。
administrator=管理人なんだからお前さんに決まってるだろうがよ。
で、エラー内容がわからんとこっちも答えようが無い。
エラーログ見るなり use CGI::Carp qw(fatalsToBrowser); 使うなりしてくれ。
0795nobodyさん
2005/11/29(火) 20:34:16ID:???0796nobodyさん
2005/11/29(火) 20:36:20ID:???0797nobodyさん
2005/11/29(火) 20:56:33ID:???http://72.14.203.104/search?q=cache:NDE5CiEokLAJ:pc5.2ch.net/test/read.cgi/mysv/1087514426/101-200+apache2+%E6%8C%87%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%9F%E3%83%91%E3%82%B9%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93&hl=ja
http://72.14.203.104/search?q=cache:-QDvNjZ_4LoJ:sakaguch.com/PastBBS/0034/B0017459.html+apache2+%E6%8C%87%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%9F%E3%83%91%E3%82%B9%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93&hl=ja
こちらのとおり#!perlだけにしたら動きました。でもレンタル鯖にうpするときにいちいち書き換えるの面倒なので引き続き試行錯誤っす。
0798nobodyさん
2005/11/29(火) 21:19:22ID:jT6RPKnvホームページの管理ディレクトリ → d:\www\my_web\
Perl のインストール先 → d:\usr\
こうすれば #!/usr/bin/per って書ける。
借りてるサーバーが /usr/local/bin/per であれば、ローカルでの Perl の
インストール先は /usr/local ってなる。
0799nobodyさん
2005/11/29(火) 21:23:39ID:???0800nobodyさん
2005/11/29(火) 21:24:42ID:jT6RPKnv0801nobodyさん
2005/11/29(火) 22:17:45ID:???/イイイ ヽ三\ヽ\
///イ ___ ヽ トトト
i:|:/ミ -_-__--_−_-_ トト|:i
|:|:|イ へ、 ̄ /ヽ |:|:|
|:|:|| _、 ,.-_、 |:|:|
ト:!:| ヽ´´´ノ ヽ´´´ノ |:|リ
ヽ_|  ̄ ノ 丶 ̄ |_ノ
| \/ (_i i_)\/ |
| | /  ̄ \ | | <売り上げ120億、利益20億ある。どんな弁護士使ってでも潰す!
\ -=^^=- /
ヽ  ̄ ノ
0804nobodyさん
2005/11/30(水) 12:15:39ID:BadrrQNsここはPerlスレだ、ボケ。
0806nobodyさん
2005/11/30(水) 13:27:40ID:???0807nobodyさん
2005/11/30(水) 14:38:09ID:???0808nobodyさん
2005/11/30(水) 14:47:51ID:???0809nobodyさん
2005/11/30(水) 15:33:38ID:???0810nobodyさん
2005/11/30(水) 16:05:54ID:???このふたつの変数を足し算した結果を出力したいのですが、どうすればよいのでしょうか
0811nobodyさん
2005/11/30(水) 16:37:17ID:???0812nobodyさん
2005/11/30(水) 17:27:28ID:BWMdiBVJ0813nobodyさん
2005/11/30(水) 18:47:17ID:???0814nobodyさん
2005/11/30(水) 20:25:37ID:???0815nobodyさん
2005/12/01(木) 00:24:08ID:0lJ9PdU10816nobodyさん
2005/12/01(木) 01:33:14ID:???0817nobodyさん
2005/12/01(木) 03:20:18ID:???0818!omikuji
2005/12/01(木) 04:22:29ID:???0822nobodyさん
2005/12/01(木) 08:22:49ID:???0823!omikuji
2005/12/01(木) 08:23:34ID:???0825nobodyさん
2005/12/01(木) 08:55:48ID:???↑$pugya-
0827!omikuji
2005/12/01(木) 09:09:32ID:???0828nobodyさん
2005/12/01(木) 09:12:14ID:???my ( $hoge1, $hoge2, $hoge3 ) = hogehoge();
とする事はできるのですが
my ( $hoge1, %hoge2, @hoge3 ) = hogehoge();
な感じで違う種類の戻り値を得たい場合は
どのように書けば良いのでしょうか?
0829nobodyさん
2005/12/01(木) 09:31:46ID:???http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq7.html#how_can_i_pass_return_a__function__filehandle__array__hash__method__regex_
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsub.html#Pass_by_Reference
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlref.html
0830828
2005/12/01(木) 10:11:00ID:???つまり、1発で取り出すのは無理で、
リファレンスの配列を作り
my @tmp = hogehoge();
my $hoge1 = $tmp[0];
my %hoge2 = %{$tmp[1]};
my @hoge3 = @{$tmp[2]};
上記のような感じで
取り出せって事で良いですか?
0831nobodyさん
2005/12/01(木) 10:34:52ID:???0832nobodyさん
2005/12/01(木) 11:18:37ID:???それでもいいし、
sub hogehoge {
my($scalar, $array, $hash) = @_;
${$scalar} = 'hoge';
@{$array} = (0..5);
%{$hash} = (foo => 1, bar => 2);
}
hogehoge(\$hoge1, \@hoge2, \%hoge3);
でもいいよ。
0833nobodyさん
2005/12/01(木) 11:40:24ID:6Wvm5Rjxグラフ表示に、GD使ってかいてんですけど、
モニタで見るには、気にならないのですが、
プリントアウトすると、結構荒くてもひとつなんですが。
他に、綺麗にperlでグラフ表示させるのってなんかあります?
0834nobodyさん
2005/12/01(木) 11:52:22ID:???綺麗かどうかは知らんけど、GDを使わないものも色々あるよ。
http://search.cpan.org/search?m=all&q=Graph&s=1&n=100
0835nobodyさん
2005/12/01(木) 12:27:34ID:kcqRAlrr0837nobodyさん
2005/12/01(木) 12:33:39ID:???CGI経由でやらなきゃいけない事か考え直した方がいいと思うけど。
http://search.cpan.org/~gbarr/libnet-1.19/Net/FTP.pm
0839566
2005/12/01(木) 16:30:41ID:???$word = quotemeta("a b c");
print $word;
このようにすると、出力文字列が
a\ b\ c
となってしまいます。
quotemetaは/[A-Za-z_0-9]/にマッチしない全ての文字の前にバックスラッシュをつけるようですが、
$wordに\または.がある場合のみ、この2文字の前にバックスラッシュを入れるということは可能でしょうか。
掲示板のログ検索機能なのですが、
検索対象文字に\を入れるとエラーが出て、
.を入れると全記事がヒットしてしまう状況に悩んでいます。
>>566も併せて参照していただけると有り難いです。
0840nobodyさん
2005/12/01(木) 16:50:23ID:???入力された文字に対してquotemetaを使ったら\が入りまくって意味不明なことになるからNG
0841566
2005/12/01(木) 17:39:55ID:???>>566のソースから
- if ($data[6] =~ /^(?:$ascii|$twoBytes|$threeBytes)*?(?:$words[$_])/) {
+ if ($data[6] =~ /^(?:$ascii|$twoBytes|$threeBytes)*?(?:\Q$words[$_]\E)/) {
こうする事で解決できました。
0842nobodyさん
2005/12/01(木) 21:07:49ID:???.pl から .pl に飛ばしたいと思っています。
Location: test.pl
とやって read( STDIN, $hoge, $ENV{'CONTENT_LENGTH'} );
で、$hoge に情報がくっ付いてくる(&nama=boku)のようにしたいのですが
どのようにすれば出来るのでしょうか?
0843nobodyさん
2005/12/01(木) 21:53:39ID:???$AAAが$BBBという文字列を含んでいるなら・・・
としたいのですがこのままだとエラーがでてしまいます。
どのように修正すればいいのでしょうか?
0844843
2005/12/01(木) 21:57:30ID:???0845nobodyさん
2005/12/01(木) 21:57:44ID:???0846nobodyさん
2005/12/01(木) 21:58:15ID:???Locationで飛ばしてPOST送信にしたいということになるのかな。
それは不可能。POSTで送らないとならない理由があるの?
単に情報を付けたいだけならQUERY_STRINGを使うべし
>>843
if ($AAA =~ /\Q$BBB\E/) {
0848nobodyさん
2005/12/01(木) 23:34:13ID:6Wvm5Rjxうーむ、いろいろとありますな・・・。
今は、時間がないので、チェックできませぬ。
>>836
GD::Graph使ってるんで、
ttp://www.linkclub.or.jp/~ma3ki/webutil/gdgraph/howtograph.html
これぐらいは、できるんだけど、円グラフなんか、印刷すると枠や、ラインがガタガタで、
設定とかあります?
とりあえず、最新バージョンに上げてみましたが、なにもかわらずでした。orz
0849nobodyさん
2005/12/02(金) 00:01:04ID:???ありがとうございます。見た目的に長いURLになっちゃうのが格好悪いな…
って思っちゃったぐらいです。
このたびは大人しく諦めることにします。
0851nobodyさん
2005/12/02(金) 02:01:48ID:lZKmMfsrチェックしたいと考えています。
if($abc =~ /[^a-zA-Z0-9]/){ }
大小英字、数字に関しては上記の様にする事で実現できたのですが
-と_の記号を含めてチェックするには上記にどのように含めて
記述したら良いのでしょうか?
0852nobodyさん
2005/12/02(金) 02:14:27ID:???http://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html#using_character_classes
0853849
2005/12/02(金) 02:43:53ID:???なるほど! Cookieは理解不足にしてもこれならいけそうです Thx!!
0856nobodyさん
2005/12/02(金) 12:41:38ID:zgDZ/Pi8/[^a-zA-Z0-9_\-]/
エスケープしてくだちぃ
0857nobodyさん
2005/12/02(金) 12:52:02ID:???0858nobodyさん
2005/12/02(金) 12:56:28ID:???0859nobodyさん
2005/12/02(金) 13:20:04ID:???0860nobodyさん
2005/12/02(金) 13:28:19ID:???使えるよ
% perl -e '"ab123cd" =~ /([\d]+)/ and print "match: $1\n";'
match: 123
0861nobodyさん
2005/12/02(金) 14:22:38ID:???0862nobodyさん
2005/12/02(金) 14:39:45ID:???> >>851
> http://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html#using_character_classes
> '-'がキャラクタクラスの中の最初か最後のキャラクタであった場合、
> 通常のキャラクタとして扱われます。[-ab]、[ab-]、[a\-b]はすべて等価です。
> \d\s\w\D\S\Wの省略記法はキャラクタクラスの内側でも外側でも使うことができます。
> 以下はその例です:
>
> /\d\d:\d\d:\d\d/; # hh:mm:ss 形式の時間表記にマッチ
> /[\d\s]/; # 数字または空白にマッチ
0864nobodyさん
2005/12/02(金) 15:38:16ID:???# 例えば、aだけにマッチなら
/^a+$/ または !/[^a]/
0865nobodyさん
2005/12/02(金) 16:09:40ID:???0866nobodyさん
2005/12/02(金) 16:49:33ID:???my $count = 2000000;
my %codes = ();
my $wt = 'omaemona-itteyosijisakjen_07211919童貞';
$codes{'code1'} = q{
1 if /[^a-zA-Z0-9_-]/;
};
$codes{'code2'} = q{
1 if /[^a-zA-Z0-9_\-]/;
};
$codes{'code3'} = q{
1 if /[^\da-zA-Z-]/;
};
$codes{'code4'} = q{
1 if /[^\w-]/;
};
timethese($count,\%codes);
結果:激しくバラバラ
0867JAPU ◆lVJAPUTeX.
2005/12/02(金) 18:21:04ID:???\w はロカールを考慮する (場合がある) という話があったなぁ。sage
0868nobodyさん
2005/12/02(金) 18:46:19ID:McNady6M$hoge =~s/hoge/
条件1 ? 式 a : 式 b ;
条件2 ? 式 c : 式 c ; /e
うまく実行されないみたいなんですが。。
0869JAPU ◆lVJAPUTeX.
2005/12/02(金) 18:58:26ID:b5HKaxNaこういうことをやりたいのかな?
$hoge = "creamy fancy magical";
$hoge =~ s{(\w+)}{
if($1 eq "creamy") { "mami" }
elsif($1 eq "magical") { "emi" }
else { "unknown" }
}ge;
0870nobodyさん
2005/12/02(金) 19:20:52ID:McNady6M$iの先頭に'う'が含まれてたら
$hoge1、ふくまれてなかったら$hoge2を、
$tmpに代入して、$hogeを書換したいんです。
でも、$iがなんであろうと、$hoge1のほうが代入されてしまうんです。
どうすればいいんでしょうか。
$uaaaa = ~s/うあああああああ/
$i = ~m!^う! ?
$tmp=$hoge1 : $tmp =$hoge2;
$tmp
/e;
0871nobodyさん
2005/12/02(金) 19:23:07ID:???すみません。
0872JAPU ◆lVJAPUTeX.
2005/12/02(金) 19:34:04ID:???とりあえず気づいた点を指摘。
$foo =~ s/regex/replacement/;
$foo = ~s/regex/replacement/;
この2つは異なる (空白の位置に注意) けどそれは大丈夫かな?
後者は
$foo = (~s/regex/replacement/);
と介錯されるので,99.99%くらいの確率で意図しているものとは違うと思う。
参考演算子は
$var = ($foo eq "bar")? $baz: $zot;
みたいな形に書いたほうがわかりやすいとおもう。
- 実際に実行したコード (それ単体で完結したもの)
- やりたいこと
- 意図した結果/実際の結果
を書けば暇な人が答えるかも。
0874nobodyさん
2005/12/02(金) 22:12:22ID:???0875JAPU ◆lVJAPUTeX.
2005/12/02(金) 23:07:32ID:???【変数の役割】
素直にそのまま解釈すると,
$uaaaa ... 書き換えの対象
$i ... この先頭に "う" が含まれているかどうか (*) で処理を分ける
$hoge1 .., (*) が真 (成り立った) の場合置換する文字列
$hoge2 ... (*) が偽 (成り立たない) の場合に置換する文字列
でいいのかな?
【コード】
$uaaaa = "ふえいとうあああああああもえもえ";
$i = "うる星やつら";
$hoge1 = "せいばー";
$hoge2 = "とおさかりん";
$uaaaa =~ s{うあああああああ}{ ($i =~ /^う/)? $hoge1: $hoge2; }e;
print "$uaaaa\n";
>>873
本物です。:)
http://www.japu.org/ (近況更新しておきました。)
0876nobodyさん
2005/12/02(金) 23:55:46ID:???http://www.japu.org/about_japu.html の掲示板が潰れているよ。
0877nobodyさん
2005/12/03(土) 00:22:10ID:???0878nobodyさん
2005/12/03(土) 01:09:43ID:???0879nobodyさん
2005/12/03(土) 01:10:08ID:IjoTBsN+0880nobodyさん
2005/12/03(土) 08:04:29ID:9ILkhYC5三項演算子というのがよくわかってないのかも。
/で始まるパスの前には'http://yahoo.co.jp'をくっつけるようにして、
それ以外で始まるパス(../とか)の前には'http://yahoo.co.jp/mail/tegami/letter/'というURLをくっつけるようにしたいんです。
以下の方法だと、パスがなんであろうと後者のほうがくっついてしまうようなんですが、三項演算子の部分、どこが間違ってるんでしょうか。
(これを置換の式に組みこみたかったんです)
#!/usr/bin/perl
print "Content-type: text/html\n\n";
#パス名を /hoge.jpg に設定
$path='/hoge.jpg';
$host="http://yahoo.co.jp";
$directory="http://yahoo.co.jp/mail/tegami/letter/";
#問題の三項演算子
$path=~m/^\// ? $tmp=$host : $tmp=$directory;
# URLにして表示
print $tmp.$path;
exit;
結果
http://yahoo.co.jp/mail/tegami/letter//hoge.jpg
0881nobodyさん
2005/12/03(土) 08:08:54ID:9ILkhYC5三項演算子というのがよくわかってないのかも。
/で始まるパスの前には'http://yahoo.co.jp'をくっつけるようにして、
それ以外で始まるパス(../とか)の前には'http://yahoo.co.jp/mail/tegami/letter/'というURLをくっつけるようにしたいんです。
以下の方法だと、パスがなんであろうと後者のほうがくっついてしまうようなんですが、三項演算子の部分、どこが間違ってるんでしょうか。
(これを置換の式に組みこみたかったんです)
#!/usr/bin/perl
print "Content-type: text/html\n\n";
#パス名を /hoge.jpg に設定
$path='/hoge.jpg';
$host="http://yahoo.co.jp";
$directory="http://yahoo.co.jp/mail/tegami/letter/";
#問題の三項演算子
$path=~m/^\// ? $tmp=$host : $tmp=$directory;
# URLにして表示
print $tmp.$path;
exit;
結果
http://yahoo.co.jp/mail/tegami/letter//hoge.jpg
0882880
2005/12/03(土) 08:14:38ID:???>>872をよく見て、
$tmp=($path=~m/^\//) ? $host : $directory
と書き直したらちゃんと動作しました。
ただの見た目の問題かと思っていたら、
こういうふうに書かなければ動かないんですね。
ありがとうございました。
0883JAPU ◆lVJAPUTeX.
2005/12/03(土) 09:11:41ID:???または
$tmp = ($path =~ m/^\//)? $host: $directory;
三項演算子として使うなら後者が一般的。前者の書き方をしたければ if/else を使うほうが良いと思う。
>>881 のコードが動かないのは,
$path =~ m/^\//? $tmp = $host: $tmp = $directory;
は演算子の優先順位の関係で
($path =~ m/^\//? $tmp = $host: $tmp) = $directory;
と解釈されてしまうので,条件によらず最終的に $directory が代入されてしまうため。
ちょっと説明不足でしたね。
0884nobodyさん
2005/12/03(土) 10:49:25ID:H4lHBq9R$str = q{<span id="hoge">あいうえお</span>あいうえお</span>}
最初のあいうえおだけマッチする正規表現はどう書けばいいのでしょうか?
$str =~ /???/;
0886nobodyさん
2005/12/03(土) 11:17:02ID:H4lHBq9R0887nobodyさん
2005/12/03(土) 23:13:08ID:???Perl関係ないけど言っておこう。
<span>...</span>タグはインライン要素なので、ホントは入れ子にできない。
lattice(で合ってたっけ?)にもできない。
× <span>foo<span>bar</span>hoge</span>
入れ子にできるのはブロック要素。
0888nobodyさん
2005/12/03(土) 23:30:02ID:???こらこら、適当なことを言うな。span要素は入れ子にできる。
ttp://www.w3.org/TR/html401/struct/global.html#edef-SPAN
というか所謂インライン要素はXMLで言うところのmixed contentなんだから、
文字データと共に自由に混交できる (他にスキーマで制約されていなければ)。
0889nobodyさん
2005/12/03(土) 23:37:38ID:9N6MOM3Z配列には
@NEW[0]='a,3,C';
@NEW[1]='c,1,B';
@NEW[2]='b,2,A';
のように納まってます。
@NEW[0]='c,1,B';
@NEW[1]='b,2,A';
@NEW[2]='a,3,C';
結果はこのように数字部分をソートする方法を考えてます。
foreach my $data ( @NEW ) {
($youso1,$youso2,$youso3) = split (/\,/,$data);
$xx[$data] = $youso2;
}
%yy = sort values (%xx);
@NEW = keys %xx;
このようなものを考えたのですがうまく動きません・・・
お知恵をください・・・
0890889
2005/12/03(土) 23:38:52ID:???○ %xx = 〜 です
ageてすみません ○| ̄|_
0891nobodyさん
2005/12/04(日) 00:09:50ID:???まず @NEW[0]='a,3,C'; は $NEW[0]='a,3,C'; だ。
次に $xx[$data] = $youso2; は配列の添え字部に $data が入ってる。恐らくやりたいのは $xx{$data} だろう。
で、 %yy = sort values (%xx); は値を基準にソートしたつもりだろうが、
valuesを使った時点でキーを含まないリストになってしまうので
このようにする @NEW = sort { $xx{$a} <=> $xx{$b} } keys %xx;
この(889の)方法はハッシュのキーを使うため重複が纏められてしまう。
ついでにハッシュはキーの順番を保持しないので最後に @NEW = keys %xx; こうすると意味が無い。
まあ多少効率は落ちるかも知れないが @NEW = sort { (split',',$a)[1] <=> (split',',$b)[1] } @NEW; の1行でできるんだけどな。
0892nobodyさん
2005/12/04(日) 00:11:41ID:???my @new = ('a,3,C', 'c,1,B', 'b,2,A');
@new = map{ $_->[0] } sort{ $a->[2] <=> $b->[2] } map{ [$_, split(/,/)] } @new;
ハッシュ使うなら
my @new = ('a,3,C', 'c,1,B', 'b,2,A');
my %hash = map{ (split(/,/))[1] => $_ } @new;
my @new = @hash{sort{ $a <=> $b } keys %hash};
0893JAPU ◆lVJAPUTeX.
2005/12/04(日) 00:13:24ID:???まずは,ハッシュ (Perl4まで連想配列と呼ばれていたものは,Perl5でハッシュと呼ばれるようになりました) のキーを指定する方法に誤りがあります。
× $xx[$data] = $youso2;
○ $xx{$data} = $youso2;
前者は (通常の) 配列 @xx の要素にアクセスする際の記法です。
ここで %xx のキーに元データが入っていますので,keys %xx を並べかえればよいということになります。
比較するためのデータはハッシュに値として入っているので,下記の通り記述すれば動くことでしょう。
@ordered = sort { $xx{$a} <=> $xx{$b} } keys %xx;
※ ハッシュ,sort などについては,マニュアルを参照してください。
- http://perldoc.perl.org/
- プログラミングPerl (オライリー)
- Programming (O'Reilly)
----
手段は違いますが,このような処理をする際の定石を示しておきます。
my @ary = ("a,3,C", "c,1,B", "b,2,A");
# @tmp0 = (["a,3,C", 3], ["c,1,B", 1], ["b,2,A", 2]);
my @tmp0 = map { [$_, (split /,/)[1]] } @ary;
# @tmp1 = (["c,1,B", 1], ["b,2,A", 2], ["a,3,C", 3]);
my @tmp1 = sort { $a->[1] <=> $b->[1] } @tmp0;
# @ordered = ("c,1,B", "b,2,A", "a,3,C");
my @ordered = map { $_->[0] } @tmp1;
print "@ordered\n";
----
これを一文にまとまるとこうなります。Schwartzian Transform と呼ばれています。
my @ordered = (map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { [$_, (split /,/)[1]] } @ary);
# 詳細は Effective Perl を読むと良いです。
0894889
2005/12/04(日) 00:34:13ID:???なるほど・・・よくわかりました。ハッシュには順番がないのですね。
Schwartzian Transformで簡単にできたので、これとハッシュについて学んでみます。
ありがとうございました。
0895nobodyさん
2005/12/04(日) 09:41:27ID:???Perl ローケルの一時的な変更の方法を教えてください。
strftime( '%d/%b/%Y', localtime() );
で 01/Oct/2005 みたいな結果を期待したのですが、 01/12月/2005 のような日本語に合わせた結果になって困っています。
それとも素直に月名を配列に入れるのが得策でしょうか?
調べたところ i18n ファイルを変更すべしと書いてあるサイトに多数出会ったのですが、
他のアプリケーションには一切影響を与えたくないため何か別の方法があればお願いします。
0896nobodyさん
2005/12/04(日) 10:39:23ID:???strftime を使わなければいいんじゃね?
sprintf '%02d/%s/%04d', (split /\s+/, localtime)[2,1,4];
0897nobodyさん
2005/12/04(日) 11:30:38ID:???perl Makefile.PL でエラーになります
Note (probably harmless): No library found for -lMagick
Note (probably harmless): No library found for -ldpstk
Note (probably harmless): No library found for -ldps
Note (probably harmless): No library found for -lXext
Note (probably harmless): No library found for -lXt
Note (probably harmless): No library found for -lSM
Note (probably harmless): No library found for -lICE
Note (probably harmless): No library found for -lX11
先に何か入れとく必要があるのでしょうか?
0899nobodyさん
2005/12/04(日) 11:47:37ID:???コンパイルできないんです
0900nobodyさん
2005/12/04(日) 11:49:12ID:???0901nobodyさん
2005/12/04(日) 11:52:27ID:???0902nobodyさん
2005/12/04(日) 11:54:20ID:???0903nobodyさん
2005/12/04(日) 12:01:54ID:???「ImageMagick」は C/C++ で書かれた画像加工ライブラリで、
君が作ろうとしているのは ImageMagick を perl スクリプトから
使う為の Perl モジュールである「PerlMagick」。-lMagick が
見つからんのなら、ImageMagick がインストールされていないか、
ライブラリの在り処を適切に指定していないんだろう。
何にせよスレ違いなんで、続きは以下へ移動してくれ。
Perlモジュールについて
http://pc8.2ch.net/test/read.cgi/php/997829243/
0904nobodyさん
2005/12/04(日) 12:04:22ID:???localeまわりの環境変数(LANGとかLC_ほげとか)をあらかじめ設定してから起動するとか、
POSIXモジュールのsetlocaleじゃだめなの? Fedora Coreは知らんのではずしてるかも
しれんけど。
0905nobodyさん
2005/12/04(日) 18:01:02ID:i00gwMB7sub decode {local($buf,$key,$val);
undef(%in);
if ($ENV{'REQUEST_METHOD'} eq "POST") {
$post_flag=1;
if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("投稿量が大きすぎます"); }
read(STDIN, $buf, $ENV{'CONTENT_LENGTH'});
} else {$post_flag=0;
$buf = $ENV{'QUERY_STRING'};}
foreach ( split(/&/, $buf) ) {
($key, $val) = split(/=/);
$val =~ tr/+/ /;
$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;
掲示板の最大文字数制限をしたくてソースを見ていました。
上の51200をいじれば最大文字数も変更できるのかと思い
50に変えたのですが、500文字の書き込みも普通に投稿できます。
どうすれば、制限することができるのでしょうか。それともここは関係ないのでしょうか。
他にあやしいところは下あたりです。よろしくお願いします。
記事登録
sub regist {local($flag,$oyaChk,@lines,@data,@new,@tmp);
# フォーム入力チェック &formCheck;
# 時間取得 &get_time;
0906nobodyさん
2005/12/04(日) 18:19:15ID:???★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1077525387/
0907nobodyさん
2005/12/04(日) 18:33:59ID:???0908nobodyさん
2005/12/04(日) 18:37:29ID:gXJuNnnYuse 5.008001;
と言う記述があるのですが、これはなんでしょうか?
hogehoge.pmを利用しているファイルを動かすとエラーログに↓が返されています。
Premature end of script headers: hello.cgi
Perl v5.8.1 required--this is only v5.8.0, stopped at /usr/lib/perl5/5.8.0/xxx/xxx/xxx/hogehoge.pm line 3.
BEGIN failed--compilation aborted at /usr/lib/perl5/5.8.0/xxx/xxx/xxx/hogehoge.pm line 3.
0909nobodyさん
2005/12/04(日) 18:39:46ID:???http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_use_Module_VERSION_LIST
0910nobodyさん
2005/12/04(日) 19:08:08ID:5pWPWSDTエエエェェェ(´Д`)ェェェエエエ
0911908
2005/12/04(日) 19:24:42ID:gXJuNnnYありがとうございます。
use 5.008001; と言う記述は、Perlのバージョンが5.8.1以上であれば、
↓のようなエラーは出なくなるのでしょうか?
Premature end of script headers: hello.cgi
Perl v5.8.1 required--this is only v5.8.0, stopped at /usr/lib/perl5/5.8.0/xxx/xxx/xxx/hogehoge.pm line 3.
BEGIN failed--compilation aborted at /usr/lib/perl5/5.8.0/xxx/xxx/xxx/hogehoge.pm line 3.
0914nobodyさん
2005/12/04(日) 20:14:17ID:???http://www.studyinghttp.net/rfc_ja/rfc2616.ja.xhtml.gz#Sec14.13
http://www.nilab.info/docs/cgi/draft-coar-cgi-v11-03-clean-jp.html#6.1.2
CGI: Common Gateway Interface part 13
http://pc8.2ch.net/test/read.cgi/php/1126436361/
0915905
2005/12/04(日) 20:23:41ID:???0916nobodyさん
2005/12/04(日) 20:57:50ID:???0917nobodyさん
2005/12/04(日) 21:24:10ID:???0918nobodyさん
2005/12/04(日) 21:33:34ID:???0920nobodyさん
2005/12/04(日) 22:12:24ID:???0922nobodyさん
2005/12/05(月) 03:13:45ID:???まぁ放置が一番だけど。
0923nobodyさん
2005/12/05(月) 08:37:30ID:???0924nobodyさん
2005/12/05(月) 09:32:44ID:???0925nobodyさん
2005/12/05(月) 15:03:00ID:S1tZNUNq0926nobodyさん
2005/12/05(月) 15:05:05ID:S1tZNUNqPerl v5.8.1 required--this is only v5.8.0, stopped at /usr/lib/perl5/5.8.0/xxx/xxx/xxx/hogehoge.pm line 3.
英文を見る限りこのエラーは、perl5.8.1以前だと出るのだと思う。
0927nobodyさん
2005/12/06(火) 22:00:39ID:???indexで[0-9]を探して、返してきた値が0、つまり文字のはじめだったらエラーを返そうとしたのですが
indexから返される値がどうもおかしいようで、うまくいきませんでした。
どのようにしたらうまくいくのでしょうか?どなたか教えてください。
0928nobodyさん
2005/12/06(火) 22:05:56ID:???0930nobodyさん
2005/12/07(水) 12:18:20ID:7UCC6Dk6HTMLを出力させる際に
print "(ここにHTMLソース)"
ってかんじでやっていて、HTMLソースの中で変数を表示する際に
普通に $TOTAL とかで数字の変数はうまく、そこに表示されますが、
文字列($TOTALTEXT='あなたの合計点は低いです。')は $TOTALTEXT
と記述しただけでは、うまく表示されません。
どなたか分かる方いませんか?
0932nobodyさん
2005/12/07(水) 12:39:51ID:???0934えすぱ
2005/12/07(水) 14:16:24ID:???Shift_JISではなくEUCでやりなされ。
0935930
2005/12/07(水) 14:25:17ID:7UCC6Dk62:print "(ここにHTMLソース、そしてこの中で$TOTALTEXTの文字列を表示したい)"
3:結果として、HTMLは出力されますが、$TOTALTEXTの内容は表示されません。
どうでしょうか
0936nobodyさん
2005/12/07(水) 14:27:05ID:???実際のコード貼ってみろ
0937930
2005/12/07(水) 14:32:23ID:7UCC6Dk6$ALLTOTALTEXT='テスト'
#HTML出力
print "Content-type: text/html; charset=Shift_JIS\n\n";
print "<html>\n<head>\n";
print "<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=x-sjis\">\n";
print "</head><body>「$ALLTOTALTEXT」</body><html>";
0938930
2005/12/07(水) 14:33:03ID:7UCC6Dk60939nobodyさん
2005/12/07(水) 14:42:24ID:???0941930
2005/12/07(水) 14:48:14ID:7UCC6Dk6えっ?まじ?
>>940
print "Content-type: text/html; charset=Shift_JIS\n\n";
のShift_JISのとこを変えればいいのかな
0942930
2005/12/07(水) 14:52:26ID:7UCC6Dk60943nobodyさん
2005/12/07(水) 14:53:44ID:???$ALLTOTALTEXT='テスト' の末尾に ; が抜けているし
突っ込み処満載だが、; さえ入れればそれで問題ない。
>>941
Shift_JIS や x-sjis を変更した上で、ファイル自体も
EUC-JP で保存。
http://www.din.or.jp/~ohzaki/perl.htm#JP_EUC_JP
まぁ盲目的に EUC-JP にすれば OK という事ではなくて、
EUC-JP の方が問題が起きにくいってだけだけどな。
同じ変えるなら UTF-8 にした方がいいし、携帯コンテンツ
だと Shift_JIS しか使えないって事もあるだろうし。
0944930
2005/12/07(水) 14:57:06ID:7UCC6Dk6指摘ありがとう。;はただの記述ミスです。
JCODEいれてるんですが、これでは駄目なのかな?
携帯コンテンツではなく、PCオンリーなんですが
おすすめはShift_JIS?
0945nobodyさん
2005/12/07(水) 15:04:14ID:???>943が貼ってくれたリンク先をよく読め
0946930
2005/12/07(水) 15:09:57ID:7UCC6Dk6メールも自動生成して出力してるんですが、
メールのほうではちゃんと出力されるのが謎なんですよね
0947930
2005/12/07(水) 15:22:01ID:7UCC6Dk60948nobodyさん
2005/12/07(水) 15:25:45ID:???0949nobodyさん
2005/12/07(水) 16:54:51ID:???0950nobodyさん
2005/12/07(水) 17:21:10ID:qBdfvq/C話はそれからだ。
0951分かりません!
2005/12/08(木) 00:23:26ID:zq2aWK4E調べたけどよくわからなかったんで質問させてください。
やりたいことはperlとDBを使用したアプリ作成です。DBはmysql、mdb
どちらかで考えています。
現在の環境
os:windowsXp
webサーバ:Apache
1:DBの配置場所が分かりません。どこのディレクトリに配置して
どのような呼び出し方をするのでしょうか。(DBIでデータソース
を指定するところ)
2:実際インターネットにのっけたとき、サーバはunixになると思うんですが
そのときのDBの配置場所を教えてください。また、webサーバによって
dbの配置場所、接続方法は変わるんでしょうか?
0953nobodyさん
2005/12/08(木) 00:54:51ID:???メモリ上、又はファイル
0954nobodyさん
2005/12/08(木) 01:00:14ID:/QVLECMb主な流れは下記の通りです。
push(@dump, "あ,123,,,,,,,,,,,,\n");
push(@dump, "い,456,,,,,,,,,,,,\n");
push(@dump, "う,789,,,,,,,,,,,,\n");
:
:
print "Content-Disposition: attachment; filename=abc.csv\n";
my($sizeTmp);
foreach(@dump){
$sizeTmp .= $_;
}
my($size) = length($sizeTmp);
print "Content-Length: $size\n\n";
print "$downloadCsv";
ダウンロードはできるのですが、
lengthでファイルサイズが正しく取れていない??(おそらく)
それにより、ダウンロードしたCSVファイルを開くと
最後の方が欠けています。
よりよい方法や参考サイト等はございますでしょうか?
ご教授頂けたら幸いです。
0955nobodyさん
2005/12/08(木) 01:06:06ID:???0956954
2005/12/08(木) 01:10:27ID:/QVLECMb申し訳ありません。一部訂正です。
$downloadCsvは下記の様になります。
my($downloadCsv);
foreach(@dump){
$sizeTmp .= $_;
}
my($downloadCsv) = length($sizeTmp);
print "Content-Length: $size\n\n";
print "$downloadCsv";
0957nobodyさん
2005/12/08(木) 01:12:13ID:???数値だけの変なファイルがダウンロードされる気がするんだけど
0958954
2005/12/08(木) 01:14:09ID:/QVLECMb再修正してみましたが、やはりDLしたCSVファイルが欠けてしまいます。
my($downloadCsv);
foreach(@dump){
$downloadCsv .= $_;
}
my($size) = length($downloadCsv);
print "Content-Length: $size\n\n";
print "$downloadCsv";
0959nobodyさん
2005/12/08(木) 01:17:22ID:???全体のソースとか無理かな
0960954
2005/12/08(木) 01:27:44ID:/QVLECMb内容は繰り返し部分を省いた以外はほぼそのままです。
<IN>:$in{data} = abc;(DLファイル名)
my(@dump);
push(@dump, "更新,$y/$m/$d,,,,,\n");
push(@dump, "記録,$hashDay{$in{'data'}}日分,,,,,\n");
push(@dump, ",,,,,,\n");
push(@dump, "更新,$y/$m/$d,,,,,\n");
:
以下繰り返し
:
print "Content-Type: application/octet-stream\n";
print "Content-Disposition: attachment; filename=$in{data}.csv\n";
my($downloadCsv);
foreach(@dump){
$downloadCsv .= $_;
}
my($size) = length($downloadCsv);
print "Content-Length: $size\n\n";
print "$downloadCsv";
exit;
0961nobodyさん
2005/12/08(木) 01:41:13ID:VQhX6rujprintしたときは\x0D\x0Aの2になるとかじゃない?
ちゃんと調べてないけど
何バイト分足りないのか比べて見たら?
0962nobodyさん
2005/12/08(木) 01:44:30ID:???進行状況のバーが無くなるぐらいだし
0963954
2005/12/08(木) 02:00:29ID:/QVLECMbとりあえず、Content-Lengthが無いとローカルでDLできない様なので
付ける方向で行こうと考えています。
DLするCSVのデータ中の改行に\x0D\x0Aを用いる事ができなかったので
下記の様にする事で問題を回避できました。
my($downloadSize);
my($downloadCsv);
foreach(@dump){
my($downloadSizeTmp) = $_;
$downloadSizeTmp=~ s/\n/\x0D\x0A/g;
$downloadSize .= $downloadSizeTmp;
$downloadCsv .= $_;
}
my($size) = length($downloadSize);
print "Content-Length: $size\n\n";
print "$downloadCsv";
0964nobodyさん
2005/12/08(木) 02:05:27ID:???0965954
2005/12/08(木) 02:18:27ID:/QVLECMb\r\nはウィンドウズの改行コードだと思うのですが、
改行コード\nをウィンドウズのローカルにDLすると\r\nに変換されるのでしょうか?
現状では\nでDLしてもContent-Lengthが正しければ正常にDLできています。
0966nobodyさん
2005/12/08(木) 02:20:59ID:???どんなブラウザ使ってるんだ?
0967954
2005/12/08(木) 02:23:59ID:???やはり何度やってもContent-Lengthがないと
Internal Server Errorになります。
0968nobodyさん
2005/12/08(木) 02:25:27ID:???0969nobodyさん
2005/12/08(木) 02:27:15ID:???それ、
>print "Content-Length: $size\n\n";
この行をそのまま消したからだろ
>print "Content-Length: $size\n\n";
を
>print "\n";
に置き換えてみろ
0970954
2005/12/08(木) 02:29:20ID:???ご指摘の通り、現環境ではprint "\n";で問題ありませんでした。
0971954
2005/12/08(木) 02:38:44ID:/QVLECMb\nで処理しているデータは\r\nや\rなどDLする環境向けに
変換する必要があるのでしょうか?
現ローカル環境のWinでDLした際には問題なかったのですが、
その他の環境やMac環境むけにDLさせる場合は
\r等に置換しないと問題となったりする物なのでしょうか?
0972nobodyさん
2005/12/08(木) 07:21:12ID:qoVbfW3Nこういった文字列が合った場合、2個目の abc にマッチさせたい場合の正規表現がわかりません。
行末にあれば abc$ でマッチできるんですが …
0973nobodyさん
2005/12/08(木) 07:38:25ID:???EXCELやある程度の機能があるエディタなんかは各種改行コードに対応しているので問題ない
メモ帳だと\nのファイルは1行で表示されるので問題あり。
0974nobodyさん
2005/12/08(木) 09:19:32ID:???何でもかんでも鵜呑みにせずウラを取ろうな。
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
http://www.studyinghttp.net/rfc_ja/rfc2616.ja.xhtml.gz#Sec2.2
http://www.nilab.info/docs/cgi/draft-coar-cgi-v11-03-clean-jp.html#7.2.1
まともな HTTP サーバならヘッダ部の改行コードに関しては気を利かせて
くれるので "\n" で問題無い。ボディ部、今回の件だと CSV ファイルの
改行コードは >>973 の言う通りで、ファイルを読む人のソフトが特定できる
なら改行コードを合わせて吐いた方が無難。
>>972
my $str = "abcdefgabcdef\n";
for ('abc', 'def') {
$str =~ s/(($_).*?)(\2)/ $1 . uc $3 /e;
print $str;
}
0975nobodyさん
2005/12/08(木) 09:23:44ID:qoVbfW3N0976nobodyさん
2005/12/08(木) 11:18:07ID:???OSXからは \n だからね
0977nobodyさん
2005/12/08(木) 13:24:04ID:???改行コードはどのプラットフォームでも\n。
\r→CR
\n→LF
としないと、意味不明。
0978954
2005/12/08(木) 13:51:47ID:/QVLECMb現状ではDLするのは主にWin環境です。
CSVエクセルファイルであるため、開くソフトはエクセルのみであると
想定出来るためソフト側に改行コードの対応は任せようと思います。
おそらくMacで用いる事はないと思うのですが、
支障があるようであれば改行コードをDL時に選択できるものに変更しようと思います。
0979nobodyさん
2005/12/08(木) 14:31:43ID:???0980nobodyさん
2005/12/08(木) 14:55:26ID:???0981nobodyさん
2005/12/08(木) 15:04:53ID:???0982nobodyさん
2005/12/08(木) 17:02:49ID:qoVbfW3N0983nobodyさん
2005/12/08(木) 18:00:29ID:???0984nobodyさん
2005/12/08(木) 18:27:53ID:???クックブック: http://www.oreilly.co.jp/books/4873112028/
日本語ドキュメント検索: http://www.cpan.jp/search.cgi
Perldoc.com っていつも全然繋がらないんだけど、死んでる?
0985nobodyさん
2005/12/08(木) 18:30:40ID:???>>984 以外に変更した方がいい URL があったら誰かよろしく。
# 俺は立てれなかった…。
0986nobodyさん
2005/12/08(木) 18:53:17ID:???0987nobodyさん
2005/12/08(木) 19:21:50ID:???http://user.ftth100.com/mirrorhenkan/perl/
0988nobodyさん
2005/12/08(木) 22:16:12ID:7Tka8YnIスレ立てに失敗しました。orz・・・
で、質問です。
perl5.8.0を使っていたのですけど、perl5.8.5をインストールしました。
ところが、
# perl -v と打ちますと
This is perl, v5.8.0 と返ってきます。
英語だからとテキトーに読み飛ばしてインストールしたせいだとは思うのですが、
後から、perl5.8.5をデフォルトで使用するにはどのようにしたらよいですか??
0990nobodyさん
2005/12/08(木) 22:47:35ID:???0991988
2005/12/08(木) 23:04:14ID:???http://pc8.2ch.net/test/read.cgi/php/1134049707/
>>989
どこで質問したらいいですかねぇ。
知ってたら、もうちょっと教えてください・・・。
0992nobodyさん
2005/12/08(木) 23:28:57ID:???乙
OSがLinuxならLinux板のくだ質スレ辺りで、経緯を説明して古いほうの
Perlをアンインストールしたいと聞けば良いんじゃないかな。保証は出来ないが…
0994nobodyさん
2005/12/09(金) 00:04:36ID:???ウェブで調べて、とりあえずuse encoding "euc-jp";と、してみたとです。
そしたら、DBテーブルからもってきた文字列だけ、出力時に
〜does not map to euc-jpと怒られるとです。DBもeuc-jpで作ってあるとです。
スクリプト内の日本語や、openで開くファイルは問題なかです。
どこに原因があるとですか。よろしく、おねげーしますだ。
0995nobodyさん
2005/12/09(金) 11:59:04ID:???0996nobodyさん
2005/12/09(金) 12:14:53ID:???そのDBから持ってきて出力時にエラーになる文字列とやらの
中身とutf8フラグの状態を調べるのが基本だと思うが。
0997nobodyさん
2005/12/09(金) 16:30:40ID:???http://pc8.2ch.net/test/read.cgi/php/1134049707/
0998nobodyさん
2005/12/09(金) 16:35:39ID:???0999nobodyさん
2005/12/09(金) 17:18:03ID:???↓
1000nobodyさん
2005/12/09(金) 17:24:52ID:???http://pc8.2ch.net/test/read.cgi/php/1134049707/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。