5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Perlコーディング初心者質問スレ Part 53

1 :nobodyさん:2006/11/26(日) 14:38:23 ID:SlmGsFMB
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

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

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

お勧めサイトは >>2-10

前スレ http://pc8.2ch.net/test/read.cgi/php/1153987463/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/

2 :nobodyさん:2006/11/26(日) 14:40:22 ID:???
ム板Perlスレより 1 of 2

[プログラミング自体の経験が無い奴はまずココを読め]
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/

3 :nobodyさん:2006/11/26(日) 14:41:13 ID:???
ム板Perlスレより 2 of 2

[モジュール]
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

4 :nobodyさん:2006/11/26(日) 14:41:45 ID:???
関連スレ
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/

5 :nobodyさん:2006/11/26(日) 14:51:35 ID:tkb0DDKs
>>1

6 :1:2006/11/26(日) 17:42:11 ID:???
貼り順まちがいた...orz

7 :nobodyさん:2006/11/26(日) 17:50:07 ID:???
jcode.plでutf-8→eucの変換って行えないのでしょうか?

jcode::convert(\$Line,'euc');

8 :nobodyさん:2006/11/26(日) 19:05:37 ID:???
UTF8非対応だから

9 :nobodyさん:2006/11/26(日) 22:01:06 ID:???
いい加減Jcode.pmなりEncode.pm使おう

10 :nobodyさん:2006/11/26(日) 22:46:05 ID:???
2chのように、時間に22:27:00:00まで表示するにはどうすれば良いのでしょうか?

11 :nobodyさん:2006/11/26(日) 23:15:07 ID:???
表示されてないお

12 :nobodyさん:2006/11/26(日) 23:22:34 ID:???
>>11
VIPでは00:00:00:00まで出るよ

13 : ◆TWARamEjuA :2006/11/27(月) 00:03:22 ID:??? ?BRZ(6677)
00:00:00.00ですね♪
Time::HiRes 使ってるです♪

14 :nobodyさん:2006/11/27(月) 01:00:43 ID:???
>>13
どうもありがとうございます。

15 :nobodyさん:2006/11/27(月) 01:47:56 ID:VGuJADoD
あぁ、そんな無駄なことに貴重なCPUサイクルを消費して・・・

16 :nobodyさん:2006/11/27(月) 04:01:18 ID:???
関数のエラー時の戻り値って何にしてます?
0や-1を返す場合が多いと思いますが、undefにしない理由って何かあるんでしょうか。
undefなら0と同じくfunc() or dieなんて呼び方もできるし、undefの可能性ありと
常に思っておけばprint func()なんて不用意に書かなくなるかなと思ったんですが。

use warningでundefをprintするなと大量に警告されて、関数の書き方間違ったかなと
思ったりしました。



17 :nobodyさん:2006/11/27(月) 09:39:53 ID:???
undefを返せばいいと思いますよ
私は以前から 0 or DATA で返してるので、今からそのクセを治すのに苦労しそう・・・


18 :nobodyさん:2006/11/27(月) 11:28:23 ID:???
undef 一択

19 :nobodyさん:2006/11/27(月) 11:43:26 ID:???
return ();

なんて記述もよく見かけるけど、これは
・リストコンテキストなら空リスト
・スカラコンテキストならundef
になるって事でおk?

20 :nobodyさん:2006/11/27(月) 14:23:58 ID:???
>>19
むしろ return; だけでおk

21 :nobodyさん:2006/11/27(月) 15:21:54 ID:???
return (); と return; の違いはなんじゃらほい?

22 :nobodyさん:2006/11/27(月) 16:19:33 ID:???
2chの30秒規制みたいなのをつけたいんですが
どのようにすればいいでしょうか?

23 :nobodyさん:2006/11/27(月) 16:26:08 ID:w7/znFw6
cookie

24 :nobodyさん:2006/11/27(月) 18:28:22 ID:???
>>21
横だけど、
処理を意識して書くか perl に任せるかの違いじゃね?
呼び出し元にとってみればどっちも同じ挙動でしょ。

25 :nobodyさん:2006/11/27(月) 18:34:15 ID:???
配列にundef代入したら要素数==1

26 :nobodyさん:2006/11/27(月) 18:53:55 ID:???
>>16
分ってる人もいるっぽいが、
return () ; or return ; の二択しかないよ(実質一択)。
かなり有名なネタだ。

初心者スレなので参考 URL を。
ttp://d.hatena.ne.jp/hyuki/20060406

27 :nobodyさん:2006/11/27(月) 19:13:29 ID:???
crypt (angokashitaimoji,'$1$$');

↑このようなほうほうで暗号可したのですが
アルファベットのほかに、どのような記号が使われるのでしょうか?
リストがのってるサイトがあったらお願いします。

28 :nobodyさん:2006/11/27(月) 19:21:19 ID:???
>>27
perldoc -f crypt

29 :nobodyさん:2006/11/27(月) 19:27:39 ID:???
>>28


30 :nobodyさん:2006/11/27(月) 20:00:40 ID:???
>>27
perlでは決まっていないので使用するシステムのcryptライブラリのマニュアルなどを
参照。たとえばこんなの。

ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/crypt.3.html

31 :nobodyさん:2006/11/27(月) 20:05:25 ID:???
>>30
どうもありがとうございます

32 :nobodyさん:2006/11/27(月) 21:24:09 ID:???
お聞きしたいのですが
CGIファイルの中身って見ることってできるんでしょうか?
HTMLは見れますが
CGIの中身って見れませんよね?
CGIの中身というのは、.cgiファイルのうp前の状態です。

33 :nobodyさん:2006/11/27(月) 21:27:54 ID:???
鯖の設定によっては見れる

34 :nobodyさん:2006/11/27(月) 21:56:02 ID:???
>>33
返信ありがとうございます。
どのような設定をすれば見れなくできますかね?
有料鯖なのですが
わたしでもその設定はいじれるのでしょうか?

35 :nobodyさん:2006/11/27(月) 22:10:03 ID:???
.htaccessで
または全ディレクトリにindex.htmlを

36 :nobodyさん:2006/11/27(月) 22:14:13 ID:???
CGIのソースの読める読めないはindex.htmlがどうとかそういう問題とは違わないか?

とりあえず>>34の使っている鯖がCGI可なのかどうかが問題だ。
そういえばちょっと前にCGI不可の鯖に.cgiで置いてソース晒してた椰子が居たなあ…。

37 :16:2006/11/27(月) 22:21:07 ID:???
みなさん、どうもありがとうございます!
特に>>25,>>26 ありがとう

今日まさにこんなことやりそうになってました。undef返したら真なんですね。
(@array = &func()) or 〜

return;と書くとリストコンテキストでは空の配列を、スカラコンテキストでは
undefを返す、つまり
return wantarray ? () : undef;
と書くのといっしょってことですね。危うく間違った理解で突き進むところでした。


38 :nobodyさん:2006/11/27(月) 22:23:31 ID:???
undefを返すなら、definedでチェックするようにしようぜ

39 :nobodyさん:2006/11/27(月) 22:58:38 ID:???
>>35-36
どうもありがとうございます。
.htaccessで設定できるのでしょうか?
やりかたがのってるサイトが見つからないので
よかったら教えてください

40 :nobodyさん:2006/11/27(月) 23:13:26 ID:???
>>39
その前にちゃんとCGIが動く鯖なんだろうね?

41 :nobodyさん:2006/11/27(月) 23:13:59 ID:???
>>40
はい

42 :nobodyさん:2006/11/27(月) 23:19:09 ID:???
それなら適切にパーミッションを設定してやれば
ブラウザでアクセスしていきなりソース丸見えという事はないと思うよ。


43 :nobodyさん:2006/11/27(月) 23:19:55 ID:???
とりあえず実行属性つけちゃえば問題ない

44 :nobodyさん:2006/11/27(月) 23:25:23 ID:???
>>42
ブラウザというのは、「IE」や「Sleipnir」のことでしょうか?
>>43
やってみます。

45 :nobodyさん:2006/11/27(月) 23:26:52 ID:???
知識が底辺過ぎるし、スレ違いというか板違いなので終了


46 :16:2006/11/27(月) 23:35:54 ID:???
昔、CGIのソース丸出ししたことあるなあ。当時は原因不明だったけど、
大方htaccessの設定だったんだろうなあ。下記とかかな。

AddHandler cgi-script .cgi

47 :nobodyさん:2006/11/28(火) 00:12:50 ID:???
>>46
httpd.confですかね?

48 :nobodyさん:2006/11/28(火) 00:15:03 ID:???
htaccessを無視するのか
おまえ酷すぎ

49 :nobodyさん:2006/11/28(火) 00:40:58 ID:???
httpd.confであってるんだけど、レンタルサーバだといじれないので、
httpd.confの設定をhtaccessで上書きするってこと。

全然はずしてるかもしれないけど、CGIは基本的にcgi-bin内で実行、
それ以外はhtaccessいじってね、っていう仕様なのかもね。

50 :nobodyさん:2006/11/28(火) 00:43:31 ID:???
ほぉほぉ

51 :nobodyさん:2006/11/28(火) 00:44:27 ID:???
ありがとうございます。

52 :nobodyさん:2006/11/28(火) 00:45:28 ID:5n8a+rNm
文字列の入った変数中に、指定した文字が
ある場合true、ない場合falseを返す変数があったら教えてください。


53 :nobodyさん:2006/11/28(火) 00:46:41 ID:???
index

54 :nobodyさん:2006/11/28(火) 00:47:22 ID:???
どうしてもTRUE|FALSEでほしいなら自前の関数でラッピングしてください

55 :nobodyさん:2006/11/28(火) 00:48:20 ID:???
return undef;の話はPerlベストプラクティスに載ってるね。

56 :nobodyさん:2006/11/28(火) 02:23:57 ID:???
<FORM action="a.cgi" method="POST">
#いろいろな項目入力
<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の処理コードを
書くぐらいしか思いつきません。

よろしくお願いします。

57 :nobodyさん:2006/11/28(火) 05:30:21 ID:PG2nYwJ4
こんな時間にすいません。誰かいたら教えて下さい
phpで例えば<?php include("○○.php"); ?>というのがあります。
これは○○.phpを上の記述を書いたphpに表示させることができます。

