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

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

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

1 :nobodyさん:05/03/10 00:47:16 ID:sT66OcmD
Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10

2 :nobodyさん:05/03/10 00:47:50 ID:sT66OcmD
関連スレ
△▲ WebProg 初心者の質問 Part11 ▼▽
http://pc5.2ch.net/test/read.cgi/php/1101635909/

CGIだけど、なんか質問ある? Part 12
http://pc5.2ch.net/test/read.cgi/php/1097334246/

【Perl,CGI】参考書籍 第三版
http://pc5.2ch.net/test/read.cgi/php/1030209573/

【Perl】ファイルロック(排他処理)について語ろう
http://pc5.2ch.net/test/read.cgi/php/1024795138/

★負荷軽減対策委員会(Perl、PHP)★
http://pc5.2ch.net/test/read.cgi/php/1034645635/

Perlモジュールについて
http://pc5.2ch.net/test/read.cgi/php/997829243/

CGIに依存しないPerlの話題一般/Part2
http://pc5.2ch.net/test/read.cgi/php/1030548610/

★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc5.2ch.net/test/read.cgi/php/1077525387/

【 スクリプト改造依頼スレ 】(丸投げ) part3
http://pc5.2ch.net/test/read.cgi/php/1105046286/

3 :nobodyさん:05/03/10 00:49:42 ID:???
http://pc5.2ch.net/test/read.cgi/php/1110383236/

4 :nobodyさん:05/03/10 00:51:53 ID:???
[過去ログ] 1 of 4

Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
 DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
 DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html

5 :nobodyさん:05/03/10 00:52:43 ID:???
[過去ログ] 2 of 4

Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 http://pc.2ch.net/php/kako/1026/10269/1026977659.html
Part15 http://pc.2ch.net/php/kako/1028/10288/1028816385.html
Part16 http://pc.2ch.net/php/kako/1032/10320/1032070299.html
part17 http://pc.2ch.net/php/kako/1034/10345/1034583844.html
part18 http://pc.2ch.net/php/kako/1037/10377/1037797479.html
part19 http://pc.2ch.net/php/kako/1042/10422/1042260745.html
part20 http://pc2.2ch.net/php/kako/1044/10447/1044717887.html (タイトルに19と誤記)

6 :nobodyさん:05/03/10 00:53:19 ID:???
[過去ログ] 3 of 4

part21 http://pc2.2ch.net/php/kako/1047/10479/1047980851.html
part22 http://pc2.2ch.net/php/kako/1050/10503/1050369328.html
part23 http://pc2.2ch.net/php/kako/1053/10530/1053051519.html
part24 http://pc2.2ch.net/php/kako/1054/10549/1054992610.html
part25 http://pc2.2ch.net/php/kako/1056/10567/1056730690.html
part26 http://pc5.2ch.net/php/kako/1059/10590/1059043704.html
part27 http://pc5.2ch.net/php/kako/1060/10608/1060808783.html
part28 http://pc5.2ch.net/php/kako/1063/10635/1063562491.html
part29 http://pc5.2ch.net/php/kako/1066/10662/1066286828.html
part30 http://pc5.2ch.net/test/read.cgi/php/1069846177/

7 :nobodyさん:05/03/10 00:54:37 ID:???
[過去ログ] 4 of 4

part31 http://pc5.2ch.net/test/read.cgi/php/1072896288/
part32 http://pc5.2ch.net/test/read.cgi/php/1075545279/ (タイトルに31と誤記)
part33 http://pc5.2ch.net/test/read.cgi/php/1078076768/
part34 http://pc5.2ch.net/test/read.cgi/php/1081148490/
part35 http://pc5.2ch.net/test/read.cgi/php/1085557731/
part36 http://pc5.2ch.net/test/read.cgi/php/1089779036/
part37 http://pc5.2ch.net/test/read.cgi/php/1093106507/
part38 http://pc5.2ch.net/test/read.cgi/php/1097158988/
part39 http://pc5.2ch.net/test/read.cgi/php/1101522903/
part40 http://pc5.2ch.net/test/read.cgi/php/1106816922/ (前スレ)

8 :nobodyさん:05/03/10 00:55:10 ID:???
ム板Perlスレより

