Perlコーディング初心者質問スレ Part 45
レス数が1000を超えています。これ以上書き込みはできません。
0001988
2005/12/08(木) 22:48:27ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0002988
2005/12/08(木) 22:49:46ID:???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/
0003988
2005/12/08(木) 22:50:11ID:???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
0004988
2005/12/08(木) 22:50:34ID:???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と誤記)
0005988
2005/12/08(木) 22:51:00ID:???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/
0006988
2005/12/08(木) 22:51:24ID:???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/ (前スレ)
0007988
2005/12/08(木) 22:53:25ID:???[プログラミング自体の経験が無い奴はまずココを読め]
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/4873112028/
[オンラインマニュアル] (追加)
最新のドキュメント: 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://www.cpan.jp/search.cgi
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
0008988
2005/12/08(木) 22:54:09ID:???[モジュール]
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/
0009988
2005/12/08(木) 22:54:50ID:???0011nobodyさん
2005/12/09(金) 01:22:40ID:TPUe6z63ActivePerl 5.8.7でTk使ってます。
処理のなかではTkの表示の部分でdecode('cp932',$hoge);としています。
Textヴィジットにユーザーに文字を入力してもらいそれを$txt->getを使って取得した場合、
取得した値のエンコードは何になっていますか?どう扱えばいいですか?
どのshiftjisやutfとか指定してもバグってしまい、何をどうしたらいいのやら・・・
0012nobodyさん
2005/12/09(金) 02:32:35ID:???当てずっぽうで試さず、受け取った文字列の16進ダンプでも
吐かせりゃすぐ分かると思うんだが。
別解: http://www.kt.rim.or.jp/~kbk/perl-5.8/guess.html
0013nobodyさん
2005/12/09(金) 11:55:02ID:???open (F,">list.html");
print F "Content-type: text/html\n\n";
print F "<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>\n";
print F "<head><META http-equiv=Content-Type content=text/html; charset=Shift_JIS><title>aaaaa</title></head>\n";
print F "<body>\n";
print F "<div align=center>\n";
print F "</div>\n";
print F "</body>\n";
print F "</html>\n";
close (F);
とするとうまくいくのですが、
open (F,">/list/list.html");
にするとファイルに書き込んでくれません。パーミッションは両方のlist.htmlともに666です。
どなたかアドバイスお願いします。
/
|
+-- cgi-bin / aaaaaa / aaaaa.cgi
| list.html
|
+-- list / list.html
0014nobodyさん
2005/12/09(金) 12:02:07ID:???ドキュメントルートとサーバールートがあります。
0016nobodyさん
2005/12/09(金) 15:38:16ID:???0017nobodyさん
2005/12/09(金) 15:41:16ID:aD6KYfo9の方がなんとなくわかりやすいな。
チェンジルートしてると必ずしもファイルシステムルートではないのか・・
0019nobodyさん
2005/12/10(土) 00:23:57ID:jGywlXJC数値や文字列用の比較演算子を使うのは何か違いそうな気がしたので。。
0020nobodyさん
2005/12/10(土) 00:30:39ID:???eq
0023nobodyさん
2005/12/10(土) 17:51:34ID:I7IfvFhxぜんっぜん違う
0024nobodyさん
2005/12/10(土) 20:09:08ID:VtAwQeXl<form>〜</form>の間にある<input name="なんとか" value="なんとか">からnameとvalueを抜き出して、
<a href="アドレス?なんとか=なんとか&なんとか=なんとか">ああああ</a>
というリンクを書きくわえたいんですが、さっぱりわかりません。
下のは試してみたソースですが、動きません。
どうすればいいのか、だれか教えてください。
(下のは無視してください)
while ($hoge=~m/((?:<form>)?.*?<form[^>]*?action=('|")?(.*?)(?:\2| )?.*?>.*?<\/form)/is){
$tmp='';$form=$form2=$1;$action=$3;
$form2=~s/(<input[^>]*?name=('|")?(?!submit)(.*?)(?:\2| )?[^>]*?value=('|")?(.*?)(?:\4| )?.*?>)/
($tmp) ? ($tmp.="&".$3."=".$5) : ($tmp=$3."=".$5);$1;/esgi;
$form2=~s/(<\/\s*?form>)/$1<br><a href="$action$tmp">ああああ<\/a>/i;
572 $hoge=~s/$form/$form2/si;
573 }
0025nobodyさん
2005/12/10(土) 20:13:07ID:???すみません
0026nobodyさん
2005/12/10(土) 22:18:36ID:???これで合ってるのか分からんけど。
my $attr = qr/(?:"[^"]+"|'[^']+'|\S+)/;
$hoge =~ s{<form\b([^>]*)>(.*?)</form>} {
my $form = $2;
my $path = $1 =~ /\saction=($attr)/i ? $1 : '/path/to/default';
$path =~ s/^["']|["']\z//g;
my $param = '';
while ($form =~ m|<input ([^>]*?)/?>|gi) {
my($attrs, %attr) = ($1);
($attr{lc $1} = $2) =~ s/^["']|["']\z//g
while $attrs =~ /\s(name|type|value)=($attr)/gi;
($attr{'type'} ||= 'text') =~ /^(?:text|password|checkbox|hidden)\z/i
and $param .= "$attr{'name'}=$attr{'value'};";
}
length $param ? qq|<a href="$path?$param">ああああ</a><br>| : '';
}egis;
以後この手の依頼はこちらへ。
■こんなCGI作ってください■ Part.2
http://pc8.2ch.net/test/read.cgi/php/1133361560/
0029nobodyさん
2005/12/11(日) 14:07:18ID:???0030nobodyさん
2005/12/11(日) 22:24:54ID:Ihn+hQ6U$ua = $ENV{'USER_AGENT'};
@ua = (
'Mozilla','Netscape','Opera','Firefox');
$uaa = @ua;
(ここの処理がわかりません)
USER_AGENTの中に@uaの配列の中のどれかが含まれてたら真、含まれてなかったら偽を返す
if (真のとき)
{
print "あああ";
}
elseif {
print "いいい";
}
0031nobodyさん
2005/12/11(日) 22:45:42ID:???(Here's one way to do it)
if (grep {/$ua/} @ua) {
print "あああ";
} else {
print "いいい";
}
0032nobodyさん
2005/12/11(日) 22:46:14ID:???if($_ eq $ua){
$flag = "1";
last;
}
}
if($flag){
print "あああ";
}else{
print "いいい";
}
0033nobodyさん
2005/12/11(日) 22:51:40ID:???0034未承諾広告※ ◆TWARamEjuA
NGNGprint eval {
for ('Mozilla','Netscape','Opera','Firefox'){
return 'あああ' if /$ua/;
}
return 'いいい'
}
0035未承諾広告※ ◆TWARamEjuA
NGNG0036nobodyさん
2005/12/11(日) 22:54:05ID:???0037nobodyさん
2005/12/11(日) 23:00:30ID:???0038nobodyさん
2005/12/11(日) 23:04:13ID:???http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#how_can_i_tell_whether_a_certain_element_is_contained_in_a_list_or_array
しかし本当にやりたい事は恐らくこうだろう。
my $match = 0;
for (@ua) { $ua =~ /$_/ and $match = 1, last }
if ($match) { ... } else { ... }
>>36
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#how_can_i_count_the_number_of_occurrences_of_a_substring_within_a_string
0039nobodyさん
2005/12/11(日) 23:08:36ID:???HTTP_USER_AGENT
0040nobodyさん
2005/12/11(日) 23:26:41ID:???004130
2005/12/11(日) 23:41:51ID:???HTTP_USER_AGENTの中にかっこが含まれていると真にならないみたいなんです(Mozzila=○、Mozzila 4.0(compatible...)=×)
どうすればよいのでしょうか?(;_;)
0043nobodyさん
2005/12/12(月) 00:00:05ID:???つ「quotemeta」
0044nobodyさん
2005/12/12(月) 00:28:56ID:???grep{ /\Q$ua\E/ } @ua;
これで実装しても、
$ua = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)';
こうなら、
grep { m{\QMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\E} } @ua;
これはマッチしないっしょ。
0045nobodyさん
2005/12/12(月) 09:57:35ID:???こうしないとな。
0046nobodyさん
2005/12/12(月) 19:58:15ID:BQNUAhRM表示するとき、フィルタリングすべき文字は
「&、<、>」とかありますが、それ以外に
フィルタリングが必要な文字はどんなものがありますかね
0047nobodyさん
2005/12/12(月) 20:06:34ID:???http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=GGLD,GGLD:2004-48,GGLD:ja&q=perl+%E3%82%B5%E3%83%8B%E3%82%BF%E3%82%A4%E3%82%BA
0048nobodyさん
2005/12/12(月) 20:15:06ID:???0049nobodyさん
2005/12/12(月) 20:16:30ID:???危ない文字を潰すのではなく安全な文字列だけ取り出すのが基本。
http://www.ipa.go.jp/security/awareness/vendor/programming/a04.html
0050nobodyさん
2005/12/12(月) 20:24:48ID:???SJISでないコードを送りつけたのかどうやったのかは知らないけど。
0051nobodyさん
2005/12/12(月) 21:07:50ID:???Shift_JISの上位1バイトだけを送っても、そのまま表示されていた。
この状態では、次の1バイト分の文字は漢字の下位1バイトとして扱われる。
ここにタグの"<"や">"があるとタグが壊れる。
0052nobodyさん
2005/12/12(月) 21:32:13ID:???0053nobodyさん
2005/12/12(月) 22:25:19ID:???栄ttp://www.yahoo.co.jp/
とか入力すると化けちゃったりとか、結構ある。
0054nobodyさん
2005/12/12(月) 22:26:18ID:???0055nobodyさん
2005/12/12(月) 22:34:31ID:???0056nobodyさん
2005/12/12(月) 22:37:40ID:???一つは通信されるデータ量についてなのですが、
printで表示させたhtml分だけ通信されると考えていいのでしょうか?
つまりCGI内の変数に大量の文字列が入っていてもprintされなければ
通信されないのかということをお聞きしたいのです。
何故こんなことを聞くかというと携帯用に作っているのでパケット代が気になるからなのです。
もしCGI内のソース全てにパケット代が生じるのであれば、データは別ファイルにまとめようと思っています。
サーバーで動くCGIであると考えればhtml分だけだと思うのですが不安です。
もう一つあります。CGIは特別な処理をしなくてもダウンロードされる心配はないと考えていいのでしょうか。
つまり第三者にダウンロードされてソースが見られることがあるのか気になったのです。
分かり辛い質問かもしれませんがよろしくお願いします。
0057nobodyさん
2005/12/12(月) 22:39:12ID:???後者:パスワード等と記したファイルはドキュメントルートより上に置いた方が良い
0058nobodyさん
2005/12/12(月) 23:14:46ID:???ありがとうございます!
人に知られたくないものは上に置きますね。
0059nobodyさん
2005/12/12(月) 23:15:52ID:???速レス頂けたのにお礼の返事が遅れて済みませんでした。
0060nobodyさん
2005/12/13(火) 04:28:32ID:???$hoge->{'bar'}=$moge->{'bar'}と記述してしまって、左辺に
値でなくてリファレンスが入ってしまって泣きそうなんですけど、
例えばすべて$hoge{'bar'}[$i]といった多重配列のフォーマットにして
書き直したほうがいいのでしょうか。
0061nobodyさん
2005/12/13(火) 04:38:08ID:???>>1
1: 自分はこういう事がしたい。
何がやりたいのか書いとくれ。それによって適したやり方があるから
ただ配列をコピーしたいだけなら
@arr1 = @arr2;
でできるし、ディープコピーをしたいならCloneモジュールを薦めるし
0062nobodyさん
2005/12/13(火) 12:59:52ID:???一つ目:
否。クライアントからのリクエストパケットも通信量に含まれるよ。
あと、携帯だと、中継サーバが対象端末用に言語を変換している場合も。
でも基本的なことは >>56 のでOK。
0064nobodyさん
2005/12/13(火) 14:29:33ID:???0066nobodyさん
2005/12/13(火) 14:32:29ID:???006860
2005/12/13(火) 14:50:00ID:???再度出直してきますorz
どうにも強引ですが、内部のリファレンスをコピーしてしまっている
例を挙げます。
$hoge=[{'id'=>'65563','count'=>'11'},{'id'=>'87214','count'=>'14'}];
$moge=[{'id'=>'65563','count'=>'32'},{'id'=>'87214','count'=>'28'}];
@$hoge=@$moge;
$moge->[0]{'count'}=60;
print $hoge->[0]{'count'};
0069nobodyさん
2005/12/13(火) 17:44:46ID:???強引というか、それが普通の挙動で、リファレンスのいいところでもあるのに
ちなみに>60の「多重配列」もリファレンスだからね
0070nobodyさん
2005/12/13(火) 22:31:03ID:???my $cgi = new CGI;
if(param()){
if (param('save')){
print header(-type => "text/html",-charset =>"x-euc-jp" -cookie => param('test'));
}else{
print header(-type => "text/html",-charset =>"x-euc-jp");
}
printDump,start_html('test'),start_form,
"クッキーにデータを保存する",
submit(-name => '保存', -value => 'save');
end_form,end_html;
}else{
printheader(-type => "text/html",-charset =>"x-euc-jp"),
Dump,start_html('test'),start_form,
checkbox(-name => 'test', -value => 'test'),p,
submit,end_form,end_html;
}
0071nobodyさん
2005/12/13(火) 22:34:20ID:???親CGIでsubmitを押すと、子のCGIに親のフォームデータが送られますが、
その子CGIでsubmitを押すと、孫CGIには親のフォームデータが引き継がれません。
子CGIで、親CGIのフォームデータをhiddenfiledなどに入れれば良いのですが、
フォームデータが多い場合は少々煩雑になってしまいます。
何かスマートな方法がありましたら、ご教示願えますでしょうか。
0072nobodyさん
2005/12/13(火) 22:38:04ID:???false print header(-type => "text/html",-charset =>"x-euc-jp" -cookie => param('test'));
true print header(-type => "text/html",-charset =>"x-euc-jp", -cookie => param('test'));
false submit(-name => '保存', -value => 'save');
true submit(-name => 'save', -value => 'save');
以上、よろしくお願いします。
0073nobodyさん
2005/12/13(火) 23:29:21ID:???別スレにて、「」で囲まれた単語を抜き出してカウントするスクリプトの
ソースをいただいたのですが、
http://pc8.2ch.net/test/read.cgi/php/1133361560/116
これを数の多い順にソートするにはどう記述すればよろしいでしょうか?
0074nobodyさん
2005/12/13(火) 23:36:48ID:???元スレで既に回答されているが。
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#how_do_i_sort_a_hash__optionally_by_value_instead_of_key_
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_sort_SUBNAME_LIST
007573
2005/12/14(水) 00:00:59ID:???74さん有難うございます!
0076nobodyさん
2005/12/14(水) 00:34:23ID:???#!/usr/local/bin/perl
use CGI qw/:standard Vars/;
my $charset = 'Shift_JIS'; my %param = Vars;
my($cookie, @form);
if ($param{'save'} eq 'save') { # 孫
$cookie = cookie(-name => 'test', -value => 'test');
@form = ('OK');
} elsif (keys %param) { # 子
@form = (
'Cookie に保存',
map(hidden($_, $param{$_}), keys %param),
submit(-name => 'save', -value => 'save'),
);
} else { # 親
my $name = 'a';
@form = (map(checkbox(-name => $name++, -value => $_), 1..5), submit);
}
print header(-charset => $charset, -cookie => $cookie),
start_html(-title => 'test', -encoding => $charset, -lang => 'ja'),
Dump,
start_form, p(@form), end_form,
end_html;
007776
2005/12/14(水) 00:39:21ID:???http://perldoc.jp/docs/modules/CGI-Session-3.11/Tutorial.pod
http://search.cpan.org/search?query=Session
0079nobodyさん
2005/12/14(水) 01:32:12ID:???おお!早くも神レス大変ありがとうございます。
あまりにもスマート過ぎて、素人な自分には謎の部分(特にVars)が多いのですが、
これから理解して、神コードを取り入れさせていただきます。
Vars はperldocを読んでも今ひとつ理解できなかったのですが、
こんなに便利なものだとは判りませんでした。
繰り返しになりますが、質問に答えていただいてありがとうございました。
0080nobodyさん
2005/12/14(水) 02:03:01ID:???http://search.cpan.org/~lds/CGI.pm-3.15/CGI.pm#FETCHING_THE_PARAMETER_LIST_AS_A_HASH:
0081nobodyさん
2005/12/14(水) 10:29:49ID:???ほとんどの本やwebにあるサンプル等はopenを使ってます。
sysopenのメリットはわかるのですが、デメリットとかあるのでしょうか?
それと何故、サンプル等はopenの方が多く使われてるのでしょうか?
0083nobodyさん
2005/12/14(水) 11:02:06ID:???いちいちフラグ用の定数を用意する必要もないから
openでできることをやる分には楽だよ。
sysopenじゃないと指定できないフラグの組み合わせが
あるからそういうときはsysopen使うけど。
0084nobodyさん
2005/12/14(水) 11:10:22ID:???話した人ってのは、メリットを話した上で勧めたんだろ?
だから、「sysopenのメリットはわかるのですが」と書いてある。
…で、>>81は多くがopenの方が使われてるのを疑問に
思ったんじゃないの?
あと、何故勧めないのか書かないと回答にならんよ。
>>81
漏れは>>83と同じようにフラグ用の定数用意がめんどう。
パイプ等はあまり使わないから、sysopenでも良いんだけどね。
008573
2005/12/14(水) 12:37:52ID:???sort { $b <=> $a }でソートされるのはわかったんですが、
どこに記述すればいいのかわかりません。
21行目に、sort {$b <=> $a} %count と書くと、ソートされた数字のみが表示されてしまいます。
0086nobodyさん
2005/12/14(水) 13:36:36ID:???sysopen()は環境によって使えなかったりするモードがある。
例えばWindows環境ではロック関連が使えないとか。
それを注意していれば特に問題はないよ。
>>85
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_sort_SUBNAME_LIST
> # this sorts the %age hash by value instead of key
> # using an in-line function
> @eldest = sort { $age{$b} <=> $age{$a} } keys %age;
0088nobodyさん
2005/12/14(水) 21:24:43ID:S7xP2RtY全半角英数字・全角日本文字(ひらがな・カタカナ・漢字)以外の文字
が入っているか判定したいのですが、
そのための正規表現を教えてもらえませんか、文字コードはEUCです。
0089nobodyさん
2005/12/14(水) 21:49:35ID:???>8にあるサイトが詳しいので良く読むといいよ
0090本日@挫折90%
2005/12/14(水) 22:43:42ID:SzJP4ieY等勉強したのですが、perlプログラムのサンプルを見たのですが、
まったく桁が違うすごいプログラムでした、このまま本の通りに
覚えていけばいいのか、正直不安になりました、このまま、焦らずに
本書どおりに進めていいのでしょうか?
熟練した方もしいい教材などありましたら、参考におしえてください。
0091本日@挫折95%
2005/12/14(水) 22:45:21ID:SzJP4ieY0092nobodyさん
2005/12/14(水) 22:50:34ID:???バット二三回振って打てねーよとか言われても誰も相手しないよ
0093nobodyさん
2005/12/15(木) 00:33:35ID:???最初から全てを理解できる人が居たら、それは天才。
他人が書いたperlのソースをスラスラ読めるようになったら上級者。
(ピンキリあるし、神レベルのコードはそれはそれで読むのが難しい。)
0094nobodyさん
2005/12/15(木) 01:11:02ID:???文章(コード)中に知らない文法やら単語がいっぱいでてくるところだろうな。
わからないところはとりあえず飛ばせばOKくらいでやらないと
学校の勉強に慣れてきた人間には正直ツラいと思う。
0095nobodyさん
2005/12/15(木) 01:37:31ID:w2M1wJUgopenはパイプ文字による外部プログラブが実行可能です。
「ブラウザで入力した情報をformにて送信して、
その情報のファイル名を表示するなんてCGIを作った場合、
入力文字にパイプを混入されるとセキュリティ上危険(入力文字検査すればOK)」
が理由のアドバイスかもね。
0096nobodyさん
2005/12/15(木) 08:39:34ID:???{
local *FH;
-f $file or die "No such file.\n";
open FH, '<' . $file or die $!;
while (<FH>) { ++$count{$_} for 「 (.*?) 」/g }
close FH;
}
header(-charset => $charset),
start_html(-encoding => $charset, -lang => 'ja'),
table(Tr([ map td([ $_, $count{$_} ]), sort keys %count]) ),
end_html,
文中の単語の数を数えるスクリプトなんですが、
「x回以上出た場合はbgcolorをredにする」という風にしたくて、
if(5<$count{$_}){$bg="orange";}を追加して、
tr部分に{-bgcolor=>$bg}を追加したんですが、上手く変わってくれません。
どなたかご教授お願い致します。
0097nobodyさん
2005/12/15(木) 08:43:28ID:???009896
2005/12/15(木) 08:45:17ID:???CGI.pmっていうのがそもそも何なのか・・・
0100nobodyさん
2005/12/15(木) 09:30:08ID:???いくらPerlでもこんな自由な書き方できないだろ?
0101nobodyさん
2005/12/15(木) 11:20:29ID:???こっちのスレから誘導されてきたやつだ
0102nobodyさん
2005/12/15(木) 12:17:37ID:???{
local *FH;
-f $file or die "No such file.\n";
open FH, '<' . $file or die $!;
while (<FH>) { ++$count{$_} for 「 (.*?) 」/g }
close FH;
}
if(5<$count{$_}){$bg="orange";}
header(-charset => $charset),
start_html(-encoding => $charset, -lang => 'ja'),
table(Tr([ map td({-bgcolor=>$bg},[ $_, $count{$_} ]), sort keys %count]) ),
end_html,
こんな感じで書きました。
>>100
for 「 (.*?) 」/gのほうは問題なく動作してます
0103nobodyさん
2005/12/15(木) 13:38:24ID:???while (<FH>) {...}を抜けた直後は$_はundefになってる筈なので、
そこで
if(5<$count{$_}){$bg="orange";}
などとやっても意味がない。
直し方としては、どれか一つでも5を超えたら全部色をかえたいのか
5を超えたやつだけ色を変えたいのかで違ってくるが、説明が不明瞭
なのでなんともいえんな。
0104nobodyさん
2005/12/15(木) 13:49:29ID:tLuO4r1h$string =~ s/\r//;
$string =~ s/\n//;
という処理をしたら
出力したときに#2#の結果になります。
1行目は確かに文字列から改行が取り除かれていますが、
3、4行目は変わっていません。
すべてに対して改行を取り除く方法ってありますか?
# 1 ####################
お願いします
おねがいします
本当
おねがいします"
########################
# 2 ####################
お願いしますおねがいします
本当
おねがいします
########################
0105nobodyさん
2005/12/15(木) 13:52:52ID:???0106nobodyさん
2005/12/15(木) 13:55:39ID:???0107nobodyさん
2005/12/15(木) 13:59:42ID:???0108nobodyさん
2005/12/15(木) 14:01:43ID:tLuO4r1hできました。
ありがとうございます!!!
0109nobodyさん
2005/12/15(木) 14:10:23ID:???できれば5区切りで色を変えたいと思ってます。
10以上黄色、15以上オレンジ、20以上赤みたいな感じです。
お手数ですがお願いします。
0110nobodyさん
2005/12/15(木) 14:15:52ID:???0112nobodyさん
2005/12/15(木) 14:31:42ID:???わかりました。有難うございました。
0113nobodyさん
2005/12/15(木) 15:19:56ID:tLuO4r1helse {if ($csv) {$csv_data .= '0,';}}
formから渡された「どのようにして」に”インターネット”というキーワードが入っていた
場合、1というデータをCSVファイルに挿入したいんですが、
どうやら、上の記述に間違いがあるみたいです。
記述ミスありますか?
0114nobodyさん
2005/12/15(木) 15:23:56ID:???0115nobodyさん
2005/12/15(木) 15:26:36ID:tLuO4r1h使ってますねwww
どうすればいいのかな?対処方法知ってたら教えてください
0116nobodyさん
2005/12/15(木) 15:29:56ID:???/\Qインターネット\E/
http://perl.misty.ne.jp/meta.html
0117nobodyさん
2005/12/15(木) 15:34:15ID:tLuO4r1hサンクス。 htmlからフォーム渡すとき
この部分だけ valueを 日本語から 数字に変えて渡したら上手くいったよ。
SHIFT JISややこしいね。
0118本日@挫折0%
2005/12/15(木) 18:44:33ID:3wI62WI7今後ともよろしこお願いします。
0119nobodyさん
2005/12/15(木) 21:41:38ID:???0120nobodyさん
2005/12/15(木) 22:02:39ID:???0121nobodyさん
2005/12/15(木) 22:26:35ID:???はいはい、ここまでカット
0122俺の日記@パールちゃん
2005/12/15(木) 23:41:06ID:3wI62WI70123nobodyさん
2005/12/15(木) 23:46:19ID:???=cut
0124nobodyさん
2005/12/16(金) 00:03:04ID:???最強
0125nobodyさん
2005/12/16(金) 01:21:20ID:???0126nobodyさん
2005/12/16(金) 03:05:21ID:???0127nobodyさん
2005/12/16(金) 05:31:09ID:nqW99XKPヒアドキュメント使うとソースが見づらいorz
0129nobodyさん
2005/12/16(金) 18:01:05ID:???0130nobodyさん
2005/12/16(金) 18:09:46ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perltrap.html#C_Traps
0131cbi-cgi/count/dayx.cgi?gif
2005/12/16(金) 19:52:49ID:u8eearJF0132カウンター2日目
2005/12/16(金) 19:58:13ID:u8eearJF.txtに変換
16<>1000<>2000<>3000<>fri<><>
0133nobodyさん
2005/12/16(金) 21:22:32ID:Nkz0ct/3その際リンクを、順番ではなくランダムで表示するようにしたいんです。
それぞれのページで、重複したリンクが表示されないようにしたいのですが、
具体的にどのようにコーディングすれば良いのでしょうか?
0134nobodyさん
2005/12/16(金) 21:26:03ID:???0135nobodyさん
2005/12/16(金) 21:30:13ID:???0136nobodyさん
2005/12/16(金) 21:43:16ID:Nkz0ct/3それをパラメータとしてURLに含めるといった感じの処理でいいんでしょうか?
0137nobodyさん
2005/12/17(土) 00:09:34ID:???それを順番に出力すりゃいいんじゃね?
参考になるかわからんが、こんなんどうよ
@array=();
for ($count = 0; $count < 7; $count++) {
push(@array,$count);
}
&shuffle (\@array);
sub shuffle {
my $array = shift;
my $i;
for ($i = @$array; --$i;) {
my $j = int rand ($i + 1);
next if $i == $j;
@$array[$i, $j] = @$array[$j, $i];
}
}
0140nobodyさん
2005/12/17(土) 18:08:47ID:???2.ページ移動用のスクリプトを用意して、ページ移動用のリンクに全部埋め込む
3.SSIを利用して、リンクの部分を別ファイルで用意する
一定時間ごとに混ぜるのなら3.でもいいけど、
訪問者ごとに違う順番を見せるのなら3.は向かない。
2が一番無難。
って答えでいいかしらん。
0142nobodyさん
2005/12/17(土) 21:16:26ID:6Cij4iqn戻ったりすると「有効期限切れ・・・・」という画面がでますが
そういう仕組みってどうすればいいんですか?
perlからすこしそれた質問かもしれませんが教えてもらえませんか?
0144nobodyさん
2005/12/17(土) 21:51:48ID:???アップロードされたファイルの、保存される前のファイル名の取得方法をおしえてください。
おねがいします。
0145nobodyさん
2005/12/17(土) 22:07:09ID:???観察してみろと。
0146nobodyさん
2005/12/17(土) 23:16:57ID:???0147nobodyさん
2005/12/18(日) 03:17:23ID:3ossMEQR警告 : ページの有効期限切れ
が出ます。
少し調べてみたところ、入力フォームがあるとこうなるらしいですね。
入力フォームを残したまま、エラーを出させないようにすることは出来ないでしょうか?
よろしくお願いします。
0148nobodyさん
2005/12/18(日) 05:12:35ID:7vISx30Wperlとは関係無いこと
外池
0150nobodyさん
2005/12/18(日) 15:57:02ID:???どのようにしてチェックできますか?
よろしくお願いします。
0151nobodyさん
2005/12/18(日) 18:11:14ID:???何がやりたいのか意味不明
0152150
2005/12/18(日) 18:22:15ID:???1万件のリンクをリンク切れかどうかチェックするスクリプトを作りたかったのですが、
何とか自力で作ることができました。
解決です。m(_ _)mぺこり
0153nobodyさん
2005/12/18(日) 20:24:45ID:???0154nobodyさん
2005/12/18(日) 20:26:52ID:???0156nobodyさん
2005/12/18(日) 23:12:38ID:7vISx30W以上。
>>155
文も読めないやつはマズは国語から学べよチンカスが
ほかいけや
0157nobodyさん
2005/12/19(月) 00:33:37ID:???multipart/form-dataのときにもexpireヘッダって効いたっけ?
前にテストしたとき効かなかった(というよりはキャッシュのセキュリティで弾かれたっぽい)記憶があるんだけど?
0158nobodyさん
2005/12/19(月) 00:53:51ID:???http://pc8.2ch.net/test/read.cgi/php/1126436361/
0159nobodyさん
2005/12/19(月) 01:41:23ID:???0160nobodyさん
2005/12/19(月) 01:42:18ID:???という警告はブラウザの機能だから、サーバ側では操作できないと思うが。
これとは違うのだろうか。
0161nobodyさん
2005/12/19(月) 01:57:53ID:mSKnbNI+プロクソミトロン
0162nobodyさん
2005/12/19(月) 10:37:15ID:???rand関数についての質問ですが
$i = int(rand(100));
$i には、0 〜 99 の乱数がセットされる
と、とあるサイトに説明されていたのですが、この例の場合100が
セットされることはあり得るんでしょうか?
int関数は小数部分を切り捨てて整数化するので100を返す場合は100.000…
以外ないと思うので確率的に考えて自分で実際にプログラム作って試して調べるのは
とてもじゃないですが無理だと思いますので、どなたか教えてください。
0163nobodyさん
2005/12/19(月) 10:54:10ID:???perldocにあった気がしたけどURL忘れた
0165nobodyさん
2005/12/19(月) 11:08:36ID:???for (1 .. 1000000){
100 <= rand(100) and print "100 Over.\n";
}
0166nobodyさん
2005/12/19(月) 11:14:46ID:???0168nobodyさん
2005/12/19(月) 15:14:31ID:nE/lruN5英語のフォームページを作っています。
htmlの中で
<html lang="en">と
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
として英語用にしています。
フォーム自体はきちんと動くのですが、届いたメールのタイトル(件名)が文字化けします。
「英語ページよりお問い合せ」が「英語ペ?[ジよりお問い??ケ」になります。
英語ペ\ージよりお問い\合せとか英語\ペ\ー\ジよりお問\い\合\せなど試してみたのですが、うまくいきません。
jcode.plはcgiの中に読み込んでいますが、ページの内容が英語しかない場合は日本語を完全には使えないのでしょうか?
0169nobodyさん
2005/12/19(月) 15:20:26ID:???http://www.atmarkit.co.jp/fnetwork/rensai/netpro03/netpro01.html
ここの前編と後編読んでからもう一度来いや
0170168
2005/12/19(月) 16:02:23ID:???■日本語はテキストではない?〜テキストの送受信
を読んで、単純に
Content-Type: text/plain; charset="ISO-2022-JP"
を
Content-Type: text/plain; charset="SJIS"
に変えたらいいのかな、って思いましたがうまくいきませんでした。
http://www.atmarkit.co.jp/fnetwork/rensai/netpro04/netpro01.html
の●一般的なヘッダでの利用を読んで
subject:のところに=?ISO-2022-JP?B?と?=を入れて、
その間にタイトル(件名)として使う文章をbase64で変換した文字を入れました
ttp://phpspot.net/php/pgbase64%83G%83%93%83R%81%5B%83h%83c%81%5B%83%8B.html
は何故かうまくいかなかったので
ttp://www.vector.co.jp/soft/win95/util/se139646.html
でbase64に変換しました。
これでできました。ありがとうございました。
0171nobodyさん
2005/12/19(月) 17:13:11ID:mSKnbNI+小数点以下がどれくらい続くかは知らない
0173nobodyさん
2005/12/19(月) 19:55:13ID:???0174nobodyさん
2005/12/19(月) 20:12:41ID:???0175nobodyさん
2005/12/19(月) 22:15:36ID:M/zhZkxT頑張ればPerl/CGIで簡単な掲示板を作れるかも、という程度でしょうか。
現在、HTML::Templateを使ってコーディングしています。
テンプレートファイル内から TMPL_VAR でパラメータを渡す時、
$template->param(
'PARAM_1' => $var { 'PARAM_1' } ,
'PARAM_2' => $var { 'PARAM_2' } ,
'PARAM_3' => $var { 'PARAM_3' } ,
);
というようにやるところを、
出来るだけ動的に行いたいと思っています。
テンプレートファイル内のパラメータ PARAM_XX に対し、
ハッシュ $var { 'PARAM_1' } の値を渡せるようにしたいのですが、
どのようにコーディングすれば良いでしょうか。
自分なりに、環境変数一覧を書き出すプログラムを参考にして
foreach my $key ( keys %var ) {
$template->param ( $key => $var { $key } ) ;
}
と書いてみたのですが、値が渡された様子はありませんでした。
0176175
2005/12/19(月) 22:25:36ID:???誤:
ハッシュ $var { 'PARAM_1' } の値を渡せるようにしたいのですが、
正:
ハッシュ $var { 'PARAM_XX' } の値を渡せるようにしたいのですが、
それと、Perlのバージョンは5です。
0177nobodyさん
2005/12/19(月) 22:46:36ID:???% perl -e 'use HTML::Template; $t = HTML::Template->new(scalarref => \ "A=<TMPL_VAR NAME=A>\nB=<TMPL_VAR NAME=B>\n"); %h=(A=>"foo", B=>"bar"); foreach $k(keys %h){$t->param($k=>$h{$k});} print $t->output;'
A=foo
B=bar
(@_@)
0179nobodyさん
2005/12/19(月) 23:18:48ID:???(10分後)
変数名違ぇじゃん… orz
ご迷惑おかけしました。
俺の半日はなんだったんだ。
0180nobodyさん
2005/12/19(月) 23:30:59ID:mSKnbNI+0181nobodyさん
2005/12/20(火) 00:11:38ID:???0182nobodyさん
2005/12/21(水) 09:34:15ID:m1/a3jED0183nobodyさん
2005/12/21(水) 09:53:57ID:m1/a3jED流れとして
どっかリンク元→ a.html → b.cgi
ってかんじでaのフォームで変数をb.cgiに渡すってかんじなんだけど
b.cgiで$ENV{'HTTP_REFERER'}を使うと、a.htmlがリンク元として
表示されてしまいます。
どっかリンク元の環境変数を得るにはどうすればいいですか?
0184nobodyさん
2005/12/21(水) 10:25:10ID:???a.htmlをa.cgiにしてそこで取得する
どっかリンク元→ a.cgi → b.cgi
またはa.htmlでJavascript使って渡す
0185nobodyさん
2005/12/21(水) 12:44:51ID:m1/a3jEDjavascriptでも出来るんですか!?
0186nobodyさん
2005/12/21(水) 14:50:11ID:kTJQiyq+opendir DIR, "hogehoge" || die "cannot open";
@entry = readdir DIR;
foreach(@entry){
opendir DIR, "$_";
@entry = readdir DIR;
if($_ =~ /.txt\z/){
$changemode = chmod 0664, "$_";
}
}
と書いたのですが、
hogehogeの中にディレクトリがあった場合は。そのディレクトリの配下にあるディレクトリやファイルを更新しません。
hogehoge配下にあるディレクトリやファイル全てを読み込むようなプログラムを作るのにはどのようにしたらよいでしょうか?
0190nobodyさん
2005/12/21(水) 18:47:58ID:???語尾が.htmlで終わるものを「処理」を行っているのですが、
.htmlだけでなく、.htm .jpg .gif も「処理」対象にしたい場合は
どのような正規表現を使ったらよいですか?
if($file =~ /.html\z/){
処理
}
0191nobodyさん
2005/12/21(水) 18:58:47ID:???foo();
}
0192nobodyさん
2005/12/21(水) 19:31:01ID:HAcTfIEX書いてるので、プログラムに
if($abc=~/\p{Han}/){
を記述しているのですが漢字に一致しません。
$abcには漢字が含まれているのですが・・・
一致させるには、ほかに記述すべきことがあるんでしょうか?
0194nobodyさん
2005/12/21(水) 20:59:20ID:???つ/
0196nobodyさん
2005/12/21(水) 21:37:38ID:ib12VQrv0198192
2005/12/21(水) 21:45:01ID:HAcTfIEX何もしてないのでeucそのまんまです。
「use encoding 'euc-jp';のように、
スクリプトに使っている文字コードを指定することで
\p{Han}+でEUCに正しく一致する」とだけ本には書いてあるので、
プログラムにuse encoding 'euc-jp'の一行を加えましたが、
一致しませんでした。
多分ものすごく基本的なことが理解できてないのだと思います。
もしかしてeucをUnicodeに変換しないとダメということなんでしょうか?
もしそうならその仕方を教えてもらえないでしょうか?
0199nobodyさん
2005/12/21(水) 22:37:39ID:???初めて知った機能だよ。
use encoding qw(euc-jp);
my $str = "漢字";
$str =~ /\p{Han}/ and print "true";
一応こんなでも通るけど。
0201192
2005/12/22(木) 00:17:58ID:l+S0SPkvuse encoding 'euc-jp'のところでエラーが発生してます
error.log見てわかりました。
Wide character in print at ....ってなってるんですが・・・・
なんでなんかな。perlは5.87なのにapche2.0やIE6では駄目とか?
0203nobodyさん
2005/12/22(木) 07:24:22ID:???ttp://www.pure.ne.jp/~learner/program/Perl_unicode.html
0204nobodyさん
2005/12/22(木) 10:49:59ID:iSEjIkIt例えば
start.exe
readme.txt
stop.exe
index.html
と並んでいたら、
.exe
.txt
.exe
.html
のように抜き出したいのですが
0205nobodyさん
2005/12/22(木) 11:41:44ID:???foreach $filename (@filenames) {
push @extensions, (split(/\./, $filename))[-1];
}
foreach $extension (@extensions) {
print $extension, "\n";
}
0206nobodyさん
2005/12/22(木) 12:12:50ID:???print join "\n", map /(\.[^.]+)\z/, qw(start.exe readme.txt stop.exe index.html);
0208204
2005/12/22(木) 13:05:37ID:iSEjIkIt拡張子が重複する(フォルダは無視)場合は表示しないようにするプログラムを作ってたんだけど、
うまくいきません
例えば
start.exe
hogehoge/
readme.txt
stop.exe
index.html
readme.html
と並んでいたら、
.exe
.txt
.html
のように抜き出したいのですけど、、
センスないのかなorz・・・
0209nobodyさん
2005/12/22(木) 13:11:55ID:???日記はチラシの裏にでも書いてろ
0210nobodyさん
2005/12/22(木) 13:15:55ID:???0211nobodyさん
2005/12/22(木) 13:16:55ID:???0213204
2005/12/22(木) 14:43:03ID:iSEjIkItif(-f $file){
push @extensions, (split(/\./, $file))[-1];
$fext = (split(/\./, $file))[-1];
}
foreach $extension (@extensions) {
$ext{$extension} = $ext{$extension} +1;
}
($key,$value) = each %ext;
while(($key,$value) = each(%ext)){
print $key, " - ", $value, "\n";
}
>>212のアドバイスがききました
ありがとうございました
0214nobodyさん
2005/12/22(木) 16:51:29ID:9N6o95FW出力を CGI::Carp qw(fatalsToBrowser) のようにするには
どうすればよいんでせう?
0215nobodyさん
2005/12/22(木) 16:57:57ID:???0216214
2005/12/22(木) 17:14:18ID:???早速ありがとう!
dependecies にひっかかってなかなかインストールできなかったけど
無理やり動かせた。
開発効率かなりあがりそうだ。
でも、この画面ユーザには見せたくないね。
やっぱエラー処理はちゃんと書かないとダメそうだ。
0218nobodyさん
2005/12/23(金) 16:23:03ID:???0219nobodyさん
2005/12/23(金) 17:31:00ID:???0220nobodyさん
2005/12/24(土) 19:39:16ID:???0221nobodyさん
2005/12/24(土) 23:29:23ID:???use encodings "cp932";
を指定しているとき、 URLエンコードされたものが、正常にデコード
できません。
#!/usr/bin/perl
use strict;
use encoding "cp932"; #ここをコメントすれば上手くいく
binmode STDERR, ":encoding(cp932)";
print "Content-Type: text/html; charset=Shift_JIS\r\n\r\n";
my $value;
$value = '%95%5C%8E%A6'; #表示
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
print "しふとじす\n";
print $value;
肝心の$valueが、ちゃんと"表示"に戻りません。
use encodingsの指定をやめると正常に動きます。
原因は何となくわかる (内部はutf-8で処理しているから?)
のですが、対処方法がわかりません。
ここ嫁 でも結構ですので、教えていただけませんか?
0223221
2005/12/24(土) 23:34:41ID:???やりたいことは、ソースコードをShift_Jis(cp932)で統一したいのと、
実際に、CGI.pmを使った場合でも、GET、POSTされた Shift_Jisのデータ、
正確には、URLエンコードされたもの、が正常に取得できないので、
これをどうにかしたい、ということです。
0225nobodyさん
2005/12/25(日) 10:06:00ID:MhkrUB/B0226nobodyさん
2005/12/25(日) 10:50:26ID:sTNGkhi50227221
2005/12/25(日) 12:10:36ID:???ありがとうございます。podの方はまだ少ししか読んでませんが、
>>8 の方は読んでみました。
というか、以前から読んでいましたが、理解できていなかった...
#!/usr/bin/perl
use strict;
use Encode;
use encoding "cp932";
binmode STDERR, ":encoding(cp932)";
my $wc = '%95%5C%8E%A6'; #表示
#ただのアスキーコードだけど、utf8フラグがたつ
my $nwc = Encode::encode('cp932',$wc);
#1Byte単位でpackするために、utf8フラグを落とす
$nwc =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
#utf8フラグの立っていない$nwcに対してpackする。1Byte単位で扱える
#$nwcには、cp932の生バイナリが入る
$wc = Encode::decode('cp932', $nwc);
#$nwcのままでは表示できないので、再びutf8フラグを付ける。
print $wc;
#$wcはutf8フラグが立っているので、STDOUT出力時に
#Encode::encode('cp932',$wc)が内部的には動いている
こんな理解で大体OKでしょうか?
だけど、ずいぶんと回りくどいことしていると思います。
0228nobodyさん
2005/12/25(日) 17:27:10ID:???よく分かってるじゃないか。
encoding は一見お手軽に見えるけど、使い勝手悪いよ。
日本語は全て外部ファイルに追い出すのが遥かに楽。
0229221
2005/12/25(日) 18:24:14ID:???実はencodingをはじめて知ったとき、『これは使える』と思ったのですが、
URLデコードのところで躓いて、導入をあきらめていました。
そのときは、ソースに日本語べた書きでしたが、やっぱり外部ファイルに分離
するのがいいですね。
encodingを使えば、=~(マッチ演算)などで、半角カナなど(何も考えず)上手く処理できる?
print "本能"; などが文法エラーにならないなど、メリットはありますが...
逆に使えなくなるモジュール等を考えると、デメリット(副作用)の方が多いような。
あと、何かとデバックのために Data::Dumperを使って表示するのですが、
Dumperを使って日本語(の入った変数)を表示した場合、Perl内部コードがそのまま
表示されるので、不便といえば不便ですな。
0230nobodyさん
2005/12/25(日) 18:25:21ID:???てすとhttp://hoge.hoge/index.htmlてすと
が入っていたとします。
そこで$resultに上記のURLを変換(置換)して
てすと<A HREF="http://hoge.hoge/index.html" TARGET="_blank">http://hoge.hoge/index.html</A>てすと
としたいのですがどうしたらよいのでしょうか?
ググったら正規表現とか出てきたのですが、良く分かりませんでした。
自分でやってみたこと
$result = $comment =~ s/(http:\/\/[^ \"\r\n\<]+)/\<a href=\"$1\" target=\_blank\>$1\<\/a\>/g;
print <<END;
$result
END
これをやったら$resultには何も入りませんでした・・・。
0231nobodyさん
2005/12/25(日) 19:29:51ID:???必要な所にno encoding入れれば、それほど面倒でもなくなるよ。
それも結構、落とし穴があったりするけど。
>>230
(my $result = $comment) =~ s/ (以下略
それと正規表現も修正。
0233230
2005/12/26(月) 00:25:11ID:???(my $result = $comment)
にしたら無事できました。
あとは正規表現を修正しようかと思って
ttp://www.din.or.jp/%7Eohzaki/perl.htm#httpURL
こちらを参考に
s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+
この正規表現を使わせて頂いたのですが
今度はURLのみ表示されません・・・。
どうしたらよいでしょうか?
0234nobodyさん
2005/12/26(月) 01:03:13ID:???TMPL_VAR で、改行コードを含んだ文字列を置換するとき
改行コードを<br>や<br/>に変換する便利な方法は無いのでしょうか。
要求される仕様上、<pre>やスタイルシートなど、<br>以外で改行させる方法は不可とします。
現状:
改行コードが自動的に置換されないので、ブラウザ上では改行されて見えない
やってみた方法:
(1) 自前で改行コードを<br>に変換、HTML::Templateのサニタイジング機能を使う
→ <br>というタグが見えてしまう
(2) 自前で改行コードを<br>に変換、HTML::Templateのサニタイジング機能を使わない
→ 正常に改行されるが、セキュリティ上かなりやばい
(3) 自前でサニタイジング、HTML::Templateのサニタイジング機能を使わない
→ とりあえず問題なく動くが面倒&重い。他の方法はないものか?
Perlのバージョンは5。
HTML::Templateのバージョンは不明。(申し訳ない、比較的新しいとは聞いた
0235230
2005/12/26(月) 01:19:00ID:???(s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$%#]+)
にしたら上手くいきました。
変更点は
(1) ()で挟んだ
(2) 後ろの方の$と%の間の,を無くした
です。
何でこうなるのかまだ理解してないので自信ないのですが
これであってますよね?
0236nobodyさん
2005/12/26(月) 02:03:15ID:???出力する文字列を配列にしてTMPL_LOOPで回すのは無し?
サニタイズぐらい自分でやれよって気はする。
>>235
括弧で挟むのは、置換するところで$1として使ってるから。
カンマは有っても動きそうだけど。
0237234
2005/12/26(月) 02:10:56ID:???まあ、サニタイジングくらい自分でやるですよ。
これくらいHTML::Templateの機能にあっても良さそうなもんなんですけどね。
0238230
2005/12/26(月) 02:18:17ID:???できなかったのは他に原因があったのかな・・・。
何はともあれありがとうございました。
0239nobodyさん
2005/12/26(月) 10:03:49ID:???Template Toolkitならhtml_line_breakというフィルタがあるので
[% foo | html | html_line_break %]
てな感じでいけるんだけどね。
use strict;
use Template;
my $t = Template->new();
my $input = <<INPUT;
[% foo | html | html_line_break %]
INPUT
my %vars = (
foo => "foo<>\nbar\n&hoge\n",
);
$t->process(\$input, \%vars);
0240nobodyさん
2005/12/26(月) 19:53:21ID:w9go55d/俺は、VC++で自分でつくったやつ使ってるよ。
上半分はエディタで、「実行」をおすと、下半分のブラウザに実行結果がでてくれるんだよ。
だれか、ほしいやついる?いるなら、Vectorにでもうpするけど。
0241nobodyさん
2005/12/26(月) 19:59:15ID:???0242nobodyさん
2005/12/26(月) 20:09:20ID:???0243nobodyさん
2005/12/26(月) 20:15:02ID:???0244nobodyさん
2005/12/26(月) 20:20:26ID:???0245nobodyさん
2005/12/26(月) 20:21:04ID:???0246nobodyさん
2005/12/26(月) 20:42:19ID:???nameの部分は変わることがないので、これを test.cgi?XXX とゆふうに使えるようにしたいんですが
どうすればいいでしょうか?
0247nobodyさん
2005/12/26(月) 21:01:43ID:???0248nobodyさん
2005/12/26(月) 21:09:20ID:???できました!ありがとうございました!!
0249nobodyさん
2005/12/27(火) 14:36:05ID:???my $so='ソ\';
if(/\Qソ\E/){
print "含まれています。";
}
これを実行してもソがひっかかりません。
どうしてですか?
0250249
2005/12/27(火) 14:36:55ID:???○表示させたいんですが
すいません。ミスりました。
0251nobodyさん
2005/12/27(火) 15:07:40ID:???if (/\Qソ\E/) { は if ($so =~ /\Qソ\E/) { の間違いとして、
'ソ\' は "\x83\x5C" 、
qr/\Qソ\E/ は \Q\x83\\E → \x83\x5C\x5C\x45 。
よってマッチしない。
参考: http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
0252249
2005/12/27(火) 15:10:51ID:???\x83\x5cだよな。
0253nobodyさん
2005/12/27(火) 15:48:24ID:???0254nobodyさん
2005/12/27(火) 18:30:24ID:???0255nobodyさん
2005/12/27(火) 23:40:00ID:???0256nobodyさん
2005/12/28(水) 00:47:06ID:???0257nobodyさん
2005/12/28(水) 01:30:43ID:rgfSZuvi0259nobodyさん
2005/12/28(水) 02:01:04ID:???0260nobodyさん
2005/12/28(水) 09:22:40ID:???0262nobodyさん
2005/12/28(水) 09:55:45ID:???0263nobodyさん
2005/12/28(水) 10:10:27ID:???use Benchmark;
$buf = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
timethese(10000000, {
1 => sub { if($buf =~ /JKL/){} },
2 => sub { if(index($buf, 'JKL')){} },
});
----------------------------------------------------------------------
Benchmark: timing 10000000 iterations of 1, 2...
1: 5 wallclock secs ( 4.53 usr + 0.01 sys = 4.55 CPU) @ 2199736.03/s
(n=10000000)
2: 3 wallclock secs ( 1.97 usr + 0.03 sys = 2.00 CPU) @ 4997501.25/s
(n=10000000)
0265nobodyさん
2005/12/28(水) 10:34:57ID:???>>254 や >>261 は同じ人ですか?
あまり関係無いですが、if(index($buf, 'JKL')){} なんて書くのはバグの元ですよ
0266nobodyさん
2005/12/28(水) 10:38:06ID:???0267265
2005/12/28(水) 10:53:48ID:???index と正規表現の速さの違いを比べるなら支障は無いので
あまり関係無いと書いたんですが、異なる機構を比較してるのは事実ですし、
やはり目的が何であれベンチとして駄目なものは駄目、と書いた方が良かったですね。
0268nobodyさん
2005/12/28(水) 10:59:44ID:???0269nobodyさん
2005/12/28(水) 11:04:31ID:???http://boobar.hp.infoseek.co.jp/bench/index_vs_m.txt
UTF8 フラグがかんできたりするとまた違うのかも知れん。
0270253
2005/12/28(水) 11:40:27ID:???おれの意図としては速さ以前に、簡単な正規表現を正しく書けないようなら
index使えと言うほうに比重を置いたつもりだったんだが。
0271nobodyさん
2005/12/28(水) 12:31:39ID:???ここのMulti Wing BBSをDLして設定してうpまで
終わったんですが、メインのwingmulti.cgiにアクセスして
設定したパスワードを入力しても、パスワードエラーと出ます。
何度設定しなおしてもパスワードエラーに引っかかるんですが
これって単なるバグでしょうか?
分かる方いたら、試してもらえませんか?
0272nobodyさん
2005/12/28(水) 12:33:32ID:VO6oi9GXスレ (´∀`( ´∀`) チガイ
0274nobodyさん
2005/12/28(水) 12:54:31ID:???設置に関する質問ならこちらへ
CGI設置について質問 【Part2】
http://pc8.2ch.net/test/read.cgi/php/1104624784
0277nobodyさん
2005/12/28(水) 13:10:29ID:VO6oi9GXって一言書いておけばいいと思う。
0278nobodyさん
2005/12/28(水) 13:14:22ID:RY3kh/X5ありがとう。あなた達、本当に人が出来ているね。
0279nobodyさん
2005/12/28(水) 21:13:55ID:FTSvjaEDでは大丈夫だけど、
eval {
require $self->{App};
1;
};
では出来ないのってなんでですか?
0280nobodyさん
2005/12/28(水) 21:36:23ID:???0281nobodyさん
2005/12/29(木) 01:45:17ID:fGeDbioe<うにゃ> <うにゃ>
にたいして、<と>に挟まれた部分すべて(この場合3カ所)に対して処理したいのですが、どうすればいいんですか?
最短でも最長でもなく、すべてにマッチさせたいのです。
0282nobodyさん
2005/12/29(木) 02:01:56ID:???print join('/', /(?<=[<>])([^<>]*)(?=[<>])/g), "\n" for qw(
a<b>c<d>e
a>b<c>d<e
a<b<c<d<e
a>b>c>d>e
);
0283nobodyさん
2005/12/29(木) 02:20:00ID:???普通にできるが。
#--- foo.pl ---
print "foo!\n";
__END__
#!/usr/local/bin/perl -w
use strict;
my $self = { App => 'foo.pl' };
eval { require $self->{'App'} } or die $@;
eval { do $self->{'App'} } or die $@;
delete $INC{ $self->{'App'} };
eval "require '$self->{'App'}'" or die $@;
eval "do '$self->{'App'}'" or die $@;
__END__
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_do_EXPR
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_require_VERSION
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_use_Module_VERSION_LIST
0284nobodyさん
2005/12/29(木) 08:24:52ID:fGeDbioe舌足らずでした。すみません。
>>281は
<はげ> <ほげ>
に対して
はげ
はげ> <ほげ
ほげ
をマッチさせたいのです。
0285nobodyさん
2005/12/29(木) 09:12:37ID:???sub match {
my($str, $match, $flag) = @_;
my $re = $flag
? qr/ (?<=<).*(?=>) | ^.*(?=>) | (?<=<).*\z /x
: qr/ (?<=<).*(?=>) /x
;
if (my @str = $str =~ /$re/g) {
push @{$match}, @str;
match($_, $match, 1) for @str;
}
}
for (qw(
a<b>c<d>e a>b<c>d<e a<b<c<d<e
a>b>c>d>e <a>b<c<d>e>f<g>
)) {
my @match;
match($_ => \@match);
print join(' / ', @match), "\n";
}
Perlでリクに答えるスクリプトを作るスレ
http://pc8.2ch.net/test/read.cgi/tech/1086143976/
■こんなCGI作ってください■ Part.2
http://pc8.2ch.net/test/read.cgi/php/1133361560/
0286nobodyさん
2005/12/29(木) 12:43:26ID:???あとみんな使ってるもの?
普通にちょっと弄って使ってる程度の人なら使わなくてもいいものかな。
今までは情報としてへ〜使った方が良いんだぐらいに考えてたんだけど、
cgi改造してたらこういうときに便利なのかなって初めて思ったので質問してみる。
0287nobodyさん
2005/12/29(木) 12:46:04ID:???規模にもよるけど、変数のスコープでバグ出すことはなくなるので使う。
ただ、改造にはあまり有用でない。(元がstrictで作られているならともかく)
0288nobodyさん
2005/12/29(木) 12:57:29ID:???うんち
しっこ
うんち
しっこ
みたいなテキストを、
うんち*3
しっこ*2
とゆうふうにカウントしたいんですが、どうすればいいかわかりません。
切り出した文字列を変数にしてカウントアップすればいいんでしょうか?
方法があればおしえてください。
0290nobodyさん
2005/12/29(木) 13:11:47ID:6Q9kRgBG$obutsu{$_}++;
}
これでおけだけど、コレからは“例”にも気を付けた方がいいかと思う。
0291nobodyさん
2005/12/29(木) 15:32:15ID:???なるほど。
こなれた人が1から組んでく時には有効って感じで考えるぐらいでよさげだね。
こまめに動作確認したり、規模が大きくなければ特に問題なそうだ。
サンクス。
0293nobodyさん
2005/12/29(木) 21:23:37ID:???0294nobodyさん
2005/12/29(木) 22:54:07ID:???そのへんの判断はもちろん自由だけれど、Perl を始めたばかりということなら何も考えずに use strict と use warnings の使用をおすすめしておく。
0295294
2005/12/29(木) 22:58:10ID:???と一応補足。
0296nobodyさん
2005/12/30(金) 02:50:44ID:???0297nobodyさん
2005/12/30(金) 04:40:27ID:???0298nobodyさん
2005/12/30(金) 05:19:31ID:???0299nobodyさん
2005/12/30(金) 05:53:13ID:???0302nobodyさん
2005/12/30(金) 07:53:10ID:???KENT WEB 総合スレ Part2
http://pc8.2ch.net/test/read.cgi/php/1078991985/
0303nobodyさん
2005/12/30(金) 15:49:53ID:???動けばイイや程度で書いてるとソースが汚いし無駄ばかり
挙げ句に処理も遅く回りくどいことをして回りからはバカにされる
俺のポジションはアイデアの参照スクリプトだけで他の奴が清書する
情けないポジション「抜けようか?」と言うと、それはマジに困ると言うから
何か晒し者のように顔色を伺いながらメンバーに居る感じである。
スキルのチョイとある新参の中堅に笑われて不用みたいに言われ続けハゥゥ
0304nobodyさん
2005/12/30(金) 18:16:33ID:???プログラム言語の最低限の知識だけのプログラマ
http://pc8.2ch.net/test/read.cgi/prog/1135701242/
■■■技術を習得するのが辛い■■■
http://pc8.2ch.net/test/read.cgi/prog/1118856179/
ぐち0x13 〜分かったから仕事させてくれ〜
http://pc8.2ch.net/test/read.cgi/prog/1131375876/
年末年始の休み雑談
http://pc8.2ch.net/test/read.cgi/prog/1135924708/
0305nobodyさん
2005/12/31(土) 00:50:18ID:LK7Aj/aS------------------
#[0]は一意なid
my @a = ('aioue', 'sdfgsdf', 100, 'dsfhsf', 2);
my @b = ('noriri', 'sdfgsdf', 100, 'dsfhsf', 2);
my @c = ('nanndemoi-', 'sdfgsdf', 100, 'dsfhsf', 2);
my @arrr;
push @arrr, (\@a, \@b, \@c);
------------------
上記の@arrrのような二次元配列から、
例えば配列の頭に「noriri」が格納されている行を取り出したい場合、
どのようにして該当する行を求めるのが好ましいでしょうか。
ベタベタに考えると
------------------
my $stmp = 'noriri';
my $pt;
foreach (@arrr) {
if ($${$_}[0] eq $stmp) {
$pt = $_;
}
}
------------------
という感じになってしまうのですが…
もっと効率のいい方法は、ありますでしょうか?
ご教授お願いしますm(_ _)m
0306nobodyさん
2005/12/31(土) 01:48:39ID:???[0] が一意である事が保証されるなら最初からハッシュで持てばいい。
もしくはそのように加工後、$arrr{$stmp} のようにアクセス。
順序が必要なら順序のデータを持たせればいい。
my %arrr = (
aioue => [ 0, 'sdfgsdf', 100, 'dsfhsf', 2 ],
noriri => [ 1, 'sdfgsdf', 100, 'dsfhsf', 2 ],
'nanndemoi-' => [ 2, 'sdfgsdf', 100, 'dsfhsf', 2 ],
);
これらの前処理に問題があるなら素直に君が書いたように処理。
0308nobodyさん
2005/12/31(土) 02:25:02ID:???「列を検索して行を特定する」ことが目的なら、行と列の置き方が逆の気がする。
マスターキーが決まってるならもちろんハッシュを利用するけど。
my @a = ('aioue', 'noriri', 'nanndemoi-');
my @b = ('sdfgsdf', 'sdfgsdf', 'sdfgsdf');
my @c = (100, 100, 100);
my @d = (2, 2, 2);
0309ヽ(´ー`)ノ ◆.ogCuANUcE
2005/12/31(土) 03:52:04ID:???構造を変更しない、もしくは前処理をしないのが前提なら高階関数の方が
好みかなぁ。
use List::Util qw(first);
my $pt = first { $_->[0] eq 'noriri' } @arrr;
0310nobodyさん
2006/01/03(火) 01:42:04ID:???> "Class::DBI::Sweet" at /usr/share/perl5/Class/DBI/Sweet.pm line 630."
これって、どうやったら解決できる?
0311nobodyさん
2006/01/03(火) 04:24:03ID:???0312nobodyさん
2006/01/03(火) 15:22:09ID:lh2VfF1u{ "title"=>"Config A", "name"=>"A", "type"=>"TEXT", "value"=>"352" },
{ "title"=>"Config B", "name"=>"B", "type"=>"TEXT", "value"=>"" },
{ "title"=>"Config C", "name"=>"C", "type"=>"TEXT", "value"=>"" },
];
連想配列の配列を作ってみたのですが、これでlength($Defs)とすると16が帰ってきます。
これをループで処理するために3を得たいのですが、どうすればいいのでしょうか?
0313ヽ(´ー`)ノ ◆.ogCuANUcE
2006/01/03(火) 15:36:00ID:???foreach my $it (@$Defs) {
# 各要素は $it でアクセス
}
もしくは、
for (my $i = 0 ; $i < @$Defs ; ++$i) {
# 各要素は $Defs->[$i] でアクセス
}
0314nobodyさん
2006/01/03(火) 18:10:35ID:6LWi5P1Tどうみてもソースが汚いです。
use strict;なスクリプトに修正してもらえませんか?
サブルーチン初めてなので間違いが多いと思うのでアドバイスお願いします
#!/usr/bin/perl
my $time = &Get_Time;
print "content-type: text/html\n\n";
print "$time\n";
exit;
sub Get_Time{
my $times = time();
my($sec,$min,$hour,$mday,$month,$year,$wday,$stime) = localtime($times);
my @week = ('日','月','火','水','木','金','土');
my $time = sprintf("%04d\/%02d\/%02d\(%s\)%s%02d\:%02d:%02d",$year+1900,my $mon+1,$mday,$week[$wday],my $aft,$hour,$min,$sec);
return $time;
}
0315nobodyさん
2006/01/03(火) 18:27:27ID:???0317314
2006/01/03(火) 18:37:03ID:???このままで良いという事ですか?
( ゚Д゚ )
それじゃあもうひとつだけお願いします。
サンプルから引き抜いた部分が多いので、$monと$aftの意味が良く分からないのですが、
表示に影響もないみたいなので、削除しても大丈夫なんでしょうか?
0318nobodyさん
2006/01/03(火) 18:40:34ID:QwphIqM20319nobodyさん
2006/01/03(火) 18:42:12ID:???あ、ちょっと待った。機能的な部分まで見てなかったw
$monは$monthのつもりで間違ってるんだろうし(今は0+1月だから問題ないように見えるが)
$aftは何したいのか良くわからんし。自分で流れをよく追ってごらん。
0320314
2006/01/03(火) 18:48:13ID:???見逃してた訳ではなかったんですが、おかげさまで理解できました。
ありがとうございました。
他にも見つかったらレスお願いします
0322312
2006/01/03(火) 21:22:10ID:lh2VfF1u> foreach my $it (@$Defs) {
> # 各要素は $it でアクセス
> }
これが美しいですね。 ありがとうございました!
0323nobodyさん
2006/01/04(水) 01:16:22ID:???例えば
sample.txt内に
aaa=000
bbb=111
ccc=222
aaa=333
bbb=444
ccc=555
というフォーマットで10個くらい書かれている中から
例えば
aaa=000
bbb=111
ccc=222
なら$aaaに000を格納したいんですが、どうすればいいでしょうか?
教えてください。お願いします。
0324nobodyさん
2006/01/04(水) 01:25:44ID:???>>1
依頼されたツールを誰かが作るスレ
http://pc8.2ch.net/test/read.cgi/php/1078997682/
Perlでリクに答えるスクリプトを作るスレ
http://pc8.2ch.net/test/read.cgi/tech/1086143976/
■こんなCGI作ってください■ Part.2
http://pc8.2ch.net/test/read.cgi/php/1133361560/
0325nobodyさん
2006/01/04(水) 02:29:09ID:???誘導するほどの話でもないなー。
1.「=」でsplit使って分ける(仮に$leftと$right)
2.$right を ${$left} に代入する
コーディングについてはPerlの本一冊読めば理解できる話だからしない。
0326nobodyさん
2006/01/04(水) 02:33:45ID:???$hash{aaa}に入れた方がいいと思うけどな。
0327305
2006/01/04(水) 03:10:14ID:???いつの間にやらレスが…
すみません、ありがとうございました。
質問したソースのcgiは、とりあえず意地でも正月休み中に動かしたかったので、突貫で作ってしまいました。。
ttp://homepage2.nifty.com/bel_s/webtag/
ソースというかソースはもちろん構造もかなりぐちゃぐちゃです。。
突っ込みどころだらけというかめちゃくちゃだと思いますが何かありましたら突っ込みお願いします。。直すこと前提でとりあえず動かしました。
結局構造改革は大変そうだったのでやめました。自前で作ったfile.pmから作り直しになってしまいそうだったので…。
>>308
全然思いつきもしませんでした。。
使い方によってはだいぶ効率がかわりそうですね。。
verupにむけて参考にさせていただきますm(_ _)m
>>309
チラシの裏ですが今回コンセプトとして「勉強」「設置が楽/場所を選ばない」ってのがありまして、
ライブラリは全部自分で作ってひとつに纏めてしまいました。
0328305
2006/01/04(水) 03:14:20ID:???すみません、「突っ込んでね」ではなく、
暇な方や人のソース眺めるのが好きな方いましたら、気が向いたらお願いします程度の意味です。
なんか変な暗黙の行間ができちゃったような気がするので補足。
今日仕事なのになにやってんだおれー
0329nobodyさん
2006/01/04(水) 07:38:24ID:???sub read_ini {
open (INI, shift);
flock (INI, 1);
my @ini = <INI>;
close INI;
my %INI;
foreach (@ini) {
chomp $_;
if ($_ =~ /^\#|^[(.+)]$|^\/\/|^\[(.+)\]$/ || $_ eq "" || index ($_, "=") < 0) {
next;
}
my $key = substr ($_, 0, index ($_, "="));
my $value = substr ($_, index ($_, "=") + 1, length ($_));
if ($key ne "") {
$INI{"$key"} = $value;
}
}
return %INI;
}
%INI = &read_ini ("test.ini");
foreach (sort keys %INI) {
print $_ . "\n " . $INI{"$_"} . "\n";
}
こんなのダメっすか
0330nobodyさん
2006/01/04(水) 07:40:11ID:???sub read_ini {
open (INI, shift);
flock (INI, 1);
my @ini = <INI>;
close INI;
my %INI;
foreach (@ini) {
chomp $_;
if ($_ =~ /^\#|^[(.+)]$|^\/\/|^\[(.+)\]$/ || $_ eq "" || index ($_, "=") < 0) {
next;
}
my $key = substr ($_, 0, index ($_, "="));
my $value = substr ($_, index ($_, "=") + 1, length ($_));
if ($key ne "") {
$INI{"$key"} = $value;
}
}
return %INI;
}
%INI = &read_ini ("test.ini");
foreach (sort keys %INI) {
print $_ . "\n " . $INI{"$_"} . "\n";
}
0331nobodyさん
2006/01/04(水) 09:42:46ID:???0332nobodyさん
2006/01/04(水) 11:56:31ID:???0334nobodyさん
2006/01/04(水) 12:42:50ID:???sub get_info {
my ($page, $key) = @_;
my %info = map { split(/=/, $_, 2) } split(/\n/, $infobase{$page});
return $info{$key};
}
0336nobodyさん
2006/01/04(水) 14:00:43ID:???use FileHandle;
use Data::Dumper;
my $fh = FileHandle->new("sample.txt") or die;
flock($fh, 1);
chomp(my @lines = $fh->getlines());
$fh->close();
my @ini_set;
my $temp = {};
foreach my $line (@lines, ''){
if ($line){
my ($key, $value) = split(/=/, $line, 2);
$temp->{$key} ||= $value;
} else {
keys(%{$temp}) and push(@ini_set, $temp);
$temp = {};
}
}
print Dumper(\@ini_set);
こんな感じでどうなん。
0337nobodyさん
2006/01/04(水) 14:34:56ID:???use strict;
my $format = qr/^\s*([^=]+)\s*=\s*(.*)$/;
my $file = $ARGV[0] || './sample.txt';
-f $file || die "No such file.\n";
open FH, '<' . $file or die $!;
# local $/ = ''; # 段落モード
# while (<FH>) {
# my %data = /$format/gm; # 空行が Record Separator
# print map("$_:[$data{$_}]\n", sort keys %data), "---------\n";
# }
while (<FH>) {
/$format/ || next; # フォーマットに合わない行が Record Separator
my %data;
do { $data{$1} = $2 } while <FH> =~ //; # 改行が Field Separator
print map("$_:[$data{$_}]\n", sort keys %data), "---------\n";
}
__END__
参考: http://search.cpan.org/modlist/Option_Parameter_Config_Processing
0338nobodyさん
2006/01/04(水) 16:22:38ID:PpH7t0Dmプログラムってないかな?
0339nobodyさん
2006/01/04(水) 17:47:39ID:???>>324
【CGI】こんなCGI探してますver.19
http://pc8.2ch.net/test/read.cgi/hp/1134255607/
0340323
2006/01/04(水) 19:59:55ID:???すべて試してみて一番わかりやすいのを参考にさせていただきます。
本当にありがとうございました。
0341nobodyさん
2006/01/05(木) 04:32:22ID:+yKIo2wfこの本を見てて、cryptの暗号化のキー(第2引数ですかね?)は、2文字異常渡しても無視されますと書いてありました。
僕が、今手にして自分で解読してみてるスクリプトに以下のようなものがあったんですけど、(出所はちょっと忘れてしまいました)
$time=crypt($time,int(rand 100));
第2引数が100になることもあるということは、3文字だから無視されますよね?
これって、
$time=crypt($time,int(rand 99));
に書き換えた方がいいんですか?
0342nobodyさん
2006/01/05(木) 09:52:45ID:???>>162-辺りで出ているがrand 100は0以上100"未満"なのでint(rand 100)が100を取る事は無い。
しかし整数そのまま放りこむのはsaltの強度が落ちるからあまり良いとは言えないなぁ
因みにニ文字以上が切り捨てられるという仕様は暗号化した物の頭ニ文字はsaltなのでこうやって使う
$crypted eq crypt($pass, $crypted)
0343nobodyさん
2006/01/05(木) 10:00:36ID:???あ、無視の意味を勘違いしているようなので補足
無視されるのは余分な部分であって全体じゃないよ
abcdef -> a
100 -> 10
0344nobodyさん
2006/01/05(木) 10:02:43ID:???0346nobodyさん
2006/01/05(木) 17:26:03ID:+yKIo2wfレス感謝!
でも
abcdef -> a
の部分は
abcdef -> ab
じゃないの?2文字でしょ?
文字の場合は1字とかじゃないよね?
0348nobodyさん
2006/01/05(木) 18:23:39ID:+yKIo2wfうおぉおぉおぉおおぉぉ!!
自分でちゃんと理解してたーーー!!
ウレシーーーー!!
マジで嬉しい!
>>347さん、本当にありがとうね!
あなたのお陰で、また1つ理解できました。
この感動を今の俺みたいな人に分けてあげたい。
頑張ろっと。
0349nobodyさん
2006/01/05(木) 21:27:34ID:???> 頑張ろっと。
今時 Perl ができる人間なんて、腐る程いますよ。
0350nobodyさん
2006/01/05(木) 21:34:34ID:???0351nobodyさん
2006/01/05(木) 23:39:25ID:+yKIo2wfその腐った人の中に入りたいです!
>>350
初心者。。。?
んー、ごめん。
どういう意味だったのか分からなかったんだけど^^;
0353nobodyさん
2006/01/06(金) 00:41:22ID:???0354nobodyさん
2006/01/06(金) 02:51:26ID:???utf8フラグつける方法ってあるでしょうか。
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlunicode585.html
上記サイトにFetch関数というラッパーが紹介されてましたが、2002年の記事なので
現在はもっとスマートな方法があるのでしょうか。
0356nobodyさん
2006/01/06(金) 04:00:45ID:iupFgDGkすみません^^;
出来る人間にと書けば良かったです!
ご指摘ありがとう!
ここの人たちは優しい人が多いんですね!
ここの住人になりたいです!
0357nobodyさん
2006/01/06(金) 04:50:15ID:???ありがとうございます。できたっぽいです。2日ググり続けました。
DBI->connectのオプションでpg_enable_utf8=>1で自動的にフラグがたつようです。
DBIのドキュメントにも見つけられなく、海外のどこの馬の骨とも分からない人の
ソースからパクッてきただけなので詳細はよく分かりません。詳しいサイトご存知
でしたら教えてください。
0358nobodyさん
2006/01/06(金) 05:35:08ID:???0359nobodyさん
2006/01/06(金) 05:51:05ID:???http://search.cpan.org/~dbdpg/DBD-Pg-1.43/Pg.pm
DBIのconnectの第四引数はDBDに渡されるのよ
各DBD固有のものはDBIのドキュメントをいくら読んでも載ってません
0360nobodyさん
2006/01/06(金) 08:04:41ID:???This attribute is experimental and may be subject to change.
とのことで、使ってる人も少ないんですね。
0361nobodyさん
2006/01/07(土) 00:20:22ID:???sysopenのモードを変数で渡すことはできませんか?
use Fcntl;
my @mode = (O_RDWR,O_CREAT);
sysopen(FH,"file",@mode); #1
sysopen(FH,"file",join('|',@mode)); #2
などとやってみたのですがどうにも渡りません。
直接定数を決め打ちしたり、定数のリストを渡すとうまくいくのですが、配列を渡すとなぜかだめなようです。
検索してみても決めうちの例しかでていませんし、
perldoc sysopenというのもないようで詰まってしまいました…。
0363nobodyさん
2006/01/07(土) 00:55:27ID:???「|」 はビット演算子のorだ。だから文字列でjoinは見当違い。
O_RDWRとかは定数。試しにprintしてみな。
そんな事も知らずにsysopenをどう使うのか疑問だ。
0364nobodyさん
2006/01/07(土) 01:16:56ID:???できました。どうもありがとう。
|がビット演算子というのを知りませんでした。
なんでこんな不思議な記号で区切るのか疑問でしたが、調べ方もわからなかったので為になりました。
リストで渡すと通ったのもO_RDONLYを使ったせいなようで、
展開されて「0256」になったせいで通ってしまったようです。
sysopenを使うのも、ただどこかのサイトで
「入出力を行うだけならばopenよりも安全だ」
というので盲目的に使ってしまっただけで深い意味はありません…。
0365nobodyさん
2006/01/07(土) 03:12:37ID:???Net::FTPを使用して、多数のファイルをアップロードするスクリプトを作りました。
255個目のファイルまでは正常にアップロードできるのですが
256個目のファイルをアップロードする所でputがエラーを返し(0を返す)、正常に送れません。。
(FTPソフトを使えば問題なくアップロードできる)
何か心当たりがあれば、よろしくお願いします。
use Net::FTP;
$ftp = Net::FTP -> new($ftp_server);
$ftp -> login($ftp_id, $ftp_pass);
foreach (@filelist) {
$ftp -> put($_);
}
$ftp -> quit;
0366356
2006/01/07(土) 03:25:30ID:hRPnI9VAコテハンにしようかなと思います。
何か名前を付けてくれませんか!!
0367nobodyさん
2006/01/07(土) 03:27:45ID:???0371nobodyさん
2006/01/07(土) 04:14:13ID:snASfRD40372366
2006/01/07(土) 04:57:39ID:hRPnI9VAちょっと凹み気味です。
あんましいぢめないで下さい!
0373nobodyさん
2006/01/07(土) 05:18:10ID:???http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Remove
この記事に
>複数の処理系の改行コードを想定しなければならない場合は、
>次のようにして文字列の最後の改行を削除します.
>s/\x0D?\x0A?$//;
とありますが、これを
s/\n$//;
としたらまずいですか?
0375nobodyさん
2006/01/07(土) 05:47:04ID:???詳しくは2つ上の「改行コードを統一する」
0377nobodyさん
2006/01/07(土) 12:34:39ID:???試してみたが上手く動いたぞ。ちなみに俺の環境は
ftp鯖: CentOS + vsftpd
ActivePerl5.8.7-build813 WindowsXP からアップロードする
ファイル数 512個 ファイル名は 1,2,3,....512で中身も1,2,3,...512
で、512個すべて問題なくうP可能
とりあえず出力がうざいが、
$ftp=Net::FTP->new($ftp_server, Debug => 1);
とでもしてみたらいいんでない?
0378365
2006/01/07(土) 14:31:54ID:???試していただきありがとうごます。
エラー出力を頼りに調べた所、PASVモードを有効にすれば直るかも
http://www.perlmonks.org/?node_id=137654
ということで
$ftp = Net::FTP -> new($SET{'ftp_server'}, Passive => 1);
と変更したところ、256個目以降のファイルも正常にアップロードすることができました。
お手数掛けましたー。
0379nobodyさん
2006/01/07(土) 18:44:49ID:???エラーと見なされることが発生したら、エラー処理用のサブルーチンに飛んで、
エラーメッセージを表示して終了するようにしています。
その際、dieみたいにどこでエラーが発生したかも表示したいので、
引数でエラー内容と呼び出し元のサブルーチン名を渡しています。
&error('必須項目が未記入', 'submit') if (〜);
sub error {
my ($msg, $where) = @_;
print "Content-type: text/html\n\n";
print "エラーが発生しました。$msg at $where\n";
exit;
}
こんな感じです。ただ、これだと&errorを書くときにいちいちサブルーチン名を
指定する必要があって、面倒です。
何か良い方法はないでしょうか。それとも何か根本的に考え方が間違ってますか?
0380nobodyさん
2006/01/07(土) 19:27:38ID:???http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI/Carp.pod
0382nobodyさん
2006/01/07(土) 22:25:59ID:7MUFvifm<textarea name="comment1" cols="60" rows="10"></textarea>
という文字列が現れたらその文字列を
<textarea name="comment1" cols="60" rows="10">$comment1</textarea>
に置き換えてその行を出力するということを試みています (非該当行はそのまま出力)。
最単純に
$line =~ s|<textarea name="comment1" cols="60" rows="10"></textarea>|<textarea name="comment1" cols="60" rows="10">$comment1</textarea>|;
とやってみましたが、「name=」を含めてその行のみのそれ以降の部分だけ出力されません (以降の行は出力されます)。
このとおり実行はされますが、エラー ログには「name は予約語となる可能性があります。あるいは、name の前にオペレータが抜けてはいませんか。」と残っています。
確かに、$name や $key などは perl で頻繁に使われる語ですが、上記のスクリプト内では $name を使っていませんし、それを使っているようなモジュールも明示的には使用していません。
また、「name=」自体は HTML のフォームに関する属性なので、これの名前を変更はできません。
ちなみに
$line =~ s|"comment1" cols="60" rows="10"></textarea>|"comment1" cols="60" rows="10">$comment1</textarea>|;
や
$line =~ s|<textarea \x6Eame="comment1" cols="60" rows="10"></textarea>|<textarea \x6Eame="comment1" cols="60" rows="10">$comment1</textarea>|;
もやってみましたが、まったく同じ結果に終わります。
推測するに、置き換え行自体に「name=」が現れたら NG のようです。
また、
if ($line =~ |^(.*)"comment1" cols="60" rows="10"></textarea>(.*)$|) {
$line = $1 . "\"comment1\" cols=\"60\" rows=\"10\">" . $comment1 . "</textarea>" . $2;
}
も NG です。
解決策をお願いします。
0383nobodyさん
2006/01/07(土) 22:35:23ID:7MUFvifmとしておいて
$line =~ s|<textarea $attr="comment1" cols="60" rows="10"></textarea>|<textarea $attr="comment1" cols="60" rows="10">$comment1</textarea>|;
としても駄目でした。
前投稿のとおり置き換え文字列には name= が入っていなくても駄目なので、結局、最終的にその行自体に name= があるとすべて駄目なようです。
完全に手詰まりです。
こうしておいて、、、
s/##comment1##/$comment1/;
じゃだめなのかなぁ。。。
もしくは%sにしておいて、、、
sprintf $html_temp,$comment1;
とかとか。
0386nobodyさん
2006/01/07(土) 22:44:54ID:???0387nobodyさん
2006/01/07(土) 22:45:28ID:???0389382-383
2006/01/07(土) 23:06:50ID:5axJGSRV駄目でした。置き換え文字列には含まれなくとも行自体に name= があると駄目なようです。
>>388
そのままです。
あとは、Perl のバージョンやパスが書いてあるだけです。
0390nobodyさん
2006/01/07(土) 23:14:21ID:???あと悪いことはいわないから周りのコード晒せ。
見た感じループ内の処理みたいだからそのループ全体を。
0391382-383
2006/01/07(土) 23:16:51ID:5axJGSRVopen(TEMPLATE, "./template.html");
@lines = <TEMPLATE>;
close(TEMPLATE);
print "content-type: text/html" . \n\n;
for ($i = 0; $i < @lines; $i++) {
$line = $line[$i];
#以下、前記のとおり
print $line;
}
exit 0;
0392382-383
2006/01/07(土) 23:17:57ID:5axJGSRV○ $lines[$i]
0393nobodyさん
2006/01/07(土) 23:18:37ID:???0394382-383
2006/01/07(土) 23:27:41ID:5axJGSRV0395nobodyさん
2006/01/07(土) 23:29:19ID:7SuLco6K最近真面目にそういうお馬鹿スクリプト書く初心者が増えてきたからねぇ…
0396382-383
2006/01/07(土) 23:31:06ID:5axJGSRV0397382-383
2006/01/07(土) 23:32:39ID:5axJGSRV0398nobodyさん
2006/01/07(土) 23:34:23ID:???「初心者なので」というセリフは大嫌いだが、>>391をそのまま実行すると
print "content-type: text/html" . \n\n; でエラー。当然だがね。
0399382-383
2006/01/07(土) 23:35:54ID:5axJGSRVopen(TEMPLATE, "./template.html");
@lines = <TEMPLATE>;
close(TEMPLATE);
print "content-type: text/html\n\n";
for ($i = 0; $i < @lines; $i++) {
$line = $line[$i];
#以下、前記のとおり
print $line;
}
exit 0;
でも先の問題は解決されません。
0400382-383
2006/01/07(土) 23:36:41ID:5axJGSRV0401nobodyさん
2006/01/07(土) 23:37:43ID:???こっちでは再現しないけど。「前記の通り」とかじゃなくてフルに書いてみ?
あとPerlのバージョン含めた実行環境も。
0402382-383
2006/01/07(土) 23:41:59ID:5axJGSRV$comment1 = "";
open(TEMPLATE, "./template.html");
@lines = <TEMPLATE>;
close(TEMPLATE);
print "content-type: text/html\n\n";
for ($i = 0; $i < @lines; $i++) {
$line = $lines[$i];
$line =~ s|<textarea name="comment1" cols="60" rows="10"></textarea>|<textarea name="comment1" cols="60" rows="10">$comment1</textarea>|;
print $line;
}
exit 0;
駄目。
#!/usr/local/bin/perl
$comment1 = "test";
open(TEMPLATE, "./template.html");
@lines = <TEMPLATE>;
close(TEMPLATE);
print "content-type: text/html\n\n";
for ($i = 0; $i < @lines; $i++) {
$line = $lines[$i];
$line =~ s|<textarea name="comment1" cols="60" rows="10"></textarea>|<textarea name="comment1" cols="60" rows="10">$comment1</textarea>|;
print $line;
}
exit 0;
これも駄目です。
template.html の内容と印刷結果は載せなくても大丈夫ですか。
0403nobodyさん
2006/01/07(土) 23:42:28ID:???そうすれば直ぐに答えがかえってくるんだから。
0404382-383
2006/01/07(土) 23:44:11ID:5axJGSRVこれは perl, v5.6.1 built for i386-linux です
0405382-383
2006/01/07(土) 23:46:11ID:5axJGSRV>>402 に書いたのは全行です。
テストなので、これだけしか書いていません。
これだけしか書かないうちに先の不都合が見つかりました。
もっとも、最終的にやろうとしていることはありますが、それらはまだ書いていません。
この問題の解決が先なので。
0406nobodyさん
2006/01/07(土) 23:47:27ID:???0407382-383
2006/01/07(土) 23:48:07ID:5axJGSRV#!/usr/local/bin/perl
$comment1 = "";
open(TEMPLATE, "./template.html");
@lines = <TEMPLATE>;
close(TEMPLATE);
print "content-type: text/html\n\n";
for ($i = 0; $i < @lines; $i++) {
$line = $lines[$i];
$line =~ s|<textarea name="comment1" cols="60" rows="10"></textarea>|<textarea name="comment1" cols="60" rows="10">$comment1</textarea>|;
print $line;
}
exit 0;
0408nobodyさん
2006/01/07(土) 23:48:16ID:???前者も後者も正常に実行できている。ソースを見てもスクリプトの問題とは思えない。
エラーの出方から見てえらく特殊な環境で実行しているようにしか思えない。
perlバージョンだけでなく、OSのバージョンも。
0409382-383
2006/01/07(土) 23:50:31ID:5axJGSRV「雛形の」という意味ですか。
であれば、違います。
雛形で言えば、該当行の下には
</form>
</body>
</html>
などの行もあります。
0410nobodyさん
2006/01/07(土) 23:50:41ID:???コマンドラインで実行できないの?
0411382-383
2006/01/07(土) 23:56:08ID:5axJGSRV0414382-383
2006/01/07(土) 23:58:04ID:5axJGSRVRed Hat Linux 7.2 2.96-118.7.2
0415382-383
2006/01/08(日) 00:00:24ID:0I8ISceR日ごとに書庫化されています。
スクリプトを実行するたびに書庫にログが追加されています。
0416nobodyさん
2006/01/08(日) 00:01:40ID:???RedHat7.2+perl5.6.1で「コマンドライン実行」した結果は?
「name は予約語となる可能性があります。あるいは、name の前にオペレータが抜けてはいませんか。」
なんて表示が日本語で出てくるわけじゃないよな?
0417382-383
2006/01/08(日) 00:02:34ID:0I8ISceR必要なら言ってください。
0418382-383
2006/01/08(日) 00:03:30ID:0I8ISceRFAQ に「当サーバではコンソールの使用を認めておりません。」とあります。
参考になりますか。
0420382-383
2006/01/08(日) 00:05:19ID:0I8ISceRどういうことですか。
0421nobodyさん
2006/01/08(日) 00:10:14ID:???あと自作CGIはローカルに実行環境を持って、そこでテストしてからレン鯖に持っていくのが常識。
で、結論から言うと>>402のスクリプトに異常はない。これでエラーが出てるなら
perl以外の問題である非常に高い。レン鯖の名前を出せるようなら、親切な人が
検証してくれる可能性もあるが。
0422nobodyさん
2006/01/08(日) 00:10:29ID:???市ねってことでしょ。まさか自分のPCにPerlも入れてない?
0423nobodyさん
2006/01/08(日) 00:11:03ID:???0424nobodyさん
2006/01/08(日) 00:18:25ID:???0425nobodyさん
2006/01/08(日) 00:22:07ID:???初心者回答者は答えられない言い訳を質問者に転嫁することが多いですね
0426nobodyさん
2006/01/08(日) 00:22:27ID:???ですが何か?
0427nobodyさん
2006/01/08(日) 00:28:21ID:???0428nobodyさん
2006/01/08(日) 00:29:43ID:???0431nobodyさん
2006/01/08(日) 01:14:47ID:???0432nobodyさん
2006/01/08(日) 01:17:17ID:???0434nobodyさん
2006/01/08(日) 01:17:57ID:???0436382-383
2006/01/08(日) 01:27:57ID:???0438nobodyさん
2006/01/08(日) 01:46:42ID:???ID出してもどうせだれも答えられないんだからID出すこと自体無意味
0439nobodyさん
2006/01/08(日) 01:48:20ID:???初心回答者は自画自賛もお手の物です。
0441nobodyさん
2006/01/08(日) 01:53:13ID:???0442nobodyさん
2006/01/08(日) 01:58:25ID:???0443nobodyさん
2006/01/08(日) 02:00:29ID:???スペースじゃなくて文字が入っていても結果が同じだと言ってるのだから何の解決にもならない
二つスクリプト貼ってるだろ
よく読め
ボケカス
0444nobodyさん
2006/01/08(日) 02:08:37ID:???俺ンとこでも再現した!
0445nobodyさん
2006/01/08(日) 02:09:04ID:???エラーメッセージ嫁
0446nobodyさん
2006/01/08(日) 02:16:12ID:???<HTML>
<BODY>
<FORM action="" method=POST>
<TEXTAREA name="comment1" cols="60" rows="10"></TEXTAREA>
</FORM>
</BODY>
</HTML>
実行結果
<HTML>
<BODY>
<FORM action="" method=POST>
<TEXTAREA
</FORM>
</BODY>
</HTML>
0448nobodyさん
2006/01/08(日) 02:20:40ID:???0450nobodyさん
2006/01/08(日) 02:22:59ID:???モノは出力されてんだから
シェルからでも同じ
0452nobodyさん
2006/01/08(日) 02:24:42ID:???<HTML>
<BODY>
<FORM action="" method=POST>
<TEXTAREA
</FORM>
</BODY>
</HTML>
0453nobodyさん
2006/01/08(日) 02:25:33ID:???みんな優しいのな。
仕事なら自分で解決しろとしか俺は言わんが。
0454nobodyさん
2006/01/08(日) 02:26:06ID:???fedora core 4
0455nobodyさん
2006/01/08(日) 02:26:13ID:???content-type: text/html
<HTML>
<BODY>
<FORM action="" method=POST>
<textarea name="comment1" cols="60" rows="10">test</textarea>
</FORM>
</BODY>
</HTML>
0456nobodyさん
2006/01/08(日) 02:27:15ID:???いったいおまえらにバージョンの差異がわかるのかと(ry
0459nobodyさん
2006/01/08(日) 02:31:00ID:???0460nobodyさん
2006/01/08(日) 02:31:27ID:???0462nobodyさん
2006/01/08(日) 02:32:15ID:???Content-type: text/html
<HTML>
<BODY>
<FORM action="" method=POST>
<TEXTAREA
</FORM>
</BODY>
</HTML>
$comment1 = "test"; # の場合
Content-type: text/html
<HTML>
<BODY>
<FORM action="" method=POST>
<TEXTAREA
</FORM>
</BODY>
</HTML>
0463nobodyさん
2006/01/08(日) 02:32:30ID:???0464nobodyさん
2006/01/08(日) 02:33:42ID:???0465nobodyさん
2006/01/08(日) 02:34:07ID:???というかこいつらのデバッグってただ流せれば終わりなの?
0466nobodyさん
2006/01/08(日) 02:35:39ID:???0468nobodyさん
2006/01/08(日) 02:35:45ID:???$line =~ s|<TEXTAREA name="comment1" cols="60" rows="10"></TEXTAREA>|<TEXTAREA name="comment1" cols="60" rows="10">$comment1</TEXTAREA>|;
$line =~ s|comment1" cols="60" rows="10"></TEXTAREA>|comment1" cols="60" rows="10">$comment1</TEXTAREA>|;
どっちでもダメだわこりゃ
0469nobodyさん
2006/01/08(日) 02:37:44ID:???するぐらいならヒアドキュメントのほうがどれだけいいことか。
0470nobodyさん
2006/01/08(日) 02:38:01ID:???0473nobodyさん
2006/01/08(日) 02:40:19ID:???0474nobodyさん
2006/01/08(日) 02:41:38ID:???0476nobodyさん
2006/01/08(日) 02:43:14ID:???あの質問ではあんなテンプレートあってもなくても意味がないような気がするが
のちのちの完成形ではテンプレートを読み込むというのが絶対条件なら
くずせないだろ、バカチン
0477nobodyさん
2006/01/08(日) 02:44:46ID:???<HTML>
<BODY>
<FORM action="" method=POST>
<INPUT type=text
</FORM>
</BODY>
</HTML>
0478nobodyさん
2006/01/08(日) 02:45:40ID:???0480nobodyさん
2006/01/08(日) 02:47:04ID:???0481nobodyさん
2006/01/08(日) 02:47:22ID:???0482nobodyさん
2006/01/08(日) 02:48:48ID:???仮にそんなことがあるとしてもそんなことが判明しても解決にならない。
formのnameが別の名前に置き換えられないんだから。
0483nobodyさん
2006/01/08(日) 02:50:03ID:???0484nobodyさん
2006/01/08(日) 02:50:31ID:???0486nobodyさん
2006/01/08(日) 02:53:22ID:???全然付いていけない。
オヤスミナサイ。
0488nobodyさん
2006/01/08(日) 02:54:28ID:???つーかエラーじゃないし
0490nobodyさん
2006/01/08(日) 03:03:25ID:???$line =~ s|<TEXTAREA name="comment1" cols="60" rows="10"></TEXTAREA>|<TEXTAREA name="comment1" cols="60" rows="10"></TEXTAREA>|;
0491nobodyさん
2006/01/08(日) 03:08:21ID:???それも試したんだわ
これも試した↓
$line =~ s|comment1" cols="60" rows="10"></TEXTAREA>|comment1" cols="60" rows="10"></TEXTAREA>|;
結果
Content-type: text/html
<HTML>
<BODY>
<FORM action="" method=POST>
<TEXTAREA
</FORM>
</BODY>
</HTML>
どうやらこうやら$lineがnameを含有していて評価部分にnameがあろうとなかろうと$lineを評価してしまうとダメらしい
$lineを評価なしにそのままprintしたときだけテンプレートのすべてがprintされる
0493nobodyさん
2006/01/08(日) 03:15:59ID:???再現しない環境があるんだから
それが大多数ならおかしくないな
perlやosの種類・バージョン・リビジョンの組み合わせは星の数だ
0494366
2006/01/08(日) 04:52:43ID:ekOfQHSyそうなんですか!?知りませんでした。
ご親切にありがとうございます!
質問していいですか?
「data.txt」 という何か書き込みされている テキストファイルがあるとして
open(F,"data.txt");
while(<F>){
chomp;
push(@arr,$_);
}
close(F);
$num = @arr;
$num += 1;
という感じに書き込みした順番付けをしてあって、順番は1から始まる数字なんですが
このスクリプト4行目の「$_」には、行番号がセットされているんですか?
@arrというのは、どの部分を指しているんでしょうか?
CGI&Perlポケットリファレンスには、「$_」は特殊変数と言う事位しか触れられていません。
@arrというのは、「ただのarrという名前の配列」と理解してるんですが、これは大間違いですかね?
0495nobodyさん
2006/01/08(日) 05:04:36ID:Pbsz8/Oh$numは要素の数が入る
最後の行、その他の解釈の仕方があればそれを知りたい
0497366
2006/01/08(日) 05:15:05ID:ekOfQHSyそうなんですか!?知りませんでした。
ご親切にありがとうございます!
質問していいですか?
「data.txt」 という何か書き込みされている テキストファイルがあるとして
open(F,"data.txt");
while(<F>){
chomp;
push(@arr,$_);
}
close(F);
$num = @arr;
$num += 1;
という感じに書き込みした順番付けをしてあって、順番は1から始まる数字なんですが
このスクリプト4行目の「$_」には、行番号がセットされているんですか?
@arrというのは、どの部分を指しているんでしょうか?
CGI&Perlポケットリファレンスには、「$_」は特殊変数と言う事位しか触れられていません。
@arrというのは、「ただのarrという名前の配列」と理解してるんですが、これは大間違いですかね?
0498494
2006/01/08(日) 05:52:31ID:ekOfQHSy早速のアドバイスありがとうございます!
...と言うことは、例えば「date.txt」の中身が
山田太郎,[email protected],\n
鈴木花子,[email protected],\n
佐藤次郎,[email protected],\n
だった場合、具体的に言うと「$_」の最初は
「山田太郎,[email protected]」で、2番目に
「鈴木花子,[email protected]」が来て、3番目に
「佐藤次郎,[email protected]」という順番でセットされていく訳ですか?(ただ\nが抜けただけ?)
これが、@arrにセットされていく訳だから@arr[0]は【山田太郎,[email protected]】という理解なんですがOKですかね?
その後の、「$num = @arr;」という処理の仕組みが詳しく説明できないのですが、
結果は【山田太郎,[email protected]】は【山田太郎,[email protected],1】となっています。
>>495さんは【$numは要素の数が入る】と言われてますが、もう少し噛み砕いてもらえないでしょうか?
「$num」には、「@arr」からどんなデータが渡されているのでしょうか?
0499nobodyさん
2006/01/08(日) 05:59:48ID:???非常に痛々しいが答えてあげる。
「$_」の中身が知りたければprintしなさい。
pushの解釈はそれでおk。
「$num = @arr;」は@arrの要素数、つまり>>498の例の場合は3が入る。
これ以上噛み砕きようがない。その後で1足してるけど意図は不明。
つか書いたのお前だろうがよ。
0501498
2006/01/08(日) 06:08:00ID:ekOfQHSy10行目の
@arr[0]は【山田太郎,[email protected]】は、
$arr[0]は【山田太郎,[email protected]】でした!書き間違えてました!
もう一つ補足です。
僕の中ではまだ仮定なのですが、
「$num = @arr;」という処理は、「@arr」の中身を順番に「$num」に渡す。
「@arr」には3つの変数がセットされていて、それぞれ
「山田太郎,[email protected]」
「鈴木花子,[email protected]」
「佐藤次郎,[email protected]」
そんでもって、それらの名前は「$arr[0]」、「$arr[1]」、「$arr[2]」となると。
>>495さんが言ってた【$numは要素の数が入る】の【要素の数】とは、
「$arr[0]」の「0」の事だったんですかね!
だから、「$num = @arr;」の処理をすると、「1」、「2」、「3」になってる!
と考えれば納得できますけど、この仮定は合ってます?やっぱりダメですか?
0503nobodyさん
2006/01/08(日) 06:16:30ID:???0504nobodyさん
2006/01/08(日) 06:17:27ID:???0505nobodyさん
2006/01/08(日) 06:18:55ID:???0506501
2006/01/08(日) 06:42:29ID:ekOfQHSy#!/perl/bin/perl
require "jcode.pl";
print "Content-type: text/html\n\n";
open(F,"data.txt");
while(<F>){
chomp;
push(@arr,$_);
}
close(F);
$num = @arr;
$num += 1;
print $num;
をやったら、「4」が出ました!
>>499さんが「3」が入るの意味が分かりました!
みなさん、僕のレベルが低くてすみませんでした。
でも、ありがとうございました!
CGI&Perlポケットリファレンスはお勧めだと言われて買ったんですけど、基本と言うか仕組みと言うか、その辺を分かった上で使う物みたいな気がします。
ただ、僕のレベルが低いだけかもしれませんけどね。
やっぱり、perlやphpってのは本だけでやるものじゃなくって、ちゃんと学校行って勉強するべきなんですかね?
>>503
早くこのレベルから抜け出たいです!>>503さんはどれくらいの経歴の持ち主なんですか??やっぱり何年もされてるんですか?
0507nobodyさん
2006/01/08(日) 06:53:18ID:???ネットの情報だけでも一週間あればBBSくらい作れるやつはゴロゴロしてる。
逆に学校で習っても全然理解できないやつもゴロゴロしてる。
要は素質の問題。素質の差を埋めるのは勉強の仕方と、知識を求める意欲。
0508nobodyさん
2006/01/08(日) 07:03:07ID:???安易に2chに頼るヤシは成長しない。
悩んで悩んで悩みぬいてのちに来なさい。
それと、馴れ馴れしくしないでくれるかな?
お前と茶飲み話をするためにここにいるんじゃないんだから。
0509506
2006/01/08(日) 07:14:08ID:ekOfQHSy簡単な掲示板やスケジュール表は作ったりしました!
最初は、本も買ってなかったのでネットで勉強していました。そこで、配布されてたスクリプトを試して、こんな感じにしてみたいなと思ったら少し書き換えて遊んだりしていました。
なので、自分で1から作ったりは出来ませんでしたが、ほんの少しずつ「なんだか、何か分かんないんだけど、何かが分かってきたような気」がしてごくごく簡単なスクリプトを書いてみたら、
Internal Server Errorと何回も何回も出てきて悔しかったですが、やっと画面に文字が出てきた時はかなり嬉しかったんです!!
僕は、プログラムなんて向いてないだろうし、どうせ出来ないんだから...
と思っていたので余計に嬉しかったです!興奮して眠れませんでした!
>>507さんが学校で習っても全然理解できないやつもゴロゴロしてるというのは想像もつきませんが
恥ずかしいけど、僕には学校に行く余裕も無いのでネットと本で勉強して、自分が作りたいようなプログラムなら出来るくらいにはなりたいです。
でも、いつかちゃんとした設計の仕方とかも覚えてみたいので、まずは今の自分が出来ることからやってるという段階です。
>>507さん、みなさん、色々親切にしてくれてありがとうございます。
正直、僕程度のレベルじゃみなさんの邪魔になるだろうし、野次られても全然構いません。
これからはちゃんと自分で調べれることは調べてみてから相談します。無視はこたえるので、野次でも何でも良いから教えてくれたら嬉しいです!!
ありがとうございました。
0510506
2006/01/08(日) 07:24:11ID:ekOfQHSy>安易に2chに頼るヤシは成長しない。
>悩んで悩んで悩みぬいてのちに来なさい。
はい。基本がなっていない為、最初は、数多いかもしれませんが
理解して、ここに来る回数は減らします。努力します。
>それと、馴れ馴れしくしないでくれるかな?
>お前と茶飲み話をするためにここにいるんじゃないんだから。
ごめんなさい。
0511nobodyさん
2006/01/08(日) 07:31:42ID:???0512506
2006/01/08(日) 07:34:13ID:ekOfQHSyありがとうございます。
でも、前に親切な人がコテハン使っても良いこと無いって......??
言われたままに納得してましたが、そうなんですか?
0514512
2006/01/08(日) 07:47:55ID:ekOfQHSyじゃあ、コテハン名乗りたいです!
というか、ここでのコテハンを持ちたいんです。ここの住人になりたいと思ったから!
よかったら、僕に命名してくれませんか
0517nobodyさん
2006/01/08(日) 08:17:21ID:???「ここの回答者は初心者ばかり」って言っていたやつは、
初心者以下だったことがはっきりしたのは収穫だったけど。
0518nobodyさん
2006/01/08(日) 09:48:09ID:???0519nobodyさん
2006/01/08(日) 11:38:52ID:???0520nobodyさん
2006/01/08(日) 12:52:37ID:???0521nobodyさん
2006/01/08(日) 13:15:22ID:Pbsz8/Oh暇ってよりも、みんなはNGワード登録したいだけなんじゃないかなとw
0523nobodyさん
2006/01/08(日) 22:08:51ID:???0524nobodyさん
2006/01/08(日) 22:52:11ID:???移動してもらえると有り難い。
自分の作ったCGIスクリプトをデバッグするスレ
http://pc8.2ch.net/test/read.cgi/php/1011174442/
>>523
【総合】 Webprog板質問雑談スレッド 1
http://pc8.2ch.net/test/read.cgi/php/1131016915/
業界談義、愚痴はプログラマ板へどうぞ。
http://pc8.2ch.net/prog/
0525nobodyさん
2006/01/08(日) 23:06:59ID:Uz3qgn+xA.cgiで入力した出力結果(たとえばヘローワールドとか)を
B.htmlの中に埋め込んで表示したい場合、って
どうやって表示させるのでしょうか?
A.cgi→B.cgiに表示させるのは判るのですが・・・
0526nobodyさん
2006/01/08(日) 23:08:46ID:???0527nobodyさん
2006/01/08(日) 23:14:20ID:???(゚∀。)
0528nobodyさん
2006/01/08(日) 23:17:56ID:???0530nobodyさん
2006/01/08(日) 23:56:33ID:Pbsz8/Oh0531514
2006/01/09(月) 00:40:09ID:YG2ddn0l初心者の質問スレなので、スレ違いの発言は避けます。すみません。
0532nobodyさん
2006/01/09(月) 00:42:41ID:Exqn7RF4その書き方だと「僕は初心者じゃ有りません」ってなっちゃうぞ!
あっ!初心者にも達してないってことなのか!
すみませんでした!!
0533nobodyさん
2006/01/09(月) 00:43:12ID:???0534nobodyさん
2006/01/09(月) 00:59:21ID:DuxY6YkJ自分で調べなさすぎるけど。
0535531
2006/01/09(月) 01:39:57ID:YG2ddn0lあっ、いやそうじゃなくてですね。
僕は初心者には違いありません。
ただ、余計なことを書き過ぎたので必要以上の私語は慎みますと言う意味です。
0536531
2006/01/09(月) 01:58:24ID:YG2ddn0lそこで、僕の理解が正しいのかだけ答えてもらえませんか?
フォームで入力したものをcgiファイルに渡して、それを変数に入れて使うとき
$i=$FORM{'i'};とか、$FORMが$inになってるものとか、$i=$cgi->param('i');みたいなのとかありますよね。
3番目が別物と言うのは何となく分かるんですが、1番目と2番目もやはり違うものどうしですか?
0537nobodyさん
2006/01/09(月) 02:57:25ID:???前者の二つはcgi-lib.plを使って後者はCGI.pmを使っていると見受けられます。
0538nobodyさん
2006/01/09(月) 03:41:58ID:???0539536
2006/01/09(月) 05:18:37ID:YG2ddn0lありがとうございます。
>前者の二つはcgi-lib.plを使って後者はCGI.pmを使っていると見受けられます。
と言う点については、理解しています。(cgi-lib.plやCGI.pmの説明は出来ませんけど^^;)
僕が分からなかったのは、$FORMと$inについてで
両方ともcgi-lib.plをrequireしていますよね?んでも、違う変数にセットしている。と言うのがいまいち理解に苦しんでいたんです。
この2つ(もっとあるのかもしれませんが)を使い分けるような必要性があるから作られていると思うのですが、それはどんな時なのでしょうか?
0540nobodyさん
2006/01/09(月) 05:22:52ID:???cgi-lib.plの中身を見れ。すぐわかる。
そういうことしようとしないですぐ聞いちゃうから呆れられるんだよ。
0541nobodyさん
2006/01/09(月) 05:29:28ID:uNKy5Wkjfor ループを使うときに $i を使う人と $j を使う人が居る
配列に @list を使う人と @arr を使う人が居る
ただそれだけ
難しく考えすぎ
0542539
2006/01/09(月) 06:12:11ID:YG2ddn0lすみません。読もうとしたことはあったんですが、正直、全く読めず僕にはまだ早いのかもと諦めていました。T_T
でも、それも読むべきなんですね。果てしない道のりですね。
ご指摘、どうもありがとうございました!
>>541
そうなんですかー。
あまり難しく考えないで良いとわかって良かったです!
少しずつ、基礎の基礎が分かるようになって行けば、基礎の段階に進めるので
地道に頑張ります。
0543nobodyさん
2006/01/09(月) 09:38:58ID:DuxY6YkJ君ひどすぎるよ。
わからんところがあったら自分で少しは調べろよ。自分で少しは考えろよ。
まず、「Perl 入門」でもググって、Perlの基礎を勉強しろよ。
「初心者以下」っていわれるのはそれすらしてないからだろうが。
しましたとかいうなよ。実際君は基礎的な構文すら理解してないんだから。
わかったら>>1と>>7読め。
0544nobodyさん
2006/01/09(月) 12:25:25ID:???0545nobodyさん
2006/01/09(月) 12:51:17ID:???unixの
perl -e 'print $var, "\n";'
をどう書いたらいいでしょうか。
NG: perl -e "print $var, \"\n\";"
0546nobodyさん
2006/01/09(月) 13:21:44ID:???0547nobodyさん
2006/01/09(月) 13:39:16ID:???0548nobodyさん
2006/01/09(月) 13:43:05ID:???ども。
あれ、それででけた。さっき、だめだったのは何かの間違い。
でも、やっぱcmd.exeでは、かなり面倒ですね。
0550nobodyさん
2006/01/09(月) 16:33:02ID:???知ってれば悩まなくてよかったのにね。
0551nobodyさん
2006/01/09(月) 23:08:44ID:???copalって知ってる? 便利やよ。
ttp://homepage1.nifty.com/kaityo/copalpro/
0552nobodyさん
2006/01/10(火) 03:27:54ID:j2HoU23fプログラムは面白いです。今まで嵌っててここに挨拶に来るのも忘れてました。
>>543
ご指摘ありがとうございます!!
今の僕じゃ何も言えないので、お言葉、だまってありがたく頂戴します。
>>all
あの、ここは初心者の質問スレということなので僕にとって知りたい事を質問させて頂いてたつもりだったんですが
どのレベルなら許されますか?
0553nobodyさん
2006/01/10(火) 04:05:08ID:???0554nobodyさん
2006/01/10(火) 04:15:56ID:NnDCxprG関数を全部覚えろとは言わない。
多用される関数・構文ぐらいは覚えた上での質問を。
とりあえずリファレンスは手元に置いておいたほうがいい
個人的には技術評論社が好き
0555nobodyさん
2006/01/10(火) 04:36:29ID:???ここは「知りたいことを質問する場」じゃなくて
「初心者じゃ手に負えないこと」を質問する場所。
お前のように試行錯誤もしないで疑問を片っ端から
垂れ流す場所じゃ無いってこと。つかお前何歳?
0556nobodyさん
2006/01/10(火) 05:40:00ID:???スルーされることによって、どういう質問なら適切か、答えが返ってくるかって覚えていくもんだろ?
>>555
>つかお前何歳?
思わず笑っちまったがこの質問は無いだろうw
何歳だったら良いって問題じゃないっつーか。
この質問が既に話を聞いてあげる姿勢の現れっつーか。
深みに嵌りかけてますぞ
0558nobodyさん
2006/01/10(火) 09:25:04ID:j2HoU23funshift(@hoge, splice(@huga, 1, 1));
@hugaの1番目だけを、@hogeの先頭にくっつけたいのです。
本の通りなのですができません。
何故なのでしょうか?
0559nobodyさん
2006/01/10(火) 09:37:51ID:???splice @huga, 0, 1
0561nobodyさん
2006/01/10(火) 10:57:13ID:j2HoU23f>>559,>>560
レスありがとうございます。
「splice @huga, 0, 1」も「shift @huga」も、@hugaの1番目のみを削除しているんですよね?
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
っていうファイルを
2,3,4,5
7,8,9,10
12,13,14,15 と変える...?
ちょっと違うような。@hugaから抜いた1番目のものを
@hogeの先頭にくっつけるには
unshiftを使って、<配列の先頭に要素を追加する>と書いてありました。
更にそのまま引用すると
●配列の$i番目の要素を別の配列の先頭に追加する
unshift(@newarray, splice(@oldarray, $i, 1));
(CGI/perlポケットリファレンスより抜粋)
何が間違っているのでしょうか......
0562nobodyさん
2006/01/10(火) 12:06:07ID:???perlの配列は添字が0から始まるので、最初の要素から
0番目,1番目,...とあらわすことがよくあります。ポケット
リファレンスはこの書き方を採用しているようですな。
0563nobodyさん
2006/01/10(火) 12:09:39ID:???> 何が間違っているのでしょうか......
ここ↓
> ●配列の$i番目の要素を別の配列の先頭に追加する
splice の第二引数は配列の先頭からのオフセットなので 0 から始まるのよ。
即ち通常は splice し始める要素の添字と一致する。従って、
> unshift(@newarray, splice(@oldarray, $i, 1));
の動作はその本の記述に合わせると、
「配列の$i+1番目の要素を別の配列の先頭に追加する」
ということになる。
@oldarray から取り除くものが先頭要素に固定されているのなら >>559 の言うように、
unshift @newarray, shift @oldarray;
で等価。
0565563
2006/01/10(火) 12:44:26ID:???おせっかいついでに、
当方は
「あなたがどんな結果を期待しているのか」
「実行したコード」
「実際の結果」
のうちどれひとつとして知らないので、本来は「何が間違っているのでしょうか」と問われても「何かが間違ってるんでしょうねぇ」としか答えられないのですわ。
だから期待した返答がなくても、あるいは期待しなかった返答すらなくても許してね。ぼくがんばったの。
0566nobodyさん
2006/01/10(火) 15:28:44ID:???マジお勧め!
0567nobodyさん
2006/01/10(火) 15:57:35ID:???$namae = 'kansuu';
$bangou = 1;
${$namae . $bangou} = kansuu;
&$kansuu1;
sub kansuu { print 'hoge' }
0568nobodyさん
2006/01/10(火) 16:06:53ID:???0569nobodyさん
2006/01/10(火) 16:24:34ID:???これでOK?
ちなみになぜ&kansuu1;でいいのかいまいちわかってなかったりするw
myとか使ってやってみてるけどデキネorz
#!/usr/local/bin/perl
use strict;
$main::namae = 'kansuu';
$main::bangou = '1';
$main::{$main::namae . $main::bangou} = 'kansuu';
&kansuu1;
sub kansuu { print 'hoge' }
0570567
2006/01/10(火) 16:31:00ID:???それがstrictじゃ無い環境だと勝手に文字列扱いしてくれるんだよね、これが
-wで警告が出るけど、その辺の解釈が微妙だからstrict subsがあるわけだ
my $hoge = func;
sub func { print 'hoge' }
print $hoge;
>>569
ちょ、おまw
>>567はネタで考えられる限りの悪例だぞw
> ちなみになぜ&kansuu1;でいいのかいまいちわかってなかったりする
${$namae . $bangou}ここで$namaeと$bangouを連結した名前の変数、
つまり$kansuu1に代入してるから。
strictに真面目に書くとこう
my $name = 'kansuu';
my $num = 1;
my %hash;
$hash{$name}[$num] = \&func;
&{$hash{$name}[$num]};
sub func { print 'hoge' }
0571nobodyさん
2006/01/10(火) 16:37:22ID:???俺もまさかそのままで通るとは思わなかったw
一応strictになってるっぽいw
あと、$kansuu1に連結して、&kansuu1で呼び出すのはわかるんだけど、
なぜ&kansuu1;でサブルーティン呼び出せるのかがいまいちわからんのだ
0572nobodyさん
2006/01/10(火) 17:11:34ID:???あースマン$がないの読み落としてた
これは、名前空間を直接操作してmain::kansuu1にkansuuを登録しちゃってるから。
$, = "\n";
print keys %main::;
とかやってみるとわかると思う
0573nobodyさん
2006/01/10(火) 17:34:33ID:???ちょっとだけわかってきた気がする
#!/usr/local/bin/perl
use strict;
$main::test = 'yeah';
$main::{$main::test} = 'kansuu';
&yeah;
sub kansuu { print 'hoge' }
これでも呼び出せるって事か
つかややこしいなぁ
初心者の俺には理解の範疇を超えそうな感じだよ
色々試してがんばって消化してみる
0574nobodyさん
2006/01/10(火) 17:34:45ID:NnDCxprG0575nobodyさん
2006/01/10(火) 18:05:03ID:???俺はこのやり取りを見ずに>>573を見ても、
何でだかさっぱりわからなかったと断言できるかも。
普通にsub yeahを探しちゃうだろうし。
0576nobodyさん
2006/01/10(火) 18:07:05ID:???0577nobodyさん
2006/01/10(火) 18:15:52ID:???確かにuse strict;は通るがそういう問題じゃない
0578nobodyさん
2006/01/10(火) 18:15:53ID:???0579nobodyさん
2006/01/10(火) 20:48:46ID:???0581nobodyさん
2006/01/10(火) 23:19:13ID:???Shift_JISコードのCSVファイルを読み込んで、jcode.pl を使ってJISコードに変換してから
ブラウザに吐き出すCGIプログラム(プログラムはJISコード)を作成中なのですが、
1. CSVを読み込む
2. htmlタグ文字のエスケープ(<>&"')
3. JISコードに変換
4. 出力
の場合には文字化けは起こらなかったのですが、2. と 3. の処理を逆
(変換してからエスケープ)にすると文字化けしてしまいました。
これは、JISコードの日本語文字中に、htmlタグ文字(<>&"'のどれか)が
含まれているのが原因という認識でいいのでしょうか?
その回避策として、Shift_JISの状態でエスケープをするのは問題ないでしょうか?
(Shift_JIS の場合は「\」が入る文字があるのは認識してますが他にも含まれる文字があればマズイですよね…)
ご教示いただけると幸いです。
0582nobodyさん
2006/01/10(火) 23:27:58ID:???> これは、JISコードの日本語文字中に、htmlタグ文字(<>&"'のどれか)が
> 含まれているのが原因という認識でいいのでしょうか?
そのとおり。どれかどころか全部含まれる
> その回避策として、Shift_JISの状態でエスケープをするのは問題ないでしょうか?
その五つの文字に関してはShift_JISの範囲外だから問題ない。
良く知られている\のほかにも色々な文字が範囲に入っているので
EUC-JPに変換したほうが良いこともある。
ここを見ると良く解ると思う
ttp://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/kanjicod.html
0584581
2006/01/11(水) 02:32:30ID:???レスありがとうございます。
JISコードの場合は <>&"' が全部出てくる可能性があるんですね。
非常に勉強になります。。
ちなみに、タグ文字をエスケープ(< など)で現れる
セミコロンは自体は大丈夫でしょうか?
(日本語の1byte目とくっついて文字化けなど)
とりあえずはSJISのエスケープでやってみます。
ありがとうございました。
0585nobodyさん
2006/01/11(水) 03:01:58ID:???範囲内にあるかは>>582のページと適当なASCIIコード表をつき合わせればわかる。
ttp://adlib.rsch.tuis.ac.jp/~akira/lect/softa/ascii.html とか
--------------------------------81=====9F---------------E0=====FC-: SJIS全角 上位
----------------40=============================================FC-: SJIS全角 下位
に対しセミコロンは3Bで範囲外
そもそも、範囲内だったしてもamp;のように1byte目となる位置は必ずアルファベットでしょうが
0586nobodyさん
2006/01/11(水) 09:19:18ID:???これは絶対外せないルールなのか?
0587nobodyさん
2006/01/11(水) 10:05:55ID:CQ4aDWhiこのCGIをダウソしたんですが、CGIを設定することができずに困ってます
とりあえずウェブスペースにうpしたら「500 Internal Server Error」と表示されました
どなたかお願いします
0588nobodyさん
2006/01/11(水) 10:41:24ID:???0589587
2006/01/11(水) 10:49:16ID:???このあたりの設定も満足にできていません
>>588
たぶん自分のコーディングミスだと思います
0590587
2006/01/11(水) 10:56:49ID:???ここに設置しようと思ってます
0591nobodyさん
2006/01/11(水) 11:22:37ID:???0592nobodyさん
2006/01/11(水) 12:01:21ID:???0593587
2006/01/11(水) 15:39:23ID:CQ4aDWhi薄々聞く場所を間違えたのではないかと思っていましたが
お邪魔しました
他をあたります
レスありがとうございました
0594nobodyさん
2006/01/11(水) 18:11:07ID:???use strict;
use warnings;
use utf8;
binmode(STDOUT,':encoding(shiftjis)');
use LWP::UserAgent;
my($ua,$req,$res);
$ua = LWP::UserAgent->new;
$ua->timeout(10);
$req = HTTP::Request->new( GET => $ARGV[0] );
$res = $ua->simple_request($req);
この状態で$res->header('Content-Type')を出力するとなぜか二重になって返ってきます。
例えばYahooにアクセスさせて出力すると
text/html;charset=euc-jptext/html; charset=euc-jp
なんて文字列が返ってきます。
これはおかしいと思うのですが、なにか間違えていますか?
HTTP::ResponseはActive Perl 5.8.7についてたやつで、バージョン1.52です。
0595nobodyさん
2006/01/11(水) 18:12:22ID:???$iにはmyとかつけてあげた方が負荷的には少なかったりする?
再利用されるならグローバル変数でも問題なさそうな気がするけど、
こういう所って負荷を気にするならどうするのかなとちょっと質問。
もっと気をつけるところはあるんだろうけど、とりあえずやれるだけはやっておきたいので。
0596nobodyさん
2006/01/11(水) 18:27:30ID:???0597nobodyさん
2006/01/11(水) 18:50:18ID:???0598nobodyさん
2006/01/11(水) 18:55:27ID:rynIEcBA0599nobodyさん
2006/01/11(水) 18:59:22ID:???0600nobodyさん
2006/01/11(水) 19:07:41ID:???リダイレクトを自動的に処理させたくないのでsimple_requestを使っています。
また $ua->get をつかっても、やはりContent-Typeが二重になって返ってきます。
今気がつきましたが、Googleにアクセスすると完全に二重ではなく
text/htmltext/html; charset=Shift_JIS
という、すごい中途半端な感じになります…。
0601nobodyさん
2006/01/11(水) 19:14:24ID:???ってしたらリダイレクトされんと思うが
0602nobodyさん
2006/01/11(水) 19:26:15ID:???それリスト ("text/html", "text/html; charset=Shift_JIS")
as_stringでprintしてみ
0604nobodyさん
2006/01/11(水) 19:48:01ID:???そうすればgetメソッドでもできましたか。
しかし、個人的に見た目にすぐわかるのでsimple_requestを使っておきます。
>602-603
なるほど。リストでしたか。
解決できました。本当にどうもありがとう。
META要素も読んでいるのですか?
HTTP関係のモジュールは継承がすごくてどのモジュールをperldocすればいいのか…。
0605nobodyさん
2006/01/11(水) 19:54:11ID:???use utf8;
意味解って使ってるか?
0606nobodyさん
2006/01/11(水) 20:20:40ID:???はい、スクリプト中のリテラルをすべてUTF-8として扱い、
それらをUTF-8フラグ付き文字列に変換するということですよね。
今回のスクリプトではマルチバイトの文字がないので意味はないですが、
よく、スクリプトを作るに出力するエンコードをbinmodeですぐ変換できるようにつけていました。
その習慣で今回もつけてしまいました。すいません。
0607nobodyさん
2006/01/11(水) 20:59:00ID:???use encoding 'utf8';
じゃないのか? まぁどっちでもいいのかもしれんけど。
use utf8;
$useutf8したからこんな変数名も使える = '中身';
print $useutf8したからこんな変数名も使える;
exit;
0608nobodyさん
2006/01/11(水) 21:19:14ID:???> META要素も読んでいるのですか?
LWP::Protocol::httpがLWP::Protocolのcollect()を呼び出していて、
そこでHTML::HeadParserをrequireしてる。
0609nobodyさん
2006/01/11(水) 22:10:05ID:???encondingプラグマはスコープがグローバルなはずなので、
他のエンコードで書かれたモジュールで問題が起きませんか?
マルチバイト使ったモジュールなんかそう無いので気にする必要ないかもしれませんが、
自分で何か作った時に、「した覚えがないのにUTF-8化されている」のはなんかハマる気がします…。
>>608
LWP::UserAgentからちょっと呼んでみました…。
…私には荷が重いようで…。
よくわからないので、headerメソッドの第1要素を使っておきます…。
どうもありがとうございます。
0610nobodyさん
2006/01/12(木) 01:27:01ID:???CGI を書くときには 有名なとほほさんの http://www.tohoho-web.com/cgi/wwwperl.txt のように
環境変数を直接読むのが普通です。
ただ、近頃は、CGI.pm を使うの方法も増えているようです。
でも、聞いた話によると、CGI,pmを読み込む分、環境変数を直接扱うより遅くなるそうですし、
使えない環境もあるそうです。
なんか、CGI.pmのマニュアル見ても難しそうだし、結局、CGI.pmを使うメリットというのは何なのでしょう?
0611nobodyさん
2006/01/12(木) 01:31:28ID:???バイナリかよ、って笑っちゃうぐらい
今は物好きしか使ってないんじゃない?
0612610
2006/01/12(木) 01:40:26ID:???環境変数直接扱い → CGI.pm
と変わってきたけど、結局、今はまた環境変数直接扱いの方が見直されてきたということで良いんでしょうか?
0614nobodyさん
2006/01/12(木) 07:19:00ID:???パフォーマンス的に問題が無ければ
何も考えないでCGI.pm使っておけば問題ないよ
0615nobodyさん
2006/01/12(木) 07:28:05ID:???0616nobodyさん
2006/01/12(木) 07:42:43ID:???逆を言えば、パフォーマンス的に問題があるかどうかわからない場合、CGI.pm使わない方が良い?
0617nobodyさん
2006/01/12(木) 07:59:39ID:???1日に何万ヒットもあったりレン鯖でCPUやメモリの制限に引っかかるようだったら
自前で用意したりカスタマイズしたほうが良いんじゃない
単純にデコードだけしたいんならCGI::Liteでもいいんじゃね?
結局はケースバイケース
0618nobodyさん
2006/01/12(木) 08:07:57ID:???パフォーマンスに困るぐらいのアクセスがあってから言えってんだ。
0619nobodyさん
2006/01/12(木) 09:08:02ID:???いや、俺のことだが。
0620nobodyさん
2006/01/12(木) 12:42:21ID:???0621nobodyさん
2006/01/12(木) 12:48:54ID:???初心者のうちは。
0622nobodyさん
2006/01/12(木) 13:25:04ID:???なんて言っても、痛い目を見ないと分かってくれないわけだが。
0625nobodyさん
2006/01/12(木) 14:41:25ID:???フォームをパースするだけにしか使わんから
自作した
0626nobodyさん
2006/01/12(木) 14:47:32ID:fUom/aNQ%COMMENT = (1 => "未設定", 2 => "重要", 3 => "ビジネス", 4 => "個人用");
%CLASS = ("#602000" => "none", "#FF0000" => "important", "#008040" => "business", "#0000BB" => "personal");
こんなハッシュがある状態で、
$color = "#008040";
という変数を使って、
%COMMENTの"ビジネス"を取得って可能でしょうか。
0627nobodyさん
2006/01/12(木) 14:51:45ID:???0628nobodyさん
2006/01/12(木) 15:07:23ID:fUom/aNQハッシュのキーと値をペアで取り出せるeach関数なんていうのがあったんですね!
%VALUE = (1 => "#602000", 2 => "#FF0000", 3 => "#008040", 4 => "#0000BB");
%COMMENT = (1 => "未設定", 2 => "重要", 3 => "ビジネス", 4 => "個人用");
%CLASS = ("#602000" => "none", "#FF0000" => "important", "#008040" => "business", "#0000BB" => "personal");
$color = "#008040";
while (($key, $value) = each (%VALUE)) {
if ($color eq $value) {
while (($new_key, $value) = each (%COMMENT)) {
if ($key eq $new_key) {
$comment = $value;
}
}
}
}
print $comment;
ありがとうございました。
0629nobodyさん
2006/01/12(木) 18:06:27ID:???例えばこう内側のループが消えるように。
while (($key, $value) = each (%VALUE)) {
if ($color eq $value) {
$comment = $COMMENT{ $value };
last;
}
}
0630nobodyさん
2006/01/12(木) 18:07:26ID:???$COMMENT{ $value }; → $COMMENT{ $key };
0631nobodyさん
2006/01/12(木) 18:36:39ID:???{
my %temp = reverse %VALUE;
$comment = $COMMENT{$temp{"#008040"]}
}
が楽だと思う。
0632nobodyさん
2006/01/12(木) 19:21:41ID:Xjv4jYTd更新めんどくてperlでhtmlファイル管理、生成のプログラム書いてみたんだけど、なにせド素人なもんで、そんで質問以下の構造のモノって鯖に負担になりますか?
-------------
上:ヘッダ一部、トップlogo部分
左;左メニュー、左メニューに日記の新着記事、左メニュー広告欄
中:中央センター上部広告、本文(※)、フッタ
右:右リンクメニュー、右メニューの広告欄
部品的に見てこれらでレイアウト(構成)されてるサイトなんですが「本文(※)」以外は、全ページの共通表示部分になるのです。
要するに、サイト全体の共通部分を上記の様に部品別に.logでバラバラに保存してそれをCGIでHTML生成する時に、上記の部品を一回一回読み込んで、配列に代入して、printで出力。
本文は別のログに保存してあって、それだけブラウザで編集可能、それも同時に読み込んで行って、htmlとして出力される作り。
本文が保存されているlogファイルは、数十ページの本文内容を、件名<>本文<>etcの様に、<>で区切って、改行別に保存(ページ数が増えるとドンドン重たくなる)
で、問題はここから★
サイト全体でページ数が200〜300ぐらいになるのです。(更新すりゃもっと増加)
こう言った作りだと、共通表示部分、例えば、「左メニュー.log」のコンテンツへのリンクを変更すれば、サイトのページ300ファイルを全部更新(html生成)し直さなくちゃいけない訳です。
ちなみに300ファイル一気に生成するわけではなくって、同じスクリプトを複数設置しているのでサイトのテーマ別、例えば「サイト案内」のコンテンツだけで10ファイルあって、
それらを複数のスクリプトで計300ファイル程度を生成する作りです。
なにせド素人なもんで、変な無鉄砲なモノした組めないです。情けない
これって、とゆうか、配列の乱用?と計、数メガにのぼるhtml生成って負担になりますか?
なんか自分で書いてて、何がなにやらよく分からん様になってきた。アホ文失礼。orz
0633nobodyさん
2006/01/12(木) 19:24:13ID:vLiWBj2uそれともっと簡潔に
でなきゃサイトを晒すか・・・
0634nobodyさん
2006/01/12(木) 19:32:13ID:???> 本文が保存されているlogファイルは、数十ページの本文内容を、件名<>本文<>etcの様に、<>で区切って、改行別に保存(ページ数が増えるとドンドン重たくなる)
本文が再帰してるように読める
0635nobodyさん
2006/01/12(木) 19:33:31ID:???ここが意味不明。
1つのHTMLファイルが数メガになるのか?
0636nobodyさん
2006/01/12(木) 19:50:39ID:vLiWBj2uログファイルは月ごとぐらいで更新する (といっても1年で1000ページとか行かないだろうから1年あたり1つのログでいいかも)
(ただそのファイルがぶっ飛んだらその年のページが全部飛ぶことになるので月ごとが安全っちゃ安全か)
ページ (行ね) には必ず ID を割り振る
これを条件として、CGI には テーマ ID、ログファイル名、ページ ID を渡す
ページ ID が取得できなければそのログ一覧を。
ログファイル名が取得できなければログ一覧 (各月の一覧か隔年の一覧なのかは自分で決めてね)
テーマ ID が取得できなければテーマ一覧を表示する。
こうすればページあたりのヒット数とか、テーマ別ヒット数とかが用意に取得できるようになる
0637nobodyさん
2006/01/12(木) 19:51:47ID:vLiWBj2uディレクトリで分けてもいいな
./テーマ ID /ログファイル
んでテーマ ID とするディレクトリにテンプレート用 HTML を置いておくとか
0638nobodyさん
2006/01/12(木) 20:47:10ID:???というかクエリー取得のためだけに CGI.pm 使ってる人って十中八九
「なんちゃってモジュール使っちゃってます厨」
でしょ。
おまえら資源のムダだから大人しく自分で車輪の再発明してろと(ry
0641nobodyさん
2006/01/12(木) 23:14:10ID:???普通にblog使ったら?
今あるデータをコンバートする方向で。
システム作るより、コンバータ書いた方が楽だと思う。
どういうデータにしたら良いかは、実際にここログとか無料のblogに入ってみて、
データを書き出してみれば分かるはず。
その形式で出力するように、今あるデータに対するフィルタを書く。
0642nobodyさん
2006/01/12(木) 23:14:14ID:pW3y8Hzchttp://hoge.com/ho/ge というのと hoge.com/hoge/ge が両方
<a href="http://hoge.com/ho/ge">hoge.com/ho/ge</a> というリンクになる
変換をしたいと思います。 これを正規表現で一発でやるというのは出来るのでしょうか?
0643nobodyさん
2006/01/12(木) 23:17:32ID:vLiWBj2u0644nobodyさん
2006/01/12(木) 23:19:36ID:???正規表現で処理する以前に、
hoge.com/hoge/ge
がURLであるかどうか、判断できないような…。
www*.hoge.com/hoge/ge
とかならURLと見なして処理することも出来るだろうけど。
0645nobodyさん
2006/01/12(木) 23:24:33ID:???サーバー側でやるような処理じゃないよ。ローカル側で処理すべき。
そもそも300ファイルすべてに左メニューとか右メニューとか必要なの?
上部に1本、パンくずリンクでもあれば済むんじゃないの?
なんの情報も生まない、しかも広告入りのメニューが左右を延々占領するのもかなわん。ユーザビリティの履き違えかエロサイトの仕様だ。
0647nobodyさん
2006/01/13(金) 00:08:31ID:???くらいで大雑把にとか。
0649nobodyさん
2006/01/13(金) 00:29:47ID:42x/OYc6テンプレみたいなあげ足取りですね
0650nobodyさん
2006/01/13(金) 00:30:59ID:???0651nobodyさん
2006/01/13(金) 00:35:03ID:???おまえらどこでそんな中途半端なモジュールの使い方覚えてきたのかと。
0652nobodyさん
2006/01/13(金) 00:37:15ID:???0653nobodyさん
2006/01/13(金) 00:41:22ID:???$domain = '[\w\-]+\.[\w\-\.]+';
$path = '\/[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+';
s/(http:\/\/|\b)($domain($path)?)/<a href=\"http:\/\/$2\">$2<\/a>/g;
0654nobodyさん
2006/01/13(金) 00:47:54ID:???0655nobodyさん
2006/01/13(金) 00:51:26ID:???ちゃんと取得できてるのか確認しながらコーティングするとこうなるんよ
0656nobodyさん
2006/01/13(金) 01:00:29ID:???0658nobodyさん
2006/01/13(金) 01:14:20ID:???0659nobodyさん
2006/01/13(金) 01:25:35ID:???正規表現で出来そうだけど、俺には無理w
0660nobodyさん
2006/01/13(金) 01:59:59ID:???普通にリンクされるならまだいいけど、@以前が切れる。
[email protected]ならfoo@<a href="http://example.com">example.com</a>みたいに。
0661653
2006/01/13(金) 02:23:13ID:???対処おk。
$domain = '[\w\-]+(\.\w[\w-]*\w)+';
$path = '\/[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+';
s/(http:\/\/|\s)($domain($path)?)/ <a href=\"http:\/\/$2\">$2<\/a>/g;
ドメイン名のそれぞれの部分は一文字より多いという姑息な手段で対処。
0662nobodyさん
2006/01/13(金) 02:32:04ID:???TLDがないと色々誤爆しそうなので幾つか勝手に固定。
http://user:[email protected]/ みたいものまでは考えないことにする。
my $regex_http = q{(?:h?t?t?p?:?//|(?<![@\w\-./]))([\w\-.]+(?:com|net|org|jp)/?[\w\-.!~*'();\/?:\&=+\$,%#]*)};
s|$regex_http|<a href="http://$1">http://$1</a>|g;
0663653
2006/01/13(金) 03:26:13ID:???ありがとうございます。 一生懸命読解を試みました。 (?:)とか(?<!)等は探して理解しました。
なるほど、玄人な道具ですね。 それから正規表現を|でくくると中でいちいち/をエスケープ
しなくていいというのも便利な技で参考になりました。 それからURLに使われる特殊
文字ってもっとあったのですね。
1つ質問。q{}ってなんでしょうか? ある種のクオートな気がしますが記述を
見つけられませんでした。
0664nobodyさん
2006/01/13(金) 03:33:08ID:???クォートとクォートのような演算子
ttp://namazu.org/~tsuchiya/perl/info/perl-ja_44.html#SEC44
0665nobodyさん
2006/01/13(金) 05:21:58ID:???flock(LOG, LOCK_EX);
@alldata = <LOG>;
close(LOG);
foreach $data (@alldata){
中略
}
print "<p>完了しました。</p>";
という構文で、ファイルの各行の文字列を読み取って、処理を行う、という動作をさせ、
終了時に「完了しました。」の文字列を表示、という風にしているのですが、
ファイルの行数が少なかった頃は何の問題もなく処理を完了していたのですが、
800行を超えた辺りから、「完了しました。」の文字を表示しないこともあります(ブラウザは完了したような振る舞いをします)。
また、処理の結果を見ても、ファイルの途中までしか処理されていないようです。
恐らくforeach文の回数が多すぎるからだと思うのですが、何か対処法は御座いませんでしょうか?
お教え下さいますようお願い致します。
0666nobodyさん
2006/01/13(金) 09:05:02ID:???コマンドラインでもダメってこと?
まさかレン鯖で実験してたりしないだろうな。
レン鯖だとしたら時間でプロセス切られてるだけだと思うが。
0667nobodyさん
2006/01/13(金) 13:00:33ID:???正規表現には qr// を。
http://perldoc.jp/docs/perl/5.6.1/perlop.pod#item_qr_STRING_imosx
0668nobodyさん
2006/01/13(金) 19:51:25ID:???http://2ch-eva.under.jp/uploader/file/src/up0018.txt
ftpにも対応しようとしたが挫折。ていうか正規表現でやることじゃないな。
というかこんな未熟な俺にも言わせてほしいことといえば
キャラクタクラスの中で \ 使うなよと。
# なんで\dじゃなくて[0-9]なんて書いてるんだorz
0670nobodyさん
2006/01/13(金) 21:05:28ID:???今度は中途半端に\d使ったことが…… orz
0671nobodyさん
2006/01/14(土) 00:23:37ID:???どうしても配列に格納しなけりゃならんのでなけりゃ、以下を試してみないか。
while (<LOG>) {
# 何ぞ処理
}
0672nobodyさん
2006/01/14(土) 00:49:22ID:???# 設定ファイル settei.pl
$CFG_HOGE=1;
$CFG_MOGE=2;
1;
#!/usr/local/bin/perl
require 'setttei.pl';
print "hoge=$CFG_HOGE, moge=$CFG_MOGE\n";
さて、これでuse strictを付け加えるとCFG_*変数に対してエラーが出ます。 そこで両方の
ファイルでmyとしたら設定はプログラムの方では見えないんですね。 こういうことを
use strict
で行うのはどうすればいいのでしょうか?
0673nobodyさん
2006/01/14(土) 00:52:41ID:???なんてこといってるとどうしょうもなくなるか。
パッケージとか名前空間とかで検索してみな。
0674672
2006/01/14(土) 01:50:37ID:???ありがとうございます。 模索してみました。
トライ1:
すべての$CFG_*を$main::CFG_*にする。 これでコンパイル出来、前と同じ振る舞いになりました。
しかしmain::だらけでうっとうしい。
トライ2:
settei.pl の頭にpackage main;と加える。 main::はsettei.plの中は無し。
こうしてメインで$main::CFG_*と参照すればやはり機能しました。
しかしメインで直に$CFG_と参照するように出来る方法が分かりませんでした。 メインで
my $CFG_* と宣言するとsettei.plでされた設定はメインでは見えませんでした。
う〜ん、よく分からん。
0675672
2006/01/14(土) 02:11:55ID:???こんなのはどうでしょうか。 今までCFG_と付けてたのをやめてsetttei.plは
package CFG;
$HOGE=1;
$HOGE=2;
1;
そしてメインではこれらを$CFG::HOGE, $CFG::MOGEで参照。 これが綺麗かな?
0676nobodyさん
2006/01/14(土) 02:44:14ID:???#--- MyConf.pm ---
package MyConf;
use strict;
use base 'Exporter';
our @EXPORT = qw($Foo $Bar);
our($Foo, $Bar) = (1,2);
1;
__END__
#!/usr/local/bin/perl -w
use strict;
use MyConf;
print $Foo, $Bar;
__END__
0677nobodyさん
2006/01/14(土) 03:24:19ID:???◆ config.pl
my(%config) = (
'fuga' => 1,
'hoge' => 2,
'gagaga' => "SEGA"
);
sub returnconfig{
return %config;
}
◆ main.cgi
require 'config.pl';
my(%config) = &returnconfig();
print $config{'fuga'};
わざわざ呼ばなきゃいけない&同じ内容がメモリ内に2つ存在するので効率悪いっちゃ悪いですが・・・
0679nobodyさん
2006/01/14(土) 03:43:59ID:???#--- config.file ---
use strict;
{
foo => 1,
bar => 2,
baz => [ 'a'..'z' ],
};
__END__
#!/usr/local/bin/perl -w
use strict;
my $conf = do '/path/to/config.file' or die;
print $conf->{'baz'}[7];
__END__
>>678
設定ファイルを Perl で書ける。
0681nobodyさん
2006/01/14(土) 04:44:08ID:???#--- 設定
package Setup;
use strict;
sub get{
bless( {
foo => 1,
hoge => 2,
array => [1,2,3]
} , $_[0] );
}
1;
__END__
#!/usr/local/bin/perl
use strict;
use Setup;
my $setup => Setup->get;
print $setup->{'foo'};
print $setup->{'array'}->[0];
__END__
0682nobodyさん
2006/01/14(土) 05:58:58ID:???>>666
レン鯖です。
やはりタイムアウト的な処理でしたか。
それを避ける方法は御座いますでしょうか?
>>671
open(LOG,"$datfile");
while ( $data = <LOG> ) {
処理
}
close(LOG);
であってますでしょうか?
0683nobodyさん
2006/01/14(土) 06:19:45ID:???処理がどんなことしてるかは知りませんが、たかだか 800 行程度でタイムアウト起こすような
貧弱サーバーそのものの利用を考えたほうが良いのではないのでしょうか?
>671
個人的には foreach の方が perl らしくて好き
foreach my $logline (<LOG>){
〜処理〜
}
0684nobodyさん
2006/01/14(土) 06:32:02ID:???0685nobodyさん
2006/01/14(土) 08:03:10ID:???自分は 682 さんではありませんが、1つ勉強になりました。
thx
0687nobodyさん
2006/01/14(土) 09:37:38ID:???0688nobodyさん
2006/01/14(土) 09:39:12ID:???リンクを踏むと、メーラーが立ち上がるようになっています。
が、mailto: に subject と body を含めて、かつ body には改行を含めたいのですが、どうしてもエラーになってしまいます。
以下を含める場合、どのように書けばよいのでしょうか ?
<持込に関して> ← subject
↓本文
@お名前[改行]
@ご住所[改行]
@お電話番号[改行]
<問い合わせ内容詳細>
ソースは ShiftJISになっています。よろしくお願いします。
0689nobodyさん
2006/01/14(土) 09:39:30ID:???use LWP::Simple;
$url = 'http://girls.twistys.net/preview/';
for ($i=1; $i<=3; $i++) {
$num = sprintf("%03d", $i);
$_ = get($url.$num."/");
s/\w*\d{1,2}\.jpg/push @jpgs, $&/eg;
foreach $jpg (@jpgs) {
getstore($url.$num."/".$jpg, $num.$jpg);
}
}
0690nobodyさん
2006/01/14(土) 10:13:25ID:???このスレの質問じゃねぇし
http://www.ring.gr.jp/pub/doc/RFC/rfc2368.txt
mailto:[email protected]
?subject=%8E%9D%8D%9E%82%C9%8A%D6%82%B5%82%C4
&body=%40%82%A8%96%BC%91O%5B%89%FC%8Ds%5D%0D
%0A%40%82%B2%8FZ%8F%8A%5B%89%FC%8Ds%5D%0D%0A
%40%82%A8%93d%98b%94%D4%8D%86%5B%89%FC%8Ds%5D
%0D%0A%3C%96%E2%82%A2%8D%87%82%ED%82%B9%93%E0
%97e%8F%DA%8D%D7%3E
上を一行に合わせれ
0691nobodyさん
2006/01/14(土) 10:43:53ID:???> 処理がどんなことしてるかは知りませんが、たかだか 800 行程度でタイムアウト起こすような
その行について、どんな処理をしてるかわからないのに800行で判断する、っていうのはどうかと。
行数で判断するんだったら7万行で、に置き換えてください。そして、タイムアウトするのを避ける方法を教えてください。
なんかコンビニバイト風情が、肉体労働者に「一日働いただけで疲れるのはどうかと」って言ってるのと同じかな
0692nobodyさん
2006/01/14(土) 10:56:45ID:???> 〜処理〜
> }
こんな処理を800行「程度」を越える量書くとは…… 俺のレン鯖にいないことを願おう。
0693nobodyさん
2006/01/14(土) 10:57:54ID:???せめて70万行とかさ
0694nobodyさん
2006/01/14(土) 11:32:10ID:???ありがとうございます。
実は、同じようにURLエンコードして、おっしゃられたように入れてみたのですが、エラーになってしまうんです。
元に戻すとサーバエラーはでなくなるので、記述の仕方がどこか違うようなんですが
perl の独特な記述の仕方があるのかと思って書き込ませて頂きました。
0695nobodyさん
2006/01/14(土) 11:33:21ID:???0696nobodyさん
2006/01/14(土) 11:50:37ID:???多分、ダブルクオートで囲って @ や % が変数に展開されてるに一票。
0697nobodyさん
2006/01/14(土) 12:07:44ID:???別にforeachでも問題なかろう。
それで問題が起きるなら、それこそ鯖が貧弱。
0698nobodyさん
2006/01/14(土) 12:14:40ID:???見直すしかないでしょ
データの量(行数だけでは分からないだろ)も処理の内容も
分からねーのに、何か教えてほしいなんて無理
0699nobodyさん
2006/01/14(土) 12:36:49ID:???馬鹿のプロセス切るのは「鯖が貧弱」
だからじゃなくて管理がしっかりしてるからでしょ。
「問題」じゃまったくないし。
まぁ実際 32kb で切ってたら別の問題だけどね。
お前は書かないほうがいいよ。
0700nobodyさん
2006/01/14(土) 12:53:21ID:???∩___∩
| ノ ヽ/⌒)
/⌒) (゚) (゚) | .|
/ / ( _●_) ミ/
.( ヽ |∪| /
\ ヽノ /
/ /
| _つ /
| /UJ\ \
| / ) )
∪ ( \
\_)
0701nobodyさん
2006/01/14(土) 12:56:32ID:???使っているサーバがエラー番号などが出ない仕様なんです。
「サーバエラーが発生しました…」という文章しか出ないので。
確かにダブルクォートで囲って有ります。$vout に代入されているようなんですが…。
その場合はどうすればいいでしょうか ?
0702nobodyさん
2006/01/14(土) 13:23:01ID:???よいこの約束
0703nobodyさん
2006/01/14(土) 15:29:20ID:???ログが十分に小さければ、foreachとwhileの違いだけで、変わる状況なんて無いね。
仮に、それで問題が起きるなら、プロセス辺りのメモリ割り当てが
かなり小さいぐらいしか考えられない(鯖が貧弱)。
ってことなんだが(苦笑)。
4年書き続けてきたけど、もうだめぽか、ここも。
0704nobodyさん
2006/01/14(土) 15:36:47ID:???0706nobodyさん
2006/01/14(土) 16:33:57ID:???他人の管理下にあるサーバで実験しない。自分が動かしているサーバで
実験すれば、そのログを見てデバッグできる。
>>1に書いてある通り、エラーの内容も貼れないんじゃ質問以前の問題だ。
>>703
4年もいるんだったらスルーすることぐらい覚えろよ。
0707nobodyさん
2006/01/14(土) 18:00:04ID:???とか書いてある時点でダメに決まってるじゃん。
それとも4年前からこんな感じだったの?
0709nobodyさん
2006/01/14(土) 19:59:22ID:???普通こうする。読み込みなら文句なしに最強。
> foreach( @FILE )
いわずと知れたKEMT仕様。そして何故か入門者ご用達。
でも頻繁に書き込み(書き込みロック)が必要な場合好んで使う人も。
> foreach( <$FH> )
謎仕様。ファイル開きっぱなしで配列展開。KEMTもびっくり。
0711nobodyさん
2006/01/14(土) 21:02:12ID:???それでも逐次読み出しか一気にメモリに読み出してしまうかに大別できるでしょ
多分。
0712nobodyさん
2006/01/14(土) 21:10:27ID:???リファラのログを取ってて最大件数500件で、501件目が来たら古いリファラは削除して新しいリファラを追加するって処理の時に
現在が何件のログが貯まってるかを調べる時にはwhileだと一旦最後までループさしてカウンタをカウントアップさせて総数を得て、
その次にまたwhileで処理って感じになると思うんですが、
foreachでメモリに負担 なのと whileでDISK I/Oに負担とじゃ他のユーザーも同時に使ってるサーバー上ではどの処理がやさしいんでしょか?
今までforeachしか使ってなくてそれを否定された感があってちょっと自信難儀に陥ってまして助言とか意見があれば参考にしたいと思います。
0714nobodyさん
2006/01/14(土) 21:56:12ID:???Perlで二度アクセスするときのIOは気にする必要は小さなファイルであればいりません。
逆に、プログラムの中でキャッシング的な目的でメモリに読み込もうとすると
OS等の低レベルキャッシングとアプリケーションレベルのキャッシングが
物理メモリに配置されることになって、特別な事情がない限り非効率的です。
ちなみにそういうファイルを後から読み込みたいときは専用のモジュールがあります。
Text::Backwords (名前うろ覚え)
今回のケースではメモリ、IOともにもっとも効率がよくなるかと。
0715nobodyさん
2006/01/14(土) 21:59:37ID:???まぁ要は専用のモジュール使えって事で
0717nobodyさん
2006/01/14(土) 22:10:51ID:???さっさと処理を終らせてメモリを開放させてあげるほうが共用サーバでは重要だし。
0718nobodyさん
2006/01/14(土) 22:19:54ID:???どうもそこらへんわかってないやつが多すぎる。
0719nobodyさん
2006/01/14(土) 22:24:28ID:???「共有サーバーではそっちが重要」とか思い込み激し杉
0720nobodyさん
2006/01/14(土) 22:38:45ID:???細かい読み込み(しーく)も、鯖に負担かけるんじゃないの?
携帯も初期はそれで問題になったわけだし
良し悪しは良くわからんけど。
0721nobodyさん
2006/01/14(土) 22:44:26ID:???お前は全部分かってないな
0722nobodyさん
2006/01/14(土) 22:54:26ID:???0723nobodyさん
2006/01/14(土) 23:01:51ID:???システムのキャッシュが破棄されるほどの間隔をおいてアクセスする場合、
そんな長い時間アプリケーションレベルでメモリを確保しとくのは他のプロセスの邪魔。
そしてそのメモリの消費がさらにシステムのキャッシングを圧迫するという悪循環。
普通はアプリケーションレベルでは間欠・逐次的な読み込みでも。
OSがHDなどと協力してアクセスのあったファイルを物理メモリに先読みしてるので
間欠シークは発生しない。
「特定の状況下」で「ハードからソフトまでを知り尽くした」上でのキャッシングは
当然否定しないし、むしろ俺の理解の及ぶ範囲ではないが。
# 窓達だとデフォルトでディスクキャッシュ用メモリの確保量が少ないから効果あるかもね。
0725nobodyさん
2006/01/14(土) 23:16:26ID:???どこが違和感あるのか言ってもらえんと説明のしょうが……
0726nobodyさん
2006/01/14(土) 23:27:26ID:???理解が充分でない自覚がある場合はメモリを節約するアプローチで概ね間違わない気がするよ。
0727nobodyさん
2006/01/14(土) 23:30:48ID:???レン鯖で他のユーザの使用率とかも分からないのに
変に考えて小手先の技使ったって無駄ってことでは。
いまどきI/Oのアクセスをユーザが気にしなきゃならんOSなんて
レン鯖で使ってないよ。
しかも言語がPerlなんだよね。
頻繁に叩かれるスクリプトで、ガバッとメモリ喰うと
そっちの方でディスクにアクセスがかかるかも知れないってのを
心配してるんじゃないのかな。
0728nobodyさん
2006/01/14(土) 23:36:57ID:???while( <$fh> )も結局は物理メモリのキャッシュから読み込んでる訳で、
遅くないから心配するなと。
0729nobodyさん
2006/01/14(土) 23:39:43ID:???それで済むならいいけどさ
0730nobodyさん
2006/01/14(土) 23:40:09ID:???0731nobodyさん
2006/01/14(土) 23:49:08ID:???便利・不便じゃなくてシーケンシャルアクセスをどうやるかでしょ。
foreach( @ ) も foreach( <> ) もやりたい事は(多くの場合)シーケンシャルアクセス。
0732nobodyさん
2006/01/14(土) 23:50:31ID:???プロセスがプロセスキューに溜まる事だと考えてる。
ファイルリードより、スワップの方がコスト高そうだし。
だから、なるべく早くロックを開放することを考えてるよ。
でも、実際そこまで厳しい状態はほとんど知らないし、
そこまで考える必要があるかどうかは分からんけど。
0733nobodyさん
2006/01/15(日) 00:01:11ID:???0734nobodyさん
2006/01/15(日) 00:04:02ID:???書き込み頻度低いってことでしょ?
(そうじゃなきゃ編集衝突するよね?)
メモリに展開する必要ないじゃん。
0735nobodyさん
2006/01/15(日) 00:04:24ID:???NASとか使ってると、鯖の構成とか製品によっては
フロントの鯖から、ロックファイルが見えるまでにタイムラグがあったりする。
0736nobodyさん
2006/01/15(日) 00:04:59ID:???読んでいった感じ、「メモリには優しく」 というのを感じました。
ただまた1つ疑問がw
DB 使ってるとして、巨大なテーブルが戻ってきちゃう場合はどうするんでしょ?
さすがにこれはしょがないんでしょうか・・・
0737nobodyさん
2006/01/15(日) 00:07:52ID:???0738nobodyさん
2006/01/15(日) 00:08:55ID:???1. DB に処理できることは DB にやらせる
2. 表示なら巨大なものは最初から表示できないから無駄なものは取得しない
いずれでもない場合ってこと?
0739nobodyさん
2006/01/15(日) 00:15:22ID:???普段どうやってDBアクセスしてるの?
まさか一度二次元配列にぶちこむとかやってないよね?
0740nobodyさん
2006/01/15(日) 00:21:05ID:???いやDBは使ったこと無いです(興味あるっちゃありますが・・・)
>737,738
たとえば得られたテーブルが (巨大とはいえないけどとりあえず) 5項目程度で1000行だとして、
SQL文で500行目〜700行目だけ欲しいっていうことって出きるんですか?
出来るならそれで解決なんですが ^^;
0742nobodyさん
2006/01/15(日) 00:29:05ID:???0743nobodyさん
2006/01/15(日) 00:32:01ID:???0744nobodyさん
2006/01/15(日) 00:39:40ID:???なるほろ。 解決しました
thx
0745nobodyさん
2006/01/15(日) 00:40:24ID:xHRm9xcdsql limit offsetあたりをキーワードに検索をかけると幸せになれるぞ。
つか、スレ違いっぽいな。
0746nobodyさん
2006/01/15(日) 01:00:08ID:???0747nobodyさん
2006/01/15(日) 01:05:57ID:a4Y6+QOPそんなつまらん事なら書き込むな、このボケ。つか志ねよ。
0749nobodyさん
2006/01/15(日) 13:13:53ID:???-sample.html-
<html>
<head>
<!--#exec cmd="sample.pl"-->
こんにちは
</body>
</html>
-sample.pl-
print"<title>sample</title>\n";
print"</head>\n";
print"<body>\n";
…これって良いのでしょうか?
Perlのパスも記述せず、文法的にも…
一応ちゃんと動作してるんですが、何か物凄く間違ってる気がしてなりません…。
0750nobodyさん
2006/01/15(日) 13:27:44ID:???利点が分からないなら無理して使う必要はないし、お好みでどうぞ。
ちなみにCGI.pmは標準でインストールされていて、もし入っていなくてもCPANから落として@INC内に入れれば使えます。
# モジュールが重いとか言っていたら、DBIもJcodeもutf8も使っていられませんよ。CGI.pmが重いなら、MovableTypeを使うなんて論外ですね。
0751nobodyさん
2006/01/15(日) 13:41:01ID:???0752nobodyさん
2006/01/15(日) 14:35:28ID:???0753nobodyさん
2006/01/15(日) 14:59:53ID:???0754nobodyさん
2006/01/15(日) 16:34:25ID:???またおまえ「ら」かよ。いい加減なんちゃってモジュール使いたいがために
さるみたいにCGIモジュール直接読み込むのやめろ。な?
しかもそれで知ったかで質問にレスするし。
最悪。
0755nobodyさん
2006/01/15(日) 16:41:10ID:???のは分からなくもない(やりたきゃ自分でサーバ用意して mod_perl や
fastcgi でやれってこと)が、それならそれで適切な表現てもんが
あると思うがな。
0756nobodyさん
2006/01/15(日) 16:43:02ID:???それでいいじゃん
〜終了〜
0758nobodyさん
2006/01/15(日) 16:47:29ID:???まぁCGIモジュールしか知らないなら使わないのは正解かもね。
0759nobodyさん
2006/01/15(日) 16:50:52ID:???共有サーバーでみんなが右も左も解らず無駄にCGIモジュールをロードしたらどうなると思う?
0760nobodyさん
2006/01/15(日) 16:54:23ID:???0761nobodyさん
NGNG0762nobodyさん
NGNG0763nobodyさん
2006/01/15(日) 17:25:16ID:???結局クエリ読み取るときにはどうすればいいんでしょうか。
教えてください。
0765nobodyさん
2006/01/15(日) 17:37:39ID:???えらい遠回りな
0767nobodyさん
2006/01/15(日) 18:30:31ID:???迷うならCGI.pm使う。
パフォーマンスを追及したかったら思ったらCGI::minimalをインスコして使う。
根拠はperlfaq9
http://www.kt.rim.or.jp/%7Ekbk/perl-5.8/perlfaq9.html#how_do_i_decode_a_cgi_form
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq9.html#How_do_I_decode_a_CGI_form_
0768nobodyさん
2006/01/15(日) 19:24:47ID:???0769nobodyさん
2006/01/15(日) 19:54:25ID:???0770nobodyさん
2006/01/15(日) 20:39:21ID:???0771nobodyさん
2006/01/15(日) 20:41:22ID:???0772nobodyさん
2006/01/15(日) 20:45:26ID:???binmode(STDIN);
if($ENV{'REQUEST_METHOD'} eq "POST"){
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}else{
$buffer = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$in{$name} = $value;
}
}
スクリプト書くたびにコレを書いてる
マルチプル、マルチパートなんて使わないのでこれで十分事足りてる
0773nobodyさん
2006/01/15(日) 20:57:56ID:???590 549 sage 2006/01/13(金) 12:44:01
>>568
説明すると長くなるから
ttp://perldoc.jp/docs/perl/5.6.1/perlfaq9.podの
How do I decode a CGI form?の項を1000回読め。
とほほのコードがどうしてまずいのかがよ〜く解るだろう。
ついでにCGI.pmはpure perlだから読んでみるとよかろう。
もし君が解読しきれなくても本当に正しくフォームデコード
するというのはどんなに大変なことなのかぐらいは解るだろう。
CGI/util.pmのunescapeメソッドを読むだけでも君は
ここで「とほほのコードはWebProg板では普通のコード」
と言い切ってしまったことをとても恥ずかしく思うようになるはずだ。
cgi.pmのマニュアルがよく解らないというのはオブジェクト指向や
参照渡しがよく解ってないからじゃないのかな。
cgi.pmにはcgi-lib.plもどきの関数インターフェースもあるので
Webを漁って探してみてくれ。日本語訳もあるよ。
まあ頑張れ。
0775nobodyさん
2006/01/15(日) 21:22:56ID:???エラーチェックしなかったら、どうなるんだってのw
0776nobodyさん
2006/01/15(日) 21:30:59ID:???0777nobodyさん
2006/01/15(日) 21:34:52ID:???0778nobodyさん
2006/01/15(日) 21:35:18ID:???0779nobodyさん
2006/01/15(日) 21:37:12ID:???0780nobodyさん
2006/01/15(日) 21:38:02ID:???ttp://pc8.2ch.net/test/read.cgi/php/1127916965/
このスレの依頼でもやってクリ
俺の依頼もスルーされてるけど、とりあえず他の人の依頼でもいいからさ
0782nobodyさん
2006/01/15(日) 21:51:27ID:???落ち着けよwwwwwwwww
0783nobodyさん
2006/01/15(日) 21:55:05ID:???悔しかったら反論してみろよw
0784nobodyさん
2006/01/15(日) 21:58:42ID:???0785773
2006/01/15(日) 21:59:42ID:???0786773
2006/01/15(日) 22:07:51ID:???「エラーチェックしなかったらどうなるのか無知な僕に教えてください」だろ。
いくら初心者質問スレだからって人に教えを請う態度ぐらい身につけて下さい。
0787nobodyさん
2006/01/15(日) 22:10:49ID:???0788nobodyさん
2006/01/15(日) 22:12:37ID:???0789nobodyさん
2006/01/15(日) 22:14:36ID:???0790nobodyさん
2006/01/15(日) 22:21:26ID:???0791nobodyさん
2006/01/15(日) 22:22:30ID:???0793nobodyさん
2006/01/15(日) 22:41:17ID:???0794nobodyさん
2006/01/15(日) 22:48:33ID:???0796nobodyさん
2006/01/15(日) 23:01:47ID:???ダメだと言ってる人、折角だから完璧なモノに改造してくれないか?
参考にするから。
0798nobodyさん
2006/01/15(日) 23:22:09ID:???0799nobodyさん
2006/01/16(月) 00:02:12ID:???0800nobodyさん
2006/01/16(月) 00:52:24ID:???掲示板なら、投稿するリンクを2chに貼るのもいいか。
0801nobodyさん
2006/01/16(月) 01:00:09ID:???同じ名前を持つパラメータを送ると、
後から送られたデータに上書きされるよね。
0802nobodyさん
2006/01/16(月) 01:03:07ID:???>マルチプル、マルチパートなんて使わない
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0803nobodyさん
2006/01/16(月) 01:04:48ID:???0804nobodyさん
2006/01/16(月) 01:10:39ID:???子供が意気がるのも道理だな。
0805nobodyさん
2006/01/16(月) 01:12:46ID:???そのまえにサーバーでエラーにならない?
全部のサーバーがどんだけのサイズを許可してるかわからんけど受信サイズの制限ぐらいはあると思う
0806nobodyさん
2006/01/16(月) 01:17:03ID:???もっと熱い奴ギボン。
0807nobodyさん
2006/01/16(月) 01:25:42ID:???まあ、そうなんだけど、実際にサーバが許してるサイズが分からないしね。
アップローダを見ていると、32M程度なら許していそうな所もあるし、
それでDOS攻撃仕掛けるとかね。
0808nobodyさん
2006/01/16(月) 01:29:57ID:???0809nobodyさん
2006/01/16(月) 02:33:58ID:???0810nobodyさん
2006/01/16(月) 02:40:28ID:???0811nobodyさん
2006/01/16(月) 02:40:45ID:???0812nobodyさん
2006/01/16(月) 02:41:24ID:???0813nobodyさん
2006/01/16(月) 02:41:38ID:???0814773
2006/01/16(月) 02:44:44ID:???>>774
http://pc8.2ch.net/test/read.cgi/tech/1134327348/590
全部コピペで日本語一文字付け足していませんが何か
0815nobodyさん
2006/01/16(月) 02:50:52ID:???なにもそんな不自由な日本語を色んなところで自ら晒さなくても・・・
0816773
2006/01/16(月) 02:57:22ID:???0817nobodyさん
2006/01/16(月) 02:59:17ID:???0818nobodyさん
2006/01/16(月) 03:02:36ID:???0819nobodyさん
2006/01/16(月) 03:08:12ID:???0820nobodyさん
2006/01/16(月) 03:09:32ID:???0821nobodyさん
2006/01/16(月) 03:10:17ID:???0822nobodyさん
2006/01/16(月) 03:11:20ID:???0823nobodyさん
2006/01/16(月) 03:12:08ID:???0824nobodyさん
2006/01/16(月) 03:13:03ID:???0825nobodyさん
2006/01/16(月) 03:14:17ID:???0826nobodyさん
2006/01/16(月) 03:15:59ID:???(´・ω・`)
0827nobodyさん
2006/01/16(月) 03:17:08ID:???0828nobodyさん
2006/01/16(月) 03:18:52ID:???0829nobodyさん
2006/01/16(月) 03:19:34ID:???荒らすのはやめれ!
0830nobodyさん
2006/01/16(月) 07:55:23ID:???受信サイズの制限ってよりも、割り当て可能なメモリに制限って感じだな。サーバー側でかける制限は。
んで、そんな制限をかけてないサーバーに1GBほどをPOSTすると、この行で大変なことになる。
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
効率優先で俺様ロジックするのもいいけど、
小手先でやるくらいならモジュール使って安全を買うのもありかと。
ときどき変なスレの伸び方するなぁ。
0831nobodyさん
2006/01/16(月) 08:21:36ID:???先に$ENV{'CONTENT_LENGTH'}で受信サイズを調べろってことですな
0832nobodyさん
2006/01/16(月) 12:41:16ID:???0833nobodyさん
2006/01/16(月) 12:57:23ID:eJEL1pbqserver.php
<?
require_once 'XML/RPC/Server.php';
$map = array('test' => array('function' => 'test') );
$svr = new XML_RPC_Server($map);
function test($param) {
return new XML_RPC_Response(new XML_RPC_Value('OK'), "string");
}
?>
client.php
<?
require_once("XML/RPC.php");
$value = new XML_RPC_Value(
array("test" => new XML_RPC_Value("test", 'string')),'struct');
$msg = new XML_RPC_Message('test', array($value) );
$client = new XML_RPC_Client("/", "example.com", 80);
$response = $client->send($msg);
echo $contents = XML_RPC_decode( $response->value()) ;
では、問題なく動作するのですが、クライアントをperlで
#!/usr/bin/perl -w
use XMLRPC::Lite;
my $rpc = XMLRPC::Lite->new;
my $url = 'http://example.com/';
my $contents;
$rpc->proxy($url);
my $res = $rpc->call( "test",{ test => "test" });
print $contents = $res->result;
とすると、Unknown methodになります。
どこが間違っているのでしょうか?
0834nobodyさん
2006/01/16(月) 13:00:39ID:???Perl のコードを落ち着いて読む
0835nobodyさん
2006/01/16(月) 13:39:55ID:???0836nobodyさん
2006/01/16(月) 15:15:58ID:???0837833
2006/01/16(月) 16:12:07ID:eJEL1pbqrequire "xmlrpc/client"
server = XMLRPC::Client.new( "example.com", "/")
begin
p server.call("test", 10)
rescue XMLRPC::FaultException => err
p err.faultString
end
でも、"Unknown method"ですね。phpがおかしいのかな。
0838nobodyさん
2006/01/16(月) 16:54:29ID:???0839nobodyさん
2006/01/16(月) 16:58:09ID:???0840nobodyさん
2006/01/16(月) 16:58:39ID:???0841& ◆O45QsmDUy.
2006/01/16(月) 17:04:26ID:???0842& ◆Z2KySTSpOo
2006/01/16(月) 17:05:04ID:???0843nobody& ◆k0eA9hHNm2
2006/01/16(月) 17:07:18ID:???0844& ◆O45QsmDUy.
2006/01/16(月) 17:09:23ID:???0845nobodyさん
2006/01/16(月) 17:54:10ID:???問題なさそうだけど。
それと、サーバーのResponseの部分はこうじゃない?
return new XML_RPC_Response(new XML_RPC_Value('OK', 'string'));
0846nobodyさん
2006/01/17(火) 00:08:41ID:???全角カタカナ・英数字・記号を、半角にしたいと思っているのですが、
どうしても 「(」と「!」が同じように処理されてしまって困っています。
s/!/!/gi;
s/(/(/gi;
とやると、全角の ( まで、半角の ! となってしまいます。
解決策はございますでしょうか?
よろしくお願いします。
0847nobodyさん
2006/01/17(火) 00:21:01ID:???<input type="hidden" name=".cgifields" value="test" />
といった hiddenタイプの.cgifieldが作成されます。
perldoc CGI を読むと、-nosticky プラグマで抑制可能と言うことは書いてあるのですが、
何のために使用されているものなのかわかりません。
この .cgifield は何のためにあるのでしょう?
0848nobodyさん
2006/01/17(火) 01:00:44ID:???use strict;
use CGI;
use CGI::Util;
$CGI::POST_MAX=1024;
my $q=CGI->new;
my %in=CGI->Vars;
CGI::Util::unescape($_) for (values %in);
プログラム板のhttp://pc8.2ch.net/test/read.cgi/tech/1134327348/580 のマネしただけだけど。
正直、初心者なんで、ツッコミ頼む。
0849848
2006/01/17(火) 01:17:44ID:???use strict;
use CGI qw/:cgi/;
$CGI::POST_MAX=1024;
my $q=CGI->new;
my %in=$q->Vars;
CGI::Util::unescape for (values %in);
0850nobodyさん
2006/01/17(火) 01:37:37ID:???もし、perl5.8.0 以上なら、
use encoding 'shift-jis';
でOK
0851nobodyさん
2006/01/17(火) 01:43:26ID:???どうやって斜め読みしたら「モジュールを使って書く」って読めるんだ?
結局は日本語を読めない奴が増えただけかよ
0852nobodyさん
2006/01/17(火) 01:56:42ID:???たかがデコードごときにモジュールなんてつかってんじゃねーよ。
モジュールなんていらねーってコトの証明のために書いてんだよ。バーカ
0853nobodyさん
2006/01/17(火) 01:58:28ID:???頭大丈夫?
0854nobodyさん
2006/01/17(火) 02:01:26ID:???/i オプションを付けない。
>>847
perldoc CGI に書いてある。
http://search.cpan.org/~lds/CGI.pm-3.15/CGI.pm#nosticky
古いヴァージョンのドキュメントには明記されていないかも知れないが。
>>848-849
CGI::Util::unescape() は渡された文字列を percent-decode して返す
関数なので CGI::Util::unescape for (values %in); では戻り値を捨てて
いるだけ (%in の値は変化しない) し、CGI パッケージに輸出されている
から use CGI::Util; しなくても CGI->unescape() と呼べるし、そもそも
param() や Vars() ではちゃんと percent-decode 済の値を返してくる
から後から unescape() する必要は無い。
use strict;
use CGI ();
$CGI::POST_MAX = 1024; # 1KB
my %in = CGI->new->Vars;
0857nobodyさん
2006/01/17(火) 02:07:12ID:???>結局は日本語を読めない奴が増えただけかよ
激しく同意。
851 には >797,>808 が読めないんだからな
0858nobodyさん
2006/01/17(火) 02:11:07ID:???ということにしたいのですね。
0859nobodyさん
2006/01/17(火) 02:14:53ID:???それ3つとも俺w
俺じゃ出来ないから出来る人の改良ソースを待ってるわけでですよ。
0860nobodyさん
2006/01/17(火) 02:19:58ID:???だとすると、851 はモジュール使わない改良ソースを待っているのか?
0861nobodyさん
2006/01/17(火) 02:26:34ID:???0862nobodyさん
2006/01/17(火) 02:29:47ID:???0863nobodyさん
2006/01/17(火) 02:39:01ID:???空いた時間で他の生産的な事をしろ、ってのがPerlだと思う。
0864nobodyさん
2006/01/17(火) 02:43:40ID:???プログラミングはすべてそうだと思うけど…
0865nobodyさん
2006/01/17(火) 02:48:02ID:???どなたか最適なデコード方法教えてください>w<
0866nobodyさん
2006/01/17(火) 02:52:10ID:???いや、この板には
・モジュールは重くて邪魔だ。
・これまでモジュールを使ってこなかったが、困らなかった。
・実は、オブジェクトがなんなのかわからないんだけど、分からないことがばれると恥ずかしい
等、様々な理由で、モジュール使いたがらない人たちが多いのですよ。
0867nobodyさん
2006/01/17(火) 02:57:37ID:???ソレダ!
0868nobodyさん
2006/01/17(火) 03:05:48ID:???というかイマイチ有用性がわからんのもある
0869nobodyさん
2006/01/17(火) 03:06:00ID:???0870nobodyさん
2006/01/17(火) 03:08:19ID:???0871nobodyさん
2006/01/17(火) 03:30:52ID:???伝家の宝刀は「このスレは回答者も初心者なんですね」。
この文句には注意な。
0872nobodyさん
2006/01/17(火) 03:56:07ID:???> 等、様々な理由で、モジュール使いたがらない人たちが多いのですよ。
mod_perl とか fastcgi とか lighttpd とか使えないような、
貧乏仕様の ISP 貸し出し環境の人が多いということですか。
それとも、cgi を呼ぶと必ずモジュールのロードからするものが Perl だ
とか思ってるんかな。
0873nobodyさん
2006/01/17(火) 03:56:35ID:???自分が必要としていない物の有用性を幾ら説かれても理解には至らんよ。
コードに対する要求レベルは人それぞれで、KENT で充分だと感じる人も
いれば、CPAN にあるモジュールはどれも汚くて書き直したくなる、という
人もいる。この二者が納得するコードなんて書きようがないし、より高い
レベルを要求する事が常に正しいとは限らない。
だから妥協点として、公式マニュアル (perldoc) に書かれている事を指針
にしときましょう、というのが現実的な解。perldoc が難解だと感じるなら
Perl コミュニティ的に「平均」より下。perldoc すら甘いと考えているなら
厳しすぎ。
0874nobodyさん
2006/01/17(火) 03:59:27ID:???そもそもレベルの高低の客観的な評価基準きぼん。
> だから妥協点として、公式マニュアル (perldoc) に書かれている事を指針
> にしときましょう、というのが現実的な解。
それは、どこらへんの「現実」?
> perldoc が難解だと感じるならPerl コミュニティ的に「平均」より下。
それは、どこらへんの「Perl コミュニティ」?
「平均」の算出方法も明確にしておいてね。
0875nobodyさん
2006/01/17(火) 04:06:01ID:???0876nobodyさん
2006/01/17(火) 04:07:20ID:???0878nobodyさん
2006/01/17(火) 04:09:44ID:???0879nobodyさん
2006/01/17(火) 04:10:26ID:???0880nobodyさん
2006/01/17(火) 04:21:05ID:???0881nobodyさん
2006/01/17(火) 04:25:26ID:???0882nobodyさん
2006/01/17(火) 04:27:54ID:???0883nobodyさん
2006/01/17(火) 04:29:40ID:???伝家の宝刀は「このスレは回答者も初心者なんですね」。
この文句には注意な。
0884nobodyさん
2006/01/17(火) 04:57:07ID:tDsfmN2qPerl内でPHPを使用するにはどうすれば良いでしょうか?
0885nobodyさん
2006/01/17(火) 04:57:28ID:???話の流れが理解できているなら、ソースを待っていても、>854 以上のものは出ないことは明白。
待ってても無駄だよ。
0886nobodyさん
2006/01/17(火) 05:00:18ID:???「表示されるHTMLにPHPを使用したいので」
のところが意味不明。
いったい何をprint等で記述したか書いてごらん。
0887nobodyさん
2006/01/17(火) 05:20:40ID:???「>772をまずはこうやって・・・次にこうやって・・・」であれば>772のどこが悪いってのわかりますよね?
ちなみに>772は私がstrictで書く前の代物だったりします (書き直したものはstrictでとりあえず動いてるもののエラーチェックは細かくやってない)
ツッコミどころ云々とか言うだけ言って改良案すらも出ないのかなと
(出たのはread()に関するとこだけ)
ここが上級者スレならスルーはわかるけど・・・
>886
>884は print "echo $char\n"; とか出力して、PHP の echo の動作しない
というのが言いたいと思う
>884
無理かと
perlでPHPのファイル出力してそれをクリックさせるか、CGIとして出力したPHPファイルをperlから呼び出すかぐらいじゃないでしょか?
というか、そもそもそんなことやる必要があるんですか? 無駄だと思うのですが・・・
0888nobodyさん
2006/01/17(火) 05:53:42ID:???でPHPに埋め込むのではいかんのか
0889nobodyさん
2006/01/17(火) 05:59:37ID:???ちょwwwさりげなく俺の発言まで自分の発言にするなよw
>>808はお前が書いたんじゃないだろ。
他のは知らないが。
0890nobodyさん
2006/01/17(火) 06:16:16ID:???先に、hoge.php があるのなら、
print qx[php "hoge.php"]
phpスクリプトを生成するなら
my $php_code='echo "$char\n";';
print qx[php -r "$php_code"];
で何とかなるかもwww
0891nobodyさん
2006/01/17(火) 06:28:38ID:???人に文句付ける前に、お前が改良案出してやれよ。
>>884
やりたいことが>>887の通りだとしたら、
出来ないことはないけど、お勧めしない。
PHPはCLI版またはCGI版があることが条件で、
CLI版の場合はあらかじめヘッダを出力してあげること。
# print "Content-type: text/html\n\n";
open(PHP, "| /usr/local/bin/php") or die;
select(PHP);
print while(<DATA>);
close(PHP);
exit;
__END__
<?
echo "hello, world!";
?>
0894nobodyさん
2006/01/17(火) 09:06:52ID:???sub decode {
my ( $buffer, %in );
if($ENV{'REQUEST_METHOD'} eq 'POST'){
if( $ENV{'CONTENT_LENGTH'} > 1024 ) { die 'CONTENT_LENGTH error' }
binmode(STDIN);
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}elsif($ENV{'REQUEST_METHOD'} eq 'GET'){
$buffer = $ENV{'QUERY_STRING'};
}else{ die 'REQUEST_METHOD error' }
my @pairs = split(/&/, $buffer);
foreach my $pair (@pairs) {
my ($name,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$in{$name} = $value;
}
return %in;
}
0895nobodyさん
2006/01/17(火) 09:16:43ID:nYyzHE1Cメールフォームを利用したページを作っているんですが、
記入漏れがあった時、エラーを表示するようにPERLでプログラムしていて
前のページへ戻ると全て入力したものが消えています。
携帯電話でアクセスした場合、メールフォームに入力したデータが
キャッシュに残っていないのは仕方のないことなのでしょうか?
これはCGIのほうで、どうにかするべき問題ですか?
それともHTMLの記述の中でデータ入力したもののキャッシュを
残すように出来るのでしょうか?
0896nobodyさん
2006/01/17(火) 09:24:09ID:???その記入用画面をまた表示する。その際、
・ページ冒頭で記入漏れがある旨を伝え、それを埋めるように催促する
・正しいデータが送られた部分にはそのデータを初期値として表示
・正しくないデータの部分にはそれと分かるように印をつけて空欄で表示
として、記入漏れのあるところだけ埋めてもらうようにするのがいい。
0897nobodyさん
2006/01/17(火) 09:55:43ID:nYyzHE1Cなるほど、引き渡した変数をそのまま利用して、記入漏れの箇所に対してのみ
再度入力を求める形にすればいいということですね。
ただ気になるのが、きっと print ""; を使うことになると思いますが、
例えば名前が 山田 太郎 と入力されたものとして、
年齢が未入力だった場合、どういう記述の方法をとりますか?
名前の箇所の 山田太郎 は正しかったものとして
ただHTMLで文字として表示させて
未入力だった箇所の年齢は 再度入力ボックスを出すという形ですか?
また変数を、こういう形で受け継がせる方法に最適な案などご存知でしたら
ぜひご教授ください
0899nobodyさん
2006/01/17(火) 12:21:24ID:???0900nobodyさん
2006/01/17(火) 12:29:07ID:???unless(
-e $file and
-f $file and
-r $file and
-w $file
) {
print 'NG';
}
のようにファイルがあるか⇒ファイルか⇒読み書き込み可能か
と全部チェックすべきでしょうか?
それとも、-r, -w のみのチェックでも大丈夫でしょうか?
0901nobodyさん
2006/01/17(火) 12:45:01ID:???-f が真になるなら -e は常に真。
無駄なシステムコールを省く為、二つ目以降は _ を使う。
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item__i__X__i__FILEHANDLE
よって unless (-f $file && -r _ && -w _) { ... }
0902900
2006/01/17(火) 12:57:57ID:???下線だけからなる特別なファイルハンドルがあるとは知りませんでした。。。
非常に勉強になりました。
ありがとうございす。
0903nobodyさん
2006/01/17(火) 13:00:56ID:???またもや、項目を入力可能にしておくとは言えども、
前ページで入力したデータが エラーの出たとこ以外には
デフォで入ってる状態で表示させるんですよね?
HTMLでそんなタグありましたっけ?
0904nobodyさん
2006/01/17(火) 13:07:33ID:???0905nobodyさん
2006/01/17(火) 13:11:38ID:nYyzHE1C0906nobodyさん
2006/01/17(火) 13:14:18ID:???<input value=hensuu>
のvalueとこに変数を渡して、そのまま
print ""; 使ってHTML出力してしまえば、前ページで入力したデータが
デフォで入ってる状態になるところまでは分かったのですが、
checkboxやselect typeだと出来なくないですか?
0907nobodyさん
2006/01/17(火) 13:27:43ID:???0908nobodyさん
2006/01/17(火) 13:33:08ID:???<select NAME="県別" SIZE="1">
<option VALUE="北海道">北海道</option>
<option VALUE="青森県">青森県</option>
<option VALUE="岩手県">岩手県</option>
<option VALUE="宮城県">宮城県</option>
<option VALUE="秋田県">秋田県</option>
<option VALUE="山形県">山形県</option>
<select>
前ページで
「北海道」を選んでいたが、 メアドの項目でエラー出たとき
県別のvalueに与えられていた”北海道”のデータを そのまま引き継ぐには
selectedを使って、どうのような方法がありますか?
0910nobodyさん
2006/01/17(火) 13:41:29ID:???0911nobodyさん
2006/01/17(火) 13:42:16ID:???ユーザーに投げてやればいいでしょ。
何を質問してるのか解らん。
0912nobodyさん
2006/01/17(火) 13:44:04ID:???ありがとうございます。
ただ、その場合は 北海道だけがプルダウンセレクトで出てきて
他の県を選べなくなりますよね?
もし、県別のとこも、エラー出たあとに、他の県に修正できるようにする方法は
ありませんか?
0913nobodyさん
2006/01/17(火) 13:45:22ID:???0914nobodyさん
2006/01/17(火) 13:47:09ID:???0915nobodyさん
2006/01/17(火) 13:51:21ID:???いろいろ見ているのですが、申し訳ない。
>>911
分かりづらい説明ですいません。
最初のフォーム入力ページでは
<select NAME="県別" SIZE="1">
<option VALUE="" selected>北海道</option>
<option VALUE="北海道">北海道</option>
<option VALUE="青森県">青森県</option>
<option VALUE="岩手県">岩手県</option>
<option VALUE="宮城県">宮城県</option>
<option VALUE="秋田県">秋田県</option>
<option VALUE="山形県">山形県</option>
<select>
というふうに デフォでは "--"と表示されていて”県別”の中身は空ですが、
もし、北海道をここで選んで、他の項目でエラーが出た場合、
表示されるページで ”北海道”がデフォで選ばれてる状態にして
なおかつ、他の県にも修正が効く状態にしておきたいんです。
0916nobodyさん
2006/01/17(火) 13:52:14ID:???分からないんです。すいません。
0917nobodyさん
2006/01/17(火) 13:56:21ID:???スレ違い、さっさと失せろ
0918nobodyさん
2006/01/17(火) 13:59:16ID:???スレ移動します。
0919nobodyさん
2006/01/17(火) 14:00:37ID:???選ばれたものが selected になればよいと言って分かる?
分からなければ制作板で HTML の勉強しといで
0921nobodyさん
2006/01/17(火) 14:03:23ID:???>>915で、記述ミスしてました。
北海道のところがselectedじゃなくて、 "--"の行がデフォではselectedでした。
0924nobodyさん
2006/01/17(火) 14:08:05ID:???酷使されてる鯖カワイソス
0925nobodyさん
2006/01/17(火) 14:09:53ID:???俺が書きなおしてやる。
0926nobodyさん
2006/01/17(火) 14:12:35ID:???0927nobodyさん
2006/01/17(火) 14:15:18ID:???0929nobodyさん
2006/01/17(火) 14:31:39ID:???これがHTMLの部分です。
<HTML><HEAD>
<TITLE>問い合わせ</TITLE></HEAD>
<BODY>
<form action="toiawase.cgi" method="post">
<BR>
氏名:<input size="20" type="text" name="氏名">
<BR>
県別:<select NAME="県別" SIZE="1">
<option VALUE="" selected>--</option>
<option VALUE="北海道">北海道</option>
<option VALUE="青森県">青森県</option>
<option VALUE="岩手県">岩手県</option>
<option VALUE="宮城県">宮城県</option>
<option VALUE="秋田県">秋田県</option>
<option VALUE="山形県">山形県</option>
<select>
<BR>
持ってる免許:
<input type="checkbox" name="免許車" value="CAR">
<input type="checkbox" name="免許バイク" value="BIKE">
<input type="checkbox" name="免許船" value="SHIP">
<BR><BR>
<input TYPE="submit" VALUE="送信">
<FORM></BODY></HTML>
0931nobodyさん
2006/01/17(火) 14:36:02ID:???0932nobodyさん
2006/01/17(火) 14:36:59ID:???0933929
2006/01/17(火) 14:40:00ID:???名前= 未記入
県別= 北海道を選んだ
持ってる免許= 免許車、 免許バイク
を選んだとして、「名前の未記入のみ」に対して
もう一度記入してくださいという、画面を出力して出したいんです。
その際には、 県別が「北海道」ということと、免許が「免許車、免許バイク」と分かっているので
と吐き出したいんです。
<HTML><HEAD>
<TITLE>問い合わせ</TITLE></HEAD> <BODY>
未記入の項目がありました。<BR><BR>
<form action="toiawase.cgi" method="post"> <BR>
氏名:<input size="20" type="text" name="氏名"> <BR>
県別:<select NAME="県別" SIZE="1">
<option VALUE="">--</option>
<option VALUE="北海道" selected>北海道</option>
<option VALUE="青森県">青森県</option>
<option VALUE="岩手県">岩手県</option>
<option VALUE="宮城県">宮城県</option>
<option VALUE="秋田県">秋田県</option>
<option VALUE="山形県">山形県</option>
</select> <BR>
持ってる免許:
<input type="checkbox" name="免許車" value="CAR" checked>
<input type="checkbox" name="免許バイク" value="BIKE" checked>
<input type="checkbox" name="免許船" value="SHIP">
<BR><BR>
<input TYPE="submit" VALUE="送信">
<FORM></BODY></HTML>
0936nobodyさん
2006/01/17(火) 15:08:07ID:???免許部分を1から3にします。
<HTML><HEAD>
<TITLE>問い合わせ</TITLE></HEAD>
<BODY>
<form action="toiawase.cgi" method="post">
<BR>
氏名:<input size="20" type="text" name="氏名">
<BR>
県別:<select NAME="県別" SIZE="1">
<option VALUE="" selected>--</option>
<option VALUE="北海道">北海道</option>
<option VALUE="青森県">青森県</option>
<option VALUE="岩手県">岩手県</option>
<option VALUE="宮城県">宮城県</option>
<option VALUE="秋田県">秋田県</option>
<option VALUE="山形県">山形県</option>
<select>
<BR>
持ってる免許:
<input type="checkbox" name="免許1" value="CAR">
<input type="checkbox" name="免許2" value="BIKE">
<input type="checkbox" name="免許3" value="SHIP">
<BR><BR>
<input TYPE="submit" VALUE="送信">
<FORM></BODY></HTML>
930 名前: nobodyさん [sage] 投稿日: 2006
0937nobodyさん
2006/01/17(火) 15:12:02ID:???>>934
自分なりにどういうスクリプト書いてみたかもアップして。
アップローダー使ってね。
アップローダー使ってね。
アップローダー使ってね。
アップローダー使ってね。
アップローダー使ってね。
0938nobodyさん
2006/01/17(火) 15:17:07ID:???フォームから引き渡した数を
$form{'氏名'} = ""
$form{'県別'} = "北海道"
$form{'免許'} = "CAR,BIKE"
としたときに、 HTMLで下のように吐き出すようなスクリプトを教えてください。
<HTML><HEAD>
<TITLE>問い合わせ</TITLE></HEAD> <BODY>
未記入の項目がありました。<BR><BR>
<form action="toiawase.cgi" method="post"> <BR>
氏名:<input size="20" type="text" name="氏名"> <BR>
県別:<select NAME="県別" SIZE="1">
<option VALUE="">--</option>
<option VALUE="北海道" selected>北海道</option>
<option VALUE="青森県">青森県</option>
<option VALUE="岩手県">岩手県</option>
<option VALUE="宮城県">宮城県</option>
<option VALUE="秋田県">秋田県</option>
<option VALUE="山形県">山形県</option>
</select> <BR>
持ってる免許:
<input type="checkbox" name="免許" value="CAR" checked>
<input type="checkbox" name="免許" value="BIKE" checked>
<input type="checkbox" name="免許" value="SHIP">
<BR><BR>
<input TYPE="submit" VALUE="送信">
<FORM></BODY></HTML>
0939nobodyさん
2006/01/17(火) 15:19:10ID:???スクリプト自体はまだ、出来あがってはいませんので
アップできませんが、上のような形でHTMLを吐き出してくれる方法だけでも
教えてもらえませんか?
0940nobodyさん
2006/01/17(火) 15:25:27ID:???教えてもらえません。
お前の屑スクリプトが動くところがみたいんじゃなくて、
お前がそれ相応の努力をしたかどうかがみたいんだ。
だから書きかけでもうpが先。
0941nobodyさん
2006/01/17(火) 15:26:55ID:???inout valueのところに名前の変数をデフォで表示させておけば
問題ないと分かったんですが・・・・
$NAME=$form{'氏名'};
print "
<HTML><HEAD>
<TITLE>問い合わせ</TITLE></HEAD> <BODY>
未記入の項目がありました。<BR><BR>
<form action=toiawase.cgi method=post> <BR>
氏名:<input size=20 type=text name=氏名 value=$NAME> <BR>
県別:<select NAME=県別 SIZE=1>
<option selected>--</option>
<option VALUE=北海道>北海道</option>
<option VALUE=青森県>青森県</option>
<option VALUE=岩手県>岩手県</option>
<option VALUE=宮城県>宮城県</option>
<option VALUE=秋田県>秋田県</option>
<option VALUE=山形県>山形県</option>
</select> <BR>
持ってる免許:
<input type=checkbox name=免許 value=CAR>
<input type=checkbox name=免許 value=BIKE>
<input type=checkbox name=免許 value=SHIP>
<BR><BR>
<input TYPE=submit VALUE=送信>
<FORM></BODY></HTML>
";
0942nobodyさん
2006/01/17(火) 15:28:03ID:???丸投げ度に応じて適切と思われるスレに移動してくれ。
自分の作ったCGIスクリプトをデバッグするスレ
http://pc8.2ch.net/test/read.cgi/php/1011174442/
手伝ってくれるかた募集
http://pc8.2ch.net/test/read.cgi/php/1083303786/
【CGI】合同開発室
http://pc8.2ch.net/test/read.cgi/php/1001950501/
■こんなCGI作ってください■ Part.2
http://pc8.2ch.net/test/read.cgi/php/1133361560/
依頼されたツールを誰かが作るスレ
http://pc8.2ch.net/test/read.cgi/php/1078997682/
0944nobodyさん
2006/01/17(火) 15:40:29ID:???http://www.uploda.org/file/uporg288825.txt.html
パスはwebprog です。
0945nobodyさん
2006/01/17(火) 15:52:54ID:???sub decode {
my @pairs = split(/[&;]/, do {
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
if ($ENV{'CONTENT_LENGTH'} > 1024) { return undef; }
my $buffer;
binmode(STDIN);
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
$buffer;
} elsif ($ENV{'REQUEST_METHOD'} eq 'GET' or $ENV{'REQUEST_METHOD'} eq 'HEAD') {
$ENV{'QUERY_STRING'};
} else { return undef; }});
my %in;
foreach my $pair (@pairs) {
my ($name, $value) = split(/=/, $pair, 2);
$name =~ tr/+/ /; $value =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$in{$name} = $value;
}
return \%in;
}
0946nobodyさん
2006/01/17(火) 15:54:08ID:???0948nobodyさん
2006/01/17(火) 15:58:09ID:???0949nobodyさん
2006/01/17(火) 15:58:23ID:???0951nobodyさん
2006/01/17(火) 16:01:20ID:???0952944
2006/01/17(火) 16:11:28ID:???文面から判断できません。
0954nobodyさん
2006/01/17(火) 16:22:28ID:???2ch で勉強しようと思っているのならそれはやめた方がいい
今の君は付け焼き刃でどうにかなるレベルじゃない
もっと時間を掛けて、身銭を切って何冊か参考書を買うことが必要だ
0955nobodyさん
2006/01/17(火) 16:22:38ID:???続けたいなら下のスレでもリサイクルしてくれ。
もっと軽くて渋いCGI.pmを創ろう
http://pc8.2ch.net/test/read.cgi/php/1009255955/
0959nobodyさん
2006/01/17(火) 17:00:03ID:???0960nobodyさん
2006/01/17(火) 18:08:25ID:???それは良いアイデアだ。質問スレでこれ以上無駄な議論が
繰り返されないために、次スレのテンプレに以下を追加して欲しい。
CGI.pm批判、代替ルーチンなどCGI.pmに関する話題は以下のスレで。
もっと軽くて渋いCGI.pmを創ろう
http://pc8.2ch.net/test/read.cgi/php/1009255955/
0962nobodyさん
NGNG0963nobodyさん
2006/01/17(火) 18:47:36ID:???無駄な議論の定義を作っておかないとね。
0964nobodyさん
2006/01/17(火) 18:55:19ID:???$in{$key} .= "\0" if (defined($in{$key}));
の様にしてセパレータを使って複数の値をセットしてました。
cgi-libを見るまえに同じことを自分で書いてたのですが、自分のソースは\0ではなく\tを使ってたました。
\tより\0を使ったほうがいいのでしょうか?
0965nobodyさん
2006/01/17(火) 19:01:35ID:???無駄な議論の定義は今回は必要ないだろ。
CGI.pm と query の処理関係の、質問以外はそっちに誘導してしまえばいいのだ。
ここは質問スレ。
0966nobodyさん
2006/01/17(火) 19:20:57ID:???初心者スレだから、query処理の質問に対する
答えはCGI.pm使えで良いんじゃない?
それに満足できない人はそっちのスレへ誘導と。
0967nobodyさん
2006/01/17(火) 19:24:53ID:???あと初心者には組み込み関数のほうが使いやすいと思われ。
0968nobodyさん
2006/01/17(火) 19:28:31ID:tDsfmN2q環境変数でブラウザ等を判別し、それぞれ別のファイルへ飛ばす方法を検索したのですが、見つける事ができませんでした。
CGIなら Location:各ページのURI で出来たのですが、SSIではどうすれば良いでしょうか?
0970nobodyさん
2006/01/17(火) 20:08:20ID:???ってなっちゃうから何が不要なのをハッキリと
0971nobodyさん
2006/01/17(火) 20:10:18ID:???WebProg 自体が不要じゃね?
0973nobodyさん
2006/01/17(火) 20:26:19ID:???間抜けなことはしない。
0974nobodyさん
2006/01/17(火) 20:51:13ID:???Ajaxを使うとすると、選択する度にサーバへ情報を送る訳ですね?
となると、情報の保持にはセッションを利用するんでしょうか。
0975nobodyさん
2006/01/17(火) 21:04:12ID:???いちおうできたよ。
http://up.spawn.jp/file/up9550.zip
まだまだ未熟です orz
0976nobodyさん
2006/01/17(火) 21:22:18ID:???ありがとうございました。
全然見たこともないような書き方をしていたので
びっくりでした。
今日はもう寝るところでしたので
明日の朝また見直したいと思います。
お疲れ様でした。
0978nobodyさん
2006/01/17(火) 22:38:00ID:???そんな暇なことせずに HTML::FillInForm を使えば?
http://search.cpan.org/search?query=HTML%3A%3AFillInForm&mode=all
FormValidator に関しても、各種あります。
http://search.cpan.org/search?query=FormValidator&mode=all
0979nobodyさん
2006/01/17(火) 22:38:46ID:???> 明日の朝また見直したいと思います。
結局、こういう人間が質問してるんだよね。
0981nobodyさん
2006/01/17(火) 23:00:51ID:???0982nobodyさん
2006/01/17(火) 23:02:19ID:???<meta http-equiv="refresh" 〜> かな。
>>969
話の筋からするとquery処理かな。
>>955 のスレにも >>945 みたいなのを貼ってあったし。
0983nobodyさん
2006/01/17(火) 23:08:08ID:???0984nobodyさん
2006/01/17(火) 23:13:45ID:???0985nobodyさん
2006/01/17(火) 23:15:16ID:???0986nobodyさん
2006/01/18(水) 00:03:32ID:???0987nobodyさん
2006/01/18(水) 00:10:54ID:???そいうこと考えられない人間はエスパーにしか見えないんだが
0988nobodyさん
2006/01/18(水) 00:22:07ID:???ほとんどの鯖では、プロセス数を設定で抑えてるからなぁ。
0989nobodyさん
2006/01/18(水) 00:31:17ID:???メモリがいくらあってもプロセス数の制限があっても、
処理が遅かったら微妙だしな。
バランスよ。バランス。
そんな事もわからんのか。
0990nobodyさん
2006/01/18(水) 01:17:50ID:???0991nobodyさん
2006/01/18(水) 02:04:08ID:???0992nobodyさん
2006/01/18(水) 02:07:24ID:???0993nobodyさん
2006/01/18(水) 02:08:34ID:???0994nobodyさん
2006/01/18(水) 02:09:33ID:???漏れが建ててくる
0995nobodyさん
2006/01/18(水) 02:11:02ID:???0996nobodyさん
2006/01/18(水) 02:11:44ID:???否定になっとらんね。
0998nobodyさん
2006/01/18(水) 02:16:13ID:???思いっきり否定してるなw
1000nobodyさん
2006/01/18(水) 02:20:25ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。