perl(cgi)も同様なことできますでしょうか?
index.cgiにabc.cgiを表示させたいんですけど。
やり方ありましたら教えて下さい m(_ _"m)ペコリ

58 :nobodyさん:2006/11/28(火) 09:44:54 ID:???
>>56
一つの体で、別々の場所に行く電車に乗れますか?
自分で思いついた方法で大丈夫です。

>>57
つ require、or module


59 :nobodyさん:2006/11/28(火) 10:10:33 ID:???
>>58
レスありがとうございます
軽くしらべてみたんですが難しいですね
それでできればいいんですが・・・
がんばってみます

60 :nobodyさん:2006/11/28(火) 10:44:39 ID:???
>>58
多重影分身すればいいのか

61 :nobodyさん:2006/11/28(火) 10:54:01 ID:???
チャクラが人並以上に必要だってばよ

62 :nobodyさん:2006/11/28(火) 14:47:00 ID:???
@grepedarray = grep(/^[A-Z]/,@array);
こういう文に置換 - s/ / / -を組み合わせたいのですが出力が上手く表示できません
どうしたらよいでしょうか?

63 :nobodyさん:2006/11/28(火) 15:01:43 ID:???
ようわからんが map も使えば?

64 :nobodyさん:2006/11/28(火) 15:08:26 ID:???
@grepedarray = map { /^o^\ } grep(/^[A-Z]/,@array);

65 :nobodyさん:2006/11/28(火) 15:13:05 ID:???
ちょw 誰が フッジサーン 使えと言ったwwwww

66 :nobodyさん:2006/11/28(火) 15:16:09 ID:???
map {push(@grepedarray) if(s///);} @array;
これでもおk?

67 :66:2006/11/28(火) 15:21:19 ID:???
連投すまん
push(@grepedarray)
じゃなくて
push(@grepedarray, $_)
じゃないとだめかも

68 :nobodyさん:2006/11/28(火) 15:55:32 ID:???
それならforeach使えばいいのに。

69 :nobodyさん:2006/11/28(火) 19:55:31 ID:???
>>66-67
それはダメ。mapを使うなら、返り値を利用するべき。

70 :nobodyさん:2006/11/28(火) 19:56:25 ID:???
ごめん、「ダメ」はいいすぎた。あくまで「おすすめできない」って事でひとつ・・・

71 :nobodyさん:2006/11/28(火) 20:59:18 ID:???
素直に block で
@grepedarray = grep { s/ / / ; /^[A-Z]/ } @array ;
@grepedarray = grep { $flag ++ if /^[A-Z]/ ; s/ / / ; $flag } @array ;
じゃ駄目なのか?(適当に書いたが)

72 :nobodyさん:2006/11/28(火) 21:04:48 ID:???
取得しない値まで置換とかする必要ないだろ・・・常識的に考えて・・・

73 :71:2006/11/28(火) 21:17:03 ID:???
>>72
そうだ罠。(実際書く時には当然もっと丁寧に if 文書くけどさw)

ただ @array に grep でアクセスした後、map or foreach で
アクセスするなら実質 2 回のループなわけで…。
そっちも十分に無駄っぽいよね。


74 :nobodyさん:2006/11/28(火) 21:34:23 ID:???
そんな事言ってたらPerlでプログラミングできませんよ(´・ω・)
もっと富豪的に

75 :nobodyさん:2006/11/28(火) 21:43:35 ID:???
grep 使ってる時点で十分富豪w

76 : ◆TWARamEjuA :2006/11/28(火) 22:00:53 ID:??? ?BRZ(6677)
@grepedarray = grep {
 /^[A-Z]/
  ? s/ / /
   ? 1
   : 1
  : undef
 } @array;

77 :nobodyさん:2006/11/28(火) 22:05:24 ID:???
ここらへんで誰かが Bench ってくるとエスパー

78 :nobodyさん:2006/11/28(火) 22:10:11 ID:???
ふと思ったんだが、処理速度のbenchならBenchmark.pmだけど
メモリのbenchってどうやんだ?やる方法ある?

79 :nobodyさん:2006/11/28(火) 22:24:28 ID:???
>>76
そう来るならこっちの方がもっとスマート
grep { /^[A-Z]/ ? s/ / / || 1 : undef } @array;

80 :nobodyさん:2006/11/28(火) 22:39:36 ID:???
だったら grep { /^[A-Z]/ and s/ / / || 1 } @array; でもいくね?

81 :nobodyさん:2006/11/28(火) 22:43:03 ID:???
そうデスorz...

82 :nobodyさん:2006/11/28(火) 22:48:03 ID:???
>>78
Windowsじゃ動かんし使ったことも無いのだけれど、
forkしてから走らせて使用メモリサイズを調べるmemchならあるね…
ttp://search.cpan.org/~salva/Memchmark-0.01/lib/Memchmark.pm
freeで確保した領域をOSに返しちゃうタイプのライブラリだとそもそも成立しない方法っぽい

それから、Perlをデバッグオプションつきでコンパイルしておけば、
色々メモリ関連情報が調べられるんだったと記憶しているけれど、
どの程度できるのかよく知らんです。

83 :nobodyさん:2006/11/28(火) 22:54:46 ID:???
>>82
> Memchmark.pm
ああ!それがあったか。試してみよ。THX!

84 :nobodyさん:2006/11/29(水) 00:11:52 ID:YenD9j36
25桁*1000万件の重複しない数値データをcsvファイルに格納させるため、
以下のようなプログラムを書きました。


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万あたりからものすごい時間が
かかってしまいます。

効率的な方法があればどうかご教示ください。
恐れ入りますが宜しくお願いいたします。


85 :nobodyさん:2006/11/29(水) 00:19:15 ID:???
25桁で連番で1000万件書き出す
桁数が決まってるのでバイナリアクセスで

filepos1 = rnd * 総レコード数
filepos2 = rnd * 総レコード数

この pos1 と pos2 を入れ替え
あとは好きな回数だけswapすればいいかと思います

すべての件をメモリに保持しないので仕様メモリは極小で済みますが、
ディスクI/O がかなり発生します。

86 :nobodyさん:2006/11/29(水) 00:59:08 ID:???
>>85
ご教示有難うございます。

この方法ですと、1000万回ファイルを読み込む、という
解釈で宜しいでしょうか。

87 :nobodyさん:2006/11/29(水) 01:15:11 ID:???
50万回シャッフルする場合は

1000万回ライト
50万回シーク
50万回リード
50万回シーク
50万回ライト

って感じです

88 :nobodyさん:2006/11/29(水) 01:15:58 ID:???
Perl5.8以降なら、こんな事もできます。
http://blog.livedoor.jp/dankogai/archives/50681645.html

89 :nobodyさん:2006/11/29(水) 22:03:44 ID:???
>>58
お礼すごい遅れました。
ありがとうございました。

90 :nobodyさん:2006/11/29(水) 23:37:00 ID:???
>>62です。
みなさん色々ありがとうございました。

91 :nobodyさん:2006/11/29(水) 23:58:32 ID:???
@grepedarray = grep { /win/ and s/win/BIG/ } @array;

$cnt = grep(/win/,@array);

print "大文字\n@grepedarray\n計$cnt個\n";

この文で$cntの部分が 計0個とでてしまんですが何が問題なんでしょう?

92 :nobodyさん:2006/11/30(木) 00:14:17 ID:???
>>91
grep{} 内の $_ は元 array の要素のエイリアスだから、
一行目にて $_ を直接変更してしまっている。それがやなら
@grepedarray = map { $foo = $_ ; $foo =〜 s/win/BIG/ ; $foo } grep { /win/ } @array ;
てなかんじで map 中で $foo にいったん代入してから変更する事
ちなみに上の map 中の $_ も @array の要素のエイリアス( s/// したら変更されちまう)

93 :nobodyさん:2006/11/30(木) 00:17:52 ID:???
map っていまいちつかいどころ分からない
ブロックで囲っちゃえばいいじゃんとか思うのだが

94 :nobodyさん:2006/11/30(木) 00:18:50 ID:???
×一行目にて $_ を直接変更してしまっている。それがやなら
○一行目にて元要素を直接変更してしまっている。それがやなら


95 :nobodyさん:2006/11/30(木) 00:30:46 ID:???
>>92さん
ありがとうございます。理解できました。^^

96 :nobodyさん:2006/11/30(木) 00:32:28 ID:???
>>93
例を挙げるとシュワルツ変換には必須。
my @array = ( '1,2', '2,1' ) ;
my @sorted = map { $_->[0] }
        sort { $a->[1]<=>$b->[1] }
        map { [ $_, (split /,/, $_ )[1]] } @array ;
上を普通の for 文で書くと捨て array を数個書くはめになり、7 行以上になることは確定。
とは言いながらも使うかどうかは完全に趣味の問題

97 :nobodyさん:2006/11/30(木) 01:25:15 ID:???
>>93
何を抜かしてるのかと思ったら、ここ WebProg 板なのね…。

98 :nobodyさん:2006/11/30(木) 02:58:21 ID:???
>>93
たとえばだけど、ハッシュを引数に取るサブルーチンに
foo( map { $_ => $hash{$_} =~ /^\d+$/ ? $hash{$_} * 2 : "str".$hash{$_} } keys %hash);
などと使えて便利。

99 : ◆TWARamEjuA :2006/11/30(木) 07:00:27 ID:??? ?BRZ(6677)
my $Now_date = sprintf qq|%04d/%02d/%02d|, # 日付を生成
map {
$_->[0] += 1900;
$_->[1]++;
@$_
} [(localtime)[5,4,3]];

100 :nobodyさん:2006/11/30(木) 08:57:31 ID:???
>>99
…さすがにそれは普通に 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) ;

101 :nobodyさん:2006/11/30(木) 10:53:04 ID:???
>>9
Jcode.pm は知らんけど、Encode.pm は重い。
一般的な掲示板CGIで use Encode; しただけで、2〜3割CPU負荷が高くなった。



102 :nobodyさん:2006/11/30(木) 10:55:09 ID:???
ファイルを開く時に、

open(FILEHANDLE, ">> filename") ;

という書き方をしますよね。

この書き方はファイル名がダブルクォーテーションで囲われないのでいまいち好きになれません。

例えば、ファイル名が " test.txt" (半角スペースが左にある) だった場合にはどうすればいいんでしょうか?


103 :nobodyさん:2006/11/30(木) 11:08:52 ID:???
>>102
open(FILEHANDLE, ">>", " test.txt");


104 :nobodyさん:2006/11/30(木) 11:10:16 ID:???
殆どの解説サイトでは、フォームの要素を取り出す場合などに、

use CGI;
$q = new CGI;
print $q->param('name');

と解説していますが、

use CGI":all"
print param("name")

というコードを見つけました。(両方ともXSS脆弱性がありますがこれはサンプルです。)

後者だと関数名の重複が起こる可能性が高くなるかと思いますが、
速度低下などのデメリットはないでしょうか?


105 :102:2006/11/30(木) 11:11:04 ID:???
>>103
カンマで区切って3つめのパラメーラーにすることも可能でしたか
そっちの方が美しいので全部をそっちに統一しようかとおもいます
ありがとです

106 :nobodyさん:2006/11/30(木) 11:23:07 ID:???
>>104
速度はどうせ全体からすれば誤差ぐらいしか違わない。
むしろ関数名重複の方の問題でいまどきは普通使わない
書き方だから、既にそういう風に書かれているプログラムを
読まなきゃいけないならしょうがないが、これから書くのなら
前者の書き方にしとけ。


107 :104:2006/11/30(木) 11:27:47 ID:???
>>106
なるほど。
見た目は美しくなくなりますが、パッケージ同士で同じ関数名が使われていたら困るのでそうしてみます。
ありがとうございました。

108 :nobodyさん:2006/11/30(木) 18:04:24 ID:???
Perlスクリプトの処理時間を計測したいのですが、
(times)[0]を使うやり方で出てくる数値が、実時間と違うような気がします。
これで求められる時間の単位は何なんでしょうか?

109 :nobodyさん:2006/11/30(木) 18:33:33 ID:???
CPU秒

110 :nobodyさん:2006/11/30(木) 19:51:57 ID:???
Benchmark 使えばいいじゃん

111 :JAPU ◆lVJAPUTeX. :2006/11/30(木) 20:29:39 ID:???
>>93

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"; としても良いです。

112 :nobodyさん:2006/11/30(木) 21:31:15 ID:???
COOKIEについて質問です。

今まで、COOKIEが有効かどうかって、
x.cgiでCOOKIEセット、y.cgiに飛ばす
y.cgiでCOOKIE読んで、書き込みできたかチェック
こんなことしてました。

COOKIEが有効か調べる関数ってありますでしょうか。
よろしくお願いします。

113 :nobodyさん:2006/11/30(木) 21:42:53 ID:???
>>107
個人的な嗜好の問題だけど俺は前者の方が美しいと思う

114 :nobodyさん:2006/11/30(木) 22:28:40 ID:???
ちょいと質問させてください。

my %func = (
'1'=>'\&hoge',
);

sub hoge
{
処理
}

$func{'1'}->();

ぐぐってみたらこれでhogeが実行できる
みたいなことが書いてあったんですが
ダメみたいなんすよ。
なぜかわかりませんかねぇ?

115 :nobodyさん:2006/11/30(木) 22:46:53 ID:???
>>114
'1'=>\&hoge

の間違いでしょう? クォートしちゃダメ。

116 :nobodyさん:2006/11/30(木) 23:24:54 ID:???
ありがとうございやす!動きました。
ぐぐって見つけたページもクォートなしでした。
いやはやお恥ずかしい。

117 :nobodyさん:2006/12/01(金) 01:14:03 ID:???
明らかに文字列を受け取って文字列を返す関数にundef渡したとき、
戻り値はundefと0文字列のどっちが安全で親切なんだろうか。
ケース倍ケースかな。



118 :nobodyさん:2006/12/01(金) 02:08:36 ID:???
お願いします。

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
です。

119 :nobodyさん:2006/12/01(金) 02:22:30 ID:???
use strict;

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 書けちゃってますよ?

120 :nobodyさん:2006/12/01(金) 02:38:41 ID:???
>>119
はい。
以下のようなハッシュを値でソートしたいと思いまして・・・。

%ir = (
"あああ" => 1,
"いいい" => 2,
"ううう" => 3,
"えええ" => 4,
"おおお" => 5,
"かかか" => 6,
"ききき" => 7
}

.pl単体では上手くテストで動いたんですけど、いざCGI用に
コピーするとエラーがでます(T_T)


121 :nobodyさん:2006/12/01(金) 03:20:08 ID:???
>>118
$count はどっからでてきたの? パッケージ変数? $ir{$l} の間違いじゃない?
それに、『sort に渡してる関数の中で「my $a」とは書けません』ってエラーなんだから
実際の CGI ファイルのコードは違うんじゃないの? ちゃんと確認した?

122 :nobodyさん:2006/12/01(金) 08:18:39 ID:???
>>111
> むしろ、strftime
POSIX::strftime か。しらなんだ、とんくす。

123 :nobodyさん:2006/12/01(金) 10:57:45 ID:???
Shift_JIS 環境です。

CGI.pm の escapeHTML 関数を使うと、「規制」 が 「&#8249;K制」 (実際には、&と#は半角) になっちゃうんですが、
どうにかならないものでしょうか…。

これじゃあ、日本語を処理する上で実用性が無いので困っています。

124 :123:2006/12/01(金) 11:01:25 ID:???
というより、何故こんな風になるのかが知りたいです。

HTMLの特殊文字は↓ですよね。
< = 0x3C
> = 0x3E
& = 0x26
" = 0x22
' = 0x27

そして、問題となる "規" は、0x8B4B です。

特殊文字にあたるコード(16進レベル)が含まれていないので、
おかしくなる理由がないと思うのですが…。


125 :nobodyさん:2006/12/01(金) 11:10:09 ID:???
>>123
CGI.pmを読めばわかるが、charsetがISO-8859-1かWINDOWS-1252のときに
その変換が行われるようになっていて、charsetは特に指定がなければISO-8859-1
だからほっとくとそうなる。CGI.pmのescapeHTML使うんならcharset設定すればよい
と思われる。あるいは別のを自分で書くなりどっかから探してくるなりして使うかだな。


126 :nobodyさん:2006/12/01(金) 11:16:18 ID:???
データベース検索のCGIを作っているのですがサーバ負荷(CPU)が高くて困っています。
ファイル数は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関数で要素毎に分割して == を使って等しければー、にしたほうが負荷は少なくなるもんなんでしょうか?

ある程度絞り込めれば実験でもいいんですが、
負荷関係に詳しい方がいたらお願いします。

127 :123:2006/12/01(金) 11:21:25 ID:???
>>125
回答ありがとうございます。

charset指定というのはどんな感じにやるもんなんでしょうか?

use Encode 風に指定して、

use CGI 'sjis';
use CGI 'shift_jis';

とかやってみましたが、駄目だったようですorz

128 :nobodyさん:2006/12/01(金) 11:31:17 ID:???
>>121
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
}
こんな感じです。
一応並び順を考えない仕方で解決しました。
もう少し自分で調べてみます。ありがとうございました。

129 :nobodyさん:2006/12/01(金) 11:32:40 ID:???
>>127
キーワード教えてもらったんだからマニュアルぐらい読めよ...

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引数を渡せばいいらしい。


130 :123:2006/12/01(金) 11:35:16 ID:???
>>129
ご親切にありがとうございます。
次からなるべくマニュアル読むようにします。



131 :123:2006/12/01(金) 11:39:27 ID:???
実際に使ってみたら解決しました。

$CGI->charset('Shift_JIS');

ありがとうございました。

132 :126:2006/12/01(金) 11:43:37 ID:???
http://oshiete1.goo.ne.jp/kotaeru.php3?q=2306988 を参考に時間の計測をしてみたら、

全体で 1秒ちょっとだったのが、index関数の部分をコメントアウトしたら、
0.01秒ぐらいに…。

ここまで極端に分かるとはおもいませんでした

133 :126:2006/12/01(金) 11:47:52 ID:???
勘違いでしたorz
while (my $line = <IN>)
の部分もコメントアウトしてました。
これを外したら、0.6秒ぐらいに…。

膨大なデータを1行ずつ読み込む、ここが負荷のメインだったようです。

こうなると、namazuとか他の言語を使うぐらいしか負荷削減の方法はないですね。

134 :nobodyさん:2006/12/01(金) 11:49:40 ID:???
>>126
毎回40MBあってこれからもどんどん増える予定のファイルを全部なめるのがそもそもだめ。
もう少しデータの持ち方を工夫した方がいいよ。バークレーDBぐらいはせめて使え。あるいは
インスコ面倒でなければまともなDB(mysqlとかpostgresとか)つかっちゃったほうが楽な気も
する。


135 :126:2006/12/01(金) 11:54:15 ID:???
>>134
なるほど
DB使ったほうがいいわけですか…
それは思いつきませんでした

実はこれフリーで配布されているCGIスクリプトのログファイルでして
過去ログも含めた検索をやりたいのでその検索スクリプトを自作していたとこなんです

ログファイルをHTML化して namazu かなんかで検索させるのとDB化、両方を検討してみます。


136 :nobodyさん:2006/12/01(金) 12:07:44 ID:???
read(FH, $buff, (-s FH));

でログを読んだときは負荷減りませんか?

137 :nobodyさん:2006/12/01(金) 12:40:28 ID:???
ファイルを全部読む時点で負けだろ


138 :126:2006/12/01(金) 12:42:32 ID:???
>>136
サンクスです。
読み込んだ時点の負荷は 1/3 〜 1/2 程度になりました。(でも1行ずつの処理を加えると同じかそれ以上になるかも…)

ただ、変数 $buff には全データが入っていることになるので、これを1行ずつ処理するときにどうすべきかが悩みます。
split 関数 で改行コードでの分割をして、配列にいれてから、while 関数で1行毎に処理したくなりますが、
これだとメモリ山ほど食いそうですし…。


139 :nobodyさん:2006/12/01(金) 13:28:54 ID:???
>>126
>>134に禿同です。
検索対象が決まっているのなら、その元のデータから検索用のデータ(インデックス)を作るプログラムを作り、
定期的に保守をするのが楽です。この処理自体が多少重くても、バックグラウンドで1日数回で済むのなら
いいのではないかと。
インデックスデータは、DBMに持たせる(検索対象文字列をキーにする)のが一番効率がいいと思います。
プレーンテキストでも、元のデータを丸々スキャンするよりはるかにましです。

140 :126:2006/12/01(金) 13:43:25 ID:???
>>139
やはりその方法がベストですよね。
データベースの勉強をしてやってみようかと思います。
ありがとうございました。

141 :nobodyさん:2006/12/01(金) 14:04:00 ID:???
正規表現で、エスケープをつけて表す文字は
+ * ? . ( ) [ ] { } | \
らしいのですが、/もですよね?
if($aaa =~ /\//)
とすれば望みどおりの動作をするのでこう思うのですが、間違ってますか?

142 :nobodyさん:2006/12/01(金) 14:26:10 ID:???
/そのものじゃなくて区切り文字
当然要エスケープ

143 :nobodyさん:2006/12/01(金) 18:30:05 ID:???
でも区切り文字変えたほうが読みやすいと思う
$hoge =~ m{/}

144 :nobodyさん:2006/12/01(金) 18:55:31 ID:???
ttp://www.sk.aitai.ne.jp/~shim/Workshop/html/wlist.htm

ここの真ん中付近にあるリスト作成を使ってファイルを出力しようとしてるんですが、
出力ファイル先のカタカナのサ行などが文字化けしてしまいます。
jcode.pl を使えば直るんじゃないかと思っているのですが、どこに何を書き足せばいいのでしょうか?

145 :nobodyさん:2006/12/01(金) 18:58:33 ID:???
スクリプト改造依頼スレへどうぞ
http://pc8.2ch.net/test/read.cgi/php/1157787046/

146 :nobodyさん:2006/12/01(金) 19:39:42 ID:???
>>145
そんなに大変な事だったんですか。
どこかを書き足すだけで解決できると思ってたのですが、大変そうなので諦めます・・・。
申し訳ありませんでした。

147 :nobodyさん:2006/12/02(土) 00:17:21 ID:???
<FORM action="xxx.cgi" method="POST">
<INPUT type="submit" value="送信">
</FORM>
これを送信ボタン押すとPOST形式で送信されると思いますが、
プログラムが自動でPOST送信する方法ありますでしょうか。

GET形式の場合は、"http://xxx/xxx.cgi?xxx=xxx"
wget すればよいでしょうか。

よろしくお願いします。

148 :nobodyさん:2006/12/02(土) 02:43:19 ID:???
>>147
GETの場合そのとおり。「送信」はURL encodeしる。curl なら
curl -d xx=送信(URL ncodeしる) "http://xxx/xxx.cgi"
でPOSTできる。ってかここperlスレなんだが。
LWPでもできるよ。

149 :nobodyさん:2006/12/02(土) 08:58:16 ID:???
>>147
LWPっていうモジュールがあったんですね。
こういうのが知りたかったんです。
ありがとうございました。

150 :nobodyさん:2006/12/02(土) 11:24:22 ID:???
WindowsでCGIを作っています。
GDで日本語文字列を出力したいのですがうまくいきません。
現状、stringTTFメソッドでTrueTypeフォントのパスを指定してるのですが(WindowsのFontsフォルダ内)
エラーは出ないものの「・・・」といった出力にしかなりません。英数字でも同様です。
Winで画像出力の際にbinmodeを指定するような感じで
何かあるのかも、と思って調べてるのですが・・・
ちょっと漠然としていますが、チェックポイントなど気がついた方いましたら
おしえてください。よろしくおねがいします。

151 :nobodyさん:2006/12/02(土) 12:46:30 ID:???
自作の関数で、エラーのときにエラーメッセージを返したいときに、
$@とか勝手に上書きしたらまずいですか?
#やってみたらできましたが・・
何か専用の特殊変数ってありますか?


152 :nobodyさん:2006/12/02(土) 13:03:38 ID:???
$gErrStr のようなエラー用のグローバル変数を用意するか、

my $err = &testfunc(\$ret, \$val1, \$val2);

のように渡して、戻り値は \$ret へ入れて、エラーコードとこエラー文字列は $err に返す
といったことも出来る

エラー無しの場合は $err は undef であるか "" または 0 です。

153 :nobodyさん:2006/12/02(土) 13:23:08 ID:???
どうもです。
関数はモジュール化したいので、自前のグローバル変数は使いたくないんですよねえ。
しかもオブジェクト指向にしたいんですが、returnでエラー返す以外に
定番の方法ってないですか?

154 :nobodyさん:2006/12/02(土) 13:29:26 ID:???
エラーメッセージを取得するメソッドを定義するとか、Error.pm使う前提で例外に
しちゃうとか。


155 :nobodyさん:2006/12/02(土) 14:11:21 ID:???
Perlはそんなに厳密にオブジェクト指向で書ける言語じゃないよ。そういうのが希望なら、RubyとかJavaやった方がいい。

156 :nobodyさん:2006/12/02(土) 14:25:39 ID:???
うーん、どうしようかなー

157 :nobodyさん:2006/12/02(土) 14:27:33 ID:???
>>153
結果をオブジェクトで返したらどうか
正常ならnew HogeResultして情報をそれに格納し、そのリファレンスを返す
エラーなら文字列を返す
受け取り側は
my $res = getHoge($foo);
if (ref $res) {
 # 成功
} elsif {
 # 失敗
}

158 :nobodyさん:2006/12/02(土) 14:41:08 ID:???
ほほう、ref関数の使い方を初めて知った。
ありがとうございます・

159 :nobodyさん:2006/12/02(土) 16:25:39 ID:???
いくら勉強しても次々に知らないことが出てくるんですが、
Perlをすべて把握している人って世の中にいるんでしょうか。
オライリーさん以外に。

160 :nobodyさん:2006/12/02(土) 16:41:38 ID:???
そんなの誰もいないだろ。PerlコミュニティはLarryでも把握しきれない規模だろうから。
たとえばEncodeだけに限っても、メインのメンテナーのdankogai以外にも何人もかかわってる。
個人ですべてを把握するのは無理じゃないか?

# オライリーさんって誰? Tim O'Reillyのことか?

161 : ◆TWARamEjuA :2006/12/02(土) 18:48:07 ID:???
オライリーオライリー♪
ワタシニ電話シテクダサイ ドーゾヨロシク♪

162 :JAPU ◆lVJAPUTeX. :2006/12/02(土) 20:09:06 ID:???
ごきげんよう。

>>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; } }


163 :nobodyさん:2006/12/03(日) 01:37:01 ID:???
連続投稿10秒規制を付けたいのですが
どのようにすれば良いでしょうか?

if(現在の時間 - 最終投稿時間 < 10秒)er{エラー}

このような感じでしたいのですが
最終投稿時間の取得はどのようにすれば良いでしょうか?

164 :nobodyさん:2006/12/03(日) 02:25:35 ID:???
クッキーか、最新投稿100件ぐらいを別ファイルに保存
(クッキーが処理できない場合は投稿そのものを拒否)

165 :nobodyさん:2006/12/03(日) 02:49:58 ID:???
>>163
いろいろ調べたんだね。えらいぞ。

これはぼくの想像だけど、恐らくは既存の何がしかの Web アプリケーションに機能追加しようとしているんだね。
そしてその機能は(恐らくは同一端末からの)投稿間隔が短くなりすぎないように制限したい、とそういうわけだ。
で、不明点が「最終投稿時間の取得」方法ということだけれど、「取得」というからには保存しているのだろうね。
「現在の時間」は恐らくアプリケーションが動作する機械のシステム時刻なので、そこから取ってくることができるけれど、あなたのアプリケーションにおける特定端末からの投稿履歴は、あなた以外に面倒を見てくれる人はいないはずなので保存しているはず。
保存の目的がそもそも「最終投稿時間の取得」なのであれば、そこから取り出す事も考えていたはずですよね。

あとはそのようにコードを書くだけだよ。がんばって。

166 :nobodyさん:2006/12/03(日) 03:31:47 ID:???
>>163
セッション管理しているかどうかで変わってくる。
セッション管理不可な場合、IPアドレスで判断することになるかな。
単純にIPアドレスに対応するファイルを更新して、そのファイルのタイムスタンプと比較するのは簡単だね。
ただし、プロキシ経由のクライアントは一緒くたに判断されちゃうかな。

セッション管理してれば、セッションに関連づけて何らかの方法で更新時刻を保存するんだろうね。

なんか抽象的な答えだな。
色々やり方があると思うんだが、アプリケーションの要件用途で適切な道具は変わってくるからね。

167 :nobodyさん:2006/12/03(日) 08:01:07 ID:???
>>165-166
とりあえず日本語の勉強だぜ?

168 :151:2006/12/03(日) 10:08:46 ID:???
$@でエラーを返す件、自己レス。evalで呼ぶときには
evalが正常時に$@を初期化してしまうので、呼び側で配慮が必要ですね。

sub hoge {$@ = 'hoge'; return}
eval '&hoge(); $gERROR = $@';
$@ and die;
print $gERROR if $gERROR;

169 :nobodyさん:2006/12/03(日) 17:00:34 ID:???
>>150
文字コードをutf-8に
>>155
そうでもない

170 :nobodyさん:2006/12/03(日) 19:59:04 ID:???
まあ自分一人でしか使わないんだったら御自由にってとこだが
>>168
呼び出し側に配慮が必要って時点で止めないか?普通。
お前さんが体感した通り $@ を書き換えるのはお行儀が悪いし呼出側に負担を強いる。

171 :nobodyさん:2006/12/03(日) 22:05:01 ID:???
「ご自由に」と言って頂いている前提で反論しますが、
数件、代案を教えて頂いた限りで、「エラーは$@を参照してくれ」という
取り決めが一番呼び側の負担が少ない気がするのですが、どうでしょう。
$@はevalとバッティングするのでevalの場合のみ168のように書かなければ
ならないことは、もし説明がなかったとしても自明なことのように思います。
ほかに$@を使うデメリットってあるでしょうか。

172 :nobodyさん:2006/12/03(日) 22:15:17 ID:???
あ、ref関数を参照させるのは行儀もよく、負担も少ないかも知れないとは思います。
だったらそうしろよ、って話なのですが、本当にそれでいいのか、検討しているところです。


173 :nobodyさん:2006/12/04(月) 00:26:50 ID:???
>>171
本当に「エラー」ならば Carp or wanings ( $SIG{__WARN__} ) に任せれば?
もしくは誰かがレスした Error.pm
単なる「制御上のメッセージ 」を返したいならば戻り値を下みたいな
ref にしちまえばいいだけじゃねーの?
return { 'data' => undef, 'msg' => 'お前さんの望んだメッセージ' } ;

$@ に関するルールを変更してまで $@ を参照させるってのは傲岸に
感じる。上の例で云うと前者には用意がされてるわけだし、後者は
エラーですらない。
CPAN でそんなモジュールに当った事がないがそういうモジュール
に当ったら、別モジュールを探すなあ。
そういうモジュールがあったら後学のために教えてください。

174 :nobodyさん:2006/12/04(月) 00:33:59 ID:???
eval で catch したいなら素直に die したらいいじゃない。
死にたくないなら生きればいいじゃない。

175 :nobodyさん:2006/12/04(月) 16:55:58 ID:???
HTMLで、フレーム表示させたいんですが、
どういうふうにすればよいのでしょうか?

index.htm(フレームについて書いたページ)
^^^^^^^^^^|^^^^^^^^^^^^^^^^^^^^|
メニュー | メインページ   |
menu.htm | main.htm     |
     |          |
     |          |
     |          |
     |          |
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

普通一ページだけだったら、
print <<"HTML"
<html>
・・・
</html>
HTML
ですよね。

print <<"HTML"
#indexを書く
HTML
print <<"HTML"
#menuを書く
HTML
print <<"HTML"
#mainを書く
HTML
これだけで、OKでしょうか?
よろしくお願いします。

176 :nobodyさん:2006/12/04(月) 17:08:08 ID:???
>>175
それぞれのxx.htmに対応するcgiを用意する。
複数用意するか、なんかパラメタ与えて動作を
切り替えるかはお好みで。

クライアントからは別々にリクエストが来るので、
情報をひきつぎたければそれもパラメタで引き継ぐ
とかセッション使うとかいろいろ必要。

たぶん質問の仕方からいってこの辺の仕組みは
すぐには理解できないと思うので地道に勉強して
くれ。


177 :nobodyさん:2006/12/04(月) 17:27:59 ID:???
つか、フレームは時代遅れ

178 :nobodyさん:2006/12/04(月) 17:52:25 ID:???
>>176
ありがとうございます。
ちょっとずつ勉強してみます。

>>177
なるほどぉ。
フレーム使わない方法もありますね。

179 :nobodyさん:2006/12/04(月) 18:23:52 ID:???
フレームはstrictじゃないから使わないほうがいい

180 :nobodyさん:2006/12/04(月) 18:24:06 ID:???
>>178
で、いつ Perl の話になるんだ?ならないんだったらスレ違いだから。

181 :nobodyさん:2006/12/04(月) 21:26:59 ID:???
こっちで、質問していいのかわかりませんが
ActivePerl Build 819 MSWin32
には、HTML埋め込み型のaspl(C:\Perl\eg\PerlEx\examples.aspl)とか
あるんですが

Apache(Linux系)とかでも、埋め込み型で動かせるのって
なかったでしょうか?
昔に、そんなのがあった気がするんですが
名前が思い出せなくて

182 :181:2006/12/04(月) 21:29:45 ID:???
すみません
思い出しました。
Embperlとかでした

183 :nobodyさん:2006/12/05(火) 00:10:37 ID:???
$str = "AoUDqGrsqcUSgVGsCphafNXhkEtsfCcANeLDsTFq";
$str =~ s/[C-G][pqst]/1-9/g;
print $str;

置き換えたところ1から9と順に置きかえたいのですが
置き換えた部分すべて1-9と表示されてしまいます。
どの部分を変えればよいのでしょうか??

184 :nobodyさん:2006/12/05(火) 00:35:41 ID:???
>>183
これがお望みのものか?

$str = "AoUDqGrsqcUSgVGsCphafNXhkEtsfCcANeLDsTFq";
$cnt = 1 ;
$str =〜 s/[C-G][pqst]/$cnt ++/eg ;
print $str . "\n" ;

185 :183:2006/12/05(火) 00:43:04 ID:???
>>184
すっげぇ簡単ですね・・・できない自分にショックです。
教えてくれてありがとうございます。

186 :nobodyさん:2006/12/05(火) 01:58:21 ID:???
正規表現中でインクリメントって出来るのか
知らなかった (;゚Д゚)

187 :nobodyさん:2006/12/05(火) 02:21:49 ID:???
まあPerlの正規表現に慣れると、PHPのpreg_なんとかって、てんでウンコだね。

188 :nobodyさん:2006/12/05(火) 02:23:05 ID:???
画像を連続で出力する時、以下の場合だと画像名が同一で
後から送られてきた画像が上書きされてしまいます。

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・・・のように連番で保存させたいのですが
どこを変えればいいのでしょうか?
よろしくお願いします。

189 :nobodyさん:2006/12/05(火) 04:54:50 ID:???
初めてのperlの練習問題で、引数で指定したファイルの
最後の行から順番に表示するってのがあって、答えは納得できたのですが
↓でうまくいくのが、foreachをwhileにするとうまくいかない理由がわかりません
reverseがなければwhileでもエラー出ないのですが・・・
何故なんでしょうか?よろしくお願いします

foreach (reverse <>) {
chomp;
print "$_\n";
}

190 :nobodyさん:2006/12/05(火) 12:05:35 ID:???
>>189
それ、あなたの期待する $_ もしくは @_ への代入が実行されてない。
以下が機能しないのと同じこと。
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 $_ ; }
別のお話しになってしまうので説明割愛。

