Perlコーディング初心者質問スレ Part 53
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2006/11/26(日) 14:38:23ID:SlmGsFMB【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >>2-10
前スレ http://pc8.2ch.net/test/read.cgi/php/1153987463/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0002nobodyさん
2006/11/26(日) 14:40:22ID:???[プログラミング自体の経験が無い奴はまずココを読め]
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.8/
perl5.8.xのドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: http://www.cpan.jp/search.cgi
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
0003nobodyさん
2006/11/26(日) 14:41:13ID:???[モジュール]
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
0004nobodyさん
2006/11/26(日) 14:41:45ID:???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/
CGIに依存しないPerlの話題一般/Part2
http://pc8.2ch.net/test/read.cgi/php/1030548610/
★三 【 スクリプト改造工房 PART 9 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1143834740/
【 スクリプト改造依頼スレ 】(丸投げ) part5
http://pc8.2ch.net/test/read.cgi/php/1141174205/
0005nobodyさん
2006/11/26(日) 14:51:35ID:tkb0DDKs00061
2006/11/26(日) 17:42:11ID:???0007nobodyさん
2006/11/26(日) 17:50:07ID:???jcode::convert(\$Line,'euc');
0008nobodyさん
2006/11/26(日) 19:05:37ID:???0009nobodyさん
2006/11/26(日) 22:01:06ID:???0010nobodyさん
2006/11/26(日) 22:46:05ID:???0011nobodyさん
2006/11/26(日) 23:15:07ID:???Time::HiRes 使ってるです♪
0015nobodyさん
2006/11/27(月) 01:47:56ID:VGuJADoD0016nobodyさん
2006/11/27(月) 04:01:18ID:???0や-1を返す場合が多いと思いますが、undefにしない理由って何かあるんでしょうか。
undefなら0と同じくfunc() or dieなんて呼び方もできるし、undefの可能性ありと
常に思っておけばprint func()なんて不用意に書かなくなるかなと思ったんですが。
use warningでundefをprintするなと大量に警告されて、関数の書き方間違ったかなと
思ったりしました。
0017nobodyさん
2006/11/27(月) 09:39:53ID:???私は以前から 0 or DATA で返してるので、今からそのクセを治すのに苦労しそう・・・
0018nobodyさん
2006/11/27(月) 11:28:23ID:???0019nobodyさん
2006/11/27(月) 11:43:26ID:???なんて記述もよく見かけるけど、これは
・リストコンテキストなら空リスト
・スカラコンテキストならundef
になるって事でおk?
0021nobodyさん
2006/11/27(月) 15:21:54ID:???0022nobodyさん
2006/11/27(月) 16:19:33ID:???どのようにすればいいでしょうか?
0023nobodyさん
2006/11/27(月) 16:26:08ID:w7/znFw60024nobodyさん
2006/11/27(月) 18:28:22ID:???横だけど、
処理を意識して書くか perl に任せるかの違いじゃね?
呼び出し元にとってみればどっちも同じ挙動でしょ。
0025nobodyさん
2006/11/27(月) 18:34:15ID:???0026nobodyさん
2006/11/27(月) 18:53:55ID:???分ってる人もいるっぽいが、
return () ; or return ; の二択しかないよ(実質一択)。
かなり有名なネタだ。
初心者スレなので参考 URL を。
ttp://d.hatena.ne.jp/hyuki/20060406
0027nobodyさん
2006/11/27(月) 19:13:29ID:???↑このようなほうほうで暗号可したのですが
アルファベットのほかに、どのような記号が使われるのでしょうか?
リストがのってるサイトがあったらお願いします。
0030nobodyさん
2006/11/27(月) 20:00:40ID:???perlでは決まっていないので使用するシステムのcryptライブラリのマニュアルなどを
参照。たとえばこんなの。
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/crypt.3.html
0032nobodyさん
2006/11/27(月) 21:24:09ID:???CGIファイルの中身って見ることってできるんでしょうか?
HTMLは見れますが
CGIの中身って見れませんよね?
CGIの中身というのは、.cgiファイルのうp前の状態です。
0033nobodyさん
2006/11/27(月) 21:27:54ID:???0034nobodyさん
2006/11/27(月) 21:56:02ID:???返信ありがとうございます。
どのような設定をすれば見れなくできますかね?
有料鯖なのですが
わたしでもその設定はいじれるのでしょうか?
0035nobodyさん
2006/11/27(月) 22:10:03ID:???または全ディレクトリにindex.htmlを
0036nobodyさん
2006/11/27(月) 22:14:13ID:???とりあえず>>34の使っている鯖がCGI可なのかどうかが問題だ。
そういえばちょっと前にCGI不可の鯖に.cgiで置いてソース晒してた椰子が居たなあ…。
003716
2006/11/27(月) 22:21:07ID:???特に>>25,>>26 ありがとう
今日まさにこんなことやりそうになってました。undef返したら真なんですね。
(@array = &func()) or 〜
return;と書くとリストコンテキストでは空の配列を、スカラコンテキストでは
undefを返す、つまり
return wantarray ? () : undef;
と書くのといっしょってことですね。危うく間違った理解で突き進むところでした。
0038nobodyさん
2006/11/27(月) 22:23:31ID:???0039nobodyさん
2006/11/27(月) 22:58:38ID:???どうもありがとうございます。
.htaccessで設定できるのでしょうか?
やりかたがのってるサイトが見つからないので
よかったら教えてください
0042nobodyさん
2006/11/27(月) 23:19:09ID:???ブラウザでアクセスしていきなりソース丸見えという事はないと思うよ。
0043nobodyさん
2006/11/27(月) 23:19:55ID:???0045nobodyさん
2006/11/27(月) 23:26:52ID:???004616
2006/11/27(月) 23:35:54ID:???大方htaccessの設定だったんだろうなあ。下記とかかな。
AddHandler cgi-script .cgi
0048nobodyさん
2006/11/28(火) 00:15:03ID:???おまえ酷すぎ
0049nobodyさん
2006/11/28(火) 00:40:58ID:???httpd.confの設定をhtaccessで上書きするってこと。
全然はずしてるかもしれないけど、CGIは基本的にcgi-bin内で実行、
それ以外はhtaccessいじってね、っていう仕様なのかもね。
0050nobodyさん
2006/11/28(火) 00:43:31ID:???0051nobodyさん
2006/11/28(火) 00:44:27ID:???0052nobodyさん
2006/11/28(火) 00:45:28ID:5n8a+rNmある場合true、ない場合falseを返す変数があったら教えてください。
0053nobodyさん
2006/11/28(火) 00:46:41ID:???0054nobodyさん
2006/11/28(火) 00:47:22ID:???0055nobodyさん
2006/11/28(火) 00:48:20ID:???0056nobodyさん
2006/11/28(火) 02:23:57ID:???#いろいろな項目入力
<INPUT type="submit" value="実行a">
</FORM>
実行aボタンを押すと、a.cgiが実行されますが、
実行aボタンを押して同時に下のb.cgiを実行する
方法ありますでしょうか。
<FORM action="b.cgi" method="POST">
#いろいろな項目入力
<INPUT type="submit" value="実行b">
</FORM>
a.cgiの処理コードの中に、b.cgiの処理コードを
書くぐらいしか思いつきません。
よろしくお願いします。
0057nobodyさん
2006/11/28(火) 05:30:21ID:PG2nYwJ4phpで例えば<?php include("○○.php"); ?>というのがあります。
これは○○.phpを上の記述を書いたphpに表示させることができます。
perl(cgi)も同様なことできますでしょうか?
index.cgiにabc.cgiを表示させたいんですけど。
やり方ありましたら教えて下さい m(_ _"m)ペコリ
0058nobodyさん
2006/11/28(火) 09:44:54ID:???一つの体で、別々の場所に行く電車に乗れますか?
自分で思いついた方法で大丈夫です。
>>57
つ require、or module
0059nobodyさん
2006/11/28(火) 10:10:33ID:???レスありがとうございます
軽くしらべてみたんですが難しいですね
それでできればいいんですが・・・
がんばってみます
0061nobodyさん
2006/11/28(火) 10:54:01ID:???0062nobodyさん
2006/11/28(火) 14:47:00ID:???こういう文に置換 - s/ / / -を組み合わせたいのですが出力が上手く表示できません
どうしたらよいでしょうか?
0063nobodyさん
2006/11/28(火) 15:01:43ID:???0064nobodyさん
2006/11/28(火) 15:08:26ID:???0065nobodyさん
2006/11/28(火) 15:13:05ID:???0066nobodyさん
2006/11/28(火) 15:16:09ID:???これでもおk?
006766
2006/11/28(火) 15:21:19ID:???push(@grepedarray)
じゃなくて
push(@grepedarray, $_)
じゃないとだめかも
0068nobodyさん
2006/11/28(火) 15:55:32ID:???0070nobodyさん
2006/11/28(火) 19:56:25ID:???0071nobodyさん
2006/11/28(火) 20:59:18ID:???@grepedarray = grep { s/ / / ; /^[A-Z]/ } @array ;
@grepedarray = grep { $flag ++ if /^[A-Z]/ ; s/ / / ; $flag } @array ;
じゃ駄目なのか?(適当に書いたが)
0072nobodyさん
2006/11/28(火) 21:04:48ID:???007371
2006/11/28(火) 21:17:03ID:???そうだ罠。(実際書く時には当然もっと丁寧に if 文書くけどさw)
ただ @array に grep でアクセスした後、map or foreach で
アクセスするなら実質 2 回のループなわけで…。
そっちも十分に無駄っぽいよね。
0074nobodyさん
2006/11/28(火) 21:34:23ID:???もっと富豪的に
0075nobodyさん
2006/11/28(火) 21:43:35ID:???/^[A-Z]/
? s/ / /
? 1
: 1
: undef
} @array;
0077nobodyさん
2006/11/28(火) 22:05:24ID:???0078nobodyさん
2006/11/28(火) 22:10:11ID:???メモリのbenchってどうやんだ?やる方法ある?
0079nobodyさん
2006/11/28(火) 22:24:28ID:???そう来るならこっちの方がもっとスマート
grep { /^[A-Z]/ ? s/ / / || 1 : undef } @array;
0080nobodyさん
2006/11/28(火) 22:39:36ID:???0081nobodyさん
2006/11/28(火) 22:43:03ID:???0082nobodyさん
2006/11/28(火) 22:48:03ID:???Windowsじゃ動かんし使ったことも無いのだけれど、
forkしてから走らせて使用メモリサイズを調べるmemchならあるね…
ttp://search.cpan.org/~salva/Memchmark-0.01/lib/Memchmark.pm
freeで確保した領域をOSに返しちゃうタイプのライブラリだとそもそも成立しない方法っぽい
それから、Perlをデバッグオプションつきでコンパイルしておけば、
色々メモリ関連情報が調べられるんだったと記憶しているけれど、
どの程度できるのかよく知らんです。
0084nobodyさん
2006/11/29(水) 00:11:52ID:YenD9j36以下のようなプログラムを書きました。
my %no;
for (my $cnt = 1; $cnt <= 10000000; $cnt++) {
my $s_no = main::create_no();
$no{$s_no} = 1;
if(!open(FH, ">>./no.csv")){
print "Error " . __LINE__ . "\n";
exit;
}
flock(FH, 2);
print FH $s_no . "\r\n";
flock(FH, 8);
close(FH);
}
create_no内では
if(not exists $no{$c_no}){ return $c_no; }
このようにハッシュのexsistsを使用して重複チェックをかけているのですが、
やはりメモリを大量に消費してしまうため、900万あたりからものすごい時間が
かかってしまいます。
効率的な方法があればどうかご教示ください。
恐れ入りますが宜しくお願いいたします。
0085nobodyさん
2006/11/29(水) 00:19:15ID:???桁数が決まってるのでバイナリアクセスで
filepos1 = rnd * 総レコード数
filepos2 = rnd * 総レコード数
この pos1 と pos2 を入れ替え
あとは好きな回数だけswapすればいいかと思います
すべての件をメモリに保持しないので仕様メモリは極小で済みますが、
ディスクI/O がかなり発生します。
0087nobodyさん
2006/11/29(水) 01:15:11ID:???1000万回ライト
50万回シーク
50万回リード
50万回シーク
50万回ライト
って感じです
0088nobodyさん
2006/11/29(水) 01:15:58ID:???http://blog.livedoor.jp/dankogai/archives/50681645.html
0091nobodyさん
2006/11/29(水) 23:58:32ID:???$cnt = grep(/win/,@array);
print "大文字\n@grepedarray\n計$cnt個\n";
この文で$cntの部分が 計0個とでてしまんですが何が問題なんでしょう?
0092nobodyさん
2006/11/30(木) 00:14:17ID:???grep{} 内の $_ は元 array の要素のエイリアスだから、
一行目にて $_ を直接変更してしまっている。それがやなら
@grepedarray = map { $foo = $_ ; $foo =〜 s/win/BIG/ ; $foo } grep { /win/ } @array ;
てなかんじで map 中で $foo にいったん代入してから変更する事
ちなみに上の map 中の $_ も @array の要素のエイリアス( s/// したら変更されちまう)
0093nobodyさん
2006/11/30(木) 00:17:52ID:???ブロックで囲っちゃえばいいじゃんとか思うのだが
0094nobodyさん
2006/11/30(木) 00:18:50ID:???○一行目にて元要素を直接変更してしまっている。それがやなら
0096nobodyさん
2006/11/30(木) 00:32:28ID:???例を挙げるとシュワルツ変換には必須。
my @array = ( '1,2', '2,1' ) ;
my @sorted = map { $_->[0] }
sort { $a->[1]<=>$b->[1] }
map { [ $_, (split /,/, $_ )[1]] } @array ;
上を普通の for 文で書くと捨て array を数個書くはめになり、7 行以上になることは確定。
とは言いながらも使うかどうかは完全に趣味の問題
0098nobodyさん
2006/11/30(木) 02:58:21ID:???たとえばだけど、ハッシュを引数に取るサブルーチンに
foo( map { $_ => $hash{$_} =~ /^\d+$/ ? $hash{$_} * 2 : "str".$hash{$_} } keys %hash);
などと使えて便利。
map {
$_->[0] += 1900;
$_->[1]++;
@$_
} [(localtime)[5,4,3]];
0100nobodyさん
2006/11/30(木) 08:57:31ID:???…さすがにそれは普通に sub に渡すだろ
my $Now_date = sprintf qq|%04d/%02d/%02d|,
sub { $_[5]+1900, $_[4]+1, $_[3]}->(localtime) ;
もしくは
my $Now_date
= sub{ sprintf qq|%04d/%02d/%02d|, $_[5]+1900, $_[4]+1, $_[3]}->(localtime) ;
0101nobodyさん
2006/11/30(木) 10:53:04ID:???Jcode.pm は知らんけど、Encode.pm は重い。
一般的な掲示板CGIで use Encode; しただけで、2〜3割CPU負荷が高くなった。
0102nobodyさん
2006/11/30(木) 10:55:09ID:???open(FILEHANDLE, ">> filename") ;
という書き方をしますよね。
この書き方はファイル名がダブルクォーテーションで囲われないのでいまいち好きになれません。
例えば、ファイル名が " test.txt" (半角スペースが左にある) だった場合にはどうすればいいんでしょうか?
0104nobodyさん
2006/11/30(木) 11:10:16ID:???use CGI;
$q = new CGI;
print $q->param('name');
と解説していますが、
use CGI":all"
print param("name")
というコードを見つけました。(両方ともXSS脆弱性がありますがこれはサンプルです。)
後者だと関数名の重複が起こる可能性が高くなるかと思いますが、
速度低下などのデメリットはないでしょうか?
0105102
2006/11/30(木) 11:11:04ID:???カンマで区切って3つめのパラメーラーにすることも可能でしたか
そっちの方が美しいので全部をそっちに統一しようかとおもいます
ありがとです
0106nobodyさん
2006/11/30(木) 11:23:07ID:???速度はどうせ全体からすれば誤差ぐらいしか違わない。
むしろ関数名重複の方の問題でいまどきは普通使わない
書き方だから、既にそういう風に書かれているプログラムを
読まなきゃいけないならしょうがないが、これから書くのなら
前者の書き方にしとけ。
0107104
2006/11/30(木) 11:27:47ID:???なるほど。
見た目は美しくなくなりますが、パッケージ同士で同じ関数名が使われていたら困るのでそうしてみます。
ありがとうございました。
0108nobodyさん
2006/11/30(木) 18:04:24ID:???(times)[0]を使うやり方で出てくる数値が、実時間と違うような気がします。
これで求められる時間の単位は何なんでしょうか?
0109nobodyさん
2006/11/30(木) 18:33:33ID:???0110nobodyさん
2006/11/30(木) 19:51:57ID:???0111JAPU ◆lVJAPUTeX.
2006/11/30(木) 20:29:39ID:???map はあるリストを元にして別のリストを作るために使います。
もちろん、map を利用しなくてもプログラムは書けますが、map を利用したほうがすっきりと書けることが多いのです。
@odds = (20, 16, 4, 8, 12);
print_odds(map { $_*2 } @odds);
@ids = qw[mami pelsia emi yumi];
@names = map { $userinfo{$_}{name} } @ids;
>>100
むしろ、strftime
>>101
多く起動される環境であれば、mod_perl, SpeedyCGI, FastCGI を検討するべきかと。
たしかに Encode は重いけど…
% /usr/bin/time perl -e ''
0.00 real 0.00 user 0.00 sys
% /usr/bin/time perl -MEncode -e ''
0.07 real 0.01 user 0.01 sys
Perl v5.8.1以降であれば、JcodeはEncodeのwrapperとして動作するので、Encode単体より重くなります。
>>102
open FH, "> ./ filename"; としても良いです。
0112nobodyさん
2006/11/30(木) 21:31:15ID:???今まで、COOKIEが有効かどうかって、
x.cgiでCOOKIEセット、y.cgiに飛ばす
y.cgiでCOOKIE読んで、書き込みできたかチェック
こんなことしてました。
COOKIEが有効か調べる関数ってありますでしょうか。
よろしくお願いします。
0114nobodyさん
2006/11/30(木) 22:28:40ID:???my %func = (
'1'=>'\&hoge',
);
sub hoge
{
処理
}
$func{'1'}->();
ぐぐってみたらこれでhogeが実行できる
みたいなことが書いてあったんですが
ダメみたいなんすよ。
なぜかわかりませんかねぇ?
0116nobodyさん
2006/11/30(木) 23:24:54ID:???ぐぐって見つけたページもクォートなしでした。
いやはやお恥ずかしい。
0117nobodyさん
2006/12/01(金) 01:14:03ID:???戻り値はundefと0文字列のどっちが安全で親切なんだろうか。
ケース倍ケースかな。
0118nobodyさん
2006/12/01(金) 02:08:36ID:???sub aaa{
my $select;
foreach my $l(sort { $ir{$a} <=> $ir{$b} } keys %ir){
$select .= qq|<option value="$count">$l</option>\n|;
}
return $select;
}
上記をCGIで動かすと
「Can't use "my $a" in sort comparison at ...」
というエラーがでます。どう改善したらよいのでしょうか...
環境は
windowsXPsp2
ActivPerl 5.8.7
です。
0119nobodyさん
2006/12/01(金) 02:22:30ID:???my %ir = (
'kaede' => '大瀬 楓',
'mikitty' => '藤本 美貴',
'maasa' => '須藤 茉麻'
);
foreach my $l (sort { $a cmp $b } keys %ir){
print "<option value=\"$l\">$ir{$l}</option>\n";
}
うちではエラー出ず。
で、ちょっと突っ込みを
key で sort 掛けようとしてるんですよね?
なのにデータで sort 書けちゃってますよ?
0120nobodyさん
2006/12/01(金) 02:38:41ID:???はい。
以下のようなハッシュを値でソートしたいと思いまして・・・。
%ir = (
"あああ" => 1,
"いいい" => 2,
"ううう" => 3,
"えええ" => 4,
"おおお" => 5,
"かかか" => 6,
"ききき" => 7
}
.pl単体では上手くテストで動いたんですけど、いざCGI用に
コピーするとエラーがでます(T_T)
0121nobodyさん
2006/12/01(金) 03:20:08ID:???$count はどっからでてきたの? パッケージ変数? $ir{$l} の間違いじゃない?
それに、『sort に渡してる関数の中で「my $a」とは書けません』ってエラーなんだから
実際の CGI ファイルのコードは違うんじゃないの? ちゃんと確認した?
0123nobodyさん
2006/12/01(金) 10:57:45ID:???CGI.pm の escapeHTML 関数を使うと、「規制」 が 「&#8249;K制」 (実際には、&と#は半角) になっちゃうんですが、
どうにかならないものでしょうか…。
これじゃあ、日本語を処理する上で実用性が無いので困っています。
0124123
2006/12/01(金) 11:01:25ID:???HTMLの特殊文字は↓ですよね。
< = 0x3C
> = 0x3E
& = 0x26
" = 0x22
' = 0x27
そして、問題となる "規" は、0x8B4B です。
特殊文字にあたるコード(16進レベル)が含まれていないので、
おかしくなる理由がないと思うのですが…。
0125nobodyさん
2006/12/01(金) 11:10:09ID:???CGI.pmを読めばわかるが、charsetがISO-8859-1かWINDOWS-1252のときに
その変換が行われるようになっていて、charsetは特に指定がなければISO-8859-1
だからほっとくとそうなる。CGI.pmのescapeHTML使うんならcharset設定すればよい
と思われる。あるいは別のを自分で書くなりどっかから探してくるなりして使うかだな。
0126nobodyさん
2006/12/01(金) 11:16:18ID:???ファイル数は200個、容量は全部で40MB程のテキストファイルで、ファイル数と容量はだんだん増えていきそうです。
数回実行しただけで Load Average が 1.00 を超えるような状況で、このままじゃサイト閲覧者向けに公開できそうにないです。
データベースの構造はこんなこんな感じです。
要素1<>要素2<>要素3<>要素4<>要素5は長文要素5は長文要素5は長文要素5は長文要素5は長文要素5は長文(400バイトぐらい)
要素1<>要素2<>要素3<>要素4<>要素5は長文要素5は長文要素5は長文要素5は長文要素5は長文要素5は長文(400バイトぐらい)
要素1<>要素2<>要素3<>要素4<>要素5は長文要素5は長文要素5は長文要素5は長文要素5は長文要素5は長文(400バイトぐらい)
要素1<>要素2<>要素3<>要素4<>要素5は長文要素5は長文要素5は長文要素5は長文要素5は長文要素5は長文(400バイトぐらい)
ちなみに、検索処理には index 関数を使っています。
ファイル内容は一回変数にいれるといったことはせずに、openでよみとって 1行ずつ検索して、おわったら閉じる。openでファイル開いて・・・ の繰り返しです。
負荷の原因と考えられるのはどこらへんでしょうか?
(1) 200個 のファイルを open 関数で開く処理。
(2) index関数での検索
ちなみに、必要なのは要素1と要素2だけ、しかも、完全一致でいいので、
split関数で要素毎に分割して == を使って等しければー、にしたほうが負荷は少なくなるもんなんでしょうか?
ある程度絞り込めれば実験でもいいんですが、
負荷関係に詳しい方がいたらお願いします。
0127123
2006/12/01(金) 11:21:25ID:???回答ありがとうございます。
charset指定というのはどんな感じにやるもんなんでしょうか?
use Encode 風に指定して、
use CGI 'sjis';
use CGI 'shift_jis';
とかやってみましたが、駄目だったようですorz
0128nobodyさん
2006/12/01(金) 11:31:17ID:???sub aaa{
my $count = 1;
my $irselect;
foreach my $l(sort { $ir{$a} <=> $ir{$b} } keys %ir){
next if ($l == 99);#("99"=>"99")というデータを省く
$irselect .= qq|<option value="$count">$l</option>\n|;
$count++;
}
print<<"_EOT";
.
.
<select>
$irselect
</select>
.
.
_EOT
}
こんな感じです。
一応並び順を考えない仕方で解決しました。
もう少し自分で調べてみます。ありがとうございました。
0129nobodyさん
2006/12/01(金) 11:32:40ID:???キーワード教えてもらったんだからマニュアルぐらい読めよ...
Provided that you have specified a character set of ISO-8859-1 (the
default), the standard HTML escaping rules will be used. The "<" char-
acter becomes "<", ">" becomes ">", "&" becomes "&", and the
quote character becomes """. In addition, the hexadecimal 0x8b
and 0x9b characters, which some browsers incorrectly interpret as the
left and right angle-bracket characters, are replaced by their numeric
character entities ("?" and "?"). If you manually change
the charset, either by calling the charset() method explicitly or by
passing a -charset argument to header(), then all characters will be
replaced by their numeric entities, since CGI.pm has no lookup table
for all the possible encodings.
charset()メソッドを使うか、header()に-charset引数を渡せばいいらしい。
0131123
2006/12/01(金) 11:39:27ID:???$CGI->charset('Shift_JIS');
ありがとうございました。
0132126
2006/12/01(金) 11:43:37ID:???全体で 1秒ちょっとだったのが、index関数の部分をコメントアウトしたら、
0.01秒ぐらいに…。
ここまで極端に分かるとはおもいませんでした
0133126
2006/12/01(金) 11:47:52ID:???while (my $line = <IN>)
の部分もコメントアウトしてました。
これを外したら、0.6秒ぐらいに…。
膨大なデータを1行ずつ読み込む、ここが負荷のメインだったようです。
こうなると、namazuとか他の言語を使うぐらいしか負荷削減の方法はないですね。
0134nobodyさん
2006/12/01(金) 11:49:40ID:???毎回40MBあってこれからもどんどん増える予定のファイルを全部なめるのがそもそもだめ。
もう少しデータの持ち方を工夫した方がいいよ。バークレーDBぐらいはせめて使え。あるいは
インスコ面倒でなければまともなDB(mysqlとかpostgresとか)つかっちゃったほうが楽な気も
する。
0135126
2006/12/01(金) 11:54:15ID:???なるほど
DB使ったほうがいいわけですか…
それは思いつきませんでした
実はこれフリーで配布されているCGIスクリプトのログファイルでして
過去ログも含めた検索をやりたいのでその検索スクリプトを自作していたとこなんです
ログファイルをHTML化して namazu かなんかで検索させるのとDB化、両方を検討してみます。
0136nobodyさん
2006/12/01(金) 12:07:44ID:???でログを読んだときは負荷減りませんか?
0137nobodyさん
2006/12/01(金) 12:40:28ID:???0138126
2006/12/01(金) 12:42:32ID:???サンクスです。
読み込んだ時点の負荷は 1/3 〜 1/2 程度になりました。(でも1行ずつの処理を加えると同じかそれ以上になるかも…)
ただ、変数 $buff には全データが入っていることになるので、これを1行ずつ処理するときにどうすべきかが悩みます。
split 関数 で改行コードでの分割をして、配列にいれてから、while 関数で1行毎に処理したくなりますが、
これだとメモリ山ほど食いそうですし…。
0139nobodyさん
2006/12/01(金) 13:28:54ID:???>>134に禿同です。
検索対象が決まっているのなら、その元のデータから検索用のデータ(インデックス)を作るプログラムを作り、
定期的に保守をするのが楽です。この処理自体が多少重くても、バックグラウンドで1日数回で済むのなら
いいのではないかと。
インデックスデータは、DBMに持たせる(検索対象文字列をキーにする)のが一番効率がいいと思います。
プレーンテキストでも、元のデータを丸々スキャンするよりはるかにましです。
0141nobodyさん
2006/12/01(金) 14:04:00ID:???+ * ? . ( ) [ ] { } | \
らしいのですが、/もですよね?
if($aaa =~ /\//)
とすれば望みどおりの動作をするのでこう思うのですが、間違ってますか?
0142nobodyさん
2006/12/01(金) 14:26:10ID:???当然要エスケープ
0143nobodyさん
2006/12/01(金) 18:30:05ID:???$hoge =~ m{/}
0144nobodyさん
2006/12/01(金) 18:55:31ID:???ここの真ん中付近にあるリスト作成を使ってファイルを出力しようとしてるんですが、
出力ファイル先のカタカナのサ行などが文字化けしてしまいます。
jcode.pl を使えば直るんじゃないかと思っているのですが、どこに何を書き足せばいいのでしょうか?
0145nobodyさん
2006/12/01(金) 18:58:33ID:???http://pc8.2ch.net/test/read.cgi/php/1157787046/
0146nobodyさん
2006/12/01(金) 19:39:42ID:???そんなに大変な事だったんですか。
どこかを書き足すだけで解決できると思ってたのですが、大変そうなので諦めます・・・。
申し訳ありませんでした。
0147nobodyさん
2006/12/02(土) 00:17:21ID:???<INPUT type="submit" value="送信">
</FORM>
これを送信ボタン押すとPOST形式で送信されると思いますが、
プログラムが自動でPOST送信する方法ありますでしょうか。
GET形式の場合は、"http://xxx/xxx.cgi?xxx=xxx"
wget すればよいでしょうか。
よろしくお願いします。
0148nobodyさん
2006/12/02(土) 02:43:19ID:???GETの場合そのとおり。「送信」はURL encodeしる。curl なら
curl -d xx=送信(URL ncodeしる) "http://xxx/xxx.cgi"
でPOSTできる。ってかここperlスレなんだが。
LWPでもできるよ。
0150nobodyさん
2006/12/02(土) 11:24:22ID:???GDで日本語文字列を出力したいのですがうまくいきません。
現状、stringTTFメソッドでTrueTypeフォントのパスを指定してるのですが(WindowsのFontsフォルダ内)
エラーは出ないものの「・・・」といった出力にしかなりません。英数字でも同様です。
Winで画像出力の際にbinmodeを指定するような感じで
何かあるのかも、と思って調べてるのですが・・・
ちょっと漠然としていますが、チェックポイントなど気がついた方いましたら
おしえてください。よろしくおねがいします。
0151nobodyさん
2006/12/02(土) 12:46:30ID:???$@とか勝手に上書きしたらまずいですか?
#やってみたらできましたが・・
何か専用の特殊変数ってありますか?
0152nobodyさん
2006/12/02(土) 13:03:38ID:???my $err = &testfunc(\$ret, \$val1, \$val2);
のように渡して、戻り値は \$ret へ入れて、エラーコードとこエラー文字列は $err に返す
といったことも出来る
エラー無しの場合は $err は undef であるか "" または 0 です。
0153nobodyさん
2006/12/02(土) 13:23:08ID:???関数はモジュール化したいので、自前のグローバル変数は使いたくないんですよねえ。
しかもオブジェクト指向にしたいんですが、returnでエラー返す以外に
定番の方法ってないですか?
0154nobodyさん
2006/12/02(土) 13:29:26ID:???しちゃうとか。
0155nobodyさん
2006/12/02(土) 14:11:21ID:???0156nobodyさん
2006/12/02(土) 14:25:39ID:???0157nobodyさん
2006/12/02(土) 14:27:33ID:???結果をオブジェクトで返したらどうか
正常ならnew HogeResultして情報をそれに格納し、そのリファレンスを返す
エラーなら文字列を返す
受け取り側は
my $res = getHoge($foo);
if (ref $res) {
# 成功
} elsif {
# 失敗
}
0158nobodyさん
2006/12/02(土) 14:41:08ID:???ありがとうございます・
0159nobodyさん
2006/12/02(土) 16:25:39ID:???Perlをすべて把握している人って世の中にいるんでしょうか。
オライリーさん以外に。
0160nobodyさん
2006/12/02(土) 16:41:38ID:???たとえばEncodeだけに限っても、メインのメンテナーのdankogai以外にも何人もかかわってる。
個人ですべてを把握するのは無理じゃないか?
# オライリーさんって誰? Tim O'Reillyのことか?
0162JAPU ◆lVJAPUTeX.
2006/12/02(土) 20:09:06ID:???>>112
ない。Cookieが読み込まれていない場合でも動作するように書くべし。(エラー出して終了でもいいけど。)
>>117
個人的には undef が好み。処理によっては結果的に空文字列を返すこともあるから、undef に統一しておいたほうが分かりやすい。
>>135
HTML化して、Googleに検索させる作戦もあり。自前でやる場合は他の方が書かれている通り。
>>141
迷ったら、記号類はとりあえず \ を前置しておけばOK。記号類 → \ をつけた場合、それがメタ文字であってもそうではなくてもその文字自身を表す。
英数字 → \ をつけた場合、メタ文字になる場合がある。
>>151
問題ない。やりたまえ。
>>151,154
多くのモジュールでは error みたいなメソッドを定義していますね。んで、そのメッセージを格納しておくにはグローバル変数を使っているわけですが。
グローバル変数 == 悪 というわけではないので、ホゲホゲ。外部から隠蔽したいなら、
{ my $ERRORMSG; sub _set_error { $ERRORMSG = "@_" } sub error { $ERRORMSG } }
こんな感じ? さらに、_set_error も隠蔽したいなら、
{ my $ERRORMSG; my $_set_error = sub { $ERRORMSG = "@_" }; sub error { $ERRORMSG } sub hoge { $_set_error->("hoge"); return undef; } }
0163nobodyさん
2006/12/03(日) 01:37:01ID:???どのようにすれば良いでしょうか?
if(現在の時間 - 最終投稿時間 < 10秒)er{エラー}
このような感じでしたいのですが
最終投稿時間の取得はどのようにすれば良いでしょうか?
0164nobodyさん
2006/12/03(日) 02:25:35ID:???(クッキーが処理できない場合は投稿そのものを拒否)
0165nobodyさん
2006/12/03(日) 02:49:58ID:???いろいろ調べたんだね。えらいぞ。
これはぼくの想像だけど、恐らくは既存の何がしかの Web アプリケーションに機能追加しようとしているんだね。
そしてその機能は(恐らくは同一端末からの)投稿間隔が短くなりすぎないように制限したい、とそういうわけだ。
で、不明点が「最終投稿時間の取得」方法ということだけれど、「取得」というからには保存しているのだろうね。
「現在の時間」は恐らくアプリケーションが動作する機械のシステム時刻なので、そこから取ってくることができるけれど、あなたのアプリケーションにおける特定端末からの投稿履歴は、あなた以外に面倒を見てくれる人はいないはずなので保存しているはず。
保存の目的がそもそも「最終投稿時間の取得」なのであれば、そこから取り出す事も考えていたはずですよね。
あとはそのようにコードを書くだけだよ。がんばって。
0166nobodyさん
2006/12/03(日) 03:31:47ID:???セッション管理しているかどうかで変わってくる。
セッション管理不可な場合、IPアドレスで判断することになるかな。
単純にIPアドレスに対応するファイルを更新して、そのファイルのタイムスタンプと比較するのは簡単だね。
ただし、プロキシ経由のクライアントは一緒くたに判断されちゃうかな。
セッション管理してれば、セッションに関連づけて何らかの方法で更新時刻を保存するんだろうね。
なんか抽象的な答えだな。
色々やり方があると思うんだが、アプリケーションの要件用途で適切な道具は変わってくるからね。
0168151
2006/12/03(日) 10:08:46ID:???evalが正常時に$@を初期化してしまうので、呼び側で配慮が必要ですね。
sub hoge {$@ = 'hoge'; return}
eval '&hoge(); $gERROR = $@';
$@ and die;
print $gERROR if $gERROR;
0170nobodyさん
2006/12/03(日) 19:59:04ID:???>>168
呼び出し側に配慮が必要って時点で止めないか?普通。
お前さんが体感した通り $@ を書き換えるのはお行儀が悪いし呼出側に負担を強いる。
0171nobodyさん
2006/12/03(日) 22:05:01ID:???数件、代案を教えて頂いた限りで、「エラーは$@を参照してくれ」という
取り決めが一番呼び側の負担が少ない気がするのですが、どうでしょう。
$@はevalとバッティングするのでevalの場合のみ168のように書かなければ
ならないことは、もし説明がなかったとしても自明なことのように思います。
ほかに$@を使うデメリットってあるでしょうか。
0172nobodyさん
2006/12/03(日) 22:15:17ID:???だったらそうしろよ、って話なのですが、本当にそれでいいのか、検討しているところです。
0173nobodyさん
2006/12/04(月) 00:26:50ID:???本当に「エラー」ならば Carp or wanings ( $SIG{__WARN__} ) に任せれば?
もしくは誰かがレスした Error.pm
単なる「制御上のメッセージ 」を返したいならば戻り値を下みたいな
ref にしちまえばいいだけじゃねーの?
return { 'data' => undef, 'msg' => 'お前さんの望んだメッセージ' } ;
$@ に関するルールを変更してまで $@ を参照させるってのは傲岸に
感じる。上の例で云うと前者には用意がされてるわけだし、後者は
エラーですらない。
CPAN でそんなモジュールに当った事がないがそういうモジュール
に当ったら、別モジュールを探すなあ。
そういうモジュールがあったら後学のために教えてください。
0174nobodyさん
2006/12/04(月) 00:33:59ID:???死にたくないなら生きればいいじゃない。
0175nobodyさん
2006/12/04(月) 16:55:58ID:???どういうふうにすればよいのでしょうか?
index.htm(フレームについて書いたページ)
^^^^^^^^^^|^^^^^^^^^^^^^^^^^^^^|
メニュー | メインページ |
menu.htm | main.htm |
| |
| |
| |
| |
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
普通一ページだけだったら、
print <<"HTML"
<html>
・・・
</html>
HTML
ですよね。
print <<"HTML"
#indexを書く
HTML
print <<"HTML"
#menuを書く
HTML
print <<"HTML"
#mainを書く
HTML
これだけで、OKでしょうか?
よろしくお願いします。
0176nobodyさん
2006/12/04(月) 17:08:08ID:???それぞれのxx.htmに対応するcgiを用意する。
複数用意するか、なんかパラメタ与えて動作を
切り替えるかはお好みで。
クライアントからは別々にリクエストが来るので、
情報をひきつぎたければそれもパラメタで引き継ぐ
とかセッション使うとかいろいろ必要。
たぶん質問の仕方からいってこの辺の仕組みは
すぐには理解できないと思うので地道に勉強して
くれ。
0177nobodyさん
2006/12/04(月) 17:27:59ID:???0178nobodyさん
2006/12/04(月) 17:52:25ID:???ありがとうございます。
ちょっとずつ勉強してみます。
>>177
なるほどぉ。
フレーム使わない方法もありますね。
0179nobodyさん
2006/12/04(月) 18:23:52ID:???0181nobodyさん
2006/12/04(月) 21:26:59ID:???ActivePerl Build 819 MSWin32
には、HTML埋め込み型のaspl(C:\Perl\eg\PerlEx\examples.aspl)とか
あるんですが
Apache(Linux系)とかでも、埋め込み型で動かせるのって
なかったでしょうか?
昔に、そんなのがあった気がするんですが
名前が思い出せなくて
0182181
2006/12/04(月) 21:29:45ID:???思い出しました。
Embperlとかでした
0183nobodyさん
2006/12/05(火) 00:10:37ID:???$str =~ s/[C-G][pqst]/1-9/g;
print $str;
置き換えたところ1から9と順に置きかえたいのですが
置き換えた部分すべて1-9と表示されてしまいます。
どの部分を変えればよいのでしょうか??
0184nobodyさん
2006/12/05(火) 00:35:41ID:???これがお望みのものか?
$str = "AoUDqGrsqcUSgVGsCphafNXhkEtsfCcANeLDsTFq";
$cnt = 1 ;
$str =〜 s/[C-G][pqst]/$cnt ++/eg ;
print $str . "\n" ;
0186nobodyさん
2006/12/05(火) 01:58:21ID:???知らなかった (;゚Д゚)
0187nobodyさん
2006/12/05(火) 02:21:49ID:???0188nobodyさん
2006/12/05(火) 02:23:05ID:???後から送られてきた画像が上書きされてしまいます。
binmode(STDIN);
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'} );
print "Content-type: image/jpg\n\n";
open(IMG,">sample.jpg");
binmode(IMG);
print IMG $buffer;
close(IMG);
これを No1.jpg No2.jpg・・・のように連番で保存させたいのですが
どこを変えればいいのでしょうか?
よろしくお願いします。
0189nobodyさん
2006/12/05(火) 04:54:50ID:???最後の行から順番に表示するってのがあって、答えは納得できたのですが
↓でうまくいくのが、foreachをwhileにするとうまくいかない理由がわかりません
reverseがなければwhileでもエラー出ないのですが・・・
何故なんでしょうか?よろしくお願いします
foreach (reverse <>) {
chomp;
print "$_\n";
}
0190nobodyさん
2006/12/05(火) 12:05:35ID:???それ、あなたの期待する $_ もしくは @_ への代入が実行されてない。
以下が機能しないのと同じこと。
reverse 'foo' ;
print $_ . "\n" ;
print @_ . "\n" ;
reverse 関数は単独使用時に「左辺が指定されてなかったら $_ or @_ に代入する」
なんて機能を持ってない(つーか勝手にコンテキストの判断してもらっても困るw)。
foreach VAR ( LIST) BLOCK の場合は () 内のリストを暗黙の内に一個一個 $_ に
入れてくれるけど while ( EXPR ) BLOCK は、そんな器用なことはしてくれない。
() 内に条件式を必要とするだけ。
while ( <> ){ } は、あくまでも while ( defined ( $_ = <> ) ) { } の省略。
foreach と同一結果を得たければ、やはり一旦配列に突っ込むのが正攻法
@foo = reverse <> ;
while ( defined ( $_ = shift @foo ) ){ print $_ ; }
以下は見た目、正解っぽく感じるかも知れないが当然ダメ。
while ( defined ( $_ = reverse <> ) ){ print $_ ; }
別のお話しになってしまうので説明割愛。
0191nobodyさん
2006/12/06(水) 00:09:51ID:???> 正規表現中でインクリメントって出来るのか
> 知らなかった (;゚Д゚)
s/// 式の右部分は正規表現じゃないということも知らなかったんだね。ふぁいと。
0192nobodyさん
2006/12/06(水) 00:57:09ID:???0194nobodyさん
2006/12/06(水) 17:53:32ID:???1 while $a =~ s/(.*\d)(\d\d\d)/$1,$2/;
配列の最初の部分しか出力されないのですがどうしたらよいでしょう?
0195nobodyさん
2006/12/06(水) 18:14:05ID:???0196nobodyさん
2006/12/06(水) 19:17:48ID:???わかってると思うけど、式が評価されるのは /e オプションの効果です。
ただ単に右部分に式書いても評価されないので注意。
>>194
まず書いたスクリプトが動くかどうか確かめましょう。
0197nobodyさん
2006/12/06(水) 23:57:05ID:???即時別のサーバーへftp接続してアップロードしたいと思っています。
サーバーにNet::FTPをインストールすることができない状況で可能ですか?
良い手があれば教えてください。
サーバーのOSはSolaris9、CGIバージョンは5.8.8です
0198nobodyさん
2006/12/07(木) 00:53:15ID:???x.cgiを
open(OUT,"+<$file") ;
flock(OUT, 2);
@data = <OUT>;
#close(OUT); closeしません。
ブラウザでx.cgiをcloseしないで処理終わりました。
違うブラウザでx.cgiを実行したんですが、flockで止まりませんでした。
x.cgiのプロセスが終わると、flockはcloseしなくても
解除されるんでしょうか?
ループとかさせて、プロセスが生きてたりすると
x.cgiのflockで止まりますか?
よろしくお願いします。
0199nobodyさん
2006/12/07(木) 01:38:36ID:???0200nobodyさん
2006/12/07(木) 01:41:43ID:???で、flockはアドバイザリなのでflockを使ってないプログラムなどからは問答無用で読み書きできます
0201nobodyさん
2006/12/07(木) 07:35:05ID:???0202nobodyさん
2006/12/07(木) 11:11:15ID:SekHzZx8で使われている検索エンジンにジャンプし検索結果を表示したく思います。
今のままですと、文字化けが起きてしまいます。
(HTMLソース)
<form method="POST" action="http://www.hogehoge.co.jp/cgi-bin/search/" target="_blank">
<input type="text" name=textdata size="20">
<input type="submit" name=botan value="Search">
</form>
文字化けがしないようperlプログラムをかませて、shift JISに変換してから変換させたい
のですが、どのようなコードを書いたらよいでしょうか?
0203nobodyさん
2006/12/07(木) 11:26:48ID:???0204nobodyさん
2006/12/07(木) 11:27:17ID:???こっちのスレのほうがオススメ
http://pc8.2ch.net/test/read.cgi/php/1145308869/
0206nobodyさん
2006/12/07(木) 16:35:47ID:???そうなのか。
それは知らなかった…。
質問なのですが、
・Perl で flock したファイルを php で読み書き。
・php で flock したファイルを perl で読み書き。
・test1.cgi で flock したファイルを test2.cgi で読み書き。
この場合って、正常にロックはされるのでしょうか。
0208206
2006/12/07(木) 16:53:51ID:???なるほど
私はflockがちゃんと動作する環境で正しくプログラミングしていると思われるので大丈夫ですねb
安心致しました^^
0210nobodyさん
2006/12/07(木) 20:53:15ID:???プロンプトに最初から C:\DOCUME~1\user\デスク~1> となっているときに
perl -MCwd -e "print cwd"
とすると、C:/DOCUME~1/user/デスク~1 を返すのですが、
C:\DOCUME~1\user\デスク~1> cd "C:\Documents and Settings\user\デスクトップ"
C:\Documents and Settings\user\デスクトップ> perl -MCwd -e "print cwd"
とすると、C:/Documents and Settings/user/デスクトップ を返してしまいます。
これを、常に C:/DOCUME~1/user/デスク~1 を返して欲しいのです。
どなたかご存じでしょうか。
0211nobodyさん
2006/12/07(木) 21:02:43ID:???perl -MWin32 -MCwd -e "print Win32::GetShortPathName(cwd)"
でも何に使うの?
0212210
2006/12/07(木) 21:52:30ID:???おお素晴らしい。ありがとうございます。
ファイルメーカーPro内で外部コマンドを呼べる外部関数(Peta-Execute)があるんですが、
この中で短いパスで呼ばないとコマンドが動かないみたいなんです。長いパス付のコマンド
(というかperlの第一引数となるplファイル)にダブルクォーテーション付で呼んでも動作しなかった
ものですから。Winの問題なのか、関数の問題なのか、ファイルメーカーProの問題なのかわからず、
今試行錯誤中です。
0213nobodyさん
2006/12/07(木) 23:14:06ID:SekHzZx8<form method="POST" action="hogehoge.cgi" target="_blank">
<input type="text" name="text_name" size="25">
<input type=submit name="img_botan" value=OK>
</form>
↑のボタン(type=submit)を↓のようにして、同じ機能を持たせるには、
formタグ内をどのように変更したらよいでしょうか?
<input type="image" name="img_botan" value="OK" src="hogehoge.gif">
「type="image"」で作成してしまうと、postで上のデータを受け取った時
img_botanのvalue値の「OK」が受け取れない状況です。
0214nobodyさん
2006/12/07(木) 23:17:11ID:???まず英単語からな
0215nobodyさん
2006/12/07(木) 23:30:43ID:???微妙どころか全然Perlから離れとるがな(´・ω・)
<input type="hidden" name="img_botan" value="OK">
<input type="image" src="hogehoge.gif">
0216nobodyさん
2006/12/07(木) 23:56:27ID:???0217nobodyさん
2006/12/08(金) 09:56:10ID:ewFyIfPgここの買取口数とメールフォームの口数を買い取り口数にマイナスする計算の連動
似たようなスクリプトありませんか?もしくは作れますか?
よろしくお願いいたします
0218nobodyさん
2006/12/08(金) 10:03:05ID:???0219nobodyさん
2006/12/08(金) 10:48:17ID:joMMTMjE<form method="POST" action="hogehoge.cgi" target="_blank">
<input type="text" name="text_name" size="25">
<input type=submit name="img_button1" value=action1>
<input type=submit name="img_button2" value=action2>
</form>
↑のボタン(type=submit)を↓のようにして、同じ機能を持たせるには、
formタグ内をどのように変更したらよいでしょうか?
<input type="image" name="img_button1" value="action1" src="hogehoge1.gif">
<input type="image" name="img_button2" value="action2" src="hogehoge2.gif">
「type="image"」で作成してしまうと、postで上のデータを受け取った時、
「img_botan1」のvalue値の「action1」と
「img_botan2」のvalue値の「action2」が受け取れない状況です。
>>215
すみません、質問が悪かったです。
1つのform内でしたらhiddenを使えば解決するのは分かってました。
ごめんなさい。
0220nobodyさん
2006/12/08(金) 11:25:23ID:???もともとイメージマップの機能だから値はボタンを押したときの画像内でのマウス
カーソルの座標が送られてくるんじゃなかったっけ。どのボタンかを識別する
用途ならnameを一意につけて値のありなしだけ判定すれば分だと思われる。
0222nobodyさん
2006/12/08(金) 14:31:08ID:???例えば書き込みの際、動画場所を
http://www.youtube.com/watch?v=2m0P-Q0joxU
のように指定させます。
そこからflvと再生待ち画像のパラメータを取得したいのですが
$url= http://www.youtube.com/v/2m0P-Q0joxU
#↓(ここに飛ぶ)
$url= http://www.youtube.com/p.swf?video_id=2m0P-Q0joxU&eurl=&iurl=http%3A//sjc-static6.sjc.youtube.com/vi/2m0P-Q0joxU/2.jpg&t=OEgsToPDskKKNZHbTD7d-oE2My88f86P
のように飛び先のアドレスに変換するにはどうしたらいいのでしょうか?
分かりづらくてすいません。
02231/2
2006/12/08(金) 15:14:42ID:EPvPWdgJttp://www.nishishi.com/cgi/tinyurl/
ここのcgiを設置したのですが、設定ファイルをfileopenする所でエラーになるようです。
(配布されている状態のままアップすれば動くはずなのですがエラーになりました)
原因としては何が考えられるでしょうか?
環境:Windows IIS 6.0
Activeperl 5.6.1
02242/2
2006/12/08(金) 15:15:52ID:???# -------------------------- #
# データの読み込みと一致確認 #
# -------------------------- #
sub checkdatas
{
my $checkstring = shift @_;
# データファイルを呼んで一致項目を探す
my $redurl = "";
if( open(IN,"$datafile") ) {
foreach my $oneline ( <IN> ) {
if( $oneline =~ m/^$checkstring,(.*)/ ) {
# 見つかったらループを抜ける
$redurl = $1;
last;
}
}
close(IN); # ファイルを閉じる
}
else {
# 読めなかったらエラー
&errorexit("設定ファイルが読み込めませんでした。");
}
return $redurl;
}
-----
よろしくお願いします。
0226223
2006/12/08(金) 16:13:02ID:???サーバの設定により、設定ファイルのパスをフルパスで設定する必要があったようです。
お騒がせ&スレ汚しすみませんでした。。。
0228nobodyさん
2006/12/09(土) 03:02:11ID:MKj32g5Xperlのセッション管理について教えてください。
CGI::Sessionモジュールでセッション管理を行おうと思っているのですが、このソースでセッションがブラウザに表示されるのですが、
セッションが/cgi-bin/sessionフォルダに保存されません。
コマンドラインで perl session.cgiと実行すると正常にセッションが保存されます。
どなたか解決法教えて頂けませんか。
session.cgi
#!/usr/bin/perl
use strict;
use CGI;
use CGI::Session;
my $cgi=new CGI;
my $session=CGI::Session->new(undef,$cgi,{Directory=>'./session'});
$session->expire('+10m');
my $cookie=$cgi->cookie(-name=>"CGISID",
-value=>$session->id(),
-expires=>"+30m");
print $cgi->header(-charset=>'euc-jp',
-cookie=>$cookie),
$cgi->start_html('セッションテスト'),
$cgi->h1($session->id);
print $cgi->end_html;
コマンドラインで perl session.cgiと実行するとセッションIDが作成されますが、ブラウザで実行するとなぜか生成されません。
どなたか教えて頂けませんか。
0229nobodyさん
2006/12/09(土) 03:05:44ID:MKj32g5Xブラウザだとセッションが保存されなくて困っています。
0230nobodyさん
2006/12/09(土) 11:36:47ID:???0231nobodyさん
2006/12/09(土) 17:43:35ID:???0232nobodyさん
2006/12/09(土) 21:29:28ID:???↓のスレッドにレス付けておきました。
Perlについての質問箱 28箱目
http://pc8.2ch.net/test/read.cgi/tech/1162273941/
0233nobodyさん
2006/12/10(日) 11:50:46ID:Mfd0yjZD例1:my $date = new Date;
例2:my $date_ins = new Date;
例3:my $date_obj = new Date;
例1だと、日付を格納する変数名と被るから、別の名前にしようと思うんだけど・・・
みなさんのご意見をお聞かせ下さい(´・ω・`)
0234nobodyさん
2006/12/10(日) 13:38:22ID:???スタイルはご自由に
0235nobodyさん
2006/12/10(日) 14:14:09ID:???$date = Date->new;
$data_obj = Date->new;
0236nobodyさん
2006/12/10(日) 14:16:42ID:???上のようなコードで、$date を受け取れますが、$date のみを受け取りたい場合にはどうすれば良いのでしょうか?
他を $hoge とかにすればいいという考えもできますが、それだと一度変数にいれるという処理が無駄であり
高速で処理をしたいので処理速度低下に繋がると思います。
シンプルな方法があれば教えて下さい。
たしか、変数部分に何かの定義済み定数をいれたら、その部分を受け取らないということになったようなきがしたんですが、
忘れてしまいましたorz
0237nobodyさん
2006/12/10(日) 14:28:59ID:???my( undef, $date ) = split /<>/, $line;
my( undef, $date, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef) = split /<>/, $line;
0239nobodyさん
2006/12/10(日) 15:35:39ID:???今時貧民的プログラミングをする必要はない、ログやロジックはシンプルにした方が良い、と思って掲示板作ったんですが、
速度が異常に遅いんです。
原因調べたら、掲示板のID生産のために crypt を使っているのですが、そこがとっても遅いんですね。
それを外したら100倍近いスピードに。
ようするにIPからIDを生成のために crypt を使っているんですが、表示のたびに全員分の生成をするので時間がかかるんです。
高速で実行できる crypt モジュールみたいのはないでしょうか?
0240nobodyさん
2006/12/10(日) 15:48:35ID:???書き込み時にcryptも作ってログに書けばおk。
time→書き込み日時も同様。
もしくは、ある程度ユニークな文字列が得られればそれで良いというのなら
cryptなんて使わなくても自分で適当なサブルーチン組めばいい。
0241239
2006/12/10(日) 15:53:23ID:???> 書き込み時にcryptも作ってログに書けばおk。
やっぱそうですよね(´・ω・`)
もう完成しちゃったし使用を開始しているので既にログがある状態なんです
・ファイルを読み取ってIDをファイルに書き込むプログラムを作る
・それを使って既にあるログにIDを追加する
・掲示板CGIへの投稿時にログにIDを追加するようにする
面倒ですが上の手順でやってみます
0242nobodyさん
2006/12/10(日) 16:04:54ID:???・新規の書き込みにはcryptでID情報を追加
・既存のID無しログはいちいちcryptするか適当な嘘IDを表示
というようにしておけばそのうち古いログが流されて問題なくなるよ。
なお、ログの修正をするのなら一度落としてきてローカルでやるように。
0243239
2006/12/10(日) 16:15:27ID:???なるほど…
ログは永久保存な仕様なんです
なので諦めてログ修正することにします
ローカルにはPerlとかインスコされてなくて面倒なので鯖でやることにします
専鯖なので負荷は余裕です>A<
0244nobodyさん
2006/12/10(日) 16:27:25ID:???> 専鯖なので負荷は余裕です>A<
(゚Д゚)ハァ?
俺の中に僅かに芽生えていたこいつに協力しようという感情が消滅した。
後はもう勝手にやってくれ。
0245nobodyさん
2006/12/10(日) 16:28:14ID:???2chに負荷がかからないように、差分のみを取得するようにしたいのですが。
0248nobodyさん
2006/12/10(日) 19:12:06ID:???差分取得の参考にでもして。
ttp://makegumi.no-ip.info:8080/src/makegumi1702.lzh.html
ハナモゲラ追加すれば今でも使えるはず。
板のdat取得は、subject.txtよめばいだけだから。
0249nobodyさん
2006/12/10(日) 22:53:28ID:???open(EN,"hoge.txt");
@old = <EN>;
close(EN);
これで@oldにファイルの中身(複数行)全て入ってますよね・・・?
リファレンス見ていたら益々分からなくなってきた(´△`;)
hoge.txtの中身をhoge2.txtに移すっていうのをやりたいのだけど
・・・動かねぇorz
0250nobodyさん
2006/12/10(日) 23:05:46ID:???open(EN,"hoge.txt");
read(EN, $buff, (-s EN));
close(EN);
でもおk
File::Copyとかとか♪
0252nobodyさん
2006/12/11(月) 01:30:10ID:???レスありです。
読み込んだ@oldを新たなファイルに書こうとすると
1行しか書かれず。。。
もう訳が分からないのでシンプルにファイルリネームで対応しました・・・。
0253nobodyさん
2006/12/11(月) 01:31:19ID:???読み込み&書き込みらへんのソース晒してみて
0254nobodyさん
2006/12/11(月) 16:28:57ID:???問題はurlのリンク記載なので修正すればいいと思うのですが、これがうまくいきません
以下の自動リンクの正規表現の置換部分で、リンクの記載内に「〜」がある場合、
強制的に「~」にする方法をご指導ください
$tmp_data =~ s/(https?\:\/\/[^\s|\:|\<]+)\.(\/?)([\-_\.\!\~\*\'\(\)a-zA-Z0-9\;\/\?\:\@\&\=\+\$\,\%\#]*)/<A HREF="$1.$2$3$4" TARGET="_blank">$1.$2$3$4<\/A>/ig;
0255nobodyさん
2006/12/11(月) 17:28:11ID:???0256nobodyさん
2006/12/11(月) 18:27:02ID:???0257nobodyさん
2006/12/11(月) 18:44:20ID:???Shift_JISのHTMLで書かれたフォームから送信すると
そういう不具合が起こることがある。
Shift_JISとユニコードの変換を厳密にやりすぎるからとか
どこかで読んだような気もするがどこだったかは忘れた。
まあ「safari チルダ」あたりでググると対処法とか色々出てくるよ。
0259nobodyさん
2006/12/11(月) 19:58:53ID:???また探してはみます
利用者にあれこれさせるのは難しいので、置換部分の
アドバイスがありましたら宜しくお願いします
0260nobodyさん
2006/12/11(月) 21:26:03ID:???ていうかShift_JISでフォームを書かなきゃいいんじゃね?
0261nobodyさん
2006/12/11(月) 23:07:25ID:???置換文字列を make_link みたいな関数にして /e で評価する。
その関数の中で 〜 → ~ の変換を行う。とか。
sub make_link {
my $url = shift;
$url =~ s/〜/~/;
return qq{<A HREF="$url" TARGET="_blank">$url</A>};
}
$tmp_data =~ s/(https?\:\/\/[^\s|\:|\<]+)\.(\/?)([\-_\.\!\~〜\*\'\(\)a-zA-Z0-9\;\/\?\:\@\&\=\+\$\,\%\#]*)/ make_link("$1.$2$3$4") /ieg;
0263nobodyさん
2006/12/12(火) 03:31:20ID:???$name=$FORM{'name'};
のように、nameを受け取ったとして、
複数選択されてるときhogeは、
どんな風に受け取ればよいでしょうか。
$hoge=$FORM{'hoge'};
ってすると、$hogeの値はhoge2になっているみたいなんです。
hoge1も受け取りたいのですが。
<INPUT type="text" size="20" name="name" value="">
<select size="〜" name="hoge" multiple>
<option value="hoge1" selected>hoge1</option>
<option value="hoge2" selected>hoge2</option>
</select>
よろしくお願いします。
0264nobodyさん
2006/12/12(火) 05:19:33ID:???0265nobodyさん
2006/12/12(火) 05:50:23ID:???ありがとうございます。
先ほど、CGI.pmで取得の仕方を解説してる
ページ見つけました。
動きが全然想像できないです。
CGI.pm使ってない方法検索しております。
よろしくお願いします。
0266nobodyさん
2006/12/12(火) 09:42:44ID:???って感じで入れてると思うけど、簡単に書いちゃうと
if(deinfed($forms{$name}){
$forms{$name} .= "\0" . $val;
}else{
$forms{$name} = $val;
}
のようにして、取り出すときは
my @tmpdata = split(/\0/, $forms{'hoge'});
とすれば複数選択したデータが @tmpdata に入ります。
ただしバイナリデータに対しては有効な技じゃないし、入力されたデータに対して \0 の存在をチェックし
エスケープしてやるなどの対策も考慮してください。
バイナリデータとか不正なデータをとりあえず無視して動作を確認したいなら上記可能。 なはずです
0267nobodyさん
2006/12/12(火) 10:31:41ID:???配列に叩き込むほうが手っ取り早いしわかりやすいのかも。
if ($name eq 'hoge') {
push @hoge, $value;
} else {
$FORM{$name} = $value;
}
>>266 =~ s/deinfed/defined/ のcgi-lib.pl方式でもいいし、あとは質問者さんの好みで。
0268nobodyさん
2006/12/12(火) 10:50:06ID:???訂正thx
0269nobodyさん
2006/12/12(火) 10:54:18ID:???hoge=hoge1とhoge=hoge2が順番に送られてくる
受け取ったものがhoge=hoge2になってるのは順番に同じ変数に入れてるから。
$hoge='hoge1';
$hoge='hoge2';
print $hoge;
こうなってるので後はどうするかは受け取り側で変えればいい。
0270nobodyさん
2006/12/12(火) 20:02:31ID:???例えば
&func(@list1,@list2);
としたら、funcの中で$list1[4]とか$list2[6]とかを参照したいんです。
0271nobodyさん
2006/12/12(火) 20:12:36ID:???0272nobodyさん
2006/12/12(火) 20:48:08ID:???&func(\@list1, \@list2);
0273nobodyさん
2006/12/12(火) 21:16:11ID:???&func( \@list1, \@list2 );
sub func {
my( $list1, $list2 ) = @_;
$$list1[4];
$$list2[6];
}
0274nobodyさん
2006/12/12(火) 21:23:56ID:???0275nobodyさん
2006/12/12(火) 21:50:20ID:???ってやったときに、foo/barが存在しないとエラーで死ぬんだけど、再帰的に掘ってくれるような
モジュールってない?ないんなら自前で組んでもいいけど、あるんなら再発明したくないし。
0276nobodyさん
2006/12/12(火) 22:12:56ID:???my @subdirs = split(/\/, shift);
my $curdir = curdir();
foreach my $subd (@subdirs){
mkdir $subd if !-e $subd;
chdir $subd;
}
chdir($curdir);
}
0278nobodyさん
2006/12/12(火) 22:18:53ID:???ttp://search.cpan.org/~stevan/Tree-Simple-VisitorFactory-0.10/lib/Tree/Simple/Visitor/CreateDirectoryTree.pm
0282nobodyさん
2006/12/13(水) 11:01:17ID:???File::Pathはデフォで入ってないっけ?
>>277
順序が保証されてるなんて書いてないだろ
順序は知らんがひとつずつ順番に入ってくるってのは合ってるんじゃね?
0283275
2006/12/13(水) 15:21:34ID:???ありがと。
>279
それやるとシステム依存するかなと思ってさ。
>280,282
ごめん、探し方が足りなかったみたい。吊ってくるorz
0284nobodyさん
2006/12/13(水) 16:44:36ID:???$n= 1000000;
if (($c1=chr(int($n / 256**2)))){
$n= $n % 256**2;
}
else { $c1= "\0"; }
if (($c2=chr(int($n / 256)))){
$n= $n % 256;
}
else { $c2= "\0"; }
$c= $c1 . $c2 . chr($n);
0285nobodyさん
2006/12/13(水) 16:52:52ID:???0287nobodyさん
2006/12/14(木) 13:53:01ID:???LWP::UserAgentなどを使用してCGIからアクセスするのは無理でしょうか?
一定時間経過するとセッションが切れて再ログインしないとダメだったり
サイト内での検索結果などをコピペするのがマンドクサイのです
0288nobodyさん
2006/12/14(木) 16:20:40ID:???やっぱ256**4で割るっきゃないか
0289nobodyさん
2006/12/14(木) 22:55:01ID:???0290nobodyさん
2006/12/15(金) 03:08:09ID:???ランダム数値を返すとなっていたので、7年間ずっと
rand(3)は0〜3までを返すと思っていたのですが、実際は
3未満(つまりは2.99999...)だったんですね。
上記の場合だと、3が出る確率は限りなく少ないことになる
ので今まで面倒なことをしてましたが、これから今まで
書いたプログラムの見直しをするようになるっぽいです。
一応同じように思い込んでた人のためになればと書き込
んでおきました。
0292nobodyさん
2006/12/15(金) 10:52:56ID:???$sex = substr(キーワード, カット開始位置, 文字数);
print "$sex<br>\n";
とするとたまに改行タグがおかしくなってしまう
print "$sex.<br>\n"
とすると改行タグはちゃんとされるけど・が$sexの後に表示されてしまう
0293nobodyさん
2006/12/15(金) 10:59:38ID:???0294nobodyさん
2006/12/15(金) 10:59:58ID:???「perl substr 日本語」でぐぐるといい
0295nobodyさん
2006/12/15(金) 12:26:12ID:???0296293
2006/12/15(金) 12:49:12ID:???$count= 5;
$s=~/(?:[\201-\237\340-\374]?.){$from}((?:[\201-\237\340-\374]?.){$count})/;
print $1,"\n";
0297293
2006/12/15(金) 12:56:47ID:???0298nobodyさん
2006/12/15(金) 13:54:29ID:???0299nobodyさん
2006/12/16(土) 14:00:26ID:???文字のマッチングしたいのですが、何をやってもうまくいきません。
どうか助けてください。
<例>
use CGI;
use Encode;
my $query = CGI->new;
foreach ($query->param() ){
$form{$_}=$query->param($_);
}
open (FILE,"<:encoding(shiftjis)","text.txt");
@aaa = split(//,<AAA>);
if ($form{bbb} eq $aaa[0]) {
print "一致";
}
close(FILE);
0300nobodyさん
2006/12/16(土) 14:02:20ID:???<訂正>
open (FILE,"<:encoding(shiftjis)","text.txt");
@aaa = split(//,<FILE>);
if ($form{bbb} eq $aaa[0]) {
print "一致";
}
0302299
2006/12/16(土) 16:25:29ID:???htmlのフォームに入力された文字と、txt(本当はcsv)のデータとが合致するときに、
なにかを表示するという簡易なデータベースを作っているところなんです。
open (FILE,"<:encoding(shiftjis)","text.txt");
とかでtxtを開いて、クエリと合致するかどうかをみたいのですが、
cgi.pmでデコードした文字(クエリ)と、openで開いた文字の
デコード(?)が違うようで、他のコーディングとやらの
何をやっても一致しないという状態に陥ってます。
ものすごく初歩的・根本的な間違いをおかしているとは思います。
0303nobodyさん
2006/12/16(土) 16:36:16ID:???text.txtのカンマ区切りのデータとフォームが一致するかを見たいということかな?
text.txtは1行のみ?
改行は入っている?
split /,/, <FILE>; じゃだめ?
文字コード気にする前に、単純な英数字で確認してみて。
0304299
2006/12/16(土) 18:07:20ID:???>>299のようにクエリを受け取ってから、
自分のやりたいことをカンタンにしたのが下記のプログラムです。
open (FILE,"<:encoding(shiftjis)","aaa.csv");
while(<FILE>) {
@aaa = split(/,/,$_);
foreach(@aaa) {
if ($form{namae} eq $aaa[$i]) {
print encode("shiftjis","$aaa[$i]:match<br>");
} else {
print encode("shiftjis","$aaa[$i]:---<br>");
}
$i++;
}
$i =0;
}
close(FILE);
カンマ区切りのデータとフォームの一致をみるのが目的で、
csvは複数行に渡っています(改行入り)。
半角英数の場合はマッチングできるのですが、
平仮名・漢字は一致しません。
また、半角英数・仮名漢字に共通して、
open FILEで引っ張ってきた@aaa{$1}を表示しようとすると
文字化けが起こってしまいます。
0305nobodyさん
2006/12/16(土) 18:35:53ID:???ひとまず、エンコードの処理を忘れて、全てのファイルの文字コードを統一して保存して下さい。
次にコードをシンプルにして、試してみましょう。
open FILE, 'aaa.csv' or die;
while( <FILE> ){
chomp;
my @aaa = split /,/;
for( my $i = 0; $i < @aaa; $i ){
print $form{namae} eq $aaa[$i] ? 'true' : 'false';
}
}
close FILE;
余計なお世話だけど、そんなforeachの使い方教えてるところは参考にしないほうがいいと思われ。
0306nobodyさん
2006/12/16(土) 19:07:56ID:???0307nobodyさん
2006/12/16(土) 20:54:54ID:???こっちのが書くの楽だろ常識的に考えて
楽と云うよりも効率が良くなったからこちらの方が良さそうな。
という思想で。
それはそうともう $i とはもう書かなくなったよなぁ。。。
ついでに回数を指定したループも書かなくなったよなぁ。。。
0309nobodyさん
2006/12/16(土) 22:24:50ID:???0310nobodyさん
2006/12/16(土) 22:27:29ID:???0311299
2006/12/16(土) 22:32:58ID:???アドバイスの通りにしたら無事解決しました。
結局エンコード云々はいじらないでよかったようです。
ありがとうございました。
0312nobodyさん
2006/12/16(土) 22:42:14ID:lMy9T+vRperlに触れて2日目です。。かない痛いミスしてるかもしれませんが、何方か教えてください。
Flashからcgiへ変数$nameを渡す実験をしているのですが、$nameを日本語にすると
すべて文字化けしてしまいます。手元にある入門書を参照したところ、jcode.plを使えばよいとあったので、
require 'cgi-lib.pl';
require 'jcode.pl';
&ReadParse(*name);
&jcode::convert(*name,'sjis');
print "$name";
としたのですが、まだ文字化けします。sjisにしてもeucにしても同じ結果です。
どうすればよいでしょうか。jcode.plが存在するディレクトリは確認しました。
0313nobodyさん
2006/12/16(土) 22:55:56ID:???&jcode::convert(\$name{$_},'sjis');
}
0314nobodyさん
2006/12/16(土) 23:05:09ID:lMy9T+vR0316287
2006/12/17(日) 12:12:23ID:???java.lang.NullPointerException のみが出力されてくるのですが、御教示お願いします。
use LWP::UserAgent;
$url = "https://example.com/test.jsp"; #実際にはログイン画面のURLが入ってる
$ua = LWP::UserAgent->new;
$req = new HTTP::Request GET => $url;
$res = $ua->request($req);
print "Content-type: text/html\n\n";
print $res->content;
0318287
2006/12/17(日) 13:35:07ID:???やっぱ皆さんこういう高度なのもサクっと作ってcron自動化とかしてたりするんでしょうか
ID・PASSなどをフォームに入れるログイン作業程度なら、
ローカルHTMLのformにhiddenで入れてしまって、jsで一発ログインとかしてるのですが、
一定時間ごとに自動ログイン→一連の作業→処理保存までするのは難しいですね。
もっと色々頑張ってみます
その点、LWPモジュールも然りサンプルが必ずと言っていいほど掲載されているので、熟読すると良いかもしれませんです♪@CPAN
あっと、そのときには、解説の英文を1から10まで読むよりも、サンプルを1から10まできっちりと読むと判りやすいかと♪
0320nobodyさん
2006/12/17(日) 15:56:53ID:8qXdAMYDwww.xxx.com/aaa.php?id=1&next=1
nextの1で処理を行っているのですが
リロードでも有効になってしまいます。
これを回避する方法などありますでしょうか。
submitからなら対策できるのですが、埋め込んだURLからは
どうしたら回避できるかわからず詰まっています。
0321nobodyさん
2006/12/17(日) 15:58:27ID:8qXdAMYD0323nobodyさん
2006/12/18(月) 16:04:35ID:otF+VpE2POSTで$nameを送信($nameは日本語)
↓
cgi側が$nameを受け取って、namelist.datをオープンして、$nameを書き込んでクローズ。
↓
namelist.datを開くと、日本語が%83g%83%7D%83gといった感じで書き込まれている。
これを直したいのですが、namelist.datに書き込む前にjcodeで変換しても駄目でした。
文字コードはsjisで統一してあります。どのようにすれば文字化けせずに書き込めるのでしょうか。
0324nobodyさん
2006/12/18(月) 16:09:24ID:???0325nobodyさん
2006/12/18(月) 16:27:36ID:otF+VpE2>>324
お手数かけました。
0326nobodyさん
2006/12/18(月) 20:56:29ID:???print "Content-type: text/html\n\n";
print <<EOS;
<HTML lang="ja">
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<TITLE>$_[0]</TITLE>
</HEAD><BODY>
$_[1]
</BODY></HTML>
EOS
exit;
}
POSTされた文字列が不正だった場合等に、ちょっとしたエラー出力をするのに、
こんな感じで単純な出力をするサブルーチンを作って実行するのと、
print "Content-type: text/html\n\n";
print <<EOS;
<HTML lang="ja">
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<TITLE>エラー</TITLE>
</HEAD><BODY>
えらーです
</BODY></HTML>
EOS
exit;
}
そのままサブルーチンを作らずにHTMLを出力するのとではどれくらい速度に違いが出たりするのでしょうか。
0327nobodyさん
2006/12/18(月) 21:00:45ID:???またはテンプレート化する。
しかし、速度を気にするほど頻繁にエラー画面が出てしまう設計はどうかと。
0328nobodyさん
2006/12/18(月) 21:03:25ID:???0329nobodyさん
2006/12/18(月) 21:14:08ID:???どうもです。
エラーは極力でないように、悪意に対応できるようには作っているつもりなんですが
なんせ自分で一から作るのは初めてなもので、単純に速度が気になったのです。
それほどアクセスが掛かるようなものでもないですし、自分で使う分にはエラーなんて出さないように使うので
そんなに問題でもないんですが一応。
>>328
具体的にはどうすればよいのでしょうか。
print "Content-type: text/html\n\n";
はサブルーチンにせずに都度出力すると言うことでしょうか。
0330nobodyさん
2006/12/18(月) 21:25:58ID:???いちいちフラグ確認しないとダメな書き方はよほどおかしい
0331nobodyさん
2006/12/18(月) 21:39:31ID:???処女作おめでとう。
速度なんか後回しで、まずは思うように作ってご覧。
そして、>>330が正解。
エラーチェックを全て終わらせてから出力をはじめよう。
0333nobodyさん
2006/12/18(月) 23:22:23ID:???条件として、サブルーチン自体にエラーがない保証というのがあり、
evalだと単純に$@の有無だけでサブルーチンの有無とすることができません。
シンボルテーブルを覗いたり、いろいろ調べてはいるのですが、よく分かりません。
シンボルのハッシュを参照したら、サブルーチンがないのに、参照したことによって
シンボルが追加されてしまうようです。
↑よく理解してないためか、そのように見えます。
ご助言いただければと思います。
0334nobodyさん
2006/12/18(月) 23:23:54ID:???0335nobodyさん
2006/12/19(火) 00:17:15ID:???0336nobodyさん
2006/12/19(火) 00:27:12ID:???どんな設計だ
0337nobodyさん
2006/12/19(火) 00:39:23ID:???やっぱ使ってる奴いないのか?
0338nobodyさん
2006/12/19(火) 00:41:15ID:???できちゃいました。すみません。そんな簡単だったんですね。
シンボルテーブル参照は、単純にパッケージ修飾の仕方で間違ってたようです。
ありがとうございました。
0339nobodyさん
2006/12/19(火) 06:32:32ID:???>>316
LWPでhttpsはCrypt::SSLeayが要るんだけど、入ってないからダメって落ちじゃないよね?
0340nobodyさん
2006/12/19(火) 09:33:57ID:???$OLDには 0-6の数字または文字列が入ります。
数字の時には10〜60代を、文字列の場合はそのまま代入したいのですが、
if ( $OLD == 0 ){ $OLD = "10代"; }
elsif ( $OLD == 1 ){ $OLD = "20代"; }
.
.
.
elsif ( $OLD == 6 ){ $OLD = "60代"; }
else { $OLD = "$OLD"; }
このようにかいているんですが、最後のelseが反応せず、文字列はすべて10代と表示されてしまいます。
なにか書き方が間違っていると思うんですが、わかりませんorz 指摘してください。
0341nobodyさん
2006/12/19(火) 10:25:25ID:???つ eq、正規表現
0342340
2006/12/19(火) 10:34:36ID:???試したら・・・できました。ありがとうございました! 勉強になりましたorz
0343nobodyさん
2006/12/19(火) 10:44:06ID:???mod_perlは、
はじめの一回コンパイル→メモリ上に常駐
とネットで解説されていたんですが、
perlでもコンパイルしたものを配ったりってできるんでしょうか?
ソースを公開しないで、スクリプトが配布できたら
いいなと思いまして。
0344nobodyさん
2006/12/19(火) 11:15:24ID:???0345nobodyさん
2006/12/19(火) 12:09:00ID:???あと、コンパイルは同じ環境でやらないといかんから配布向きじゃない
0346nobodyさん
2006/12/19(火) 12:10:49ID:???(出来るには出来るがkillされるのがオチw)
0347nobodyさん
2006/12/19(火) 15:31:43ID:???>>346
なるほどです。ソースは公開しないといけないんですね。
>Perlで言うコンパイルはその場合意味が違うよ
・コンパイルって、コンピュータ用のオブジェクトコードに
することでよかったですよね?
・Perlでおいコンパイルは、機械語に直したオブジェクトコードを
メモリに保存しておいて2回目の起動以降は、ソースにアクセスしないで
メモリのオブジェクトコード読んで実行するということでよかったでしょうか。
・機械語は機械語でもC、Perl、JAVAでできたものは、全く別物なんでしょうか。
こういうのはどうやって勉強すれば。コンパイラの本読むとわかるでしょうか。
なんかネットに書いていることをそのまま質問していて、
ほんとアレなんですが、よろしくお願いします。
0348nobodyさん
2006/12/19(火) 15:44:15ID:???いろんなページさまよっているところなんですが。
JAVAは中間コードっていうのみたいですね。
C言語はexeファイルができます。
ちょっと手がかり見つかってきました。
JAVAマシーンが中間コードを読んで実行するみたいに、
mod_perlマシーンが、中間コードみたいなの動かすんでしょうか。
0349nobodyさん
2006/12/19(火) 16:07:15ID:???0350nobodyさん
2006/12/19(火) 16:08:29ID:???0351nobodyさん
2006/12/19(火) 18:18:58ID:???どうしたらよいでしょう?
@nakami = (0, 8, 4, 12, 23, 55);
foreach $aaa(@nakami){
if(rand $aaa){
0353nobodyさん
2006/12/19(火) 18:54:33ID:???ラストね
コンパイルの解釈はまぁ OK
Perl でのその解釈は mod_perl の解釈
CGI で動く perl はその都度コンパイルされます
0354nobodyさん
2006/12/19(火) 20:41:11ID:???0355nobodyさん
2006/12/19(火) 23:24:08ID:???log.txtを開いてハッシュとしてセットの上、ペアごとにズラズラ並べたいのですが、
open(f,"log.txt");
%file = <f>;
while ( ($key, $val) = each (%file) ) {print "キー $key 値 $val\n";}
close(f);
これだと何も反応してくれません。
間違ってるでしょうか?
log.txtの中身は、
"●●","A組","◎◎","B組","■■","C組",
といった感じです。
0356nobodyさん
2006/12/19(火) 23:37:17ID:???ファイルから読み込んだ文字列は、そのままではリストとして扱われません。
文字列をハッシュ変数に代入しても意味がありません。
例えば、以下のような方法で、文字列をリストに変換する必要があります。
・split でカンマ区切りのリストに分解する(ただし二重引用符の除去が必要)
・Text::CSV_XS などのモジュールを利用する(二重引用符も考慮してくれるが少し大げさ)
・正規表現(http://www.din.or.jp/~ohzaki/perl.htm#CSV2Values)を利用する
・eval で評価する(読み込むファイルが外部からの入力を記録している場合は危険)
この場合、正規表現が一番現実的でしょうか。
0357355
2006/12/20(水) 00:01:50ID:???ありがとうございます。
%file = <f>; ←こんな式はないんですね。お恥ずかしい限りです。
まだcgiを作っている途中で二重引用符を外す事はわけないですので、
最初の方法か、正規表現かで検討してみます。
わざわざすいません。
0358nobodyさん
2006/12/20(水) 00:38:56ID:???もちろんキーにも値にも最後に改行がつくからchompとかしなきゃだめだけど
こんな感じで
●●
A組
◎◎
B組
■■
C組
0359nobodyさん
2006/12/20(水) 00:50:18ID:???print "$virtues{ONE}\n";
print "$virtues{TWO}\n";
print "$virtues{THREE}\n";
__DATA__
ONE
Laziness
TWO
Impatience
THREE
Hubris
なるほど。
0360nobodyさん
2006/12/20(水) 07:51:48ID:???my %virtues = map { chomp; split /,/, } <DATA>;
print "$virtues{ONE}\n";
print "$virtues{TWO}\n";
print "$virtues{THREE}\n";
__DATA__
ONE,Laziness,TWO,Impatience
THREE
Hubris
0361nobodyさん
2006/12/20(水) 07:54:31ID:???「そこまでするなら」に代えてくれ
0362nobodyさん
2006/12/20(水) 11:11:45ID:S+pohGEQ0363nobodyさん
2006/12/20(水) 11:33:14ID:???びっくりするほどスレ違い
0365nobodyさん
2006/12/20(水) 13:09:42ID:???少なくとも、ロボ物は適当で簡素なHTMLの方が拾ってくれたりするよ
<html>
<head>
<title></title>
</head>
<body>
</body>
</html>
こんな感じの
0366nobodyさん
2006/12/20(水) 13:20:25ID:???0368nobodyさん
2006/12/20(水) 14:35:34ID:???0369nobodyさん
2006/12/20(水) 14:54:20ID:???0370nobodyさん
2006/12/20(水) 16:33:01ID:???0372nobodyさん
2006/12/20(水) 20:05:38ID:???0373nobodyさん
2006/12/21(木) 13:16:34ID:???して読み込もうと思ったのですが、
if (!open(WORD,"bad.txt")) { &error('データベース読取エラー'); }
foreach(<WORD>){
if ($name eq $_){ $name = "禁止";}
}
close(WORD);
この記述では反応してくれません。(errorはでません)
外部ファイルにする前はできていたのですがなにか書き方が違うのでしょうか・・・?
bad.txtの中身はすべて改行区切りです。
また名前欄に特化した禁止ワードなので、eqで問題ありません。
よろしくお願いします。
0374nobodyさん
2006/12/21(木) 13:34:43ID:???0375nobodyさん
2006/12/21(木) 13:35:57ID:???0376nobodyさん
2006/12/21(木) 17:21:37ID:???掲示板の本文中にurlがあったとき自動リンクさせますが、
jpg、png、gifのときは画像を小さく表示させたいです
正規表現で末尾を(jpg|png|gif) として区別しますが、
そうでない場合の表現はどうしたらいいですか?
0377nobodyさん
2006/12/21(木) 17:25:31ID:???0379nobodyさん
2006/12/21(木) 18:29:02ID:???まさに阿鼻叫喚の地獄絵図ってやつだ。
0380nobodyさん
2006/12/21(木) 19:11:28ID:???画像でない方のリンクがなされません
ええと、自分のところのアップローダです
既に過去の掲示板投稿がたまっているので、アップローダ
において、リンクしてもらうようにするためです
これなら1発言中に何個画像があっても自由ですし、
組み込みより楽ですので
0381nobodyさん
2006/12/21(木) 19:25:43ID:???・regex1はかくかくしかじかです。
\.(jpg|png|gif)$なURL。小さく表示させたいらしい。
・regex2を条件式として、これこれこういうif文を経由して自動リンクになるようにしています。
regex1でないURL。<a href="$&">$&</a>、<a href="$1$2">$1$2</a>などにしたいんだと思う。
regex[12]をどう書いてるのかの記載があると、「画像でない方のリンクがなされません」ではわからんよ、
という印象を受ける人もぐんと減るんだと思う。
0382nobodyさん
2006/12/21(木) 19:32:25ID:???正直余計わからんわw
リンクがされるかどうかは、正規表現にマッチするかどうかの判断でしょ?
まずURLは抜き出せるの?
0384nobodyさん
2006/12/21(木) 22:10:23ID:v7yMEHCt今perlを用いてCGIで
画像をUPできるようなものを作ろうとしています。
画像をうpする方は
<form method="POST" ENCTYPE="multipart/form-data" action="edit_completion.cgi">
<input type="file" name="TENSOU">
:
とやっていて受け取る方は
my $cgi = new CGI;
my $image = $cgi->param('TENSOU');
my $file_name="./test.jpg";
my $buffer;
open(OUT, ">$file_name") or die(qq(Can't open "$file_name".));
binmode OUT;
while (read($champ1_image, $buffer, 1024)) {
print OUT $buffer;
}
close OUT;
とやっています。
やってみると
白いページで止まってしまうのですが
お手数だと思いますが
正しいやり方を教えていただきますとありがたいです。
スレ違いでしたら誘導をお願いします。
0385nobodyさん
2006/12/21(木) 22:42:34ID:???0386nobodyさん
2006/12/21(木) 22:50:08ID:???○ while (read($image, $buffer, 1024)) {
0387nobodyさん
2006/12/21(木) 23:01:44ID:???use CGI::Carp qw(fatalsToBrowser);
と書いておくと、エラーがブラウザに表示されるようになるよ。参考までに。
0388nobodyさん
2006/12/21(木) 23:20:52ID:???$comment=~ s/(https?\:\/\/[^\s|\:|\<]+)\.(\/?)([\-_\.\!\~〜\*\'\(\)a-zA-Z0-9\;\/\?\:\@\&\=\+\$\,\%\#]*)(jpg|gif|png)/<a href=$1.$2$3$4$5><img src=$1.$2$3$4$5 hight=50 absbottom border=1><\/a>/ig;
これは末尾が画像の場合、画像でない場合はリンクだけにしたいんです
if使うと一旦配列に入れて展開しないとだめじゃないですか?
そんなことないですか?
それで、URL末尾(拡張子)が画像とそうでないものを置換演算で並べて
やろうと思ったんです
0389nobodyさん
2006/12/22(金) 01:00:50ID:???%hash = ('aaa' => @list);
$num = $hash{aaa};
これで、$numに3が入ってほしいんですが、test1が入ってしまいます。
%hash = ('aaa' => @list+0);
とすると3が入ります。
+0を付けなくても3を返してほしいんです。
助言をお願いします。
0390nobodyさん
2006/12/22(金) 01:05:13ID:???0391388
2006/12/22(金) 01:29:59ID:???さらに自動リンクした<a href>のタグと(jpg|gif|png)含むものをマッチさせ
その部分だけimg srcで画像表示させることにしました
お騒がせしました
0392nobodyさん
2006/12/22(金) 11:06:11ID:DIJoWwwOgrepで@namelistという配列に何個$nameがあるかどうか調べています。
$number=grep(/$name/, @namelist);
@namelistに様々な名前を入れてみたのですが、たまたま$name=キムタクと入れた
時だけ、@namelistにもキムタクがあるのにカウントしてくれません。(ネタじゃありません…)
まだ沢山カウントされない文字列があるのかもしれませんが、なぜ「キムタク」はカウントされなかったのでしょうか?
文字自体に問題があるのでしょうか?さっぱりです。。
0393nobodyさん
2006/12/22(金) 11:09:46ID:DIJoWwwO大丈夫でした。どういうことだ…
0395nobodyさん
2006/12/22(金) 11:26:02ID:DIJoWwwO「文字コード」ですか?
「キムタク」も「クサナギ」も文字コードは同じですよ。
ですから文字コードの問題ではないのではないでしょうか。
0396nobodyさん
2006/12/22(金) 11:40:31ID:???でもキムタクってダメ文字じゃないような。
0397nobodyさん
2006/12/22(金) 11:52:49ID:???文字を含んだ文字コードというのがあるのよ。
いいから>>2-3をきちんと読め。そういう反応するってことは読んでないだろ。
特にPerlメモ
ttp://www.din.or.jp/~ohzaki/perl.htm
の「日本語を扱う」のあたり。
0398nobodyさん
2006/12/22(金) 12:19:49ID:???0399nobodyさん
2006/12/22(金) 12:21:45ID:???覚えておこうっと。
0400nobodyさん
2006/12/22(金) 12:30:46ID:???0401nobodyさん
2006/12/22(金) 13:49:50ID:???0402nobodyさん
2006/12/22(金) 14:15:14ID:???0403nobodyさん
2006/12/22(金) 14:28:59ID:???0404nobodyさん
2006/12/22(金) 14:48:59ID:6wQis76n「�U」という文字をS-JISからEUCに変換しようと思っています。
Encode::from_to( $tmp, "CP932", "EUC-JP"); #Encode.pm
$tmp = jcode($tmp)->euc; #Jcode.pm
jcode::convert(\$tmp, 'euc'); #jcode.pl
正しく変換できるのはjcode.plのみでした。
Encode.pmあるいはJcode.pmで変換する方法はありますか?
0405nobodyさん
2006/12/22(金) 17:44:39ID:???http://search.cpan.org/~naruse/Encode-EUCJPMS-0.07/EUCJPMS.pm
> 正しく変換できるのはjcode.plのみでした。
$tmp = '�A'; # 0xFA41(CP932)
jcode::convert(\$tmp, 'euc', 'sjis'); # 0x13A2 ?
NEC特殊文字をやっつけてくれたjcode.plもIBM拡張文字を食わされると困る模様。
0406nobodyさん
2006/12/22(金) 18:10:36ID:6wQis76nありがとうございます
��や�ケもダメですね
Perlで全ての日本語の文字コード変換を行うことはできないのでしょうか?
入力される可能性のある文字についてみなさんどのように処理されていますか?
0407nobodyさん
2006/12/22(金) 18:27:46ID:???けっこうあるし、unicode以前は統一されていた部分ですら
どうunicodeに対応させるかでさらに分裂してしまってる現状
なので個人的にはあきらめているな。
どうしても満足できなければ、自前で好きな変換表を定義してe
nc2xsでperlから使えるようにするのがいいんじゃないか。
いいのができたら公開すると世の中のためにもなる。
0408nobodyさん
2006/12/22(金) 19:29:11ID:???0409nobodyさん
2006/12/22(金) 22:04:52ID:???0410nobodyさん
2006/12/23(土) 01:35:39ID:rkaYYOb9できない制限をつけたいのですが、わかりません。
(来訪者の割りに投稿者が少なく、DOMを減らしたいため)
書込みルーチン内に、coookieを使って投稿カウントを保存
し、閲覧時にcoookieを読んで条件分岐すれば良さそうな気が
していますが、具体的にどうしたらよいのかわかりません。
「imgboard」で実現したいのですが。
http://www.big.or.jp/~talk/t-club/soft/mini_r6/index.cgi
いますが、
0411nobodyさん
2006/12/23(土) 01:42:38ID:rkaYYOb9coookie⇒cookieでした。失礼しました。
0412nobodyさん
2006/12/23(土) 02:33:17ID:???わかってるじゃん。あとは、クッキーを読み書きする方法を調べるだけだろう。
「Perl クッキー」とかで検索すれば、すぐにわかるよね。
0413nobodyさん
2006/12/23(土) 04:12:05ID:???0415nobodyさん
2006/12/23(土) 07:57:13ID:vvP1Ez0I0416nobodyさん
2006/12/23(土) 10:26:34ID:9XJJytw/おなじnameで複数のvalueをPOSTする方法に悩んでいます。
0417nobodyさん
2006/12/23(土) 10:31:34ID:???0418nobodyさん
2006/12/23(土) 14:34:05ID:???Date::Simpleは何か違うような感じだったので
例
1900/01/01 12:00:00
↓
01/01 12:00
0419nobodyさん
2006/12/23(土) 14:36:03ID:???0420nobodyさん
2006/12/23(土) 15:28:46ID:???0421nobodyさん
2006/12/23(土) 15:49:44ID:???たくさんモジュール使っても混乱するだけだし。
いまだとDateTimeモジュールがベストプラクティスなんじゃないの。
0422nobodyさん
2006/12/23(土) 16:14:47ID:MDS/ay7MApache2 + mod_perl2
--httpd.conf------
PerlSwitches -I/var/www/Hello/lib
PerlLoadModule Hello
PerlTransHandler Hello
<Location /Hello>
PerlSetEnv Hello_DEBUG 0
SetHandler modperl
PerlResponseHandler Hello
</Location>
の設定をして、アパッチ再起動すると
WWWサーバー内のデータ全てがmod_perl2化しているようになり、
speedyCGIなどのスクリプトの動きがおかしくなるのですが、
どのように解決したらよいでしょうか
0423nobodyさん
2006/12/23(土) 16:43:07ID:???検索したけど具体的な使用例とか見つからず分かりませんですた。
でもありがとうございます。今度また調べます。
>>421
ありがとうございます。DateTimeはいい感じですね。
ttp://iandeth.dyndns.org/mt/ian/archives/000619.html
>>420
文字コード変換とかXMLパースとかも全部自前でやってろ(^ω^)
0424nobodyさん
2006/12/23(土) 23:10:40ID:HvJ8lenr$1に放りこんであるものを
そのファイルの最後の<b>名前<\b>にマッチングさせてたいのだが、、、。
0425nobodyさん
2006/12/23(土) 23:17:38ID:HvJ8lenr($ts, $file) = split(/,/, $dir[$i]);
last if $ts eq ' ';
open(R, "$bbspath/$dir/$file");
@resthred = <R>;
close(R);
$resthred[0]=~ /<b>([^\<]*)<\/b>/;
$restitle = $1;
$restitle =~ s/\s+$//;
$resthred[$#resthred-1] =~ /<dt>(\d+)/;
$k = $1; # 投稿記事数
$j = $i + 1; # スレッド表示番号
if ($k ne "1") {$k = "($k)";} else { undef $k; }
$file =~ s/\.html$//;
if ($threadnum > $i) {
print W qq(<br>$j.<a href="$cgiurl$logbbscgi/$dir/${file}/" target="contents"><font size=3>$restitle$k</font></a> );
}
print W2 qq($j.<a href="${file}/">$restitle$k</a> \n);
}
#ソースはこんな感じ。
0426nobodyさん
2006/12/23(土) 23:21:27ID:HvJ8lenrここらへんのメタキャラクタを^から$に変えるということでもないし。
そもそもこのインデックスナンバーの意味もわからないのだが、、、。
0427410-411
2006/12/23(土) 23:40:58ID:rkaYYOb9レスありがとうございます。
考え方としては間違ってないということですね。
>>413
>(´-`).。oO(投稿しないと見れない掲示板にどうやって投稿するのやら…)
投稿していない段階では、新規書込画面しか出ないようにしたいのです。
>>414
>パスワード制にすりゃいいのにね
すでに導入しているのですが、カキコしてくれる人とそうでない人とに
不公平さが出てしまっていて悩んでいるんです。
0428nobodyさん
2006/12/23(土) 23:46:08ID:MDS/ay7M$resthred[0]=~ /<b>([^\<]*)<\/b>/;
<b>名前<\b> なら こうじゃないかな?
/<b>(.+)<\/b>/
0429nobodyさん
2006/12/23(土) 23:46:51ID:???0430nobodyさん
2006/12/24(日) 00:25:34ID:AWC9vzHT<b>改編fdsfdfd </b></font>投稿者:<font color="forestgreen"><b>太郎 </b>
<br><hr><a name="bottom"></a><a href="index.html">掲示板に戻る</a> <a href="
まあ要するに最初の<b>改編fdsfdfd</b>になってるものを
最後の<b>太郎 </b>がひっかかるようなマッチングをしたいだけなんですが
現状はこのメタキャラクタで最初の<b>~</b>で
きちんとひっかかる。
0431nobodyさん
2006/12/24(日) 00:47:39ID:???0432nobodyさん
2006/12/24(日) 00:57:31ID:???スクリプトで2chに負荷かけそうで心配
0433nobodyさん
2006/12/24(日) 01:10:15ID:???それちょっと前にも話題にでたけど、否定先読み使って
$regex(?!.*$regex)
で $regex にマッチする一番最後の部分が得られる。
$_ = <<EOT;
<html><head><title>fdsfdfd </title></head>
<b>改編fdsfdfd </b></font>投稿者:<font color="forestgreen"><b>太郎 </b>
<br><hr><a name="bottom"></a><a href="index.html">掲示板に戻る</a> <a href="
EOT
my $regex = qr{<b>([^<>]*)</b>};
print "$1\n" if m{$regex(?!.*$regex)};
0434nobodyさん
2006/12/24(日) 01:12:35ID:???m{<font color="forestgreen"><b>([^<>]*)</b>}
でマッチできるね(´・ω・)
0435nobodyさん
2006/12/24(日) 07:03:20ID:???2項分布の計算をperlでやりたいんですが、一定の数値以上になると、階乗のところで変数の容量オーバー(? #INFとの表示)でおかしくなってしまいます
・変数の扱える桁数を大幅に増やす方法はありませんか?
・ExcelのBINOMDIST関数的なライブラリ(?)は無いのでしょうか
スレ違いだったらごめんなさい。よろしくお願いします
0436nobodyさん
2006/12/24(日) 07:07:05ID:???bigintプラグマ(整数)
bignumプラグマ(実数)
実体はMath::BigIntやMath::BigFloat
他に分数で扱うMath::BigRatもある。
0438nobodyさん
2006/12/24(日) 12:01:21ID:AWC9vzHTお答えくださってありがとうございます。
しかしなかなかうまくいかないので
プロにおまかせすることも検討してます。
やはり正当な知識には正当な料金というものが発生するものという
考えが正しいのかと。
それでは。
0439nobodyさん
2006/12/24(日) 12:57:49ID:???料金云々の話は確かに間違いではないけど、何より>>424>>430の説明(≒仕様)がわかりにくいんです。
プロに頼むにしても仕様があやふやだったり後出しが続いたりすると「なかなか」なのは同じですよ。
「また仕変ですか」と呆れられたり値上がりしたりするだけですけど。
行末にある<b>太郎 </b>の「太郎 」が$1として使えるだけでいいんだったら
$ を書き足すだけでもいいのかもしれない。>>434が書いたものでうまくいかない理由は不明。
(実はcolor="forestgreen"じゃない場合があるとか、そんな問題のような気がする)
$resthred[0]=~ m|<b>([^<>]*)</b>$|; # スラッシュをエスケープするのが面倒です版
$resthred[0]=~ /<b>([^\<]*)<\/b>$/; # 元ソース使い回しました版
>>430の「最後の」が行末でも何でもない場合は、プロにお金を積む方向で。
0440nobodyさん
2006/12/24(日) 14:06:39ID:AWC9vzHTやはりなかなかうまくいきません。
「最後の」というのは行末ということではなく
加工前のログにたくさんある<b>名前</b>のなかで最後の<b>名前</b>
=最新レスポンス者の名前をひっかけたいということです。
まあ、最初からそのログを改行して区分けするというやりかたも
ありだとは思いますが。
いろいろと模索中であります。
金云々にしてはすでに三十万近くかけて作らせてるものです。
私は多少のPerl/CGI知識を持っているのですが
運用に力をいれたいほうなので外注に頼ってるわけであります。
0441nobodyさん
2006/12/24(日) 14:36:15ID:???こんなこと言うのもなんだが、
「運用に力を入れたいから知識はあるけど外注」ってレベルじゃないだろ。
その程度なら素直に信頼できる実績があるとこに外注がいい。
0442nobodyさん
2006/12/24(日) 14:55:58ID:AWC9vzHTおかしくはないと思うんですが
まあ、すべてのソースをみてのことじゃないからわかりませんよね。
よく元ソースを解読してから出直します。
結果としてそのファイルのあるフォルダ名が$restitleにはいってしまうので
別の問題にも思われます。
ここまで考えて改造費出すのも個人的に馬鹿馬鹿しいので
自分なりに実験してみますわ。
御意見ありがとうございました。
0443nobodyさん
2006/12/24(日) 14:58:03ID:AWC9vzHTうるせえよ。
てめえに聞いてねえんだよ。
ガタガタ口はさむなクソが。
じゃあな。
0444nobodyさん
2006/12/24(日) 15:04:54ID:???哀れだがなにもしてやれん…
0445nobodyさん
2006/12/24(日) 15:14:21ID:???0446nobodyさん
2006/12/24(日) 16:56:38ID:???0447nobodyさん
2006/12/24(日) 17:10:57ID:AWC9vzHTただより高いものはない、なんて言うしな。
プログラミングは誰にこだわる理由はないし、
結果のでない親切より結果のでるお金だわな。
まあ、それはそれで駆け引きの技術だが。
てめえらもこんな腐れ掲示板で悪態奉仕活動してねえで
技術で金むしりとることに専念したほうがよくねえか?
俺が最初に頼んだ職人もそうだった。
あんまり調子こくんで他の外注にするつもりだが。
競争にさらされねえとそこらへんはわかんねえんだよな。
0448nobodyさん
2006/12/24(日) 17:12:56ID:???0449nobodyさん
2006/12/24(日) 17:14:29ID:AWC9vzHTその職人もこういう掲示板とかで聞いたり他のソースを拾ったりして
やっつけ仕事とかしてやがんの。
おまえらそういう連中にも利用されてるんだよ。
0450nobodyさん
2006/12/24(日) 17:21:57ID:AWC9vzHTそんで聞いてる連中が要領のいい継ぎはぎ職人のプロだったら皮肉で笑えるけどな(w
0451nobodyさん
2006/12/24(日) 17:24:12ID:???その解釈は正確にはそれはちょっと違います。他ならぬ貴方からの依頼だからこそ
出来合いのソースを拾ってきてやっつけ仕事で片付けているんです。
つまり貴方はその程度の顧客です^^
0452nobodyさん
2006/12/24(日) 17:28:48ID:???0453nobodyさん
2006/12/24(日) 17:29:35ID:AWC9vzHTフリーソフトの作者さんのサイトでねえ。
安い仕事だと思ったから。そこらへんまで譲歩したのだ。
無償のオープンソースを利用してるのはそういった要領のいいやつだ。
俺もそこらへんは共通の金銭の価値観なのでな。
0454nobodyさん
2006/12/24(日) 17:35:09ID:AWC9vzHT変数の名前だけ変えてフルスクラッチすればとか言ってやってな。
親切だろ。
まあ、というのも俺も金儲け目的のサイトをつくろうと思ってるから
投資は必要だしな。
0455nobodyさん
2006/12/24(日) 17:37:16ID:???> 変数の名前だけ変えてフルスクラッチすれば
> 変数の名前だけ変えてフルスクラッチすれば
(゚Д゚)…!?
0456nobodyさん
2006/12/24(日) 17:43:58ID:???0457nobodyさん
2006/12/24(日) 17:45:50ID:AWC9vzHT答えてる人間がどういう人間だかわからん。
ただよく無料で答えるなあとは思うわなあ。
0458nobodyさん
2006/12/24(日) 17:50:31ID:???> フリーソフトの作者さんのサイトでねえ。
> 安い仕事だと思ったから。そこらへんまで譲歩したのだ。
↓
> その職人もこういう掲示板とかで聞いたり他のソースを拾ったりして
> やっつけ仕事とかしてやがんの。
↓
> 俺が最初に頼んだ職人もそうだった。
> あんまり調子こくんで他の外注にするつもりだが。
凄い釣りだぜ…。
0459nobodyさん
2006/12/24(日) 17:51:40ID:AWC9vzHTいろいろ。
俺はねえ金を儲けたいのね。
ほんと正直な気持ち。
だから金使うのも筋だと思うわけ。
たとえ少額でも1円と無料には大きな開きがある。
君等もこんな腐れ掲示板はさっさと放棄して
私がこんどつくる掲示板を利用したほうがいいだろう。
0461nobodyさん
2006/12/24(日) 17:55:54ID:AWC9vzHTスロットマシーンのプログラ厶のようなものだ。
0462nobodyさん
2006/12/24(日) 17:59:18ID:???誰か3行くらいでまとめてくれない?
0463nobodyさん
2006/12/24(日) 18:00:29ID:AWC9vzHTどうも俺はナマケモノでねえ。
先伸ばし、先伸ばしで五年はたつ。
しかしシステムは確立したよ。
0466nobodyさん
2006/12/24(日) 18:08:53ID:AWC9vzHT以前、このスレッドであるメタキャラクタを
聞いたときはたまたまいい回答が帰ってきて
もうけものだったのだが
やはり無料には限界があるようだな。
無料の限界=2chの限界=匿名の君等の限界だのう。
0467nobodyさん
2006/12/24(日) 18:10:52ID:AWC9vzHT利用者から金とるってやつだろ。
あんなものダメに決まってるじゃあないか。
0468nobodyさん
2006/12/24(日) 18:13:51ID:???0469nobodyさん
2006/12/24(日) 18:14:43ID:AWC9vzHTPerlコーディングスレなのに私の妄想のはけぐちスレにして
なにか申し訳なくってきたねえ。
まあそれも2chだからしょうがないのう。
すっきりするまでつきあってほしい。
0471nobodyさん
2006/12/24(日) 18:17:28ID:AWC9vzHTなんかいい金になる情報なんかあるの?。
2chで金になる情報なんかあったためしがない。
0472nobodyさん
2006/12/24(日) 18:29:11ID:AWC9vzHTつうか今それは問い合わせ中なのでまた今度な。
まあ、そのときは自己解決しましただろうけど。
求めるととこはプラスの結果だけ。
そういうプラスの結果を出すシステムを作りたかったのだ。
なにか答える。なにか結果を出す。なにか教えてくれる。
俺は金を請求するし金は払う。
それでおしまいだな。
0473nobodyさん
2006/12/24(日) 18:30:56ID:AWC9vzHT失礼しました。
0477nobodyさん
2006/12/24(日) 18:41:03ID:???0478nobodyさん
2006/12/24(日) 18:47:14ID:???文字列fooのあとに、bar以外の文字列が来て、しかも最後までにbazが現れないという
条件にマッチする正規表現が書きたくて、下のようなのを書いてみたんだけど。
/foo(?:(?:(?!bar)).(?<!baz))+$/
さすがにアレなんで、ちょっとどうにかならないものかなと。複数のパターンに分割するのはなしで。
0479nobodyさん
2006/12/24(日) 19:01:58ID:???0480nobodyさん
2006/12/24(日) 19:06:21ID:???0481nobodyさん
2006/12/24(日) 19:08:59ID:???>>479 で正解が出ているけれど、実際問題、可能であれば分割した方が効率と可読性の両面から好ましい場合が多い気がするよ。
0482JAPU ◆lVJAPUTeX.
2006/12/24(日) 20:55:14ID:???my $x = $1;
$x =~ /\.(?:gif|png|jpg)$/? qq{<img src="$x" alt="">}: qq{<a href="$x">$x</a>}
}eg;'
正規表現部分は適当に置き換えて。
>>422
Location の中に全部入れれば?
ちなみに、mod_perlは必要な部分だけ分離 (別サーバにするかApache2個立ち上げるか) するのがお勧め。
0483nobodyさん
2006/12/24(日) 22:15:47ID:???0484nobodyさん
2006/12/24(日) 22:28:56ID:???ただ1つ書くなら・・・俺はこの板でスキルアップさせてもらってる
0485373
2006/12/24(日) 23:22:02ID:???if (!open(WORD,"bad.txt")) { &error('データベース読取エラー'); }
foreach(<WORD>){
chomp;
if ($name eq $_){ $name = "禁止";}
}
close(WORD);
これであってますか・・? と、いうか禁止ワードに反応なしなので
未だにできてません(´Д⊂)
0486nobodyさん
2006/12/24(日) 23:40:55ID:5VuL7TZS$name に何が入ってるのかわからんけどさ
$name =~ /$_/ig;
にしたら?
iオプションは必要だけどgオプションが必要かどうかは自分で決めてね
0487nobodyさん
2006/12/24(日) 23:44:25ID:5VuL7TZS両方コード揃えてひっかければいい
これでダメなら他が悪い
use Jcode;
$name = jcode->($name)->euc;
if (!open(WORD,"bad.txt")) { &error('データベース読取エラー'); }
foreach(<WORD>){
chomp;
$temp = jcode->($_)->euc;
if ($name eq $temp){ $name = "禁止";}
}
close(WORD);
0488nobodyさん
2006/12/25(月) 02:20:59ID:WCngGP1U$barにはfooを含む文字列が入っているとすると、
$bar =~ s/$foo/$hoge/;
としても置き換えはされないのですが、
$bar =~ s/foo/$hoge/;
としたら置き換えがされるのは何故でしょうか?
$fooが評価されていないということは分かったのですが、何故かが分かりません。
0489nobodyさん
2006/12/25(月) 02:30:55ID:???ん?
my $bar = 'foo!foo!foo!'; my $baz = $bar;
my $foo = 'foo'; my $hoge = 'hoge';
$bar =~ s/$foo/$hoge/g;
$baz =~ s/foo/$hoge/g;
print $bar, "\n", $baz;
--
hoge!hoge!hoge!
hoge!hoge!hoge!
0490nobodyさん
2006/12/25(月) 02:35:21ID:WCngGP1Uなに・・・!
なぜでしょう・・・(´・ω・`)
実際のプログラム中ではオブジェクトとして扱っているのは関係あるのでしょうか?
($fooは実際は$self->{foo}->{bar}としている)
$bar =~ s/$self->{foo}->{bar}/$self->{foo}->{hoge}/;
0491JAPU ◆lVJAPUTeX.
2006/12/25(月) 03:01:53ID:???g は全く要らない。
i は必要とは言えない。
>>488
実際には foo は日本語で、しかも Shift_JIS 使っているなら、
$bar =~ s/\Q$foo/$hoge/;
としてみては?
0492nobodyさん
2006/12/25(月) 03:09:41ID:WCngGP1U日本語じゃなく、文字コードを指定していなかったんですけど、\Qを挿入したら出来ました・・・
\Q : \E までのパターン指定メタ文字の意味を打ち消す
(´・ω・`)ナゼ?
0493nobodyさん
2006/12/25(月) 03:16:49ID:WCngGP1Uあ、ご解答下さったみなさん、ありがとうございました!
0494nobodyさん
2006/12/25(月) 05:19:01ID:???0495nobodyさん
2006/12/25(月) 06:46:37ID:85L6NXNb>g は全く要らない。
>i は必要とは言えない。
gは全くいらなかったね置換するわけじゃないしね
iは日本語と決まってるならいらないだろうけどsexとかだったらいるんじゃねえ?
0496nobodyさん
2006/12/25(月) 07:23:16ID:???0497nobodyさん
2006/12/25(月) 08:45:43ID:???0498nobodyさん
2006/12/25(月) 13:28:03ID:bvP5u9Gv他の日本語や、逆(〜をーにする)は出来ます。何故なんでしょうか?
print "content-type: text/html\n\n";
$str = "ボール";
$out = "ー";
$in = "〜";
$str =~ s/$out/$in/;
print $str;
0499nobodyさん
2006/12/25(月) 13:52:39ID:ClYkzmksuse ...;
use ...;
と、複数のpmファイルをuseしたのですが、先頭行のuseだけにエラーが出ます。
Can't locate Foo.pm in @INC (@INC ...
ちゃんとFoo.pmは存在するし、他の行のuseにはエラーが出ないのですが・・・
このエラー文は、モジュールがインストールされていないという意味のほかに、なにか意味はあるのですか?
0500499
2006/12/25(月) 13:58:43ID:ClYkzmksuse Foo;
use Hoge;
use ...;
use ...;
だとFoo.pmに関して、
use Hoge;
use Foo;
use ...;
use ...;
だとHoge.pmに関してしてエラーが出ていたようです。
@INCの検索パスにそれらのファイルが含まれていないということでしょうが、ちゃんとそのディレクトリに置いてあるんです\(^o^)/オワタ
0502nobodyさん
2006/12/25(月) 14:29:15ID:???0503499
2006/12/25(月) 14:29:36ID:ClYkzmksuse libは宣言しています。
0504499
2006/12/25(月) 14:36:15ID:ClYkzmkshttp://www.uploda.org/uporg630190.zip.html
(pass : 2ch)
use lib qw(./lib);
use Common::Cookie;
として使用しています。
なにかファイルに問題はありますか?
0505nobodyさん
2006/12/25(月) 14:48:11ID:???0506499
2006/12/25(月) 14:51:36ID:ClYkzmksはい、呼び出し側との相対パスは./lib/Common/Cookie.pmです。
0508nobodyさん
2006/12/25(月) 19:38:47ID:ClYkzmks対象のOSによって変わると思うんだけど・・・
0509nobodyさん
2006/12/25(月) 19:52:10ID:???お好きなのをどうぞ
0510nobodyさん
2006/12/25(月) 19:56:04ID:???0511nobodyさん
2006/12/25(月) 19:57:38ID:ClYkzmksプラットフォームによって改行コードを勝手に決めてくれたりは出来ないんですか?
0512JAPU@坂井恋夏 ◆lVJAPUTeX.
2006/12/25(月) 20:23:02ID:???記号類はメタ文字 (特殊文字) になるものがあるので、よく分からなければ \Q$var\E しておくのが良いです。Shift_JISの場合、漢字の一部にメタ文字が含まれる可能性があるので、思わぬところでエラーとなります。
>>495
要件に「大文字小文字を区別するかどうか」が含まれていないため、必要に応じて i 修飾子を付けてください、という意味です。
>>498
文字コードはShift_JISを使っていますね。「ー」の2文字目は「[」であるため、バイト単位で処理する場合にはそれがメタ文字として見なされます。
ですから、以下のような方法で回避する必要があります。
1. >>501 EUC-JPを利用する。
2. >>507 \Q$out\E とする。
3. Jperlを利用する。(今となってはお勧めできない)
4. 入出力をきちんとハンドリングして、内部では常にutf-8フラグつきの文字列として扱う。(多少面倒だが漢字も1文字単位で処理できるのでお勧め。「Perl utf8」でググれば参考サイトは沢山出てきます。)
5. 先頭で use encoding "Shift_JIS"; する。(あまりお勧めできない)
他にあったっけ?
# Shift_JISでは /セーラープルート/ がエラーになるので悲しい。
0513JAPU ◆lVJAPUTeX.
2006/12/25(月) 20:23:36ID:???ライブラリの位置を指定する (-Iオプションや use lib) 際、相対パスの基準位置はカレントディレクトリです。また、use でエラーになった場合にはそれ以降の use は実行されずモジュールが存在しない場合でもエラーが出ません。
スクリプトの位置を基準点とした相対ディレクトリで指定したい場合には以下のように FindBin を利用します。
use FindBin;
use lib "$FindBin::Bin/lib";
>>508
Unix: LF (\r\n)
DOS/Windows: CRLF (\r\n)
Mac: 昔はCR (\r) だったけど今どうなの?
意識して変換するのであれば、CRLFにしておくのが無難だとは思う。Perl v5.8では、以下のようにしてPerlIO階層で変換してくれるので便利。(ファイルに出力するのであれば open 時に指定することも可能。)
binmode STDOUT, ":crlf"
0514nobodyさん
2006/12/25(月) 22:37:26ID:ClYkzmks0515nobodyさん
2006/12/26(火) 05:42:28ID:???\nでOSの改行コードになる。
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
>>513
\rと\nの解釈が間違ってないか?
0516498
2006/12/26(火) 08:40:27ID:???0518nobodyさん
2006/12/26(火) 18:42:02ID:???管理パスを確認
↓
パスがあってたら登録サイト一覧を表示
↓
削除したいサイト選択後に削除←この時の質問なんだけど
削除したいサイト選択後のスクリプトの呼び出し方がわからない
削除したいサイトをチェックボックスで選択後、インプットタグでスクリプトを呼び出して、
サイト削除のサブルーチンを呼び出すって流れなんだけど、
引数やhiddenで呼び出す書き方だと外部からも直接呼び出せてしまうわけで、
管理画面からのみ呼び出せるようにするにはどうしたらいいの?
0519nobodyさん
2006/12/26(火) 18:46:11ID:PubWBr4/あとスレ違い
0521JAPU ◆lVJAPUTeX.
2006/12/26(火) 20:08:35ID:???古代のMacPerlではohzakiの記載も正しいですが、最近のPerlでは\n = NL(LF), \r = CR のはずですが…
今時そこまで古いバージョンに気を使う必要は無いでしょう。
そもそも、\n と \r の意味が逆転しているのも独自仕様ですし。
>>518
セッション管理が面倒なら、削除する際にも再度パスワードを入力させてチェック。
この手法だと、CSRFを回避することができるおまけ付き。
0522nobodyさん
2006/12/26(火) 20:15:42ID:???ん?よく分からないんだが、最新のActivePerlとかMacPerlでは挙動が変わったってこと?
よその環境用には書かないからマジでわからん。
0523nobodyさん
2006/12/26(火) 20:17:46ID:???0524518
2006/12/26(火) 20:43:26ID:ISbRNGDdありがとうございました
解決しました
0525JAPU@坂井恋夏 ◆lVJAPUTeX.
2006/12/26(火) 20:51:33ID:???binmode はこの改行コード変換を抑制する関数です。(最近ではそれに加えてPerlIO層の変換ルールを指定する機能も持たされました。)
この変換があるため、Windows環境ではbinmodeを指定せずバイナリ (画像データなど) を出力する際に正しいデータが出力できないという罠に陥ります
# MacPerl の場合、\r と \n の役割を入れ替えることで、Unix 用に書かれたスクリプトが (binmodeせず) そのまま動作することを期待していたのでしょう。(多分)
ActivePerl でも、\n 自体は LF となります。以下が実行例です。
C:\>perl -e "$x = qq[\n]; print unpack q[H*], $x"
0a
また、binmodeの有無によって改行コードの変換がされる・されないことは以下の通り実行したら分かります。
C:\tmp>perl -e "open FH, q[> sakura.txt] or die; print FH qq[\n]"
C:\tmp>perl -e "open FH, q[> tomoyo.txt] or die; binmode FH; print FH qq[\n]"
MacPerl は今でもあるかは知りません。
「古代のMacPerlでは」→「少なくともある時点でのMacPerlでは」に訂正します。
0526nobodyさん
2006/12/26(火) 21:15:11ID:???0527nobodyさん
2006/12/26(火) 21:42:36ID:???そうさせない方法があったはず
0529nobodyさん
2006/12/26(火) 23:49:25ID:???0531nobodyさん
2006/12/27(水) 15:46:35ID:???0532nobodyさん
2006/12/27(水) 16:52:37ID:Dit2F/dP0533nobodyさん
2006/12/27(水) 17:25:34ID:???0534533
2006/12/27(水) 17:57:11ID:???my $aaa = {
a => 'あ',
b => 'い',
c => 'う'
};
my $bbb = {
a => 'え',
b => 'お',
c => 'か'
};
my $ccc = {
a => 'き',
b => 'く',
c => 'け'
};
my @aaa = (\%aaa, \%bbb, \%ccc);
foreach my $a (@aaa) {
foreach my $b (keys(%$a)) {
print %$a->{$b};
}
}
0535nobodyさん
2006/12/27(水) 17:58:45ID:???$foo{hoge}:
%fooというハッシュのキーhogeに対応する値
$foo->{hoge}:
$fooに格納されたハッシュリファレンスで示されるハッシュの
キーhogeに対応する値
0536nobodyさん
2006/12/27(水) 18:03:24ID:???$foo{hoge} ハッシュの値
$foo->{hoge} ハッシュリファレンスの値(デリファレンス)
>>533
$foo[0]->[0]とか$foo[1]->{hoge}とか
0538nobodyさん
2006/12/27(水) 18:16:16ID:???ご回答ありがとうございますm(_ _)m
ようやく両者の違いがわかりました!
>>537
おお〜出来ました!ありがとうございます!
$aaa = {
};
と
%aaa = (
);
の違いについて分かるサイトはございますか?
前者が名前の無いハッシュなんとかかんとかというのは分かったのですが・・・
0539nobodyさん
2006/12/27(水) 18:43:49ID:???ハッシュをforeachやwhileでまわすと、例えば>>534の例で言えばc→a→bのように、返される値の順序がバラバラになるんです。
この理由は分かった(というか元々バラバラになるようになっている)のですが、これは番号を振ってsortしなくてはいけないのですか?
0540nobodyさん
2006/12/27(水) 19:01:43ID:???いちいち番号を振らなくてもsortで出来るんですねヽ(・∀・)ノ
0541nobodyさん
2006/12/27(水) 19:08:24ID:???理由は「ハッシュ」という名前に関係してるんだけど、
詳しく知りたければ「ハッシュテーブル」を検索してみてね。
0542nobodyさん
2006/12/27(水) 19:15:48ID:???%aaa = (
);
なら
$fhoge}
ttp://www.rfs.jp/sb/perl/02/10.html
ここなんかどうだろうか
0543nobodyさん
2006/12/27(水) 19:17:09ID:???%aaa = ();
なら
$aaa{hoge}
$aaa={};
なら
$aaa->{hoge}
0544JAPU@坂井恋夏 ◆lVJAPUTeX.
2006/12/27(水) 20:12:52ID:???0545nobodyさん
2006/12/27(水) 20:17:56ID:???0546nobodyさん
2006/12/28(木) 00:05:37ID:???グローバル変数 (中括弧で囲われていない部分で my 宣言) にして 1回書き込むだけにしたら、
スクリプト全体の実行速度が 10倍以上になった。
my @dasabase = (
['aa', 'ab', 'ac', 'ad');
['ba', 'bb', 'bc', 'bd');
['ca', 'cb', 'cc', 'dd');
['da', 'db', 'dc', 'dd');
);
みたいな 5KB 程度のデータを多次元配列にいれてるだけなんだけど、(サブルーチンの呼び出し回数は 500回ぐらい)
Perl の配列処理が遅いのか、5KBのデータが重いのかは知らないけど、今時のハイスペックなマシンでも、ただ短いデータを代入するだけの処理で
リソース食いつぶしたりするもんなんだね。
0547nobodyさん
2006/12/28(木) 00:39:59ID:???記事修正用のパスワードはユーザ任せにするわけですが、crypt 関数でハッシュ化したものを記録すると
ログに記載されたパスワードのハッシュからパスワードクラックされる危険はどの程度あるのでしょうか?
(パスワードは6文字の英数字の場合)
また、crypt よりも安全な一方向関数はありますでしょうか?
よろしくお願いします。
0548nobodyさん
2006/12/28(木) 00:55:31ID:???今時のPCだとcryptで6文字とかそらもうあっさり解析される。
とりあえずお手軽なところではMD5あたりだと思うが、
そもそもパスワードのログだけ別ファイルにすれば良くね?
0549nobodyさん
2006/12/28(木) 00:56:23ID:???それによってアウローチが変わると思われ
0550nobodyさん
2006/12/28(木) 01:08:04ID:???0551nobodyさん
2006/12/28(木) 02:53:29ID:???XORなどのビット演算で数回かき回したものを置けば、元のパスワードは判別不能になる。
もちろん、かき回しロジックを公開しては意味がない。
0552nobodyさん
2006/12/28(木) 09:03:40ID:???0553547
2006/12/28(木) 09:53:44ID:???回答ありがとうございます。
操作性とスクリプトの簡略化のために、トリップキーと削除・編集パスワードを同じものにしたいので、
必然的にパスワードを一方向関数で変換した値は公開されちゃうんです。(トリップとして)
tripper のようなトリップ解析ツールでも6文字なら1日以内に解読できちゃうので、やはり危険ですよね。
>>550
なるほど
http://www.tohoho-web.com/wwwperl2.htm#crypt
そうすればMD5が使えるみたいですね
>>551-552
自分のサイトだけで使ってるならかき混ぜでもばれなさげですね。。。
まぁ基本的に隠蔽によるセキュリティはよくないですが。
よく考えてみると、トリップとして公開するデータをパスワードの一方向関数変換結果の一部にしちゃえば
解読が困難になりそうですね。
ありがとうございました。
0554nobodyさん
2006/12/28(木) 13:58:02ID:hVZzWyfvmy $self = {};
my $self = [];
この2通りの記述を見ました。
{}と[]の違いってなにかあるんですか?
あと、それらに空要素を入れる場合、=0や=''ではなく={}や=[]とする理由も加えてご教示願います。。。m(_ _)m
0555nobodyさん
2006/12/28(木) 14:02:16ID:???$aaa=[]; # 配列リファレンス
@aaa=(); # 配列
$aaa=''; # スカラー
0556nobodyさん
2006/12/28(木) 14:04:14ID:???オマイラとりあえずperlreftut嫁
ttp://www.kt.rim.or.jp/~kbk/perl-5.8/perlreftut.html
その質問の答えは全てリファレンスとは何かと言うことを理解することによって得られるから。
0557nobodyさん
2006/12/28(木) 14:16:08ID:hVZzWyfvありがとうございます!
参考サイトは10回ブックマークに登録しました。
0558nobodyさん
2006/12/28(木) 14:27:15ID:???ちなみにそのサイト、テンプレ>>2にある
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/
だからね。
今回は入門としてとりあえずチュートリアル(perlreftut=perl-reference-tutorial)を紹介したけれど、
ちゃんと理解するためにはperldata、perlref、perllolあたりも読んでおいてほしいところだ。
0559nobodyさん
2006/12/28(木) 20:22:01ID:???windows上で動作するアプリケーションで使用するテキストを出力するCGIを作っています。
(スクリプトのエンコードはEUCJP)。
現時点では次のような処理をしています。
投稿ページをEUCのHTMLで出力
↓
投稿ページからPOSTされた文字列を加工して
Shift-JIS(CP932)に変換してテキストファイルに保存
(変換にはJcode::CP932モジュールを使用)
↓
テキストファイル(CP932)を読み込んでEUCに変換して整形してHTMLに出力
(変換にはJcode::CP932モジュールを使用)
自宅鯖で使う分には良いのですが、Jcode::CP932モジュールは殆どの鯖に入ってないので、
レンタルサーバで使うにはモジュールの追加を依頼する必要があります。
そこで質問です。
1、バージョン5.8のperlの標準的なモジュールのみでEUC-JPとCP932の相互変換は出来ますか。
もし出来るなら方法を教えてください。
2、Encode.pmでCP932とEUCJPの相互変換は出来るのか、出来るなら方法を教えてください。
3、スクリプトをUTF-8で記述して、use utf8を使用してCP932とUTF-8を
相互変換したほうが良いのでしょうか。
その際、CP932とUTF-8を相互変換は標準的なモジュールのみで可能でしょうか。
0560nobodyさん
2006/12/28(木) 20:34:13ID:???0561nobodyさん
2006/12/28(木) 20:41:34ID:???Jcode-CP932っての探して見てみたが>>560の言うとおりインストールしてもらう必要は無い。
libディレクトリ以下適当にコピーしてuse libなりなんなりすれば動く。
1.
極端な話自分で変換テーブルを用意すれば変換できるわけだけれど、
CP932との変換機能が用意されているかと言えばNO。
2.
可能。非標準モジュールEncode-EUCJPMS。但し要コンパイル。
3.
私はそっちのほうが好きではあるが別にその必要は無い。
変換については1,2のとおり。
0562nobodyさん
2006/12/28(木) 20:52:26ID:???0563nobodyさん
2006/12/28(木) 22:47:30ID:/nHSB5owCGIでパラメータを受け取る時に、ハッシュテーブルに入る変数の数が
不定の場合に、ループ処理を使って、うまく値を取り出すにはどうしたら
良いでしょうか。
パラメータ↓
aaa=テキストa&bb1=テキストb1&bb2=テキストb2&..bbx=テキストbx&ccc=テキストc
bb1〜bbxまでの値を取得したい・・。
良い方法がありましたら、ご教授よろしくお願い致します。
0564563
2006/12/28(木) 22:54:40ID:???>>563 わざわざハッシュにしなくても、bb1〜bbxだけ普通の配列に入れたらイイ?
良案お待ちしておりますー。
0565nobodyさん
2006/12/28(木) 23:18:32ID:???<form name="bb[]" value="テキストb1" />
<form name="bb[]" value="テキストb2" />
<form name="bb[]" value="テキストbx" />
みたいにしておいて、パラメータ解釈時に/(.*)\Q[]\E$/な要素を
push @{$params{$1}}, $value;
するのが常套手段ではないかと。
0566nobodyさん
2006/12/28(木) 23:20:10ID:???s/form/input type="text or hidden"/g
:
:
}
とか?
0568nobodyさん
2006/12/29(金) 01:12:17ID:???おれ、
use Encode qw(from_to);
from_to($hoge, 'cp932', 'euc-jp');
from_to($hoge, 'euc-jp', 'cp932');
で変換して使ってるけど、非標準モジュール入れた記憶ないなあ。
0569561
2006/12/29(金) 01:31:54ID:???あーごめんなさい。>>561は撤回…完全に記憶違いです…
CP932との変換テーブルはデフォルトで入ってるのか。
無いのはMicrosoft仕様のEUCJP-msね。
丸囲み文字とかローマ数字とかそういうやつがEUCJPに変換できないのか…
1. EUC-JPとの変換はできるが一部CP932が拡張している一部の文字について変換できない。
2. 可能。完全に変換するためには非標準モジュールEncode-EUCJPMS。但し要コンパイル。
3. 標準モジュールのみで可能。
で合ってるかな…まあなんにしろ一度派手に記憶違いしてた人の回答なんて
信用できませんので誰か詳しい人お願いしますillorz
0570nobodyさん
2006/12/29(金) 01:40:21ID:???パスを通せば動くんですか。。。
use libの使い方が良くわからなかったので、検索しました。
結構使えそうですね。ただ、コンパイルの必要なモジュールには使えないかも。
use utf8にも挑戦してみます。
use utf8を知る前に投稿を受け取る部分を作ったので
文中で正規表現で2バイト文字を使うために\nxx\nxxで文字を記しているので
面倒になるかもしれませんが。
>>568
Encodeでも可能なんですかね。ちょっとやってみます。
>>569
Jcode::CP932では上のほう(>>404)で話が出ていた���A�ケも�O���Uも上手に変換できていたので
もしかしたらいけるかもしれません。ちょっとやってみます。
#文字コード変換は鬼門ですね。
0571nobodyさん
2006/12/29(金) 02:16:03ID:???まず、use Encode qw(from_to);での結果。
from_to($huga, 'cp932', 'eucjpms');
ダメでした。
���A�ケ�O���Uと続けて記入したデータが??????に化けました。
次にEncode::EUCJPMSを読み込ませた上で
↓のように記述してみました。
from_to($huga, 'cp932', 'eucjpms');
これもダメでした。���A�ケが全角空白に変換され �O���Uと出力されてしまいました。
3、のuse utf8は時間が掛かるので明日にでも全改修してやってみます。
0572nobodyさん
2006/12/29(金) 02:29:36ID:???eucjpmsじゃなくてcp51932だとどうだろ
ttp://msyk.at.webry.info/200511/article_2.html
ttp://legacy-encoding.sourceforge.jp/wiki/index.php?cp51932
こちらで確認したところそれらの文字は全部通った。
0573nobodyさん
2006/12/29(金) 02:35:41ID:???>>572
from_to($ds, 'cp932', 'cp51932');
OKでした。でも、このcp51932ってエンコードって5系perlには標準で入ってましたっけ。
EUCJPMSはロードしなくても出来たので、最新版のEncodeでは標準のようですが。
0574nobodyさん
2006/12/29(金) 02:43:29ID:???ありゃ?
ttp://search.cpan.org/~naruse/Encode-EUCJPMS-0.07/EUCJPMS.pm
に書いてあるからEncode::EUCJPMSが提供しているものだと思ったんだけど。
そして当方ではロードしないとUnknown encodingとエラー起こしてる…
>perl -MEncode -e "print $Encode::VERSION"
2.18
0575nobodyさん
2006/12/29(金) 03:05:50ID:???私の使ったEncode::EUCJPMSをロードしないと言うのは
use Encode::EUCJPMS
と、記述しないと言うことですが。。。
って、use Jcode::CP932を書いたままでした。
Jcode::CP932内でEncode::EUCJPMSを呼んでるので動いたのでしょう。
となると、標準モジュールのみでやるにはやはりuse utf8プラグマをつけないとダメってことですかね。
それでも動くかどうかは判らないですが。
0576nobodyさん
2006/12/29(金) 04:26:07ID:???現時点でhtmlで簡単なサイトぐらいなら作れる、人並みの脳みそを持った人が、
仕事の合間を縫ってそれなりに勉強して、Perlを使ったCGI(初歩的な掲示板など)
をゼロから作れるようになるには何ヶ月ぐらいかかりますか?
個人的な感覚で構いませんので、どう思うか教えて下さい。
0578577
2006/12/29(金) 05:58:43ID:???0579nobodyさん
2006/12/29(金) 10:17:46ID:???やっぱ1ヶ月ぐらいかなー
0580nobodyさん
2006/12/29(金) 10:48:29ID:???一生perlしか使わないつもりなら止めないけど。
0581563
2006/12/29(金) 10:51:17ID:???ありがとうございます。実はPerlは今週はじめたばかりで、
そんな風に出来るんだ〜・・などと感心してました。
で、この結局こんな感じで進めました。
if($key =~ /^bb\d$/){ push @bb_vals, $val; } #キーが"bb[0-9]"の処理
elsif($key =~ /^dd\d$/){ push @dd_vals, $val; } #キーが"dd[0-9]"の処理
else{ ハッシュテーブル作成 }
�@入力フォームに、ラジオボタンが数種類 × 数グループあったので、
nameを同じにすると ややこしい感じに
�Aフォームの順番も重要だったので、順不同なkeysは今回は使いにくそう
な感じでした。
これからまた、お世話になるかもしれません。よろしくお願いします。
>>576
プログラムかUNIX系の知識があれば、一週間もあれば。
それ以外であれば、やっぱりひと月でしょうねー。
0583nobodyさん
2006/12/29(金) 13:41:38ID:???やるならCから入った方がいい・・・と、Cから入った俺がry
0584nobodyさん
2006/12/29(金) 14:10:55ID:???0585nobodyさん
2006/12/29(金) 19:17:04ID:???1ヶ月あれば形になると思う。あとHaskellやろう。
0587nobodyさん
2006/12/29(金) 19:32:26ID:???0588576
2006/12/29(金) 19:38:01ID:???回答ありがとうございます。
現状私は、htmltとcssとJavascriptが
本当に「できる」と言っていいのかすらわからない程度にできます。
それ以外は一切できません。Perlを使ったフリーCGIのソースをいじくり回す程度です。
仕事でWebデザインぽいことをやってますが、デザインだけではどうにもこうにもアレなので、
CGIを習得しようと思い、CGIと言えばPerlだろという考えで書き込みました。
純粋にプログラミングというより、あくまでもCGIを作るための言語を学びたいので、
WebProg板に来た次第です。
仕事が忙しいので、自習は週4日、1時間程度で考えています。
みなさんを信じてまずは1ヶ月がんばります。
そこで、>>1-10あたりにあるサイト以外で、オススメのサイト、
書籍、「その前にまずこれをやれ」的なことなどありましたら教えて下さい。
0593nobodyさん
2006/12/29(金) 21:10:19ID:???>「その前にまずこれをやれ」的なことなどありましたら教えて下さい。
こんなとこで回答期待してないでさっさと着手しろ。
そういうやつに限って始めるまでが長くて結局何も出来ない。
0595nobodyさん
2006/12/29(金) 22:38:09ID:???じゃあ逆にお勧めのPerlishって誰?
0596nobodyさん
2006/12/29(金) 23:05:21ID:???お勧めの人を作らないことがお勧め。
特にPerlの場合は、いろんな書き方があるから、いろんなコードを読んでおいたほうがいい。
このスレを見るのがためになると思う。
答える側になっても、ここではまだまだ新しい発見があるし。
0597nobodyさん
2006/12/29(金) 23:43:55ID:???)'ーーノ( | | | 、 / l| l ハヽ |ー‐''"l
/ P | | |/| ハ / / ,/ /|ノ /l / l l l| l P ヽ
l ・ i´ | ヽ、| |r|| | //--‐'" `'メ、_lノ| / ・ /
| B l トー-トヽ| |ノ ''"´` rー-/// | B |
| ・ |/ | l ||、 ''""" j ""''/ | |ヽl ・ |
| P | | l | ヽ, ― / | | l P |
| !! | / | | | ` ー-‐ ' ´|| ,ノ| | | !! |
ノー‐---、,| / │l、l |レ' ,ノノ ノハ、_ノヽ
/ / ノ⌒ヾ、 ヽ ノハ, |
,/ ,イーf'´ /´ \ | ,/´ |ヽl |
/-ト、| ┼―- 、_ヽメr' , -=l''"ハ | l
,/ | ヽ \ _,ノーf' ´ ノノ ヽ | |
、_ _ ‐''l `ー‐―''" ⌒'ー--‐'´`ヽ、_ _,ノ ノ
 ̄ ̄ | /
0598nobodyさん
2006/12/30(土) 00:06:42ID:???0599nobodyさん
2006/12/30(土) 10:22:00ID:2X8njGUnkent(と、その属性のクローン)だけは外す事を明記するのを忘れている
俺は、それで散々な目にあったから
いゃ、俺だけではないが
0600nobodyさん
2006/12/30(土) 11:24:16ID:???画面などのデザインを変更するプロパティみたいなのってありますか?
教えてください。
スレ違いなのは承知の上です。
0602nobodyさん
2006/12/30(土) 12:32:16ID:???0603nobodyさん
2006/12/30(土) 14:47:43ID:???0604nobodyさん
2006/12/30(土) 16:37:11ID:???>スレ違いなのは承知の上です。
板違いだったりする。
http://pc10.2ch.net/test/read.cgi/tech/1166708139/
0605nobodyさん
2006/12/31(日) 02:44:28ID:oF4MMStz%hash = (
a => 変数,
b => 配列のリファレンス,
c => 変数,
d => 配列のリファレンス,
e => 配列のリファレンス,
...
);
であるとき、ループで%hashのvalueだけを評価して、もし配列のリファレンスであればその配列を展開する・・・という処理はどうすれば良いでしょうか。
0606nobodyさん
2006/12/31(日) 02:48:12ID:oF4MMStzwhile (ref(values(%hash)) eq 'ARRAY') {
...
}
という処理を使うことにします。
・・・間違ってるのかな?
0607nobodyさん
2006/12/31(日) 04:17:23ID:oF4MMStz%hash = (
a => 'あああ',
b => [
{ c => 'いいい' },
{ d => [
{ e => 'ううう' }
] }
);
このようにハッシュのvalueに幾度(無限に)も配列のリファレンスがネストしてあるとき、どのようにすれば下層部のハッシュ(上記の場合e => 'ううう')が取り出せるのでしょうか?
0609nobodyさん
2006/12/31(日) 10:33:33ID:oF4MMStz試してはみたんですが、出来ませんでした。。。
端折ると↓のようにしてみたんですが
sub aaa {
foreach () {
if (ref()) {
&aaa();
} else {
普通のしょり
}
}
}
0610nobodyさん
2006/12/31(日) 14:29:56ID:???0611nobodyさん
2006/12/31(日) 17:01:53ID:???【書き方1】
function check() {
if ($x == 2) {
print "Xは2です。";
} elsif ($x == 5) {
print "Xは5です。";
} else {
print "Xは2でも5でもありません。";
}
}
【書き方2】
function check()
{
if ($x == 2)
{
print "Xは2です。";
}
elsif ($x == 5)
{
print "Xは5です。";
}
else
{
print "Xは2でも5でもありません。";
}
}
0612611
2006/12/31(日) 17:05:01ID:???自分は 【書き方2】 で理由は、
・開始括弧と終了括弧が揃っている。
・開始括弧の行が空く (括弧だけの行ができる) ので見やすい。【書き方1】 だと空行入れるべきか入れないべきかで毎回迷ってやりにくい。
・elsif の行がスマートになる。
です。
皆さんのお好み、または標準のコーディングルールがあれば教えて下さい。
あと、自分はインデントはタブで、タブは半角スペース4つ分にしていて、文のあとにコメントを入れる場合にはタブ1つあけることにしていますが、
こちらについても教えていただけたら幸いです。
0613nobodyさん
2006/12/31(日) 17:51:26ID:???ベストプラクティスでは、「重要なのは、首尾一貫したスタイルを1つ採用することである。」としたうえで
レイアウトガイドラインの「提案」として、K&Rスタイルを採用しているね。つまり
if ($x == 2) {
print "Xは2です。";
}
elsif ($x == 5) {
print "Xは5です。";
}
else {
print "Xは2でも5でもありません。";
}
こう。んで、タブを使わず半角スペース4つを1インデントとしている。
個人的にも、特にこだわりはないので、このベストプラクティスを標準としてるなぁ。
ただ、チーム開発の時はチームのコーディングルールに合わせるけど。
でも、Perl は TMTOWTDI がモットーなんだし、好きな書き方で良いと思う。
0614611
2006/12/31(日) 17:55:49ID:???なるほど
回答していただきありがとうございました
標準的なコーディングルールを使ったほうが他の人と共有する場合や配布する場合には便利ですね。
> タブを使わず半角スペース4つを1インデントとしている。
これに関しては、自分が使っている 「phpエディタ」 も 「TeraPad」 も Tabキーで半角スペースを4つ入れる機能がないので
不便でしょうがないです(´・ω・`)
0615nobodyさん
2006/12/31(日) 17:58:21ID:???0616nobodyさん
2006/12/31(日) 18:00:26ID:???0617nobodyさん
2006/12/31(日) 18:08:53ID:???abcd = 1 + 2 + 3 +
4 + 5;
0618nobodyさん
2006/12/31(日) 18:40:04ID:???use strict;
use Data::Dumper;
my %hash = (
a => 'あああ',
b => [
{ c => 'いいい' },
{ d => [ { e => 'ううう' } ]}
]
);
parse(\%hash);
sub parse {
my $tmp = shift;
#print Dumper $tmp;
if (ref $tmp eq 'ARRAY') {
foreach (@$tmp) {
parse($_);
}
} elsif (ref $tmp eq 'HASH') {
foreach (keys %$tmp) {
parse($tmp->{$_});
}
} else {
print "$tmp\n";
}
}
0619nobodyさん
2006/12/31(日) 21:54:59ID:???@b = qw{ 1 2 3 4 5 6 };
@array = \(@a, @b);
こんな風になっている場合、@arrayから@aの要素数にアクセスするにはどう書けばよいでしょうか。
0620nobodyさん
2006/12/31(日) 22:31:17ID:???0622nobodyさん
2007/01/01(月) 20:57:03ID:QvA3S+in#####書き換え前#####
# メッセージ内で使用を禁止する言葉の処理
if (crypt($FORM{'spwd'},substr($password,$salt,2)) ne $password)
{@ngword = split(/\s+/,$ngw);
foreach $ngw (@ngword){
if ($FORM{'value'} =~ /\Q$ngw\E/i){
&error('メッセージ内に使用禁止ワードが含まれています。');}}}
#####ここまで#####
☆備考☆
$ngw = 'テスト test TEST';
これをファイルを読み込み形式にしたいと思い↓のようにしました。
#####書き換え後#####
if (crypt($FORM{'spwd'},substr($password,$salt,2)) ne $password)
{if ( !open(NGW, "$spamdata") ){
&error('0');}
@xx = <NGW>;
foreach $ngw (@xx){
@ngword = split(/,+/,$ngw);
foreach $ngw (@ngword){
if ($FORM{'value'} =~ /\Q$ngw\E/i){
&error('メッセージ内に使用禁止ワードが含まれています。');}}}close(NGW);}
#####ここまで#####
☆備考☆
$spamdata = 'spamdata.cgi';
※質問
そこで、foreach $ngw (@xx){}とforeach $ngw (@ngword){}が重複しているようで、
表記としておかしくないか疑問に思いました。
なにぶんPerlの知識も経験も乏しいもので、チェックをお願いします。
より適切な表記の仕方があったらご指摘も戴けるとうれしいです。
備考
spam対策のために禁止語句をCGIファイルから読み込みたいと思い書き換えました。
0623nobodyさん
2007/01/01(月) 21:04:13ID:???0624nobodyさん
2007/01/01(月) 23:37:36ID:???>そこで、foreach $ngw (@xx){}とforeach $ngw (@ngword){}が重複しているようで、
>表記としておかしくないか疑問に思いました。
そりゃどう考えてもおかしい。perlに限らずプログラミング一般論として。
>spam対策のために禁止語句をCGIファイルから読み込みたいと思い書き換えました。
CGIの意味知ってる?
そこは単にテキストファイルでしょ。なんで、そんなファイルの拡張子に".cgi"付けるの。
新年早々猪突突進か
0625nobodyさん
2007/01/01(月) 23:59:59ID:???0626nobodyさん
2007/01/02(火) 00:10:37ID:???0627nobodyさん
2007/01/02(火) 00:17:55ID:???目くじら立てることでもない。
0628nobodyさん
2007/01/02(火) 00:29:14ID:???こぢんまりしたサイトでは目くじら立てなくてもいいかも知れないが、
職業プログラマが製品レベルではやらないことだな。
0629nobodyさん
2007/01/02(火) 00:46:17ID:???自分だけのデータならランダムで32文字でつけたディレクトリにデータファイル入れたりしてる
0630nobodyさん
2007/01/02(火) 01:29:17ID:???とりあえず、2つのforeach文をそれぞれ同じ変数$ngwに入れてるみたいだから、それを別々にしてみよう。
一つ目を$ngw1、二つ目を$ngw2とか。
で、
if ($FORM{'value'} =~ /\Q$ngw\E/i){
を
if ($FORM{'value'} =~ /\Q$ngw2\E/i){
にしてみると大丈夫だと思うよ。
0631nobodyさん
2007/01/02(火) 02:15:39ID:???『次のファイルを開こうとしています。』となって表示されません。
ライブラリファイルの拡張子は.plなのですが、保存したファイルは普通にダブルクリックで開けてしまいます。
.pl拡張子は何か特別な設定が必要なのでしょうか?
0632nobodyさん
2007/01/02(火) 02:24:31ID:???どう読み込もうとしたのか。requireとかopenとか…ダブルクリックとか。
> 『次のファイルを開こうとしています。』となって表示されません。
これは自作メッセージ?STDOUTかSTDERRに出てるのか、UAの画面に表示されるのか。
CLIのお手軽アプリを作ったときに、こういうメッセージをprintしてファイルの中身をSTDOUTに吐く前に
無限ループにはめて先に進まなくなったことは何度もある。
# open(FH, '<', "hoge.dat"); flock(FH, 2); @buffer = <FH>; close(FH);
# while (@buffer) { print 'while でなく foreach と書いたつもりの酔っ払い', "\n"; }
質問がWebProg関係なのかどうかも含めて、ちょっとよくわかんない。
.plだからとくにどうこう、ってのはないです。
0634622@解決済み
2007/01/02(火) 09:03:38ID:5ekfui+1>>630
ありがとうござます。↓昨日また少し考えてこんな感じになりました。
if (crypt($FORM{'spwd'},substr($password,$salt,2)) ne $password)
{if ( !open(NGW, "<$spamdata") )
{
&error('0');
}
flock(NGW, 1);
@xx = <NGW>;
close(NGW);
foreach $ngw (@xx){
@ngword = split(/,+/,$ngw);
foreach $ngwbb (@ngword)
{
if ($FORM{'value'} =~ /\Q$ngwbb\E/i)
{
&error('メッセージ内に使用禁止ワードが含まれています。');
}
}
}
}
ご協力ありがとうございました。
0635nobodyさん
2007/01/02(火) 17:42:57ID:???WINDOWS鯖の場合だと
if (-w $write_file_path) { print "書き込み可能\n"; }というプログラムがが使えないんです
0636nobodyさん
2007/01/02(火) 19:27:19ID:???0637nobodyさん
2007/01/02(火) 19:31:28ID:???0638nobodyさん
2007/01/02(火) 20:42:50ID:???0639nobodyさん
2007/01/02(火) 21:13:35ID:???0640nobodyさん
2007/01/03(水) 11:08:33ID:???マルチ放置推奨
0641nobodyさん
2007/01/03(水) 22:13:23ID:???なのでしょうか?
そういえば1年前に5000兆まで計算させるシステムを作った
のを思い出したのですが、その頃は最大計算桁数のことを
考えていなかったような気がするので質問させていただいた
次第です。
ご教示いただけますと幸いです。
0642nobodyさん
2007/01/03(水) 22:24:17ID:???0643nobodyさん
2007/01/04(木) 00:30:50ID:???ご教示有難うございます。
ちょっと昔のソースを改変するのにもある程度理由を
つけなければいけないので、デフォルトで何桁まで
問題ないかもしご存知でしたら教えていただけますと
幸いです。
質問続きですみません。
0644nobodyさん
2007/01/04(木) 12:00:06ID:???0645nobodyさん
2007/01/04(木) 16:29:54ID:???IVはポインタが格納できることが保証される符号あり整数型、
UVはIVと同様の符号なし整数型。
そしてNVは倍精度浮動小数点型となっている。
えーとだからその処理系における不動小数点型の表現がIEEE 754だと仮定すれば、
倍精度浮動小数点型の仮数部は52bitで、
32bitマシンの場合は(恐らく)UVのほうが表現できる範囲が大きい(52bit - 15~16桁)。
64bitマシンの場合はIV/NVのほうが表現できる範囲が大きい(64bit - 18~20桁)。
かな。前に齧り読んだことと、ドキュメントの関連してそうな部分を
掻い摘んで読んだのを組み合わせただけなのであってるかどうかはわからん。
See also: perlguts
0646nobodyさん
2007/01/04(木) 16:40:19ID:???訂正
> 32bitマシンの場合は(恐らく)UVのほうが表現できる範囲が大きい(52bit - 15~16桁)。
> 64bitマシンの場合はIV/NVのほうが表現できる範囲が大きい(64bit - 18~20桁)。
ここ思いっきりUVとNVが逆になってる( ´д`;) 読み替え宜しく
0647nobodyさん
2007/01/04(木) 18:37:22ID:???0648nobodyさん
2007/01/05(金) 04:06:51ID:CAClPvdI最新のexpatもいれたのですが。。
0649nobodyさん
2007/01/05(金) 07:21:32ID:???0650nobodyさん
2007/01/05(金) 12:28:06ID:???ブラウザーからの入力に応じてcgiファイルを書き換えるcgiを作ってみたいのですが。
書き換える側のCGIのソースと書きこまれる側のソースが混ざってしまって
バグがおきてしまいました。
書き込まれる側のソースにシングルクオーテーション、ダブルクオーテーション
が含まれていて書き換える側のダブルクオーテーションで囲まれた間の部分に、
書き込まれる側のダブルクオーテーションが存在してしまうようです。
他にも変数を文字列として書き出せず変数の中身、つまり何も無いスカが書き出されます。
どうすれば良いでしょうか?
0652nobodyさん
2007/01/05(金) 13:19:34ID:???それだけじゃ何もわからん。OSは?Perlのバージョンは?Cコンパイラは持ってる?
0653650
2007/01/05(金) 13:24:38ID:???とりあえずCGIからいろんなファイルに書き込むプログラムを色々と書いてみているのですが。
テキストやHTMLは上手く書き込めたのですがCGIのファイルは上手くいきませんでした。
CGIファイルへの書き込みは習っても意味が無いのでしょうか?
0654nobodyさん
2007/01/05(金) 14:31:51ID:???勉強するだけならいいけど実際に共有鯖等では実行しないで欲しいね。
リスクが高いです。他のユーザーに迷惑かける可能性大。
0655nobodyさん
2007/01/05(金) 14:39:32ID:???0656nobodyさん
2007/01/05(金) 17:52:53ID:???ユーザは許可されている事はなんでもやってよい。
0657nobodyさん
2007/01/05(金) 19:09:54ID:???実行可能=やってよいとか考えているわけではありませんよね^^;
0658nobodyさん
2007/01/05(金) 19:19:39ID:???0659nobodyさん
2007/01/05(金) 20:31:05ID:5w1bms+v>> それだけじゃ何もわからん。OSは?Perlのバージョンは?Cコンパイラは持ってる?
OSはFedoraCore6
PerlVersionは v5.8.8 built for i386-linux-thread-multi
Cコンパイラはあります。gcc -v で確認しました。
どうもexpat関係でエラーになっています。最新のexpatはいれたのですが。
0660nobodyさん
2007/01/05(金) 23:49:44ID:???'$' の前に¥でescapeしたり、ということで解決するんじゃないか。
それ以前にcgiがcgi を書き換えるという発想はどうなのよ。
動的にプログラムを生成する必要性はそうないんじゃないか。
0661nobodyさん
2007/01/06(土) 01:22:14ID:???>が含まれていて書き換える側のダブルクオーテーションで囲まれた間の部分に、
>書き込まれる側のダブルクオーテーションが存在してしまうようです。
>他にも変数を文字列として書き出せず・・・
自分でわかってんじゃん
0662nobodyさん
2007/01/06(土) 14:46:16ID:???0663nobodyさん
2007/01/06(土) 14:55:31ID:???そのままで良いんですね。。。
0664nobodyさん
2007/01/06(土) 16:32:45ID:???つまり>>650は何か間違った設計をしてるんだろうと思う。
てか掲示板のログファイルの拡張子を .cgi にしたいだけとかでは
0665nobodyさん
2007/01/06(土) 19:32:53ID:???PerlによるCGIの参考書を買ってゼロから勉強中ですが、
下記のプログラム(参考書を丸写し)が動作しません。エラーコードは500です。
原因は何でしょうか?
・Perlのパスはレンタルサバのサイトで確認
・ファイル名はindex.cgi
・OSはWinで、メモ帳で編集しFFFTPでUL
・パーミッションは755
#!/usr/bin/perl
print <<_EOF;
Content-type: text/html
<html>
<head><title>test</titel></head>
<body>
test
</body>
</html>
_EOF
0666nobodyさん
2007/01/06(土) 19:54:15ID:???500エラーじゃ何も判らんし、そもそもレン鯖使って勉強するなといいたいが。
・FTPの時にASCIIモードで送って無い
・パーミッションがレン鯖指定のものと違う
・そもそもindex.cgiが使えないようになっている(別名でテストしてみ)
とかそんなあたりか。ソースそのものは問題ない。
タグでtitleの打ち間違いがあるくらいか。
0667nobodyさん
2007/01/06(土) 20:03:54ID:???0668nobodyさん
2007/01/06(土) 20:07:39ID:???・バイナリモードで転送した
・ヒアドキュメント終端文字列でファイルが終わってる(改行がない)
辺りが有力っぽい。
0669nobodyさん
2007/01/06(土) 20:23:33ID:lBOtCkKIエラーメッセージを出すようにしたいと思っています。
投稿されたメッセージ$messageに
半角カタカナが含まれているかどうかを判定する、というのは
どう書けばよいでしょうか?
全角文字があるかどうかを判定ならググって出てきましたが・・・。
0670nobodyさん
2007/01/06(土) 20:23:42ID:???回答ありがとうございます。
>・FTPの時にASCIIモードで送って無い
FFFTPの環境設定に転送設定という箇所があったので、
「常にアスキー」に設定し、ULしなおしました。
>・パーミッションがレン鯖指定のものと違う
確認したところ、実行ファイルは700が推奨されていたのでそうしました。
705も試しました。
>・そもそもindex.cgiが使えないようになっている(別名でテストしてみ)
確認したところindexで問題ないようですが、test.cgiに変更しました。
ですが、動作しませんでした。
0672669
2007/01/06(土) 21:04:52ID:???・・・が、さらに質問です。
名前とタイトルに含まれる半角カタカナは全角に変換でいい。
そこでログに書き込むサブルーチンregistに、
&jcode'h2z_sjis(*name);#$nameの半角を全角に
&jcode'h2z_sjis(*subject);#$subjectの半角を全角に
と書いたのですが、名前のほうが変換されません。
0673nobodyさん
2007/01/06(土) 22:19:16ID:???0674nobodyさん
2007/01/06(土) 22:29:08ID:???モジュールのインストールなしに出来る方法はどんな方法があるのでしょう。
今はuse libとuse Crypt::CBCとBlowfish_PPでやっているのですが、どうしても遅いので
もう少し早くできると良いのですが。
>>662でlinux上で単純にコンパイルしてそのままautoディレクトリをコピーしてやれば良いのかと思って
コピーしてみましたが
Blowfish.so: undefined symbol: Perl_Gthr_key_ptr
こんな感じのエラーが出てしまいました。
Blowfish_PPとBlowfishでは速度が違いすぎるので、出来ればBlowfishの方を使いたいのですが、
どうすれば使えるのでしょうか。
0675nobodyさん
2007/01/06(土) 22:59:26ID:???0676nobodyさん
2007/01/06(土) 23:03:37ID:???0677nobodyさん
2007/01/06(土) 23:21:18ID:???同じ文字列入れてnameの方だけ変換ないってんなら
おまいが間違ってるとしか言えん。
>>674
モジュール無しで、ということだけならopensslに投げるという手もある。
モジュールのほうが速いと思うけど。
0680nobodyさん
2007/01/07(日) 00:28:09ID:???拡張子をcgiにすればファイルの中身を見られることもないのですが、まあ気休め程度に。
>>677
すみません。解決しました。
サーバーとローカルのperlのバージョンが違ったためにモジュールのバイナリを使用できていなかったようです。
サーバーとローカルのperlのバージョンをそろえてコンパイルしなおしたらそのままコピーでuse libしたら
出来ました。
0681nobodyさん
2007/01/07(日) 00:28:21ID:???レス遅れましたが、本当に有難うございました。
検証もしてみましたので検証報告も兼ねさせていただきます。
結論から申し上げますと、16桁目の4以上、つまりは4000兆
くらいから計算が狂ってきました。
これは645さんのおっしゃる32ビットマシンの性能ということ
に当てはまったのではないかと思いました。
ご丁寧に有難うございました。
0683nobodyさん
2007/01/07(日) 19:30:50ID:???Mac OS X PantherのTerminal上にて運用する予定のPerlスクリプトをMac OS X Tigerにて作っています。
指定されたディレクトリの中にある1万個程度のテキストを片っ端からチェックして、
ある特定の文字列があったら別の文字列に置き換えて保存するという処理なのですが、
一部ファイル名の最後の文字がスペースのものがあった場合に
それらの展開に失敗する(最後のスペースが無いものとしてファイルを開こうとする)ようです。
ファイル名の最後のスペースを認識させるにはどのような方法があるのかご教示頂けますと幸いです。
よろしくお願いいたします。
0685nobodyさん
2007/01/07(日) 20:02:08ID:???panther も tiger も5.8.xなのでバージョンの違いとか、OSの違いによるもんじゃないと思うそ。
0687nobodyさん
2007/01/07(日) 20:15:21ID:???0688nobodyさん
2007/01/07(日) 20:27:45ID:???案外知られてないのかな
0689nobodyさん
2007/01/07(日) 20:47:03ID:???とりあえずやってみたのがファイルのパスを' 'でくくるとか
" "でくくって\を付けるとかくらいなもので…
>>685
デキタ━━━━━━(゚∀゚)━━━━━━!!!!
何でなのか理屈がよく分かりませんができたっぽいです。
迅速なお答え、本当にありがとうございました!
0690683
2007/01/07(日) 20:52:01ID:???ご察しの通りPerlの仕様だったようです。
これでPantherのPerlが5.6だったりしたら路頭に迷うところでした。
>>687
検証して頂きありがとうございます。
おかげさまで何とかなりそうです(*´∀`)
>>688
Perlは一応それなりに馴染んでいたつもりだったのですが
今回の件には完全にやられました。もっと精進します。
0691nobodyさん
2007/01/07(日) 21:22:42ID:???0692nobodyさん
2007/01/08(月) 05:15:48ID:???ttp://www.mcdonalds.co.jp/mcgriddles/index.html
0693nobodyさん
2007/01/09(火) 00:38:49ID:???どう書けばいいでしょうか。
jcode.plではなく普通に置換で行いたいと思うのですが。
ここの正規表現みていたら訳が分からなくなってきた・・・。
ttp://sieg.xeong.com/archives/2005/06/perl.html
0695nobodyさん
2007/01/09(火) 01:08:35ID:???0696nobodyさん
2007/01/09(火) 01:11:19ID:???0697693
2007/01/09(火) 02:24:52ID:???EUCはブラウザのミスによる文字化けがあるから嫌なんです(タブブラウザにしなくていいからこっちを先に治せM$)。
CHARSET設定していながら何かの拍子に化ける→エンコードし直しうざい
それに半角カタカナを使えるようにしたいのではないので。
・・・大体、半角カタカナを使って書く言葉って、あまりいい意味の言葉じゃないですよね。
0698697
2007/01/09(火) 02:37:18ID:???tr使ってもダメだと書いてあるページを見つけました・・・
もともとのスクリプトではフォームデコードに
&jcode'h2z(\$value);
があって、投稿した半角カタカナは全て全角に変換されるんですが
これだと「・・・」まで変換されて(個人的に)変な感じがする。
しかもこれはカタカナではない記号ですしね。
で、他に方法はないかと思ったのですが。
半角→全角は諦めるしかないみたいですね。
レスありがとうございました。
0699nobodyさん
2007/01/09(火) 02:47:31ID:???どうしてもあわせたいならHTMLをunicodeにしちゃえよ
0700nobodyさん
2007/01/09(火) 03:06:27ID:???後は濁点付きを適当に置き換えれば。
0701nobodyさん
2007/01/09(火) 03:14:56ID:???SJISだから合わせるとかなんとかってのは無視してくださいな。
そんなことどうでもいい。
とにかく半角カタカナを使ってもらいたくないというのと
半角カタカナを2ちゃん以外の場所で見たくないってだけ。
半角カタカナがあればエラーってのもやってみたし
半角カタカナを全角変換もやってみたけど
カタカナじゃないやつまで処理してしまうというのが・・・ってだけの問題。
0702nobodyさん
2007/01/09(火) 04:25:59ID:???ナンテイウカ タンナル アレルギー ニ シカ ミエナイ カンシ ゙ダナ
0703nobodyさん
2007/01/09(火) 06:21:11ID:???何処か一文字間違ってるんだろうけど何処が間違ってるか分からない、といったユーザの不満を解消すべく
ショッピングカートの改良しようと思っています
パスワードのMD5ハッシュをDBに保存するロジックを平文での保存にすることは簡単にできたので、
あとは何処がが間違っているかをユーザに教えるロジックを作ればいいんですが、どうするのがユーザビリティ的に好ましいでしょうか?
正しいパスワードとユーザ入力のパスワードが同じ文字数の場合には、
正しいパスワード "hoge2CH" の時、ユーザが "hoge2ch" と入力したら、
「パスワードの6文字目・7文字目が間違っています。」 と返す、のように簡単にいくんですが、
正しいパスワードが "hoge2CH" の時、ユーザが "hoge2C" と入力した場合に、
貴方がユーザだとしたらどういうエラーが返って来て欲しいかを教えて下さい。
0707nobodyさん
2007/01/09(火) 11:49:21ID:???> 貴方がユーザだとしたらどういうエラーが返って来て欲しいか
正しいパスワードそのものを表示して欲しいな。
0708nobodyさん
2007/01/09(火) 12:40:14ID:???パスワード送信できるようにすれば
0709nobodyさん
2007/01/09(火) 13:09:11ID:???>>697
>・・・大体、半角カタカナを使って書く言葉って、あまりいい意味の言葉じゃないですよね。
はい、いい意味じゃない言葉。
m9(^Д^)プギャー ( ´_ゝ`)フーン ( ゚д゚)、ペッ( ゚Д゚)ヴォケ!!
('A`)マンドクセ ( ´,_ゝ`)プッ
顔文字だけでこれだけありますね。
顔文字だけならДゝあたりをNGにすればいいですが、顔文字なしで
使う場合もある。
NGワードに半角カタカナを指定すると誤爆しまくるのでダメ。
#ギあたりでひっかかる
0710nobodyさん
2007/01/09(火) 13:12:47ID:???日本人だよね?作ったのって。
;#$jcode'h2zf{'xxx'}
;#These are pointer to the corresponding function just
;#as $jcode'convf.
これなんかどういう意味?どういう使い方するわけ?
訳はできても使い道がわからないんだが。
0711nobodyさん
2007/01/09(火) 13:20:54ID:???0713nobodyさん
2007/01/09(火) 16:27:08ID:???ここの内容をコマンドライン上ではなく、
perlスクリプト内でしたいのですが、
どうやってやればよいでしょうか?
ご教授お願いします。
PHPは結構かじりましたが、perlは全く0です。
正規表現もそれほど自信がないです・・・・ orz
0715nobodyさん
2007/01/09(火) 17:01:19ID:???単に「perlスクリプト内でしたいの」であれば1行毎に
$var =~ s/¥r¥n/¥n/;
をすれば良いのだが、>>714が読み取ったように、
「ファイルの読み書きやらデータのIOをどう処理したら良いか」
ということを聞きたいのか?
0716nobodyさん
2007/01/09(火) 17:07:56ID:???要はWindowsの改行コードをUNIXのものに変えたいということじゃないの?
$textに問題の文字列が入っているとしよう。
$text =~ s/\r\n/\n/g; # Perl
これで$text内の全ての\r\nが\nに変換される。
これはPHPでいう以下のいずれかの構文と同じ処理になる。
$text = preg_replace("/\r\n/", "\n", $text); // PHP: 意味合いとしてはこっちがより正確だが
$text = str_replace("\r\n", "\n", $text); // PHP: PHPではこっちがより推奨される
問題がWindowsとUNIXだけなのであれば、単純に\rを排除するだけでも良い。
$text =~ s/\r//g; # Perl
これはPHPでいう以下のいずれかと同じ処理。
$text = preg_replace("/\r/", "", $text); // PHP: 意味合いとしてはこっちがより正確だが
$text = str_replace("\r", "", $text); // PHP: PHPではこっちがより推奨される
が、これにMacが絡むと改行コードは\rだけだったりすることもありうるわけで、
単純に\rを排除していてはMacでは改行が全て消えて無くなってしまう。
より汎用性を求めるなら以下のようにすべきだろうね。
$text =~ s/\r\n/\n/g; # Perl1: Win -> UNIX
$text =~ s/\r/\n/g; # Perl2: Mac -> UNIX
これはPHPでいう(以下略
$text = preg_replace(array("/\r\n/", "/\r/"), "\n", $text); // PHP: 意味合いとしてはこっちがより正確だが
$text = str_replace(array("\r\n", "\r"), "\n", $text); // PHP: PHPではこっちがより推奨される
もしくは
$text =~ s/\r\n|\r/\n/g; # Perl: 上の1と2をまとめたもの
これはP(ry
$text = preg_replace("/\r\n|\r/", "\n", $text); // PHP: 配列を使わない場合
0717nobodyさん
2007/01/09(火) 17:12:28ID:???以下を hoge.pl で保存
=======
#!/usr/bin/env perl -i.old -p
s/\r\n/\n/ ;
=======
$ perl hoge.pl hoge
じゃダメか?w
しかしソース元の -npe ってなんだかなあ
=====
#!/usr/bin/env perl
for my $name ( @ARGV ){
open IN, $name or die ;
my $data = do { local $/ ; <IN> } ;
close IN ;
rename $name , $name . '.old' ;
$data =〜 s/\r\n/\n/g ;
open OUT, '>' . $name ;
print OUT $data ;
close OUT ;
}
=====
0718nobodyさん
2007/01/09(火) 17:13:48ID:???単なるバックスラッシュに脳内置換よろ
0719nobodyさん
2007/01/09(火) 17:21:51ID:???レスありがとうございます。
perlのスクリプトをちょっと改造したい
(ある変数内のデータから^Mを削除したい)のですが、
systemとかを使うと、ほかの部分も弄る必要性が出てきそうで、
現時点の自分のperl能力からはできれば避けたいと考えてます。
PHPなら下みたいな感じでよい気がするのですが、
同じことをperlではどうすればいいでしょうか。
perlは変数宣言とかが厳しいと聞いたことがありますが、
ほかはphpと似たようなものでしょうか?
$file_array = file( $file_path );
for($i=0; $i<count($file_array); $i++){
$file_array[$i] =~ s/\r\n/\n/;
}
$file_data = implode("\n", $file_array);
0720nobodyさん
2007/01/09(火) 17:31:31ID:???$file_pathに格納されたパスにあるファイルを開いて読み出し、
各行の\rを削り、さらに各行をさらにもうひとつの\nをはさんで
つなげているような。
そもそもPHPとかperl以前に、自分が何をやりたいのか、何をやろうと
しているのかを的確に理解して説明する能力を身につけるべきな気が
するぞ。
0722nobodyさん
2007/01/09(火) 17:38:59ID:???rep2マジお勧め。
>>719
その構文だと各行の間が"2つの"\nで連結されてしまうけどそれでいいのかな?
open(FILE, $file_path);
@file_array = <FILE>;
close(FILE);
for (my $i = 0; $i < @file_array; $i ++) {
$file_array[$i] =~ s/\r\n/\n/;
}
$file_data = join("\n", @file_array);
>>721
おまいも>>719見てからレスれw
0723nobodyさん
2007/01/09(火) 17:49:05ID:???ネスレじゃありませんよレスれ
0724nobodyさん
2007/01/09(火) 17:51:22ID:???スルーで。
0725nobodyさん
2007/01/09(火) 18:12:19ID:???0726nobodyさん
2007/01/09(火) 18:27:32ID:???軽く確認してみただけけれども、ファイルコピーだけで5.005でもJcode動いてるような。
5.005よりも古い鯖って見たこと無いのだけれどそんなにあるんですか?
0727nobodyさん
2007/01/09(火) 18:51:04ID:???http://fh.aaacafe.ne.jp/cgiperl.html
iswebは5.6
http://help.www.infoseek.co.jp/isweb/?id=20601
Jcode.pmは度忘れしたけど、CGI.pmも入ってないとこがあったはず。
上の2つは古きよきなんとやら。
すでに引越ししてるだろうけど。
0728nobodyさん
2007/01/09(火) 18:51:43ID:???0729650
2007/01/09(火) 20:30:53ID:???アドバイスありがとうございます。
>>660
やはりそれが原因でしたエスケープで解消しました。
>>664
CGIでCGIファイルを書き出す必要性が頭悪すぎてよくわかりませんorz...
ですがいずれそういう必要性が無いとも限らないので作ってみようと・・・
たとえばホームページを春には桜吹雪の演出、夏は魚が泳ぎ、秋には紅葉が降り、
冬には雪が降るような演出をするとします。
このページそのものがHTMLでは作れそうに無いのでHTMLではなくCGIの
ファイルだとします。
そのページを季節に合わせるためFTPを使わずに更新するには更新用のCGIの
ページからCGIのファイルを更新すれば出来るみたいなー感じでいいのかなと。
でも、もっと簡単な方法がありそうですね。
0731nobodyさん
2007/01/09(火) 22:47:00ID:???処理速度あっぷのためにif分などの分岐をなくそうとcgiからcgiを書き出してたなぁ・・・。
今ならテンプレートを読み替えるだけで済むなぁ。
0732nobodyさん
2007/01/09(火) 23:05:36ID:???当然、各季節用の js なり背景なりを用意しておいて、CGIの中に書かれた
CSS部分を書き換えて背景変えたり、script type="text/javascript" src="ここ" を書き換えて
呼び出す js を変えたり…という動作をするCGIは作れる。
CGIからHTMLを書き換えたり、別のCGIを書き換えたり、いろいろできることはできる。
やることは「テキストファイルを読んで内容を変更して書き出す」だけですから。
適当に「設定ファイル」を作ってそれを差し替えるだけで済むようにすればCGIを組むより楽ですよ。
「季節が変わる毎」程度だったら、もっとも簡単かもしれないのがローカルで書き換えてFTP(ry
でも、勉強のためにローカル環境でこういうのを作って遊んでみたくなったんだったら、
是非遊んでみるべきだと思う。
0733nobodyさん
2007/01/09(火) 23:13:11ID:???0734nobodyさん
2007/01/09(火) 23:32:53ID:???>CGIでCGIファイルを書き出す必要性が頭悪すぎてよくわかりません
それはこちらのセリフなのだがw
第三者にやれと言われてやってるなら仕方ないが、自分で思い付いてやってるとしたら、
他にもっと勉強した方が良いと思うぞ。
リファレンスとかオブジェクト指向とかな。
0737nobodyさん
2007/01/10(水) 02:08:30ID:???物理的にファイルを生成するという意味ではそのとおり。
論理的なプログラグを生成する難易度はまた別だけどな。
0738nobodyさん
2007/01/10(水) 10:52:10ID:???あるいは設定ファイルのようなものを外部で持っておいて
その設定ファイルを書き換えるとか。
0740nobodyさん
2007/01/10(水) 16:08:45ID:???仕組みを学び知ることは大事だよね
0742nobodyさん
2007/01/11(木) 05:11:48ID:???ifを使って、特定の条件を満たさないと隠しページへ行けない様にしたい
のですが、どういう関数を使えば良いかさっぱりわかりません。例えば、
あるページ上でテキストボックスに1と入力したら隠しページへ移動する
といった感じにしたいのですが、Basic認証のプログラムなどを参考にし
てみましたが、意味がわからず挫折しました。
隠しページはcgiファイルにして、直接URLを打ち込んでも閲覧できないよ
うにし、特定の条件をクリアした場合のみ閲覧できるようにしたいのです。
もちろんパーミッションは644にします。url_jump_toで最初試したのです
が、案の定駄目でした。
どなたか、条件をクリアしたらcgiファイル(パーミッション644)を閲覧
できる方法をよろしければ教えてください。房ですみません。
0743nobodyさん
2007/01/11(木) 07:13:27ID:???ActivePerlをインストールしたのですが、そこからどすればいいのか分かりません・・
.plファイルをダブルクリックしてもコマンドラインが一瞬でて消えるだけです・・
どなたか教えてください!!!
0744nobodyさん
2007/01/11(木) 07:52:48ID:???DOS窓を開いて
> perl /path/to/hoge.pl
みたいに実行させたり hoge.pl が終了する部分に `pause` を書くとか。。
0745nobodyさん
2007/01/11(木) 07:57:07ID:???0746nobodyさん
2007/01/11(木) 10:36:19ID:???644は実行権限が無いから、プログラムとしては動かない
とはいえ拡張子がcgiだとhttp経由ではプログラムとしてしか見れないようになってるはず
つまり644で閲覧は現実的じゃない(できないことは無いだろうけど)
それよりもif文で分岐して2つのファイルのどちらかを読み込んで表示すればいいんじゃね?
0747nobodyさん
2007/01/11(木) 12:13:26ID:???以前は PPM 経由でインストールできてたのにこんなことってあるんですね・・・
0748nobodyさん
2007/01/11(木) 13:04:09ID:???0750nobodyさん
2007/01/11(木) 13:13:49ID:???http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
0752nobodyさん
2007/01/11(木) 13:20:57ID:???ppm3はモジュール名じゃなくてディストリ名で検索しないといけなかったような
つまりTime-HiResで
0753nobodyさん
2007/01/11(木) 13:28:22ID:???配布されてるので、いちいち別にとってきてインスコする必要はなくなった。
0754nobodyさん
2007/01/11(木) 13:29:22ID:???ありあと・・・でも >751 さんの方法で見つかった m(_ _)m
0757nobodyさん
2007/01/11(木) 14:56:34ID:???0758nobodyさん
2007/01/11(木) 15:08:39ID:???0760nobodyさん
2007/01/11(木) 15:27:03ID:???少し疑問があるのですが、これってURLを直接打ち込まれたら
第三者に覗かれる恐れがありますよね?
0761nobodyさん
2007/01/11(木) 15:28:49ID:???0762nobodyさん
2007/01/11(木) 15:30:33ID:???データファイルは HTTP で見れる範囲より外に置くか、ランダムな文字列で生成された16文字ほどのディレクトリに置けばいい
でなきゃ DB にぶち込むとか・・・
0763nobodyさん
2007/01/11(木) 15:32:42ID:???0764nobodyさん
2007/01/11(木) 15:36:39ID:???説明不足でした。条件を満たしたら隠しページのファイルを読み取るよう
にしたかったのですが、隠したいページのURLを直接入力されたら終わり
だなあと思いまして。
>>762
HTTPで見れる範囲外ですか...なるほど。ちょっと調べてみます。
ランダムなディレクトリはrand関数でなんとかなりそうですが、
僕の知識ではまだまだできそうにありませんorz
>>763
cgiを644にするとファイルが読み取れなくなってしまうので
どうしたもんかと途方にくれています。
みなさんありがとうございます。
0767nobodyさん
2007/01/11(木) 15:57:25ID:???ここでちょこちょこやりとりするだけじゃ面倒みきれない
ような気がする
0768nobodyさん
2007/01/11(木) 16:03:19ID:???openで読み込みましたが、やはりうまくいきませんでした。
急遽、CGIとPerlでシステムを作るよう頼まれたのですが
おっしゃる通り、まだまだ無知なことも多いので1週間くらい
死ぬ気で勉強してみます。
色々聞けてよかったです。ありがとうございました。
0769nobodyさん
2007/01/11(木) 16:03:57ID:???0770nobodyさん
2007/01/11(木) 19:01:52ID:???はぁ・・・
0771nobodyさん
2007/01/11(木) 19:48:29ID:???まあ初心者はPerl/CGIをよくわかってないからな,
偉そうに言ってる俺もいまいちよくわかってないけど.
ここは初心者スレだけど,やっぱりできる人間が多いの?
0772nobodyさん
2007/01/11(木) 20:31:25ID:apL14Vu+742がふぁびょりすぎて噛みあってないんだと思うぞw
Basic認証は、利用できるように設定がなっているなら
.htaccess
.passwd
の2ファイル作って
.htaccessを認証させたいディレクトリに置き、.passwdのある場所を指定する。
.passwdを適切な場所におく。レンサバだと.passwdを置く領域確保されてないっしょ?
/home/[account]/ とか用意してくれている鯖ならいいんだけどね
0773nobodyさん
2007/01/11(木) 20:40:24ID:???たいてい.ht*のファイルすべてがアクセスを拒否されるから、.passwdも
.htpasswdにしておいた方が安心だな。
0774nobodyさん
2007/01/11(木) 23:45:41ID:???770は何がおかしいのかわからんのだが.
CGIとPerlって部分か?
0775nobodyさん
2007/01/11(木) 23:51:59ID:???0776nobodyさん
2007/01/11(木) 23:56:09ID:???770は言葉の意味と用途が違うと言いたいんだろうけど、
ここは初心者質問スレだからな。
「断熱とベニヤ板で家を作る」と言ってる感じか?
そんなの、「ベニヤ板で断熱しつつ家を作る」と
置換・理解できない770がDQNなだけ。ほっとけ。
0777nobodyさん
2007/01/12(金) 01:19:27ID:???CGIの中身をPerlで書きますよって意味なら問題ない。
>CGIとPerlでシステムを作る
って書き方だと
CGIからシステムコールでplなファイルを叩くイメージっぽい気もするかも
でも770の突っ込み自体おかしい。そこは素通りしとけw
0778nobodyさん
2007/01/12(金) 04:21:38ID:???まず始めに。
当方、Perlは殆どいじった事がなく、
HSPやCを少々組んだ事がある程度の知識で質問しているため、
常識的な事や的外れな事を質問していたら申し訳ありません。
google等で調べても何やっても上手くいかなかったので、
どうか皆様の力をお貸し下さい。orz
CGIで生成したページから別サイトへのリンクをクリックした時に、
「このURLへアクセスします。よろしいですか?」
と言ったような確認ページを挟んでアクセスするようにしようとしています。
具体的書くと、元ページの別サイトへのリンクは、
xxx.cgi?url=http://www.xxx.com/index.php?%A5%AC%A5
と言うように、リンク先のURLを<a>タグに埋め込んで自身のCGIに返すようになっています。
URL=の部分を取得し、そのまま確認ページの<a>タグに埋め込みたいのですが、
実際にやってみると?以降のURLエンコードされた部分が漢字や化けた文字として表示されてしまい、
綺麗なURLになってくれません。
渡されてきたURLを「http://www.xxx.com/index.php?%A5%AC%A5」のように、
そのまま表示するにはどうしたらいいでしょうか?
一応書いておくと、スクリプトはUTF-8Nで書いています。
0779nobodyさん
2007/01/12(金) 10:37:26ID:???0780nobodyさん
2007/01/12(金) 11:03:38ID:???とリンクに書いたのなら%A5などのURIエンコードされた部分が
デコードされてくるのは当たり前だろう。
http://www.xxx.com/index.php?%A5%AC%A5
というURIをuriという名前のパラメタで渡したいのなら本来は、
xxx.cgi?url=http://www.xxx.com/index.php?%25A5%25AC%25A5
とすべきなのでは?
0781nobodyさん
2007/01/12(金) 11:13:04ID:???0782nobodyさん
2007/01/12(金) 11:20:56ID:???http://www.example.com/hoge.cgi?a=xxx&b=yyy
みたいなものもありうるとするならば、渡す前の方で
適切にエンコードしておかないとだめですな。
0783nobodyさん
2007/01/12(金) 13:48:13ID:???なるほど…最初のリンクを生成する時点で%を%25にエンコードしておく必要があるんですね。
>じゃなきゃ表示時にもう一回urlエンコードすりゃいいだけの話
>http://www.example.com/hoge.cgi?a=xxx&b=yyy
>みたいなものもありうるとするならば、渡す前の方で適切にエンコードしておかないとだめですな。
urlパラメータに入るURLは、一般的なURLか前述したような文字コードを含んだURLが大半を占めるのですが、
ユーザー投稿式なので、何が来るかわからないという点を考えると、
最初のリンク生成の時点で適切なURLエンコードをしておいた方がいいようですね。
教えていただいた事を踏まえて、最初のリンク生成時に%を%25にエンコードする様スクリプトを組んだ所上手く動きました。
皆さんありがとうございます。
しかし、この方法だとhoge.cgi?a=xxx&b=yyyのようなものが来た時にダメとの事なので、
もう少し適切に処理させたいと思うのですが、またまた上手くいきません。
というか、どういう風に処理したらいいか分からないという感じです。
$elem =~ s/(https?:\/\/[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\$]*)/<a href=\"$script?url=$1\">LINKはこちら<\/a>/go;
$elem =~ s/\%/\%25/go;
1行目は日本語混じりの文章($elem)の中にURLが張られた場合、それを「LINKはこちら」というリンクに置換させています。
そして、2行目で%→%25にしているわけですが、これだと当然問題が。
・本文中の文章の中にURL以外の%があっても置換してしまう。
・&などが来るとダメ?
「%だけじゃなくてちゃんと全部エンコードすればいいじゃないか」 とは思うのですが、
本文中から(https?:\/\/[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\$]*)にマッチする文字列だけをエンコードさせる方法がわかりません。
どのようにしたらいいでしょうか?
本文中にはURLが複数箇所張られる可能性も考慮したいです。
度々の質問失礼しますが、ご教授の程よろしくお願いします。
0784nobodyさん
2007/01/12(金) 13:56:34ID:aFkw6ayOヒアドキュメントを使わない時に以下のように書けるコードは
どのように書けばいいでしょうか。
print NEW "mydoc = \"@document\";\n";
これでは出力されるファイルの方には@documentという文字が出る。"をエスケープでも同様
print <<"EOM";
mydoc = "@document";
EOM
これではmydoc = "@documentの中身";という形にならない。
print <<"EOM";
mydoc = @document;
EOM
0785nobodyさん
2007/01/12(金) 13:58:42ID:???use URI::Escape;
$本文 =~ s/(その正規表現)/uri_escape($1)/ge;
てな感じでいいはず
0786nobodyさん
2007/01/12(金) 14:06:42ID:???前者の書き方でいいはずだが。試すときになんか勘違いしてない?
% cat a.pl
@document = qw(unko chinko);
print "mydoc = \"@document\";\n";
print <<"EOM";
mydoc = "@document";
EOM
% perl a.pl
mydoc = "unko chinko";
mydoc = "unko chinko";
0787nobodyさん
2007/01/12(金) 14:13:10ID:???'mydoc = "' .@document. '";' ."\n";
0788784
2007/01/12(金) 14:26:05ID:???まさに勘違いしていたようです(滝汗)
前者であってました。すみません。ありがとうございます。
>>787
さんくすです。
0789nobodyさん
2007/01/12(金) 15:27:30ID:???おぉおおお! できました!
ありがとうございます!
こんな一行で出来る事だったんですね。
これで目的のスクリプトが組みあがりそうです。
2度の長文質問に答えてくださった方々、本当にありがとうございました。
0790nobodyさん
2007/01/13(土) 00:05:27ID:???拡張子が.plのスプリクトの動かし方を教えてください!!!
ActivePerlをインストールしたのですが、そこからどすればいいのか分かりません・・
.plファイルをダブルクリックしてもコマンドラインが一瞬でて消えるだけです・・
通常のアプリのように直感的に扱いたいです。コマンドライン?から起動とかじゃなくて
あと一つ質問です。
拡張子が.plのファイルの拡張子を無理やり.cgiに変更した場合、cgiとして正しく動作しますか? サーバーレンタルしたらそこで使えますか?
perlに詳しい方、厨房にも分かるように教えてください!!!
どうかお願いいたします。
0791790
2007/01/13(土) 00:13:42ID:???ActivePerl-5.8.8.819をインストールしてから.plをクリックしたら、
D:Perl\bin\perl.exeとなってコマンドラインがでてきました。
コマンドラインは消えませんが、ここからどうすればいいのか・・・・
助けてください
0792nobodyさん
2007/01/13(土) 00:17:33ID:???ここは「プログラムを作る人」の為の板でありスレッドです。使う側の質問は板違いです。
0793nobodyさん
2007/01/13(土) 00:20:49ID:???UNIX鯖レンタルしてそこで動かそうと思うですが、何をインストールすればよいのでしょうか?
0795nobodyさん
2007/01/13(土) 21:51:44ID:wEKIwJY9C言語でいうところの、getch() に相当する関数はないでしょうか?
WebProg板って事なので、CGI経由になるのかしら?
それならJavaScriptを使った方がよさげの悪寒♪
0798795
2007/01/13(土) 22:08:17ID:???そっちへ移動します。
0799nobodyさん
2007/01/14(日) 22:03:27ID:7dLarnkvforeach my $key (keys %target){
my $value= $target{$key};
if($key == 1){ next OUTER }
else{ next OUTER; }
}
}
上記と下記は同じ流れ方をすると思っていたのですが、下記のwhileの場合、
どうも%targetを最上層のforeachから再度読み出すとハッシュのはじめから
よんでいないような挙動を見せます。
こちら何かアドバイス等ございます際にはいただけますと幸いです。
OUTER: foreach my $tmp (@tmp_data){
# my %target = %common::target; を入れて初期化すると上記同様の流れになる
while(my ($key, $value) = each(%target)){
if($key == 1){ next OUTER }
else{ next OUTER; }
}
}
0800nobodyさん
2007/01/14(日) 22:11:17ID:???0801nobodyさん
2007/01/14(日) 22:17:51ID:???早速のご返答有難うございます。
そうだとは思うのですが、これに関する説明がググってもどうも
出てこなかったため、質問させていただきました。
ちなみに、PHPの場合では以下がございました。
おそらくこういうことかとは思いますが。。
ttp://asakura.g.hatena.ne.jp/asakura-t/20051116/1132113906
0802nobodyさん
2007/01/14(日) 22:27:08ID:???したら書いてあったけど。ググるだけじゃなくて、マニュアルも読もう
There is a single iterator
for each hash, shared by all "each", "keys", and "values" func tion calls
in the program; it can be reset by reading all the
elements from the hash, or by evaluating "keys HASH" or "values HASH".
0803nobodyさん
2007/01/15(月) 05:27:53ID:???$::FLAG{'cache'}
というのがあったんですけど、
この時の「$」はいったいなんでしょうか?
0804nobodyさん
2007/01/15(月) 08:15:52ID:???0805nobodyさん
2007/01/15(月) 13:31:24ID:???俺的には高度な話題が多くなったなぁ、みんな凄いわ
0806nobodyさん
2007/01/15(月) 20:35:55ID:???:: はパッケージを指定する為の演算子です。
$Pkg::var のように書くと Pkg パッケージのパッケージ変数 $var を参照できるのですが
パッケージ名を省略すると、デフォルトのパッケージである「main」を指定した事になります。
our $hoge = "In main"; # ← main パッケージの $hoge
package Sandbox;
our $hoge = "In sandbox"; # ← Sandbox パッケージの $hoge
print $hoge, "\n";
print $::hoge, "\n";
print $Sandbox::hoge, "\n";
print $main::hoge, "\n";
0807nobodyさん
2007/01/16(火) 10:45:24ID:Vliwd/jI秒数を日付にするのはありますが、
秒数が何時間とか、何日分に当たるのかとかいった変換を行うものはありますか?
3600S→1Hのようなかんじで。
0808nobodyさん
2007/01/16(火) 10:47:49ID:???0809nobodyさん
2007/01/16(火) 10:58:59ID:Vliwd/jIそういうことでなく。
あと、時間や分、秒ごちゃ混ぜで計算できるものあれば。
77H - 4M = 76H56M みたいなの。
秒に戻さず、直感的に計算できればいいです。日付の計算はDate:Simpleにあるんですよね・・・。
0810nobodyさん
2007/01/16(火) 11:19:26ID:???$t1 = DateTime::Duration->new(hours=>77);
$t2 = DateTime::Duration->new(minutes=>4);
$t3 = $t1 - $t2;
printf "%dH%dM\n", $t3->in_units(qw(hours minutes));
0811nobodyさん
2007/01/16(火) 11:25:29ID:???0812nobodyさん
2007/01/16(火) 11:38:08ID:???なるほど。
でも、あらかじめ分解しておかないとダメなんですね。
モジュール探すときって、英語が出来ない自分が恨めしい・・・orz
0813nobodyさん
2007/01/16(火) 11:44:11ID:???0814nobodyさん
2007/01/16(火) 11:51:34ID:???0815nobodyさん
2007/01/16(火) 14:34:37ID:???全体で一意な文字列になるの?
0816nobodyさん
2007/01/16(火) 14:51:23ID:???a) 無名ファイルハンドルを使う
a-1) IO::Handle->newで作る
a-2) my $fh; open $fh, 〜 で作る
b) 型グロブをlocalで局所化する local *FH; open FH, 〜
0817nobodyさん
2007/01/16(火) 15:05:14ID:???楽でいい。
0818nobodyさん
2007/01/16(火) 15:23:34ID:???open my $fh, ">", $file or die $!で済ませられる程度の簡単なプログラムなら
いいんだけど、
unless (open my $fh, ">", $file) {
エラー処理
}
通常の処理
みたいに書こうとすると$fhのスコープがif文の中だけなのでだめなんだよな。
0819nobodyさん
2007/01/16(火) 15:50:18ID:???エラー処理がそんなに長くなければだが、こんなんでどうよ。
ただしインデントには気をつけないと読みづらくなること請け合い。
open my $fh, ">", $file
or do {
エラー処理
};
通常の処理
0820nobodyさん
2007/01/16(火) 16:06:17ID:???�dクス。
ラクダ本見たらこんな感じの記述があったから、
変数に何らかの文字列を設定しなきゃいけないのかと思ってた。
foreach $file (@ARGV){
process( $file, 'fh00' );
}
※process内
open( $input, $filename );
0821nobodyさん
2007/01/16(火) 16:48:11ID:???or do {
エラー処理
};
通常の処理
open my $fh, ">", $file
or do {
エラー処理
};
通常の処理
連続で使うと二重宣言の警告出るがな
0822nobodyさん
2007/01/16(火) 17:17:37ID:???そもそもそれは役目が終わったはずの$fhのスコープを閉じてないところに問題があると思う。
(ただの変数ならともかく、中身がファイルポインタと言う最初と最後がはっきりしているものだから。)
状況にもよるが俺は、ファイルの処理部分をラベル付きブロックに押し込むと
ファイルへのアクセスのスコープが一目で明白になるからしばしばこうやってる。
WRITE_HOGE: {
open my $fh, ">", $file;
通常の処理
}
WRITE_FUGA: {
open my $fh, ">", $file;
通常の処理
}
0823nobodyさん
2007/01/16(火) 18:05:33ID:???WRITE_HOGE:
0824nobodyさん
2007/01/16(火) 18:11:29ID:???0825nobodyさん
2007/01/16(火) 18:11:50ID:???>>822のコードでは何もして無い。こんな効果が
WRITE_HOGE: {
open my $fh, ">", $file
or do {
last WRITE_HOGE; # とかやると
};
通常の処理
} # エラー時にここまでジャンプする
あるけれど、822ではブロック自体に名前をつけて解りやすくするという意味でつけた。
0826nobodyさん
2007/01/16(火) 18:21:52ID:???> ファイルの処理部分をラベル付きブロックに押し込むと
と書いてあるのに何故ググりもせずに聞くのだ?
0827nobodyさん
2007/01/16(火) 18:34:16ID:???0828nobodyさん
2007/01/16(火) 18:37:29ID:???perl ラベル でググるといい
0829nobodyさん
2007/01/16(火) 19:50:01ID:???s#do#doとかラベル#
0833nobodyさん
2007/01/17(水) 01:42:58ID:???より自然な気がすっけどね。
my $code = sub { die : } # エラーしょり
{ # 空ブロック宣言
open my $fh, "hoge" or $code->() ;
close $fh ;
}
0834nobodyさん
2007/01/17(水) 03:08:12ID:???たとえば、aiueoとkaiukekoならaiの部分、abcdeとadeabなら「de」と「ab」です。
でも、連続した文字でない場合は抜き出さなくていいです。二文字以上。
上の例だとa,i,u,e,oの文字、a,b,c,d,eの文字が使われているからといって抜き出さない、といった感じです。
0835834
2007/01/17(水) 03:09:07ID:???>たとえば、aiueoとkaiukekoならaiの部分、
重なってる部分は「aiu」です。
0836nobodyさん
2007/01/17(水) 07:17:18ID:???一箇所しか重ならないの?
たとえば hogefugahoge v.s. fugahogefuga みたく複数の場合とか考慮せんでえーの?
0837834
2007/01/17(水) 07:21:58ID:???hogeが二回とか同じものが複数は別扱いでいいです。
まとめたいときは配列にでもして重複削除処理を加えると思うので。
0838837
2007/01/17(水) 07:26:27ID:???hogefugahoge v.s. fugahogefugaなら
fugahogeというデータが抜き出せたらいいです。
fuge、hogeでもいいです。fugahoge,fuge,hogeでも。
そのあたりは作り手にお任せします。
一番理想的なのは、コノ例なら最初のfugahogeだけですね。後は同じことですから。
0839837
2007/01/17(水) 07:30:03ID:???[hogefuga]hoge v.s. fuga[hogefuga]なら
[]の部分が重なっているのでhogefugaです。
他、fugeと書いている部分はfugaです。
0840837
2007/01/17(水) 07:40:16ID:???hogefugahoge v.s. fugahogefugaの例の場合、
hoge[fugahoge] v.s. [fugahoge]fugaもあるんですね・・・。
重なってる箇所がある場合は長いほう優先にしてください。
同じ長さの場合はどちらか一方で構いません。
説明足りなかったですが、これらの条件と合わせて
二つの文字列で何文字共通箇所があるか?データも欲しいです。
0842nobodyさん
2007/01/17(水) 09:39:21ID:???最長だけでよければCPANに
String::LCSS - Find The Longest Common Substring of Two Strings.
というのがある。
0843nobodyさん
2007/01/17(水) 10:18:37ID:???2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
0844nobodyさん
2007/01/17(水) 10:53:47ID:???0845nobodyさん
2007/01/17(水) 10:59:11ID:???0846nobodyさん
2007/01/17(水) 12:13:51ID:???my $two = 'fugahogefuga' ;
my %ones
= map { $_, 1
} map {
unpack +( join '', map "\@${_}A*", 0.. ( length $_ ) - 1 ), $_ ;
} unpack +( join '', map "A${_}X${_}", 1.. length $one ), $one ;
これで全組合せが出るのであとはお好きなように。。。
例えば以下みたく。絞り込むのは自分でやっとくれ。
my @ans ;
for my $str ( sort { length $b <=> length $a } keys %ones ){
my @two_ind ;
my @one_ind ;
push @two_ind, pos $two while $two =~ /($str)/g ;
push @one_ind, pos $one while $one =~ /($str)/g ;
push @ans, { str => $str, one => \@one_ind, two =>\@two_ind } if @two_ind ;
}
0847nobodyさん
2007/01/17(水) 12:17:45ID:???0849nobodyさん
2007/01/17(水) 12:41:34ID:???0850836=846
2007/01/17(水) 12:49:39ID:???0851nobodyさん
2007/01/17(水) 12:52:13ID:???吊ってくるわ
0852nobodyさん
2007/01/18(木) 00:58:49ID:???0854nobodyさん
2007/01/18(木) 01:08:56ID:???どこにでもいるのでスルーするのがよろしい。ゴキブリホイホイより
0856nobodyさん
2007/01/18(木) 10:26:29ID:???でもテンプレすら読まないのは問題あるな
どっちにしてもスルーでおk
0857みろん
2007/01/18(木) 14:03:23ID:2GOHrU8+今、perlで掲示板を作っています。そこでリロードによる二重投稿を
防ぎたいのですが、私はlocationをつかってみようと思ってます。
しかし、うまくいきません。どこに記述すれば、送信後自分のページを
再読み込みしてくれるのでしょうか。
0858nobodyさん
2007/01/18(木) 14:27:04ID:???2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
0859nobodyさん
2007/01/18(木) 16:39:22ID:???ファイルをOpenし、ContentType等を設定して、
バイナリを出力させダウンロードさせる仕組みです。
しかし、ファイルが存在しなかったり、Openに失敗した場合の処理が、
ファイル名にエラー情報を書いてファイルサイズ0のものをダウンロード
させるくらいしか出来ていません。
ファイルのダウンロードに失敗しましたというダイアログを出すためには、
404 not foundを返せばいいのでしょうか?
0860nobodyさん
2007/01/18(木) 16:45:25ID:???0861nobodyさん
2007/01/18(木) 17:12:53ID:???0862nobodyさん
2007/01/18(木) 21:28:56ID:???location というのがヘッダーの Location フィールドのことなら、書き込んだ後に表示するページで
Location: ジャンプ先URL
をレスポンスヘッダーに追加して、適切なステータスコード(302、303など)を返します。
URLの最後に ? を付けると、ほとんどのブラウザで二重投稿を防止できるみたいです。
詳しいやり方は、使ってるライブラリによって異なるので、自分で調べてみてください。
location が JavaScript の window.location の事でも、基本的に同じですが、板違いです。
0863nobodyさん
2007/01/20(土) 14:34:54ID:67i3ErOc重複してしまいます。
@http_url = $text =~ /($set{'http_url_regex'})/g;
foreach my $url (@http_url) {
if (!grep(/^$url$/i, @link)) {
print "link : $url\n";
push(@link, $url);
}
}
なぜなのでしょうか?
0864nobodyさん
2007/01/20(土) 16:57:02ID:x00E/Fj7<input type="text" name="title" size="40"><br>
<input type="file" name="File" size="32"><br>
<input type="submit" name="send" value="送信"><br>
</form>
上のプログラムのように、テキストタイプのデータと画像などのデータを送信するプログラムを作りたいんですが
最初のフォームのテキストデータがちゃんと受け渡せません
multipart/form-dataで送信した際には、cgi側でどのような操作を行えばURLエンコードで送信した場合と同じようにテキストデータを扱えるんでしょうか?
0865nobodyさん
2007/01/20(土) 17:15:45ID:???何故っと云われてもわかんないけれどもおそらく恐ろしく効率が悪いみたいです♪
@http_url = $text =~ /($set{'http_url_regex'})/g; # $textからURIらしきものを取り出す。
# @link に追記。(ブロックにしておきますね)
{
my %link_hash = map +($_, 1), @link; # URIをキーにしたハシュを作る。
for my $collect_uri (@http_url){
defined $link_hash{$collect_uri} and next; # キーが存在すれば次。
push @link, $collect_uri; # キー(URI)が無かったので追記♪
}
}
これでどうかしら?
@linkにスタックされた順番を考えずに済むのなら他の方法もあるけれども♪
あと、@linkの要素総てに改行が含まれているなら刈り取っておかなきゃです。
0869nobodyさん
2007/01/21(日) 04:45:54ID:???Googleで"multipart/form-data perl"で検索してみるといいぞ。
検索結果をトップから10件分読めば大体分かる。
0870nobodyさん
2007/01/21(日) 09:24:25ID:prBhWU2Q検索して、何となくはわかったんですが、深く理解はできませんでした
けどstdio.plというライブラリを見つけました
stdio.plと一緒にダウンロードしたサンプルプログラムのgetMultipartFormDataを使えば何とかなりそうです
返信ありがとうございましたm(_ _)m
0872nobodyさん
2007/01/21(日) 12:54:47ID:???ID パス 入力で
個人ごとのデータを管理するオープンソースってありますか?
0873nobodyさん
2007/01/21(日) 14:19:50ID:???まあエスパーな俺が無理矢理読み取って答えると、いくらでもあるからよく探せ。
0874nobodyさん
2007/01/21(日) 14:21:10ID:???まあエスパーな俺が無理矢理読み取って答えると、いくらでもあるからよく探せ。
0875nobodyさん
2007/01/21(日) 14:29:45ID:???まあエスパーな俺が無理矢理読み取って答えると、いくらでもあるからよく探せ。
0876nobodyさん
2007/01/21(日) 14:35:48ID:???0877nobodyさん
2007/01/21(日) 16:27:20ID:???>874 魔美さんです。
>875 ユンゲラーです。
0878nobodyさん
2007/01/21(日) 17:55:44ID:???0879nobodyさん
2007/01/21(日) 18:22:18ID:???0880nobodyさん
2007/01/21(日) 19:41:27ID:???0881nobodyさん
2007/01/23(火) 10:33:18ID:gVOiAeShsub mail_okuru{
my($aitemail) = $_[0];
$_[2] = &adebo($_[2]);
$mail = "To: $aitemail\n";
$mail .="From: \日\本\語\名\前 <$mail_add>\n";
$mail .="Subject: $_[1]\n";
$mail .="Content-Transfer-Encoding: 7bit\n";
$mail .="Content-Type: text/plain\; charset=\"ISO-2022-JP\"\n\n";
$mail .=$_[2];
&jcode::convert(*mail,'jis');
open(MAIL,"|$sendmail -i -t -f $aitemail");
print MAIL $mail;
close(MAIL);
}
------------------------------------------------------------
自動返信メールのアドレスの【日本語名前】のところがどうして文字化けしてしまいます
文字化けしないようにしたのですがどうすればよろしいでしょうか?
お願いします
0882nobodyさん
2007/01/23(火) 10:40:39ID:???0883nobodyさん
2007/01/23(火) 10:52:08ID:???base64でぐぐれよ
0884nobodyさん
2007/01/23(火) 12:00:56ID:???0885nobodyさん
2007/01/23(火) 17:43:26ID:???これは気づくまで放置か?
0886nobodyさん
2007/01/23(火) 20:24:43ID:???0887nobodyさん
2007/01/23(火) 22:16:41ID:???0888nobodyさん
2007/01/23(火) 22:57:35ID:???0889nobodyさん
2007/01/24(水) 01:37:38ID:???flockをローカルテスト鯖で使いたいのですが
Windowsで対応しているのはどのバージョンからでしょうか。
0890nobodyさん
2007/01/24(水) 02:39:08ID:???0891nobodyさん
2007/01/24(水) 04:30:09ID:???0893nobodyさん
2007/01/24(水) 06:44:06ID:???NT系で使えるってのは初耳だ
0894nobodyさん
2007/01/24(水) 07:03:26ID:???それ以外ならモードにあわせてLockFileEx/UnlockFileExを呼んでるな
0895nobodyさん
2007/01/24(水) 10:50:28ID:???print "Set-Cookie: test=test; domain=test.co.jp; expires=$expiredate;\n";
print "\n";
Set-Cookieでdomainを他のサーバーで指定するとcookieが発行されないのですが、
これは何が原因か教えて頂けますか。
domainの値を自サーバーもしくは、domain自体を記述しなければちゃんと発行されます。
0896nobodyさん
2007/01/24(水) 11:09:52ID:???クライアントはそういうのは拒否することになっている。詳しくは
RFC2965(HTTP State Management Mechanism)の3.3.2(Rejecting Cookies)参照
たぶんこれにひっかかったんじゃないか。
0897nobodyさん
2007/01/24(水) 12:18:29ID:???0898895
2007/01/24(水) 13:08:20ID:???そうしたらdomainを入力する項目ってほとんど必要性がないような…(´・ω・)
0899nobodyさん
2007/01/24(水) 13:16:44ID:???そこで有効範囲を指定してhoge.example.comのみに発行させることができる
0900nobodyさん
2007/01/24(水) 13:19:21ID:???example.comでクッキー発行すればauction.example.comでもshopping.example.comでも同じクッキーが使える
auction.example.com(ドメイン省略時の例として)で発行すればそこでしか使えない
0901nobodyさん
2007/01/24(水) 14:33:19ID:???http://〜/***.cgi?no=***
というようなページ(のソース)を読み込むことって出来ますか?
0902895
2007/01/24(水) 14:35:35ID:???0903895
2007/01/24(水) 14:39:06ID:???use LWP::UserAgent;
use HTTP::Request::Common qw(GET);
my $ua = LWP::UserAgent->new;
my $url = "http://〜/***.cgi?no=***";
my $request = GET($url);
my $res = $ua->request($request);
if ($res->is_success){
$content = $res->content;
}
といったような形で読めますよ(´・ω・)
0905nobodyさん
2007/01/24(水) 15:53:30ID:???data1.txtとして別名で保存したいのですが
どのようにすればいいでしょうか?
ちなみにperlは設置ができる程度です。
親切な方よろしくご指導ください。
Perl バージョン 5.008004 です。
0906nobodyさん
2007/01/24(水) 16:03:41ID:???0907nobodyさん
2007/01/24(水) 16:25:47ID:2EUwcZjVできるだけ短くてユニークなものが理想的だと思いますが
「普通はこれ使うだろ」といったような暗黙の標準区切り文字みたいなものはありますか?
それとも、コードの中で一時的にユニークな区切り文字に置き換えて処理し、
データに書き込むときは汎用性の高い区切り文字(カンマ等)で統一する、
といった方法の方が一般的なんでしょうか?
「自分はこうしている」という意見でも良いのでよろしくお願いします。
0908nobodyさん
2007/01/24(水) 16:28:30ID:???読み込みと保存はなんとなくこんな感じでしょうか。
変換がよくわかりません
open IN, "data.txt";
$data = <IN>;
close IN;
open OUT, ">data1.txt";
print OUT $data;
close OUT;
0909nobodyさん
2007/01/24(水) 16:32:21ID:???指定したURLが転送される場合303 See Otherが出て取得できない。
どうすれば転送後のサイトを取得できますか?
0910nobodyさん
2007/01/24(水) 16:50:31ID:???データの中に区切り文字を含まないように工夫すればなんでもいいんじゃね?
>>908
本を一冊読むことをおすすめする。
ここで全部を教えるのは難しい
>>909
"LWP リダイレクト"でぐぐった?
0913nobodyさん
2007/01/24(水) 20:41:48ID:???そこで半角のみの投稿は不可にしようと思ったのですが
正規表現だと
$char_check = $form{"message"};
if($char_check =~ /^[^0-9a-zA-Z]$/ ){
送信
} else {
エラー処理
}
こんな感じでやってみたのですがうまく動きません。
正しい動作をさせるにはどのように書き直せばいいでしょうか?
0914nobodyさん
2007/01/24(水) 21:25:03ID:???送信
}
0915nobodyさん
2007/01/25(木) 05:34:19ID:???あとURLに使われる文字とか。
0916nobodyさん
2007/01/25(木) 16:38:50ID:???UserAgentは簡単に偽装できるので、IPアドレスベースの識別をしたいのですが、
アクセス者のIPアドレスがサブネットマスク形式のアドレスで指定した条件に一致しているかどうかを
確認するモジュールはないでしょうか?
つまり、
my $ipType = &IP_Check('127.0.0.1', '127.0.0.0/24');
if ($ipType) {
print 'ループバックアドレスです。' . "\n";
}
みたいなことができる関数が欲しいです。
よろしくお願いします。
0918nobodyさん
2007/01/25(木) 18:26:22ID:???とりあえずCPANでsubnetで検索してみた?
その目的からするとTie::NetAddr::IPがこんな感じで使えてよさそうに見える。試してないが。
tie my $carriersSubnet, 'Tie::NetAddr::IP';
$carriersSubnet{"10.0.10.0/24"} = "CarrierA";
$carriersSubnet{"10.3.20.0/24"} = "CarrierA";
$carriersSubnet{"10.10.2.0/24"} = "CarrierB";
my $carrier = $carriersSubnet{$ipaddr};
0922nobodyさん
2007/01/26(金) 10:57:39ID:???質問させていただきます。
質問を提示してその下にラジオボタンで選択肢を作ります。
で、質問に答えたら次の質問と続いていくわけなんですが。
その選んだ答えを1.と答えたのがが3個 2.と答えたのが4個と最後に合計を出したいの
ですが、合計を出そうとするところができません。
そういう簡単なサンプルとかを提示していただきませんでしょうか?
0924nobodyさん
2007/01/26(金) 12:38:54ID:???if ($x eq $a){
$one++;
} eisif ($a eq $b) {
$two++;
} else {
$three++;
}
print "Content-type: text/html; charset=文字コード\n\n";
print '1は' . "$one" . '、''2は' . "$two" . '、' . '3は' . "$three";
0925924
2007/01/26(金) 12:43:20ID:???if ($x eq $a){
$one++;
} eisif ($x eq $b) {
$two++;
} else {
$three++;
}
print "Content-type: text/html; charset=文字コード\n\n";
print '1は' . "$one" . '、' . '2は' . "$two" . '、' . '3は' . "$three";
0926924
2007/01/26(金) 13:01:23ID:???if ($x eq $a){
$one++;
} elsif ($a eq $b) {
$two++;
} else {
$three++;
}
print "Content-type: text/html; charset=文字コード\n\n";
print '1は' . "$one" . '、''2は' . "$two" . '、' . '3は' . "$three";
0927924
2007/01/26(金) 13:02:48ID:???0928924
2007/01/26(金) 13:08:50ID:???これが正解だ
if ($x eq $a){
$one++;
} elsif ($x eq $b) {
$two++;
} else {
$three++;
}
print "Content-type: text/html; charset=文字コード\n\n";
print '1は' . "$one" . '、' . '2は' . "$two" . '、' . '3は' . "$three";
0929nobodyさん
2007/01/26(金) 13:20:33ID:???0930nobodyさん
2007/01/26(金) 16:52:05ID:???0931nobodyさん
2007/01/26(金) 20:04:25ID:???あとprintf覚えようね。
0932nobodyさん
2007/01/26(金) 21:03:20ID:???それとも1つの質問が書かれた複数のページがあるのか、はっきりしない。
前者なら、全ての質問について、選択肢をキーとしたハッシュでも作って集計すればいい。
後者なら、hidden フィールドでも使って、前ページまでの集計結果を覚えておけばいい。
0933nobodyさん
2007/01/27(土) 10:46:19ID:F/NZnu0Bお薦めのBBS向けのフレームワークとかご存じでしたら教えてもらえませんか?
0934nobodyさん
2007/01/27(土) 11:18:07ID:???0935nobodyさん
2007/01/27(土) 11:29:54ID:???今度使ってみるかなぁ。
つっても、%ndぐらいしか使わなそうだけど。
0936nobodyさん
2007/01/27(土) 11:34:36ID:???0937nobodyさん
2007/01/27(土) 11:39:50ID:???0938nobodyさん
2007/01/27(土) 13:38:26ID:???なんて書くくらいなら
printf("1は%d、2は%d、3は%d", $one, $two, $three);
の方が見やすいと思う。もしクォートの対応間違えてSyntax Errorになったら
探すのめんどいから。あとは、
printf("1は%d、2は%d、3は%d", @total{qw(one two three)});
のように書けるとき便利。
0939nobodyさん
2007/01/27(土) 16:26:34ID:???いや俺の話だけど。
0940nobodyさん
2007/01/27(土) 16:31:24ID:???って書いた方が無難かもかも。。
0943nobodyさん
2007/01/28(日) 07:39:42ID:???>>940 の方が意図しない挙動が起こらないからいいだろ。
0100 をプリントしたい場合
perl -e 'printf "%d", 0100 '
perl -e 'printf "%d", "0100" '
perl -e 'printf "%s", "0100" '
perl -e 'printf "%s", 0100 '
perl -e 'print "0100"'
まあ、printf "%04d", "100" 使えって云うんだろうけど。
0944nobodyさん
2007/01/28(日) 08:28:12ID:???だから>>940でOK。
0945nobodyさん
2007/01/28(日) 23:19:16ID:???ファイルを保存する方法がわかりません。
どうすればいいんでしょうか?
0946nobodyさん
2007/01/28(日) 23:26:29ID:???0947nobodyさん
2007/01/28(日) 23:35:50ID:???0948nobodyさん
2007/01/29(月) 01:45:42ID:???0949nobodyさん
2007/01/29(月) 17:40:11ID:???if($pObj->ping($host, $timeout)){
print "$host is running.\n";
} else {
print "$host is not running.\n";
}
PINGが4回送信成功したらall complete
四回とも失敗したときにnot reaction
としたいのですがどこに制御文足せば良いのか教えてください。
0950nobodyさん
2007/01/29(月) 18:37:35ID:???0951nobodyさん
2007/01/29(月) 18:45:09ID:???0952nobodyさん
2007/01/29(月) 19:25:53ID:???4か-4かで判断汁
0953nobodyさん
2007/01/29(月) 21:11:48ID:???「3回目の試行で全成功」と「4回試行して1度失敗」の区別が付かないような。
まあ、目的次第か。
0954nobodyさん
2007/01/30(火) 01:25:19ID:???その辺の区別はできなくてもいいんでない?
「どうカウントして条件分岐させればスマートか?」という質問じゃなくて
「どこに制御文を足せばいいのか?」なだけに、
みんなが書いた回答では片づかないような気配を感じる。
0956nobodyさん
2007/01/30(火) 15:45:46ID:???クライアント側でソケットをcloseすると、なぜかFD_CLOSE
が2回届いてしまいます。
特に支障はないのですが、これって正常なんでしょうか?
0957nobodyさん
2007/01/30(火) 16:05:16ID:???0959nobodyさん
2007/01/30(火) 22:24:11ID:???0960nobodyさん
2007/02/01(木) 18:34:00ID:uO0f4S6qどこかにないですか?
0962nobodyさん
2007/02/02(金) 20:55:17ID:???@data = ('bbb','ccc');
$num = @log;
for($i=0; $i<$num; $i++){
($name, $price, $text) = split(/,/, $log[$i]);
foreach(@data){
if($text eq $_){
$name = 'MATCH';
last;
}
}
push(@newlog, "$name,$price,$text)";
}
このような処理をしたいのですが、
とても効率が悪そうで悩んでます。
調べてみると、grepが利用できないかと思ったのですが、
うまくまとめられません。。どなたかよい智恵を貸して下さい!
0963nobodyさん
2007/02/02(金) 20:58:50ID:???>push(@newlog, "$name,$price,$text)";
push(@newlog, "$name,$price,$text");
です・・
0964nobodyさん
2007/02/02(金) 22:52:58ID:???# usage> perl this_script 2 bbb ccc
my($pos, @word) = @ARGV;
my $regex = join '|', map quotemeta, @word;
$regex = qr/(?:$regex)/;
my @matched;
(split /[,\n]/, $_, $pos + 1)[$pos] =~ /^$regex$/ && push @matched, $_ for <DATA>;
print @matched;
__END__
AAA,100,aaa
BBB,200,bbb
CCC,300,ccc
DDD,400,ddd
0966nobodyさん
2007/02/05(月) 20:49:02ID:???$s1 = \$text;
$s2 = \'abc';
$s3 = \('abc');
$s4 = \('abc', 'def');
$s5 = \($text = 'def');
$s1〜$s5は全部スカラーのリファレンスになったのですが
$s4とかが配列にならないのは何故なんでしょうか?
夜も眠れません(>_<)
0967nobodyさん
2007/02/05(月) 21:05:53ID:???http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.html#Making_References
> 列挙リストに対するリファレンスを取るということは、ブラケットを使うことと
> 同じではないということに注意してください。これはリファレンスのリストを
> 生成することと同じなのです!
>
> @list = (\$a, \@b, \%c);
> @list = \($a, @b, %c); # 同じこと!
>
> 特殊な場合として、\(@foo)は@fooの内容へのリファレンスのリストを返し、
> @foo自身へのリファレンスは返しません。これは%fooと似ていますが、
> キーのリファレンスがコピーに対するものである点が異なります(これは
> キーがfull-fledgdスカラーではなく単なる文字列であるためです)
0969nobodyさん
2007/02/08(木) 15:49:20ID:???print "$iueo";の出力結果を1ueo
と表示するために$iを何かで囲めば良かったと記憶しているんですが度忘れしてしまいました。
すみませんが教えて下さい。調べるキーワードでも結構です。
0970nobodyさん
2007/02/08(木) 15:52:51ID:???0972nobodyさん
2007/02/08(木) 16:53:49ID:???ぐぐって見つけたページ
ttp://blog.livedoor.jp/hakin/archives/50690272.html
によるとCrypt::SSLeayが必要だそうで、
そのページどおりにppmでインストールしようとしたんですが
Crypt::SSLeay自体が無いようでインストールできません。
環境はWin2000+Activeperl 5.8.8.817 です。
何か手段はありませんか?
0973nobodyさん
2007/02/08(木) 17:09:57ID:MLG2+XR4必須事項として、レスポンスmin/maxから算出したアベレージが必要です。
コマンドプロンプトからの実施時のようにレスポンスを採りたいのですが、Net::Pingにはこのよいな実装がないのでしょうか?
かなり検索はしたのですが、レスポンスタイムの取り方を解説している場所がありませんでした
何か良い方法が有ればご教授下さい。
0974脱帽
2007/02/08(木) 17:29:34ID:???>>972
うちは
ppm install http://theoryx5.uwinnipeg.ca/ppms/Crypt-SSLeay.ppd
でインストール出来たけど。
>>973
hiresメソッドは使ってみた?
0975nobodyさん
2007/02/08(木) 17:35:33ID:???# High precision syntax (requires Time::HiRes)
$p = Net::Ping->new();
$p->hires();
($ret, $duration, $ip) = $p->ping($host, 5.5);
printf("$host [ip: $ip] is alive (packet return time: %.2f ms)\n", 1000 * $duration)
if $ret;
$p->close();
が応答時間をとる例そのものずばりじゃないか。何回かやって平均/max/minとる
ところは自分で書いてください。そのくらいはできるだろ。
0976nobodyさん
2007/02/08(木) 18:43:10ID:MLG2+XR4ありがとうございますm(__)m
>>975さんの方法で無事解決しました。
勉強不足ですね、申し訳ない。
0977あっこ
2007/02/08(木) 19:23:45ID:LIdpjyEoソース教えてもらえませんか?
0978nobodyさん
2007/02/08(木) 19:37:58ID:???0979nobodyさん
2007/02/08(木) 19:45:50ID:???&kouyaku()の中身が知りたいという事か?
1から$num1と$num2の小さい方までをforで回して
$num1と$num2が両方割り切れるようならその値をリストに追加、
最後にリストをまとめて返すというだけの処理。
この程度のソースが書けないのは素人どころのレベルじゃねーぞ。
とりあえず>>1を100万回読み直して自作のソースを晒せ。
0980nobodyさん
2007/02/08(木) 20:43:36ID:???1.両方の数字を因数分解
2.両方に共通する因数を抜き出す
3.それらの組合せの全て出す
4.各組合せの乗算を算出
5.重複した値を除いて、「1」とそれらの値を画面出力
0981nobodyさん
2007/02/08(木) 21:16:53ID:???30秒で出来た
0982nobodyさん
2007/02/08(木) 21:39:49ID:???0984nobodyさん
2007/02/09(金) 16:40:43ID:bT11nyvb0985nobodyさん
2007/02/09(金) 16:53:16ID:???できない……が、同じ事を考えた人は居る。
ttp://blog.livedoor.jp/tetryl/archives/6741666.html
0986nobodyさん
2007/02/09(金) 21:07:51ID:???展開されたデータが渡ってしまうのですがなぜでしょうか?
@a = qw(a b c d);
$obj->hoge(\@a);
sub hoge{
my $self = shift;
my $ref_array = shift;
print $ref_array;
}
こうするとなぜか「ARRAY(0x275cc8)」
といったアドレスデータではなく、「a b c d」と勝手に展開されたものがプリントされてしまいます。
0987986
2007/02/09(金) 21:19:14ID:???デリファンスを
@a = @$ref_array;
ではなく、
@a = @{$ref_array};
とやったらうまくいきました。
なぜそうなのかはわかりませんが・・・
0988nobodyさん
2007/02/09(金) 23:20:06ID:???そもそもお前が986で示したプログラムにはそんな部分はないわけだが。
ちゃんと正確に晒さないと的確な回答は得られないと思われる。
0989nobodyさん
2007/02/10(土) 18:29:35ID:???0990nobodyさん
2007/02/10(土) 20:48:15ID:???http://pc10.2ch.net/test/read.cgi/php/1171102883/
0992nobodyさん
2007/02/11(日) 14:36:41ID:???say '埋め';
0993nobodyさん
2007/02/12(月) 00:00:32ID:???use strict;
my $stop = CGI::SOSHI->new;
print $stop->soshi();
阻止!
0994nobodyさん
2007/02/12(月) 00:01:34ID:???write_thread 'php', '164519503', '梅';
0995nobodyさん
2007/02/12(月) 04:45:55ID:???0996nobodyさん
2007/02/12(月) 05:09:21ID:???0997nobodyさん
2007/02/12(月) 12:40:25ID:???0998nobodyさん
2007/02/12(月) 16:42:45ID:???0999nobodyさん
2007/02/12(月) 17:30:16ID:???1000nobodyさん
2007/02/12(月) 18:04:59ID:???次スレ
Perlコーディング初心者質問スレ Part 54
http://pc10.2ch.net/test/read.cgi/php/1171102883/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。