[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/

[本]
リャマ: http://www.oreilly.co.jp/BOOK/lperl3/
駱駝: http://www.oreilly.co.jp/BOOK/pperl3v1/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/BOOK/pcook/

[オンラインマニュアル]
Perldoc.com: http://perldoc.com
perldoc.jp: http://perldoc.jp
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/%7ekbk/perl5.005/

[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://member.nifty.ne.jp/hippo2000/

[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/

9 :nobodyさん:05/03/10 01:03:06 ID:???
前スレと同じテンプレにしたけど、足りない箇所、間違いあったら訂正よろしこ

過去ログ貼るとき「httpが多すぎます」って出た。こんな制限あったんだ

そそ、「コーディングとは云々」ってやつ無かったけどあれやめたの?
前スレ終盤、とんでもないスレ違いの書き込みがあったので気になりますた

10 :nobodyさん:05/03/10 02:53:34 ID:???
ひらがな -> カタカナ変換はぐぐりまくって

$value =~ s/\xa5\xa4/`/g;
$value =~ s/\xa4([\xa1-\xfe])/\xa5$1/g;
$value =~ s/`/\xa5\xa4/g;

とやればできるとなんとかたどり着いたのですが、この逆の
カタカナ -> ひらがな 変換がどうしてもヒットしません。

ご教示いただけますと幸いです。

11 :nobodyさん:05/03/10 08:33:39 ID:Cjqv3NW2
ダウンロードツールを作ってます。
ボタンを押して、ページを切り替えるタイプの掲示板cgiのログを落とせるようにするには
どうすればいいのですか?
getでページ切り替えを送信する掲示板ならまだできそうですが、postで情報を送信する掲示板だとどうしていいかわかりません。

12 :nobodyさん:05/03/10 08:40:58 ID:Cjqv3NW2
>>10
よくわかんないけど
http://www.google.co.jp/search?hl=ja&inlang=ja&ie=Shift_JIS&q=%83%4A%83%5E%83%4A%83%69%82%F0%82%D0%82%E7%82%AA%82%C8%81%40perl&lr=
とかじゃだめ?

13 :nobodyさん:05/03/10 09:01:21 ID:???
>>10
正規表現の左右逆にしてできないん?

>>11
getでできるならpostでもできるだろ。
何なら書き込みフォーム以外の <form method="post"> を <form method="get"> にすれば? とか。

14 :nobodyさん:05/03/10 09:11:12 ID:???
>>1 乙。
関連(参考)スレに
・正規表現道場 [ http://pc5.2ch.net/test/read.cgi/php/1105930285/ ]
も加えるとか。

15 :nobodyさん:05/03/10 15:29:02 ID:Mmpnq31h
例えばとあるCGIを起動したら
http://www.hoge.com/index.cgi
にPOST形式でクエリを送り付けたいのですが不可能ですか?
この送り先は自分のCGIではないです。
CGIの起動はcronで毎日1回です。

getならリダイレクトとかでできると思いますが、POSTはどうすればいいんでしょうか?


16 :nobodyさん:05/03/10 15:40:29 ID:???
>>15
CGI proxyとかそんな感じじゃないの
socketとかLWPとかで検索してみたら

17 :271:05/03/10 17:35:54 ID:0qqwutep
csvファイルを読み込み処理するプログラムを作っています。
csvが","のみで区切られているときは、split(/\,/,$file)
等で読み込みできます。
しかしcsvファイルがaaa,"bbb,ccc",dddのようになっている
時に上手く分割する方法を思いつきません。どおすればいいのでしょうか?

18 :nobodyさん:05/03/10 17:39:53 ID:???
>>17
いったい区切り文字は何なんだよ。
," なのか ", なのか , なのか?
, なんならそれでできるはずだが

19 :nobodyさん:05/03/10 17:51:58 ID:???
>>17
そんなあなたにPerlメモ

20 :nobodyさん:05/03/10 17:53:11 ID:???
どこの271だw

21 :nobodyさん:05/03/10 17:57:38 ID:???
Text::CSVってモジュールあったような。

22 :nobodyさん:05/03/10 18:06:19 ID:???
>>12のでグルるとJapanese.pmってのがやたらと引っ掛かるけど、
DLしてみたら31万バイトもありやがる。これじゃ鯖が可愛そうな
んで、自分でそのときの必要に応じて作ったほうがいいと思うが
どうよ。漏れは>>10じゃないが。



23 :nobodyさん:05/03/10 18:12:19 ID:???
>>10
こいうこと?
perl -e '$str="aaa,\"bbb,ccc\",ddd"; @str=split(/,\"?/, $str); print $str[1], "\n";'
bbb


24 :23:05/03/10 18:13:06 ID:???
ごみん、>>10>>17

25 :23:05/03/10 18:16:07 ID:???
こうしないとダメだたorz
split(/\"?,\"?/, $str);
すかす変なデータやなぁ

26 :nobodyさん:05/03/10 18:24:49 ID:???
どうせ split したあと "" => " の unescape とかもしなきゃいけないんだろうから、
Text::CSV か DBD::CSV を使っといた方が良さげ。

27 :nobodyさん:05/03/10 19:57:46 ID:???
>>10
use String::Multibyte;

my $euc = String::Multibyte->new('EUC_JP');
my $kana = $euc->mkrange('ァ-ン');
my $hira = $euc->mkrange('ぁ-ん');
my $kanahira = $euc->trclosure($kana, $hira);

my $value = 'ヌルポ';
$value = $kanahira->($value);

--
perl 5.8以降
use encoding "euc-jp";

my $value = 'ヌルポ';
$value =~ tr/ァ-ン/ぁ-ん/;

28 :nobodyさん:05/03/10 19:59:47 ID:0qqwutep
17です。(271は間違いです)
皆様ありがとうございます。

>>17
>いったい区切り文字は何なんだよ。
>," なのか ", なのか , なのか?
>, なんならそれでできるはずだが

区切り文字は,なのですがデータ中に,があった場合に
データがカンマやダブルクォートを含む場合には
"(ダブルクォート) で囲むというルールがあるので
困っていました。
結局下のようなモジュールを使用して解決しました。
http://www.nsknet.or.jp/~kamichan/prog/CSV_pm.html

29 :nobodyさん:05/03/10 20:18:10 ID:???
>>18
CSVの意味わかってないだろおまえ

30 :23:05/03/10 22:15:15 ID:???
藻前、区切り文字の意味わかってねーだろ。

31 :23:05/03/10 22:17:23 ID:???
ってか、タブ区切りでもCSVってExcelで拡張子つくけど・・・
漏れはK3形式だな。>>29はK3てわかってねーだろ(w

32 :nobodyさん:05/03/10 22:30:19 ID:???
相手がわかってないと思ったら知ったかぶりばかりしてないで説明すりゃいいじゃん。

ちょっとちょっかい出されたくらいで不毛な煽りで返すのは大人げないからやめれ。

33 :23:05/03/10 22:31:42 ID:???
何か勘違いしてたみたい。

(´Д`)
( 八)
 〉〉
スミマセンスミマセン


34 :nobodyさん:05/03/10 22:34:02 ID:Lndb2Cof

■■■ お勧めレンタルサーバー ■■■

【ホームページを作るならここをあたれ!】

A:無難なサーバー。 お勧め!!  
 ttp://www.webspeed.ne.jp/  
 ttp://www.wadax.ne.jp/
 ttp://www.ktplan.ne.jp/
 ttp://www.wakwak.net/
 ttp://www.cpi.ad.jp/  
 ttp://solid.ad.jp/  

B:ある程度の障害は大目に。  
 ttp://www.binboserver.com/
 ttp://s55.net/
 ttp://www.j-navi.com/
 ttp://domainya.net/
 ttp://www.j-speed.net/main/
 ttp://www.cyberjellyfish.com/



35 :nobodyさん:05/03/11 03:18:48 ID:???
>>34
ソケット使えて、しかも怒られないところ教えて

36 :nobodyさん:05/03/11 03:21:22 ID:???
>>35
バカだな

37 :nobodyさん:05/03/11 07:04:53 ID:???
おまえさんのアソコこそが最高のソケットじゃないか

38 :nobodyさん:05/03/11 08:49:18 ID:???
>>37
キモ

39 :15:05/03/11 11:01:25 ID:BXH5EoKa
>>16
モジュールですか?探して見ます。

40 :15:05/03/11 11:21:11 ID:BXH5EoKa
http://search.cpan.org/~gaas/libwww-perl-5.803/lib/LWP.pm
今ここでLWPについて見てますが、英語であんまりわかりません。
とりあえずPOSTでクエリを送りつけるのはできるような感じですが、素朴な疑問があります。

例えば
http://www.hoge.com/test.cgi
というところにあるCGIが、ユーザからp=1という要求を受けた時に
http://www.hoge.com/file/
にユーザのIPアドレスをファイル名としたファイルを作成して、それの処理の正否を
ブラウザに出力するプログラムだったとします。

その時に
http://www.sample.com/send.pl
というのがcron起動でhttp://www.hoge.com/test.cgiにp=1という要求を送った場合には
しっかりhttp://www.hoge.com/test.cgiこのCGIはIP名のファイルを作成するのでしょうか?

cron起動だと出力内容を受け取れませんよね。もちろんsend.plの出力内容はとれますが、
send.plが何も出力せずにhttp://www.hoge.com/test.cgiにクエリを送った場合には
http://www.hoge.com/test.cgiこの出力内容もLinuxの方には受け取れない?それとも
受け取っているがtext/htmlのものは表示できないだけ?


41 :nobodyさん:05/03/11 11:43:03 ID:wWuZgVEw
あるcgiの中で
 foreach (@QUERY){
 ($n,$v)=split(/=/);
 next if $n eq "data" && $v !~ /[^\d\%]/ && (@data = split('%',$v));
 $v=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
 $n=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
 ・・・

って書いてあったんですが、3行目のnextの部分が、どういう処理をしているのかがわかりません。

どなたか、日本語訳を教えてください。

42 :nobodyさん:05/03/11 11:48:17 ID:???
>>40
>cron起動だと出力内容を受け取れませんよね。
試してみた?

43 :15:05/03/11 11:49:53 ID:BXH5EoKa
っていうかLWPってかなりごちゃごちゃと難しいんですね。
DBI程度しか使ったことない人間にとってはorz
でもこれを理解すればかなりのことができるような予感。
頑張ります。

>>41
next if 条件式
これは条件式が真であればそれ以降の処理をすっとばして次のループに移るのです。
つまり
$n eq "data" && $v !~ /[^\d\%]/ && (@data = split('%',$v));

$nを文字列比較してdataと同じで且つ、$vの中には\dと%以外が入っていて、
最後の代入文を実行する。

3つの文が全て新ならnext発動です。

44 :15:05/03/11 11:52:32 ID:BXH5EoKa
>>42
すみません。勘違いでしたm(_ _)m
とにもかくにもwwwってのはブラウザに限らないんですね。
LWPの解説をちょっと読んだらそういうことが書いてありました。

クローラーもLWP使えば作れちゃいそうな感じですね。
ただ、モジュールというよりモジュール群のようなので難しいです;

45 :nobodyさん:05/03/11 11:54:39 ID:???
>>41
QUERYの内容がurl encodeされていたらurl decodeをする

46 :41:05/03/11 11:55:17 ID:wWuZgVEw
>>43
いずれにしても、最後の代入文は実行されるということで
いいんですよね?


47 :15:05/03/11 11:59:20 ID:BXH5EoKa
>>46
&&という演算子を勉強するといいです。
0 && 1
この場合1は評価されません。
1 and 1
1は評価されます。


48 :nobodyさん:05/03/11 12:00:25 ID:???
>>40
英語でわからんとかごちゃごちゃ難しいとか言ってないで
そこのサイト(ってCPAN本家だけど)の An Exampleだけで目的のことはできるような。

49 :15:05/03/11 12:02:58 ID:BXH5EoKa
>>48
http://homepage3.nifty.com/hippo2000/perltips/LWP.html
今こっちの日本語ページで勉強してます。
LWPの全容を理解するのが大変なだけで、今回やりたいことだけに的を絞れば
そんなに複雑なことでもないんですね。

50 :nobodyさん:05/03/11 12:06:46 ID:???
>>49のサイトの

# ユーザ・エージェント オブジェクトを作成
use LWP::UserAgent;
$ua = new LWP::UserAgent;
$ua->agent("AgentName/0.1 " . $ua->agent);

これなんで
$ua->agent("AgentName/0.1 " . $ua->agent);
こんなことしてんだ?
$ua->agent("AgentName/0.1");
の間違いだろ。

51 :41:05/03/11 12:08:42 ID:wWuZgVEw
>>46
条件文の&&は 且つ という意味でいいと思っていますが。
しかし、最後の文は比較するのではなく、代入してるっぽいので
前の条件文が評価されなくても、代入されるのかなと思ってますが。

間違ってますか?

52 :48:05/03/11 12:11:10 ID:???
自分もLWP::UserAgent以外使ったことないんだけどね。

53 :48:05/03/11 12:14:04 ID:???
>>51
間違いです
条件が満たされなくなった時点で次の判定式はスルーされます

54 :15:05/03/11 12:28:51 ID:BXH5EoKa
これは面白いですね!
他のページの出力内容を自分のページに埋め込むことができるというのはすごい!

LWPを紹介してくださってありがとうございますm(__)m

55 :nobodyさん:05/03/11 12:45:14 ID:???
なんとなく、 Perl や Web プログラミングをおぼえたてのナイーブだったあの頃を思い出させるスレの流れ。

56 :41:05/03/11 12:57:15 ID:wWuZgVEw
>>53
ということは、1つ目の条件式をクリアしたあと、
2つ目の条件式をクリアしたときにだけ
代入されて、次のループに移るってことですね?

57 :48:05/03/11 13:17:32 ID:???
>>56
正解
複数の式を||でつないだ場合は逆に式が真の時点で判定は終了する。

58 :nobodyさん:05/03/11 13:42:15 ID:???
小数点切り上げって関数がないようですがどうすれば?

$n = 100/49;
if ($nが小数点を含んでいたら){
int $n+1;
}

なんか面倒なのですがこれが普通ですか?



59 :nobodyさん:05/03/11 13:43:56 ID:???
というか小数点を含む数値がどうか調べる関数もないorz

60 :nobodyさん:05/03/11 13:47:09 ID:???
馬鹿な話ですがuseってプログラムの先頭に書いたほうがいいんですか?
使う直前の方がいいですか?

後者だと重複useがでる可能性がありますが、それを良しとするなら見やすいですよね。
意見お願いします。

61 :nobodyさん:05/03/11 13:58:58 ID:???
>>58
>>59
POSIXモジュールのceilとかmodf使えば?


62 :15:05/03/11 14:20:21 ID:BXH5EoKa
実装できました。

ところでこのLWPって制作側としてはものすごい便利ですが、これを使うと、
ユーザが直接アクセスしてもいないサイトへユーザの情報が自動的に送られてしまったりしますよね?

例えばとある悪質なアダルトサイトがあったとして、悪質だと気付かずにそこに
月額契約をした場合にその入力内容をそのまま他の数十のアダルトサイトへも
LWPでリクエストが送られて自動的に登録されてしまうような惨事も起きてしまう可能性もありますよね。

当然勝手に登録されたといっても、住所や電話番号からクレジットの暗証番号まで正確なので
下手したら裁判でも負ける気がするのですが・・・・

まあもちろんアダルトサイト管理人がLWPを使わずとも手動で顧客の情報で他のサイトにも
登録するのと同じことですが。

このあたりってみなさん気にしたことありませんか?

63 :10:05/03/11 14:30:12 ID:???
返答遅れてすみません。色々試してました。

正規表現を逆にしてみたりPerlメモの文字コードの
正規表現を見ながら自分なりに書いていたつもりだった
んですけど、上手くいきませんでした。

Unicode::Japaneseは315,392 バイトあるということで、
プロジェクトマネージャに却下されました。。。

色々とご教示いただき、誠に有難うございました。
もしも カタカナ->ひらがな変換に成功した際はこちらで
報告させていただきます。

64 :15:05/03/11 15:05:14 ID:???
>>63
よくわかんないけど、jcode.plですぐできるんじゃないですか?

jcode::tr(\$str,"ア-ン","あ-ん");
もしも半角カナもというならこれをやる前に
jcode::h2z_euc(\$str);
をやるだけ。

バイト云々ならlength関数とか使いながら一旦適度な長さに分割してそれからくっつける。

そういうルーチンを自分で作ればいいけど何か問題でもあるのかな?

65 :15:05/03/11 15:07:40 ID:???
追記
単に分割は危ないので、ちゃんと文字の区切りでやりましょう。

my @strings = $string =~ /[\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE]/og;
これはeucコードでなくてはならないので先にeucに変換して下さい。

66 :15:05/03/11 15:21:57 ID:BXH5EoKa
あ、すみません。LWPで1ヵ所質問です。

# リクエストを作成します
my $req = new HTTP::Request POST => 'http://www.perl.com/cgi-bin/BugGlimpse';
$req->content_type('application/x-www-form-urlencoded');
$req->content('match=www&errors=0');

今動作確認したらどうやら
$req->content('match=www&errors=0');
この値は自動的にURIエンコードしてくれてはいないみたいですが、
たとえば
hoge=あいうえお
なんて場合には自分で「あいうえお」だけエンコードしろっていう仕様なのでしょうか?

67 :nobodyさん:05/03/11 15:29:44 ID:???
>>62
https以外で本名、住所書いたことないし。それもある程度有名なところ。
その他のwebで入力した情報は一般に公開したものと思ってるから気にしてないしそういうとこ個人情報は書かない。
4月から個人情報なんたらは始まるけどどうなんでしょうね。

68 :nobodyさん:05/03/11 15:37:40 ID:???
LWPはhttpsでも問題なく使えるがそういう問題ではないのか?
よくわからん。そもそも勝手に登録されたものなんて無効だよ。
気にする必要なし。

69 :60:05/03/11 15:39:38 ID:???
お願いします;

70 :nobodyさん:05/03/11 16:05:15 ID:???
Perlって

の文字がエラーになるって聞いた覚えがあるんだけど、EUCで書いてれば無問題?

71 :nobodyさん:05/03/11 16:09:22 ID:???
>>70
sjisでもエスケープすれば無問題

72 :nobodyさん:05/03/11 16:20:46 ID:???
eqとか==の演算子って$_をデフォルトで対象にしてくれないみたいですが、
そういうことをしてくれるモジュールってありませんか?

for(0..4){
print "3回目" if 3 eq;
}

とかできると便利なんですけどね。

73 :nobodyさん:05/03/11 16:28:02 ID:???
あっそ

74 :nobodyさん:05/03/11 17:02:50 ID:???
aa... eq

75 :nobodyさん:05/03/11 17:25:44 ID:???
>>72
4回目だろ、とかいう突っ込みはありかな

76 :nobodyさん:05/03/11 18:45:46 ID:stOV0FtX
こんなのは?
print "3回目" if /^3$/;

77 :nobodyさん:05/03/11 19:20:11 ID:???
横着したがるのもたいがいにせいよと

78 :nobodyさん:05/03/11 20:08:10 ID:???
>>10
$value =~ s/\xa4\xa5/`/g;
$value =~ s/\xa5([\xa1-\xfe])/\xa4$1/g;
$value =~ s/`/\xa4\xa5/g;

79 :nobodyさん:05/03/11 20:13:17 ID:???
>>10
ところで、ひらがな→カタカナの変換はあれで大丈夫?

$value = "ばぅばぅ";
$value = "靴が痛い";

こんなのが、ちとヤバイと思うのだけれど。

>>60
大抵は先頭だね。
でも、配布するモジュールでもなければ好きな所に書いていいと思うよ。
(それから、encodingは、エンコードを始める位置で宣言する必要があるはず。)

>>72
sub at($);

for(1..4){
print "3回目" if at 3;
}

sub at($){ $_ == shift }

# 意味不明な世界へようこそ。

80 :60:05/03/11 21:13:35 ID:???
>>79
やっと来た・・・・・

やはり先頭ですよね。でももしも間違って
100行目: use DBI;
.
.
.
700行目: use DBI;

とかしても表面上にはエラーにならないくらいだから、内部的にも何の問題もないんですよね?(encordingなどは別として)


81 :nobodyさん:05/03/11 21:30:45 ID:???
use はコンパイル時に評価されるのでは?
実行時に評価されるのは require で。

82 :nobodyさん:05/03/11 21:43:35 ID:???
>>80
useやrequireは何度呼び出しても問題にはならないことになっている。
モジュールを先頭で呼び出すのは分かりやすくする為にすぎないので、実際に使う分にはどこに書いても構わない。



83 :nobodyさん:05/03/11 21:57:38 ID:???
>>80
大丈夫。

http://www.harukaze.net/~mishima/perl/man/perlfunc.1.html
> use Module
> 指定したモジュールから、現在のパッケージにさまざまな
> 内容をインポートします。 多くは、パッケージのサブル
> ーティン名や、変数名に別名を付けることで、実現されて
> います。 これは、
>
> BEGIN { require Module; import Module LIST; }
>
> というのと、全く同値です。

> require EXPR
...
> ファイルは、同じ名前で 2 回読み込まれることはありま
>せん。

http://www.harukaze.net/~mishima/perl/man/perlvar.1.html
> %INC ハッシュ %INC は、do や require によってインクルード
> された、個々のファイル名をエントリとして持っています。
> key は指定したファイル名で、value は実際に見つかった
> 場所となっています。 require コマンドは、指定された
> ファイル名が既にインクルードされているかを、この配列
> を使って調べます。

84 :nobodyさん:05/03/11 23:40:01 ID:???
モジュールの依存関係がわかりやすいように
useは頭に並べておくのが良いと思います。

85 :nobodyさん:05/03/11 23:55:38 ID:???
自分のサイトでだけ使うサブルーチンライブラリなんかで、
後からどんどんルーチンが増えていく時に、useだけルーチンから出しておくと、
何かと面倒。

なので俺は両方に書いてる。

86 :nobodyさん:05/03/12 00:26:54 ID:???
Perlで会員制ネットショップのCGIを組むとします。

ログインとかログアウトってどうやるんですか?
CGI::Session使えば簡単なセッションはできますが、相手のIDとPASSをセッションファイルに入れればいいのかな?
なんかセキュリティ云々がよくいわれてますが、どちらにしても言うほどのセキリティなんか実装しようがないですよね。

つまりどのレベルまですれば一般レベルなのかということです。

CGI::sessionでセッションIDはクッキーに焼くことで渡し、セッションファイルにIDとパスを。
IDとパスが実在すればログイン状態。

↑これはセキリティ的に足りないでしょうか?

87 :nobodyさん:05/03/12 00:43:48 ID:???
>>86
・IPの一致チェック
・cookieはディスクに保存させない
・可能ならSSLを使用
スクリプト作成者にできることはこれくらいでは。

それと、パスは保存する必要なしかと。

88 :nobodyさん:05/03/12 02:35:22 ID:DLGfeKNq
すいません。四捨五入させなさいとはどう記述すればいいのですか?m(__)m

89 :nobodyさん:05/03/12 03:03:55 ID:???
>>86
セッションで渡り歩かなくても済むような構成にしてしまうのも手。
渡り歩いた履歴はCookieに溜め込んで、最後のページでIDとPassを入力させて完了とか。

>>88
int()をちょいと工夫すればOK。マイナスには気をつけるよろし。

90 :nobodyさん:05/03/12 07:24:17 ID:???
PerlMagickは初心者でOKなんかな。
透過PNGの出力ができないんだけど、仕様ですか?
(透過しない)

透過GIFならできました。

91 :nobodyさん:05/03/12 08:11:23 ID:???
>>88
$num>0 ? int($num+0.5) : int($num-0.5);

92 :nobodyさん:05/03/12 14:10:22 ID:???
>>91
小数点切り上げもそれくらい短くすっきりとできませんか?

93 :nobodyさん:05/03/12 15:33:01 ID:???
$num==int($num) ? $num : int(++$num);

94 :nobodyさん:05/03/12 15:53:09 ID:???
>>93
おお!!

95 :nobodyさん:05/03/12 17:09:44 ID:???
その短いコードが何をやってるかぐらい理解しようや

96 :nobodyさん:05/03/12 19:44:08 ID:???
>>60
ちょっといまさらだけど。
useは、通常の実行文ではなくて、コンパイル中に実行される文だから、普通は先頭。

例えば、
1 + 1;
use hoge;
2 + 2;
とか、書いてしまっても、
絶対にuseから処理される。

if(bool){
  use hoge;
}
とか書いても、ifとか、そんな次元じゃなく、
1番最初にuseが処理される。
だから、普通は先頭に書く。

実行結果は、どこに書いても同じになるかもしれないけど、やっぱ普通は先頭。

スコープに影響するプラグマモジュールなら、話は別で、
適切な場所に書いておくよろし。
(ただし、この場合も実際にはuseは最初に処理されている)。

requireは、実行中に処理される普通の文なので、常に適切な場所が良いと思う。
でも、どこに書いても構わないなら、やっぱ先頭がいいなー。わかりやすいから。


97 :nobodyさん:05/03/13 08:25:22 ID:oiuJgK8i
掲示板つくってるのですがログを読み込んで全部配列に入れて処理してます。
メモリやばいですよね?


98 :nobodyさん:05/03/13 08:32:34 ID:???
>>97
whileで処理した方がいいなぁ

99 :nobodyさん:05/03/13 08:58:13 ID:???
>>97
ログの大きさにもよるが、負荷考えるならまず
書き込んだらhtmlに吐き出すタイプにしような。

100 :nobodyさん:05/03/13 11:22:33 ID:???
>>95
ん?どこが難しいの?

101 :nobodyさん:05/03/13 11:44:21 ID:???
パーミッションの変更はchmodで出来るけれど、
確認する方法はある?

102 :nobodyさん:05/03/13 12:53:41 ID:???
>>101
ファイルテスト演算子

103 :nobodyさん:05/03/13 13:32:47 ID:???
ふつー
chmod … || die

104 :nobodyさん:05/03/13 15:24:50 ID:???
>>87
テンポラリクッキーを使うのですか?でもそれって相手側に協力を求める必要があるんですよね。
IPチェックはちょっと面倒ですが、ログイン時の人間であるかどうかを確認するとセキリティの向上には
なかなかの効果がありそうですね。
SSLは当然です^^

>>89
それだとちょっと利便性が落ちそうですね。
会員価格とかが実現しづらくなります。


あ、IPチェックも無理だ・・・・・
携帯は確か毎回違うIP提出してくるキャリアがあるんだった・・・・



105 :nobodyさん:05/03/13 15:25:19 ID:???
remove関数

106 :nobodyさん:05/03/13 17:40:44 ID:???
>>105
誰に?

107 :nobodyさん:05/03/13 18:35:32 ID:???
コーディングのスレじゃなくて
perl全般の質問スレになったの?

108 :nobodyさん:05/03/13 18:39:04 ID:???
うん。

109 :nobodyさん:05/03/13 23:36:26 ID:???
>>107
っていうか分ける意味がわからんだろ

110 :nobodyさん:05/03/14 01:38:13 ID:???
>>109
でも、WebProgにあるのにActivePerlのインストール方法とか聞く奴がいるからなあ。

111 :nobodyさん:05/03/14 11:03:24 ID:???
>>110
それはスレを分けても変わらないでしょ。
基本的にこの板内のPerl関係の質問は大抵同じ人間が回答してるんだから
個人的には分割することに意義を感じられないな。まあ既に分かれてるものを
無理してくっつける必要があるというわけではないけどさ。

112 :nobodyさん:05/03/14 13:44:36 ID:???
確かに板自体がもうずっと人少な杉だし
回答者はどのスレでも一緒だろうな

そろそろどっかとまた合併すんじゃね?

113 :nobodyさん:05/03/14 14:07:00 ID:???
そもそもマとムとwebprogと分けるに至った経緯が知りたい。
ヲタク板なんて細分化する必要ないのになぁ。

114 :nobodyさん:05/03/14 14:52:44 ID:???
ゲ製も別だし

115 :nobodyさん:05/03/14 16:09:47 ID:???
ユーザ層が違うんだよ。

116 :nobodyさん:05/03/15 10:01:02 ID:3Ik8WJWF
gzip圧縮転送についてですが
tp://tech.bayashi.net/pdmemo/gzip.html
これを/bin/gzipでなくCompress::Zlibでやりたいのですが
open(STDOUT,"| $gzip -1 -c");の部分をどのように処理すればいいか
分かりません。どなたかご教授願います。

117 :nobodyさん:05/03/15 10:28:44 ID:???
ttp://aspn.activestate.com/ASPN/CodeDoc/Compress-Zlib/Zlib.html かな

118 :nobodyさん:05/03/15 11:26:01 ID:???
>>115
ユーザ層ごとに分けてどうするのよ。どうせ同じPerlだろ。
周辺関連に差は出るが、広い意見だったりちょっと関係ない知識までつくのが大手掲示板の利点でしょ?

CGIは作れるがwindowsで使える簡単なソフトは作れないなんていう人はこの板には結構いそう。
なんかもったいない。みんな一緒なら、知らずに目に入って付く知識で十分できるようになるのに。

って個人的な意見ゴメンね,(__),

119 :nobodyさん:05/03/15 11:53:16 ID:???
>>115が言いたいのはマ、ム、ウェブプ、ゲ製で
扱われる言語や話題のユーザー層が違うってことだろ

120 :116:05/03/15 11:56:36 ID:3Ik8WJWF
>>117
ご回答ありがとうございます。
教えていただいたwebに私のやりたい処理と似たような処理が紹介されてましたが
ちょっと違う感じです。スクリプト内部にprint文で書かれた内容全部をgzip圧縮させて
転送させたいです。スクリプトを貼り付けると、以下のような感じで処理したいです。
##の部分がうまくいきません。

#!/usr/bin/perl
use Compress::Zlib;

if ($ENV{'HTTP_ACCEPT_ENCODING'} =~ /gzip/) {
 print "Content-type: text/html\n";
 if($ENV{'HTTP_ACCEPT_ENCODING'} =~ /x-gzip/){
  print "Content-encoding: x-gzip\n\n";
 } else {
  print "Content-encoding: gzip\n\n";
 }

## ここで$bufferに<h1>Hello world</h1>以下の出力内容全てを代入したい

 print Compress::Zlib::memGzip($buffer);

} else {
 print "Content-type: text/html\n\n";
}

print "<h1>Hello world</h1>";
print "aaaaaa";


121 :nobodyさん:05/03/15 12:24:33 ID:???
>>120
printした後は標準出力に渡されるのでPerlでは圧縮しようがないのだが。
パイプでつなぎたくなければ圧縮してからprintするしかなかろう

122 :nobodyさん:05/03/15 12:35:49 ID:???
すいません。助けてください。
ID番号の出るスレッドに書き込みしたのですが
どうしてもそのレスを消したい場合に方法はないのでしょうか?
すごく困っています。絶対入れてはならないことをレスしてしまったもので・・


123 :nobodyさん:05/03/15 12:39:02 ID:???
>>122
レスの削除は、削除依頼板。
http://qb5.2ch.net/saku2ch/

124 :nobodyさん:05/03/15 12:52:16 ID:???
>122
どこやねwん

125 :116:05/03/15 13:03:28 ID:???
>>121
ご回答ありがとうございます。
tp://www.rfs.jp/sitebuilder/perl/02/08.htmlを参考にして子プロセスを作ることで出力を$bufferに代入することができました。
回答していただいた方々ありがとうございました。
参考までに成功したスクリプトを貼っておきます。(直したほうがいいところは指摘お願いします)

#!/usr/bin/perl
use Compress::Zlib;

if ($ENV{'HTTP_ACCEPT_ENCODING'} =~ /gzip/) {
print "Content-type: text/html\n";
if($ENV{'HTTP_ACCEPT_ENCODING'} =~ /x-gzip/){
print "Content-encoding: x-gzip\n\n";
} else {
print "Content-encoding: gzip\n\n";
}

if( open BUF, "-|" ){
while ($buf = <BUF>) {
$buffer = $buffer.$buf;
}
close(BUF);
print Compress::Zlib::memGzip($buffer);
exit(0);
}
} else {
print "Content-type: text/html\n\n";
}
print "<h1>Hello world</h1>";
print "aaaaa";

126 :nobodyさん:05/03/15 13:05:48 ID:???
>>125
その汚さなんとかしろよ

127 :125:05/03/15 13:06:21 ID:???
すいません。全角でインデントするのを忘れてました。
それ以外で直したほうがいい部分は指摘ください。

128 :122:05/03/15 13:31:20 ID:???
削除スレ教えていただきありがとうございます。
ですが、とてもじゃないけど、該当する項目がなくって無理でした。
というのが、自分の独り言を赤裸々にタイピングしてる途中に、
間違って「書き込む」のボタンを押してしまったんです。
しかも、人に知られたら恥ずかしいし、どうしようもない内容なんです。
で、IDが1日たっても変わってなかったってのもあって、きっと誰かが
それに気付いて恥をかくか、煽りの的になるなーと思うと、もー気になって
気になってパニックしてます。書き込みは慎重に行うべきですね。

129 :nobodyさん:05/03/15 15:54:03 ID:???
>>127
いや、全角インデントとかの話じゃなくてさ。
まあ好きにしてくれ。

130 :nobodyさん:05/03/15 15:54:46 ID:???
>>128
というか何を血迷ってここに書き込んでるんだ?
Perlとどういう関係があるんだよ。

131 :nobodyさん:05/03/15 16:10:30 ID:???
DBIでMySQLにつないでるんですが、例えばnameフィールドが重複してるデータだけ検索するのって可能ですか?

MySQLだけでは無理だと思うのでPerlでやるしかないと思うのですが、

name,age,mail
太郎,19,test@hoge.com
次郎,28,tet@hoge.com
....

こういうデータからnameの重複文だけ表示させたいのです。
こういうのって1回ずつやらないといけないのでしょうか?

my $data = select 1番目のデータ取得
my @重複 = select 色々 where name=$data

みたいに。(変な書き方ですみません。)


dataの中から例えばメールアドレスが重複してるのがあるかないか、あるなら
それをすべて表示。
一発でtest@hoge.comという値がいくつ重複してるか、tet@hoge.comがいくつ重複してるかを調べたいのです。

132 :nobodyさん:05/03/15 16:27:56 ID:???
>>131
全データのnameフィールドを取り出してハッシュで数えれば一撃。



133 :nobodyさん:05/03/15 16:40:21 ID:???
>>125-126
そう? 少し気になるとこもあるけど、まだマシな方だと思うなあ。
というわけで >>126 お手本プリーズ

134 :48:05/03/15 16:49:20 ID:???
>>131
>MySQLだけでは無理
普通にできますが
SELECT count(*) AS `count`, * FROM `table` GROUP BY `name` HAVING `count` > 1 ORDER BY `count` DESC

135 :134:05/03/15 17:01:28 ID:???
確認したらエラーが出たので訂正
SELECT count(*) AS `count`, `name` FROM `table` GROUP BY `name` HAVING `count` > 1 ORDER BY `count` DESC

136 :nobodyさん:05/03/15 19:02:33 ID:???
>>131
対象列がnameからmailに変化してるのにワロタ

137 :nobodyさん:05/03/15 22:04:08 ID:???
ム板の香具師にこのスレが低能集いスレに扱われている件について

138 :nobodyさん:05/03/15 22:04:56 ID:???
>>125
見ただけでもヘッダのつき方が滅茶苦茶だと思う。
問答無用で圧縮されたものを送っているというのも。

139 :138:05/03/15 22:06:55 ID:???
おっと、ブラケットを読み間違えてた。ごめん。


140 :nobodyさん:05/03/15 22:09:23 ID:???
>>137
どっちも見てる奴がほとんどじゃないの?

141 :nobodyさん:05/03/15 22:09:47 ID:???
>>138-139
>>137

142 :nobodyさん:05/03/15 22:17:03 ID:???
いや、でも誤読を誘発しやすそうなコーディングではあると思うよ。

143 :138:05/03/15 23:51:35 ID:???
腹が立ったので書き直してみた。
圧縮された内容にヘッダが付かないようにしたのと、
forkに失敗したときの対策。

my $pid;
if ($ENV{HTTP_ACCEPT_ENCODING} =~ /((?:x-)?gzip)/){
    my $encoding = $1;
    if ($pid = open(BUF, "-|")){
        local $/;
        my $buffer = <BUF>;
        close(BUF);

        print "Content-encoding: $encoding\n",
            "Content-type: text/html\n\n",
            Compress::Zlib::memGzip($buffer);
            exit;
    }
}
if (not defined $pid){
    print "Content-type: text/html\n\n";
}

print <<"EOF";
<html>
<head><title>test</title></head>
<body><h1>Hello world</h1><p>test-test</p></body>
</html>
EOF
exit;

144 :nobodyさん:05/03/16 00:23:12 ID:???
if ($ENV{HTTP_ACCEPT_ENCODING} =~ m/((?:x-)?gzip)/ and open BUF, '-|'){
    my $encoding = $1;
    local $/ = undef;

    print "Content-Encoding: $encoding\n",
          "Content-Type: text/html\n\n",
          Compress::Zlib::memGzip <BUF>;

    close BUF;
    exit;
}

print "Content-Type: text/html\n\n",
      <<"EOF";
<html>
<head><title>test</title></head>
<body><h1>Hello world</h1><p>test-test</p></body>
</html>
EOF

145 :nobodyさん:05/03/16 01:23:42 ID:???
144 > 143 ?

しかし local $/ = undef; っていいな、使える。 いままで気づかなかったよw

コードはいいけど、HTML中途半端なのは何でかなw
どうせ省略するなら title と p だけでいいのに。

146 :nobodyさん:05/03/16 06:44:11 ID:???
>>144
圧縮する内容物にもヘッダが付きますが、必要ですか?

147 :125:05/03/16 08:48:11 ID:???
>>143-144
きれいに修正ありがとうございます。
活用させていただきます。

148 :nobodyさん:05/03/16 11:21:44 ID:uAWX38vA
htmlファイルをopenして、その中のリンクを取り出し、アンカー名 URL、というふうにしたいのですが、
URL中に?があるときだけうまく取り出せません
念のためエスケープしてもうまくいきません
たすけて

348 while ($main=~m/(<a href=\"(.*?)\">(.*?)(?: +?)?(?: +?)?<\/a>)/ig){
349 $matc1=$1;$matc2=$2;$matc3=$3;
350 if ($matc2 eq $matc3){
351 $main=~s/\Q$matc1/$matc2/;
352 }else{
353 $main=~s/$matc1/$matc3 $matc2/;
355 }#if else;
356 }#while;


149 :nobodyさん:05/03/16 13:37:59 ID:???
>>148
いろいろ無駄っぽw

$main =~ s{<a href="(.*?)">\s*(.*?)\s*</a>}{ ($1 eq $2) ? $1 : $1 .' '. $2 }eig;


150 :nobodyさん:05/03/16 13:40:10 ID:???
あ、: $2 .' '. $1 か。

151 :nobodyさん:05/03/16 14:36:59 ID:???
>>150
別にeqまでしなくていいでしょ。それならtitleとか考慮したら?

s{<a\s+.*?href="(.*?)".*?>\s*(.*?)\s*</a>}{$2 $1\n}ig;



152 :nobodyさん:05/03/16 15:11:14 ID:???
> 別にeqまでしなくていいでしょ
え、なんで?
>>148 でそう書いてるなら、その条件で書くべきなのでわ。
どっからどこまでしたいのかなんてわからないよ。
あと、考慮するなら s オプションもつけとけば。

153 :nobodyさん:05/03/16 16:46:33 ID:???
>>152
ごめん本人のコードは汚いから全く読んでないんだ^^;
日本語だけ読んだ。

ごめんよ〜。

154 :nobodyさん:05/03/16 17:55:11 ID:???
> 汚いから
ワロタw
まあ>>148は参考にするよろし。

155 :nobodyさん:05/03/17 06:55:12 ID:???
すみません、質問です。コードを書いて構文チェックしてみたらsyntaxエラーが出て、
色々と絞ってみると下記のコードがエラーの原因だと分かったのですが、どのように治せばいいのでしょうか?
while ( my ($code, $ress) = each(%DATA{'expect'}) ) { }
%DATA{'expect'}はハッシュのハッシュです。これを%DATAに変えてみるとエラーが出なかったので、
ハッシュのハッシュをeachにぶちこんでるのが何か悪いのかな、と思いましたが解決方法が分かりません。。
どなたかご教授して頂けると幸いです。

156 :nobodyさん:05/03/17 07:36:06 ID:???
%{ $DATA{'expect'} }

157 :97:05/03/17 11:09:03 ID:???
>>98
はいwhileで1行づつ読み込んで処理しようと思います。ありがとうございます。

>>99
Flash用なのでテキストに書き出すことにしまふ。ありがとうございます。

158 :125:05/03/17 12:01:21 ID:???
再びの質問で大変恐縮なんですが、もう1つ教えてください。
>>143のスクリプトでgzipの圧縮レベルを設定してみたのですが
Compress::Zlib::deflateInit( -Level => 1 );
という行を追加してCompress::Zlib::memGzip($buffer)の内容をファイルに書き出してみて
ファイルサイズを調べてみたのですが
-Level => 1の場合と-Level => 9の場合とでファイルサイズ変わんないのですが
使い方間違ってますか?
$bufferの中身はいろいろ変えてみましたが、やはり変わりませんでした。

159 :nobodyさん:05/03/17 13:27:19 ID:+OmKbfyB
質問です。
多数のファイルを生成する際に、ファイル名としてユニークな名前がほしいのですが
Perlの定石としてはどんな方法を用いるのでしょうか?

timeからファイル名を作ろうかと思ったんですが、同じ名前になることもあるだろうし
通し番号を持つのも面倒だし、と思いまして。

160 :とうかつ:05/03/17 13:38:35 ID:ZeP4drG9
perlのファイルアップロードに関する質問です、よろしくお願いします。
HTMLの<INPUT type="file">フォームで指定したファイルをcgiと同じ場所にアップロードしたいと思っていますが、
どうしても成功しません。、以下に関連ソースを書きます。

●フォームHTMLの中の記述
<FORM>
<INPUT type="file" name="pic_file_name" size="80">
<INPUT type="button" value="写真の追加" onClick=doAddPic()>
</FORM>
※この<FORM>〜</FORM>内に他に多数の<INPUT>あり。

●フォームHTMLのJavaScript記述
<SCRIPT language="JavaScript">
<!--
function doAddPic()
{
  document.Form.action = "./pic_upload.cgi";
  document.Form.method = "post"
  document.Form.enctype= "multipart/form-data";

  document.Form.submit();
}
//-->

161 :とうかつ(続き):05/03/17 13:39:20 ID:ZeP4drG9
●pic_upload.cgi
use CGI;
my ($buffer);
$CGI::POST_MAX = 1024 * 1000; # max = 1MB

# オブジェクト作成
my $query = new CGI;

my $file_handle = $query->upload('pic_file_name');

# ファイル保存
my $save_name = "UploadFile.xxx";# 名前は仮
open (OUT, ">$save_name") || die "Can't open Savefile!";

binmode (OUT);
while(read($file_handle, $buffer, 1024))
{
  print OUT $buffer;
}

close (OUT);
close ($file_handle);

162 :とうかつ(続き):05/03/17 13:39:57 ID:ZeP4drG9
・cgiは最後まで正常に走る。
・"UploadFile.xxx"ファイルは作成されるが、中身に書き込まれない。
・途中 print "$file_handle"; としても何も出力されない。
・クエリーname 'pic_file_name' でファイル名は送られている。ほかのINPUTデータについても正常に送られている。
・フォルダの権限は777
・perlのバージョンはv5.8.0

apacheは自分でインストールした物ですので特別な設定が必要だったらかけている可能性も考えられます。
もし可能性がありましたら教えて下さい。
何とか動かしたいと思っていますのでご支援お願いします。

163 :nobodyさん:05/03/17 13:44:23 ID:???
>>159
定石とか知らんけど

my $file = time();
while (-e $file . '.txt') { $file++; }
$file .= '.txt';

とかじゃね?

164 :nobodyさん:05/03/17 13:55:35 ID:???
>>163
それだけだと危ないよ。

>>159
1個のプロセスがファイル作成関連処理のをしている間は
他プロセスにはさせないようにしれ。

165 :nobodyさん:05/03/17 13:57:08 ID:???
>>162
>・"UploadFile.xxx"ファイルは作成されるが、中身に書き込まれない。
>・途中 print "$file_handle"; としても何も出力されない。

もう答えは出てるじゃん。アホ?

166 :nobodyさん:05/03/17 13:59:10 ID:???
>>164
じゃあ一旦 temporary.txt に書き出した後、
>>163 でチェックして rename するとか。 ダメ?

167 :nobodyさん:05/03/17 14:01:44 ID:???
>>160
まず不必要でしかも微妙そうなそのJavaScriptをやめてみるとこから始めてみるのはどうだろう?

168 :とうかつ:05/03/17 14:11:41 ID:ZeP4drG9
>>167
早速やってみました、JavaScriptを抜いた普通のHTMLでやってみましたところ
正常にアップロード出来てしましました、ありがとうございます。

それはそれでまた困ったな…submitボタンの区別が出来ない…

169 :nobodyさん:05/03/17 14:18:07 ID:???
>>166
誰やねんおまえは。159か?
普通に排他処理使って特定ファイルを開いてる間に本処理をやればいい。

>>168
お前はこのスレ以前の問題なんじゃないか?

170 :とうかつ:05/03/17 14:29:11 ID:???
>>169 JavaScriptは別の所で質問させていただきますね

171 :nobodyさん:05/03/17 14:29:18 ID:???
>>159
Perl の定石はしらないけど、漏れはいつも djb 風に、
sprintf("%d.%d.%d", time(), $$, $uid++);
みたいなのを使ってます ($uid はプロセス内で unique になる数字) 。
ファイルシステムをネットワークで共有している場合は、
さらにこれにホスト名も付けます。

172 :nobodyさん:05/03/17 14:34:28 ID:???
>>168
できたのかw
で、なんで submitボタン〜 とか考える必要があるの?
というか type="button" で submit させる方がいかがなものかと。
とりあえず class と CSS で指定しとけば 「区別」 はつくんじゃないの?

>>169
いやファイルロックの話じゃなくて、ユニークなファイル名をつけたい、って話なのだよ。

173 :nobodyさん:05/03/17 15:59:43 ID:???
>>172
だからAというファイル名がユニークであるか確認してからAというファイルを新規に作成
するには排他処などで他のプロセスをとめないいけないんだよ。

もしかして新規作成するファイルをロックするとかいう勘違いしているのかな?

174 :48:05/03/17 16:24:48 ID:???
>>173
>>171みたいにプロセスIDを付け加える方法はどうでしょうか

175 :nobodyさん:05/03/17 16:56:31 ID:???
>>174
・・・・あなた俺より詳しいじゃない。
個人的には48はこのスレで一番まともな回答者だと認知している。

なのであなたに「どうでしょうか」といわれるととても恐縮だorz

なんか鬱だな・・・

176 :nobodyさん:05/03/17 17:01:32 ID:Ykle1A6k
現在いるページ(〜.cgiのperlのページ)がhttpsかhttpか否かをしるためには、
どうすればいいのでしょうか?

なお、サーバはApacheです

177 :nobodyさん:05/03/17 17:29:39 ID:???
>>175
ひとつのプロセスで複数のファイルを作る場合は、
time + ランダムな文字列(a-z..A-Z..0-9)数桁
でやってます。

100%名前が重ならないとは言えないけど、
仮に6桁の文字列を付加したとして、1秒に10個ファイルを作成した場合でも、
各ファイル名の重なる確率は約568億分の1

$time = time
@key = ('a'..'z','A'..'Z','0'..'9');
1 while (length($keys .= $key[rand(@key)]) < 6);


178 :nobodyさん:05/03/17 17:33:19 ID:???
↑みす途中でおくっちゃった
$name = time;
@key = ('a'..'z','A'..'Z','0'..'9');
1 while (length($name .= $key[rand(@key)]) < 16);

179 :171:05/03/17 17:47:25 ID:???
あ、そうそう、漏れはちょこっといじったことしかないんだけど、
本格的にやるなら Data::UUID を使うという手もあるかもしれません。
大袈裟過ぎるかもしれませんが。

180 :nobodyさん:05/03/17 20:30:18 ID:???
2chのスレからデータを取得して、四桁の番号(全角も半角も)があるスレを抜き出すスクリプトを作っているのですが
マッチの誤動作防止のためにEncodeのdecode関数を使っているのですが処理がこれでもかと言うほど遅くなってしまいます。。
どなたかもっと早く処理できる方法をご存じでしたら教えて頂けないでしょうか。

181 :159:05/03/17 20:47:11 ID:???
うーん、いろいろな方法があるんですね。
一意的な方法があるのかと思っていました。
今回使うファイル名はそのままURLになるので、単純なモノを使いたいと思います。

あと、これは興味本位なんですが2chのスレッド名に使われている方法はどんな方法なんでしょう?

182 :nobodyさん:05/03/17 20:58:46 ID:???
>>181
time

183 :nobodyさん:05/03/17 21:08:51 ID:???
>>180
うーん、マシンをもっと速いのに替えるとか
でもそんなに遅くなる? 俺んちの自宅鯖だと1Mbyte decode するのに0.3秒ぐらいだけど

>>181
There's more than one way to do it が perl の哲学だからな

2ちゃんねるのスレッドURLは unix timestamp
だから同一時刻に複数スレッドが立つと同じURLになってしまう
これを避けるために1秒に1スレしか立てられないよう排他処理をしているはず

184 :nobodyさん:05/03/17 21:35:20 ID:???
>>183
utf8で処理している方は数分掛かり、そうでない物はすぐ処理が終わりますorzなんでだろう、、
もし宜しければソースを見て頂けると幸いです。指定されたスレッドのレス範囲から四桁の数字を抜き出し、
ヤフーファイナンスから取得した各種データと四桁の数字、その四桁の数字を指定したスレッドをeuc-jpで出力するスクリプトです。
http://noiser.info/script/utf8.txt
http://noiser.info/script/shift_jis.txt

185 :nobodyさん:05/03/17 21:39:04 ID:???
>>158
Compress::Zlibのソース見ると、圧縮レベルを決め打ちしているので、
gzopen(),gzsetparams()を使うしかないと思われ。

>>183
> これを避けるために1秒に1スレしか立てられないよう排他処理をしているはず
仕様が変わっていなければの話だけど、
既に同じ番号のスレがあるときは+1して同じスレがあるかを再度チェック。これを繰り返してる。

186 :nobodyさん:05/03/17 21:55:45 ID:???
>>185
結局>>163

187 :nobodyさん:05/03/17 22:01:44 ID:???
>>184
漏れの環境 (Linux + perl 5.8.4) で実行させてみたが、どっちもすぐ終った
CPU時間でsjis版が0.199秒、utf8版が0.258秒

188 :nobodyさん:05/03/17 22:03:45 ID:???
>>186
そう、排他処理が不完全で、二つのスレが合体するという問題が起きていた。
昔の話だけど。

189 :nobodyさん:05/03/17 22:20:07 ID:???
まだ意味がわかっていない >>186

190 :nobodyさん:05/03/17 23:02:05 ID:???
>>184
WindowsXP + perl 5.8.4 + CPU 700 (w で、 utf8 : 0.52 , shiftjis : 0.27 だった。
まー、UTF8 経由する分、ある程度は遅くなって当前なのでは?

191 :エディタスレの416:05/03/17 23:25:47 ID:???
あの、教えてください。
今、言語覚えようとはじめたんですが、
エディタをテラパッドに決め手
プログラムを打ち込んだのですが
プログラムはどうやって動かして確認するんですか?
winXPです。

192 :nobodyさん:05/03/17 23:30:31 ID:???
「初めて CGI Perl」とでもしてぐぐれw

193 :nobodyさん:05/03/17 23:32:40 ID:???
悪意の妨害者(プロセス)がいると仮定した場合の排他制御はどうする?

194 :nobodyさん:05/03/17 23:46:15 ID:???
えーーと・・・・・・何で排他制御の話になったんだっけ?

195 :エディタスレの416:05/03/17 23:48:07 ID:???
>>192
一歩踏み出せそうです感謝。

196 :エディタスレの416:05/03/18 00:08:00 ID:???
自分のPCをサーバーにしないといけないみたいですね。
独学が大変なのはわかりました^^;

197 :nobodyさん:05/03/18 00:14:39 ID:???
や、ブラウザで見るんじゃなくて、コマンドプロンプトで Perl 使うくらいだったら、サーバ立てなくてもいいんじゃない?
まー 「サーバ立てる」 つっても、Apache (か Httpd とか) インストールするだけだし、実際やってみると思うよりは簡単だと思うけど。

198 :nobodyさん:05/03/18 00:27:56 ID:???
俺みたいなスクリプト小僧にならないでね

199 :184:05/03/18 06:37:22 ID:???
>>187>>190
テストして頂いて恐縮です。僕の実行環境に問題があるみたいですね。。
僕の環境だとutfが二分ちょい、shiftjisが数秒です。(Athlon XP 2500+)
Perl入れ直したりしてみます。どうもありがとうございました(_ _)

200 :nobodyさん:05/03/18 07:56:29 ID:YtF+f69M
perlで自動登録リンクのようなものを作っています。
登録後にメールを送る処理をするのに、次のように書いています。

メールは送られるのですが、なぜか一部の文字が化けてしまいます。
上の例だと「貼」、「構」あたりで化けてしまいます。
文字コードの関係で漢字が化けてしまうのでしょうか?
他の部分は化けていません。

解決策や原因がわかる方がいたら、教えてください、よろしくお願いします。

201 :200:05/03/18 07:57:55 ID:???
#メール送信部分
sub mail_send{
my $temp=$_[0];
my $mail;
if ($m_sendtome){$temp.=" , $m_mailad";}
$mail = "To: $temp\n";
$mail .="From: $m_mailfrom\n";
$mail .="Subject: $_[1]\n";
$mail .="Errors-To: $m_mailad\n" if $m_sendtome;
$mail .="Content-Transfer-Encoding: 7bit\n";
$mail .="Content-Type: text/plain\; charset=\"ISO-2022-JP\"\n\n";
$mail .=$_[2];

&jcode::convert(\$mail,'jis');
open (OUT,"| $sendmailpath -t") || die &error("sendmailが使用できませんでした。");
print OUT $mail;
close (OUT);
}

# メール本文
sub mail_ok{
return <<EOD;
登録が完了しました。下記のタグを貼り付けてください。
必要のない方は貼り付けなくても構いません。


署名
EOD
}

#メインの中でmail_sendを実行
&mail_send($mailadd,$honbun,&mail_ok());

202 :200:05/03/18 07:59:27 ID:???
また、なぜか送信メールの改行が

mail_ok の中の改行と違って1行になってしまいます。

原因・解決策わかる方、よろしくお願いします。

203 :158:05/03/18 08:03:13 ID:???
>>185
変更できないようにされてたんですか。。残念です。。
調べて頂いて有り難うございました。

204 :nobodyさん:05/03/18 08:17:16 ID:???
>>159
普通は、
use Fcntl;
...
my $name;
do{
$name = 適当に生成;
} until(sysopen(FH, $name, O_WRONLY|O_CREAT|O_EXCL));
...
close(FH);
みたいな感じ。
O_EXCLを使うことでファイルオープンとファイルの存在確認をアトミックに行えるところがミソ。
sysopenではなく、FileHandleまたはIO::Fileモジュール使うことが多いけど。
クックブックのレシピ「一時ファイルを作成する」を参照のこと。

もうちょっと複雑な処理が混ざったり、sysopen()やモジュールを使いたくないなら、
処理をきっちり排他制御する。

205 :nobodyさん:05/03/18 08:23:44 ID:???
>>201
貼にx5Cが含まれているからでしょうね
return <<'EOD';
とシングルクォートでエスケープされないようにしたらいいかな
それとメールのヘッダーの改行は\r\nと決められてます。\nでも動作するようですけど。

206 :200:05/03/18 08:32:51 ID:???
>205

そういう風にしないとだめなんですね。
\nも直しました。
そしたら、文字化けが直りました!!!

なのですが、行数の関係で、実は省略してあったのですが、

sub mail_ok{
return <<EOD;
登録ID : $_[0]

登録が完了しました。下記のタグを貼り付けてください。
必要のない方は貼り付けなくても構いません。

署名
EOD
}

などとして、引数を含めています。
returnで返す前に、普通に変数に入れてから返したほうがよいでしょうか?
それとも、他にこの中でそのまま変数を表示させるよい方法があるのでしょうか?

重ね重ねすみませんが、可能かどうかだけでも教えてください。
よろしくお願いします。

207 :nobodyさん:05/03/18 08:42:42 ID:???
>>206
じゃあ文字化け文字に\をつける
sub mail_ok{
return <<EOD;
登録ID : $_[0]

登録が完了しました。下記のタグを貼\り付けてください。
必要のない方は貼\り付けなくても構\いません。

署名
EOD
}

208 :200:05/03/18 08:48:48 ID:???
あぁ、できました!!

漠然と中の文字がおかしいんだろうと思ってたものの、
原因がわからずに他のとこをいじったりして、ずっと悩んでました。
これでうまくいきそうです。

原因がわかったので関係するサイト等をぐぐって勉強してきます。

ほんとにどうもありがとうございました。

209 :nobodyさん:05/03/18 20:32:06 ID:???
教えてください
webページをhttpダウンロードしてくるプログラムを作りたいのですが、参考に
http://x68000.q-e-d.net/~68user/net/http-2.html
をコピペして実行すると、
print SOCKET "GET /index.html HTTP/1.0\r\n";
で止まって進まなくなります。

winME時代に同じことしたときは動いた覚えがあるので、
winXPのファイアウォールとウィルスセキュリティのファイアウォールを切ったのですが、まだ変わりません。
ほかにチェックする場所はありますか?
winXP sp2+perl 5.005_03+コマンドラインから実行中です。

210 :209:05/03/18 20:33:20 ID:???
すいません、サーバーにうpすると動くので、サンプルは間違ってないと、多分思います。

211 :nobodyさん:05/03/18 21:12:40 ID:???

バカか

212 :nobodyさん:05/03/19 01:17:30 ID:???

  ヽ/⌒ヘ~     ,、            
  ., 't,_,ノ丶   (__,\、   r'~゙i、   ばっかでーす♪
 /  !   '`    / ● ⌒  ヽ,、\,
           (〇'゙ l__/ ● | `〜    〜 △v
        i、_,゙i   し'i ゙〇ノ L,_il        厦
         ゙゙ー|     ii    r'゙\/゙i,~、  ∧∧∧
           |  "  ij   ノ/゙、/    (    )
         ,;、 > ゝ~゙ ゝ ソ         ~ T ~
          、(_/  (,,/        <ヽ | //

213 :nobodyさん:05/03/19 12:39:33 ID:VZlT0CLh
perlで画像の加工方法について質問です。アップロードした画像(bmp,jpg,gif)のサムネイルを自動作成しようと思っています。
perlは画像加工に弱いとのことで、調べてみた結果imagemagicというものをインストールするという手があるようですが、
しかし恐らくソースコードを置くだけのライブラリならともかく、稼働先でインストールのようなことは出来ない可能性があり
他の手段を探しています、何かメジャーな手はありませんでしょうか?

214 :nobodyさん:05/03/19 13:26:09 ID:a8Nv17ZI
@saveという配列の中にある変数$textに文字を入力(代入?)してもらって保存

また$textに別の文字を入力、『$textに入力された文字群』というくくりの中で、上のとは別の文字として保存
この保存した二つの文字を取り出して
『$textに入力した文字群から●を抽出し、@save内の変数$plusを付加する』

……というのは可能でしょうか?
『$textに入力された文字群』というくくりの中で、上のとは別の文字として保存
この動作が、どう書いたらいいものか解らなくて…

215 :nobodyさん:05/03/19 13:51:41 ID:???
>>214
チミはperlの前に日本語を勉強すべきだ。何を聞きたいのかまったくわからん。

216 :nobodyさん:05/03/19 14:24:33 ID:???
フォーマットを使っているのですが、内部的にUTF8のモードで使うと二バイト文字も@バイト文字も
どちらも同じ大きさ?だと解釈されてしまって結果的にちゃんとフォーマット通りに出力されません。
どなたか解決方法を教えて頂けると嬉しいです。。

217 :nobodyさん:05/03/19 14:36:51 ID:???
おかしいな徹夜明けだから日本語がうまく理解できないよ

218 :nobodyさん:05/03/19 15:08:22 ID:a8Nv17ZI
>215
$textっていう変数に文字や数を複数回代入
その文字や数の中から特定の文字を検索する

という作業です

219 :nobodyさん:05/03/19 15:24:36 ID:???
>>216
「フォーマット」 の意味がわからんw

>>218
@save = ( 'かくかく $text しかじか', 'あれこれ $text どれ●これ');
$text = 'ほげ●はげ';
foreach (@save) { s/\$text/$text/; }
 したあと、
$plus = 'ひげ';
foreach (@save) { s/●/$plus/; }
 ってこと?
 でも 「●」 が $text 内にあったのかどうかは区別できないし、って?
さっぱりわからんw

同じプロセス内でやるなら、テキストに使われない文字でマークアップしとけばいいんじゃない?

220 :nobodyさん:05/03/19 15:33:07 ID:???
なんかもの凄いアホが来てるな。

もっとわかりやすく言わないとだめだよ。君の質問をイチイチ時間かけて解釈してまで
回答してくれるひとは滅多にいないから。

さぁもう1回頑張ってまとめてみなさい。

221 :nobodyさん:05/03/19 15:34:20 ID:???
>>216
みんなformatって知らないのか…。俺もつかわんけど。
これ参考になる?
http://search.cpan.org/~dankogai/Encode-2.09/encoding.pm#KNOWN_PROBLEMS

222 :nobodyさん:05/03/19 15:36:04 ID:???
>>214
$textの中から任意の文字列を取り出したいだけでしょ?

my ($new_text) = $text =~ /任意の文字列正規表現/;

223 :nobodyさん:05/03/19 15:37:45 ID:???
>>216
my $kanji = "あああ青春の歌";

format STDOUT =
@<<<<<
$kanji
.
write;

これをこのままで実行すると「あああ」という結果が得られて、
use encodingなんかを使うと「あああ青春の」になるという話だとしたら、
フォーマットを書き直した方がいいと思うけど。

224 :216:05/03/19 16:08:00 ID:???
>>219
Perlのformat機能です。
>>221
ありがとうございます。私も初めて使いました。少し必要になったので。。
なるほど。UTF8を一回shift_jisなどに変換して処理するという手もありますね。
>>223
わかりにくくてすみません。大体そんな話しなんですが、
format STDOUT =
@<<<<<<<@<<<<<<<に
'てすと','てすと2'や'tst,'tst2'をぶち込んだときに、
どちらも二つの要素の間の半角スペースの数が同じになってしまうので
フォーマットに一貫性が無くなってしまうんです。
つまり、'てすと','てすと2'や'tst,'tst2'を先ほどのフォーマットに入れると、"
てすと   てすと2  
tst   tst2  
となってしまうんです。use encodingしてない時みたいに
てすと   てすと2  
tst    tst2    
(半角スペース二個を全角一つに置き換えてます。)となって欲しいんですが。。(等幅フォントじゃないと分かりにくいかもです。)

225 :nobodyさん:05/03/19 17:09:58 ID:???
>>224
Shift_JISと仮定して書いてみた。

use encoding "shiftjis";
use Encode;

my @str;

format RAW_FORM =
@<<<<<<<@<<<<<<<
map{ encode("shiftjis", $_) } @str
.

open(RAW_FORM, ">&STDOUT") or die $!;
binmode(RAW_FORM=>"raw");

@str = qw(てすと1 てすと2);
write RAW_FORM;
@str = qw(tst tst2);
write RAW_FORM;

close(RAW_FORM);

exit;

かなり強引。

226 :nobodyさん:05/03/19 18:27:47 ID:???
>>224
カタカナで書くなよ。

227 :216:05/03/19 18:43:12 ID:???
>>225
出来ました。。随分時間掛かってたので嬉しいです。
ありがとうございました〜(_ _)

228 :218:05/03/19 18:44:09 ID:???
すみません。うまく書けません。日本語も不自由ですが知識もないせいだと思います…orz
●は便宜上の記号でした。
もう最初書いたのから掛け離れてるんですが、やりたかったのは
@saveの中には$textと$plusと$rimitと$resultがある
$textが設定されたテキストフィールドに『ほげ』と入力すると、
datファイルに『ほげ』が保存される
処理A------------------------------------------------
$rimitが100に達した時、$result = $text . $plusみたいな感じで$textと$plusが連結
$resultがdatに保存される
-----------------------------------------------------

$textに改めて文字『ほげ』が入力される→datに保存される
※最初の『ほげ』とは別物として認識させたい

二度目の『ほげ』が処理A後$resultとしてdatに保存される時、
前回の『ほげ』と見分けがつかなくなるので
$plusは00、01…のようにナンバリング等で別々の値にしたい

$textに二度目以降文字が入力された時、datに保存されている$textの値が
上書きされるのかされないのかがまず判らなくて悩んでいた次第です
ホントすみません…

229 :nobodyさん:05/03/19 18:57:02 ID:???
エスパーさん、>>228頼むわw・

230 :nobodyさん:05/03/19 22:05:10 ID:???
>>229
うんこやるよ
つ●

231 :nobodyさん:05/03/19 22:08:29 ID:???
あれ?昼に徹夜明けで帰って
さっきまでたっぷり寝たのに日本語がわかんない
今度は寝すぎかな?



232 :nobodyさん:05/03/19 22:14:42 ID:???
>>230
return うんこ . はなくそ

233 :nobodyさん:05/03/19 22:17:59 ID:???
理解不能 理解不能
>>228 はとりあえず要所要所スクリプトで例書いてごらんw その方わかるかもw

234 :nobodyさん:05/03/19 22:51:45 ID:???
いや、もういいです
つまんないネタになるだけだと思うので
お邪魔しました

235 :nobodyさん:05/03/20 00:27:27 ID:???
自分の日本語がおかしくないとでも言いたげだな。

236 :nobodyさん:05/03/20 00:33:08 ID:???
まあまあ。(*´∀`)ノ

237 :nobodyさん:05/03/20 02:15:24 ID:???
while (1) {
  print "Hello Unko World!\n";
}

238 :nobodyさん:05/03/20 03:10:16 ID:???
"unknown world" と "unko world" は若干似ている

239 :nobodyさん:05/03/20 03:22:48 ID:???
つ●

240 :nobodyさん:05/03/20 11:54:57 ID:???
>>228
datファイルに書き足していきたいだけだろ?
ファイル操作のあたりを調べてみなさい。

それとテスト環境を作って自分で色々試しなさい。
どうせサーバーで直接試してるんだろうから。



241 :nobodyさん:05/03/20 13:14:23 ID:RNFnJUaq
perlでCGIを作成しております。手元のWindowsXP+Appache+Perlで開発&
動作確認後、サーバーにアップロード、という手順で開発してるのですが、
perlスクリプトの一行目のperlスクリプトの指定を、

#!c:/Program Files/perl/bin/perl

から、アップロードの時だけいちいちサーバのパス指定に合わせて

#! /usr/local/bin/perl

と書き換えています。結構面倒だし、変更を忘れてエラーになることも
しばしばです。何かスマートな方法があるのではと思ってるのですが、
アドバイスいただければ幸いです。





242 :nobodyさん:05/03/20 13:30:13 ID:???
C:\usr\ に perl インストールすればいいよ。俺はそうしてる。

243 :nobodyさん:05/03/20 14:04:16 ID:???
>>241
Apache 1.3.xなら、.cgiの拡張子をPerlに関連付けすると、
シェバングパスを無視して実行してくれる。
私はそうしてる。

244 :nobodyさん:05/03/20 15:17:59 ID:???
>>241
>>242

245 :nobodyさん:05/03/20 16:24:18 ID:???
俺漏れも

246 :nobodyさん:05/03/20 17:22:51 ID:Z0GAs5yv
Perlで設定ファイルを編集する、という処理をしています
編集画面はしっかり編集されるのですが編集を実行すると
$params{'body'}の値が数字になってしまいます
$params{'body'}の部分にはタグも表示できるようにしてあるのですがそれが関係しているのでしょうか
三日三晩眺めてみてもどうしてもわかりません…
ご教授お願いします。

247 :nobodyさん:05/03/20 17:26:02 ID:???
sub top {
my $kugiri = "<<>>";
if ($params{'pass'} ne $pass) { &error("パスワードが違います"); }

# 編集
if ($params{'c'} eq "topedit") {
if (!$params{'body'}) { &error('入力がありません'); }

$params{'body'} =~ s/\r\n/\n/g;
$params{'body'} =~ s/\r//g;
$params{'body'} =~ s/\n/<br>/g;
$params{'body'} =~ s/&/&/g;
$params{'body'} =~ s/</</g;
$params{'body'} =~ s/>/>/g;
$params{'body'} = ~s/"/\"/g;
open(OUT,">setup.dat") || &error("setup.datを開くことができません");
print OUT "$params{'body'}$kugiri$params{'title'}$kugiri$params{'text'}$kugiri$params{'bgcolor'}$kugiri$params{'link'}$kugiri$params{'vlink'}$kugiri$params{'alink'}$kugiri";
close(OUT);

# 完了
&head;
print "<b>設定完了</b>\n";
&footer;
exit;
}

248 :246-247:05/03/20 17:26:57 ID:???
open(IN,"setup.dat") || &error("setup.datを開くことができません");
$file = <IN>;
close(IN);

($body,$title,$text,$bgcolor,$link,$vlink,$alink) = split(/$kugiri/, $file);
$body=~s/<br>/\n/ig;
$body=~s/&/&/g;
$body=~s/</</g;
$body=~s/>/>/g;
$body=~s/\"/"/g;

&header;
print <<"EOM";
編集<br>
<form action="$cgi" method=post>
<input type=hidden name=pass value=$params{'pass'}>
<input type=hidden name=mode value=top>
<input type=hidden name=c value=topedit>
<textarea name="body" rows="10" cols="50" istyle="1">$body</textarea>
<br>
$title,$text,$bgcolor,$link,$vlink,$alinkのinputフォームは割愛<br>
それときったないソースでスマソ
<input type=submit value=送信>
EOM

&foot;
exit;
}

sage忘れスマソ…_| ̄|○

249 :nobodyさん:05/03/20 17:58:57 ID:???
勘で、この行のイコール直後のスペース
>$params{'body'} = ~s/"/\"/g;

250 :T女の竹田:05/03/20 18:16:49 ID:???
>>246
せっかくPerlには便利なデバッガが付いてるんだから、使わないと損だよ。
三日三晩眺めてた、って。
CGIならその場で環境変数とか設定したらいいから。

251 :246-248:05/03/20 19:22:11 ID:???
ありがとう、本当にありがとうございました_| ̄|○<ヤットネラレル…
こういうポカミスって気付かないものですね

>250
Σ(´д`)それがありましたね
今度からはしっかりそれ試してます…
ではありがとうございました

252 :nobodyさん:05/03/21 00:34:17 ID:???
>>251
Data::Dumperを使うとかさ。

253 :nobodyさん:2005/03/21(月) 18:10:57 ID:3f95qFz7
配列の要素の値でソートした結果のインデックスが欲しいのですが、
何かよい方法はありますか?
具体的に言いますと、
$aaa[0]='bb';
$aaa[1]='aa';
$aaa[2]='cc';

を各値で昇順ソートし場合、@result=(1,0,2) という結果が欲しいのです。

下記のコードでは、それらしい結果は得られるのですが、確信が持てないのです。

$aaa[0]='bb';
$aaa[1]='aa';
$aaa[2]='cc';

$xxx[0]=0;
$xxx[1]=1;
$xxx[2]=2;

@result=sort {$aaa[$a] cmp $aaa[$b]} @xxx;

よろしくお願いします。


254 :nobodyさん:2005/03/21(月) 19:48:18 ID:???
>>253
@result = sort{ $xxx[$a] cmp $xxx[$b] } (0..$#xxx);
@result = sort{ $xxx[$a] <=> $xxx[$b] } (0..$#xxx);

255 :254:2005/03/21(月) 19:50:42 ID:???
頭が回ってなかった。
my @result = sort{ $aaa[$a] cmp $aaa[$b] } (0..$#aaa);

256 :253:2005/03/21(月) 21:05:55 ID:???
>>255
なるほどねぇ〜。
どうもありがとうございました。

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

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)