191 :nobodyさん:2006/12/06(水) 00:09:51 ID:???
>>186
> 正規表現中でインクリメントって出来るのか
> 知らなかった (;゚Д゚)

s/// 式の右部分は正規表現じゃないということも知らなかったんだね。ふぁいと。

192 :nobodyさん:2006/12/06(水) 00:57:09 ID:???
…言われて見ればそうだね・・・orz

193 :189:2006/12/06(水) 05:32:50 ID:???
>>190
ありがとうございました
同じように使われることはあるけど
そもそも機能がかなり違うのですね
勉強になりました

194 :nobodyさん:2006/12/06(水) 17:53:32 ID:???
$a = "1167354687","3546879867321","735246;
1 while $a =~ s/(.*\d)(\d\d\d)/$1,$2/;

配列の最初の部分しか出力されないのですがどうしたらよいでしょう?

195 :nobodyさん:2006/12/06(水) 18:14:05 ID:???
配列について勉強し直してはどうかな。

196 :nobodyさん:2006/12/06(水) 19:17:48 ID:???
>>191-192
わかってると思うけど、式が評価されるのは /e オプションの効果です。
ただ単に右部分に式書いても評価されないので注意。

>>194
まず書いたスクリプトが動くかどうか確かめましょう。

197 :nobodyさん:2006/12/06(水) 23:57:05 ID:???
ブラウザ上で更新したcsvファイルを
即時別のサーバーへftp接続してアップロードしたいと思っています。
サーバーにNet::FTPをインストールすることができない状況で可能ですか?
良い手があれば教えてください。
サーバーのOSはSolaris9、CGIバージョンは5.8.8です


198 :nobodyさん:2006/12/07(木) 00:53:15 ID:???
flockについて質問です。

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で止まりますか?

よろしくお願いします。

199 :nobodyさん:2006/12/07(木) 01:38:36 ID:???
プロセスがexitする時、全てのファイルはcloseされる。

200 :nobodyさん:2006/12/07(木) 01:41:43 ID:???
プロセスが死ねばロックも解除されます
で、flockはアドバイザリなのでflockを使ってないプログラムなどからは問答無用で読み書きできます

201 :nobodyさん:2006/12/07(木) 07:35:05 ID:???
たとえプロセスが死んでなくても再びopenされるときにcloseされます

202 :nobodyさん:2006/12/07(木) 11:11:15 ID:SekHzZx8
shift JISのページに設置したテキストボックスのボタンを押すと、euc-jpのページ
で使われている検索エンジンにジャンプし検索結果を表示したく思います。
今のままですと、文字化けが起きてしまいます。

(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に変換してから変換させたい
のですが、どのようなコードを書いたらよいでしょうか?

203 :nobodyさん:2006/12/07(木) 11:26:48 ID:???
Encodeで変換後にURLエンコードしてリダイレクトが簡単かと思う

204 :nobodyさん:2006/12/07(木) 11:27:17 ID:???
テンプレぐらいは読みましょう
こっちのスレのほうがオススメ
http://pc8.2ch.net/test/read.cgi/php/1145308869/

205 :nobodyさん:2006/12/07(木) 12:06:04 ID:???
>>203-204
ありがとうございます。

206 :nobodyさん:2006/12/07(木) 16:35:47 ID:???
>>200
そうなのか。
それは知らなかった…。

質問なのですが、

・Perl で flock したファイルを php で読み書き。
・php で flock したファイルを perl で読み書き。
・test1.cgi で flock したファイルを test2.cgi で読み書き。

この場合って、正常にロックはされるのでしょうか。


207 :nobodyさん:2006/12/07(木) 16:40:00 ID:???
>>206
flockがちゃんと動作する環境で正しくプログラムかけば。

208 :206:2006/12/07(木) 16:53:51 ID:???
>>207
なるほど
私はflockがちゃんと動作する環境で正しくプログラミングしていると思われるので大丈夫ですねb

安心致しました^^


209 :nobodyさん:2006/12/07(木) 18:20:59 ID:???
>>199
>>200
>>201
お礼遅れました。
flockわかりました。
ありがとうございました。

210 :nobodyさん:2006/12/07(木) 20:53:15 ID:???
WindowsXP上でコマンドプロンプトを作業ディレクトリの指定なしに起動させて、
プロンプトに最初から 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 を返して欲しいのです。
どなたかご存じでしょうか。

211 :nobodyさん:2006/12/07(木) 21:02:43 ID:???
>>210
perl -MWin32 -MCwd -e "print Win32::GetShortPathName(cwd)"
でも何に使うの?

212 :210:2006/12/07(木) 21:52:30 ID:???
>>211
おお素晴らしい。ありがとうございます。
ファイルメーカーPro内で外部コマンドを呼べる外部関数(Peta-Execute)があるんですが、
この中で短いパスで呼ばないとコマンドが動かないみたいなんです。長いパス付のコマンド
(というかperlの第一引数となるplファイル)にダブルクォーテーション付で呼んでも動作しなかった
ものですから。Winの問題なのか、関数の問題なのか、ファイルメーカーProの問題なのかわからず、
今試行錯誤中です。

213 :nobodyさん:2006/12/07(木) 23:14:06 ID:SekHzZx8
perlの質問になるか微妙なところですが、


<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」が受け取れない状況です。

214 :nobodyさん:2006/12/07(木) 23:17:11 ID:???
ボタン → button
まず英単語からな


215 :nobodyさん:2006/12/07(木) 23:30:43 ID:???
>>213
微妙どころか全然Perlから離れとるがな(´・ω・)

<input type="hidden" name="img_botan" value="OK">
<input type="image" src="hogehoge.gif">

216 :nobodyさん:2006/12/07(木) 23:56:27 ID:???
submitはnameの値を見るといいよ

217 :nobodyさん:2006/12/08(金) 09:56:10 ID:ewFyIfPg
http://www.matubusi.com/cart/cgi-bin/kaitori.cgi?id=5
ここの買取口数とメールフォームの口数を買い取り口数にマイナスする計算の連動
似たようなスクリプトありませんか?もしくは作れますか?
よろしくお願いいたします

218 :nobodyさん:2006/12/08(金) 10:03:05 ID:???
やりたいことをもっと具体的に書け

219 :nobodyさん:2006/12/08(金) 10:48:17 ID: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を使えば解決するのは分かってました。
ごめんなさい。

220 :nobodyさん:2006/12/08(金) 11:25:23 ID:???
>>219
もともとイメージマップの機能だから値はボタンを押したときの画像内でのマウス
カーソルの座標が送られてくるんじゃなかったっけ。どのボタンかを識別する
用途ならnameを一意につけて値のありなしだけ判定すれば分だと思われる。


221 :nobodyさん:2006/12/08(金) 14:19:44 ID:???
>>220
ありがとうございました!

222 :nobodyさん:2006/12/08(金) 14:31:08 ID:???
YouTubeの動画掲示板を作ろうと思ってます
例えば書き込みの際、動画場所を
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

のように飛び先のアドレスに変換するにはどうしたらいいのでしょうか?
分かりづらくてすいません。

223 :1/2:2006/12/08(金) 15:14:42 ID:EPvPWdgJ
すみません、質問させてください。

ttp://www.nishishi.com/cgi/tinyurl/
ここのcgiを設置したのですが、設定ファイルをfileopenする所でエラーになるようです。
(配布されている状態のままアップすれば動くはずなのですがエラーになりました)

原因としては何が考えられるでしょうか?

環境:Windows IIS 6.0
   Activeperl 5.6.1

224 :2/2:2006/12/08(金) 15:15:52 ID:???
多分ここでエラーになっていると思うのですが↓

# -------------------------- #
# データの読み込みと一致確認 #
# -------------------------- #
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;
}

-----
よろしくお願いします。

225 :nobodyさん:2006/12/08(金) 15:50:17 ID:???
>>223
作者に聞けよ・・・

226 :223:2006/12/08(金) 16:13:02 ID:???
すみません。質問書いた直後に自己解決しましたorz
サーバの設定により、設定ファイルのパスをフルパスで設定する必要があったようです。
お騒がせ&スレ汚しすみませんでした。。。

227 :nobodyさん:2006/12/08(金) 17:01:59 ID:???
>>222
マルチポスト乙

228 :nobodyさん:2006/12/09(土) 03:02:11 ID:MKj32g5X
質問です。
perlのセッション管理について教えてください。
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が作成されますが、ブラウザで実行するとなぜか生成されません。
どなたか教えて頂けませんか。

229 :nobodyさん:2006/12/09(土) 03:05:44 ID:MKj32g5X
すいません最後の2行間違いです 読み飛ばしてください;;

ブラウザだとセッションが保存されなくて困っています。

230 :nobodyさん:2006/12/09(土) 11:36:47 ID:???
セッションディレクトリをフルPATHで書いてみて

231 :nobodyさん:2006/12/09(土) 17:43:35 ID:???
セッションフォルダに書き込み権が無いんでしょ。

232 :nobodyさん:2006/12/09(土) 21:29:28 ID:???
>>222
↓のスレッドにレス付けておきました。

Perlについての質問箱 28箱目
http://pc8.2ch.net/test/read.cgi/tech/1162273941/


233 :nobodyさん:2006/12/10(日) 11:50:46 ID:Mfd0yjZD
Perlのオブジェクト指向について、インスタンスの変数名は何にしてる?例えば、日付取得モジュールで言うと、

例1:my $date = new Date;
例2:my $date_ins = new Date;
例3:my $date_obj = new Date;

例1だと、日付を格納する変数名と被るから、別の名前にしようと思うんだけど・・・
みなさんのご意見をお聞かせ下さい(´・ω・`)

234 :nobodyさん:2006/12/10(日) 13:38:22 ID:???
コーディングの質問をどうぞ
スタイルはご自由に

235 :nobodyさん:2006/12/10(日) 14:14:09 ID:???
1か3が好み。間接オブジェクトはやめれ。
$date = Date->new;
$data_obj = Date->new;

236 :nobodyさん:2006/12/10(日) 14:16:42 ID:???
my($nam, $date, $name, $email, $d_may, $comment, $url, $font, $ico, $type, $del, $ip) = split(/<>/, $line);

上のようなコードで、$date を受け取れますが、$date のみを受け取りたい場合にはどうすれば良いのでしょうか?

他を $hoge とかにすればいいという考えもできますが、それだと一度変数にいれるという処理が無駄であり
高速で処理をしたいので処理速度低下に繋がると思います。

シンプルな方法があれば教えて下さい。

たしか、変数部分に何かの定義済み定数をいれたら、その部分を受け取らないということになったようなきがしたんですが、
忘れてしまいましたorz

237 :nobodyさん:2006/12/10(日) 14:28:59 ID:???
my $date = ( split /<>/, $line )[1];

my( undef, $date ) = split /<>/, $line;

my( undef, $date, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef) = split /<>/, $line;

238 :236:2006/12/10(日) 14:34:16 ID:???
>>237
なるほど
undef でしたか…。
こんなに早く回答をいただけるとは幸いです。
ありがとうございました。


239 :nobodyさん:2006/12/10(日) 15:35:39 ID:???
perlのcryptが異常に遅いのですが、なんとかならないでしょうか?

今時貧民的プログラミングをする必要はない、ログやロジックはシンプルにした方が良い、と思って掲示板作ったんですが、
速度が異常に遅いんです。

原因調べたら、掲示板のID生産のために crypt を使っているのですが、そこがとっても遅いんですね。
それを外したら100倍近いスピードに。

ようするにIPからIDを生成のために crypt を使っているんですが、表示のたびに全員分の生成をするので時間がかかるんです。
高速で実行できる crypt モジュールみたいのはないでしょうか?




240 :nobodyさん:2006/12/10(日) 15:48:35 ID:???
> 表示のたびに全員分の生成をするので
書き込み時にcryptも作ってログに書けばおk。
time→書き込み日時も同様。

もしくは、ある程度ユニークな文字列が得られればそれで良いというのなら
cryptなんて使わなくても自分で適当なサブルーチン組めばいい。

241 :239:2006/12/10(日) 15:53:23 ID:???
>>240
> 書き込み時にcryptも作ってログに書けばおk。
やっぱそうですよね(´・ω・`)

もう完成しちゃったし使用を開始しているので既にログがある状態なんです

・ファイルを読み取ってIDをファイルに書き込むプログラムを作る
・それを使って既にあるログにIDを追加する
・掲示板CGIへの投稿時にログにIDを追加するようにする

面倒ですが上の手順でやってみます



242 :nobodyさん:2006/12/10(日) 16:04:54 ID:???
ログが永遠に保存されるような構造でないなら
・新規の書き込みにはcryptでID情報を追加
・既存のID無しログはいちいちcryptするか適当な嘘IDを表示
というようにしておけばそのうち古いログが流されて問題なくなるよ。

なお、ログの修正をするのなら一度落としてきてローカルでやるように。

243 :239:2006/12/10(日) 16:15:27 ID:???
>>242
なるほど…

ログは永久保存な仕様なんです
なので諦めてログ修正することにします

ローカルにはPerlとかインスコされてなくて面倒なので鯖でやることにします
専鯖なので負荷は余裕です>A<


244 :nobodyさん:2006/12/10(日) 16:27:25 ID:???
> ローカルにはPerlとかインスコされてなくて面倒なので鯖でやることにします
> 専鯖なので負荷は余裕です>A<

(゚Д゚)ハァ?

俺の中に僅かに芽生えていたこいつに協力しようという感情が消滅した。
後はもう勝手にやってくれ。

245 :nobodyさん:2006/12/10(日) 16:28:14 ID:???
2chの特定の板の全datファイルを定期的に取得したいのですが、参考になるサイトはありませんか?
2chに負荷がかからないように、差分のみを取得するようにしたいのですが。

246 :nobodyさん:2006/12/10(日) 16:53:29 ID:???
>>245
それで何をしたいのかにもよる。

247 :nobodyさん:2006/12/10(日) 16:58:21 ID:???
>>244
別にどっちでやったって関係なくね?
一度DLする意味が何処にあるんだろうか

248 :nobodyさん:2006/12/10(日) 19:12:06 ID:???
>>245
差分取得の参考にでもして。
ttp://makegumi.no-ip.info:8080/src/makegumi1702.lzh.html
ハナモゲラ追加すれば今でも使えるはず。
板のdat取得は、subject.txtよめばいだけだから。

249 :nobodyさん:2006/12/10(日) 22:53:28 ID:???
ファイルを開いて、中身を全部一旦取り込むっていうのは
open(EN,"hoge.txt");
@old = <EN>;
close(EN);
これで@oldにファイルの中身(複数行)全て入ってますよね・・・?
リファレンス見ていたら益々分からなくなってきた(´△`;)

hoge.txtの中身をhoge2.txtに移すっていうのをやりたいのだけど
・・・動かねぇorz


250 :nobodyさん:2006/12/10(日) 23:05:46 ID:???
my $buff;
open(EN,"hoge.txt");
read(EN, $buff, (-s EN));
close(EN);
でもおk


251 : ◆TWARamEjuA :2006/12/10(日) 23:48:32 ID:??? ?BRZ(6677)
qx|cp hoge.txt hoge2.txt|;♪
File::Copyとかとか♪

252 :nobodyさん:2006/12/11(月) 01:30:10 ID:???
>>250
レスありです。
読み込んだ@oldを新たなファイルに書こうとすると
1行しか書かれず。。。

もう訳が分からないのでシンプルにファイルリネームで対応しました・・・。

253 :nobodyさん:2006/12/11(月) 01:31:19 ID:???
そんなヴァカな…
読み込み&書き込みらへんのソース晒してみて

254 :nobodyさん:2006/12/11(月) 16:28:57 ID:???
某Osの某ブラウザで掲示板投稿すると「~」が全角に変わってしまいます
問題はurlのリンク記載なので修正すればいいと思うのですが、これがうまくいきません

以下の自動リンクの正規表現の置換部分で、リンクの記載内に「〜」がある場合、
強制的に「~」にする方法をご指導ください

$tmp_data =~ s/(https?\:\/\/[^\s|\:|\<]+)\.(\/?)([\-_\.\!\~\*\'\(\)a-zA-Z0-9\;\/\?\:\@\&\=\+\$\,\%\#]*)/<A HREF="$1.$2$3$4" TARGET="_blank">$1.$2$3$4<\/A>/ig;



255 :nobodyさん:2006/12/11(月) 17:28:11 ID:???
そんなマジカルなブラウザがあるのか

256 :nobodyさん:2006/12/11(月) 18:27:02 ID:???
はい、林檎さんの正妻です

257 :nobodyさん:2006/12/11(月) 18:44:20 ID:???
マジカルっつーか、Safariを始めとするOS Xの一部ブラウザでは
Shift_JISのHTMLで書かれたフォームから送信すると
そういう不具合が起こることがある。
Shift_JISとユニコードの変換を厳密にやりすぎるからとか
どこかで読んだような気もするがどこだったかは忘れた。

まあ「safari チルダ」あたりでググると対処法とか色々出てくるよ。


258 : ◆TWARamEjuA :2006/12/11(月) 19:51:49 ID:??? ?BRZ(6677)
んじゃ妾ってとこか?@FireFox(lzyc)

259 :nobodyさん:2006/12/11(月) 19:58:53 ID:???
くぐりました、今のところ良い方法が見あたりません
また探してはみます
利用者にあれこれさせるのは難しいので、置換部分の
アドバイスがありましたら宜しくお願いします

260 :nobodyさん:2006/12/11(月) 21:26:03 ID:???
ググれば置換に関する情報も出てくるはずだけどな。

ていうかShift_JISでフォームを書かなきゃいいんじゃね?

261 :nobodyさん:2006/12/11(月) 23:07:25 ID:???
検索文字列で 〜 にマッチするようにして、
置換文字列を 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;

262 :nobodyさん:2006/12/11(月) 23:27:08 ID:???
>>260
だめでした
>>261
いろいろ考えましたが、私とは次元が違いますね
凄い
有り難うございます

263 :nobodyさん:2006/12/12(火) 03:31:20 ID:???
multipleの受け取り方教えてください。
$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>

よろしくお願いします。

264 :nobodyさん:2006/12/12(火) 05:19:33 ID:???
CGI.pm使えば配列で取得できる

265 :nobodyさん:2006/12/12(火) 05:50:23 ID:???
>>264
ありがとうございます。
先ほど、CGI.pmで取得の仕方を解説してる
ページ見つけました。
動きが全然想像できないです。

CGI.pm使ってない方法検索しております。
よろしくお願いします。



266 :nobodyさん:2006/12/12(火) 09:42:44 ID:???
$forms{$name} = $val;
って感じで入れてると思うけど、簡単に書いちゃうと

if(deinfed($forms{$name}){
  $forms{$name} .= "\0" . $val;
}else{
  $forms{$name} = $val;
}

のようにして、取り出すときは

my @tmpdata = split(/\0/, $forms{'hoge'});

とすれば複数選択したデータが @tmpdata に入ります。
ただしバイナリデータに対しては有効な技じゃないし、入力されたデータに対して \0 の存在をチェックし
エスケープしてやるなどの対策も考慮してください。

バイナリデータとか不正なデータをとりあえず無視して動作を確認したいなら上記可能。 なはずです

267 :nobodyさん:2006/12/12(火) 10:31:41 ID:???
複数値を受け取るのは $FORM{'hoge'} だけと決まってるんだったら
配列に叩き込むほうが手っ取り早いしわかりやすいのかも。

if ($name eq 'hoge') {
  push @hoge, $value;
} else {
  $FORM{$name} = $value;
}

>>266 =~ s/deinfed/defined/ のcgi-lib.pl方式でもいいし、あとは質問者さんの好みで。

268 :nobodyさん:2006/12/12(火) 10:50:06 ID:???
なかなか面白い間違いをしてたなorz
訂正thx

269 :nobodyさん:2006/12/12(火) 10:54:18 ID:???
肝心なことが書き込まれてないが
hoge=hoge1とhoge=hoge2が順番に送られてくる
受け取ったものがhoge=hoge2になってるのは順番に同じ変数に入れてるから。
$hoge='hoge1';
$hoge='hoge2';
print $hoge;
こうなってるので後はどうするかは受け取り側で変えればいい。

270 :nobodyさん:2006/12/12(火) 20:02:31 ID:???
関数の引数に配列を使った場合、配列のn番目ってどう指定すればいいんですか?
例えば
&func(@list1,@list2);

としたら、funcの中で$list1[4]とか$list2[6]とかを参照したいんです。

271 :nobodyさん:2006/12/12(火) 20:12:36 ID:???
すればいいじゃない

272 :nobodyさん:2006/12/12(火) 20:48:08 ID:???
ヒント:
&func(\@list1, \@list2);


273 :nobodyさん:2006/12/12(火) 21:16:11 ID:???
>>270
&func( \@list1, \@list2 );

sub func {
  my( $list1, $list2 ) = @_;
  $$list1[4];
  $$list2[6];
}

274 :nobodyさん:2006/12/12(火) 21:23:56 ID:???
考えることをさせるためにヒントだけにしたのに…

275 :nobodyさん:2006/12/12(火) 21:50:20 ID:???
mkdir "foo/bar/baz"
ってやったときに、foo/barが存在しないとエラーで死ぬんだけど、再帰的に掘ってくれるような
モジュールってない?ないんなら自前で組んでもいいけど、あるんなら再発明したくないし。

276 :nobodyさん:2006/12/12(火) 22:12:56 ID:???
sub mkdir2{
my @subdirs = split(/\/, shift);

my $curdir = curdir();

foreach my $subd (@subdirs){
  mkdir $subd if !-e $subd;
  chdir $subd;
}

chdir($curdir);
}


277 :nobodyさん:2006/12/12(火) 22:14:40 ID:???
>>269
嘘こけ、順序は保証されてねーぞ。ブラウザの実装依存。

278 :nobodyさん:2006/12/12(火) 22:18:53 ID:???
こんなモジュールしかねえや
ttp://search.cpan.org/~stevan/Tree-Simple-VisitorFactory-0.10/lib/Tree/Simple/Visitor/CreateDirectoryTree.pm

279 :nobodyさん:2006/12/12(火) 23:15:54 ID:???
>>275
`mkdir -p foo/bar/baz`とかじゃ嫌?

280 :nobodyさん:2006/12/12(火) 23:16:19 ID:???
>>275
File::Path

281 :nobodyさん:2006/12/13(水) 04:02:25 ID:???
>>267
>>267
>>269
おかげさまで受け取り方良くわかりました。
ありがとうございました。

282 :nobodyさん:2006/12/13(水) 11:01:17 ID:???
>>275
File::Pathはデフォで入ってないっけ?

>>277
順序が保証されてるなんて書いてないだろ
順序は知らんがひとつずつ順番に入ってくるってのは合ってるんじゃね?

283 :275:2006/12/13(水) 15:21:34 ID:???
>276,278
ありがと。

>279
それやるとシステム依存するかなと思ってさ。

>280,282
ごめん、探し方が足りなかったみたい。吊ってくるorz

284 :nobodyさん:2006/12/13(水) 16:44:36 ID:???
数値を3バイト長でデータ化したいんですけど、packだけではできないんですか?

$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);

285 :nobodyさん:2006/12/13(水) 16:52:52 ID:???
4バイトにpackして1バイト削るとかは?


286 : ◆TWARamEjuA :2006/12/13(水) 22:36:29 ID:??? ?BRZ(6677)
24ビットにして以下(ry

287 :nobodyさん:2006/12/14(木) 13:53:01 ID:???
POSTでログインしてセッションが必要なサイトで
LWP::UserAgentなどを使用してCGIからアクセスするのは無理でしょうか?

一定時間経過するとセッションが切れて再ログインしないとダメだったり
サイト内での検索結果などをコピペするのがマンドクサイのです

288 :nobodyさん:2006/12/14(木) 16:20:40 ID:???
逆に8バイト長のデータ化はどうやったらいいのやら
やっぱ256**4で割るっきゃないか

289 :nobodyさん:2006/12/14(木) 22:55:01 ID:???
64bit整数が使えるのならpackのqやQも使えるのではないか?

290 :nobodyさん:2006/12/15(金) 03:08:09 ID:???
rand関数って、ポケットリファレンスでは指定値"まで"の
ランダム数値を返すとなっていたので、7年間ずっと
rand(3)は0〜3までを返すと思っていたのですが、実際は
3未満(つまりは2.99999...)だったんですね。

上記の場合だと、3が出る確率は限りなく少ないことになる
ので今まで面倒なことをしてましたが、これから今まで
書いたプログラムの見直しをするようになるっぽいです。

一応同じように思い込んでた人のためになればと書き込
んでおきました。

291 :nobodyさん:2006/12/15(金) 03:15:41 ID:???
>>290
ま、割と常識というかrand(3)で3は出ない

292 :nobodyさん:2006/12/15(金) 10:52:56 ID:???
substrで文字数をカットした場合に発生する文字化けを回避する方法を教えて

$sex = substr(キーワード, カット開始位置, 文字数);
print "$sex<br>\n";

とするとたまに改行タグがおかしくなってしまう


print "$sex.<br>\n"
とすると改行タグはちゃんとされるけど・が$sexの後に表示されてしまう

293 :nobodyさん:2006/12/15(金) 10:59:38 ID:???
文字コードがわからないとやりようがないし

294 :nobodyさん:2006/12/15(金) 10:59:58 ID:???
2byte文字に対応してるわけないだろ・・・常識的に考えて・・・
「perl substr 日本語」でぐぐるといい

295 :nobodyさん:2006/12/15(金) 12:26:12 ID:???
文字コードはシフトJIS

296 :293:2006/12/15(金) 12:49:12 ID:???
$from= 3;
$count= 5;
$s=~/(?:[\201-\237\340-\374]?.){$from}((?:[\201-\237\340-\374]?.){$count})/;
print $1,"\n";

297 :293:2006/12/15(金) 12:56:47 ID:???
あ、sオプションも要るか・・

298 :nobodyさん:2006/12/15(金) 13:54:29 ID:???
ttp://akebi.jp/support/cyclamen.cgi?log=perl&tree=r20

299 :nobodyさん:2006/12/16(土) 14:00:26 ID:???
urlデコードしたフォーム情報と、openしたテキストファイル(shift-jis)で
文字のマッチングしたいのですが、何をやってもうまくいきません。
どうか助けてください。

 <例>
 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);


300 :nobodyさん:2006/12/16(土) 14:02:20 ID:???
split(//,<AAA>)はsplit(//,<FILE>)の間違いです。

<訂正>
 open (FILE,"<:encoding(shiftjis)","text.txt");
 @aaa = split(//,<FILE>);
 if ($form{bbb} eq $aaa[0]) {
  print "一致";
 }

301 :nobodyさん:2006/12/16(土) 14:49:58 ID:???
>>299
なんか勘違いしてるっぽいので、
文章でどうしたいか説明して。

302 :299:2006/12/16(土) 16:25:29 ID:???
>>301
htmlのフォームに入力された文字と、txt(本当はcsv)のデータとが合致するときに、
なにかを表示するという簡易なデータベースを作っているところなんです。

 open (FILE,"<:encoding(shiftjis)","text.txt");
とかでtxtを開いて、クエリと合致するかどうかをみたいのですが、
cgi.pmでデコードした文字(クエリ)と、openで開いた文字の
デコード(?)が違うようで、他のコーディングとやらの
何をやっても一致しないという状態に陥ってます。

ものすごく初歩的・根本的な間違いをおかしているとは思います。

303 :nobodyさん:2006/12/16(土) 16:36:16 ID:???
>>302
text.txtのカンマ区切りのデータとフォームが一致するかを見たいということかな?
text.txtは1行のみ?
改行は入っている?
split /,/, <FILE>; じゃだめ?

文字コード気にする前に、単純な英数字で確認してみて。

304 :299:2006/12/16(土) 18:07:20 ID:???
>>303さん、ありがとうございます。

>>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}を表示しようとすると
文字化けが起こってしまいます。

305 :nobodyさん:2006/12/16(土) 18:35:53 ID:???
>>304
ひとまず、エンコードの処理を忘れて、全てのファイルの文字コードを統一して保存して下さい。
次にコードをシンプルにして、試してみましょう。

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の使い方教えてるところは参考にしないほうがいいと思われ。

306 :nobodyさん:2006/12/16(土) 19:07:56 ID:???
○ for( my $i = 0; $i < @aaa; $i ++ ){

307 :nobodyさん:2006/12/16(土) 20:54:54 ID:???
for my $i ( 0..$#aaa )
こっちのが書くの楽だろ常識的に考えて

308 : ◆TWARamEjuA :2006/12/16(土) 21:59:41 ID:??? ?BRZ(6677)
>>307
楽と云うよりも効率が良くなったからこちらの方が良さそうな。
という思想で。

それはそうともう $i とはもう書かなくなったよなぁ。。。
ついでに回数を指定したループも書かなくなったよなぁ。。。

309 :nobodyさん:2006/12/16(土) 22:24:50 ID:???
このスレでfor、foreach論争はやめてくれ

310 :nobodyさん:2006/12/16(土) 22:27:29 ID:???
↑ どこが論争だよ

311 :299:2006/12/16(土) 22:32:58 ID:???
>>305-307
アドバイスの通りにしたら無事解決しました。
結局エンコード云々はいじらないでよかったようです。

ありがとうございました。

312 :nobodyさん:2006/12/16(土) 22:42:14 ID:lMy9T+vR
(プログラム技術版で質問したところ、ここで質問した方がよいと言われたため、マルチポストしました)

perlに触れて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が存在するディレクトリは確認しました。




313 :nobodyさん:2006/12/16(土) 22:55:56 ID:???
for (keys %name){
&jcode::convert(\$name{$_},'sjis');
}

314 :nobodyさん:2006/12/16(土) 23:05:09 ID:lMy9T+vR
それでも文字化けします…。どうしてだろう。。

315 :nobodyさん:2006/12/16(土) 23:10:28 ID:???
>>314
ver6ぐらいからutfでないっけ

316 :287:2006/12/17(日) 12:12:23 ID:???
あーダメだ。Yahoo!JapanとかならOKだがログイン画面すら取ってこれない
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;

317 :nobodyさん:2006/12/17(日) 12:34:57 ID:???
>>316
とりあえず普通にアクセスしたときの通信をトレースして
それを忠実に再現するしかないんじゃまいか

318 :287:2006/12/17(日) 13:35:07 ID:???
>>317さん
やっぱ皆さんこういう高度なのもサクっと作ってcron自動化とかしてたりするんでしょうか

ID・PASSなどをフォームに入れるログイン作業程度なら、
ローカルHTMLのformにhiddenで入れてしまって、jsで一発ログインとかしてるのですが、
一定時間ごとに自動ログイン→一連の作業→処理保存までするのは難しいですね。
もっと色々頑張ってみます

319 : ◆TWARamEjuA :2006/12/17(日) 15:50:40 ID:??? ?BRZ(6677)
>>318
その点、LWPモジュールも然りサンプルが必ずと言っていいほど掲載されているので、熟読すると良いかもしれませんです♪@CPAN
あっと、そのときには、解説の英文を1から10まで読むよりも、サンプルを1から10まできっちりと読むと判りやすいかと♪

320 :nobodyさん:2006/12/17(日) 15:56:53 ID:8qXdAMYD
教えてください!
www.xxx.com/aaa.php?id=1&next=1
nextの1で処理を行っているのですが
リロードでも有効になってしまいます。
これを回避する方法などありますでしょうか。

submitからなら対策できるのですが、埋め込んだURLからは
どうしたら回避できるかわからず詰まっています。

321 :nobodyさん:2006/12/17(日) 15:58:27 ID:8qXdAMYD
かくとこ間違えました。すいません。。

322 :nobodyさん:2006/12/17(日) 22:23:05 ID:???
>>318
WWW::Mechanize とか

323 :nobodyさん:2006/12/18(月) 16:04:35 ID:otF+VpE2
質問させてください。

POSTで$nameを送信($nameは日本語)
    ↓
cgi側が$nameを受け取って、namelist.datをオープンして、$nameを書き込んでクローズ。
    ↓
namelist.datを開くと、日本語が%83g%83%7D%83gといった感じで書き込まれている。

これを直したいのですが、namelist.datに書き込む前にjcodeで変換しても駄目でした。
文字コードはsjisで統一してあります。どのようにすれば文字化けせずに書き込めるのでしょうか。

324 :nobodyさん:2006/12/18(月) 16:09:24 ID:???
受け取りと変換部分kwsk

325 :nobodyさん:2006/12/18(月) 16:27:36 ID:otF+VpE2
323です。解決しました。。URLデコード&エンコードが原因でした。

>>324
お手数かけました。

326 :nobodyさん:2006/12/18(月) 20:56:29 ID:???
sub disp_HTML {
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を出力するのとではどれくらい速度に違いが出たりするのでしょうか。

327 :nobodyさん:2006/12/18(月) 21:00:45 ID:???
エラー画面ということは、いろんな場所から呼び出される可能性があるので、サブルーチンにする。
またはテンプレート化する。
しかし、速度を気にするほど頻繁にエラー画面が出てしまう設計はどうかと。

328 :nobodyさん:2006/12/18(月) 21:03:25 ID:???
content-type が出力されたかどうかのフラグは保持しておいた方がいいよ

329 :nobodyさん:2006/12/18(月) 21:14:08 ID:???
>>327
どうもです。
エラーは極力でないように、悪意に対応できるようには作っているつもりなんですが
なんせ自分で一から作るのは初めてなもので、単純に速度が気になったのです。
それほどアクセスが掛かるようなものでもないですし、自分で使う分にはエラーなんて出さないように使うので
そんなに問題でもないんですが一応。

>>328
具体的にはどうすればよいのでしょうか。
print "Content-type: text/html\n\n";
はサブルーチンにせずに都度出力すると言うことでしょうか。

330 :nobodyさん:2006/12/18(月) 21:25:58 ID:???
フラグなんて不要
いちいちフラグ確認しないとダメな書き方はよほどおかしい

331 :nobodyさん:2006/12/18(月) 21:39:31 ID:???
>>329
処女作おめでとう。
速度なんか後回しで、まずは思うように作ってご覧。

そして、>>330が正解。
エラーチェックを全て終わらせてから出力をはじめよう。

332 :nobodyさん:2006/12/18(月) 21:57:14 ID:???
>>331
そうですね。そうすることにします。

ありがとうございました。

333 :nobodyさん:2006/12/18(月) 23:22:23 ID:???
サブルーチンが定義されているかどうかを調べるにはどうすればいいでしょうか。
条件として、サブルーチン自体にエラーがない保証というのがあり、
evalだと単純に$@の有無だけでサブルーチンの有無とすることができません。

シンボルテーブルを覗いたり、いろいろ調べてはいるのですが、よく分かりません。
シンボルのハッシュを参照したら、サブルーチンがないのに、参照したことによって
シンボルが追加されてしまうようです。
↑よく理解してないためか、そのように見えます。

ご助言いただければと思います。

334 :nobodyさん:2006/12/18(月) 23:23:54 ID:???
エラーがない保証がない、でした

335 :nobodyさん:2006/12/19(火) 00:17:15 ID:???
単純に defined(&subname) じゃダメ?

336 :nobodyさん:2006/12/19(火) 00:27:12 ID:???
>サブルーチン自体にエラーがない保証がない

どんな設計だ

337 :nobodyさん:2006/12/19(火) 00:39:23 ID:???
そういえばRailsスレはあるのにCatalystスレはないんだな。
やっぱ使ってる奴いないのか?

338 :nobodyさん:2006/12/19(火) 00:41:15 ID:???
> 単純に defined(&subname) じゃダメ?

できちゃいました。すみません。そんな簡単だったんですね。
シンボルテーブル参照は、単純にパッケージ修飾の仕方で間違ってたようです。
ありがとうございました。


339 :nobodyさん:2006/12/19(火) 06:32:32 ID:???
今北産業&流れを見ずにレス

>>316
LWPでhttpsはCrypt::SSLeayが要るんだけど、入ってないからダメって落ちじゃないよね?

340 :nobodyさん:2006/12/19(火) 09:33:57 ID:???
すごく初歩的な質問ですが、行き詰っていますorz

$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 指摘してください。

341 :nobodyさん:2006/12/19(火) 10:25:25 ID:???
数値以外が入るなら==じゃだめ。
つ eq、正規表現

342 :340:2006/12/19(火) 10:34:36 ID:???
Σ(゚Д゚|||)
試したら・・・できました。ありがとうございました! 勉強になりましたorz

343 :nobodyさん:2006/12/19(火) 10:44:06 ID:???
プログラミング初心者です。

mod_perlは、
はじめの一回コンパイル→メモリ上に常駐
とネットで解説されていたんですが、
perlでもコンパイルしたものを配ったりってできるんでしょうか?
ソースを公開しないで、スクリプトが配布できたら
いいなと思いまして。

344 :nobodyさん:2006/12/19(火) 11:15:24 ID:???
どこから突っ込んでほしい?

345 :nobodyさん:2006/12/19(火) 12:09:00 ID:???
Perlで言うコンパイルはその場合意味が違うよ
あと、コンパイルは同じ環境でやらないといかんから配布向きじゃない

346 :nobodyさん:2006/12/19(火) 12:10:49 ID:???
mod_perlがコンパイルしてmod_perlが常駐させるものでperlスクリプトが常駐できるものではない
(出来るには出来るがkillされるのがオチw)

347 :nobodyさん:2006/12/19(火) 15:31:43 ID:???
>>345
>>346
なるほどです。ソースは公開しないといけないんですね。

>Perlで言うコンパイルはその場合意味が違うよ
・コンパイルって、コンピュータ用のオブジェクトコードに
することでよかったですよね?

・Perlでおいコンパイルは、機械語に直したオブジェクトコードを
メモリに保存しておいて2回目の起動以降は、ソースにアクセスしないで
メモリのオブジェクトコード読んで実行するということでよかったでしょうか。

・機械語は機械語でもC、Perl、JAVAでできたものは、全く別物なんでしょうか。
こういうのはどうやって勉強すれば。コンパイラの本読むとわかるでしょうか。

なんかネットに書いていることをそのまま質問していて、
ほんとアレなんですが、よろしくお願いします。

348 :nobodyさん:2006/12/19(火) 15:44:15 ID:???
347です。
いろんなページさまよっているところなんですが。

JAVAは中間コードっていうのみたいですね。
C言語はexeファイルができます。
ちょっと手がかり見つかってきました。
JAVAマシーンが中間コードを読んで実行するみたいに、
mod_perlマシーンが、中間コードみたいなの動かすんでしょうか。

349 :nobodyさん:2006/12/19(火) 16:07:15 ID:???
つ チラシの裏

350 :nobodyさん:2006/12/19(火) 16:08:29 ID:???
mixiにでも書いとけ

351 :nobodyさん:2006/12/19(火) 18:18:58 ID:???
配列とrand関数を組み合わせたいのですが表示できません。
どうしたらよいでしょう?
@nakami = (0, 8, 4, 12, 23, 55);
foreach $aaa(@nakami){
if(rand $aaa){


352 :nobodyさん:2006/12/19(火) 18:34:27 ID:???
>>351
なにがしたいのでしょう?

353 :nobodyさん:2006/12/19(火) 18:54:33 ID:???
>347
ラストね
コンパイルの解釈はまぁ OK

Perl でのその解釈は mod_perl の解釈
CGI で動く perl はその都度コンパイルされます


354 :nobodyさん:2006/12/19(火) 20:41:11 ID:???
つ rand( @nakami );

355 :nobodyさん:2006/12/19(火) 23:24:08 ID:???
教えていただけないでしょうか。
log.txtを開いてハッシュとしてセットの上、ペアごとにズラズラ並べたいのですが、

open(f,"log.txt");
%file = <f>;
while ( ($key, $val) = each (%file) ) {print "キー $key 値 $val\n";}
close(f);

これだと何も反応してくれません。
間違ってるでしょうか?

log.txtの中身は、
"●●","A組","◎◎","B組","■■","C組",

といった感じです。


356 :nobodyさん:2006/12/19(火) 23:37:17 ID:???
>>355
ファイルから読み込んだ文字列は、そのままではリストとして扱われません。
文字列をハッシュ変数に代入しても意味がありません。

例えば、以下のような方法で、文字列をリストに変換する必要があります。

・split でカンマ区切りのリストに分解する(ただし二重引用符の除去が必要)
・Text::CSV_XS などのモジュールを利用する(二重引用符も考慮してくれるが少し大げさ)
・正規表現(http://www.din.or.jp/~ohzaki/perl.htm#CSV2Values)を利用する
・eval で評価する(読み込むファイルが外部からの入力を記録している場合は危険)

この場合、正規表現が一番現実的でしょうか。

357 :355:2006/12/20(水) 00:01:50 ID:???
>>356
ありがとうございます。
%file = <f>; ←こんな式はないんですね。お恥ずかしい限りです。

まだcgiを作っている途中で二重引用符を外す事はわけないですので、
最初の方法か、正規表現かで検討してみます。

わざわざすいません。

358 :nobodyさん:2006/12/20(水) 00:38:56 ID:???
区切りを改行にすれば%file = <f>;でいけるよ
もちろんキーにも値にも最後に改行がつくからchompとかしなきゃだめだけど
こんな感じで
●●
A組
◎◎
B組
■■
C組

359 :nobodyさん:2006/12/20(水) 00:50:18 ID:???
my %virtues = map { chomp; $_ } <DATA>;
print "$virtues{ONE}\n";
print "$virtues{TWO}\n";
print "$virtues{THREE}\n";
__DATA__
ONE
Laziness
TWO
Impatience
THREE
Hubris

なるほど。

360 :nobodyさん:2006/12/20(水) 07:51:48 ID:???
汎用性考えたらこっちだろ?(区切り文字はその時々だけど)

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


361 :nobodyさん:2006/12/20(水) 07:54:31 ID:???
「汎用性」じゃねえな。
「そこまでするなら」に代えてくれ

362 :nobodyさん:2006/12/20(水) 11:11:45 ID:S+pohGEQ
コーディングのときに検索エンジンにかかりやすくするにはどうしたら良いんですか?

363 :nobodyさん:2006/12/20(水) 11:33:14 ID:???
SEOでぐぐれ
びっくりするほどスレ違い

364 :nobodyさん:2006/12/20(水) 12:18:48 ID:???
>>362
とりあえず、ストリクトなHTMLを吐くように書けばいいと思う。

365 :nobodyさん:2006/12/20(水) 13:09:42 ID:???
>>364
少なくとも、ロボ物は適当で簡素なHTMLの方が拾ってくれたりするよ
<html>
<head>
<title></title>
</head>
<body>

</body>
</html>
こんな感じの

366 :nobodyさん:2006/12/20(水) 13:20:25 ID:???
それどこのクソエンジンだよw

367 :nobodyさん:2006/12/20(水) 14:02:06 ID:???
>>365
それストリクトじゃん。

368 :nobodyさん:2006/12/20(水) 14:35:34 ID:???
DOCTYPE が無いのに strict とか、もう一度勉強し直した方がいいと思うよ

369 :nobodyさん:2006/12/20(水) 14:54:20 ID:???
HTMLスレでやれ。

370 :nobodyさん:2006/12/20(水) 16:33:01 ID:???
ストラトスには憧れたな

371 :355:2006/12/20(水) 17:16:24 ID:???
>>356
>>358
>>359
>>360

サンキューです。無事完成しました。

372 :nobodyさん:2006/12/20(水) 20:05:38 ID:???
ストラトス・フォー

373 :nobodyさん:2006/12/21(木) 13:16:34 ID:???
掲示板で禁止ワードが多くなってきたので、禁止ワードだけを別ファイルに
して読み込もうと思ったのですが、

if (!open(WORD,"bad.txt")) { &error('データベース読取エラー'); }
foreach(<WORD>){
if ($name eq $_){ $name = "禁止";}
}
close(WORD);

この記述では反応してくれません。(errorはでません)
外部ファイルにする前はできていたのですがなにか書き方が違うのでしょうか・・・?
bad.txtの中身はすべて改行区切りです。
また名前欄に特化した禁止ワードなので、eqで問題ありません。
よろしくお願いします。

374 :nobodyさん:2006/12/21(木) 13:34:43 ID:???
chompしないと改行がついたまま

375 :nobodyさん:2006/12/21(木) 13:35:57 ID:???
改行

376 :nobodyさん:2006/12/21(木) 17:21:37 ID:???
またお世話になります

掲示板の本文中にurlがあったとき自動リンクさせますが、
jpg、png、gifのときは画像を小さく表示させたいです

正規表現で末尾を(jpg|png|gif) として区別しますが、
そうでない場合の表現はどうしたらいいですか?

377 :nobodyさん:2006/12/21(木) 17:25:31 ID:???
!

378 :nobodyさん:2006/12/21(木) 17:31:55 ID:???
>>376
他鯖の画像を無断リンクするわけ?

379 :nobodyさん:2006/12/21(木) 18:29:02 ID:???
普通の画像ならまだしも何か仕込まれてたりしたら見るだけで被害者が続出だな。
まさに阿鼻叫喚の地獄絵図ってやつだ。

380 :nobodyさん:2006/12/21(木) 19:11:28 ID:???
末尾を!(jpg|png|gif) と (jpg|png|gif) にしてみましたが、
画像でない方のリンクがなされません

ええと、自分のところのアップローダです
既に過去の掲示板投稿がたまっているので、アップローダ
において、リンクしてもらうようにするためです
これなら1発言中に何個画像があっても自由ですし、
組み込みより楽ですので

381 :nobodyさん:2006/12/21(木) 19:25:43 ID:???
例。
・regex1はかくかくしかじかです。
 \.(jpg|png|gif)$なURL。小さく表示させたいらしい。
・regex2を条件式として、これこれこういうif文を経由して自動リンクになるようにしています。
 regex1でないURL。<a href="$&">$&</a>、<a href="$1$2">$1$2</a>などにしたいんだと思う。

regex[12]をどう書いてるのかの記載があると、「画像でない方のリンクがなされません」ではわからんよ、
という印象を受ける人もぐんと減るんだと思う。

382 :nobodyさん:2006/12/21(木) 19:32:25 ID:???
>>381
正直余計わからんわw

リンクがされるかどうかは、正規表現にマッチするかどうかの判断でしょ?
まずURLは抜き出せるの?

383 :nobodyさん:2006/12/21(木) 20:15:23 ID:???
>>365
> 少なくとも、ロボ物は適当で簡素なHTMLの方が拾ってくれたりするよ

「の方が」 はありえない。


384 :nobodyさん:2006/12/21(木) 22:10:23 ID: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;
とやっています。
やってみると
白いページで止まってしまうのですが
お手数だと思いますが
正しいやり方を教えていただきますとありがたいです。

スレ違いでしたら誘導をお願いします。

385 :nobodyさん:2006/12/21(木) 22:42:34 ID:???
die(qq(Can't open "$file_name".));

386 :nobodyさん:2006/12/21(木) 22:50:08 ID:???
× while (read($champ1_image, $buffer, 1024)) {
○ while (read($image, $buffer, 1024)) {

387 :nobodyさん:2006/12/21(木) 23:01:44 ID:???
>>384
use CGI::Carp qw(fatalsToBrowser);
と書いておくと、エラーがブラウザに表示されるようになるよ。参考までに。

388 :nobodyさん:2006/12/21(木) 23:20:52 ID:???
>>381 >>382

$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末尾(拡張子)が画像とそうでないものを置換演算で並べて
やろうと思ったんです

389 :nobodyさん:2006/12/22(金) 01:00:50 ID:???
@list = ('test1', 'test2', 'test3',);
%hash = ('aaa' => @list);
$num = $hash{aaa};

これで、$numに3が入ってほしいんですが、test1が入ってしまいます。
%hash = ('aaa' => @list+0);
とすると3が入ります。
+0を付けなくても3を返してほしいんです。
助言をお願いします。

390 :nobodyさん:2006/12/22(金) 01:05:13 ID:???
scalar(@

391 :388:2006/12/22(金) 01:29:59 ID:???
一旦、urlを自動リンクした後、
さらに自動リンクした<a href>のタグと(jpg|gif|png)含むものをマッチさせ
その部分だけimg srcで画像表示させることにしました
お騒がせしました

392 :nobodyさん:2006/12/22(金) 11:06:11 ID:DIJoWwwO
助言お願いします。

grepで@namelistという配列に何個$nameがあるかどうか調べています。

$number=grep(/$name/, @namelist);

@namelistに様々な名前を入れてみたのですが、たまたま$name=キムタクと入れた
時だけ、@namelistにもキムタクがあるのにカウントしてくれません。(ネタじゃありません…)
まだ沢山カウントされない文字列があるのかもしれませんが、なぜ「キムタク」はカウントされなかったのでしょうか?
文字自体に問題があるのでしょうか?さっぱりです。。


393 :nobodyさん:2006/12/22(金) 11:09:46 ID:DIJoWwwO
あれれ…。「キタムラ」も駄目でした。カタカナはNGかと思ったら、「クサナギ」は
大丈夫でした。どういうことだ…

394 :nobodyさん:2006/12/22(金) 11:23:58 ID:???
>>392-393
たぶん文字っていうか文字コード
このスレの>>2-3に貼られてるサイトでも読んでこい

395 :nobodyさん:2006/12/22(金) 11:26:02 ID:DIJoWwwO
>>394
「文字コード」ですか?
「キムタク」も「クサナギ」も文字コードは同じですよ。
ですから文字コードの問題ではないのではないでしょうか。

396 :nobodyさん:2006/12/22(金) 11:40:31 ID:???
つ ダメ文字

でもキムタクってダメ文字じゃないような。

397 :nobodyさん:2006/12/22(金) 11:52:49 ID:???
SJISが代表的だが正規表現の中に何の対策もしないで埋め込むと問題がでる
文字を含んだ文字コードというのがあるのよ。

いいから>>2-3をきちんと読め。そういう反応するってことは読んでないだろ。
特にPerlメモ

ttp://www.din.or.jp/~ohzaki/perl.htm

の「日本語を扱う」のあたり。

398 :nobodyさん:2006/12/22(金) 12:19:49 ID:???
キムタクは「ちょ待てよ!」でマッチするんじゃ?

399 :nobodyさん:2006/12/22(金) 12:21:45 ID:???
正規表現にもダメ文字みたいなのあるのか。
覚えておこうっと。

400 :nobodyさん:2006/12/22(金) 12:30:46 ID:???
まずEUCに変換しないとな

401 :nobodyさん:2006/12/22(金) 13:49:50 ID:???
\Q \E とか。

402 :nobodyさん:2006/12/22(金) 14:15:14 ID:???
それもshift-jisだと何かがダメだったような。

403 :nobodyさん:2006/12/22(金) 14:28:59 ID:???
素直にgrep(index($_,'name')>=0, @array)でいいじゃん

404 :nobodyさん:2006/12/22(金) 14:48:59 ID: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で変換する方法はありますか?

405 :nobodyさん:2006/12/22(金) 17:44:39 ID:???
Encode::EUCJPMSでeucJP-msやCP51932が使えるようになるみたいです。
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拡張文字を食わされると困る模様。

406 :nobodyさん:2006/12/22(金) 18:10:36 ID:6wQis76n
>>405
ありがとうございます

やケもダメですね
Perlで全ての日本語の文字コード変換を行うことはできないのでしょうか?
入力される可能性のある文字についてみなさんどのように処理されていますか?

407 :nobodyさん:2006/12/22(金) 18:27:46 ID:???
日本語コードといっても機種依存文字の部分がバリエーション
けっこうあるし、unicode以前は統一されていた部分ですら
どうunicodeに対応させるかでさらに分裂してしまってる現状
なので個人的にはあきらめているな。

どうしても満足できなければ、自前で好きな変換表を定義してe
nc2xsでperlから使えるようにするのがいいんじゃないか。

いいのができたら公開すると世の中のためにもなる。


408 :nobodyさん:2006/12/22(金) 19:29:11 ID:???
Cモジュールの作り方がさっぱり分からん

409 :nobodyさん:2006/12/22(金) 22:04:52 ID:???
perlxstut, perlxs 辺り読めば分かると思うけど。

410 :nobodyさん:2006/12/23(土) 01:35:39 ID:rkaYYOb9
掲示板への投稿が一定数以上なければ、閲覧することが
できない制限をつけたいのですが、わかりません。
(来訪者の割りに投稿者が少なく、DOMを減らしたいため)
書込みルーチン内に、coookieを使って投稿カウントを保存
し、閲覧時にcoookieを読んで条件分岐すれば良さそうな気が
していますが、具体的にどうしたらよいのかわかりません。

「imgboard」で実現したいのですが。
http://www.big.or.jp/~talk/t-club/soft/mini_r6/index.cgi

いますが、

411 :nobodyさん:2006/12/23(土) 01:42:38 ID:rkaYYOb9
すみません。「いますが、」はゴミです。
coookie⇒cookieでした。失礼しました。

412 :nobodyさん:2006/12/23(土) 02:33:17 ID:???
> 具体的にどうすればよいのかわかりません。

わかってるじゃん。あとは、クッキーを読み書きする方法を調べるだけだろう。
「Perl クッキー」とかで検索すれば、すぐにわかるよね。

413 :nobodyさん:2006/12/23(土) 04:12:05 ID:???
(´-`).。oO(投稿しないと見れない掲示板にどうやって投稿するのやら…)

414 :nobodyさん:2006/12/23(土) 04:22:04 ID:???
>>413
ようするに、既にいる常連達とだけ馴れ合いたいってことだろ

パスワード制にすりゃいいのにね

415 :nobodyさん:2006/12/23(土) 07:57:13 ID:vvP1Ez0I
改造スレいけ

416 :nobodyさん:2006/12/23(土) 10:26:34 ID:9XJJytw/
LWP::UserAgentを用いてのPOST処理なのですが、multipleタイプのプルダウンメニューの内容全てを送るにはどうすればいいのでしょうか?

おなじnameで複数のvalueをPOSTする方法に悩んでいます。

417 :nobodyさん:2006/12/23(土) 10:31:34 ID:???
失礼しました。HTTP::Request::Commonも使っています

418 :nobodyさん:2006/12/23(土) 14:34:05 ID:???
PHPのmktimeやdate関数のように Y/m/d H:i:s を変換するスマートな方法はありますか?
Date::Simpleは何か違うような感じだったので


1900/01/01 12:00:00

01/01 12:00

419 :nobodyさん:2006/12/23(土) 14:36:03 ID:???
Date::Manipあたりは試した?

420 :nobodyさん:2006/12/23(土) 15:28:46 ID:???
区切り子が分かってるんだから自前で用意すれば?


421 :nobodyさん:2006/12/23(土) 15:49:44 ID:???
Date::Simpleは使いやすいけど、日にちまでなんだよな。
たくさんモジュール使っても混乱するだけだし。
いまだとDateTimeモジュールがベストプラクティスなんじゃないの。


422 :nobodyさん:2006/12/23(土) 16:14:47 ID:MDS/ay7M
Catalystにて
Apache2 + 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などのスクリプトの動きがおかしくなるのですが、
どのように解決したらよいでしょうか

423 :nobodyさん:2006/12/23(土) 16:43:07 ID:???
>>419
検索したけど具体的な使用例とか見つからず分かりませんですた。
でもありがとうございます。今度また調べます。

>>421
ありがとうございます。DateTimeはいい感じですね。
ttp://iandeth.dyndns.org/mt/ian/archives/000619.html

>>420
文字コード変換とかXMLパースとかも全部自前でやってろ(^ω^)

424 :nobodyさん:2006/12/23(土) 23:10:40 ID:HvJ8lenr
あるログHTMLファイルの一番最初の<b>名前<\b>にマッチングして
$1に放りこんであるものを
そのファイルの最後の<b>名前<\b>にマッチングさせてたいのだが、、、。



425 :nobodyさん:2006/12/23(土) 23:17:38 ID:HvJ8lenr
for ($i = 0; $i <= $#dir; $i++) {
($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);
}
#ソースはこんな感じ。

426 :nobodyさん:2006/12/23(土) 23:21:27 ID:HvJ8lenr
$resthred[0]=~ /<b>([^\<]*)<\/b>/;

ここらへんのメタキャラクタを^から$に変えるということでもないし。
そもそもこのインデックスナンバーの意味もわからないのだが、、、。

427 :410-411:2006/12/23(土) 23:40:58 ID:rkaYYOb9
>>412
レスありがとうございます。
考え方としては間違ってないということですね。

>>413
>(´-`).。oO(投稿しないと見れない掲示板にどうやって投稿するのやら…)

投稿していない段階では、新規書込画面しか出ないようにしたいのです。

>>414
>パスワード制にすりゃいいのにね
すでに導入しているのですが、カキコしてくれる人とそうでない人とに
不公平さが出てしまっていて悩んでいるんです。

428 :nobodyさん:2006/12/23(土) 23:46:08 ID:MDS/ay7M
ここ間違ってない?

$resthred[0]=~ /<b>([^\<]*)<\/b>/;
<b>名前<\b> なら こうじゃないかな?
/<b>(.+)<\/b>/

429 :nobodyさん:2006/12/23(土) 23:46:51 ID:???
もう少しデータの持ち方を工夫すると楽になると思うよ。


430 :nobodyさん:2006/12/24(日) 00:25:34 ID:AWC9vzHT
<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="

まあ要するに最初の<b>改編fdsfdfd</b>になってるものを
最後の<b>太郎 </b>がひっかかるようなマッチングをしたいだけなんですが
現状はこのメタキャラクタで最初の<b>~</b>で
きちんとひっかかる。

431 :nobodyさん:2006/12/24(日) 00:47:39 ID:???
日本語でおk

432 :nobodyさん:2006/12/24(日) 00:57:31 ID:???
そんな簡単なマッチも書けないやつが
スクリプトで2chに負荷かけそうで心配

433 :nobodyさん:2006/12/24(日) 01:10:15 ID:???
>>430
それちょっと前にも話題にでたけど、否定先読み使って
$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)};

434 :nobodyさん:2006/12/24(日) 01:12:35 ID:???
って書いてから思ったけど、今回のケースなら別に否定先読み使わなくても
m{<font color="forestgreen"><b>([^<>]*)</b>}
でマッチできるね(´・ω・)

435 :nobodyさん:2006/12/24(日) 07:03:20 ID:???
質問です

2項分布の計算をperlでやりたいんですが、一定の数値以上になると、階乗のところで変数の容量オーバー(? #INFとの表示)でおかしくなってしまいます

・変数の扱える桁数を大幅に増やす方法はありませんか?
・ExcelのBINOMDIST関数的なライブラリ(?)は無いのでしょうか

スレ違いだったらごめんなさい。よろしくお願いします

436 :nobodyさん:2006/12/24(日) 07:07:05 ID:???
>>435
bigintプラグマ(整数)
bignumプラグマ(実数)
実体はMath::BigIntやMath::BigFloat
他に分数で扱うMath::BigRatもある。

437 :nobodyさん:2006/12/24(日) 08:00:55 ID:???
>>436
ありがとうございます!

438 :nobodyさん:2006/12/24(日) 12:01:21 ID:AWC9vzHT
>>433-434
お答えくださってありがとうございます。
しかしなかなかうまくいかないので
プロにおまかせすることも検討してます。
やはり正当な知識には正当な料金というものが発生するものという
考えが正しいのかと。
それでは。

439 :nobodyさん:2006/12/24(日) 12:57:49 ID:???
>>438
料金云々の話は確かに間違いではないけど、何より>>424>>430の説明(≒仕様)がわかりにくいんです。
プロに頼むにしても仕様があやふやだったり後出しが続いたりすると「なかなか」なのは同じですよ。
「また仕変ですか」と呆れられたり値上がりしたりするだけですけど。

行末にある<b>太郎 </b>の「太郎 」が$1として使えるだけでいいんだったら
$ を書き足すだけでもいいのかもしれない。>>434が書いたものでうまくいかない理由は不明。
(実はcolor="forestgreen"じゃない場合があるとか、そんな問題のような気がする)

$resthred[0]=~ m|<b>([^<>]*)</b>$|; # スラッシュをエスケープするのが面倒です版
$resthred[0]=~ /<b>([^\<]*)<\/b>$/; # 元ソース使い回しました版

>>430の「最後の」が行末でも何でもない場合は、プロにお金を積む方向で。

440 :nobodyさん:2006/12/24(日) 14:06:39 ID:AWC9vzHT
度々お答えくださりありがとうございます。
やはりなかなかうまくいきません。
「最後の」というのは行末ということではなく
加工前のログにたくさんある<b>名前</b>のなかで最後の<b>名前</b>
=最新レスポンス者の名前をひっかけたいということです。
まあ、最初からそのログを改行して区分けするというやりかたも
ありだとは思いますが。
いろいろと模索中であります。
金云々にしてはすでに三十万近くかけて作らせてるものです。
私は多少のPerl/CGI知識を持っているのですが
運用に力をいれたいほうなので外注に頼ってるわけであります。



441 :nobodyさん:2006/12/24(日) 14:36:15 ID:???
>>440
こんなこと言うのもなんだが、
「運用に力を入れたいから知識はあるけど外注」ってレベルじゃないだろ。
その程度なら素直に信頼できる実績があるとこに外注がいい。

442 :nobodyさん:2006/12/24(日) 14:55:58 ID:AWC9vzHT
確かにその$resthred[0]=~ /<b>([^\<]*)<\/b>$/; で
おかしくはないと思うんですが
まあ、すべてのソースをみてのことじゃないからわかりませんよね。
よく元ソースを解読してから出直します。
結果としてそのファイルのあるフォルダ名が$restitleにはいってしまうので
別の問題にも思われます。
ここまで考えて改造費出すのも個人的に馬鹿馬鹿しいので
自分なりに実験してみますわ。
御意見ありがとうございました。


443 :nobodyさん:2006/12/24(日) 14:58:03 ID:AWC9vzHT
>>441
うるせえよ。
てめえに聞いてねえんだよ。
ガタガタ口はさむなクソが。
じゃあな。

444 :nobodyさん:2006/12/24(日) 15:04:54 ID:???
頭が悪いのにプライドが高いと大変だな。
哀れだがなにもしてやれん…

445 :nobodyさん:2006/12/24(日) 15:14:21 ID:???
441が回答してくれた人達かもしれないのにな

446 :nobodyさん:2006/12/24(日) 16:56:38 ID:???
30万って、二週分にも満たないハシタガネで何イキがっているんだろう...

447 :nobodyさん:2006/12/24(日) 17:10:57 ID:AWC9vzHT
結局、外注にしましたわ。
ただより高いものはない、なんて言うしな。
プログラミングは誰にこだわる理由はないし、
結果のでない親切より結果のでるお金だわな。
まあ、それはそれで駆け引きの技術だが。
てめえらもこんな腐れ掲示板で悪態奉仕活動してねえで
技術で金むしりとることに専念したほうがよくねえか?
俺が最初に頼んだ職人もそうだった。
あんまり調子こくんで他の外注にするつもりだが。
競争にさらされねえとそこらへんはわかんねえんだよな。

448 :nobodyさん:2006/12/24(日) 17:12:56 ID:???
態度の豹変ぶりに笑った

449 :nobodyさん:2006/12/24(日) 17:14:29 ID:AWC9vzHT
でもあれだね。
その職人もこういう掲示板とかで聞いたり他のソースを拾ったりして
やっつけ仕事とかしてやがんの。
おまえらそういう連中にも利用されてるんだよ。

450 :nobodyさん:2006/12/24(日) 17:21:57 ID:AWC9vzHT
だいたいここで張りついて親切に答えてる連中はプロじゃねえだろ。
そんで聞いてる連中が要領のいい継ぎはぎ職人のプロだったら皮肉で笑えるけどな(w

451 :nobodyさん:2006/12/24(日) 17:24:12 ID:???
>>449
その解釈は正確にはそれはちょっと違います。他ならぬ貴方からの依頼だからこそ
出来合いのソースを拾ってきてやっつけ仕事で片付けているんです。
つまり貴方はその程度の顧客です^^

452 :nobodyさん:2006/12/24(日) 17:28:48 ID:???
そんなエサに俺様がクマー

453 :nobodyさん:2006/12/24(日) 17:29:35 ID:AWC9vzHT
いやそれは俺がわざわざここから参考にしろってリンク張ってあげたんだよ。
フリーソフトの作者さんのサイトでねえ。
安い仕事だと思ったから。そこらへんまで譲歩したのだ。
無償のオープンソースを利用してるのはそういった要領のいいやつだ。
俺もそこらへんは共通の金銭の価値観なのでな。

454 :nobodyさん:2006/12/24(日) 17:35:09 ID:AWC9vzHT
フリーで作ってる連中に著作権とかぐだぐだ言われるとうるせえから
変数の名前だけ変えてフルスクラッチすればとか言ってやってな。
親切だろ。
まあ、というのも俺も金儲け目的のサイトをつくろうと思ってるから
投資は必要だしな。


455 :nobodyさん:2006/12/24(日) 17:37:16 ID:???
> 変数の名前だけ変えてフルスクラッチすれば
> 変数の名前だけ変えてフルスクラッチすれば
> 変数の名前だけ変えてフルスクラッチすれば

(゚Д゚)…!?

456 :nobodyさん:2006/12/24(日) 17:43:58 ID:???
KE○Tでも紹介したんですか?

457 :nobodyさん:2006/12/24(日) 17:45:50 ID:AWC9vzHT
聞いてる連中がどんな人間かわからん。
答えてる人間がどういう人間だかわからん。
ただよく無料で答えるなあとは思うわなあ。


458 :nobodyさん:2006/12/24(日) 17:50:31 ID:???
> いやそれは俺がわざわざここから参考にしろってリンク張ってあげたんだよ。
> フリーソフトの作者さんのサイトでねえ。
> 安い仕事だと思ったから。そこらへんまで譲歩したのだ。



> その職人もこういう掲示板とかで聞いたり他のソースを拾ったりして
> やっつけ仕事とかしてやがんの。



> 俺が最初に頼んだ職人もそうだった。
> あんまり調子こくんで他の外注にするつもりだが。

凄い釣りだぜ…。

459 :nobodyさん:2006/12/24(日) 17:51:40 ID:AWC9vzHT
>>456

いろいろ。
俺はねえ金を儲けたいのね。
ほんと正直な気持ち。
だから金使うのも筋だと思うわけ。
たとえ少額でも1円と無料には大きな開きがある。
君等もこんな腐れ掲示板はさっさと放棄して
私がこんどつくる掲示板を利用したほうがいいだろう。



460 :nobodyさん:2006/12/24(日) 17:55:19 ID:???
>>459
早く作れ

461 :nobodyさん:2006/12/24(日) 17:55:54 ID:AWC9vzHT
つまりなんかしら利益の還元があるCGIだねえ。
スロットマシーンのプログラ厶のようなものだ。


462 :nobodyさん:2006/12/24(日) 17:59:18 ID:???
主張が右往左往していて何が言いたいのか良く分からんな。
誰か3行くらいでまとめてくれない?

463 :nobodyさん:2006/12/24(日) 18:00:29 ID:AWC9vzHT
>>460

どうも俺はナマケモノでねえ。
先伸ばし、先伸ばしで五年はたつ。
しかしシステムは確立したよ。



464 :nobodyさん:2006/12/24(日) 18:01:10 ID:???
>>462
脳内
設定
爆発

465 :nobodyさん:2006/12/24(日) 18:06:43 ID:???
>>464
うはwwおk把握www

何か1ch.tvを思い出すなあ。

466 :nobodyさん:2006/12/24(日) 18:08:53 ID:AWC9vzHT

以前、このスレッドであるメタキャラクタを
聞いたときはたまたまいい回答が帰ってきて
もうけものだったのだが
やはり無料には限界があるようだな。
無料の限界=2chの限界=匿名の君等の限界だのう。


467 :nobodyさん:2006/12/24(日) 18:10:52 ID:AWC9vzHT
1chってあれでしょ。
利用者から金とるってやつだろ。
あんなものダメに決まってるじゃあないか。

468 :nobodyさん:2006/12/24(日) 18:13:51 ID:???
正確には『お前の俺らから情報を引き出す力の限界』だけどな。

469 :nobodyさん:2006/12/24(日) 18:14:43 ID:AWC9vzHT
なんだか
Perlコーディングスレなのに私の妄想のはけぐちスレにして
なにか申し訳なくってきたねえ。
まあそれも2chだからしょうがないのう。
すっきりするまでつきあってほしい。

470 :nobodyさん:2006/12/24(日) 18:15:46 ID:???
>>430 でも >>466 でもそうだけど、パターンとメタキャラクタの区別がつかないの?

471 :nobodyさん:2006/12/24(日) 18:17:28 ID:AWC9vzHT
情報って、、、。
なんかいい金になる情報なんかあるの?。
2chで金になる情報なんかあったためしがない。


472 :nobodyさん:2006/12/24(日) 18:29:11 ID:AWC9vzHT
>>470

つうか今それは問い合わせ中なのでまた今度な。
まあ、そのときは自己解決しましただろうけど。
求めるととこはプラスの結果だけ。
そういうプラスの結果を出すシステムを作りたかったのだ。
なにか答える。なにか結果を出す。なにか教えてくれる。
俺は金を請求するし金は払う。
それでおしまいだな。


473 :nobodyさん:2006/12/24(日) 18:30:56 ID:AWC9vzHT
まあ、質問には金が伴うほうを選ぶよ。
失礼しました。

474 :nobodyさん:2006/12/24(日) 18:30:59 ID:???
>>471
それは感性の違い。
感性の無い奴には泥まみれの宝石の原石は見つけられない。








と、釣られてみるテスツ

475 : ◆TWARamEjuA :2006/12/24(日) 18:35:02 ID:??? ?BRZ(6677)
(´-`).。oO(バブル脳の戯れ言か(嬉嬉嬉))

476 :nobodyさん:2006/12/24(日) 18:38:57 ID:???
>>472>>470 に対するレスとしては見当外れすぎてワロタ

477 :nobodyさん:2006/12/24(日) 18:41:03 ID:???
みんな暇なんだなと安心するクリスマスイブであった

478 :nobodyさん:2006/12/24(日) 18:47:14 ID:???
じゃあ質問させてくれ
文字列fooのあとに、bar以外の文字列が来て、しかも最後までにbazが現れないという
条件にマッチする正規表現が書きたくて、下のようなのを書いてみたんだけど。

/foo(?:(?:(?!bar)).(?<!baz))+$/

さすがにアレなんで、ちょっとどうにかならないものかなと。複数のパターンに分割するのはなしで。

479 :nobodyさん:2006/12/24(日) 19:01:58 ID:???
m{foo(?!bar)(?!.*baz.*$)}

480 :nobodyさん:2006/12/24(日) 19:06:21 ID:???
俺は面白い質問があれば答える。ただそれだけ。面白いなら宿題でも金儲けでもなんでもいい。ぐだぐだ言ってないでさっさと次の質問しろよ

481 :nobodyさん:2006/12/24(日) 19:08:59 ID:???
>>478
>>479 で正解が出ているけれど、実際問題、可能であれば分割した方が効率と可読性の両面から好ましい場合が多い気がするよ。

482 :JAPU ◆lVJAPUTeX. :2006/12/24(日) 20:55:14 ID:???
s{(https?://[A-Za-z0-9./_?=-]+)}{
my $x = $1;
$x =~ /\.(?:gif|png|jpg)$/? qq{<img src="$x" alt="">}: qq{<a href="$x">$x</a>}
}eg;'
正規表現部分は適当に置き換えて。


>>422
Location の中に全部入れれば?
ちなみに、mod_perlは必要な部分だけ分離 (別サーバにするかApache2個立ち上げるか) するのがお勧め。


483 :nobodyさん:2006/12/24(日) 22:15:47 ID:???
乗り遅れたが後悔はしない

484 :nobodyさん:2006/12/24(日) 22:28:56 ID:???
俺も乗り遅れたが後悔はしていない
ただ1つ書くなら・・・俺はこの板でスキルアップさせてもらってる


485 :373:2006/12/24(日) 23:22:02 ID:???
>>374 遅くレスすいません以下のようにしたんですが

if (!open(WORD,"bad.txt")) { &error('データベース読取エラー'); }
foreach(<WORD>){
chomp;
if ($name eq $_){ $name = "禁止";}
}
close(WORD);

これであってますか・・? と、いうか禁止ワードに反応なしなので
未だにできてません(´Д⊂)

486 :nobodyさん:2006/12/24(日) 23:40:55 ID:5VuL7TZS
>>485
$name に何が入ってるのかわからんけどさ
$name =~ /$_/ig;
にしたら?
iオプションは必要だけどgオプションが必要かどうかは自分で決めてね

487 :nobodyさん:2006/12/24(日) 23:44:25 ID: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);


488 :nobodyさん:2006/12/25(月) 02:20:59 ID:WCngGP1U
$fooにfooという文字列、$hogeにhogeという文字列が入っているとして、
$barにはfooを含む文字列が入っているとすると、

$bar =~ s/$foo/$hoge/;

としても置き換えはされないのですが、

$bar =~ s/foo/$hoge/;

としたら置き換えがされるのは何故でしょうか?
$fooが評価されていないということは分かったのですが、何故かが分かりません。

489 :nobodyさん:2006/12/25(月) 02:30:55 ID:???
>>488
ん?

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!

490 :nobodyさん:2006/12/25(月) 02:35:21 ID:WCngGP1U
>>489
なに・・・!
なぜでしょう・・・(´・ω・`)

実際のプログラム中ではオブジェクトとして扱っているのは関係あるのでしょうか?
($fooは実際は$self->{foo}->{bar}としている)

$bar =~ s/$self->{foo}->{bar}/$self->{foo}->{hoge}/;

491 :JAPU ◆lVJAPUTeX. :2006/12/25(月) 03:01:53 ID:???
>>486
g は全く要らない。
i は必要とは言えない。

>>488
実際には foo は日本語で、しかも Shift_JIS 使っているなら、
$bar =~ s/\Q$foo/$hoge/;
としてみては?

492 :nobodyさん:2006/12/25(月) 03:09:41 ID:WCngGP1U
>>491
日本語じゃなく、文字コードを指定していなかったんですけど、\Qを挿入したら出来ました・・・

\Q : \E までのパターン指定メタ文字の意味を打ち消す

(´・ω・`)ナゼ?

493 :nobodyさん:2006/12/25(月) 03:16:49 ID:WCngGP1U
$bar =~ s/$self->{foo}->{bar}/$self->{foo}->{hoge}/;において、$self->{foo}->{bar}にパターン指定メタ文字が含まれていたのでしょうか・・・

あ、ご解答下さったみなさん、ありがとうございました!

494 :nobodyさん:2006/12/25(月) 05:19:01 ID:???
s///e;

495 :nobodyさん:2006/12/25(月) 06:46:37 ID:85L6NXNb
>>491

>g は全く要らない。
>i は必要とは言えない。
gは全くいらなかったね置換するわけじゃないしね
iは日本語と決まってるならいらないだろうけどsexとかだったらいるんじゃねえ?

496 :nobodyさん:2006/12/25(月) 07:23:16 ID:???
sex!sex!sex!

497 :nobodyさん:2006/12/25(月) 08:45:43 ID:???
バカは回答すんなよ

498 :nobodyさん:2006/12/25(月) 13:28:03 ID:bvP5u9Gv
何故か「ー」の置換が出来ません。
他の日本語や、逆(〜をーにする)は出来ます。何故なんでしょうか?

print "content-type: text/html\n\n";

$str = "ボール";
$out = "ー";
$in = "〜";

$str =~ s/$out/$in/;
print $str;


499 :nobodyさん:2006/12/25(月) 13:52:39 ID:ClYkzmks
use Foo;
use ...;
use ...;

と、複数のpmファイルをuseしたのですが、先頭行のuseだけにエラーが出ます。

Can't locate Foo.pm in @INC (@INC ...

ちゃんとFoo.pmは存在するし、他の行のuseにはエラーが出ないのですが・・・
このエラー文は、モジュールがインストールされていないという意味のほかに、なにか意味はあるのですか?

500 :499:2006/12/25(月) 13:58:43 ID:ClYkzmks
何度もすみません。

use Foo;
use Hoge;
use ...;
use ...;

だとFoo.pmに関して、

use Hoge;
use Foo;
use ...;
use ...;

だとHoge.pmに関してしてエラーが出ていたようです。
@INCの検索パスにそれらのファイルが含まれていないということでしょうが、ちゃんとそのディレクトリに置いてあるんです\(^o^)/オワタ

501 :nobodyさん:2006/12/25(月) 14:26:49 ID:???
>>498
つEUC

502 :nobodyさん:2006/12/25(月) 14:29:15 ID:???
use lib しなけりゃエラーが出て当然だと思いますが・・・

503 :499:2006/12/25(月) 14:29:36 ID:ClYkzmks
>>502
use libは宣言しています。

504 :499:2006/12/25(月) 14:36:15 ID:ClYkzmks
問題のファイルは以下のものです。
http://www.uploda.org/uporg630190.zip.html

(pass : 2ch)

use lib qw(./lib);
use Common::Cookie;

として使用しています。
なにかファイルに問題はありますか?

505 :nobodyさん:2006/12/25(月) 14:48:11 ID:???
/lib/Common/Cookie.pm にしてますか?

506 :499:2006/12/25(月) 14:51:36 ID:ClYkzmks
>>505
はい、呼び出し側との相対パスは./lib/Common/Cookie.pmです。

507 :nobodyさん:2006/12/25(月) 15:10:41 ID:???
>>498
\Q \E

508 :nobodyさん:2006/12/25(月) 19:38:47 ID:ClYkzmks
\r\n、\r、\nは<BR>に変換するけど、<BR>はどの改行コードに戻せばいいの?
対象のOSによって変わると思うんだけど・・・

509 :nobodyさん:2006/12/25(月) 19:52:10 ID:???
\x0d\x0a|\x0d|\x0a
お好きなのをどうぞ

510 :nobodyさん:2006/12/25(月) 19:56:04 ID:???
その「お好きなの」をどれにするかで迷ってんじゃね?

511 :nobodyさん:2006/12/25(月) 19:57:38 ID:ClYkzmks
はい。
プラットフォームによって改行コードを勝手に決めてくれたりは出来ないんですか?

512 :JAPU@坂井恋夏 ◆lVJAPUTeX. :2006/12/25(月) 20:23:02 ID:???
>>492
記号類はメタ文字 (特殊文字) になるものがあるので、よく分からなければ \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では /セーラープルート/ がエラーになるので悲しい。

513 :JAPU ◆lVJAPUTeX. :2006/12/25(月) 20:23:36 ID:???
>>506
ライブラリの位置を指定する (-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"

514 :nobodyさん:2006/12/25(月) 22:37:26 ID:ClYkzmks
OOPにおいて、メソッドの呼び出しには引数の括弧は省略しない方が良いのですか?

515 :nobodyさん:2006/12/26(火) 05:42:28 ID:???
>>508
\nでOSの改行コードになる。
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify

>>513
\rと\nの解釈が間違ってないか?


516 :498:2006/12/26(火) 08:40:27 ID:???
なるほど、ご丁寧に教えてくださってありがとうございます。

517 :nobodyさん:2006/12/26(火) 16:19:37 ID:???
>>508>>515は同じ事を書いているように見えるのだが

518 :nobodyさん:2006/12/26(火) 18:42:02 ID:???
設定:自動登録型リンク集スクリプト

管理パスを確認

パスがあってたら登録サイト一覧を表示

削除したいサイト選択後に削除←この時の質問なんだけど


削除したいサイト選択後のスクリプトの呼び出し方がわからない

削除したいサイトをチェックボックスで選択後、インプットタグでスクリプトを呼び出して、
サイト削除のサブルーチンを呼び出すって流れなんだけど、

引数やhiddenで呼び出す書き方だと外部からも直接呼び出せてしまうわけで、
管理画面からのみ呼び出せるようにするにはどうしたらいいの?




519 :nobodyさん:2006/12/26(火) 18:46:11 ID:PubWBr4/
cookieに管理権限渡しておいてcookie checkでOKなら削除、NGならエラーってすれば良いと思うよ。

あとスレ違い

520 :nobodyさん:2006/12/26(火) 18:52:44 ID:???
>>518
質問が変に具体的すぎてよくわからんが
Session管理するか、それに近いものを実装する

521 :JAPU ◆lVJAPUTeX. :2006/12/26(火) 20:08:35 ID:???
>>515
古代のMacPerlではohzakiの記載も正しいですが、最近のPerlでは\n = NL(LF), \r = CR のはずですが…
今時そこまで古いバージョンに気を使う必要は無いでしょう。
そもそも、\n と \r の意味が逆転しているのも独自仕様ですし。

>>518
セッション管理が面倒なら、削除する際にも再度パスワードを入力させてチェック。
この手法だと、CSRFを回避することができるおまけ付き。

522 :nobodyさん:2006/12/26(火) 20:15:42 ID:???
>>521
ん?よく分からないんだが、最新のActivePerlとかMacPerlでは挙動が変わったってこと?
よその環境用には書かないからマジでわからん。

523 :nobodyさん:2006/12/26(火) 20:17:46 ID:???
WinのActivePerlは\n = CRLF

524 :518:2006/12/26(火) 20:43:26 ID:ISbRNGDd
>>519-521
ありがとうございました
解決しました

525 :JAPU@坂井恋夏 ◆lVJAPUTeX. :2006/12/26(火) 20:51:33 ID:???
Perlでは特に指定しない場合はbinmodeではありません。このため、入出力時にはそのOSに応じた改行コードと \n が相互に変換されます。したがって、何もしない場合にはPerl内部で扱う改行コードは常に \n であるわけです。

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では」に訂正します。

526 :nobodyさん:2006/12/26(火) 21:15:11 ID:???
( ^ω^)……

527 :nobodyさん:2006/12/26(火) 21:42:36 ID:???
改行コードは Perl の I/O ルーチンが実行環境に合わせて勝手に変換する
そうさせない方法があったはず

528 :nobodyさん:2006/12/26(火) 21:51:44 ID:???
OS別の動作考えるぐらいなら
s/chomp/>>509/
にしとけ

529 :nobodyさん:2006/12/26(火) 23:49:25 ID:???
binmodeってwindowsでしか使われてないと思っていた俺ザンギ

530 :nobodyさん:2006/12/27(水) 11:38:17 ID:???
>>529
ふざけるな




俺ザンギ

531 :nobodyさん:2006/12/27(水) 15:46:35 ID:???
最近binmodeつかってないなぁ。open my $fh, '<:raw', $fileとかやるから。

532 :nobodyさん:2006/12/27(水) 16:52:37 ID:Dit2F/dP
$foo{hoge}と$foo->{hoge}ってどう違うんですか?

533 :nobodyさん:2006/12/27(水) 17:25:34 ID:???
@fooに\%hoge、\%barなどのリファレンスが格納されている場合、個々の値にアクセスする方法はどうすれば良いですか?

534 :533:2006/12/27(水) 17:57:11 ID:???
テストスクリプトとして、以下のようなものを作ってみたんですが・・・個々の値にアクセスできません><;

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};
    }
}

535 :nobodyさん:2006/12/27(水) 17:58:45 ID:???
>>532
$foo{hoge}:
%fooというハッシュのキーhogeに対応する値

$foo->{hoge}:
$fooに格納されたハッシュリファレンスで示されるハッシュの
キーhogeに対応する値



536 :nobodyさん:2006/12/27(水) 18:03:24 ID:???
>>532
$foo{hoge} ハッシュの値
$foo->{hoge} ハッシュリファレンスの値(デリファレンス)

>>533
$foo[0]->[0]とか$foo[1]->{hoge}とか


537 :nobodyさん:2006/12/27(水) 18:12:18 ID:???
>>534
my %aaa = (
  a => 'あ',
  b => 'い',
  b => 'う',
);

538 :nobodyさん:2006/12/27(水) 18:16:16 ID:???
>>535-536
ご回答ありがとうございますm(_ _)m
ようやく両者の違いがわかりました!

>>537
おお〜出来ました!ありがとうございます!

$aaa = {
};



%aaa = (
);

の違いについて分かるサイトはございますか?
前者が名前の無いハッシュなんとかかんとかというのは分かったのですが・・・

539 :nobodyさん:2006/12/27(水) 18:43:49 ID:???
さっきから質問ばかりで申し訳ないです。。。
ハッシュをforeachやwhileでまわすと、例えば>>534の例で言えばc→a→bのように、返される値の順序がバラバラになるんです。
この理由は分かった(というか元々バラバラになるようになっている)のですが、これは番号を振ってsortしなくてはいけないのですか?

540 :nobodyさん:2006/12/27(水) 19:01:43 ID:???
できた〜
いちいち番号を振らなくてもsortで出来るんですねヽ(・∀・)ノ

541 :nobodyさん:2006/12/27(水) 19:08:24 ID:???
解決したみたいだけど、ハッシュでは順番は保存されません。実装上の都合です。
理由は「ハッシュ」という名前に関係してるんだけど、
詳しく知りたければ「ハッシュテーブル」を検索してみてね。

542 :nobodyさん:2006/12/27(水) 19:15:48 ID:???
>>538
%aaa = (
);
なら
$fhoge}

ttp://www.rfs.jp/sb/perl/02/10.html
ここなんかどうだろうか

543 :nobodyさん:2006/12/27(水) 19:17:09 ID:???
うおー途中というかわけわかんないところで送信してもうた

%aaa = ();
なら
$aaa{hoge}

$aaa={};
なら
$aaa->{hoge}

544 :JAPU@坂井恋夏 ◆lVJAPUTeX. :2006/12/27(水) 20:12:52 ID:???
ハッシュの順番を保持したい場合、Tie::IxHash とか使うと幸せになれるかもしれません。


545 :nobodyさん:2006/12/27(水) 20:17:56 ID:???
リファレンスがわからんのにモジュールは酷だろw

546 :nobodyさん:2006/12/28(木) 00:05:37 ID:???
スクリプトで定義した文字列を配列に入れる処理をサブルーチンの呼び出しの度にやっていたんだけど、
グローバル変数 (中括弧で囲われていない部分で 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のデータが重いのかは知らないけど、今時のハイスペックなマシンでも、ただ短いデータを代入するだけの処理で
リソース食いつぶしたりするもんなんだね。


547 :nobodyさん:2006/12/28(木) 00:39:59 ID:???
掲示板を作成しているのですが、とある事情で、ログファイルを完全に公開したいと考えています。

記事修正用のパスワードはユーザ任せにするわけですが、crypt 関数でハッシュ化したものを記録すると
ログに記載されたパスワードのハッシュからパスワードクラックされる危険はどの程度あるのでしょうか?

(パスワードは6文字の英数字の場合)

また、crypt よりも安全な一方向関数はありますでしょうか?

よろしくお願いします。

548 :nobodyさん:2006/12/28(木) 00:55:31 ID:???
>>547
今時のPCだとcryptで6文字とかそらもうあっさり解析される。
とりあえずお手軽なところではMD5あたりだと思うが、
そもそもパスワードのログだけ別ファイルにすれば良くね?

549 :nobodyさん:2006/12/28(木) 00:56:23 ID:???
ログファイルを第三者に完全公開する「とある事情」って何だ
それによってアウローチが変わると思われ

550 :nobodyさん:2006/12/28(木) 01:08:04 ID:???
saltを $1$........$ みたいな形で与えると、別の形式でcryptしてくれたりするみたいだね。

551 :nobodyさん:2006/12/28(木) 02:53:29 ID:???
ハッシュ化したものを生でログに置くからすぐばれる。
XORなどのビット演算で数回かき回したものを置けば、元のパスワードは判別不能になる。
もちろん、かき回しロジックを公開しては意味がない。

552 :nobodyさん:2006/12/28(木) 09:03:40 ID:???
アルゴリズムを隠すことによる秘密はよくないよ。

553 :547:2006/12/28(木) 09:53:44 ID:???
>>548-549
回答ありがとうございます。

操作性とスクリプトの簡略化のために、トリップキーと削除・編集パスワードを同じものにしたいので、
必然的にパスワードを一方向関数で変換した値は公開されちゃうんです。(トリップとして)

tripper のようなトリップ解析ツールでも6文字なら1日以内に解読できちゃうので、やはり危険ですよね。

>>550
なるほど
http://www.tohoho-web.com/wwwperl2.htm#crypt
そうすればMD5が使えるみたいですね

>>551-552
自分のサイトだけで使ってるならかき混ぜでもばれなさげですね。。。
まぁ基本的に隠蔽によるセキュリティはよくないですが。


よく考えてみると、トリップとして公開するデータをパスワードの一方向関数変換結果の一部にしちゃえば
解読が困難になりそうですね。

ありがとうございました。

554 :nobodyさん:2006/12/28(木) 13:58:02 ID:hVZzWyfv
いろいろなソースを見て勉強しているんだけど、コンストラクタで

my $self = {};
my $self = [];

この2通りの記述を見ました。
{}と[]の違いってなにかあるんですか?

あと、それらに空要素を入れる場合、=0や=''ではなく={}や=[]とする理由も加えてご教示願います。。。m(_ _)m

555 :nobodyさん:2006/12/28(木) 14:02:16 ID:???
$aaa={}; # ハッシュリファレンス
$aaa=[]; # 配列リファレンス
@aaa=(); # 配列
$aaa=''; # スカラー

556 :nobodyさん:2006/12/28(木) 14:04:14 ID:???
>>538,554
オマイラとりあえずperlreftut嫁
ttp://www.kt.rim.or.jp/~kbk/perl-5.8/perlreftut.html
その質問の答えは全てリファレンスとは何かと言うことを理解することによって得られるから。

557 :nobodyさん:2006/12/28(木) 14:16:08 ID:hVZzWyfv
>>555-556
ありがとうございます!
参考サイトは10回ブックマークに登録しました。

558 :nobodyさん:2006/12/28(木) 14:27:15 ID:???
>>557
ちなみにそのサイト、テンプレ>>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あたりも読んでおいてほしいところだ。

559 :nobodyさん:2006/12/28(木) 20:22:01 ID:???
現在、Shift-JIS(CP932)しか読み込めない
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を相互変換は標準的なモジュールのみで可能でしょうか。

560 :nobodyさん:2006/12/28(木) 20:34:13 ID:???
Jcodeはパス通せば置くだけでしょ

561 :nobodyさん:2006/12/28(木) 20:41:34 ID:???
>>559
Jcode-CP932っての探して見てみたが>>560の言うとおりインストールしてもらう必要は無い。
libディレクトリ以下適当にコピーしてuse libなりなんなりすれば動く。

1.
極端な話自分で変換テーブルを用意すれば変換できるわけだけれど、
CP932との変換機能が用意されているかと言えばNO。
2.
可能。非標準モジュールEncode-EUCJPMS。但し要コンパイル。
3.
私はそっちのほうが好きではあるが別にその必要は無い。
変換については1,2のとおり。

562 :nobodyさん:2006/12/28(木) 20:52:26 ID:???
Windows Vistaのお陰でUnicode関係の変換がさらに面倒になるね

563 :nobodyさん:2006/12/28(木) 22:47:30 ID:/nHSB5ow
かなり初歩的なことかもしれませんが・・

CGIでパラメータを受け取る時に、ハッシュテーブルに入る変数の数が
不定の場合に、ループ処理を使って、うまく値を取り出すにはどうしたら
良いでしょうか。
パラメータ↓
aaa=テキストa&bb1=テキストb1&bb2=テキストb2&..bbx=テキストbx&ccc=テキストc
bb1〜bbxまでの値を取得したい・・。

良い方法がありましたら、ご教授よろしくお願い致します。

564 :563:2006/12/28(木) 22:54:40 ID:???
え、っと自己レスです
>>563 わざわざハッシュにしなくても、bb1〜bbxだけ普通の配列に入れたらイイ?

良案お待ちしておりますー。

565 :nobodyさん:2006/12/28(木) 23:18:32 ID:???
>>563
<form name="bb[]" value="テキストb1" />
<form name="bb[]" value="テキストb2" />
<form name="bb[]" value="テキストbx" />
みたいにしておいて、パラメータ解釈時に/(.*)\Q[]\E$/な要素を
push @{$params{$1}}, $value;
するのが常套手段ではないかと。

566 :nobodyさん:2006/12/28(木) 23:20:10 ID:???
うわぁ、HTMLミスってるorz
s/form/input type="text or hidden"/g

567 : ◆TWARamEjuA :2006/12/29(金) 00:36:46 ID:??? ?BRZ(6677)
for my $bb_keys (grep /^bb./, keys %hash) {
:
:
}
とか?

568 :nobodyさん:2006/12/29(金) 01:12:17 ID:???
>>561
おれ、

use Encode qw(from_to);
from_to($hoge, 'cp932', 'euc-jp');
from_to($hoge, 'euc-jp', 'cp932');

で変換して使ってるけど、非標準モジュール入れた記憶ないなあ。


569 :561:2006/12/29(金) 01:31:54 ID:???
>>568
あーごめんなさい。>>561は撤回…完全に記憶違いです…
CP932との変換テーブルはデフォルトで入ってるのか。

無いのはMicrosoft仕様のEUCJP-msね。
丸囲み文字とかローマ数字とかそういうやつがEUCJPに変換できないのか…

1. EUC-JPとの変換はできるが一部CP932が拡張している一部の文字について変換できない。
2. 可能。完全に変換するためには非標準モジュールEncode-EUCJPMS。但し要コンパイル。
3. 標準モジュールのみで可能。
で合ってるかな…まあなんにしろ一度派手に記憶違いしてた人の回答なんて
信用できませんので誰か詳しい人お願いしますillorz

570 :nobodyさん:2006/12/29(金) 01:40:21 ID:???
>>560,561
パスを通せば動くんですか。。。
use libの使い方が良くわからなかったので、検索しました。
結構使えそうですね。ただ、コンパイルの必要なモジュールには使えないかも。
use utf8にも挑戦してみます。
use utf8を知る前に投稿を受け取る部分を作ったので
文中で正規表現で2バイト文字を使うために\nxx\nxxで文字を記しているので
面倒になるかもしれませんが。

>>568
Encodeでも可能なんですかね。ちょっとやってみます。

>>569
Jcode::CP932では上のほう(>>404)で話が出ていたAケもOUも上手に変換できていたので
もしかしたらいけるかもしれません。ちょっとやってみます。

#文字コード変換は鬼門ですね。

571 :nobodyさん:2006/12/29(金) 02:16:03 ID:???
結果です。

まず、use Encode qw(from_to);での結果。
from_to($huga, 'cp932', 'eucjpms');
ダメでした。
AケOUと続けて記入したデータが??????に化けました。

次にEncode::EUCJPMSを読み込ませた上で
↓のように記述してみました。
from_to($huga, 'cp932', 'eucjpms');
これもダメでした。Aケが全角空白に変換され   OUと出力されてしまいました。

3、のuse utf8は時間が掛かるので明日にでも全改修してやってみます。

572 :nobodyさん:2006/12/29(金) 02:29:36 ID:???
>>571
eucjpmsじゃなくてcp51932だとどうだろ
ttp://msyk.at.webry.info/200511/article_2.html
ttp://legacy-encoding.sourceforge.jp/wiki/index.php?cp51932

こちらで確認したところそれらの文字は全部通った。

573 :nobodyさん:2006/12/29(金) 02:35:41 ID:???
失礼。全角空白ではなく FD FF FD FF FD FF という良くわからない文字列でした

>>572
from_to($ds, 'cp932', 'cp51932');
OKでした。でも、このcp51932ってエンコードって5系perlには標準で入ってましたっけ。
EUCJPMSはロードしなくても出来たので、最新版のEncodeでは標準のようですが。

574 :nobodyさん:2006/12/29(金) 02:43:29 ID:???
>>573
ありゃ?
ttp://search.cpan.org/~naruse/Encode-EUCJPMS-0.07/EUCJPMS.pm
に書いてあるからEncode::EUCJPMSが提供しているものだと思ったんだけど。
そして当方ではロードしないとUnknown encodingとエラー起こしてる…
>perl -MEncode -e "print $Encode::VERSION"
2.18

575 :nobodyさん:2006/12/29(金) 03:05:50 ID:???
>>574
私の使ったEncode::EUCJPMSをロードしないと言うのは
use Encode::EUCJPMS
と、記述しないと言うことですが。。。

って、use Jcode::CP932を書いたままでした。
Jcode::CP932内でEncode::EUCJPMSを呼んでるので動いたのでしょう。

となると、標準モジュールのみでやるにはやはりuse utf8プラグマをつけないとダメってことですかね。
それでも動くかどうかは判らないですが。

576 :nobodyさん:2006/12/29(金) 04:26:07 ID:???
超低レベルな質問かもしれませんが、お願いします。

現時点でhtmlで簡単なサイトぐらいなら作れる、人並みの脳みそを持った人が、
仕事の合間を縫ってそれなりに勉強して、Perlを使ったCGI(初歩的な掲示板など)
をゼロから作れるようになるには何ヶ月ぐらいかかりますか?

個人的な感覚で構いませんので、どう思うか教えて下さい。

577 :nobodyさん:2006/12/29(金) 05:57:46 ID:???
>>576
3日間

578 :577:2006/12/29(金) 05:58:43 ID:???
あ、プログラミングの経験が普通の高校で習った程度しかないなら、1ヶ月間ぐらいで。


579 :nobodyさん:2006/12/29(金) 10:17:46 ID:???
条件が曖昧過ぎるからなんとも言えないけど
やっぱ1ヶ月ぐらいかなー

580 :nobodyさん:2006/12/29(金) 10:48:29 ID:???
最初のプログラミング言語としてperlを選択するのは止めなさい。
一生perlしか使わないつもりなら止めないけど。

581 :563:2006/12/29(金) 10:51:17 ID:???
>>565,>>567
ありがとうございます。実は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系の知識があれば、一週間もあれば。
それ以外であれば、やっぱりひと月でしょうねー。

582 :nobodyさん:2006/12/29(金) 12:44:22 ID:???
何を習得するにも、>>580みたいな意見には惑わされないように。

583 :nobodyさん:2006/12/29(金) 13:41:38 ID:???
俺も580と同意見だな。
やるならCから入った方がいい・・・と、Cから入った俺がry

584 :nobodyさん:2006/12/29(金) 14:10:55 ID:???
580=583 スレ違いカエレ


585 :nobodyさん:2006/12/29(金) 19:17:04 ID:???
>576
1ヶ月あれば形になると思う。あとHaskellやろう。

586 :nobodyさん:2006/12/29(金) 19:30:36 ID:???
>>576
週末全部充てれば一ヶ月もあれば習得できるかもしれないが、
BBS一個作るとなると+2ヶ月はかかると思われ

587 :nobodyさん:2006/12/29(金) 19:32:26 ID:???
というかググる力というか、検索力があればけっこう短期間で形にはなる

588 :576:2006/12/29(金) 19:38:01 ID:???
>>577-579,580-583,585
回答ありがとうございます。

現状私は、htmltとcssとJavascriptが
本当に「できる」と言っていいのかすらわからない程度にできます。
それ以外は一切できません。Perlを使ったフリーCGIのソースをいじくり回す程度です。
仕事でWebデザインぽいことをやってますが、デザインだけではどうにもこうにもアレなので、
CGIを習得しようと思い、CGIと言えばPerlだろという考えで書き込みました。
純粋にプログラミングというより、あくまでもCGIを作るための言語を学びたいので、
WebProg板に来た次第です。

仕事が忙しいので、自習は週4日、1時間程度で考えています。
みなさんを信じてまずは1ヶ月がんばります。
そこで、>>1-10あたりにあるサイト以外で、オススメのサイト、
書籍、「その前にまずこれをやれ」的なことなどありましたら教えて下さい。

589 :nobodyさん:2006/12/29(金) 19:41:15 ID:???
>>584
図星を突かれた使えないperlerがなんかほざいてるな。

590 :nobodyさん:2006/12/29(金) 19:49:27 ID:???
>>588
とりあえず、KENTは参考にしてはいけない。それだけは言える。

591 :nobodyさん:2006/12/29(金) 20:21:54 ID:???
>>589>>584で図星突かれたらしいw

592 :nobodyさん:2006/12/29(金) 20:23:21 ID:???
>>590
追加で、結城浩も宗教色を強めてきてきもいので参考にしないほうがいい。

593 :nobodyさん:2006/12/29(金) 21:10:19 ID:???
>>588
>「その前にまずこれをやれ」的なことなどありましたら教えて下さい。

こんなとこで回答期待してないでさっさと着手しろ。
そういうやつに限って始めるまでが長くて結局何も出来ない。

594 :576:2006/12/29(金) 22:08:25 ID:???
>>593
うるせーバーカ!!

595 :nobodyさん:2006/12/29(金) 22:38:09 ID:???
>592
じゃあ逆にお勧めのPerlishって誰?

596 :nobodyさん:2006/12/29(金) 23:05:21 ID:???
>>595
お勧めの人を作らないことがお勧め。
特にPerlの場合は、いろんな書き方があるから、いろんなコードを読んでおいたほうがいい。

このスレを見るのがためになると思う。
答える側になっても、ここではまだまだ新しい発見があるし。

597 :nobodyさん:2006/12/29(金) 23:43:55 ID:???
        lヽ ノ l        l l l ヽ   ヽ
  )'ーーノ(  | |  | 、      / 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  `ー‐―''" ⌒'ー--‐'´`ヽ、_   _,ノ ノ
   ̄ ̄   |           / 

598 :nobodyさん:2006/12/30(土) 00:06:42 ID:???
PBPはDamian Conwayか。参考になるきれいなコードだった。

177 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)