【Perl】初心者コーナーPart10

このエントリーをはてなブックマークに追加
1名無しさん@お腹いっぱい。
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

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

1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。

参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけど、なんか質問ある?part5】
http://pc.2ch.net/test/read.cgi/php/1009331505/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/

過去ログ、その他の役立ち情報は>>2-10を見よう。
2名無しさん@お腹いっぱい。:02/02/24 22:19 ID:???
3名無しさん@お腹いっぱい。:02/02/24 22:20 ID:???
[総合]
 ・Perl Com: http://www.perl.com/pub/
 ・CPAN.com: http://search.cpan.org/
 ・ActivePerl: http://www.activestate.com/
 ・CGI-ML:http://forest.ne.jp/cgi-ml/
[お薦め]
 ・Perl Recipes: http://www.effectiveperl.com/recipes/
 ・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
 ・Randal's WebTechniques columns: http://www.stonehenge.com/merlyn/WebTechniques/
 ・Perlの部屋: http://www.cc.rim.or.jp/~midorin/mad-p/perl/index.html
 ・Perl初心者の部屋:http://www.harukaze.net/~mishima/perl/
 ・Perlリファレンス:http://www.big.or.jp/~mio/ga/pl/plref/pl_ref.htm
 ・Perlのページ:http://homepage1.nifty.com/nomenclator/perl/
[Document&Tutorial]
 ・Perl News: http://www.news.perl.org/
 ・Perl Monks: http://www.perlmonks.org/
 ・PerlMonth - Online Perl Magazine - : http://www.perlmonth.com/index.html 接続不能
 ・use Perl All The Perl: http://use.perl.org/
 ・Learn Perl - Perl Education: http://www.devdaily.com/perl/edu/index.shtml
 ・Perldoc.com: http://www.perldoc.com/
 ・Using Perl5 in Web: http://docs.rinet.ru/Using_Perl5_in_Web/
 ・Rex Swain's Home Page: http://www.rexswain.com/
 ・Robert's Perl Tutorial: http://www.netcat.co.uk/rob/perl/win32perltut.html
 ・Perl Tuts: http://savage.net.au/Perl-tutorials.html
 ・Beginning Perl Tutorials: http://www.pageresource.com/cgirec/index2.htm
 ・jcode.pl の私的な解説書: http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
 ・Logical Choice Software, Home Page: http://www.logsoft.com/perltips/
 ・Perlfect Solutions: http://perlfect.com/
 ・The Perl Archive : http://www.perlarchive.com/
 ・Perl6 & Parrot VM についての情報: http://dev.perl.org/perl6/
4名無しさん@お腹いっぱい。:02/02/24 22:21 ID:???
[Module]
 ・Perl Module Reference: http://www.bekknet.ad.jp/~bero/docj/module_/
 ・PPMPackages: http://www.activestate.com/PPMPackages/
 ・河馬屋二千年堂's Page: http://member.nifty.ne.jp/hippo2000/index.htm
[Security]
 ・安全なプログラミングのためのガイドライン:http://www.FreeBSD.org/ja/security/#spg
 ・Perl security:http://www.perldoc.com/perl5.6/pod/perlsec.html
 ・Perl security和訳:http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsec.html
 ・CGI and Security http://www.ansi.co.jp/tech/cgi/security/
 ・The Unofficial Web Hack FAQ:http://www.nmrc.org/faqs/www/
 ・How to Write Secure Code:http://www.shmoo.com/securecode/
 ・Safe CGI Programming :http://www.improving.org/paulp/cgi-security/safe-cgi.txt
[OS]
 ・Linux日本語マニュアル:http://www.linux.or.jp/JM/
 ・FreeBSD日本語マニュアル:http://www.jp.freebsd.org/man-jp/
5名無しさん@お腹いっぱい。:02/02/24 22:28 ID:???
>>1
スレたてご苦労様です。

perlでつくられたCGIを改造しようとしています。
2MB(2-3000件)程度のデータを読み込んで、名簿を表示するデータベースCGIです。1件1行のSCVになっています。
鯖への負荷を少なくするために、このCGIのメモリ負荷を調べたいのですが、どのような方法があるでしょうか?
ローカル環境はANHTTPD+win2000+activperlでperl歴2ヶ月ほどの厨です。
6名無しさん@お腹いっぱい。:02/02/24 22:29 ID:???
>このCGIのメモリ負荷
7名無しさん@お腹いっぱい。:02/02/24 22:34 ID:???
>>6
……すみません、「メモリ使用量」です。
SCVじゃなくてCSVだし……。
鬱死
8名無しさん@お腹いっぱい。:02/02/24 22:44 ID:???
>5
使ったことないけど,このモジュールどう?
http://search.cpan.org/search?dist=Win32API-Resources-0.06-PPM
9名無しさん@お腹いっぱい。:02/02/25 00:27 ID:R6P89Fly
野球ヲタワラタ

http://ime.nu/www.baseball-lover.com
10名無しさん@お腹いっぱい。:02/02/25 01:05 ID:???
>>9 スパム
11名無しさん@お腹いっぱい。:02/02/25 05:18 ID:???
>>8
試してみます。ありがとうございました。
12名無しさん@お腹いっぱい。:02/02/25 13:12 ID:NWj5gfpZ
あるホームページから、フォームアクションでCGIを起動し、
そん結果を、別の新しい窓に表示するようにするには、
何をどうすれば良いですか。
13名無しさん@お腹いっぱい。:02/02/25 13:17 ID:???
>12
はあ?
14名無しさん@お腹いっぱい。:02/02/25 13:23 ID:l+IIkoIf
>12
質問する場所を間違えました。すみません。
15名無しさん@お腹いっぱい。:02/02/25 17:23 ID:???
age
16出来の悪い子:02/02/25 17:41 ID:KjItHBP9
前スレの出来の悪い子です

ヒントありがとう
まだちゃんと動作していないが出来が悪いなりに頑張ってみるわ

ありがとうございます。
17名無しさん@お腹いっぱい。:02/02/25 18:01 ID:???
>16 
がんばれ〜
18名無しさん@お腹いっぱい。:02/02/25 23:18 ID:???
場違いかもしれませんが
perlでcgiを作るための解説をおこなっているwebサイトを探しております。
どこが、ここはすごくいい。と思うサイトがあれば教えてください。
自分の環境はwin98です。
あと、初心者ですのでできれば初心者用にかかれた解説のほうがいいです。
19名無しさん@お腹いっぱい。:02/02/25 23:23 ID:???
俺は、

とほほのperl入門->
どこか忘れたけどモジュールの使い方のページ->
perlmanj

と読み進めた。とほほはCGIについての解説もあるしおすすめ
20名無しさん@お腹いっぱい。:02/02/25 23:24 ID:???
21名無しさん@お腹いっぱい。:02/02/25 23:28 ID:???
>>19
とほほですか。ありがとうございます。読んで見ます!

>>20
どうもです〜
22名無しさん@お腹いっぱい。:02/02/26 13:33 ID:???
とてもじゃないが初心者が質問する雰囲気じゃないな
23名無しさん@お腹いっぱい。:02/02/26 15:57 ID:6ZaEzTsa
>>22
なんでだ?、このやろう
24名無しさん@お腹いっぱい。:02/02/26 16:18 ID:oAR1gQdG
質問です。
CGIからファイルのパーミッションを変更することってできますか?
具体的には644のファイルを666に変更したいんですが…。
やっぱり無理でしょうか。何か抜け道はないものか。
25名無しさん@お腹いっぱい。:02/02/26 16:19 ID:???
>24
chmod();
26名無しさん@お腹いっぱい。:02/02/26 16:26 ID:oAR1gQdG
>>25
それは試したんですが無理でした。

こんなログを発見…。あんまりスマートじゃないなぁ。
http://tohoho.wakusei.ne.jp/lng/199905/99050165.htm

原理的に無理なのだろうか。
27名無しさん@お腹いっぱい。:02/02/26 16:44 ID:???
とほほの掲示板意外とレベル高いよね
28名無しさん@お腹いっぱい。:02/02/26 16:48 ID:???
2chの連中は煽りは達者だがレベ
29名無しさん@お腹いっぱい。:02/02/26 17:09 ID:???
とほほ:厨房質問に手とり足とり答えてやる
2ch:厨房質問に煽りで返す

これじゃ>27や>28が逆上するのも仕方ないな。
まぁおまえらはとほほで質問してなさいってこった。
30名無しさん@お腹いっぱい。:02/02/26 17:15 ID:???
>24
そもそも君に権限がないファイルはパーミッション変えられない。
また、SuEXECじゃないスクリプトはnobodyなんかで動いているから、
最初から書き込み権限がないファイルは変えられない。
そもそも、これはWebProgな質問ではないような気もするがそれは黙認。
もんだいは、/etc や /var あたりにおいたしようとしてないか?
ってことか?
31名無しさん@お腹いっぱい。:02/02/26 18:22 ID:ntDTlW+c
>>24
パーミッションを変更する予定のファイル、ディレクトリを、CGIが実行
されるときの権限(nobodyとか)にしておけばオッケーだよー。
3226:02/02/26 20:50 ID:oAR1gQdG
房ですいません。

>>30
オイタしようってんじゃなくて、
Webエディタみたいなものを構築してるんです。
アプされたファイルを書き換えれる奴。

666のファイルは難なく書き換えできるんですが、
デフォルトの644はもちろんダメ。
全部FTPで666に設定するのは何かと不便だし、
CGI側から変更できる方法はないかなぁ、と。

>>31
これはもちろんFTPで事前に変更しておく、ってことですよね?
(nobodyやら何やら、その辺にはほとんど知識ないんで調べてきます…。)
33名無しさん@お腹いっぱい。:02/02/26 21:12 ID:???
>>31
setGIDとかな。

ディレクトリに実行権限与えるのは・・・無意味か。
34名無しさん@お腹いっぱい。:02/02/26 21:13 ID:???
>>32
FTPクライアントにケチつけるなら自分で作ればよかろう。
HTTPの次くらいに簡単だ。
35名無しさん@お腹いっぱい。:02/02/26 21:16 ID:???
>34
まぁ一番簡単なのが、ネット使うのやめちゃう事だね。
3626:02/02/26 22:01 ID:oAR1gQdG
ちょっと勉強してきました。

まとめ
・FTPで作成したファイルの所有者はユーザー。
・だから、nobody権限で動くCGIではパーミッション変えられない。
・ならばCGIをユーザー権限で動かせばいい! → suidperl
・CGIのパーミッションを4755にすればsuidが効く!

でも、4755ってtelnetじゃないと変えられない?
また詰まった。

参考にしたページ:
ttp://x68000.startshop.co.jp/~68user/webcgi/permission.html
http://www.google.co.jp/
37名無しさん@お腹いっぱい。:02/02/27 01:58 ID:???
>>36
意味分からんけど、ビット立てるだけならFTPでもTELNETでも
CGIからでも出来るだろchmod4*** FTPクライアントのカスタムコマンド
とか調べれ
後suidperlは若干挙動が違うんで(セキュリティ絡み -Tスイッチ)調べる様にな
38名無しさん@お腹いっぱい。:02/02/27 07:25 ID:DxoLEIHk
たぶんとんでもない大ポカか勘違いだと思うんですが、
一晩延々悩み続けてるので、誰かサクッと蒙を開いてくれると嬉しいです。

これ、ディレクトリ階層動いた途端にopenに失敗するんですけど
なんででしょう?

use File::Find;

finddepth(\&wanted, '.');
exit;

sub wanted {
    my $name = $File::Find::name;
    
    print $name, "\n";
    open(IN, $name) or die;
    close(IN);
    
#    open(IN, "./test/hoge.h") or die;    # これは動く
#    close(IN);
}

% tree.pl
./tree.pl
./test/hoge.h
Died at tree.pl line 10.

39わかりません:02/02/27 11:33 ID:/Q61BdR8
if($i_photo_chk eq 'url'){
@photo_urls=("$i_photo_url1","$i_photo_url2","$i_photo_url3");
foreach(@photo_urls){
if($_ ne ''){
if($_ =~ /^http.*jpg$/){
$i_comment = "$i_comment<br><IMG src=\"$_\">";
}else{
&print_error("写真URLの入力が正しくありません。注意&解説を参照して確かめてください。<br>Macintosh環境でも拡張子(.jpg)をつけて下さい。");
}


すみません。
↑ここらへんで拡張子JPGだけしか選べなくなってるのを、gifも選べるようにしてあげたいんですが、
どうしたらいいですか?つまり、JPGとGIFを認めてあげたいんですが・・・。
エラーばっかりでわけわかめです。
誰か教えて下さい。お願いします。
40名無しさん@お腹いっぱい。:02/02/27 11:35 ID:???
>>39
スクリプト改造工房 Part4
http://pc.2ch.net/test/read.cgi/php/1012839651/l50
41わかりません:02/02/27 12:00 ID:/Q61BdR8
逝ってきます!
42名無しさん@お腹いっぱい。:02/02/27 12:47 ID:Sg/A5twO
お忙しい中すみません。
http://www.e-words.ne.jp/
にあるような、先頭文字での見出し(A B C D ・・・)による
検索ってどのようにするのでしょうか?

もしかしてログファイルに先頭の文字をひとつずつ
手動入力しなくてはならないのでしょうか・・・
43名無しさん@お腹いっぱい。:02/02/27 12:50 ID:???
>>42
$sata =~ /^$sentou/;
44名無しさん@お腹いっぱい。:02/02/27 13:45 ID:???
>>38
お、私も一瞬悩みました。
で、カレントディレクトリが変更されてるんじゃないかと思って、
perldoc File::Find してみたら、その通りだそうです。

You are chdir()'d to $File::Find::dir when the function is called.

だってー。
4538:02/02/27 17:02 ID:???
>>44
ああああ、やっぱり大ポカだった(笑)。
open(IN, $_) or die;
に変えたらサクッと動きました。ありがとー! 一生恩に来ます。
4642:02/02/27 17:43 ID:Sg/A5twO
43さんありがとうございました。
やはり手動入力が一番速いのかな、、、
47 :02/02/27 23:55 ID:KPo4U5H6
すみません。
JAVAスクリプト、JAVAをOFFにしてアクセスした人に、
「JAVAをONにしてください」と表示して、
アクセスさせないためのス8クリプトを、教えてください。
よろしくおねがいします。
48名無しさん@お腹いっぱい。:02/02/27 23:56 ID:???
>>47
<NOSCRIPT>Java on plz</NOSCRIPT>
4947:02/02/28 00:04 ID:Xg1/i20o
ありがとう!

ええと、
JAVA SCRIPTの場合はどうなるのでしょうか?
ありがとうございます。
それと、
「JAVA、(スクリプト)をONにしてください」
と表示させたいのですが、どうしたらよいでしょうか?
掲示板にその機能を追加するには、サブルーチンにすればよいのでしょうか?
どうもありがとうございます!
50名無しさん@お腹いっぱい。:02/02/28 00:06 ID:???
>>49
あんた、CGI組んだこと無いだろ。
もしかしたらHTML書いたこと無いだろ。
51 :02/02/28 00:12 ID:Xg1/i20o
49さん、レンタルしか使った事が無いのです。
htmlで、それを表示させるように書いたあと、
そのあと、JAVA OFF で相手を飛ばした時にどうしたらよいのでしょうか・・。
52名無しさん@お腹いっぱい。:02/02/28 00:13 ID:???
>>51
CGIわかってない奴には説明が出来ない。
意地悪ではなく必然的に。
53名無しさん@お腹いっぱい。:02/02/28 00:18 ID:Xg1/i20o
わかりました・・。

それでは最後に、コンパイルの遣り方を教えてください・・。
JAVAのソフトをダウンロードして設置する事は、
「JAVAを理解していないけど、CGI、PERLは完全に理解している」
人には可能でしょうか?
コンパイルは、コンパイラを使うだけなので、
JAVAを解っていなくても出来るでしょうか?
(PERLとかを理解していればです。)
よろしくご回答お願いします。
レス感謝であります。
54名無しさん@お腹いっぱい。:02/02/28 00:19 ID:???
>>53
何を訳のわからんことを・・・。
55エフェドリンながヰ:02/02/28 00:21 ID:lx9+LUUJ
どうでもいいが、これ読めば問題解決だろ。
http://www.puchiwara.com/hacking/
韓国バージョンも出るらしいし。
56名無しさん@お腹いっぱい。:02/02/28 00:23 ID:Xg1/i20o
つまり、
JAVAアプレットのソフトを設置するのに、
「コンパイル」という作業があった時に、
JAVAを理解していない人(但しPERLなどは理解している)に、
設置は可能でしょうか?ということです。;
宜しくお願いします。
57手まん:02/02/28 00:25 ID:micBAvGr
レンタルサバとかでさ、
使えるモジュール調べるにはどうしたらいい?
一覧とかだせんかね?
58名無しさん@お腹いっぱい。:02/02/28 00:26 ID:???
素人の「つまり」ほど要点がまとまっていないものはない
59名無しさん@お腹いっぱい。:02/02/28 00:26 ID:???
>>56
はぁ。。。
60手まん:02/02/28 00:27 ID:micBAvGr
>>56
いくらなんでも、そのくらい出来るべ、
アップレットだろ、変わったクラス使ってないだろ、
サーブレットになると、色々めんどいけどな、
61名無しさん@お腹いっぱい。:02/02/28 00:27 ID:Xg1/i20o
すみません。
JAVAアプレットのプログラムをコンパイルして設置する時、
JAVAアプレットを理解していない人に設置は可能なのでしょうか?
よろしくおねがいします。
62手まん:02/02/28 00:29 ID:micBAvGr
>>61
だいジョブ、できる、できる、
問題無い、
駄目だったら、漏れがやってやる、
金取るけど、
時給1万だけどな
63名無しさん@お腹いっぱい。:02/02/28 00:29 ID:???
>>61
=日本語を理解出来ていませんが私は手紙を出せるでしょうか?
64 :02/02/28 00:30 ID:Xg1/i20o
ありがとうございます。
ついでに、掲示板のソースから、
JAVAアプレットの仕掛けがあることを解らないように隠すには、
どうしたらよいのでしょうか?
宜しくお願いします。
65名無しさん@お腹いっぱい。:02/02/28 00:31 ID:Xg1/i20o
>63さん

手紙は、日本語じゃなくても出せますよね・・説明お願いします。
自給1万ですか・・。
全部込みで5000円ならどうでしょう。
66名無しさん@お腹いっぱい。:02/02/28 00:32 ID:???
ネタは止めて欲しいなあ。つまんないし。
67名無しさん@お腹いっぱい。:02/02/28 00:32 ID:???
>>64
前来たIPアドレス抜き野郎か。

みんな放置。さんざん荒らしやがって。
なんかレベルの低いのが混ざってると思ったらあいつだったか。
68名無しさん@お腹いっぱい。:02/02/28 00:34 ID:???
>>49
http://sound.jp/jun88/java/myjjava.html
の「強制ジャンプ」がいんじゃない?JavaスクリプトがONの人だけ、
どっかのページにジャンプできる。
Offの人は、そのページに取り残されたまま。

次に、JavaがONの人だけ飛ばしたい場合は、
強制ジャンプするアプレットを貼っとけばいんじゃない?
JavaがOffの人は、そのページに取り残される。

組み合わせるってーと、Javaスクリプトで強制ジャンプするアプレットの
タグを出力すればいんじゃないでしょうか。
69名無しさん@お腹いっぱい。:02/02/28 00:35 ID:???
>>68
放置ですよ。
7068:02/02/28 00:36 ID:???
>>67
あうぅ一歩遅かった。マジレスしちゃったよー・・・
ちなみに、前スレどのへんですか?
71名無しさん@お腹いっぱい。:02/02/28 00:39 ID:Xg1/i20o
ありがとうございました。
72名無しさん@お腹いっぱい。:02/02/28 00:40 ID:???
>57
@INCを順番に readdirで見ていくとか。
File::Findとかモジュール使えばもっと簡単にできるかも。
73手まん:02/02/28 00:46 ID:micBAvGr
>>57
もよろしく頼むよ。
しっかしここ、すっげぇ〜イキヨイであがってくなぁ〜
まだまだPerlの需要ってあるみたいだなぁ〜
74名無しさん@お腹いっぱい。:02/02/28 01:01 ID:???
>>73
>イキヨイ
勢い。

>まだまだPerlの需要ってあるみたいだなぁ〜
その通り。
75 :02/02/28 01:23 ID:???
76名無しさん@お腹いっぱい。:02/02/28 02:38 ID:???
perlほど簡単で使い勝手のいい言語なら当分生き残るだろ。
正規表現の入門にもちょうど良いわい。
77名無しさん@お腹いっぱい。:02/02/28 09:55 ID:???
>>76
RE-C(正規表現C)が出たら迷わず乗り換えるw。
78名無し:02/02/28 18:12 ID:SOksZdMX
掲示板を作りたいんだけど、ログファイルに
書き込むルーチンみたいなのが分からないので誰か教えてください。
79名無しさん@お腹いっぱい。:02/02/28 18:13 ID:???
>>78
それを考えるのがおもしろい。
80名無し:02/02/28 18:17 ID:SOksZdMX
>>79
マジレス希望。
81名無しさん@お腹いっぱい。:02/02/28 18:18 ID:???
>>80
マジレスじゃん。
82名無し:02/02/28 18:28 ID:SOksZdMX
・・・。
掲示板作りたいので
内容をログファイルに書き込む
ルーチン教えてください。
83名無しさん@お腹いっぱい。:02/02/28 18:34 ID:???
ファイルを書き込みモードで開く
ファイルにログを書き込む
ファイルを閉じる
84名無しさん@お腹いっぱい。:02/02/28 18:37 ID:???
>>82
BBS Re-Designっていい本が出てる、読む。買って。
85名無し:02/02/28 20:26 ID:SOksZdMX
>>84
買えるほど金無いです。
86名無しさん@お腹いっぱい。:02/02/28 20:28 ID:???
本読まない奴プログラマとして大成しない。
87名無しさん@お腹いっぱい。:02/02/28 20:28 ID:???
>>85
で、>>83じゃだめなの?
88名無しさん@お腹いっぱい。:02/02/28 20:30 ID:???
>>87
ファイルを操作するにはどうしたらいいんですか?
ソースで教えてほしいのですが。
8987:02/02/28 20:33 ID:???
>>88
open(OUT,">logifle");print OUT $log;close(OUT);
てかんじだよー。
90名無しさん@お腹いっぱい。:02/02/28 20:34 ID:???
>88
もう一度>>1を読んできなさい。
91名無しさん@お腹いっぱい。:02/02/28 20:35 ID:???
>>89
いい人過ぎ。
92名無しさん@お腹いっぱい。:02/03/01 00:20 ID:X6rC0lr1
ファイルをアップロードしたいんですが、
モジュールとかインストールしないで
さくっと転送するにはどんな方法がありますか?
どれも結構ややこしそうで挫折しかかってます…
93名無しさん@お腹いっぱい。:02/03/01 00:35 ID:???
>>92
formのほうに
<form enctype="multipart/form-data" method="POST" action="ほげ">
って書いて、CGIのほうは標準入力から読み込むだけだよ。
94名無しさん@お腹いっぱい。:02/03/01 00:38 ID:???
>92
FTP。

フォーム使ったアップロードならRFC読んで自分でデータ切り分けたりしないと
いけないから,素直にモジュール使っちゃえば?
95名無しさん@お腹いっぱい。:02/03/01 00:55 ID:DUUG9VQm
perl5 でtie を使ってデータベースを構築したいのですが、tie の使い方が
さっぱりわかりません。dbmopen だと(これも使ったことないんで
よくわかりませんが)

#%hash は定義済みとして
dbmopen(%hash, "data_base", 0644);
while (($key, $value) = each %hash) {
$hash{"$key"} = $value;
}
close(%hash);

こんな感じで外部ファイル化したいんですが、tie の場合、どういうふうに
書けばいいんでしょうか?
96名無しさん@お腹いっぱい。:02/03/01 03:45 ID:uLWuBwxz
use Fcntl ;
use AnyDBM_File ;
$db_flag = O_RDONLY ;
tie ( %hash , 'AnyDBM_Files' , 'database' , $flags , 0644 ) ;
while ( ( $key , $value ) = each ( %hash ) ) {
push @array , "$key\t$value" ;
}
untie ( %hash );

こんな感じ。tieもdbmopenもほとんど変わらない。
使い方はgoogleででも検索したらいっぱい出てくると思う。
もし、tieでもうまく行かないのならそのコードが変。
特に$hash{"$key"} = $value; の部分が怪しい。
仮に書いただけにしても、意味のあるコード書くのが普通と思われ。
9795:02/03/01 09:30 ID:dR5S0Mwb
>>96
おかげ様でうまくいきました。実は質問する前に丸一日googleで色々
調べて見よう見まねでやってたんですが、use Fcntl;が抜けてたせいで
うまくいかなかったようです。
ありがとうございました。
98名無しさん@お腹いっぱい。:02/03/01 12:49 ID:???
・Perl依存症

世の中何でもPerlでやればいいと思ってしまう罠。
例えばエディタの置換機能を忘れていて

s/<td><\/td>/<td>a<\/d>/g;

してしまう罠。
9992:02/03/01 23:43 ID:X6rC0lr1
>>94
素直に使っちゃいたい、んですが、
モジュールのインストールが不可能なので無理です…。

現在、どっかのアップロード式BBSから切り出す方向で検討しています。
jcode.plみたいな引数渡したら勝手にやってくれる
ライブラリがあればいいんだけど、ないよなぁ…。
100名無しさん@お腹いっぱい。:02/03/01 23:48 ID:???
CGI.pmは標準モジュールだろ?インストールしなくていいよ。
10192:02/03/01 23:52 ID:???
>>100
CGI.pmでできたんだ…。
ありがとうございました。googleに逝ってきます…。
102名無しさん@お腹いっぱい。:02/03/02 00:17 ID:???
>>92
cgi-lib.plはイヤ?
103名無しさん@お腹いっぱい。:02/03/02 00:21 ID:7JCmBc0W
文字列検索の構文で、オプションを2つ付けたいのですが
たとえば
・文字列を複数行として扱う
・大文字、小文字を区別しないで検索
の場合

変数 =~ /文字列/i/m;

でOKでしょうか?
104名無しさん@お腹いっぱい。:02/03/02 00:24 ID:???
>>103
/〜/im;
105名無しさん@お腹いっぱい。:02/03/02 00:29 ID:7JCmBc0W
>104 さんく
106nobodyさん:02/03/02 02:34 ID:Lu4QyfYX
perlでftpアクセスの自動化ってできる?サンプル探したり
したけど、見つけられんかった。
107nobodyさん:02/03/02 02:39 ID:???
>>106
もしかしたらモジュールであるのかもしれないけど、
http://www.google.com/search?hl=ja&q=perl%82%C5ftp&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
とりあえずどんぞ。
108nobodyさん:02/03/02 06:20 ID:LaOqrqUm
パスワードの設定の際メタ文字を使えなくしようとしています。
ただし『+』『-』『=』『!』『?』は使えるようにしたいです。
if ($password =~ /\W/) {}などとすると全部のメタ文字にマッチしてしまうの
で、どうにかしたいのですが、良い方法が思い付きません。[^\+\=\-\!\?]辺り
で試してるんですが、どうもうまく行かなくって・・・。
109nobodyさん:02/03/02 07:26 ID:???
>>108
正規表現スレでも逝って勉強した方が良いよ。
でも、まぁ。
die if /[^-+=!?\w]/;
110nobodyさん:02/03/02 07:42 ID:???
&test("aaa");
sub test {
 print $x;
}

ここで"aaa"を$xに入れるには
$x = $_[0];
としないと駄目でしょうか?

sub test($x : $_[0]){}のように変数名を指定したいのです
111nobodyさん:02/03/02 08:02 ID:???
残念ながら、無理です。
> $x = $_[0]
そのようにして下さい。お好みで $x = shift;

引数を保証したいならプロトタイプ。
112110:02/03/02 08:29 ID:???
有難うございます。
$x = $_[0]; でいくことにします。
113nobodyさん:02/03/02 08:53 ID:???
再帰するサブでプロトタイプは使用できる?
114nobodyさん:02/03/02 10:08 ID:???
>>110
ハッシュを使う
$hiki{'x'} = 'aaa';
&test(\%hiki);
sub test{
%hiki = %$_[0];
print $hiki{'x'};
}
115nobodyさん:02/03/02 12:50 ID:???
>>114
それは何かの解決になってるのか?
116名無し:02/03/02 14:46 ID:FrK2+WoO
>>115
同意。
114のやり方だと容量増えるだけだと思われ。
117nobodyさん:02/03/02 15:43 ID:???
ハッシュ使うなら、漏れはこっちのが好みだ。
sub x
{
%arg = @_;
print "$arg{a}\n";
print "$arg{b}\n";
}

x(a => 10, b => 100);
118nobodyさん:02/03/02 15:46 ID:???
>>117
再帰してる?
119nobodyさん:02/03/02 16:15 ID:???
>>118
はぁ?
まさかsubは呼び出しより前方に書かなきゃいけないとでも思ってる?
120nobodyさん:02/03/02 16:18 ID:???
>>119
いや、厨房質問くさいんだけど、

再帰って

sub x
{
my($hh) = @_;

if($hh != 0)
{
return &x($hh - 1) * 2;
}
else
{
return 1;
}

じゃないの?}
121川o・-・):02/03/02 17:44 ID:BzlXRQCM
想像力を働かしてまとめると、、、
>>110 は「複数ある、それぞれが省略可能な引数を渡したいので、呼び出し元で名
前をつけたいんだが、どうすればいいわけ?」と聞きたいのだと思う。で、回
答は>>114>>117で。
>>113 できます
>>114 どうせコピーするならリファレンスじゃなくていいんじゃない。
で、サブルーチン内で引数を書き換えないのなら、
コピーせずに$hiki->{x}でいいね。
>>115 110の問題を解決しているわけだが、、、
>>116 猫の額程度の容量を気にしてどうする、、、
>>117 保守的なコピーが必要ならこれで
>>118 「再帰」を勉強しましょう
>>119 プロトタイプ宣言の恩恵を受けるには呼び出しより前に書かなきゃね
>>120 正解
122119:02/03/02 18:59 ID:???
>>121
この文脈で前方つーたら前方参照の意味なんだが誤解してないかい?
12392:02/03/02 19:41 ID:???
>>102
イヤじゃないです。迷ってます。
CGI.pmはでかくて評判悪いので、
CGI_Lite.pmかcgi-lib.plを使おうと思ってるんですが、
どっちを使おうかなぁと…。

実際問題、この二つってどう違うんですか?
もちろん全然違うプログラムってのはわかってるんですが、
用途が似てるから…。
12492:02/03/02 19:43 ID:???
googleしてたらこんなの見つけました。
CGI.pmもcgi-libも使わずにアップロードできるスクリプト。
http://tohoho.wakusei.ne.jp/cgi/wwwupl2.txt

ちなみにとほほ氏謹製です(w
125nobodyさん:02/03/02 19:43 ID:???
なるほど、再帰してるsubの中の呼び出しは&でプロトタイプチェック回避させるのか。
126108:02/03/02 20:14 ID:???
>>109
おお!できたできた!
ありがとうございます。

はい。正規表現スレッドに逝ってきます。
127nobodyさん:02/03/02 20:39 ID:???
ファイルのヘッダーを見て拡張子を返すようにするにはどうすればいいのでしょうか?
ファイルのどこにヘッダーがあるのかわからん。。
128nobodyさん:02/03/02 20:44 ID:???
>>127
ファイルの先頭以外にヘッダがあることはあえない。
もし、先頭に無ければそれはヘッダとは呼ばない。
129nobodyさん:02/03/02 21:06 ID:MILA+IA2
簡単な暗号化ルーチンってないすか?
単に生URL見せたく無いだけなんで、
簡単なロジックで、encode,decode出来ればいんすけど、
どでしょ?
130nobodyさん:02/03/02 21:10 ID:???
>>129
すべての文字にNOTかける。
131115:02/03/02 21:18 ID:???
>>120
他の言語みたく
void Hoge (int n) {}
って渡し方が出来るかってことじゃねーの?
だからハッシュでってのは見当違いかなと。

まぁいいけどさ。
132115:02/03/02 21:18 ID:???
しまった、>>121ね。
>>120さん、すまん。
133120:02/03/02 21:22 ID:???
>>131
うん、死ぬほど悩んだw。
134nobodyさん:02/03/02 22:05 ID:???
>>129
1バイトずつ0xFFと排他的論理和をとる(bit反転)。
135asahi:02/03/02 22:15 ID:???
・・・ここでいいのかな?
あぷろだでアップ時の残り時間を
表示させるのにはどうすればよいのでしょうか?
スレ違いだったならごめんなさい
136nobodyさん:02/03/02 22:16 ID:???
>>135
それはCGI側じゃなくてアップする方がやることでしょ。
137nobodyさん:02/03/02 22:18 ID:???
>>135
適当なところに以下の文を追加
print scalar localtime;


これで分からなきゃCGI改造スレ行け。
その際はそのアップローダのソースをどこかに上げろよ。
138137:02/03/02 22:19 ID:???
って何か勘違いしてたらしい。
残り時間はサーバー側じゃ無理だわな。
139nobodyさん:02/03/02 22:30 ID:???
なじぇ? アップ開始から完了までCGIプロセスは生き続けるし、サイズはわかってる
から無理じゃないっしょ?
140nobodyさん:02/03/02 22:37 ID:???
>>139
で、画面の更新はどうするの?meta refresh?
141nobodyさん:02/03/02 23:03 ID:???
マルチフレームでリフレッシュとか、シングルフレームでもコネクションがタイムアウトしないようにだらだらと送ってやれば
表示できるじょ。
142nobodyさん:02/03/02 23:07 ID:???
あっ もれも勘違いしてたかも。でもHTTP/1.1なクライアントならコマンドパイピング
が効いて送り終わって無くても応答取ってるかも。
実験してみよう。
143nobodyさん:02/03/03 04:22 ID:???
CSVファイルでカンマで区切った部分の左端から何個目だけを
表示させたいという場合はどのように記述すればいいのか教えてください。


a1,a2,a3,a4,a5,a6,a7,a8,a9,
b1,b2,b3,b4,b5,b6,b7,b8,b9,
とデータがある時に左から5列目、つまりa5とb5を取り出す。

よろしくお願いします。
144nobodyさん:02/03/03 04:57 ID:???
>>143
splitを使え。
どうやって使うんですか、とか言わないでよ
145129:02/03/03 05:00 ID:IQ08Jes1
すまそ。
URLでパラメータで渡したいから、URLで使える文字だけにしたいんよね、
エスケープシーケンスだと長くなっちまうから、ちょっとねぇ〜
146nobodyさん:02/03/03 05:20 ID:vLChsjTs
while (<FILE>) {
push @array , (split /,/)[4] ;
}
print @array ;

こんな感じかな?
147nobodyさん:02/03/03 06:25 ID:???
ランダムな文字列を指定した数だけたくさん作るにはどうすれば出来ますか?
148nobodyさん:02/03/03 07:54 ID:qCUfXnEh
ん?
指定した長さのランダムな文字列って事?
使用する文字列の範囲を教えて。
149nobodyさん:02/03/03 08:09 ID:+mcyIDOm
すいませんが教えてください
$str =~ s/$str1/$str2/;
なのですが $str1,$str2 にも "/" "." などが入っているのが問題なのだと思うのですが
うまくいきません(というか無限にループしているみたいになっています)
$str =~ s/\Q$str1/\Q$str2/;
というのを見つけたのですが、$strが"\"マークだらけになってしまいます
どうしたらうまく置換できるのでしょうか?
150nobodyさん:02/03/03 09:27 ID:???
>>129
IBM->HALや XYZ->ZABみたいに何文字かずらすとか。

>149
置き換え文字には\Qいらんと思われ。
151143:02/03/03 13:39 ID:K6uur/rZ
>>144
>>146
ありがとうございます!
試してみます。
152nobodyさん:02/03/03 14:11 ID:IQ08Jes1
perl -v とすると、

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = "ja_JP.ujis",
    LC_ALL = "ja_JP.ujis",
    LC_MESSAGES = "ja_JP.ujis",
    LC_CTYPE = "ja_JP.ujis",
    LANG = "ja_JP.ujis"
  are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

This is perl, v5.6.1 built for i586-linux

Copyright 1987-2001, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'. If you have access to the
Internet, point your browser at http://www.perl.com/, the Perl Home Page.

って感じで、localeでしかられちゃうんだけど、どしたらええのかね、
ちなみに、環境変数は

export LANGUAGE=ja_JP.ujis
export LANG=ja_JP.ujis
export LC_CTYPE=ja_JP.ujis
export LC_ALL=ja_JP.ujis
export LC_MESSAGES=ja_JP.ujis

こんな感じにしてます
153nobodyさん:02/03/03 14:12 ID:???
>>129
そういう単純な事をやっていると、そのうちひろみちゅに晒されるに500モナー
154nobodyさん:02/03/03 14:19 ID:???
>>153
PGP
155152:02/03/03 14:21 ID:IQ08Jes1
すまそ、まし〜んは、
Linux(slackware)
156暗号化だが:02/03/03 14:29 ID:IQ08Jes1
暗号化ってより、
漏れは、URLで使える文字に変えるってのが知りたい
極力、1バイト、一文字に抑えて、足りない分は、
!Aとかで、2文字にしていく、ハフマンのエンコード部なんか
参考になりそうだなぁ〜とか、思ったりしてた。
暗号化ってより、圧縮、変換の話か・・・
157IQ=8 だって --->:02/03/03 14:30 ID:???
カナスゥィー
158nobodyさん:02/03/03 14:31 ID:???
>>156
圧縮だって立派な暗号化だと思うが。持論だが。
159nobodyさん:02/03/03 15:30 ID:???
>>158
長さが長くなるのくらいあきらめろ、って気がしてきた。
URLに使われる文字がABCDEFGHだけだとして、
tr/ABCDEFGH/DGFHCEAB/;
ってのはどうだ?
160nobodyさん:02/03/03 15:31 ID:???
>>159
最も簡単な暗号化って奴ですな。
161156:02/03/03 15:59 ID:IQ08Jes1
結構需要あるような気がするんだけど、
必要に感じた事無い?
162nobodyさん:02/03/03 16:13 ID:???
>>156
URI::Escape
なんか勘違いしてるか?
163143=151:02/03/03 16:42 ID:K6uur/rZ
たびたびすみません。
csvから情報を選び出すことは出来たのですが、
次はそのデータを比較して、条件に合ったときだけ取り込みたくて
以下のようにしたのですがうまくいきません。
アドバイスお願いします。
open(DATAFILE,"data.csv");
while (<DATAFILE>) {
push @TMPDATA ,(split /,/)[0,5] ;
if (@TMPDATA[0] < @TMPDATA[1])
{
push @TIME ,(split /,/)[1];
}
}

それとスペースも入ってない空欄
1,2,,4,←こんな状態
の部分はどのように判別すればいいのですか?
よろしくお願いします。
164nobodyさん:02/03/03 16:43 ID:???
>>163
プッシュは配列の最後に要素を加えます。
165163:02/03/03 17:27 ID:K6uur/rZ
ありがとうございます。
参考にして
push my @TMPDATA ,(split /,/)[0,5] ;
としてみると、思い通りに動きました。
空欄の処理の仕方も何方かアドバイスお願いします。
166nobodyさん:02/03/03 19:22 ID:zlwT/08t
デバッグモード(perl -cw)で「Syntax OK」なのにApacheで
CGIを動かそうとしたらエラーになってしまいます。
原因は何が考えられますか?

Win2K(SP2)+Apache1.3.24+Perl5.6.620です。
167nobodyさん:02/03/03 19:52 ID:???
>>166
Perlへのパスが間違っている。
必要なヘッダを出力していない。

etc
168nobodyさん:02/03/03 19:58 ID:???
>>166
そもそもPerlが入ってない。
169nobodyさん:02/03/03 20:30 ID:???
>>168
入っていなかったらどうやってデバッグモードでSyntax OKという答えを得るのよ・・・
170nobodyさん:02/03/03 20:32 ID:???
>>166
apacheのエラーログ見れ
171nobodyさん:02/03/03 21:02 ID:???
>>163>>165
空欄が入ってる時、それをどうしたいの?
172nobodyさん:02/03/03 21:08 ID:???
つか -cw は文法チェックするだけ。普通はデバッグモードとは言わん。
例えば、以下のコードはSynax OKだが実行した瞬間死ぬ。

#!/usr/bin/perl
foo()
__END__
173nobodyさん:02/03/03 21:14 ID:/fm96Lfb
ActivePerlをインストールしたら、ダウンロードしてあったCGIスクリプト
のplファイルが黄色いボールのアイコンになってしまいました。
この関連付けを解除する方法は無いですか?このままでも問題無し?

あと、いずれはCGIスクリプト書けるようになりたいですが、まず最初の
段階ではActivePerlをインスコして参考書読みながらコマンド打っていくの
がいいんでしょうか?サーバソフトとかまだ入れてないんですが・・
174nobodyさん:02/03/03 21:15 ID:???
>>173
>インスコして

一生無理だ。あきらめろ。
175166:02/03/03 21:16 ID:zlwT/08t
>170
Apacheのログを見たら分かりました。
print "Content-type: text/html\n\n"を忘れてBad headerでした。
超初心者的ミス、鬱だ。
176173:02/03/03 21:24 ID:/fm96Lfb
>>174
そんな事言わずにお願いします。
>インストールして
訂正します。すみませんでした。

ちなみに参考書は「すぐわかるPerl 深沢千尋/著」を買ってきました。
177nobodyさん:02/03/03 21:26 ID:???
>>176
その本は素晴らしいよ。

基本的にはコマンドプロンプトでPerl a.cgiとするのが王道。
俺は秀丸マクロで開発環境作ったけど。
178nobodyさん:02/03/03 21:26 ID:???
>>176
じゃあまずその本を読破しろ。
179163:02/03/03 23:17 ID:K6uur/rZ
>>171
CSVデータの中に空欄があったら処理を実行せずにデータがあればそれから処理を実行したいんです。
180163=179:02/03/03 23:22 ID:K6uur/rZ
具体的には
open(DATAFILE,"data.csv");
while (<DATAFILE>) {
push my @TMPDATA ,(split /,/)[0,5] ;
if (@TMPDATA[0] < @TMPDATA[1])
{
push @TIME ,(split /,/)[1];
}
}
のifのところで@TMPDATA[0] 、@TMPDATA[1]のどちらかが空欄なら以下の処理をせずに終わりたいんです。
181171:02/03/03 23:32 ID:???
>>180
なるへそ。そしたら、if の条件に「どちらも空じゃなければ」を追加すれば
いんじゃないかな。
182nobodyさん:02/03/03 23:42 ID:???
つーか誰か配列スライス使ってることとかつっこんでやれよ…
183nobodyさん:02/03/04 00:10 ID:???
グローバル変数なのにmyを使っている人は何を考えているのでしょうか。
strict下ならvarsモジュールを使えばいいのに。

localとは違うからいいの?
18495:02/03/04 00:12 ID:KNDHr4No
またtie について質問させてください。

sub sub_routin {
my (%data) = @_;

use strict;
use Fcntl;
use SDBM_File;

my %hash = ();
my $data_base = 'data_base';

tie (%hash, 'SDBM_File', $data_base, O_CREAT|O_RDWR, 0666);

#この命令自体はあまり意味は無いが、要はハッシュのハッシュを使いたい

foreach my $number (1..100) {
while ( my ($key, $value) = each (%data) ) {
$hash{$number}->{$key} = $value;
}
}
untie (%hash);
}

上のように、tieからuntieの中でハッシュのハッシュを使おうとすると
Can't use string ("HASH(0x1c37ddc)") as a HASH ref while "strict refs"(以下略)
などと怒られてしまい、使えません。多次元構造のデータの外部化って無理なんですか?
185183:02/03/04 00:12 ID:???
186nobodyさん:02/03/04 00:16 ID:???
無理です。
$hash{$number, $key} = $value にすれば?
187nobodyさん:02/03/04 00:17 ID:???
>>183
漏れの場合はvarsを知らなかったので、myを
使ってる。「strict使ったら怒られたから、
myを付けたらOKだった」という感じだった。

varsを使った方がいいのかな。
188nobodyさん:02/03/04 00:18 ID:???
>>187
グローバル変数なら素直にvars使った方が良いだろ。A
189149:02/03/04 02:25 ID:zvOvcxtF
>>150 遅くなりましたがレスありがとうございました

自分なりにいろいろやってみたのですが、全く別の問題だと分かりました

$string = 'Watashi ga Kaita. Watashi ga Keshita';
while ($string =~ /Watashi/igo) {
 $value = 'Watashi(=Yamada)';
 $string =~ s/Watashi/$value/i;
}
print "$string";

なのですが、無限にループ(?)しているような状態になります
表示したい文字列は
Watash(=Yamada)i ga Kaita. Watashi(=Yamada) ga Keshita
にしたいのです
この例の場合には置換で1行で出来るのですが、whileループの中で
いろいろと処理をさせたいのでこの様にしています

$value = 'Ore(=Yamada)';
$value = 'Yamada';

のようにすると無限ループのような状態にならずに

Ore(=Yamada) ga Kaita. Ore(=Yamada) ga Keshita
Yamada ga Kaita. Yamada ga Keshita

と変換されて表示されるのでパターンマッチに使った文字列から
始めない場合はうまくいくようなのですがその理由も良くわかりません

なんかそもそもアプローチ自体がおかしいような気がしてきてはいるのですが
ご教授いただけるとうれしいです
190nobodyさん:02/03/04 02:27 ID:???
すいません

>表示したい文字列は
>Watash(=Yamada)i ga Kaita. Watashi(=Yamada) ga Keshita
Watashi(=Yamada) ga Kaita. Watashi(=Yamada) ga Keshita
です 申し訳ありません
191nobodyさん:02/03/04 03:03 ID:???
すいません、ニュースっぽい系のcgi作ろうとしてるんですが
鯖に存在するファイルの読み書きは知ってるんですが
ファイル自体を出力する処理方法ってありますか?
(更新ごとに新しいファイルを出力するみたいな)
よろしくお願いします。


192nobodyさん:02/03/04 03:25 ID:???
>>191
ファイル名変えればいいんじゃ?
ユーザーにファイル名を入力させるのはやめといたほうがいい。
193nobodyさん:02/03/04 05:22 ID:???
>>191
open(FILE,">new.dat");
194nobodyさん:02/03/04 10:10 ID:???
>>191
ファイルを作成するディレクトリのパーミッションを666に。
195194:02/03/04 10:11 ID:???
>>194
寝ぼけてた・・・777です。
196nobodyさん:02/03/04 10:14 ID:???
>>189
Watashi ga Kita Watashi ga Kita

Watashi(=Yamada) ga Kita Watashi(=Yamada) ga Kita

Watashi(=Yamada)(=Yamada) ga Kita Watashi(=Yamada)(=Yamada) ga Kita

Watashi(=Yamada)(=Yamada)(=Yamada) ga Kita Watashi(=Yamada)(=Yamada)(=Yamada) ga Kita


$string =~ /Watashi$s/igo


197nobodyさん:02/03/04 10:29 ID:???
>>184
MLDBMを使えばそれ*らしき*操作は出来る。
ただし万能じゃないんで詳しい事はドキュメント読んでくれ。
198nobodyさん:02/03/04 10:32 ID:???
>>196
訂正。

$string =~ /Watashi\s/igo
199nobodyさん:02/03/04 13:40 ID:???
PerlでCプリプロセサの#defineと同等の機能はありますか?
200nobodyさん:02/03/04 13:43 ID:???
perlrun の `Switches' より

-P causes your script to be run through the C
preprocessor before compilation by Perl. (Because
both comments and cpp directives begin with the #
character, you should avoid starting comments with
any words recognized by the C preprocessor such as
"if", "else", or "define".)
201nobodyさん:02/03/04 13:45 ID:???
>>200
あの、、、#defineじゃなくて#defineと同等の機能があるかどうか聞いているんですけど・・・・
202nobodyさん:02/03/04 13:52 ID:???
ないんですね。素直に変数を使います。
203nobodyさん:02/03/04 13:56 ID:???
constant pragma は#defineに似ている

use constant NDEBUG => 1;
use constant STRING => "hello, world!\n";

if(defined &NDEBUG){
print STRING;
else{
# ..
}

それはそうと>>201は何故こんなに偉そうなんだ?
204nobodyさん:02/03/05 02:17 ID:???
>>192-194さん、どうもありがとうございます
205nobodyさん:02/03/05 06:00 ID:???
>>189
whileループの突入条件とそのループ内で同じ文字列のマッチングを行っているのが原因。
これでは文字列のどこまでマッチ作業を試行したのかわからなくなってしまうよ。
具体的にはwhileループ内のマッチ作業によってpos($string)がundefで上書きされてしまう。

$string = 'Watashi ga Kaita. Watashi ga Keshita';
while ($string =~ /Watashi/ig) { # ←◆g修飾詞によってpos($string)が設定される。
  $value = 'Watashi(=Yamada)';
  $string =~ s/Watashi/$value/io; # ←◆pos($string)がundefで上書きされる。(゚д゚)マズー
}
print "$string";

要するに$stringのマッチ開始位置が巻き戻ってしまう。
このため突入条件のマッチングはg修飾詞があっても常に$stringの先頭から行われてしまい、
$string内にWatashiという文字列がある限りwhileがループを続けてしまう。

>189がやりたい(であろうと漏れが考えた)事をむりやり書き下してみると、

# pos再設定とマッチ以後の文字列置換でむりやり解決
$string = 'Watashi ga Kaita. Watashi ga Keshita';
while ($string =~ /Watashi/ig) {
  $value = 'Watashi(=Yamada)';
  my $position = pos $string;
  if (substr($string, $-[0]) =~ s/Watashi/$value/io) {
    $position += length $value;
  }
  pos $string = $position;
}
print "$string\n";

こんな感じになるんだろうか。でもこんなスクリプトは見た事が無い。
アプローチというか何というか、たぶん他にもっと良い書き方があるのだと思う。
単純に解決したいならループ内で $string =~ s/Watashi(?!\(=Yamada\))/$value/io とか、
処理を挟むなら $string =~ s/Watashi/&process(...)/eg とか。
取り敢えず、普通whileの突入条件とそのループ内で同じ文字列のマッチングは行わない。
perlretutやperlop,perlfaq6などを読むと良いかもね。

つうか正直何をやりたいのか良くわからないから的外れかもしれない。そんときゃスマソ。
206nobodyさん:02/03/05 06:12 ID:???
あ、むりやり解決のスクリプト間違っているわ。
$position += length($value) - length('Watashi');
だね。どーでもいいか。
207nobodyさん:02/03/05 13:00 ID:???
&subname(); で飛ばす場合と、
&subname; で飛ばす場合は、どちらの方がメモリ消費が少ないのでしょうか?
自分は()を付けると、サブルーチン先の@_と、呼び出しもとの@_は別物と認識するので、
@_に代入するとその分メモリを消費するが、何も代入しない場合はどっちでも変わらないのでは?
と考えるのですが
208208:02/03/05 22:03 ID:OFFg29v+
パスワード認証のプログラムが作りたくて、下記のようなものを作ったのですが、
いつも「エラー2」が出てしまいます。何でうまくいかないのかさっぱり分かりません。
どなたかお知恵を貸してください。
acountlist.dat はこんな感じになってます。
id01:pwd01:point01
id02:pwd02:point02
...
------------------------------------------------------------
print "IDを入力してください\n";
$id = <STDIN>;
chop($id);
print "パスワードを入力してください\n";
$pwd = <STDIN>;
chop($pwd);

open(DATA,"<../xxxxxxx/acountlist.dat") or die;
while($line = <DATA>){
chop($line);
@acount = split(/:/,$line);
if($id eq $acount[0]){
if ($pwd eq $acount[1]){
print "いらっしゃいませ $acount[0] さん\n";
print "現在あなたは $acount[2] ポイントお持ちです\n";
exit;
}else{
print "エラー1";
exit;
}
}else{
print "エラー2\n";
exit;
}
}
close(DATA);
------------------------------------------------------------
209nobodyさん:02/03/05 22:23 ID:???
>>208
acountlist.dat (accountlist.datのスペルミスだとは思うけど)
の最初の行に書いてある人はOKだね。
210nobodyさん:02/03/05 22:24 ID:???
>208
それじゃid01の人しか受け付けないよ.
211208:02/03/05 23:22 ID:???
209さん、210さんご教授ありがとうございました。
おかげさまでうまくいきました。
212nobodyさん:02/03/05 23:55 ID:???
スタイルシートを挿入している部分にnext 2 tokensってエラーがでます。
どうせましょう
213nobodyさん:02/03/06 10:16 ID:???
ランダムな数のうち、10の倍数だけを取り出す方法ってありますか?
データベースから引っ張ってきた件数をGoogleみたいに
1 2 3 4 5 ・・ と自動的にリンクを貼りたいんですが。
214nobodyさん:02/03/06 10:23 ID:???
>213
10〜100までの10の倍数の乱数を出したい場合。
1〜10の乱数を出して10倍する。
215nobodyさん:02/03/06 10:25 ID:???
む?
ひょっとして、乱数は関係ない?

foreach(1 .. 100){
if($_%10==0){print qq(10の倍数);}
}
って事?
216nobodyさん:02/03/06 10:34 ID:???
>>215
ヒントありがとう
実験してみます。
217nobodyさん:02/03/06 14:04 ID:???
んー駄目だ
10の倍数とか関係なかった(ごめん)
どうやったらデータベースから引っ張ってきたデータ件数を
Googleみたいに 1 2 3 4 5 ・・ ってリンクできるんだろ
perlじゃないのかな・・・
218nobodyさん:02/03/06 14:13 ID:???
>217
$i=0;
foreach(1 .. $n){
if($_%100==0){print qq(<a href=./hoge.cgi?start=$_>) . ++$i . qq(</a>);}
}

googleはこんな感じだろ。
219nobodyさん:02/03/06 14:16 ID:???
いや、検索件数を数え終わってからという手もあるか。
$j = HIT数;
for($j=0;$j<=$n/100;$j++){
print qq(<a href=./hoge.cgi?start=) . ($j*100) . qq(>$j</a>);
}

ちなみに>218でもこの方法でも0 1 2 3 となるから、実際には1を足すように。
220nobodyさん:02/03/06 14:17 ID:???
悪い。
>219の最後の一行は忘れて。
頭寝てるかもしれないからもう沈むわ。
混乱させてスマン。
221nobodyさん:02/03/06 14:20 ID:???
>>217
Perlを疑う前に自分の頭を疑えよ。
222nobodyさん:02/03/06 14:29 ID:???
>>220
ありがとう!

>>221
自分の頭は疑う余地もないので助けて貰いました(w
223nobodyさん:02/03/06 15:22 ID:???
>>220
成功しました。
for文とは・・・
224nobodyさん:02/03/06 15:46 ID:???
>>223
聞かなかった事にする。
225nobodyさん:02/03/06 16:04 ID:???
(まさか)for文とは・・・(気が付かなかった・・・鬱)

の略ですm(_ _)m
226nobodyさん:02/03/06 21:21 ID:qVNAtP8C
携帯用の参照制限はCGIで可能なのでしょうか?
教えて下さい。
227nobodyさん:02/03/06 21:29 ID:???
半角カナの使用って何が問題なの?
正規表現に通したりすると落ちたりするんですか?

あと2バイト文字でファイル名を作らせるのはまずいですか?
URIエスケープすればどうだろう?
228nobodyさん:02/03/06 21:33 ID:???
229nobodyさん:02/03/06 21:49 ID:???
>>226
User-Agent 見て弾けばよかろう。
230nobodyさん:02/03/06 22:04 ID:???
>228
ありがとう。
メールやネットニュースが対応してないので使わないクセを付けようということなのかな。

そういや,おれの通ってる大学のイタイ教師がメールのフッタに
「半角カナが世にはびころうとする風潮に断固反対する会 会員No.xx」とか書いてたのを思い出した。

どーでもイイが・・・
231かなり初心者:02/03/06 22:08 ID:+Uo+pWis
$messageの文字列の中のどこかに、『>>3』のような文字が入っていて、
それを<a href="3"> >>3 </a>のように置換するやり方ってどうやるので、
しょうか?(ちなみに、数字は可変します。)

お願いします。(コードでご説明下さい。)
232nobodyさん:02/03/06 22:11 ID:???
>231
$message =~ s/>>([0-9]*)/<A HREF="$1">$1</A>/g;
233nobodyさん:02/03/06 22:12 ID:???
ちなみに$1には数字だけが入る。

$message =~ s/>>([0-9]*)/<A HREF="http://xxxx.xx.com/xxx.cgi?Res=$1">$1</A>/g;
などにすると良い。
234nobodyさん:02/03/06 22:14 ID:???
$message =~ s/>>([0-9]+)/<A HREF="http://xxxx.xx.com/xxx.cgi?Res=$1">$1</A>/g;

だった。
235nobodyさん:02/03/06 22:16 ID:???
>>231
s#>>(\d+)#<a href="$1">>>$1</a>#go;
236nobodyさん:02/03/06 22:17 ID:???
$message =~ s!>>([0-9]+)!<A HREF="http://xxxx.xx.com/xxx.cgi?Res=$1">$1</A>!g;

じゃないとバグるな。
237nobodyさん:02/03/06 22:19 ID:???
goのoって何?「変数展開を一回行う」ってどういう意味?
238かなり初心者:02/03/06 22:27 ID:+Uo+pWis
レスありがとうございます。

数字なのですが、2桁の場合も考えられます。
その場合でも、ご提示頂いた物でOKなのでしょうか?

お願いします。
239nobodyさん:02/03/06 22:30 ID:???
>238
ローカルで試してみろよ。
できるから。
240235:02/03/06 22:33 ID:???
>>237
oを付けると、正規表現中に変数があっても、その正規表現の
コンパイルを最初の一度しか行いません。そのため、
2度目以降のマッチングの際にコンパイルしないぶん早くなります。
なので、通常正規表現中に変数を入れない場合はoをつけとく
方が有利です。

で、正規表現中に変数があって、それが変更される
にもかかわらずoを付けると、当然予期する結果が得られません。
241かなり初心者:02/03/06 22:34 ID:+Uo+pWis
ありがとうございました。

助かりました。(^_^;)
242nobodyさん:02/03/06 22:35 ID:???
>228
なんだこいつは?
EUCもS-JISも悪。JISに統合せよ,だと?
半角カナもJISが対応していないから使うな,ということなのか。
正直WebページのキャラセットにJISなんて使う気もせんが・・・

http://www2.justnet.ne.jp/~chic/TRON005.HTML
http://homepage1.nifty.com/VET06031/kanaok/kanaok.html
243nobodyさん:02/03/06 22:36 ID:???
>>242
でも、漢字コードの判定に失敗しないので便利だよ。
244nobodyさん:02/03/06 22:36 ID:???
>240
なるほど!ええこと聞いた!情報ありがとう。

>239
ほんまかいな・・・
foreach(1..100000){}で囲むのか?(笑
245nobodyさん:02/03/06 22:42 ID:???
>243
meta で指定すれば問題ないやろ?
246243:02/03/06 22:43 ID:???
>>245
もちろん。
247nobodyさん:02/03/06 22:46 ID:???
>>244
>>239になにか問題が?
248nobodyさん:02/03/06 22:50 ID:???
>247
ごめん,今気付いたんだが>237へのレスだと思ってた・・・
変なこと言ってすまん・・・
249247:02/03/06 22:57 ID:???
>>248
なるー。
250nobodyさん:02/03/06 23:00 ID:???
>>244
forにしときなさい。
251nobodyさん:02/03/07 06:18 ID:WTUe3Qf1
こっちもage
252nobodyさん:02/03/07 08:50 ID:hIR8dzV6
226です。User-Agentってなんですか???
253nobodyさん:02/03/07 09:09 ID:???
254nobodyさん:02/03/07 11:38 ID:???
>>253
ありがとうございます。
アクセス制限はこれで出来ますが、携帯でも参照制限(特定のページ)は
可能なんでしょうか?
255nobodyさん:02/03/07 11:39 ID:???
>>254
意味が不明。
256nobodyさん:02/03/07 12:18 ID:???
>>254
PC初心者板に行きなさい
257ひよこ名無しさん:02/03/07 12:36 ID:???
>>256
迷惑。
258nobodyさん:02/03/07 13:23 ID:???
>>255,256
意味わかりませんか?User-Agentってようは相手のブラウザを認識するのですよね?
私が聞きたいのはページ(htm,html,texなど)で作成したものに直リンクできない
ようにするための参照制限のことです。
今のところCGI関連のホームページで色々探してみましたが、不可能という答えしか
掲載されていませんでした・・・。
もし知っている方がいらっしゃいましたら教えて下さい。
259nobodyさん:02/03/07 13:29 ID:???
>>258
結論出てるじゃん、頼むわ。
260nobodyさん:02/03/07 13:32 ID:???
>>258
だから、CGIでページを生成することにして、そのページへ
携帯電話からアクセスしてきたら弾けばいいじゃん。

htmlファイルへのアクセス制限は、CGIとは別問題で、
.htaccessでDoCoMoからのアクセスを拒否するだけだよ。
261nobodyさん:02/03/07 14:04 ID:???
>>260
ありがとうございました。

>>259
もしかしたらいい案している人いるかもしれないから
聞いたんじゃん?
代用できる方法知ってるかもしれないし。
私CはわかるけどPerlはさっぱりわからんのじゃ!
初心者なんだから・・・


262nobodyさん:02/03/07 14:11 ID:???
最も嫌われる初心者とは、
初心者である事を免罪符のように使う人物である。
263nobodyさん:02/03/07 14:11 ID:???
>>261
初心者を盾にするな。
Cが使えるのならその技術で可能か不可能か位は判別出来るだろう。
264nobodyさん:02/03/07 14:21 ID:???
しょせんiモードのページ作るヤツなんてドキュンばっかだな。(藁
265nobodyさん:02/03/07 14:24 ID:???
>>264
i-modeのページも、あれでいて結構気を使うんだよ。
半角カナにしろだの、ここは絵文字にしろだの、クライアントが
うるさいんだよね・・・
266nobodyさん:02/03/07 14:25 ID:???
>>261は20代DQN女性な感じ。

いや、なんとなくだけど。
しかも当たったからと言って何もならないが。
267nobodyさん:02/03/07 14:26 ID:???
>>266
何となく納得。
268 :02/03/07 14:47 ID:q6SBx/iV
gdbmの詳しい説明があるホームページないですか?
サンプルとか載ってるととっても助かります
教えて下さい。
269nobodyさん:02/03/07 14:49 ID:???
初心者がCなんかわかるな。
270nobodyさん:02/03/07 15:36 ID:???
>>266
20代女だけど何か?

>>269
CはWEBだけでないでしょ・・・
271nobodyさん:02/03/07 16:32 ID:???
全角英数使ってるところがプログラマっぽくないな。
272nobodyさん:02/03/07 16:36 ID:???
なんであっても初心者はまず2chから学ぶべきではない。
よそで基礎知識を付けてからのほうがデマ吹き込まれなくていい。
あらゆる書籍、webサイトで調べてそれでもわからなかったときの
最後の手段が2ch
273nobodyさん:02/03/07 16:39 ID:???
>>272
すばらしい!
274nobodyさん:02/03/07 16:58 ID:???
>>271
WEB上で半角使わないのは基本では?

>>272
はい。勉強してきます
275nobodyさん:02/03/07 16:59 ID:???
>>274
あ、アフォだ・・・。
276nobodyさん:02/03/07 17:02 ID:???
Cをやってて文字コード知らんのか・・・
277271:02/03/07 17:05 ID:???
278nobodyさん:02/03/07 17:09 ID:???
アルファベットも半角ダメなら外人はどうやって書き込みすんだよ。
279前述のs///oの質問した人:02/03/07 17:13 ID:???
>272
そのとおりである!
・・・おれはよく甘えるがなー・・・

いやおれも分かる範囲ならできるだけ答えるよ。
でも>261は最初の質問の時点でスレ違いだったからなぁ・・・
280s///o厨:02/03/07 17:16 ID:???
>274
試しに自分のページを「エンコード:西ヨーロッパ言語」で見てみ。
それが毛唐ドモのPCに映る画面。
281nobodyさん:02/03/07 18:09 ID:???
userAgentを知らないCマスター・・・(ワラ
282nobodyさん:02/03/07 18:10 ID:???
Cが分かるってセクースの事ですね?
283nobodyさん:02/03/07 18:13 ID:???
>>281
      _ _
     〃┏━━ 、
  >−       ) 
パタパタ |  ノノソハ)))  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (((\リリ ´ー` リ <  変なこと言うけどPerl/CGIの入門書。
  ((ニE/⌒ヾ∞"ヽ    上にも書いたけどCGIはある条件さえ満たせば言語は問われないんだ。
    (こ)   ∞ |こ)   無理してCでの入門書を探すより腐るほど出てる詳しいPerlでの本の方が参考になるよ。
    く__∞,ノ     上にも書いたけどPerlはCとかなり似ているから結構読めるよ。
    し' し'        
               暇だから簡単にまとめておくね。

               POSTの場合、データは標準入力に入る。
               GETの場合、データは環境変数QUERY_STRINGに入る。
               リモートホストなどのステータスは環境変数に入る。
               出力は標準出力に対して行う。
               出力の前にprintf("CONTENT-TYPE: text/html\r\nr\r\n");を忘れないでね。


               うぐぅ。あんまり祐一の役にたてなかった気がするよぉ。
284nobodyさん:02/03/07 19:59 ID:???
 <HTML>
 <HEAD>
 <SCRIPT LANGUAGE="JavaScript">
 function WindowOpen(){
 window.open("ここにページの名前.htm")
 }
 </SCRIPT>
 </HEAD>
 <BODY onunload="WindowOpen()">
 </BODY>
 </HTML>
285nobodyさん:02/03/07 22:42 ID:???
>>258
直リン避けたかったら、CGIでセッション管理しれ。
286nobodyさん:02/03/08 04:19 ID:rUODFweb
質問です。
お絵描き掲示板を設置しようかと考えているのですが、
割り当てられた容量が5MBとやや少なめ(と、言われた)なのです。
お絵描き掲示板は負担がかかると聞いたのですが
出来るだけ負担を軽くするようにするにた例えばどのような工夫が必要でしょうか。
要領を得ない質問で申し訳無いですが、ご指南下さい。
287nobodyさん:02/03/08 04:48 ID:???
>>286
小さなスペースみたいだから、画像サイズが(小さく)選べてjpegに対応してて、
画像圧縮率も変えられるようなのが良いんでない?
荒らし対策も考えると、しぃちゃんのPaintBBSアプレット使った奴がいいかも。
というか、ここは自分でコードを書く人の為のスレッドだよ…。
288nobodyさん:02/03/08 10:15 ID:???
ダメだ。始業から70分たつけどまだ頭がぼんやりして動かない。
一行も書けないよ〜〜〜
289nobodyさん:02/03/08 11:00 ID:wwEgc1iJ
Webサイト制作初心者用スレッド』から、ここへ行っては?とアドバイスを
頂いてやって来ました。

Apache 1.3.12 文字化け問題で、サーバの管理者にiso-8859-1を削って貰いました。
でも、依然としてMac+ネスケ4.xの環境で、cgiからの飛び先がhtmlだったり、
htmlとcgiの混合フレームの場合に化けます。
化けるのはいずれもhtml部分で、cgiは問題ありません。
そこで.htaccessに AddTypeを入れたところ、Mac+ネスケ環境では改善したのですが、
必ずWIN+ネスケ6.xにおいて激しく文字化け、リロードしても改善されない、という現象に陥ってしまいます。

cgi、html、いずれもshift_jisで書いて、保存してあります。
metaにはshift_jis指定をしています。
また化けhtmlに影響している、cgiに Content-Type: text/html; charset=Shift_JIS とcharestを追記すると、今度はサバエラになってしまいます。
勿論「;」や「"」には気をつけています<削除しないように
スキルがないなりに、\や\nをつけたり色々やってはみました。

はー。何ででしょう?
というか、一番不可解なのは、.htaccessに AddTypeを入れると、
どうしてネスケ6.x+WINで必ず文字化けしちゃうのか、分からないのです。

基礎知識がないので、この状態でいっぱいいっぱいです。
どなたかアドバイスをお願いいたします。
290nobodyさん:02/03/08 11:12 ID:???
EUCにするとかしないとかは試したの?
291nobodyさん:02/03/08 11:13 ID:???
>>289
始めにhtmlの文字コードは?と聞いたものですが。
cgiも書けるのでしたw

>cgiに Content-Type: text/html; charset=Shift_JIS とcharestを追記すると、今度はサバエラになってしまいます。

コード見せてもらえればツッコミは入れられるかなと思います。

http://www.harukaze.net/~mishima/perl/cgi-tech-tips.html

に一通り文字コード対策載ってますね。
292289:02/03/08 11:26 ID:wwEgc1iJ
コードというのは…

print "Content-type: text/html\n\n";
print "<html><head><title>$main_title</title>\n";
print "<META content=\"text/html; charset=Shift_JIS\" http-equiv=Content-Type>\n";
print "<META content=text/css http-equiv=Content-Style-Type>\n";
&style;

でしょうか?
一緒に来て頂いて有り難うございます(笑)<291

<291
EUCは試してみていません。<html
保存をEUCにして、metaも変更してみる、という意味ですよね?
っつか、恥ずかしいのですが、eucで書いた事ないので、オノレに不安です。
293nobodyさん:02/03/08 11:38 ID:???
print "Content-type: text/html\;charset=Shift_JIS\n\n";
294289:02/03/08 11:46 ID:wwEgc1iJ
<293
有り難うございます。
CGIは無事動きましたが、依然として最終飛び先のhtmlは化けてます…
295nobodyさん:02/03/08 13:20 ID:???
>>292
タイトルの前にメタを置いたら変わるかな?
296茶文字 ◆xELvisFU :02/03/08 14:14 ID:???
Web制作板初心者スレからついて来ちゃった てへっ

>>294
最終飛び先のHTMLはCGIが生成しているのではなくて、もろHTMLなの?
フレームを使っているという話だったから、frameset定義ファイルと
各フレームに入るページの文字コードをそろえておいた方が安全な気はする。
297nobodyさん:02/03/08 14:18 ID:???
>>296
あ、知ってる♪
298289:02/03/08 14:33 ID:wwEgc1iJ
<296
有り難うございます!(笑)

もろHTMLです。
cgiが生成しているのではありません。
メールフォームを送信し終わった後の飛び先のフツーのhtmlが化けます。

またフレームの方は上フレームがcgi、下がhtml(cgiが生成ではありません)
こちらも文字コードはshift_jisにて一貫させております。

つまり具体的には二箇所化けているのです。
ぶっちゃけて言えば、チャットの入り口と、送信フォームの最後の飛び先です。

メタはタイトルの上に置いたり、色々したんですが、どーしても化けるんです〜。しくしく。
299茶文字 ◆xELvisFU :02/03/08 15:16 ID:???
>>298
どんな化けかたしてます?
HTMLによるマークアップが反映されているけど文字が判別できないのか、
HTMLの跡形もなくテキストがだーっと続いてる状態なのか。
後者だとしたらバイナリでPUTしてもーたっつー可能性も考えたんだけど。

# 鳩丸見てきたけど、frame要素にtype属性とcharset属性は存在しないみたいっすねぃ。
300289:02/03/08 15:41 ID:wwEgc1iJ
ミァ竡
こんな感じです<ちなみに「戻る」です。

説明が後からになってしまって申し訳ありません。
サーバのapacheのバージョンが上がる前は普通に表示されていました。<チャットも送信フォームも
例の問題のapacheにバージョンアップした途端に駄目になったものです。
朝からずっと皆さんには色々とアドバイス頂いて恐縮です。
引き続きアドバイスお願いいたします。
301286 :02/03/08 15:43 ID:???
>>287
スレ違いだったのですね・・・気づかずに失礼しました。
レスありがとうございます。とても参考になりました。
しぃちゃんのPaintBBSアプレットにしたいと思います。
302nobodyさん:02/03/08 15:53 ID:???
>289
ttp://www.ecc.u-tokyo.ac.jp/guide/faq/charset.html
これとかじゃないのかな?
『文字化け』『Apache』のGoogle検索で一発で出たんだけど。
303nobodyさん:02/03/08 15:55 ID:???
304nobodyさん:02/03/08 16:28 ID:???
>Web制作板初心者スレからついて来ちゃった てへっ
きも
305289:02/03/08 16:42 ID:wwEgc1iJ
<302、303
その通りです。
Google等で検索結果は全部目を通し、その結果、ap_send_error_response() のiso-8859-1 を iso-2022-jpに変更を
サーバ管理者にお願いしたのですが、Mac+ネスケで化けるために
自分で.htaccessを書き、そこにAddTypeを記述、アップすると、
Mac+ネスケでは改善しますが、WIN+ネスケ6で文字化け
(.htaccessのあるディレクトリ全部)、という現象に陥って困っているのです。
306nobodyさん:02/03/08 16:51 ID:???
print "Status: 301 Moved Permanently\n";
print "Content-Type: text/html\n";
print "Location: hoge \n\n";

これで試してもダメだった?
Locationで化けるって事だよな?
飛び先とか漠然とした言い方をせず飛ばす手段を説明しる。
307nobodyさん:02/03/08 16:55 ID:+6IU9s64
CVSファイル
001,a1,b1,c1
002,a2,b2,c2
003,a3,b3,c3
004,a4,b4,c4
005,a5,b5,c5
のようなデータからランダムに1行拾って書き出したいんですがどうすればいいのでしょうか
308289:02/03/08 17:02 ID:wwEgc1iJ
<306
有り難うございます。
で…この板の敷居が高いという言い訳になってしまうのですが…
それはドコに入れれば良いのでしょう?
CGIの中の print "Content-Typeの行のあたりにさっくり入れても大丈夫でしょうか?
また飛ばし先のURL指定は、CGIそのものではなく、
set.plまたはcustom.cgiのような、設定ファイルに記入という方式なのです。
CGIを理解してない癖にゴチャゴチャとごめんなさい。
309nobodyさん:02/03/08 17:10 ID:???
>>307
そりゃCVSじゃなくてCSVだ。意味が全然違うぞ。
ちゃんと調べてから聞こうねー。
http://www.din.or.jp/~ohzaki/perl.htm#File_Random
310nobodyさん:02/03/08 17:14 ID:???
>308
質問を変える。
あんたが使ってるCGIとやらは、誰が組んだものだ?
無料配布されているものか?
自身で組んだものではなさそうだな。

無料配布のを使っているならこっちに行って配布先を明記の上で相談した方がいい。
スクリプト改造工房 Part4
ttp://pc.2ch.net/test/read.cgi/php/1012839651/

>1にあるように
>いらっしゃーい、Perlのコーディングで困ってる人のスレです。
ここはPerlの「コーディングで困ってる人」のスレなんだ。
たらい回しみたいになって悪いね。

もし、配布物でないのなら、あんたの使ってるCGIとやらを拡張子「.txt」にしてアップしてくれ。
ソースが見れないと具体的なことは言いにくい。
はっきり言ってしまうと、あんたの説明じゃ埒があかない。
311nobodyさん:02/03/08 17:27 ID:???
CVSチェーン
ローソン
イレブン
ミニストップ
サンクス
のようなチェーン店からランダムに1店舗拾って経営したいんですがどうすればいいのでしょうか
312289:02/03/08 17:37 ID:wwEgc1iJ
申し訳ありませんでした。<スレ違い

自分ではperlは書けない部外者がグズグズとごめんなさい。
使っているのは、無料配布されているCGI軍団です。
おっしゃる通りです。
教えて頂いた場所へ行ってみますね。
お騒がせいたしました。
313nobodyさん:02/03/08 20:54 ID:d+W0Gg3j
XPでApacheは使えるんですか?
使えるならやり方を詳しく教えてください。
お願いします。
314nobodyさん:02/03/08 21:00 ID:???
>313
>いらっしゃーい、Perlのコーディングで困ってる人のスレです。
315nobodyさん:02/03/08 21:26 ID:???
316nobodyさん:02/03/08 21:27 ID:???
>>314
313はXPでapacheを起動するperlスクリプトのコーディングで困ってるんだよ。
system("c:/progra~1/apache/httpd.exe");
317nobodyさん:02/03/08 21:51 ID:???
>>316 そこはかとなくワラタ
318ge:02/03/09 00:54 ID:oQUE7R44
perl + ANHTTPD でローカルで実験してます。
エラーがあった場合に、
'C:\Program Files\httpd\cgi-bin\test\test.cgi' script produced no output
とでるだけでエラーが出ないのですが、
DOS から perl を打った時のようにエラー表示したいのですが、
どうしたらよいでしょうか。
319nobodyさん:02/03/09 00:54 ID:???
>>318
無理
320ge:02/03/09 00:56 ID:oQUE7R44
use Strict とかで出来るんですかね?
321s///o厨:02/03/09 01:08 ID:???
CGI出力をチェックでいいんじゃない?
anHTTPdは安定しないしすぐリソース喰うので好きじゃないが。
322nobodyさん:02/03/09 01:38 ID:kV8ZYAMB
>エラーがあった場合に

use CGI::Carp 'fatalsToBrowser';
ちかいもんはでるよ。
323nobodyさん:02/03/09 02:03 ID:???
KCatch.pmとかもね。漏れの環境ではCGI::Carpよりも重かったけど。
324nobodyさん:02/03/09 03:56 ID:???
>>318
なにも出力しないで終了しやがったってことだろ。
「出力こねーぞ!」ってエラー出してるだろ。
プログラムを見直せ。
AnHTTPDだと、[GI出力を検査]のチェックボックスにチェックがしてあれば、
Perlのエラーを表示してくれるだろ。
325nobodyさん:02/03/09 06:20 ID:???
>324
PerlへのパスがPerl.dllになってるとエラー吐かないことあるよね。
Perl.exeだと吐くけど。
326nobodyさん:02/03/09 09:38 ID:biqte+lk
327nobodyさん:02/03/09 11:15 ID:fgv50gi6
#!/usr/bin/perl

print "777777777777777" % "10" . "\n" ;

これの答え、5になる奴いない?
バージョン5.00503で、答え5になるやつが
あったんだけど、誰か詳細しらん?
328nobodyさん:02/03/09 11:20 ID:???
>>327
文字列に剰余算する奴もたいがいかと・・・。
329nobodyさん:02/03/09 11:35 ID:fgv50gi6
>>328
わざとやってんだよ、
いいから、お前はすっこんでろな。
330nobodyさん:02/03/09 11:36 ID:???
331nobodyさん:02/03/09 11:38 ID:???
>>329
わかったからすっこんでろ
332nobodyさん:02/03/09 11:42 ID:???
>>331
http://www.tvdo.net/mrcam/vaiolx/
落ち着いてここのライブ映像でも見てくれ。激しく無料だ。
333nobodyさん:02/03/09 12:21 ID:???
なんだこれ
334nobodyさん:02/03/09 12:44 ID:???
>>333
【青春の】衛藤家ライブカメラウォッチ【1ページ】
http://kaba.2ch.net/test/read.cgi/net/1015644999/l50

専門スレがたちました。
335nobodyさん:02/03/09 13:17 ID:???
>>327=329
何熱くなってるんだかわからんが、もっとマターリ逝こうよ。
最近人少なくなってるんだからさ。

で、本題ね。

プログラミングやるんなら、16ビット・24ビット・32ビットの最大値くらいは
知っておくべき。
これヒントでもあり解答でもある。
336nobodyさん:02/03/09 13:23 ID:???
>>335
signed unsignedで変わってきまーす!と無意味な揚げ足を取るテスト。
337nobodyさん:02/03/09 13:47 ID:???
use POSIX q<limits_h>, q<float_h>;も参照されたし、ってか。
338nobodyさん:02/03/09 14:07 ID:fgv50gi6
>>335
おまえ、恐ろしいしったかバカだなぁ〜
あのよ、数字が小さくてもなんだよ。
でな、Perlのバージョンが同じでも、ライブラリのバージョンの違いで、
結果が変わるわけな、
でな、漏れが聞きたかったのは、libcとか、glibcのバージョンの依存があるとかよ、
そおういう事聞きたかったのよ、

ほぉ〜、ビット最大値ねぇ〜、今年になってから変わったっけ?
339nobodyさん:02/03/09 14:31 ID:???
>>338
> でな、漏れが聞きたかったのは、libcとか、glibcのバージョンの依存があるとかよ、
> そおういう事聞きたかったのよ
じゃあ最初からそう書けばいいのでは。
あなたのような性格の方はこの板よりマ板向けかと思われます。
340nobodyさん:02/03/09 16:21 ID:???
>338
では初めからどうぞ。
341nobodyさん:02/03/09 17:16 ID:7LzSOF3K
こんにちは、板違いでしたらすいません。
今、imode端末からcgi(perl)をたたくプログラムを作ろうと思ってるのですが
UIDの取り方のアドバイスをいただきたいのです^^;
NULLGWDOCOMOという文字を入れておけば、imodeサーバー側でユーザーIDに変換
してくれるとあったのですが

formをいくつか配置してあるものに

<form method="POST" action="test.cgi?uid=NULLGWDOCOMO">

とかけばよいのでしょうか?
ためしにサーバーにあげてテストしたところuidの値をみたら
そのまま文字列が入っていました。。

どなたかご教授いただけたらうれしいです。
よろしくお願いします。
342>>341:02/03/09 20:19 ID:???
<form method="GET" action="test.cgi?uid=NULLGWDOCOMO">
でどうでしょう

343nobodyさん:02/03/09 20:19 ID:???
そだね、ドコモはPOSTサポートしてないね。
344nobodyさん:02/03/09 21:10 ID:???
>>341
あのさぁ。それって秘密じゃないの?
その仕様って公開されてるんだっけ?
345テストテスト:02/03/10 10:24 ID:FplTavEM
>>341
docomoに登録申請されて許可されているディレクトリ以下であれば
UIDなる物に変換されます。いよゆるMYMENUです。
勝手なサーバーにやっても変換されません。
ドコモはPOSTサポートしています。一部のウンコ機種だけ使えないだけ。
346nobodyさん:02/03/10 11:46 ID:???
お願いします。

ハッシュに、いくつの連想配列が含まれているのかを知りたいのですが、
やり方がわかりません。
わからないので仕方なく、
foreach (keys %HASH) { ++$HASH; }
のようなことをやっています。なにとぞお助け下さい・・・
347nobodyさん:02/03/10 11:49 ID:???
>>346
メモリ食うかもしれないけど、
@tmp = %HASH;
$num = ($#tmp+1)/2;
348nobodyさん:02/03/10 11:54 ID:???
$i = %hash / 2;
349ドビギナー:02/03/10 12:38 ID:???
もうわかんねーっす!!
1、最適なRWIN値ってどー出すの!?
2、「同時に張るコネクション数」ってどーゆーこと!?
お前ら、助けて下さい!
350nobodyさん:02/03/10 12:39 ID:???
>>349
消えろ。
351nobodyさん:02/03/10 12:40 ID:Pl5m+TdB
すみません,質問です。
自分も>>346 のに興味あったので
%hash = (A=>1,B=>2,C=>3);
$i = %hash/2;
print $i,"\n";
print scalar %hash;
をやって試してみたんですが,
3
6
と予想したのに
1.5
3/8
が表示されました。
なんでこうなるんですか?
352nobodyさん:02/03/10 12:44 ID:???
>>350
お前はひどいやつだな。
353nobodyさん:02/03/10 12:48 ID:???
>>351
$i = %hash;

で、つじつまは合うなぁ。

汚いけど

print(%hash + 0);

とかは。
354テストテスト:02/03/10 12:49 ID:FplTavEM
>>349
板違い。そんなものビギナーが気にする必要なし。
どこかのアアホサイト見てるんだけうが
HTTP 1.1でセッションを100個張るレジスト書き換え.regファイルとか
配布してるが、意味がないしスーパー迷惑なのでやめれ。
355347:02/03/10 12:51 ID:???
ぐぐるったら、すぐ出てきちゃった。
$num = keys %HASH;
でいいみたい。(keys のかわりに valuesでもいいんだって)
http://plaza27.mbn.or.jp/~satomii/jdoc/perltut/associative.html
356ドビ:02/03/10 12:52 ID:???
なるほど。「忘れろ」ってことだな?
あと、板違いってことも気付いた。
ごめんな。
357nobodyさん:02/03/10 12:59 ID:???
>>355
あ、そうか。キー一覧リストの大きさ数えればいいんだ。
コロンブスの卵ちっく。
358351:02/03/10 13:02 ID:???
>>353
%hash = (A=>1,B=>2,C=>3);
$i = %hash;
print($i,"\n");
print(%hash+0);
だと
3/8
3
になりました。
OS依存かと思って調べてみたら
http://www.kt.rim.or.jp/~kbk/perl5.005/perldata.html
>返される値は使 用しているエントリの数と、割り付けられているエントリの数を、スラ ッシュで区切った文字列です
らしいです。
お騒がせしました。
359nobodyさん:02/03/10 13:10 ID:???
>>358
%h = (1,2,3,4,5,6,7,8,9,10);
print scalar keys %h,"\n";
print scalar %h,"\n";

5
4/8
って返ってくるんだよね。エントリ=要素ではないのかな。
360359:02/03/10 13:14 ID:???
>>358のリンク先にちゃんと書いてありました。逝ってきます。
361346:02/03/10 13:19 ID:???
>>355
ああ!大感謝です!
本当にありがとうございます。おかげさまでとても無駄な作業部分を消すことが出来ました。
362nobodyさん:02/03/10 15:12 ID:GU0dbd6s
PerlでCGI作ってるんですが、実行している自分自身のファイル名を
調べることってできるんでしょうか。例えば、bbs.cgiっていうCGIの中で、
bbs.cgiっていう文字列を自動的に得たいのです。同じコードをあっちこっちで
使っていて、更新するときに中身の書き換えを不要にするためです。
363341:02/03/10 15:12 ID:Ew4WhUAi
みなさんありがとうございます。

そか、、NTTが許可したサーバーでだけ使えるんですね^^;
アドバイスありがとうございました。
364nobodyさん:02/03/10 15:16 ID:???
>>362
$0
365nobodyさん:02/03/10 15:21 ID:GU0dbd6s
>>364
お、それはヒントですか?調べてみます。ありがとうございます!
366nobodyさん:02/03/10 15:23 ID:???
>>365
すまんがワラタ・・・
367365:02/03/10 15:28 ID:???
>>366
なんでだ??うそっぱちか?

>>$0 #perlスクリプトのコマンド名
コマンド名ってのがcgiファイル名ってことですね??言葉が難しいや。
368366:02/03/10 15:30 ID:???
>>367
ごめんごめん。
>>364はずばり回答そのものだったので、>>365の「ヒントですか?」が
ちょっと面白かったのよ。
369365:02/03/10 15:34 ID:???
ははは。失礼!調べたら本当にそのまんまでした!
できたー!!すげー、一見汎用性あるっぽくてカコイイ!!
370nobodyさん:02/03/10 15:35 ID:???
panic: utf8_length: unaligned end
なんかエラーがでて文字列の長さが取得できないんですが…。

371370:02/03/10 15:40 ID:???
同じ文字列を使った単純なテストだと問題ないし。
何故…。
372370:02/03/10 15:44 ID:???
と思ったらuse utf8すると再現するっぽい。
#!perl
use utf8;
length '時';
__END__

しかし問題なのは実際のコードでは use utf8 などしていないということ(鬱
373365:02/03/10 15:56 ID:GU0dbd6s
CGIファイルの場所を調べることはできますか?
なんていうんだろう、urlっていうのかパスっていうのか、よくわからないんですけど
http〜〜〜cgi-bin/bbs/bbs.cgi
みたいな感じのものを調べたいのです。
374nobodyさん:02/03/10 16:00 ID:???
use utf8ってスクリプトの文字コードがutf8ってことだけど・・・
utf8で保存してる?

>しかし問題なのは実際のコードでは use utf8 などしていないということ(鬱
何か他にモジュール使ってない?
375nobodyさん:02/03/10 16:06 ID:???
>373
print 'http://' . $ENV{'HTTP_HOST'} . $ENV{'SCRIPT_NAME'};
で出るかな?
376370:02/03/10 16:08 ID:???
スクリプトの文字コードはEUC-JPです。

どうやらDBI+DBD::SQLiteでDBからフェッチした文字列がおかしい模様…。
でもJcode::getcode()で調べてもEUC-JPなので謎です。
377nobodyさん:02/03/10 16:09 ID:???
>>373
CGI.pmの重さが気にならなければurlメソッド/関数で取得可能。
378nobodyさん:02/03/10 16:12 ID:???
>>376
use utf8;を加えて、文字コードをutf8で保存してから実行するとどうなる?
379nobodyさん:02/03/10 16:26 ID:???
>>370
Perlのバグじゃない?新しいのに入れ替えてみれば?
380nobodyさん:02/03/10 16:26 ID:???
>>378
そうするとpanicは避けられるっぽいです。
ただそうすると大幅に書き換えなければいけないので出来れば避けたいです…。

# とりあえず完全に再現できるスクリプトを書き中…
381365:02/03/10 16:28 ID:GU0dbd6s
下痢下痢で遅れました..(鬱)。

>>375>>378
ありがとうございます!$0みたいにずばりはないんですね。
ちょっと調べてみます。
382370:02/03/10 16:48 ID:???
再現できました。
これで
"panic: utf8_length: unaligned end at test.pl line 20."です
#perl -w

use DBI;
unlink 'test.db';
my $dbh = DBI->connect('dbi:SQLite:test.db');

$dbh->do(<<_SQL_);
CREATE TABLE test( foo CHAR(100) );
INSERT INTO test VALUES('テストだよ');
_SQL_

my $sth = $dbh->prepare(<<_SQL_);
SELECT * FROM test
WHERE foo like '%';
_SQL_
$sth->execute();

$\ = "\n";
while($_ = $sth->fetchrow_arrayref()){
print length($_->[0]);
}
__END__
383365:02/03/10 16:54 ID:???
>>375さんの方法でできました!ありがとうございます!
384nobodyさん:02/03/10 16:58 ID:???
うーん、20行目の$_->[0]がutf8になってないってことでしょ?
use Jcode; して、20行目を
print length (jcode($_->[0])->utf8);
にしてみるとどう?
385370:02/03/10 17:07 ID:???
ちなみにテストスクリプトの文字コードはEUC-JPです

->utf8()では問題無しですが、->euc()だとpanicです

察するに内部フラグがどうにかなってるっぽいんですが…。
# さっきのスクリプト後半
$\ = "\n";
print join ' ', unpack 'C*', ('テストだよ');
print length 'テストだよ';
while($_ = $sth->fetchrow_arrayref()){
print join ' ', unpack 'C*', ($_->[0]);
print length $_->[0];
}
__END__
出力:
165 198 165 185 165 200 164 192 164 232
10
165 198 165 185 165 200 164 192 164 232
panic: utf8_length: unaligned end at test.pl line 23.
386384:02/03/10 17:23 ID:???
んー、内部で誰か(多分DBI)がuse utf8してるからlengthへの引数を
utf8なやつだと解釈しようとして失敗してる(eucなんだから当然)からなわけで。
だからlengthに渡すものをutf8に変換しておこう、と言う改造をしてみたんだが。
納得いかないならこんなのとか。
{
no utf8;
$\ ="\n";
while ($_ = ....){
print length($_->[0]);
}
}
387384:02/03/10 17:34 ID:???
あれ?よく読んでなかった。
なんか勘違いした事書いたかも。スマソ。
388370:02/03/10 17:41 ID:???
>>386
申し訳ない、>>384が目に入ってませんでした。
それでOKです!

いろいろ試した結果、eval qq{"$_->[0]"}でも正常化できるみたいです。

でもno utf8じゃダメっぽいです…。

とりあえず、解決たので一安心です。
どうもありがとうございました。
389nobodyさん:02/03/11 01:26 ID:???
>>346,355
今さらでスマンが、
keysやvaluesでいくと%HASHが巨大だった場合に危険じゃない?
どうせやるなら
++$num while (my ($key, $value) = each %HASH);
とか?めんどくさいけど。
390nobodyさん:02/03/11 01:56 ID:???
>389
代入はいらないのじゃない?
391nobodyさん:02/03/11 02:00 ID:???
>>389
スカラコンテキストで使うとそれぞれの数を返すっていうkeysやvaluesの機能でしょ.
内部でいちいち展開して数を数えるような,非効率的な事はやっていないと思うよ.

use Benchmark;

my $num = 0;
my %hash;
for (1 .. 1000000) { $hash{$_} = $_ }

timethese 1 => {
'++' => sub { ++$num while (my ($key, $value) = each %hash) },
keys => sub { $num = keys %hash }
};

# 結果
#
# Benchmark: timing 1 iterations of ++, keys...
# ++: 5 wallclock secs ( 4.79 usr + 0.00 sys = 4.79 CPU) @ 0.21/s (n=1)
# keys: 0 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)
392nobodyさん:02/03/11 02:46 ID:???

$num = keys %hash;

++$num while each %hash;
×
++$num foreach keys %hash;
393nobodyさん:02/03/11 13:07 ID:ILIPqmP1
処理中に5秒間待たせるような処理に今は
while文で只管ぐるぐる回して
5秒ぐらいで処理を抜けるような感じにしています。
でも、なんかもっとちゃんとした方法があると思うんですがどんな方法があるんでしょうか?。
394nobodyさん:02/03/11 13:20 ID:???
>>393
sleep or select
395393:02/03/11 14:17 ID:???
>394
やはりこういうものがあったんですね(^^
ありがとうございました。
もっと勉強してきます・・・
396nobodyさん:02/03/11 18:53 ID:???
397nobodyさん:02/03/12 02:51 ID:???
perlでtime関数を使用し、SSDを発生させたいのですが、
スクリプトがわからないのでお教えいただけませんでしょうか?
または参考URLをお願いします。
398nobodyさん:02/03/12 02:56 ID:???
SSDが何かわからん俺は逝ってよし?
399sage:02/03/12 03:05 ID:XpAJ+W0c
SSD…恥ずかしながら僕も初耳。
400nobodyさん:02/03/12 03:13 ID:???
>>398
>>399
乱数のことです。
401nobodyさん:02/03/12 03:31 ID:???
>397=400
基本はこれだけど, Perl5からは srandで種作らなくても自動で最適な種が作られるようになってる。
srand time;
print rand 100;
402nobodyさん:02/03/12 04:49 ID:???
>>400
rand 100
は何を表すのですか?
403nobodyさん:02/03/12 04:52 ID:52qV3w5q
ちょっとでかめで、しっかりした実装されてる、
システム公開してるとこ、無いですかね、
しっかりした、ソース見て勉強したいんですけど、
404nobodyさん:02/03/12 04:53 ID:52qV3w5q
>>402
0〜100未満のランダムな数がくるぞ
(少数含むから、気をつけれ!)
405nobodyさん:02/03/12 06:34 ID:mNSx+HCB
いきなり質問申し訳ありません。

「更新」ボタンの無効化ってどうやるんですか?
406nobodyさん:02/03/12 07:25 ID:???
>405
・・・
407nobodyさん:02/03/12 07:37 ID:???
>>405
こ、更新ボタンを無効化するの?何のために?お互い困るんじゃない?
408nobodyさん:02/03/12 09:57 ID:???
>>405
それができるくらいのハッカーになりたいってことか?
409nobodyさん:02/03/12 10:43 ID:???
あれだ、JavaScriptの"戻る"ボタンの無効の延長線じゃないか?
それか、アプローダとかでリロードしないで欲しいとか。
410nobodyさん:02/03/12 11:09 ID:???
まぁ、どちらにしてもPerlの仕事じゃないな。
411370:02/03/12 11:10 ID:???
(>>370-388)
ふと思いついてDevel::Peekでダンプしてみたところ

SV = PV(0x1c4a57c) at 0x1c2f258
REFCNT = 1
FLAGS = (POK,pPOK,UTF8)
PV = 0x1c8aff0 "\245\306\245\271\245\310\244\300\244\350"\0
CUR = 10
LEN = 11

やっぱりUTF8フラグが立っている模様。
これ、バグですよねぇ…。英語書ける方、誰か報告してくれないかな…。
412405:02/03/12 13:34 ID:eWSq/Ah6
説明不足でした。

submitでhtmlの情報をcgiに送る。

cgiがログファイルをいじる。

cgiが呼び出されて表示されたその画面で「更新」ボタンを押す。

もう一度ログファイルをいじる。

ログファイルが変になる。

(+д+)マズー!

具体例。
ログファイルの配列:@array=(0,1,2,3)
一度目push(@array,4);という命令を出す。→@array=(0,1,2,3,4)→ログファイルに書き込む
リロードするともう一度push(@array,4)を実行する→@array=(0,1,2,3,4,4)
→困る。どなたか対策を教えてください。
413nobodyさん:02/03/12 13:46 ID:pCWuH9pI
すみません。
掲示板CGIの改造をしたいのですが、
チェックボックスを付けて、それがオフの場合投稿を弾いてメッセージを表示するにはどうしたらいいのでしょう?
414nobodyさん:02/03/12 13:48 ID:???
>>412
前回の内容と比較すれば?
それとcgiに書き込んだあと、htmlファイルにリダイレクトさせるとか。
そうすれば更新ボタン押してもhtmlファイルをGETするだけでしょ。
415405:02/03/12 13:50 ID:eWSq/Ah6
>>414
ありがとうございます。
でも、すみません、リダイレクトって何ですか?
416nobodyさん:02/03/12 14:10 ID:???
>>415
Locationヘッダを出力したり、HTMLのMETAタグで飛ばしたり。
417nobodyさん:02/03/12 14:11 ID:???
>>413
> チェックボックスを付けて、それがオフの場合投稿を弾いてメッセージを表示する
INPUT TYPE=checkbox とか、
フォームデータのデコード とか、
検索かけてみて、それでも解らなければそこを聞くのが良いんでない?

と初心者の俺が口を挟んでみるテスト。
418nobodyさん:02/03/12 14:25 ID:h6G3oh/x
>>417
アドバイスありがとうございます。
かすってるサイトを発見したので、掲示板に応用するため試行錯誤してみようと思います。
419nobodyさん:02/03/12 14:39 ID:???
>>417
初心者のくせに的確だぜ。
このままではわしの地位が・・・。
大きくなる前に潰しておかねばの・・・ふぉっふぉっふぉ。

と、何かを企ててみるテスト。
420nobodyさん:02/03/12 14:51 ID:h6G3oh/x
で、今やってみました。

コメント入力欄のあたりに
<INPUT TYPE="checkbox" NAME="a" VALUE="b">書きこみをOKする<BR>

って入れて、名前が入ってないとエラーを返す部分があったのでそこに
if ($a eq "") { &error("オンにしてちょ。",'NOLOCK');

ってやってテストしてみたらオンでもオフでもエラーを返されてしまいました。
別にvalueがbの場合用の処理(?)を書かなくてはいけないのでしょうか?
ちなみに上のは名前が入ってないとエラーを返す部分をちょっと変えただけです。
421nobodyさん:02/03/12 14:52 ID:???
>>419
プログラム組むのを仕事にしてる人からしたらメチャメチャだろうけど
自分なりに考えて掲示板組んでみたりしたもので。
やっぱり頭使って悩みながら覚えるのが一番上達早いかなと。。

>>417
あ、もし具体的な改造依頼するなら改造スレッドでよろしく。
スクリプト改造工房 Part4
http://pc.2ch.net/test/read.cgi/php/1012839651/
422nobodyさん:02/03/12 14:57 ID:h6G3oh/x
>>421
そっちに行きます。スマソ
423417=421:02/03/12 15:15 ID:???
>>422
自力で書こうとしてたしこっちで良かったんじゃないかなぁ。。
余計なこと言ったかも。スマソ。
424nobodyさん:02/03/12 15:16 ID:???
>420
とりあえず、$aじゃなくて$FORM{'a'}とかじゃないのか?
425nobodyさん:02/03/12 16:50 ID:+eqUJIVR
use Socket;を使ってサーバからhtmlを取得するものを作ったんですが、
HTTPリクエストを送って反応がなかった場合スクリプト自体が止まってしまいます
リクエストを送って30秒間反応がない時には次の処理に行く といった処理をするにはどうすればよいのでしょうか?
426nobodyさん:02/03/12 17:07 ID:???
>>425
素人は素直にLWPを使うのが吉。
427425:02/03/12 17:19 ID:???
こんな便利なものがあったんですね(^^;
ありがとうございます。
428nobodyさん:02/03/12 18:15 ID:???
flockの信頼性&利便性はどうなんでしょ?
Perlメモのファイルロックなど自前のファイルロックもありますが,
flockが使える環境ならできるだけflock使ったほうがいいんでしょうか?
429nobodyさん:02/03/12 18:17 ID:???
>>403
読んだことないけど,このあたりは大きそう。
http://www.h14m.org/
http://tds.dive-in.to/
430nobodyさん:02/03/12 18:17 ID:???
>>428
サーバによる。
ファイルとかシンボリックリンクとかよりよっぽど。
431nobodyさん:02/03/12 18:20 ID:???
>428
下手に自前でやるより信頼できると思われ。
WinNT環境だと,flock使ってもロックしないって話を聞いたことがあるような。ないような。
432nobodyさん:02/03/12 19:57 ID:???
>>428
漏れも迷わずflock()使う。
プロセスが死ぬとロックが自動的に外れるところがおいしい。

ちなみに、Solarisでは、ライトオープンしないと排他ロックできないという
ことに気づくまで、結構悩んだ。(なんか他のOSだとリードオープンでも排他ロック
できちゃったりした記憶が・・・)
433ぼくフェロー:02/03/12 20:11 ID:/5Jn0bAA
お尋ねしたいことがあります.

$a='100' => 数値
$a='-10.0' => 数値
$a='1e+10' => 数値
$a='abc' => 数値ではない.

のような判断をしたいのですが良い方法が分かりません.
すなわち,ある変数 $a に文字列が入っているのですが,
数値を表すことができるか否か判別するよい方法はないでしょうか?


434nobodyさん:02/03/12 20:15 ID:???
>433
マルチポストするくらいなら正規表現でも書いてろ。
435ぼくフェロー:02/03/12 20:21 ID:/5Jn0bAA
ごめんなさい.
436428:02/03/12 20:44 ID:???
なるほど。
信頼性も自前<<flockなのか。
なら自前lockのメリットはプラットフォームの問題のみなのか。
素直にflock使うか・・・
437ぼくメイト:02/03/12 20:51 ID:???
>>433
あ、こんなところでもお会いしましたね。記念に。
$tmp = $a;
$tmp++;
print "$a is num\n" if $tmp == $a+1;
438nobodyさん:02/03/12 21:02 ID:???
>>433
>数値を表すことができる
↑この仕様がわかりませんが、
if ($a =~ /^([+-]?\d*\.?\d*)([eE][+-]\d+)?$/ and $1 !~ /^[.+-]*$/)
みたいな感じかな?
数字が(Perlの変数で表せないほど)たくさん並んでもマッチするけど・・・
439nobodyさん:02/03/12 21:40 ID:p/r//4Pi
flockが実装されてるか調べようと,以下のように書いてみたんですが
これで正しく判定できますか?
eval {flock DATA,1 or die $!};
print "flock使えません\n" if $@;
440nobodyさん:02/03/12 22:52 ID:???
flockがNFSでダメダメというのは都市伝説か?
http://www.jp.qmail.org/q103/jman5/maildir.html
441nobodyさん:02/03/12 23:18 ID:???
> NFSの実装によっては信頼できるロックをまったく持っていません
~~~~~~~~~~~~~~~~


442nobodyさん:02/03/12 23:21 ID:p/r//4Pi
>440 検索かけてみたらこんなのがあった。
http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_3.html#SEC35

>flock()はBSD起源ですが現在ではほとんどの(但し全てではない)Unixで利用できます。
>単一のホストでは簡単で効果的ですが、NFSでは全く使えません。 これはファイル全体を
>ロックします。
>さらに紛らわしいことに、 ポピュラーなプログラミング言語Perlは
>必要であればそれ自身のflock()関数を実装し、 完全な移植性があるように
>見せかけています。
443440:02/03/13 00:06 ID:???
とあるソフトでflockが刺さる現象がユーザのところで年に数回発生してて、
lockdを再起動すると回復したりする。 (らしい)
直接の担当じゃないから、ほじってないんで… 謎
444nobodyさん:02/03/13 00:06 ID:J00pd5X0
順位をつける明快なアルゴリズムってないですか?
例えば成績データとかで、
ishida,80
inoue,70
gotou,70
satou,65
shibata,90
suzuki,80
のような物があった時
1位,shibata,90点
2位,ishida,80点
2位,suzuki,80点
4位,inoue,70点
4位,gotou,70点
6位,satou,65点
と表示したいのです。
考えれば考える程複雑になっていくので…
445nobodyさん:02/03/13 00:10 ID:???
そのリストの最大値求める。
同点を求める。ループ回して見つかった物を次々リストにプッシュすれば良かろう。
処理が終わったら処理後のデータを−1とする。

↑を最大値が−1になるまで続ける。


とかね。ループだらけでシンプルじゃないな。

sortで並べて一つ上のデータとどう得点の場合は上と同じ順位を表示とか。
446nobodyさん:02/03/13 00:37 ID:???
そんなに複雑かぁ?
$score = 101;
for($i = $j = 0; $i <= $#r; $i++){
if($r[$i]->[1] < $score){
$j = $i ;
$score = $r[$i]->[1];
}
$r[$i]->[2] = $j;
}
447パッチ:02/03/13 00:38 ID:???
$r[$i]->[2] = $j + 1;
448nobodyさん:02/03/13 00:41 ID:???
>>446
さっきまでJavascript書いてたの。
で、>>446見たら死ぬほど読みにくいわ。
恐るべし。Perlw
449nobodyさん:02/03/13 00:42 ID:???
>>444
$score{$name} に点数が入っていて、100点満点だとします。
while( ($n,$s) = each %score) { $inverse{sprintf("%03d $n",$s)} = undef; }
$rank = 0; $last_score = -1;
foreach(sort {$b-$a} keys %inverse ) {
  /(\d+) (.+)/;
  $rank++ if $1 != $last_score;
  $last_score = $1;
  printf("$rank位,$2,%d点\n",$1);
}
てのはどうでしょう。
450449:02/03/13 00:47 ID:???
>>449
最初の%inverseへの代入は無駄でした・・・
foreach (sort {$score{$b}-$score{$a}} keys %score) {...}
てすればいいのねー。
451448:02/03/13 01:08 ID:???
おまえらって、そのていどなんだぁー。
452448 ◆8hKGWRIE :02/03/13 01:09 ID:???
>>451
俺の姿で言いたいことはそれだけかい?
453nobodyさん:02/03/13 01:14 ID:???
なんか>>452がかっこいい・・・
454nobodyさん:02/03/13 01:16 ID:???
>444
ソートだとこんな感じかな
並べ替えて,前の点数と同じなら同位,違うなら上から数えた順位。
while(<DATA>){
 chomp;
 ($name,$score) = split /,/;
 push @score, {name=>$name,score=>$score};
}
my $allrank = 1;
my($prevscore,$rank);
foreach(sort {$a->{score} <= $b->{score}} @score) {
 $rank = $allrank if ($_->{score}!=$prevscore);
 print "$rank位,$_->{name},$_->{score}点\n";
 $allrank++;$prevscore=$_->{score};
}

__DATA__
ishida,80
inoue,70
gotou,70
satou,65
shibata,90
suzuki,80
455nobodyさん:02/03/13 01:39 ID:???
私なら Schwartzian Transform

@score = map { $_->[0] }
sort { $b->[1] <=> $a->[1] or $a->[0] cmp $b->[0] }
map { [$_, (split /,/)[1]] }
<DATA>;

叩き台にでもなれば。

456nobodyさん:02/03/13 01:40 ID:???
>>455
それだと順位どうすんのよw
457448:02/03/13 01:48 ID:???
なに悩んでんだよー。このていどで。
458わんらいな−:02/03/13 02:13 ID:???
foreach (
 map {
  do{
   $ninzu++;
   $rank = $ninzu if ($_->[1]!=$prevscore);
   $prevscore=$_->[1];
  };
  [$rank, $_->[0], $_->[1]]
 }
 sort { $b->[1] <=> $a->[1] or $a->[0] cmp $b->[0] }
 map { [split /,/] }
 <DATA>
)
{print "$_->[0]位,$_->[1],$_->[2]\n"}
459458:02/03/13 02:15 ID:???
chomp忘れた。
460nobodyさん:02/03/13 02:59 ID:???
$| = 1;って何をするものなんですか?
461nobodyさん:02/03/13 03:12 ID:???
>460
print関数使った直後にデータが出力されるようになる。
指定しないと,ある程度出力データが貯まってから出力される。
http://tohoho.wakusei.ne.jp/wwwperl1.htm#Tokushu
462nobodyさん:02/03/13 03:15 ID:???
バッファリングの防止
463444:02/03/13 03:43 ID:MYvm6b7t
みなさん、本当にありがとうございます。

>446-448さん
簡潔すぎて・・意図する所がわからず
悩みに悩んだ結果がこれですけど、これでいいですか??
参照はかなり苦手です。。しかも無名配列。。
でも、おかげさまでかなり勉強になりました。
結果はばっちりでした。

@data = <DATA> ;
@tmp = map {(split /,/)[1]} @data;
@data = @data[sort {$tmp[$b] <=> $tmp[$a]} 0 .. $#tmp];
foreach ( @data ) {
chomp ;
($name,$score) = split /,/ ;
push @r , [ $name , $score ] ;
}
$score = 101;
for($i = $j = 0; $i <= $#r; $i++){
if($r[$i]->[1] < $score){
$j = $i ;
$score = $r[$i]->[1];
}
$r[$i]->[2] = $j + 1 ;
}
for ( $i = 0 ; $i <= $#r ; $i++ ) {
print "$r[$i]->[2]位,$r[$i]->[0],$r[$i]->[1]点\n" ;
}
__DATA__
ishida,80
inoue,70
gotou,70
satou,65
shibata,90
suzuki,80
tanaka,80
464444:02/03/13 03:43 ID:MYvm6b7t
>449-450さん
結果が・・・
1位,shibata,90点
2位,tanaka,80点
2位,ishida,80点
2位,suzuki,80点
3位,gotou,70点
3位,inoue,70点
4位,satou,65点
みたいになります。。
やはりループの回数数えないといけないんですね。
それと「100点満点だとして」というのが
どこに影響してるのかよくわからないんです。。

>454さん
一番素直に理解できました。
ソートのとこの式がちょっとおかしかったですけど。
(sort {$b->{score} <=> $a->{score}} @score)
ですよね。

ともかく、皆さん本当にありがとうございました。
全部理解してテストするのに2時間程かかりました。
もっと勉強せねば。。
465nobodyさん:02/03/13 03:44 ID:XatxhEQY
ディレクトリ以下の全htmlファイルからリンクを探し出し、置換し,その
結果だけ表示したいんですけど、途中まで書いたんですけど、わからなくて…

$dir = '.';
opendir(DIR, $dir) or die;
@file = sort grep { /\d+\.html/i && -f "$dir/$_"} readdir(DIR);
closedir(DIR);

foreach(@file){
if( $_ =~ /<a href="http:\/\//i ){

s/co\.jp/ne\.jp/g;
print;
}
}
466nobodyさん:02/03/13 04:27 ID:???
>>455 >>458 みたいなのは、Perl臭さが漂いすぎて、大好き。
いや、単なる個人的意見ですが。

>>465
HTML::LinkExtor使うと簡単ですよ。
467nobodyさん:02/03/13 04:32 ID:???
>>465
引数で指定されたディレクトリに移動して.をopendir
readdirを見ていき$_が
・ディレクトリなら再帰(引数は今見てる$_)
・HTMLファイルなら開いて痴漢してプリント
全部見終わったら..に移動

な関数を作る。でいいのでは?
465は自力でできそうな気がするのでわざとコードは書かない(w
468nobodyさん:02/03/13 04:55 ID:???
>>465
foreach (@file) {
open FH, $_ or die $!;
while (<FH>) {
if (m{<a\s+href="(http://[^"]+\.co\.jp[^"]*)"}i) {
$1 =~ s/\.co\.jp/.ne.jp/g;
print "$1\n";
}
}
close FH;
}

--------------------
use IO::Dir;
use HTML::LinkExtor;

foreach (grep { /\.html$/i } IO::Dir->new(q/./)->read) {
my $parser = HTML::LinkExtor->new;
$parser->parse_file($_);
foreach my $elem ($parser->links) {
$elem->[0] eq q<a> or next;
while (@$elem) {
my ($attr, $value) = splice @$elem, 0, 2;
next unless $attr eq "href"
and $value =~ m{http://.+\.co\.jp/?}i;
$value =~ s/\.co\.jp/.ne.jp/g;
print $value, "\n";
}
}
}

双方とも動作確認無しですが。
469nobodyさん:02/03/13 04:57 ID:???
>>467
書いちゃったよ…スマソ
470470:02/03/13 08:13 ID:DQ1JFad8
CSV形式の名簿を住所で都道府県別に表示したいんですが、
以下のようにソートすると当然、文字コード順で愛知(アイチ)、
愛媛(アイヒメ)……という順番になります。([18]が住所です)

-----------------------------------------------------------
# 都道府県別にソート
if($sort == 3){
@LINES = sort { (split(/\,/,$a))[18] cmp (split(/\,/,$b))[18] } @LINES;
}
-----------------------------------------------------------

これを都道府県コード順にソートするにはどうしたらよろしい
でしょうか?
http://www2.odn.ne.jp/sasabomb/tables/jisx0401.html

もちろんCSVに都道府県コードは含まれていません。どなたか
ご教示よろしくおながいします。
471nobodyさん:02/03/13 08:27 ID:???
>>470
47都道府県名をあなたが望む順番でリストに格納。
そのリストに従ってデータをソートするルーチンを書く。

愛媛も愛知も同じ愛である以上、一緒に並ぶのは当然。
472ほい:02/03/13 09:55 ID:68BwgqOI
# 都道府県別にソート
if($sort == 3){
$i = 0;
undef(%pref);
foreach $pref_name ('北海道','青森県','岩手県','宮城県','秋田県','山形県','福島県',
'茨城県','栃木県','群馬県','埼玉県','千葉県','東京都','神奈川県','新潟県','富山県',
'石川県','福井県','山梨県','長野県','岐阜県','静岡県','愛知県','三重県','滋賀県',
'京都府','大阪府','兵庫県','奈良県','和歌山県','鳥取県','島根県','岡山県','広島県'
,'山口県','徳島県','香川県','愛媛県','高知県','福岡県','佐賀県','長崎県','熊本県'
,'大分県','宮崎県','鹿児島県','沖縄県') {
$pref{$pref_name} = $i++;
}
@LINES = map {$_->[0]}
sort {$pref{$a->[18]} <=> $pref{$b->[18]}}
map {[$_, split /,/]} @LINES;
}
473nobodyさん:02/03/13 10:29 ID:auK7WJtB
こんにちは、フォームのデータってブラウザでリロードされた時にクリアされずに
残ってますよね。
掲示板作ってるんですが書きこみ後リロードすると二重投稿になっちゃうんですよ。
どうやって回避するんでしょうか?
474nobodyさん:02/03/13 10:36 ID:???
>473
1:投稿内容を直前のものと比較して、一致したら書き込み拒否する。
2:書き込み後Locationで別のページ(そのBBSでも問題なし)に飛ばす。
475473:02/03/13 10:46 ID:auK7WJtB
>474
ありがとうございます。
1:は考えたんですがプログラム的にカッコよくないかと思ったので・・・
2:でやってみます。
助かりました。
476nobodyさん:02/03/13 10:50 ID:???
>475
ただし、2の場合、投稿ボタン2度押しには対応できないという事を忘れずに。
1ならそれも防いでくれるけどね。
477473:02/03/13 11:06 ID:???
>476
ええ!?そうなんですか?じゃあやっぱり1でやりますね。
どうせソースなんか僕しかみませんしね。
あ、でも、連続して削除する時のチェックボックスなんかは
間違いでなく一致しちゃうこともありますよね。
そこらへんの実践的なテクニックって皆さんどうやって習得されてるんでしょうか?
Perlは独学の方も多いと思いますが・・・
(ちなみに僕は元COBOLプログラマです)
478nobodyさん:02/03/13 13:28 ID:???
初心者です。
レンタル掲示板を自分でやろうとすると、
どうすればいいのでしょうか?
プログラムは1個で、設定ファイルを顧客分つくるのでしょうか?
また、自分が借りているティーカップでは、
アドレスの拡張子がhtml になっています。
これ、なんでhtml なんでしょうか?
レンタルの仕組みと関係あるんでしょうか?
479nobodyさん:02/03/13 13:38 ID:???
>478
もっと基本的なところから勉強しないと問題外。
具体的にはHTMLタグとかから。
480nobodyさん:02/03/13 13:43 ID:???
レンタルしているところでも
中には >>478 みたいなのがいるのかもしれないのか。。。

あな、おそろしや。。。
481nobodyさん:02/03/13 15:11 ID:???
>>478
スクリプト買ってきた方がいいと思うよ。
そのレベルから、安定して動かせるスクリプト作れるまで結構かかると思う。
482nobodyさん:02/03/13 15:16 ID:nYyCnnqM
質問です。Perlです。

http://www.hoge.com/cgi-bin/foo.cgi
というCGIに対して、
http://www.hoge.com/cgi-bin/foo.cgi?http://www.bar.com/aaa/bbb.txt
という風にURLを渡して、
bbb.txtの内容を読みこんであれこれ処理したいんですが、
bbb.txtの内容を読みこむにはどうやればいいんですか?
何かモジュールを使うんでしょうか。
483nobodyさん:02/03/13 15:18 ID:???
>482
>>426
484482:02/03/13 15:22 ID:???
>>483
うわ、直前に既出でしたか…。ドウモスミマセン…。(;´Д`)
485482:02/03/13 15:33 ID:???
>>483
LWPってどうやって使うんですか?
486nobodyさん:02/03/13 15:38 ID:???
>485
検索サイトって知ってる?
487460:02/03/13 16:14 ID:???
>461 >462
ありがとう。
「バッファリングの防止」というものは知っていたんですが具体的に何をするものかがさっぱりでして・・・。なるほど。

例えは悪いですが,普段はコンパイラが(print構文を)食べて,ある程度たまってからウンコ(出力)するんですね。
しかし$_ = 1;を指定しておくと食べながらウンコするわけか。
そうかそうか。
488nobodyさん:02/03/13 16:52 ID:???
例えに>>487の人柄が表れているな。嗚呼嫌だ嫌だ…。
489レンタル掲示板:02/03/13 16:57 ID:???
掲示板はあるとして、
それをレンタルする仕組みが知りたいんですが・・・

なんで、htmlかも知りたい。
490nobodyさん:02/03/13 17:03 ID:???
>489
まずはcgiのソースを読んで意味が理解できるようになれ。
そうすれば両方の答えが自然に出てくる。
perlの書き方も知らない人間には教えられないって。
数字を知らない人間に算数を教える事は出来ないだろう?
>>1-10くらいにはいいリンクも揃ってるんだしがんばって勉強してくれ。
491レンタル掲示板:02/03/13 17:10 ID:???
で、なんでhtmlなの。
492nobodyさん:02/03/13 17:17 ID:???
>491
HTMLソース見ろ。
493レンタル掲示板:02/03/13 17:29 ID:???
ティーカップの掲示板は、
4桁の数字がIDになっています。
ということは、
そのID専用のスクリプトを
ひとり1個ずつ
サーバーに置いているということでしょうか?
494nobodyさん:02/03/13 18:48 ID:???
春ですねぇ
495nobodyさん:02/03/13 18:48 ID:???
そろそろいいだろ?

>>493
スレ違い。他でやってください。
496レンタル掲示板:02/03/13 19:55 ID:???
レンタルのつくり方とか
書いてあるページとかあるのかな?
497レンタル掲示板:02/03/13 20:01 ID:???
Perl でできるものなのかな?
498449..450:02/03/13 20:42 ID:???
>>464
あ、ごめん。たしかにそうなりますね(^^;;
あと100点満点どうこうは、>>449のsprintfで%03d(3桁)
にしてるためだったのですが、>>450で訂正したようにすると、
その制限は無くなりますです。
499春chu駆除係:02/03/13 20:51 ID:???
>>491
Hyper Text Markup Language だから、ふつー拡張子は .html だろ。
あんたは普段 .html じゃない拡張子でhtmlファイルを保存してんのか!?
500nobodyさん:02/03/13 20:58 ID:???
>>496-497
Perlを勉強すればで、結構簡単にできますよ。
ちなみに「レンタル掲示板の作り方」は他スレでよろしく。
501nobodyさん:02/03/13 21:00 ID:???
>>499
MS-DOSは8.3形式。
あらゆるOSとの互換性を考慮するなら拡張子をhtmとしても何ら問題ではない。

それか、あんた世の中にはWindowsしか動いてないとか?w
だから平気でファイル名に%20(スペース)入れるバカが出てくるんだな。
502460:02/03/13 21:05 ID:???
>499
おれもマジレスしようかと思ってたがやめといてよかった。
ヒマな厨房が無理やり揚げ足とりのワナを張ってる気がしたんだよ。
503真%20駆除係:02/03/13 21:39 ID:???
>>502
なる。

>>501
すまん、その通りだ。
世の中にはWindowsしか動いて無いと思っていたよ・・・
504460:02/03/13 21:46 ID:???
他スレにも「Main」と「main」でわめいて常連追い出した厨房いたね。
ただでさえ人の少ないWebProg板なのにJAPUや_GUNZIPなんかも揚げ足取られてどんどん出ていった・・・。
505nobodyさん:02/03/13 21:46 ID:???
>>503
いやいや、そんな謙虚にならずに。こちらも結構賭でしたから、あの煽り。
506あゆ:02/03/13 21:47 ID:???
>>504
あゆスレのことじゃないよね?
507503:02/03/13 21:53 ID:???
>>501
あ、ごめん。間違って名前に%20(スペース)入れちまった・・・
今出先なので、ssh経由でw3mで書き込んでるので許してくれ。
508nobodyさん:02/03/13 21:55 ID:???
>>507
徹底抗戦の構え・・・か。
509470:02/03/13 21:56 ID:???
>>471
すいません、難しくて理解できないんです。申し訳
ありませんが、もう少し易しくご教示いただければ
幸いです。よろしくお願いします。

>>472
ありがとうございます。その通りやってみましたが、
ソートされずにそのまま出力されてしまいました。
510nobodyさん:02/03/13 21:56 ID:???
揚げ足取りをしていいのならこの文章を張っておこう

> HTML文書の拡張子は通常 .html なのですが、Windows 3.1など古いシステムでは拡張子に3文字までしか使用できなかったため、
> Windows系では未だに .html の代わりに .htm と記述するケースが多いようです。
> HTML文書の擴張子は不定です。仕樣書のどこにも「HTML文書の擴張子は*.htm/*.htmlでなければならない」等とは書かれてゐません。例へば、cgiの吐出すHTML文書に擴張子は附いてゐません。それでもcgiの吐く文書は立派なHTML文書です。
> サーヴァからhttp應答ヘッダにContent-type:text/htmlを附けられて送信された文書は皆HTML文書です。
> 擴張子が*.htmlの文書を「HTML文書」と看做すのは、
> 擴張子で文書の種類を判斷するWindows(や、Windowsの使用に合はせて擴張子でも文書の種類を判斷するMac)だけです。
511460:02/03/13 22:02 ID:???
>507
ぷっ,その書き込みでおれが一番救われた(笑
512nobodyさん:02/03/13 22:03 ID:???
どこぞでMainを指摘した厨房だが
>>504
Mainが誤りだと指摘されたのがそんなに悔しかったのか?
大文字小文字を識別する言語なら当然だろうが。
それとも、まさか指摘するべきじゃなかったと言いたいのか?

513nobodyさん:02/03/13 22:04 ID:???
知 識 だ け で 大 人 げ な い 厨 房 の 宴 の 開 催 だ !
514460:02/03/13 22:09 ID:???
昔からこの板には空気が読めない厨房が存在するって書いただけ。
Mainとmainが黒と白以上に違うもんなのは十分承知。

ちなみに勘違いしてるようだが,おれは最近そのスレ見つけたんだよ。
書き込みすらしたことない。
515nobodyさん:02/03/13 22:14 ID:???
>>513
厨房はそもそも大人じゃないやん(ビシッ)
516レンタル掲示板:02/03/13 22:33 ID:???
で、結局のところ、
どういう仕組みなの?
細かいところはどーでもいいので、大きな部分が知りたい。
517nobodyさん:02/03/13 22:37 ID:???
KENTのMBSProのお試し版の中身でも見りゃいいだろ
もう出てくんなよ
518レンタル掲示板:02/03/13 22:42 ID:???
>>517
ありがとう。
最初から素直に教えろよな。ヴォケ。
519春chu駆除係:02/03/13 22:47 ID:???
>>518
すまん。
520460:02/03/13 22:50 ID:???
>518
ごめんよ。
521nobodyさん:02/03/13 23:14 ID:???
ヽ(´ー`)ノ
522nobodyさん:02/03/13 23:19 ID:???
サブルーチンについて教えて下さい。
通常、私は
&hoge;のような形でサブルーチンを使っているのですが、
&hoge("section1","section2");
のような引数をかっこに入れた使い方を見たことがあります。
取り立ててその使い方がわからなくても使えてはいるのですが、
もしよろしければ、これの意味を教えて下さいませ。
523nobodyさん:02/03/13 23:24 ID:???
>>522
引数て・・・ちゃんとお手持ちの参考書は読みましたか?
524nobodyさん:02/03/13 23:33 ID:???
>>523
読んでいません。
普通、なにかの処理のなかで
&sub_routin 呼び出せば、そこまでのグローバル変数と$_がそのまま使えますので、
それ以上の使い方をしたことがないのです。
ですから、よく、というか、全く理解していないのが現状です。
人の作ったCGIを、自分の好みのデザインに変えるくらいの作業しかわからないのですが
このあたり、どういう意味なのか理解したいなとは思っています。
お願いします。
525nobodyさん:02/03/13 23:35 ID:???
>>524
一度Perlの入門書を購入して読まれた方がいいです。
526春chu予防係:02/03/14 00:47 ID:???
>>524
&sub_routine('hoge','pau');
で呼び出すと、
sub sub_routine {
($a,$b) = @_;
...
}
とすることで、$a,$bに引数を受け取れます。
グローバル変数で受け渡しすると、どの変数をどこで書き換えたか
管理するのがめんどうになってくるので、引数で渡したほうが
べんりですよ。あとからそのサブルーチンを使いまわすときも
効果大です。

perlは、他人のソースから学ぶのが非常に困難なトリッキーな
言語だと思いますので、入門書等の平易なソースを見ながら
勉強したほうが楽だと思います。

ちなみに私は、一度書いた自分のソースでさえ、あとから見ると
なにをやってるのか、その記述にどんな必然性があるのか、
わからなくなることがしょっちゅうです。
527526:02/03/14 00:51 ID:???
>>524
すまぬ。
($a,$b) = @_;

local($a,$b) = @_;
に訂正です。

余計な疑問が沸かないように省略したら、逆にグローバル変数と
変わらなくなってしまった・・・アフォだオレ
528nobodyさん:02/03/14 00:53 ID:???
$answer = &plus(5,10); # 5と10をサブルーチンplusに渡して、結果を$answerに返す
print $answer; # 15

sub plus {
my ($x,$y) = @_; # @_は&plus(ここ)にあったものを渡す 今回は@_ = [5,10]
my $xy = $x + $y;
return $xy; # 返す
}

本読まないで言語習おうなんて甘いと思うけどね
529nobodyさん:02/03/14 01:17 ID:???
$answer = &plus(5,10);
print $answer;

sub plus {
return $_[0] + $_[1];
}

俺ならこうしちゃうけど、一度変数に格納した方がいいのかね?
530 :02/03/14 01:23 ID:???
Perl5の時代に、何故にlocal?
531nobodyさん:02/03/14 01:39 ID:???
KENT信者だから。
532nobodyさん:02/03/14 01:57 ID:???
@_ = [5,10] ってなんだよ(恥

>>529
あとから見るときの為に分かりやすい名前つけておいた方がいいとか読んだから
俺は変数に入れてるけど、使う人の好みだよね。
533526:02/03/14 02:07 ID:???
>>530
すまぬ。いつものくせで
local($a,$_) = @_;
とか書くもので。

みんな、関数の中で $_ つかうときどうしてるのー?
534nobodyさん:02/03/14 02:08 ID:???
>>533
sub hoge
{
local $_;
...
}

先頭付近でlocal宣言してます。
535nobodyさん:02/03/14 02:09 ID:???
>>524
つまり皆はグローバル変数だらけにしないって事だね。
536nobodyさん:02/03/14 02:13 ID:???
>533
漏れの場合、

&hoge($_);

sub hoge{
 $temp = $_[0];
}

とかにしちまう。
537nobodyさん:02/03/14 02:17 ID:???
>>488
アヤシイ性格判断してる暇があったら、$| を $_ と書いちゃってることを
一言指摘してやりゃーいいのにさ。
538nobodyさん:02/03/14 02:52 ID:???
ttp://www.futomi.com/ の解説ってどうなの?
クッキーの解説でも「パスが省略されると、アクセスしたリソース(HTML、CGI)のパスがセットされます。」とか本当にあってる?
とほほではそのスクリプトのフォルダ全部にパスかかるって書いてたと思うんだけど・・・
参考にしても大丈夫かな?
539nobodyさん:02/03/14 06:55 ID:???
すいません、すごく初歩的な質問で恐縮なんですが、こういうときに
正規表現で前方一致させるにはどうしたらいいんでしょう?

$i = 0;
undef(%color);
foreach $name ('田中', '鈴木', '佐藤') {
$color{$name} = $i++;
}

田中角栄でも真紀子でも0を、鈴木一郎でも宗男でも1を、という具合に
定義したいんです。よろしくお願いします。
540533:02/03/14 07:41 ID:???
>>534
なるー。
541488じゃないけど:02/03/14 07:47 ID:???
>>537
やべ。実はこっそり>>487はうまいこと言うなぁと思ってていたので、
そこには気づかなかったよ・・・
542nobodyさん:02/03/14 07:59 ID:???
>>539
意図を理解するまでちょっとかかったぞ・・・

(ここに>>539のソース)
$in = <>;
undef $result;
while( ($name,$col) = each %color) {
$result = $col,last if $in =~ /^$name/;
}

て感じでどうかね。
543nobodyさん:02/03/14 08:56 ID:???
>>542さん
すみません、私の説明不足でした。

1,foo,田中角栄,bar
2,foo,鈴木一郎,bar
3,foo,田中真紀子,bar
4,foo,佐藤三郎,bar
5,foo,佐藤栄作,bar
6,foo,鈴木宗男,bar
   ・
   ・
以下続く

というようなファイルがありまして、必ず田中、'鈴木、佐藤の順に
並べ替えるにはどうしたいいかと試行錯誤しておりまして、以下の
ようになっているんです。

$i = 0;
undef(%color);
foreach $name ('田中', '鈴木', '佐藤') {
$color{$name} = $i++;
}
@LINES = map {$_->[0]}
sort {$color{$a->[3]} <=> $color{$b->[3]}}
map {[$_, split /,/]} @LINES;

>>542でいただいたソースを貼ってみましたがうまくいかないようです。
アドバイスいただければ幸いです。よろしくお願いします。
544nobodyさん:02/03/14 09:55 ID:???
>>543
初心者なもんで粗野ですが、こんな感じでやってみました。
%name = ();
@lines = ();
$i = 0;
while ($line = <DATA>) {
push(@lines, $line);
$tmp = (split(/,/, $line))[2];
$name{$tmp} = $i;
++$i;
}

@permutation = qw(田中 鈴木 佐藤);

foreach $fam (@permutation){
foreach $full (keys %name) {
if (index($full, $fam) == 0) {
push(@result, $full);
}
}
}

foreach(0 .. $#result) {
print $lines[$name{$result[$_]}];
}

__END__
1,foo,田中角栄,bar
2,foo,鈴木一郎,bar
3,foo,田中真紀子,bar
4,foo,佐藤三郎,bar
5,foo,佐藤栄作,bar
6,foo,鈴木宗男,bar
545543:02/03/14 10:16 ID:???
>>544さん
早速ありがとうございます。申し訳ありませんが、どうやって>>543
移せばいいのでしょうか?私、perl二日目でしてよくわからないんです。
お手数をおかけして申し訳ありませんが、どうかよろしくお願いします。
546nobodyさん:02/03/14 10:25 ID:???
>>543に移す」の意味がわからないのですが・・・
結果を@LINESに入れるなら、
print $lines[$name{$result[$_]}];
を、
push(@LINES, $lines[$name{$result[$_]}]);
で大丈夫だと思いますが。
547:02/03/14 10:36 ID:???
はじめまして、いまソケットのお勉強をしているのですが
期待した結果が得られません。ご指導のほど宜しくお願い致します。

WEBサーバー:AN HTTP Daemon ver1.38

1、DOSプロンプトから実行。
2、”localhostに接続できません。”
3、(ToT) アウゥー

以下からソースです・・・
use Socket;

$hostname = 'localhost';
$port = getservbyname('http', 'tcp');
$proto = getprotobyname('tcp');

$iaddr = inet_aton($hostname) or die "$hostnameが見つかりません。\n";

$paddr = pack_sockaddr_in($port, $iaddr);

$socket_addr = pack_sockaddr_in($port, $iaddr);

socket(SOCKET, PF_INET, SOCK_STREAM, $proto) or die "ソケットを生成できません。\n";

connect(SOCKET, $paddr) or die "$hostnameに接続できません。\n";

select(SOCKET); $|=1; select(STDOUT);


print SOCKET "GET /index.html HTTP/1.0\r\n";
print SOCKET "\r\n";

while (<SOCKET>){
m/^\r\n$/ and last;
}

while (<SOCKET>){
print $_;
}
ここまでです・・・
548nobodyさん:02/03/14 11:05 ID:???
裸のSocketは素人にはお勧めできない。
素直にLWPにしとけ。
どうしてもSocketを使いたいなら、せめてIO::Socketにしとけ。
549nobodyさん:02/03/14 11:06 ID:???
>>547
私はそのままコピペで正常に動作しましたよ。
サーバーのPort番号は80ですよねぇ?力になれなくてゴメソ・・・
550547:02/03/14 12:14 ID:???
早速の回答ありがとうございます。
>>548
すんません、LWPってなんですかね?調べてみます。
IO::Socketのりてんってなんですかね?
>>549
もちろんサーバーのポートはデフォルトの80です!
ちなみにどんな内容がかえってくるのですか?

たびたび申し訳ないですがよろしくおねがいします。

551549:02/03/14 12:42 ID:???
>>550
index.htmlが無いので404が帰ってくるだけですが、次のような出力でした。
ちなみにperlはv5.6.1 built for cygwin-multiと
ActivePerl 5.005_03で実行しました。

<HTML><HEAD><TITLE>Error </TITLE></HEAD>
<BODY>
<H1>Error 404</H1>
Not found - file doesn't exist or is read protected
<HR><ADDRESS><a href="http://www.st.rim.or.jp/~nakata/">AnWeb/1.36b</a></ADDRESS>
</BODY></HTML>
552nobodyさん:02/03/14 12:45 ID:???
サブルーチンについてお答え下さった皆様ありがとうございました。
何となくわかりました・・・

一応本は、オライリーのネズミの絵の奴とラクダの絵の奴を読みました。
一つのことを理解しようとするとき、いろんな要素で、ほかの知識が
必要になったりして、積み残したり理解できなかったりする知識があったりします。
本当にありがとでした
553547:02/03/14 13:09 ID:???
>>551
ActivePerlってことは環境はWinですよね?
うーん、私が接続できないってことはサーバー設定に問題があるんですかね?
ちなみにサーバーは何を使用されてますか?
Apacheがいいのかな?
554nobodyさん:02/03/14 13:18 ID:???
>>553
551を見ればわかるけどAn HTTPDですよ。
そもそもWEBブラウザではlocalhostに接続できますか?
555553:02/03/14 13:37 ID:Ibnv+vbs
>>554

>>551を見ればわかるけどAn HTTPDですよ
ほんとだ「AnWeb/1.36b」はずかしー。

>>そもそもWEBブラウザではlocalhostに接続できますか?
できますよー^^
手軽にローカルでテストするから使用するんですよ。

けど同じ環境でできないのならやっぱり設定ですかね?
551さんと同じ設定にして試したいので設定公開していただけないでしょうか?
556nobodyさん:02/03/14 14:07 ID:???
設定は普通です。
HTTPサーバ機能 HTTPバージョン1.1 ポート80

ちなみに$paddrを↓こうしてもconnect失敗しますか?
$paddr = pack_sockaddr_in(80, inet_aton('127.0.0.1'));
557555:02/03/14 15:15 ID:Ibnv+vbs
>>556
おおー!できましたー!ありがとうございます!

>>$paddr = pack_sockaddr_in($port, $iaddr);
               ↓
>>$paddr = pack_sockaddr_in(80, inet_aton('127.0.0.1'));

すなおにgetservbynameを使わずに’80’を指定すればいいのですね?
興味本位ですが、みなさんはSOKETを使ってどのよな処理をされるのですか?
558nobodyさん:02/03/14 18:34 ID:???
>>557
通信。
559nobodyさん:02/03/14 20:30 ID:???
死ね死ね 死ね死ね死ね死ね
死んじまえ
きいろいぶためを やっつけろ
金で心を 汚してしまえ
死ね死ね死ね死ね
日本人は じゃまっけだ
きいろい日本 ぶっつぶせ
死ね死ね死ね 死ね死ね死ね
世界の地図から 消しちまえ 死ね

死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね

死ね死ね 死ね死ね死ね死ね
死んじまえ
きいろいさるめを やっつけろ
夢も希望も うばってしまえ
死ね死ね死ね死ね
地球の外へ 放りだせ
きいろい日本 ぶっつぶせ
死ね死ね死ね 死ね死ね死ね
世界の地図から 消しちまえ 死ね

死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね……


この歌を歌っている人を教えて下さい。
気になってPerlのスクリプトが書けません。
560nobodyさん:02/03/14 20:35 ID:???
春だねぇ
561nobodyさん:02/03/14 20:36 ID:83vwJ138
>>559
キャッツアイズとヤングフレッシュだよ。
しっかりコーディングしてね。
562nobodyさん:02/03/14 20:38 ID:???
>559
どっかにフラッシュムービーあったね。
563nobodyさん:02/03/14 20:42 ID:???
>>562
ほんとですか!
それが気になってPerlが書けません!

>>561
ありがとうございます。これで探せます。
564nobodyさん:02/03/14 20:43 ID:???
>563
ttp://music.2ch.net/test/read.cgi/asong/1011726043/
とりあえずこっち行け。
565nobodyさん:02/03/14 21:39 ID:???
死ね死ね 死ね死ね死ね死ね
死んじまえ
きいろいぶためを やっつけろ
金で心を 汚してしまえ
死ね死ね死ね死ね
日本人は じゃまっけだ
きいろい日本 ぶっつぶせ
死ね死ね死ね 死ね死ね死ね
世界の地図から 消しちまえ 死ね

死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね

死ね死ね 死ね死ね死ね死ね
死んじまえ
きいろいさるめを やっつけろ
夢も希望も うばってしまえ
死ね死ね死ね死ね
地球の外へ 放りだせ
きいろい日本 ぶっつぶせ
死ね死ね死ね 死ね死ね死ね
世界の地図から 消しちまえ 死ね

死ね死ね死ね 死ね死ね死ね
死ね死ね死ね 死ね死ね死ね……

おれも歌って見ました…てへ
566nobodyさん:02/03/15 01:12 ID:???
&func($a1, $a2);

sub func
{
}

などと書いてる奴は氏ね。
プロトタイプ使えプロトタイプ。
567nobodyさん:02/03/15 01:13 ID:BRbcgxef
みんなどうやってパールを実行してんのですか。

ぼくは秀丸で打ち込んだら、いちいちコマンドプロンプトでperl ファイル名
と入力してやっているんですけど。
  環境はwin xpです。
568nobodyさん:02/03/15 01:17 ID:???
# ./hoge.pl
569nobodyさん:02/03/15 01:28 ID:???
開発中は
M-x perldb
570nobodyさん:02/03/15 01:31 ID:???
>>567
せっかく秀丸つかってるのに・・・
最低でも次のマクロを用意しろ。
[実行]run "perl < con";
[構文チェック]run "perl -c < con";
↑共に1行だ。これでファイルに保存せずに、構文チェック、実行が出来るぞ。
571nobodyさん:02/03/15 07:25 ID:???
>>567
closehidemaru findhidemaru(windir + "\\temp\\perlres.txt");
save;
run "\"c:\\program files\\perl\\bin\\perl.exe\" \"" + filename + "\" > " + windir + "\\temp\\perlres.txt";
openfile "/(0," + str(cyscreen - 300) + "," + str(cxscreen) + ",300) " + windir + "\\temp\\perlres.txt";

俺専用統合開発環境w
実行ファイル変更でjavaにも対応(と、言うか元々java用に開発)。
572nobodyさん:02/03/15 10:46 ID:???
単なるPerl実行マクロでもみんな違うのな(w

ちなみに俺のはこれ
// ExecPerl.mac
run "perl -w \"" + filename + "\" >con";
// EOM
573nobodyさん:02/03/15 11:42 ID:pkh37ffW
open(IN,"aaa.dat");のあとに中身を表示するにのに、
---
@data=<IN>;
foreach(@data){
print $_,"<BR>";
}
---

---
while(<IN>){
print $_,"<BR>";
}
---
は、どっちが速いの? また、それぞれの利点・欠点は?


574nobodyさん:02/03/15 12:18 ID:???
上はKENTのドキュソスクリプトかね。


上:メモリを食う。(やめとけ)
下:行数が多いと時間がかかるかも。(1,000,000行とかならんかぎり大丈夫)

ファイルの表示だけなら下を使いなさい。
575nobodyさん:02/03/15 12:41 ID:???
>下:行数が多いと時間がかかるかも

行数が多いと時間がかかるのは上も同じ。
実際に計ってみればわかるが、下の方が高速だしメモリも少なくてすむぞ。

上のほうがいい状況って何だ…?
エディタとか?
576nobodyさん:02/03/15 12:59 ID:???
全部読むなら普通read使うだろ
577nobodyさん:02/03/15 14:03 ID:NtzdYptj
>>575
だね。なんかのルーチンで表示したあと配列保持して、spliceなんかで
編集する必要がある場合くらいしか思いつかない。
それにしても、@配列を逐次表示するのだって、
foreach使うよりwhile使うべきだと思うんだけどな。
578nobodyさん:02/03/15 14:04 ID:???
>>576
使い方しらんねんモン
教えて下され
579read:02/03/15 14:17 ID:???
read FILEHANDLE,SCALAR,LENGTH,OFFSET
read FILEHANDLE,SCALAR,LENGTH

Attempts to read LENGTH bytes of data into variable SCALAR
from the specified FILEHANDLE. Returns the number of bytes
actually read, 0 at end of file, or undef if there was an error.
SCALAR will be grown or shrunk to the length actually read.
If SCALAR needs growing, the new bytes will be zero bytes.
An OFFSET may be specified to place the read data into some
other place in SCALAR than the beginning. The call is actually
implemented in terms of stdio's fread(3) call. To get a true
read(2) system call, see sysread.
580わざわざ英文かよ:02/03/15 14:19 ID:???
`read(FILEHANDLE,SCALAR,LENGTH,OFFSET)'
`read(FILEHANDLE,SCALAR,LENGTH)'
指定した FILEHANDLE から、 LENGTH バイトのデータを読んで SCALAR に格納する。
実際に読み込んだバイト数、またはエラーがあれば undef を返す。
SCALAR は実際に読んだバイト数に合わせてサイズが変わる。
OFFSET を指定すると、読んだデータを文字列の先頭ではなく他の場所に格納する。
これは実際には、 stdio の fread コールを用いてインプリメントしている。
本当の read システムコールを使いたければ、sysread を参照せよ。
581nobodyさん:02/03/15 14:21 ID:???
>>579-580

ていうか、こういうドキュメントって、なんの役にもたたんです・・・・
実際の使用例があればすんなり理解できるのに・・・・・
582nobodyさん:02/03/15 14:22 ID:???
>581
>>579-580に悪いがちょっとだけ同意。
583アホか:02/03/15 14:24 ID:???
$file = "/omaeha/ahoka";
open(AHO, $file) or die;
read(AHO, $aho, -s $file);
close(AHO);
584582:02/03/15 14:25 ID:???
a.txt: aiueo\n
-----------------------
open(A, "a.dat");
  read(A, $Dat);
close(A);

print "$Dat\n";

とかでいいのか?
585nobodyさん:02/03/15 14:29 ID:???
>>581
重要なのは最初の2行なのよ。↓これでほとんど理解できるはず。
read FILEHANDLE,SCALAR,LENGTH,OFFSET
read FILEHANDLE,SCALAR,LENGTH
586nobodyさん:02/03/15 14:30 ID:???
>>585 
そんなこたないよ。
はじめたばっかしの人間、言語というもの自体になれていない人間で
それで理解できる人間なんてほとんどいない。
587nobodyさん:02/03/15 14:31 ID:???
>583
使い方わかったサンクス。
でもそれを見て思うんだけど、ファイルの内容を一度変数に入れる形になってるみたいだけど、
while(<AHO>)よりもメモリ喰ったりしないの?
588だから:02/03/15 14:33 ID:???
習うより慣れろって言葉がある。
仕組みを説明するより、実際に使われているソースをながめたりいじったりした方が、
どれだけ理解を深めるか。

名著と呼ばれるリファレンスブックには、必ず実例が付いている。

>>585だけで理解出来るのであれば、そのような冗長な実例が付く本は
名著どころか、悪書とされているはず。
589nobodyさん:02/03/15 14:34 ID:???
いやいや,変数に入れてる時点で食うよ。
readだと,どこからどこまでを読むかが指定できる。

だから $dat = <AHO> で全部読んで $dat から抽出するよりはマシ。
590nobodyさん:02/03/15 14:35 ID:???
>>583
ありがと〜〜

俺も一つ質問です。
whileで読み込むと、\nごとにわかれた配列に入れることもできるワケなんですけど、
そういう用途だったら素直にwhileつかっとけよ、っていういみなんですよね?
で、一気に読み込んで表示するんだったらreadが便利だわって意味ですね?
591nobodyさん:02/03/15 14:37 ID:???
大きいファイルはreadで読まないとダメだよね。
昔、数十MBのファイルを@lines = <FILE>;で読もうと思ったら、
すごく時間がかかった。readで読んだらすぐ読めた。
592nobodyさん:02/03/15 14:38 ID:???
>589
なるほど。
それじゃあ何も考えずにファイルの内容全表示するだけなら
while(<AHO>){
print;
}
でいいって事かな?
readは確かに使いどころを見極めれば便利そうだ。
ありがとう。
593582:02/03/15 14:40 ID:???
>591
なるほど。readは ファイルデータをスカラに入れるときの性能がいいのか。

>592
うむ。それ推奨。
おれもPOST以外ではread使ったことんなかったんでいい勉強になった。

>579-580には素直に感謝。
594585:02/03/15 14:46 ID:???
>>588
>習うより慣れろって言葉がある。
>仕組みを説明するより、実際に使われているソースをながめたりいじったりした方が、
>どれだけ理解を深めるか。
そのつもりで、構文が大事だよって言いたかったんだが、余計にわかりにくかったな、俺。
ごめんよ。
595nobodyさん:02/03/15 14:48 ID:???
>>594
勉強になったよ。ありがと〜〜
ほかのみなさんもありがと〜〜
596nobodyさん:02/03/15 14:53 ID:???
>>594
そうだったのか、誤解だったかも知れない。
俺が言いたかったのは、

read FILEHANDLE,SCALAR,LENGTH,OFFSET
read FILEHANDLE,SCALAR,LENGTH

これだけ見て、たとえば、ファイルハンドルとは何か?スカラーとは?
オフセットとは実際どんな風に用いられているのか?
とか、そういうのがイメージできるような人は、その言語の上級者だって事なんだよな。
スカラーに$が付くってことすら、このステートメント見てイメージできない人って、
かなりいると思うんだよな。
俺自身、ほかの言語に行くとそういう混乱があったりする。
そういうことが言いたかっただけだったんだよな。
597ファイル丸ごと読み込み:02/03/15 15:24 ID:j7EJ72ek
全文検索エンジン Namazu のインデックス作成プログラム
mkmnz での実装例。
http://www.namazu.org/ml/namazu-dev/msg00102.html

# readfile:
#
# Reads a specified file and returns its content.
# Takes one argument which can be a file name or IO::File object.
#
sub readfile ($) {
my ($arg) = @_;

my $fh;
if (ref $arg) {
if ($arg =~ /^IO::File/) {
$fh = $arg;
} else {
warn "$arg: not an IO::File object!\n";
return "";
}
} else {
$fh = fopen_or_die($arg);
}

my $cont = "";
my $size = -s $fh;
if ($size > $MAX_SIZE) {
warn "$arg: too large!\n";
return "";
}
read $fh, $cont, $size;

return $cont;
}
598nobodyさん:02/03/15 17:15 ID:???
>>597
つまりそういう場合はちゃんとサイズチェックをするべきだ、と。
599nobodyさん:02/03/15 22:55 ID:Wm5JdTg+
@data=<IN>;
やるなら、
push(@data,$_) while <IN>;
だな
600nobodyさん:02/03/15 23:01 ID:???
>>599
ここは「初心者コーナー」なんだからネタはネタと書こうぜ。メールアドレス欄でいいからさ。
601nobodyさん:02/03/15 23:06 ID:???
>599
そ、それじゃKENTの意味無し処理と変わらんぞオイ・・・
602nobodyさん:02/03/15 23:14 ID:Wm5JdTg+
>>601
@data=<IN>;
作業領域に<IN>が展開され、それを@dataにコピー

push(@data,$_) while <IN>;
$_に一行ずつコピーし、一行ずつ@dataに積んでく

意味が分からん奴は、KENT以下のDQN
603ネタ:02/03/15 23:16 ID:???
undef $/;
print <IN>;

ちなみに、でかいファイル食わすとOut of Memoryでした(藁
604nobodyさん:02/03/15 23:16 ID:???
>>602
で、メリットはメモリ節約?
605nobodyさん:02/03/15 23:26 ID:???
>602
まわりくどいことするんだな。(藁
606nobodyさん:02/03/15 23:28 ID:Wm5JdTg+
>>604
ベンチマークとればわかるよ
607nobodyさん:02/03/15 23:28 ID:???
>>602
$a = 1000000;

for(1..1000000){ $a++; }

どっちのほうが君の好み?
608nobodyさん:02/03/15 23:29 ID:Wm5JdTg+
しかし、ほんと初心者スレだな
609601:02/03/15 23:29 ID:???
>602 >606
ん?上だと一瞬メモリ容量が二倍になるのか?
610nobodyさん:02/03/15 23:31 ID:???
>608
そうだよ。おまえみたいに上級者でも見下すヤツは正直場違い。
611nobodyさん:02/03/15 23:34 ID:???
>>607は本質を理解していない。

a[0] = IN[0];
a[1] = IN[1];




してから

result[0] = a[0];




と、

result[0] = IN[0]




の効率を話し合っているんだよ、今。
612600:02/03/15 23:36 ID:???
なるほどな。確かに後者の方が速い。(し、消費メモリも少ないのだろう)
ファイルがでかくなると圧倒的とも言える差だよ。
その点は認識不足だった。コレは認めよう。


だが、普通は

while(<IN>){
# ...
}
または
read IN, $buffer, $size;

を使った方がより良いのでそのテクは何らかの事情がない限り使わないがな。
613607:02/03/15 23:36 ID:???
>611
ネタだ。勘弁しろ。
614nobodyさん:02/03/15 23:49 ID:???
>>612
認めてくれてありがとよ。
別にテクでもなんでもないんだが・・・(while倒置しただけだ)
どちらかというと、@data=<IN>;の方がトリッキーだしな。
615nobodyさん:02/03/16 00:43 ID:???
ところで eval{} のに納得がいかない。
例えば,eval{ flock(xxxx); } だと flockが実行できそうな時だけ実行するの??
エラーが返ったらやっぱりなかったことにするの??

こんなちゃらんぽらんなもんなの?
616nobodyさん:02/03/16 00:49 ID:???
>>615
「この中のエラーは無かった事にしてくれ」と頼んでおきながら、何か不満ですか?

それとも$@の存在を知らないとか?

オブジェクトも受け取れるのでC++ちっくな例外処理も出来るよ。

eval{
throw MyException('Hoge!');
}
if($@){
die $@->errstr;
}
617615:02/03/16 00:53 ID:???
とほほによると,どうやらとりあえず「eval{};」内を実行して
エラーが返ると$@にエラーメッセージを入れて処理を続けるみたいだね。
ちゃらんぽらんだが便利なもんだな(笑

>616
その通り。$@知りませんでした。
あと「eval{};」みたいだね。
618615:02/03/16 00:55 ID:???
>616
2つeval{};を並べるときはそのつどundef $@;せなあかんの?
619nobodyさん:02/03/16 04:32 ID:???
$@には直前のevalのエラーメッセージが入ります。

eval {flock STDIN,2};
print $@ . __LINE__;
eval {print $@ . __LINE__};
print $@ . __LINE__;
620nobodyさん:02/03/16 06:23 ID:???
会員制サイト
IDとパスワードでログイン
ってのはどうすれば良いですか?
ご説明は邪魔くさいと思うので
参考になるサイトがあればお教え下さい。
621nobodyさん:02/03/16 06:25 ID:???
>>620
IDとパスワード入力させてあってたら会員用のにリダイレクト。
622nobodyさん:02/03/16 06:35 ID:???
>620
Perlに関係無い,Basic認証のだけど。
http://www.google.co.jp/search?q=Basic%94F%8F%D8+htaccess+%83p%83X%83%8F%81%5B%83h
623620:02/03/16 06:55 ID:???
>>621
回答ありがとう。

>>622
Basic認証で複数ID、複数パスって
可能なのでしょうか?
624nobodyさん:02/03/16 07:03 ID:???
>>623
BASIC認証知らないなら・・・もとい、認証がなんたるかわかってないなら調べてくる・
625615:02/03/16 08:20 ID:???
>619
さんくす!参考になります!

>621
"認証サイト"なら .httaccess 使うとヨシ。
626nobodyさん:02/03/16 10:38 ID:???
認証ついでに、perlでNTLM認証できるモジュールなんかありませんか?
627nobodyさん:02/03/16 11:26 ID:???
628626:02/03/16 12:44 ID:???
>>627
サンクス!
てか、FAQレベルでしたね・・・(;´Д`)
629627:02/03/16 13:32 ID:???
自分で調べるくせをつけような. ъ( ゚ー^)
630nobodyさん:02/03/16 21:34 ID:???
鯖が生きてるか死んでるかを調べるには
どんなコマンドをつかったらよいですか?
自鯖を調べるのにつかいます
てか、自鯖立てるんだったらこれぐらいできるようにならんと・・・
631nobodyさん:02/03/16 21:40 ID:???
ping
632630:02/03/16 22:09 ID:???
>>631
それはちがいます
Perlで
633nobodyさん:02/03/16 22:17 ID:???
>>630
Perl初心者コーナーで聞くからには、
もちろんPerlを使っての調べ方と仮定しますが。

Net::Pingを使いましょう。
perl-5.7.3では標準添付のようです。
ただし、MSWin32だと、Errnoの関係から使えないようです。
634nobodyさん:02/03/16 22:20 ID:???
>>630=632
違うんだったら、``コマンド''という表現はいかがなものか。
635nobodyさん:02/03/16 22:31 ID:???
> コマンド
つまり、こういうことだろ。
$result = `ping hoge.org`;
636nobodyさん:02/03/16 22:54 ID:???
>>635
漏れもそうする。
637nobodyさん:02/03/16 22:56 ID:???
>>636
でも ping だと IP reachable かどうかはわかっても
サーバが動いてるか止まってるかはわからんよ。
638nobodyさん:02/03/16 23:19 ID:???
>>637
がたがた言わずにソケットでコネクション張れば良かろう。
639nobodyさん:02/03/16 23:21 ID:???
>>637
取りあえずサーバの定義をはっきりしようや。
1台のマシンを指すのかサーバマシン上で走ってるネットワークデーモンを指すのか。

偉そうなことを言うのはそれからにしてくれ。
640nobodyさん:02/03/16 23:22 ID:???
>>633
pingには特権が必要だから,普通`ping`
641nobodyさん:02/03/17 00:14 ID:???
>>637
んなこたない。
642nobodyさん:02/03/17 00:25 ID:???
>>633-640
ネタにマジレスおつかれ〜
643nobodyさん:02/03/17 00:53 ID:???
厨が出てこなかったら揚げ足取りばっかか…
なんでこうなるかねぇ…
644615:02/03/17 01:39 ID:???
flockってwin2000で使えてるのですか?anhttpd&ActivePerlです。

eval{ flock(); };
die "errer!" if $@;

でも出力はないのですが,ロックしてないクセにそのまま真返してそうで・・・
645615:02/03/17 01:51 ID:???
>619
遅くなったけどありがとう。つまり偽だと空が入るんだね。納得。
646nobodyさん:02/03/17 02:17 ID:???
>>644
W2kは強制ロックしかかからないって聞いたことあるけど。
ホントのとこどうなってるかは知らん。
647nobodyさん:02/03/17 03:29 ID:???
>>644
排他ロックを2重にかけて、ハングするか試してみればいいのでわ?
648636:02/03/17 03:35 ID:???
>>637
そういうときは、さくっとsynスキャンする。(嘘)
use IO::Socket;
print "ok\n" if (new IO::Socket::INET("www.kantei.go.jp:22"));
とかする。
649nobodyさん:02/03/17 10:36 ID:???
>>648
最後にackを返さなければなお良いw
650nobodyさん:02/03/17 10:37 ID:???
>>647
デッドロックって奴ですか!
651nobodyさん:02/03/17 14:28 ID:???
ちうか"flock()"は"プロトタイプが違うぞゴルァ"てんで必ずコケる気がするんだが。
652630:02/03/17 21:54 ID:???
>>648
ありがとうございました
うまくいきました
653615:02/03/17 23:21 ID:???
>647>650
(((((||| ゚Д゚;;;)))))ガタガタガタガタ
654648:02/03/17 23:40 ID:???
>>635
何を恐がっていますか?w
655nobodyさん:02/03/17 23:41 ID:???
>>653
過去にデッドロックで酷い目にあったSEさんの霊でしょう。
656648:02/03/17 23:44 ID:???
>>653
あ〜〜〜〜、デッドロックがなにか悪いことだと思ってるのね。
意図しないでデッドロックに陥るのはもちろん問題だけど、
テストとして意図的にデッドロックさせるのは、問題ないよ。
プロセス止めれば、解除されるので安心したまい。
657nobodyさん:02/03/18 02:42 ID:3JM+vmYu
perlでディレクトリ以下の全ファイル容量って
調べられますか?
もちろん対象ディレクトリ以下にディレクトリが複数あっても
底の底まで調べる・・・ど?
658nobodyさん:02/03/18 03:29 ID:???
>657
できるよ。
ファイルサイズ取得とディレクトリ内ファイル一覧取得を組み合わせるとか,
適当なモジュール使うとか,他のプログラム使うとかで。
659nobodyさん:02/03/18 03:30 ID:???
特定のHTMLファイルから4桁の数字だけ得れるプログラムを作ってます。
データを全部配列に入れてからforeachで回して、
4桁の数字を見つけたらその部分をsubstrで取り出す・・と考えているのですが
4桁の数字を見つける処理に手間取っています。
正規表現を上手く使って^(\d{4})$とやろうかなと思っているものの、どう使ったものか・・。

スマートな方法は何か無いものでしょうか。
660nobodyさん:02/03/18 04:00 ID:???
>659
m//や//は,リストコンテキストで評価すると()内のリストを返すので,
それを利用するとこんな感じ。

while (<DATA>) {
 my @tmp = /(\d{4})/g;
 push @ary,@tmp;
}
print "@ary";
__DATA__
asdf1234as
d45ad6f54a32451234
af9842s
661nobodyさん:02/03/18 11:37 ID:34CtYnSp
おはようございます。凄く初歩的だと思いますが
Perl4ですけど、
@DATA[ $FORM{'ressno'} ]の値を$oldDATAに代入したいんですが
つぎのコードは文法上間違ってますか?

$oldDATA = @DATA[ $FORM{'ressno'} ];

printしてみると@DATA[ $FORM{'ressno'} ]には文字列が入ってるんですが
$oldDATAは空っぽなんです。
本を見るとよさそうに見えるんですが・・・
ココで作業が止まっちゃってるんです。
おしえていただければありがたいのですが。
662nobodyさん:02/03/18 11:43 ID:???
>660
()なんて必要ないケド...
ループ内でのmy宣言はしないほうがよいのでは?
あと、その正規表現では5桁以上にもマッチしてしまうのでは?

my @array= map{ (/(\D|\b)(\d{4})(\D|\b)/g)[$[+1] } <DATA>;
print "@array\n";
__DATA__
asdf1234as
d45ad6f54a32451234
af9842s
663nobodyさん:02/03/18 11:47 ID:???
>>661
$oldDATA = $DATA[ $FORM{'ressno'} ];
じゃない?
664661:02/03/18 11:59 ID:???
>>663
ありがとうございます。
やってみましたけど残念ながら同じ結果でした。
665nobodyさん:02/03/18 12:09 ID:???
もういちど、こんぽんのデータ値を確認しては?
666615:02/03/18 12:35 ID:???
>661
変数名が間違ってないかもう一度確かめて。

>662
なるほど。
ループ内でmy()はしないほうがいいのか。
ループの前に宣言するか,ループの後でundefするほうがいいのね。
667たろう:02/03/18 12:37 ID:eHMudoVK
一回のリクエスト/レスポンスで
クッキーをセットして取得することってできます・・・?
無理かなあ。
それかクッキーがオンかオフが判定できる方法ってありますかねえ。
668nobodyさん:02/03/18 12:46 ID:???
>661
代入のタイミングが間違ってないか確認するべきかと。

printで文字列が出るという事は、@DATA[ $FORM{'ressno'} ]には文字列が入っているんだろう。
変数名の間違いという事もないと思われる。
しかし、
$oldDATA = @DATA[ $FORM{'ressno'} ];
この書き方では、@DATA[ $FORM{'ressno'} ]を変数でなく配列として認識してしまう為、その要素でなく要素数が返される。
だから>663の書き方のほうが正しい。
しかし、間違いの書き方でも、要素数の1が$oldDATAに入らないのはおかしい。
だとしたら考えられるのは変数の代入タイミングが間違っているか、変数のスコープの範囲外で判定しようとしてるかどっちかじゃないかと思われる。
669nobodyさん:02/03/18 13:00 ID:???
>661
その価値のないソースを見せてみRO!
670663:02/03/18 13:18 ID:???
>>664
なら、@と$の間違いじゃない(配列に何か入ってる)ということで、
$oldDATA = join(undef,@DATA[ $FORM{'ressno'} ]);
とか。
671nobodyさん:02/03/18 13:23 ID:???
>670
663をやってダメなのにオマエはアフォか?
672661:02/03/18 13:37 ID:???
>>668
ありがとうございます。その通りでした。
変数のスコープの範囲外です。
勉強不足で申し訳有りません。

他の皆さんも、ありがとうございました。

673nobodyさん:02/03/18 14:36 ID:HCOk+r4Y
色々調べましたが、わからない事があるので質問します。
どうぞよろしくお願いします。
use関数についてなのですが、よく
use lib '/mylib';
というのを目にしますが、これの第二引数'/mylib/';の意味がわかりません。
ご教授いただけないでしょうか?
それともう一つ
use I18N::Japanese;
の”::”の意味は一体なんなのでしょうか?さっぱり意味不明です。
それでは失礼します。
674nobodyさん:02/03/18 14:38 ID:HCOk+r4Y
>>673
補足させていただきます。
"::"がパッケージ変数へのアクセスに使われるというのは知っているのですが
use関数で使われる事の意味がわからないのです。
675nobodyさん:02/03/18 14:48 ID:???
>>673
モジュールを読み込むディレクトリに'/mylib'を追加しまっせ!
'::'はディレクトリ構造を表します
I18N/Japanese.pm
676670:02/03/18 14:57 ID:???
>>671
おうよ。
677673:02/03/18 15:27 ID:HCOk+r4Y
>>675
お答えありがとうございます!
"::"の意味がよくわかりました。一ヶ月くらい悩んでただけに感動ですw
'/mylib'は、つまりlibモジュールだけの特別な引数であるという
解釈でよろしいのでしょうか?
678nobodyさん:02/03/18 15:32 ID:???
>>673
正直、駱駝本を読む事をオススメする。
679675:02/03/18 16:06 ID:???
>>673
useの後ろに付くlibはプラグマってやつね。
プラグマはperlの動作を変えるわけ。strictとかutf8とかあるから
自分で調べてみなさい。(プラグマは慣用的に小文字を使う。)
use lib LIST;は
BEGIN { unshift(@INC, LIST) }と同じね。
@INCにはモジュールなどを探すディレクトリが入ってるわけです。
680673:02/03/18 16:41 ID:BUM18lm5
>>678
はい。わかりました。ただ「駱駝本」が読めないのが難点ですがw
今度書泉で探してみますね。
>>679
よーーーーーーーーーーくわかりました!プラグマですか。正直そんな
単語は聞いた事も無かったですね。どうもありがとうございました。
681nobodyさん:02/03/18 16:45 ID:???
@INCってinclude?
682nobodyさん:02/03/18 17:19 ID:???
>>680
らくだぼん、とよむ。
683nobodyさん:02/03/18 17:31 ID:kNBmdvNL
すみません!
煮詰まってしまったので教えて下さい。


受け取るデータ(文字列:長さ制限なし)が1000文字以上だった場合、
文頭、文末それぞれ1文字を削除した状態に加工後、

REMOTE_ADDR,domain,加工後の文字列,文字列を受け取った時間

というようにCSV形式に成形して↑これをファイルに書込んでいます。

文字コードはEUC-JPで、文字列の加工にはsubstrを使っています。
文字列の加工まではうまくいくのですが、ファイルに書込まれたデータを
見ると、文字列の最後と時間の前のカンマが全角ひらがなとして1文字に
なってしまいます。

この文字化けを解消する方法ありませんでしょうか?
ファイルに書込んだ後比較用データとして、後でまた呼び出し
カンマでsplitをかけると、ちゃんと時間と文字列に分割されては
いるようなんですが・・・・
684nobodyさん:02/03/18 17:46 ID:???
>>683
EUCなら簡単に出来ますが、1文字削除する行為が意味不明なので
教えてあげない。
ってゆうか、Perlメモ見れば分かるよね。
685683:02/03/18 17:48 ID:???
一応perlメモ見たんですが(^^;
もう一回逝ってきます。
1文字削除は私にも…上からの命令なのです。
686683:02/03/18 17:52 ID:???
>>684
ありがとうございました。
見つかりました!
あ、即レスも感謝です。

perlメモ今見てきたらありました。
煮詰まってるとだめですね。。。
687nobodyさん:02/03/18 19:23 ID:???
特定のサブルーチン(メソッド)が、継承されても、
常に親クラスのを呼び出すことって出来ますか?
つまり、$obj->method とあった時に、
$objが子クラスのオブジェクトでmethodが子クラスにあった時でも
親クラスのmethodを呼び出すような物です。
それをSUPER::とかじゃなくて、クラス側(モジュール側?)で書きたいのです。
可能であれば、是非方法を御教授下さい。
宜しくお願い致します。
688nobodyさん:02/03/18 20:42 ID:???
>>687

オブジェクト指向的に妙じゃないか?
689nobodyさん:02/03/18 20:43 ID:???
なぜSUPERじゃだめなのか小一時間質問したい。
それともあれか、"virtualではない"メソッドを定義したいってか?
690687:02/03/18 22:53 ID:???
例えばアクセスメソッドとかがオーバーライドされたら、あれだと思ったので、、
まぁ無理ならいいです。すいませんでした。
691nobodyさん:02/03/19 00:04 ID:???
>>690
java でいう final てやつだね。perl5でできるのかなー。
692nobodyさん:02/03/19 01:20 ID:???
どなたかわかるかたがいたら教えていただきたいのですが、
CSVデータをうまく分割するコードがあれば是非教えてください。
Perlメモにあるやり方は知っていますが、ほかにもっとうまいやり方が
ありそうでなかなか思い浮かばないので途方に暮れています。
できればワンライナーかシュウォーツ変換のうまいコードがあればありがたいです。
693nobodyさん:02/03/19 01:34 ID:???
>>692
もっとうまくってどんなふうに?
694nobodyさん:02/03/19 02:44 ID:???
>693
>できればワンライナーかシュウォーツ変換のうまいコードがあれば
ってことですが...
695nobodyさん:02/03/19 03:16 ID:???
>>694
1行で書いても何も得にならないよ。
そんなことで悩んでないでPerlメモにあるやつを、自分の使いやすいように
アレンジするか、適当なモジュールを導入した方がいいと思う。
但し、格納するデータが汎用でなくカンマやダブルクウォートを含まないのなら
特に加工が必要ないので簡単になるけどね。
バイナリを格納しないのなら、区切りを制御文字に・・・(CSVにならない)

で、結局君はどんな目的で「ワンライナーかシュウォーツ変換のうまいコード」
が必要なわけ?
696nobodyさん:02/03/19 03:37 ID:???
>695
すぐに使うわけではなかったのでべつにできないならできないでいいけど、
たったいまこちらである程度いいものができたのでテストを繰り返して
いるところです。
ただ、わたしのライブラリを増やしたかっただけ(自己満足)なのでこれで
5パターンになりつつあります。(テスト結果でバグがなければ)
ただ、Perlメモにあるのはなんか好きになれないというだけのことです。
いま書いたのは、ワンライナーで2次元配列にセットするものでなんとなく
気に入っています。
ということで、この質問は自己解決のためもう忘れてください。
697nobodyさん:02/03/19 09:43 ID:???
シュウォーツって初めて見る表現だな。Schwartzだから間違っちゃいないのか…。
698nobodyさん:02/03/19 17:20 ID:FUNiZ5qx
Perlでoopってどうなの
皆してる?
流行のソースの記述きぼーん
699nobodyさん:02/03/19 19:08 ID:???
>>698
エージェント指向。
700nobodyさん:02/03/19 20:27 ID:???
>>698
ユーザー指向。
701nobodyさん:02/03/19 22:01 ID:???
>>698
LWPとか*::Parserとその派生クラスとかDBIとかいろいろあるけど、
最も身近なのはTieかな。
702 :02/03/19 23:05 ID:???
perl の eq 演算子(文字列比較)なんですが、比較したい変数の先頭文字が
メタキャラクタの場合、比較がうまくいかないのですが、こういうものなのでしょうか?

たとえば下記のような二つの文字列を代入した変数があります。

$ORIG="hello";
$TARGET="$$";

これを比較した場合、等しくなってほしくないのですが、eq で比較すると
等しいという結果になってしまいます。
↓こんな感じ。

if ($ORIG eq $TARGET) {

# この中に入ってしまう

} else {

#本当はこっちに来てほしい
}


変数にメタキャラクタが入っている場合、どのように比較すればいいのでしょうか?
あるいは、変数の最初の文字にメタキャラクタが入っている場合、
うまく比較できないのは perl の仕様なのでしょうか?
703nobodyさん:02/03/19 23:07 ID:???
$ORIG = "hello";
$TARGET = '$$'; # シングルクオートで囲ってあるの。

で大丈夫だよー。
704nobodyさん:02/03/19 23:13 ID:???
$$はスクリプトを実行しているPerlのプロセスIDだね。
705nobodyさん:02/03/19 23:44 ID:???
先生!当方、Windows Meなのですが
Perlを勉強したいと思い、perlの本を買いました。
(すぐわかるPerl、CGI&Perlポケットリファレンス)

とりあえず、最初どうしたらよいのでしょうか?
プログラミングを参考書に習って書いていくにしても
どういう風に進めたらいいか分からなくて...
706nobodyさん:02/03/19 23:45 ID:???
>>705

買った本に書いてなかったか?
707nobodyさん:02/03/19 23:47 ID:???
>>705
ActivePerl落とした?
708nobodyさん:02/03/19 23:50 ID:???
>>703-704
それでも等しくなるのはおかしい。

>>702
> うまく比較できないのは perl の仕様なのでしょうか?
なわけねぇだろ。
100%お前のミスだよ。

ifの前に print("$a $b\n") で変数の値を出力してみろ。

709nobodyさん:02/03/19 23:51 ID:???
>>705
すぐわかるの巻末を熟読。
710702:02/03/20 00:12 ID:???
>>703 >>704

レスありがとうございます。
すみません、ちょっと私の書き方がまずかったです。
perl においてシングルクォートでくくると、変数を展開しない、エスケープが使えないというのは承知しているのですが、
今回のケースは、正確には下記のようなケースなのです。

前提:
1.テキストファイルにデータが書かれている
2.テキストファイルには、1行に複数の項目が書かれており、デリミタでくくられている

処理:
1.テキストファイルから1行読み込む
2.splitで分割する(分割した文字列が $TARGET に入る)
3.その文字列を eq で比較する

という感じなので、$TARGET には、普通の ascii 文字列が入ってくるかもしれないし、
$ とか ? で始まる文字列が入ってくるかもしれないのです。

↓コード例==============
$ORIG="hello";

open(DATA, "ファイル名")
while(<DATA>){
 @hoge = split(/,/, $_);
 $TARGET= @hoge[0];
 if ($ORIG eq $TARGET) {
  # $TARGET の中身の先頭文字が $ などの場合は
  # この中に入ってしまう
}
:
==============

さぁどうしようかという感じなのですが....
どこかに、「eq では、先頭にメタキャラクタが入っていると比較できない(perlの仕様)」
見たいなことが明文化されていると、ある意味幸せなんだけど...
みなさんこういうときどうされてますか?
711nobodyさん:02/03/20 00:14 ID:???
$TARGETをprintしれ。
そうすれば大体わかる。
っつーか全ソース晒せ。
712nobodyさん:02/03/20 00:15 ID:???
>>710
709は読んだか?

大体メタキャラクタってなんだよ。"正規表現の"メタキャラクタならまだ解らんでもないが。
脳内定義は止めてくれ。
713 :02/03/20 00:21 ID:fhi6exvT
あ〜実験しますね
>>10
>>10-20
>>アボーン
http://
http://ドキュソ

714 :02/03/20 00:22 ID:fhi6exvT
う〜む
こういうことになるのかぁ
715 :02/03/20 00:23 ID:fhi6exvT
>>1000000
http://DQN
http://DQN.jp
これではどうかな
716 :02/03/20 00:24 ID:fhi6exvT
なるほど
ではこれでは
>>DQN
717 :02/03/20 00:25 ID:fhi6exvT
>>は数字じゃないとだめなのね
http://は半角文字じゃないとだめなのね
_φ( ̄ー ̄ )メモメモ
718nobodyさん:02/03/20 00:26 ID:???
>>ID:fhi6exvT
消えろ
719 :02/03/20 00:27 ID:fhi6exvT
そだこれはどだ
>>5どきゅん
http://DQNんだ
720 :02/03/20 00:28 ID:fhi6exvT
うぃ実験あんがとでした。
>>718
721nobodyさん:02/03/20 00:29 ID:???
fhi6exvTよぉ。
たかが2ちゃんねるでもな、おもしれぇところで下らん事やると、
そこは面白くない場所になって寂れるんだよ。

下の方にいくらでも廃墟のスレッドがあるだろ?
そこで、sageでこっそりやるのがテストってモンなんだよ。
722ネタ?ニマジレス:02/03/20 00:29 ID:???
>>710
> どこかに、「eq では、先頭にメタキャラクタが入っていると比較できない(perlの仕様)」
> 見たいなことが明文化されていると、ある意味幸せなんだけど...

僕は不幸だと思います。
723 :02/03/20 00:32 ID:fhi6exvT
>>721
あ、sageですればよかったすね
失礼しました。
ところでお聞きしたいんですが2ちゃんねるのレスの改行制限、文字数制限っていくつなんでしょうか?
いま2ちゃんねるのまねCGIつくってまして
724nobodyさん:02/03/20 00:35 ID:???
>723
↓とかで。
【スレッド】 2ch型掲示板その4 【フロート式】
http://pc.2ch.net/test/read.cgi/php/1010669197/l50
725nobodyさん:02/03/20 00:52 ID:???
荒らしは放置の方向でいこうYO
726702:02/03/20 01:06 ID:???
>>709 >>711 >>712
レスどうもありがとうございます。(709は 710 を書いた後に気がつきました。)

すみません、結論から言えば私のミスでした。みなさん申し訳ありません。
perl の eq は間違っていませんでした(printしまくってみて、気がついた。)
別のところが問題だったのですが、そこがわかりません。
ソースを貼り付けます。
1 #!/usr/bin/perl
2
3 $ORIG="hello";
4 print "$ORIG\n";
5
6 open (DATA, "dat.txt");
7 while (<DATA>) {
8 chomp;
9
10 @hoge = split(/,/, $_);
11 $AA = @hoge[0];
12 $BB = @hoge[1];
13
14 print "\n";
15 print '$AA>>'."$AA"."<<";
16 print '$BB>>'."$BB"."<<\n";
17
18 if( $ORIG eq $BB) {
19 print "pattern 1\n";
20 } elsif($ORIG =~ /$BB/ ) {
21 print "pattern 2\n";
22 } else {
23 print "pattern 3\n";
24 }
25 }
727702:02/03/20 01:06 ID:???
hoge.datの内容
----------------
11,bb
22,$$
----------------

実行結果
----------------
$ ./hoge.pl
hello

$AA=11 $BB=bb
pattern 3

$AA=22 $BB=$$
pattern 2
----------------

気になるのは、2行目のデータを読み込んだときに
hello と $$ を比較していて、
部分一致になってしまっている点です。この二つを比較すると
不一致になる(だから pattern 3 が表示される)
はずなのですが、どうして pattern 2 にいってしまうのでしょうか?
728nobodyさん:02/03/20 01:16 ID:???
$BB = quotemeta($BB);
729702:02/03/20 01:42 ID:???
ああっ、直りました!!
quotemeta(); をいれて print してみたところ、
$$ が \$\$ で表示されました。

この quotemeta(); で、今まで問題がなかったところに影響がないかどうか、
テストをしてみます。
(quotemeta されることにより、いままで正常に eq できていたところが
eq できなくなると、それはそれで困るので)

ついでに quotemeta() で、\ が挿入される文字についても調べて見ます。
(正規表現で特別な意味を持つ文字が対象? だからセミコロンとかは対象にならない?)

728 さん、どうもありがとうございました。
730nobodyさん:02/03/20 09:35 ID:???
>>729
とりあえずquotemetaの「meta」が何を意味するのかを勉強しなさい。
どうもeqと正規表現の違いが分かっていないように見える。
731nobodyさん:02/03/20 10:17 ID:???
ハッシュを多次元配列の構造体としてついかいたいんだけど

$mesu{ 'manco' }{ 'size' } = '宇宙' ;

見たいな感じで、
合わせて、どっかいいポインター紹介してもらえないすか、
732nobodyさん:02/03/20 10:19 ID:???
>>731
どうぞご自由に使ってください。
貴方の邪魔をする者はいません。

「どっかいいポインター」が何の事かは分かりませんが…。
733nobodyさん:02/03/20 10:28 ID:???
無理だと思うからキーを<>で区切れば?

あとここの人間下ネタ嫌いみたいだから・・・(笑
734 :02/03/20 10:34 ID:fhi6exvT
フォームメールで添付ファイルを送信するやりかたをおしえてください
735nobodyさん:02/03/20 10:59 ID:???
>734
7bitにエンコード(←合ってる?)したりかなりめんどくさいからオススメしません。
736nobodyさん:02/03/20 11:02 ID:???
>>735
逆に一回BASE64なりなんなりのライブラリを作ったら最強。
737nobodyさん:02/03/20 11:35 ID:???
738731:02/03/20 13:19 ID:???
なんかそのままいけたくさい。
>$mesu{ 'manco' }{ 'size' } = '宇宙' ;

>「どっかいいポインター」が何の事かは分かりませんが…。
URLって事で
739 :02/03/20 18:12 ID:fhi6exvT
>>734ですが
mimew.plっての発見してできました。
740735:02/03/20 19:29 ID:???
>739
そらよかったやん。
語学のためにURLきぼんぬ。
741nobodyさん:02/03/20 19:37 ID:???
少々板違いなんですが、Windows上でperlを動かすと
コマンドプロンプトらしきものが立ち上がり
そこでperlが動いてるのが見えるんですが
これを見えないようにするやり方ありませんか?
バックグラウンド(?)で動かしたいのです
742nobodyさん:02/03/20 19:40 ID:???
>>741
無理。以上。
743nobodyさん:02/03/20 19:41 ID:???
コマンドプロンプトから実行せんとどこから実行すんのよ。
ひょっとしてApache か anhttpdのDOS画面のことか?
744nobodyさん:02/03/20 19:46 ID:???
>>743
>anhttpdのDOS画面

むぅ?
  ПП 
 (゜x゜ )○
745nobodyさん:02/03/20 19:55 ID:???
>744
いや,おれのマシンではたまに出てくるのよ。4回に1回ぐらい。
746nobodyさん:02/03/20 20:24 ID:???
>>741
perl.exeじゃなくてwperl.exeだったら大丈夫じゃない?
ActivePerlだったら入っているはず。
747nobodyさん:02/03/20 21:22 ID:UA5ZBzLD
テキストデータファイルperlで扱うCGIを作る場合、
全部一気に配列に読み込んで扱いますか??
データソートとかする場合、いちいち読みに行くと遅いかなあと思うけど
サーバに負担かかるだろうし、例えば5Mくらいのデータファイルだったら
普通みなさんどうしますか?
それから、データが後々増えることを考慮する場合どうしますか?
748nobodyさん:02/03/20 21:26 ID:???
>>747
前それでもめた。

while(<>)

がベストというのが有識者の意見。
749nobodyさん:02/03/20 21:28 ID:???
>748
それは「表示するだけなら」じゃないのか?
750出来の悪い子:02/03/20 21:32 ID:K1AeGIQF
質問です
メールをチェックする正規表現がうまく作動しないのですが
どうしたら良いですか?

} elsif ($email =~ /^[^@]+@[^.]+\..+/) {
&Header('Insert Editor');
print "<H5>     Emailが正しく入っていません<br>";

これだと素通りしてしまいます
とりあえず下記のやり方でごまかしているのですが。

} elsif ($email eq "") {
&Header('Insert Editor');
print "<H5>     Emailを入力してください<br>";

これじゃチェックにならない(´・ω・`)ショボーン

どう記述すれば良いでしょうか?
751nobodyさん:02/03/20 21:48 ID:???
while(<xxx>){ push(@yyy); } ね。
その時散々煽ったおれも全部上に書き換えたよ。(笑

「^」使うとまぎらわしいね。「 !~ メールアドレスの書式」 にしてみろよ。

てきとーで書くけど $email !~ /\w\.-_@\w-_\.\w/ とか。
752nobodyさん:02/03/20 21:50 ID:???
>751
てきとーに書きすぎた。
$Mail =~ /^[\w\-\.]+\@[\w\-]+\.[\w\-\.]+$/i でどう?
753出来の悪い子:02/03/20 21:57 ID:???
>>752
駄目でした。
うーん 頭冷やしてきます。

754nobodyさん:02/03/20 22:00 ID:???
「$email !~ /^[\w\-\.]+\@[\w\-]+\.[\w\-\.]+$/i」にしてる?
755nobodyおっさん:02/03/20 22:32 ID:???
>752==754
メールユーザID文字数は何文字でもいいの?
. (ピリオド)が2つ続いてもマッチするのでは?
最後に . (ピリオド)がきてもマッチするのでは?
i オプションの意味は?
756nobodyさん:02/03/20 22:38 ID:???
>755
ならアンタが早く説明してやれよ。
どうせ初心者の相手する気なんてまったく無くて解答者に茶々入れるだけにここいるんだろけど。
757nobodyさん:02/03/20 22:40 ID:???
>>747
1MB超えた辺りから、自前のエンジンより
DB_FileのBTREEとかXS拡張DBDを使うDBIが検索やソートは高速になってくるよ。
758nobodyさん:02/03/20 22:56 ID:???
if($email !~ (?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")(?:\.(?:[^(\04
0)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*"))*@(?:[^(\0
40)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])(?:\.(?:[^(\040)<>@,;:".\\\
[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\]))*){ &err("mailerrer"); }
759nobodyおっさん:02/03/20 23:23 ID:???
>756
生半可な知識だったら書かないほうがいいということを言いたかっただけ。
できもしないのに嘘をはずかしげもなく語るほうがよっぽど迷惑なのでは?
760nobodyさん:02/03/20 23:27 ID:???
>>759
じゃあおまえが絶対な解答で答えてあげてくださいよ。
761nobodyさん:02/03/20 23:29 ID:???
>>759
自分が出来ないのに人を非難するのは筋違いかと。
762nobodyさん:02/03/20 23:30 ID:???
>759
生半可な知識でも書いてみるのはいいことだよ。
そこからより効率のいい正しい方法の話し合いがされて、間違いを書いた方も正しいやり方を覚えられる。
初心者は自分の知りたかった事が議論によって導き出され、より理解力が深まる。
答えだけ出されるよりよっぽど勉強になるよ。
763nobodyさん:02/03/20 23:36 ID:???
ドットが2つ続くかどうかなんてチェックしてたら
とても簡潔なコードにはならんよ。

それならモジュール使って送信テストまでするよ。
764nobodyさん:02/03/20 23:41 ID:UA5ZBzLD
>>748,>>749,>>757
遅れましたが、ありがとう!
なんかDBの知識もなく、また頼まれ仕事で納期もないので
取りあえずタブ区切りテキスト+自前エンジンでやるしかないんですが、
やはり動作速度を犠牲にしたほうがいいのかな。
サーバに負担かけたら怒られますかね。ド素人ですまんです。
765nobodyおっさん:02/03/20 23:53 ID:???
>763
>ドットが2つ続くかどうかなんてチェックしてたら
>とても簡潔なコードにはならんよ。
なぜそういいきれる? その根拠はなんなの?
やらないうちから決め付けるのはやめたほうがいいと思う。
766nobodyさん:02/03/21 00:09 ID:???
メアドチェックならperlメモにあったよね?
ていうか>>758にある。。
767nobodyさん:02/03/21 00:29 ID:???
>>764
5MBをいちいちメモリ上に展開するのはやめたほうがいいと思われ。
768nobodyさん:02/03/21 00:30 ID:???
>nobodyおっさん
場に出てきたモノにカウンターかます以外のこともやってみれっての。
769nobodyさん:02/03/21 00:33 ID:???
>>764
2-3年前のサーバと、今のサーバでは、CPUやメモリやHDDの回転数なんて言った
処理系のスペックは比較にならないくらいあがってるよ。
だから無茶な処理して良いと言うことではないけど、ね。
問題は、先方がコーディングする人間に支払っているコストと、与えている開発日数、
そして、要求している仕様ですべて決まると思うよ。
770nobodyおっさん:02/03/21 00:49 ID:???
>768
761に非難するのは筋違い とありますが、わたしがはじめに書いたいくつかの
疑問点は非難しようというのではなくて助言のつもりで書いただけです。
この助言を書いた途端にどなたかがいきなりつっかかってきた上に非難される
のはこちらも困ります。

760に絶対な解答をとありますが、メールアドレスには[]付きのIPアドレス
を含むなどの予想外の形態のもの等もありますので不可能といっていいでしょう。
「Perlメモ」にも非常に長い正規表現が書かれていますが、これも絶対ではない
と書かれています。特殊な形態はマッチさせない条件でなら簡単に書けると思う
のですが、絶対な解答ということなので遠慮しておきます。
771nobodyさん:02/03/21 00:52 ID:???
>770
初心者スレではそういう説明が重要だよ。
それがわからない人が多いんだから。
なにかを否定する場合はきちんと説明もつけましょうね。
そうすればみんながハッピーになれる。
772nobodyさん:02/03/21 01:51 ID:KirJ6q/U
>>767
やはりそうですよね。過去レス随時削除するような掲示板くらいしか
作ったことなかったもので、そんなでかいのは検討も付かなかったのです。
>>769
おっしゃる通りです。俺みたいな素人に安く頼むんだから我慢しろという
姿勢で行きます。ただ、コストはそうですが、開発日数の方はちゃんとした
DBシステム覚えた方が早くて楽チンのような予感もするので、次の仕事が入るまでに
覚えることにします。

ありがとうございました。
773nobodyさん:02/03/21 02:15 ID:???
>>750
正規表現はそれで合ってるよ。(意図したいことは分かる。)
漏れも、簡単なチェックならそう書く。

んで、>>751の指摘の要点は
} elsif ($email =~ /^[^@]+@[^.]+\..+/) {
じゃなくて、
} elsif ($email =~ /^[^@]+@[^.]+\..+/) {
ってしろってことだけど、これでダメだったの?

print "<H5>[$email]は不正なメールアドレスです</H5><br>";
に書き換えてみて、うまく行かない時の表示キボン。
774773:02/03/21 02:17 ID:???
>>773
ミスった。
「} elsif ($email =~ /^[^@]+@[^.]+\..+/) {
じゃなくて
} elsif ($email !~ /^[^@]+@[^.]+\..+/) {
ってしろってことだけど、これでダメだったの? 」
でした。
775nobodyおっさん:02/03/21 02:40 ID:???
>774
また責められそうですが、助言として書いておきます。
762さんも「議論によって導き出され、より理解力が深まる」という認識ですので。

ユーザIDにドットを含んでいてもマッチします。
アットマークの後にアットマークがきてもマッチします。
末尾は何にでもマッチします。
776774:02/03/21 03:43 ID:???
>>775
もちろん承知。助言さんきゅ。

ということで、いい加減な文字をemail欄に書いて書き込もうとする奴を
排除する目的じゃなくて、正しいメールアドレスしか受けつけないように
したいという目的の場合は、正規表現を改良するのもいいかも>>750
777nobodyおっさん:02/03/21 04:00 ID:???
メールアドレスのパターンにマッチさせるには、まずメールアドレスの基本形式
を知ることからはじめたほうがいいと思う。(特殊形式は除く前提で)

ということで、まずはメールアドレスのかんたんな構成を書いておきます。

[メールユーザID]@[メールサーバドメイン名]
778774:02/03/21 04:15 ID:???
>>777
あう?
779nobodyおっさん:02/03/21 04:23 ID:???
[メールユーザID] についてはほとんどのメールサーバがUnix系ということ
を考えると、だいたい文字数は4〜10が妥当な線ダロウ。
文字の種類としてはなんといっても[@.]の2種類は含まないということで
[^@.]が考えられる訳だが、普通は[a-zA-Z0-9_-]あたりが使われる場合がほとんど
ということからエスケープシーケンスを使って表すと[\w-]と考えられる。
780nobodyおっさん:02/03/21 04:33 ID:???
[メールユーザID] の文字数の点で補足ダガ、以前に3文字(3バイト)というの
を見たことあるから余裕をもって3〜15と考えるのもいいネー。
つまり前段から /^[\w-]{3,15}@ の部分までは正規表現は決まったことになる。
781nobodyおっさん:02/03/21 05:12 ID:???
っと、チョットごたくを並べ過ぎたようなので今日はここで終わりとしよう。
762さんが言うようにいきなり最後まで書いてしまうのはチョットですぎた
行為というものです。考える余地を与えることも勉強になるものです。

それはそうとして、「正規表現道場」っていつのまにかなくなったのかナ?
あればそっちにメアドの正規表現ぐらいのってるだろうに。閑古鳥が鳴いてた
ようだから無理もないかー。
782nobodyさん:02/03/21 05:26 ID:???
>781
まだいきてるみたい。
http://pc.2ch.net/test/read.cgi/php/996105815/l50
783nobodyおっさん:02/03/21 05:38 ID:???
>782
電球
784nobodyさん:02/03/21 07:03 ID:???
WindowsでPerlを使う方法を、猿でも厨房でも
わかりやすく記載しているサイトってありますか?
ActivePerl入れてもなんか上手くいかなくて...
785親切紳:02/03/21 07:18 ID:???
>>784
インストールはできたんだね。
じゃあ、コマンドプロンプト開いて
perl test.pl
とか入力すればtest.plが実行されるよ。
786nobodyさん:02/03/21 07:29 ID:???
>nobodyオッサン
大口叩いてもその解答じゃ結局>>754より役に立たんな。(藁
>>763の言うとおりそれならモジュール使ってついでに送信テストまでするほうが速い。
まともに解答する気ないんなら解答者につっかかるなや。迷惑。

>>784
http://www5a.biglobe.ne.jp/~n_rieko/
787nobodyさん:02/03/21 07:46 ID:p3ZJIC7X
Perlメモ メールアドレスの正規表現
http://www.din.or.jp/~ohzaki/perl.htm#Mail
788nobodyさん:02/03/21 09:40 ID:???
>770
>この助言を書いた途端にどなたかがいきなりつっかかってきた上に非難されるのはこちらも困ります。

>生半可な知識だったら書かないほうがいいということを言いたかっただけ。
>できもしないのに嘘をはずかしげもなく語るほうがよっぽど迷惑なのでは?

がホンネなんだろ?(藁
789nobodyさん:02/03/21 09:42 ID:???
>779
[\w-]は[\w\-]じゃなくていいの?
790nobodyさん:02/03/21 10:14 ID:???
>>779
>生半可な知識だったら書かないほうがいいということを言いたかっただけ。
>できもしないのに嘘をはずかしげもなく語るほうがよっぽど迷惑なのでは?
んな事書くんだったら、http://www.puni.net/~mimori/rfc/rfc2822.txt
でも見てからスペック決めろよ。
791nobodyさん:02/03/21 11:40 ID:???
あっ ohzaki氏の「Perlメモ メールアドレスの正規表現」にバグ発見。
local-part = dot-atom / quoted-string / obs-local-part
だから
$word = qq<(?:$atom|$quoted_str)>;
$local_part = qq<$word$X(?:$Period$X$word$X)*>;
では駄目。
792nobodyさん:02/03/21 12:03 ID:???
すごい初心者で悪いんですけど、
PerlってCGI以外で何かに使います?
793nobodyさん:02/03/21 12:07 ID:???
ハッシュアクセスでさ、
$_{manco}
と、するべきか、
$_{'manco'}
どっちだ?
794nobodyさん:02/03/21 12:14 ID:???
>>792
MakeFile とか、シェルスクリプト書くの面倒なときとか、
テキスト処理とか。
795nobodyさん:02/03/21 12:14 ID:???
>>792
元々レポート作成言語。
そのため文字列操作が異様に発展。
CGI使いからはマイナーだがレポートのテンプレートを指定する機能も。

と、言うか、

Perlってレポート作成以外で何に使います?
CGIとかです。

が正しい。
796nobodyさん:02/03/21 12:15 ID:???
>>793
アフォか。囲め。
797nobodyさん:02/03/21 12:15 ID:???
>792
自分がよく作るのはなんちゃらコンバータとかかなぁ。
HTMLから,ある規則に従ってリンク抜き出したりとか。

>793
どっちも変わらないみたいなので,私は短い前者を使う。
798nobodyさん:02/03/21 12:19 ID:???
>792
レポート処理とか。
おれはチャットログの整理とかもしてる。
複数のログから特定のキーワードを探したりするときも手軽で便利。
799nobodyさん:02/03/21 12:23 ID:???
>793
2バイト文字列指定してる場合は囲んだほうがいいよ。多分ね。
800nobodyさん:02/03/21 12:29 ID:???
>799
自己レス。
推測だが変数名に使えない文字の場合は囲まないとエラーが出る。
ただし変数名に使える文字なら不要。

例。$ENV{HTTP_HOST} と$Rom{"坂田@アホ"}。
801nobodyさん:02/03/21 13:51 ID:???
>>793
>>800見たいなエラーがでる場合ってのが存在するから囲め。
統一性が無いとウザイから。
802nobodyさん:02/03/21 14:09 ID:???
こういう事したい。

sub manco
{
 print "sage\n" ;
}

$a = manco ;
$a() ;

なんか解決ないすかね?
803nobodyさん:02/03/21 14:15 ID:???
>802
意味ねー(w
おとなしく&manco;しろ。
804nobodyさん:02/03/21 14:33 ID:???
テーブルジャンプしたいの、

$a[ i ]() ;

こんな感じで
805nobodyさん:02/03/21 14:34 ID:???
>802
リファレンス使ってこんな感じかな
$a = \&manco ;
&$a() ;
806nobodyさん:02/03/21 14:36 ID:???
>802
$a = "print";
&{$a};
sub print {
print qq(<hr>ok!<hr>);
}
とりあえずこれで動いた。

>803
if elsif文を並べてサブルーチンに飛ばすような時とかに便利かも。
807nobodyさん:02/03/21 14:53 ID:???
>>806
if elsifを並べるのはあんまり良くないでしょ。
ハッシュに入れたサブルーチン名(もしくはリファレンス)
をコールするってことでどうかね>適用例
808792:02/03/21 14:53 ID:???
>>794>>795>>797>>798
回答ありがとうございました。
レポート処理のソース書いて、実行はMS-DOSからやるんですか?
CGIしか作ったことないんで、少し気になります。
809nobodyさん:02/03/21 15:00 ID:???
>>808
昔は、MS-DOSからやってた。
最近はUNIXからが便利なので、そっちでやってる。
810nobodyさん:02/03/21 15:01 ID:???
$a[ 0 ] = \&manco ;
$b = $a[ 0 ] ;
&$b() ;

これ、いいね、
でも、

$a[ 0 ] = \&manco ;
&$a[ 0 ]() ;

これだと駄目ね
811nobodyさん:02/03/21 15:03 ID:???
>>803
&manco;
なんて、レスキューやKENTみたいなことやってんじゃねーよ。
それじゃ、プロトタイプのチェックしねーだろ。

>>806
man perlref
man perldub
組み込み関数とユーザサブルーチンの区別つけれ。

ユーザ定義ハンドラを許すようなオブジェクトなら必須。
812nobodyさん:02/03/21 15:03 ID:???
>807
そうだろね。LUTみたいな考え方だね。

>808
CGI以外の用途に使うなら「Perlを始めよう」というソフトがおすすめ。
ソースを書いて直接実行したりできる。
813803:02/03/21 15:05 ID:???
>811
詳しく解説きぼん。
814792:02/03/21 15:07 ID:???
>>809>>812
ありがとうございました。
参考になりました。

このへんの住人かなりスキルが高いですね。
815nobodyさん:02/03/21 15:10 ID:???
>814
皮肉にしか聞こえん・・・
816nobodyさん:02/03/21 15:51 ID:???
>>808
元々はUNIXさんの言語。
817nobodyさん:02/03/21 15:59 ID:???
>>803
どこでエラーになるか確かめれ。
固いコードを書きたいんだったらプロトタイプ使え。
sub manco($)
{
print "$_[0]\n";
}

&manco();
manco();
818nobodyさん:02/03/21 16:35 ID:7Dyo1H3n
htmlについての質問なのですが、
フレームで上と下に分割して下のフレーム内にdocファイルへのリンクを張ったのですが、
docファイルへのリンクをクリックするとフリーズして強制終了してしまうのですが
どうすれば正しく表示できるのでしょうか。
ちなみにOSはxp proです。
819nobodyさん:02/03/21 16:37 ID:???
>818
Web製作板かWin板で聞くべし。
Perlと関係ないじゃない。
8201234:02/03/21 16:41 ID:???
正規表現についてききたいんですがここじゃだめですか?
>>1」と「>>1-100」を両方かけるやりかたがしりたいんですが
821818:02/03/21 16:43 ID:7Dyo1H3n
すいませんはやとちりました。
822nobodyさん:02/03/21 16:50 ID:???
>>(\d\-)*(\d+)
823やっぱり:02/03/21 16:51 ID:???
>>(\d\+-)?(\d+)
824間違えた:02/03/21 16:51 ID:???
>>(\d+\-)?(\d+)
8251234:02/03/21 16:54 ID:???
できますた>>824さんありがとうごだいます
826nobodyさん:02/03/21 18:10 ID:TYcdRNHS
質問っす。
cgiで、同じディレクトリにある他のファイルのパーミッションを変更したいんだけど、
chmodを使ってもなぜか変更できないです。
 chmod 0777,"./abc.dat";
こんな風にしてるんですが、何かやり方がいけないの?
827nobodyさん:02/03/21 18:25 ID:???
>826
>>24-37とかは関係ないかな?
828nobodyさん:02/03/21 20:00 ID:???
>>826
っていうかcgiの実行ユーザが問題。
829nobodyさん:02/03/21 21:22 ID:???
>>810
今更ですまんが。
$a[ 0 ] = \&manco ;
$a[ 0 ]->() ;
で行くでしょ。
830nobodyさん:02/03/21 21:58 ID:???
あのさ、
$manco->{'kuri'}=1;
$manco->{'torisu'}=1;
print Dumper($manco);
ってすると、

$VAR1 = {
  'kuri' => 1,
  'torisu' => 1
};

こんな感じで表示されんだけど、
$VAR1ってなるんだけど、
これに、名前付けられないの?
831nobodyおっさん:02/03/21 22:06 ID:???
>824
こう書いたほうが尚よいダロウ!

$_= '>>1-100';
print />>(\d+)(-\d+)?/ ? $2 ? "$1$2" : $1 : "unmatched";
832nobodyさん:02/03/21 22:09 ID:???
>>830
何が不満?第一引数がそうだって親切に・・・。
833nobodyさん:02/03/21 22:24 ID:???
>>830
use Data::Dumper;

%hash = ('A' => 'apple', 'B' => 'buffalo');

$d = Data::Dumper->new([\%hash], ['hash']);

print $d->Dump;
834830:02/03/21 22:27 ID:???
>>832
あんな、

use XML::Simple;
$manco->{'kuri'}=1;
$manco->{'torisu'}=1;
print XMLout( $manco ) ;

これ動かすと

<opt kuri="1" torisu="1" />

って表示されんだけど、ノード名前が、optになっちゃうのね、
でな、無名のハッシュだっけ?に名前付けたら、変えられんじゃね
っと思ったンヨ
はずしとりすかね?
835830:02/03/21 22:33 ID:???
>>833

ども、参考なたよ、
でも、834で書いたのは、おもっきり外してたぁ〜
836830:02/03/21 22:43 ID:???
わがったわがった。
こうだった。

my $xs = new XML::Simple( rootname => 'mesu' ) ;
$manco->{'kuri'}=1;
$manco->{'torisu'}=1;
print Dumper($manco);
print $xs->XMLout($manco);

$VAR1 = {
'kuri' => 1,
'torisu' => 1
};

<mesu kuri="1" torisu="1" />
837830:02/03/21 22:48 ID:???
また、質問なんだけど、
漏れさ、PerlのCGIって、
WEB FORUMっていう掲示板をいじる事から
始まったんだけどね、
なんか、記述スタイルが古いつ〜かさ、
もっといま風な、オブジェクト指向っぽくやりたいな、
なんて思ってるんだけど、
これは参考になるぞ!、っていうソースどっかに
転がってないすかね、よろすく
838nobodyさん:02/03/21 23:01 ID:???
このスレの上のほうで$| = 1;をメシ食いながらウンコと表現したものだが
いっておくが,おれは >830とは別人だぞ・・・
839nobodyさん:02/03/21 23:08 ID:???
リンク集を作ってるんですが、サイト名やURLに加えて、
(TOPページの)最新更新日を表示させたいと思っています。
リンク先のページの最新更新日を取得するような方法はあるのでしょうか。
ご指南の程、よろしくお願いします。

なにぶんPerlは始めたばかりなので、ムズかしい処理は理解できないかも
しれないので、なにをどこらへんを勉強すれば理解できるようになるのか
教えていただけるとありがたいです。
840nobodyさん:02/03/21 23:10 ID:???
ここで、ソースを記述するときは、変数とか、関数に
sub mancoとか、
$unco
もしくは、それに類似する単語で
書かないと、誰も答えてくれねぇ〜ぞ、ゴウラァ!!!
841nobodyさん:02/03/21 23:11 ID:???
>>840
取りあえず寝ろ、な。
842nobodyさん:02/03/21 23:11 ID:???
>>839
おまえさ、北海道しゅっしんだろ、な、図星だろ、
わかんだ、おれ。
843nobodyさん:02/03/21 23:12 ID:???
>839
LWPモジュールを使うと簡単に更新時刻を取得できる。
使い方は>>4あたり。
844839:02/03/21 23:15 ID:???
>>842
生まれも育ちも兵庫です。北海道・・・・はて・・・

>>843
ありがとうございます。
さっそく見てみます。
845839:02/03/21 23:25 ID:???
>>843
「河馬屋二千年堂's Page」さんを見てみましたが、すみません。
まったく理解できませんでした(涙
「モジュールとはなにか、どうやって使うのか」から勉強し直します。
せっかく教えていただいたのに、すみませんでした。
846nobodyさん:02/03/21 23:33 ID:???
>>839
アンテナ系のスクリプトを改造してみたら?
基本的な対象は日記だけど、別に普通のリンク集に使ってもいいだろ。
「アンテナ なつみかん」とかで検索してみ。

>「モジュールとはなにか、どうやって使うのか」から勉強し直します。
とか言うレベルだと改造は厳しいと思うが。
847nobodyさん:02/03/21 23:35 ID:???
>>846
べつにモジュール万能主義でもないだろうよ。
848839:02/03/21 23:38 ID:???
>>846
やっぱりレベル低いのに、高望みしすぎなんですかね・・・。
とりあえずダウンロードしてソースをじっくり見てみます。
ありがとうございました。
849nobodyさん?:02/03/21 23:44 ID:???
>>847
>べつにモジュール万能主義でもないだろうよ。
846さんはモジュールを勧めているわけではなく、モジュールというものを
知らないレベルの人には、改造は難しいかもしれない、
という懸念をの述べただけじゃないかな。煽りネタだったらスマソ。
850nobodyさん:02/03/21 23:50 ID:???
>>839
perlは、本読まないと理解は難しいよ。
他の言語と違って、他人のperlのソース読むのは、
時間の無駄のような気がする。(解説がついてるソース
とかならいいけど)
8511234:02/03/21 23:52 ID:di2RpoJq
>>831
ありがとうございます。
ところでこれではだめだということに気づきました。
>>1
>>1-
>>1-20
これ全部にヒットしないといけなかったんです。
書いてて気づきました。
すみませんもう一度おしえてもらえませんか?
852nobodyさん:02/03/21 23:54 ID:???
>>851
>>831を元に応用できないってことは、perlの正規表現を勉強してないって
ことだと思うんだけど、どうなの?
8531234:02/03/21 23:54 ID:di2RpoJq
ってここも
>>2-
でヒットしてないのかな?
8541234:02/03/21 23:56 ID:di2RpoJq
(\d+)(-)?(\d+)?
こうっすね
855nobodyさん:02/03/21 23:56 ID:???
>>854
それだ!
856nobodyさん:02/03/21 23:57 ID:???
>>851
こんなんじゃダメ?
>>(\d+)(-\d*)?
857nobodyさん:02/03/21 23:58 ID:CC60PDt4
Perlで、C++の"ifstream f()"のようにファイルを読みこむ方法を教えてください。
858nobodyおっさん:02/03/22 00:00 ID:???
>851
ヒットするんじゃないの?
>>1- は >>1 と同じとみなすんじゃダメかい?
859nobodyさん:02/03/22 00:01 ID:???
>>857
ファイルをオープンしたあと、ファイルハンドル使いなさい。
860nobodyさん:02/03/22 00:27 ID:???
ありがと。
ファイルハンドルで索引を見たら書いてあった。
8611234:02/03/22 01:33 ID:PNDxe/pL
>>858
>>1-は>>1以降のもの全部という意味になるらしいですここ
862839:02/03/22 02:05 ID:???
いろいろ調べてみました。
テストではうまく動いてる気もするんですが、これでよろしいのでしょうか。


use LWP::Simple;
($content_type, $document_length, $modified_time, $expires, $server) = head "http://www.aaa.ne.jp/test.html";
($sec, $min, $hour, $day, $mon, $year) = localtime($modified_time);
$year += 1900;
$mon ++;
print "$year/$mon/$day/$hour";
863nobodyさん:02/03/22 02:49 ID:???
>>839
それでおけ。
問題はHEADでちゃんと更新時刻を取得できないサイトが多いこと。
864839:02/03/22 03:18 ID:???
>>863
はい、その通りでした・・・・。
更新時刻が取得できないサイトがいくつかありました。
私のLWPの使い方が間違ってるのでしょうか。
それとももっと良い方法があるのでしょうか。今一度、探してみます。
またヒントを与えてもらえれば幸いです。
865nobodyさん:02/03/22 03:32 ID:???
>>864
(貴方のマシンがWinなら)WWCとかWWDとかのメジャーな更新チェッカ落として
みると参考になると思うよ。ヘッダも表示されるし。
866nobodyおっさん:02/03/22 08:23 ID:???
>861
こんな感じかい?

$_= '>>1-100';
if ( />>(\d+)((-)(\d*))?/ ){
 if    ( $4 ){ print "$1$2"; }  # >>n-n
 elsif ( $3 ){ print "$1$3"; }  # >>n-
 else        { print "$1"  ; }  # >>n
}
867nobodyさん:02/03/22 08:35 ID:???
.htaccessや.htpasswdファイルって直接url指定されても
見られないようにする方法ってどうするんですか?

868nobodyさん:02/03/22 08:38 ID:???
>>869
相手サーバの問題。
更新時刻がとれなかったら長さや内容を前回チェックのと比べるとか。
いくつかのサーバは更新時刻いいかげんに返すので
そのあたりは試行錯誤で。

>867
それらのファイルにアクセス制限をかける。
近ごろの apacheは標準でそういう設定になってる。
869867:02/03/22 08:46 ID:???
>>868
そーなんですか!
ちなみに私はan httpd使用してるんですけど
これでの方法はないですかね?
870出来の悪い子:02/03/22 08:54 ID:???
なんだか、質問の仕方が悪くて皆さんに迷惑をかけてしまったようです
申し訳ありません m(_ _)m

とりあえず実験してみて
>>774さんのやり方で大丈夫でした

= じゃなくて! ってことですね
もっと頭を解して考えるようにします。

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

 

871nobodyさん:02/03/22 09:49 ID:???
>>866
なぜprintするのかわからないのだけれど,それは効率悪いんじゃないか?

↓こうできるよ.
/>>(\d+(?:-\d*)?)/ and print $1;
872nobodyおっさん:02/03/22 10:28 ID:???
>871
print してるのは、だた結果が正しいかを確認するため。
確かに、後読みだとコンパクトにまとめて書けるのでよりいいと思います。
ただし、やりたいコーディングが
>>n
>>n-
>>n-n
の3パターンへのリンクを張るだけならいいのですが、もしかしたら
>n- の場合など、nが1なら100までとかに制御する余地を残す意味で敢えて
わけているだけです。
873nobodyおっさん:02/03/22 10:48 ID:???
補足:
1つにまとめるなら以下のようによりコンパクトにも書けます。
/>>(\d+(-\d*)?)/
874縞栗鼠(シマリス)の親方:02/03/22 10:54 ID:pJ6rZ2it
吉祥寺にある大検・大学受験予備校の中央高等学院
ここは、完全に狂ってる。
授業料は一年分一括前払いなので、
金が入れば、生徒は要らない
金を振り込んだら、何とかその生徒を辞めさせようと
講師どもが、あの手、この手でイヤガラセをしてきますね。
セクハラはもちろん、脈絡の無い罵倒は日常茶飯だね。
酒臭い講師もいるし・・・ 人生の最果て中央高等学院
学歴詐称、経歴詐称、合格実績詐称、デタラメ授業、
http://www.chuo-school.ac/
http://chs-f.com/index.html 中央高等学院福岡校
司法浪人の田中校長は ↑ また司法試験に落ちましたが
HP上では下らない見栄を張っています
875839:02/03/22 12:08 ID:???
>>869
長さっていうのはファイルサイズのことでしょうか。
そんなこともできるんですか・・・。
LWPモジュールについてもう少し勉強してみます。
876nobodyさん:02/03/22 12:22 ID:???
>873
おっさんおっさん、いくらコンパクトでも効率的には>871のほうが上だぞ。
つーか(?:regexp)はNon-capturing groupingsだろ。何でここで後読みなんだよ(w

学生はperldocでも読んで勉強しとけ。
877nobodyさん:02/03/22 12:26 ID:???
>>875
長さってのは、
use LWP::Simple;
$content = get ("http://www.2ch.net/");
$length = length($content);
と言うことだと思う。868じゃないから知らんけど。
878nobodyさん:02/03/22 17:23 ID:2hKQObXw
質問です。
いま、仕事で掲示板の修正をやってるんですが、
特殊文字を削れってんで、メッセージに対して、

$value =~ s/&/&/g;
$value =~ s/\"/"/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/\|/¦/g;
$value =~ s/\[/[/g;
$value =~ s/\]/]/g;
$value =~ s/\\/¥/g;

みたいなことをやってます。
そしたら、
「申し込み」が「・yen;し込み」みたいな感じで思いっきり化けちゃいます。
どうすれば文字化けしないで、特殊文字の変換ができますか?
879nobodyさん:02/03/22 17:26 ID:2hKQObXw
変換されてしまった。

$value =~ s/&/&amp;/g;
$value =~ s/\"/&quot;/g;
$value =~ s/</&lt;/g;
$value =~ s/>/&gt;/g;
$value =~ s/\|/&#166;/g;
$value =~ s/\[/&#91;/g;
$value =~ s/\]/&#93;/g;
$value =~ s/\\/&yen;/g;

こっちが正しいです。
ちなみに「&」は実際は半角文字です。
880nobodyさん:02/03/22 17:31 ID:???
意味のない変換の多いこと・・・
Shift-JISだったらモロ化けるね。
上の4つだけで十分。
どうしても変換したいならEUCにすれば?
881nobodyさん:02/03/22 17:35 ID:2hKQObXw
>>880

え?意味ないんですか?
某雑誌にこれらの特殊文字は削るか置換しろ!
って書いてあるんですよ。
で、その通りにしてほしいってことで、修正依頼が来たんですよ・・・。
882868:02/03/22 17:36 ID:???
>>875
ごめんレス番間違えてたね。
>>862で $document_lengthに長さが入ってるみたいなので
それも見たらどうかってこと。
883nobodyさん:02/03/22 17:37 ID:???
>>879
変換結果に「yen」って出てるので分かるかと思うけど、
「申」のSJIS2バイト目が「\」なのです。
なので、2バイト文字をうまく扱ってくれる jperl を使うってのが、
とりあえずよいのではないかと。
884nobodyさん:02/03/22 17:38 ID:???
Shift-JISの2バイト目に\x40-\x7Eも使われているので、
(もしShift-JISだったら)漢字の一部が変換されてることになる。
わかりますか?
885nobodyさん:02/03/22 17:39 ID:???
そんなことより制御文字削除してないんちゃうんかと・・・(以下略)
886nobodyさん:02/03/22 17:42 ID:2hKQObXw
>>883
環境を変えるのはきびしいです。

>>884
意味はわかります。
それでは、文字コードがSJISならばどうしようもないってことですかね?
880さんが言ってるみたいに、とりあえずEUCに変換しとけってことですか?
887nobodyさん:02/03/22 17:45 ID:???
>>885
制御文字?
0x0〜0x19 ぐらいのやつ?
特殊文字の変換とかって、どのくらいのことやるのが普通なんですか?
ここ見ろ! ってとことかあります?
888nobodyさん:02/03/22 17:46 ID:???
IBM的なバカ変換だな・・・ボソ
889878:02/03/22 17:53 ID:???
とりあえず、文字コードをEUCに変換して処理してみます。
890nobodyさん:02/03/22 17:54 ID:???
>>881
某雑誌の名前教えてください。なんかその雑誌読んでみたい。
891878:02/03/22 18:03 ID:???
nikkei オープンシステム 2001/12 P118 からの特集です。
892nobodyさん:02/03/22 18:11 ID:???
>>891
Thank you.
893nobodyさん:02/03/22 19:10 ID:???
すいません、掲示板などを作る時、ユーザに変数の内容を
決めて貰い後で参照しますが、その際「定義されていない or
空か無効」と「正常」を区別するスマートなやり方ありませんか?

# ユーザの設定
package user;
$file = 'bbs.cgi';

# プログラム
package main;
my $file = (defined($user::file) && $user::file)
 ? $user::file : 'bbs.cgi';

これだと何度も $user::file をタイプしないといけないので
なんか無駄に文が長くなってしまうような気がします。
なんとなく perl -w で文句を言われるのも嫌なので
my $file = $user::file || 'bbs.cgi';
のような記述も避けたいのですが・・・・。
894nobodyさん:02/03/22 19:18 ID:???
>>881
話し終わってしまったみたいですが、エスケープする文字は
キチンと用途別に考えた方が良い場合もあると思いますよ。

そのまま or HTML として出力する場合や、コマンドの引数 or
ファイル名として使用する場合などです。
釈迦に説法ならすんまそん。
895nobodyさん:02/03/22 22:18 ID:???
>893
何度もタイプするのが嫌なのと perl -w で文句言われるのが嫌なのは相反する
ことなのでどちらかにせざるを得ないのでは?
それとも以下のようにしてみる?恐らくよけい嫌だとは思うが・・・・

my $user_file='user::file';
my $file = $$user_file || 'bbs.cgi';
896895:02/03/22 22:45 ID:???
もう1つあった。
変数 $file をいっそのこと使わないで
my $user_file= 'user::file';
$$user_file ||= 'bbs.cgi';
897nobodyさん:02/03/22 23:14 ID:???
>>893
ユーザ定義の変数をインポートする部分を

no warnings;
my $file = (defined($user::file) && $user::file)
 ? $user::file : 'bbs.cgi';
....
use warnings;

面倒は嫌いだ。(w
898839:02/03/22 23:15 ID:???
>>877
>use LWP::Simple;
>$content = get ("http://www.2ch.net/");
>$length = length($content);
では全く応答なしです。

>>882
$document_lengthは空でした。ナニも入っていませんでした。


私がやろうとしていることは不可能なことなんですかね・・・。
899nobodyさん:02/03/22 23:19 ID:???
>>898
2ちゃんのサーバはagentみて蹴っているかも知れない。
900839:02/03/22 23:20 ID:???
>>899
いえ、実際はジオの友人のアドレスを入れてました。
失礼しました。
901nobodyさん:02/03/22 23:35 ID:???
>>900
ジオもagent見て蹴っているかも知れない。
わかるだろ?
902nobodyさん:02/03/22 23:37 ID:???
Agentていうか、REQUEST-HEADERね。正式名称知らないけど。

画像置き場とかに使ってくれるな機能があったんじゃない?>ジオ
その関係とかはどうなの?
903839:02/03/22 23:40 ID:???
>>901 >>902
agent・・・REQUEST-HEADER・・・・すみません、どちらもわかりません。
ただ、901さんの言い方からすると、なにか解決法があるということですね。
探してみます! ヒントありがとうございます!
904ヤクザ:02/03/22 23:51 ID:???
>>895-897
ひぃぃぃ・・・・すいませんでした。面倒でも普通に書きます (笑い

いや、自分は本を買わず web で勉強していますので、
入門サイトには中々紹介されない $file |= 'hoge'; みたいな
独特の方法なんかあるのかなぁ・・・とか思ったのですよ。

記述&凡ミスを避ける為の出力に振り回されるのも情けないですね。
飽く迄デバッグ用のメッセージと割り切って -w と付き合う事にします。
有難う御座いますた。
905839:02/03/23 01:02 ID:???
use LWP::UserAgent から入ればいいんでしょうか
とりあえずなんとか上辺だけでもそれっぽくなるように
いろいろ探してます。
もし間違ってたら、申し訳ありませんが、教えてください。
別のソレっぽいのを探しに行きますから。
906IKeJI:02/03/23 05:56 ID:5i8LX5eB
質問。
Perlで、$aに'ー'という文字を含むSJIS文字列が入っているときに、
$a =~ /$b/
という文を実行すると落ちるのですがなぜでしょう?
907nobodyさん:02/03/23 06:14 ID:???
>906
エラーメッセージとかは無いの?
あと環境も書いて。
908nobodyさん:02/03/23 06:43 ID:???
>>906
$bに'ー'が入っている場合だよね?
SJISの2byte文字の2バイト目は'@'から'~'まで使われてしまうので、
'['などが問題を起こしがち。
応急処置としては\Qと\Eで囲むことかな。(詳しくはPerlメモを参照)

[\Q]これ以降に続くすべての非英数文字の前に逆スラッシュを挿入
[\E]\Q,\U,\Lの効果を終了する
909nobodyさん:02/03/23 06:53 ID:???
>905
geocitiesは User-Agent見てないみたい。
use LWP::Simple;
getprint 'http://www.geocities.co.jp/';
だけでできたのでなにか別の所に問題があるんじゃないかな?
プロクシ通さないとインターネットにアクセスできない環境からやってるとか。
910IKeJI:02/03/23 08:19 ID:iMj9R1av
>>907
CGIで使っています、FreeBSDなど色々なサーバーで同じような症状が出ています。

>>908
ありがとうございました。
解決しました。
911nobodyさん:02/03/23 08:57 ID:???
>>904
すまん、中身間違えた。

no warnings;
my $file = $user::file || 'bbs.cgi';
....
use warnings;
これで逝けるだろ。
912nobodyさん:02/03/23 10:18 ID:???
画像アプローダを作るためのスクリプトってありますか?
913nobodyさん:02/03/23 10:21 ID:???
>>912
ここは自分でスクリプトを組む人が質問に来るスレですよん。
>>1-10あたりの関連スレをどうぞ。
914nobodyさん:02/03/23 10:23 ID:???
ずるぼんのヤツでええやろ。
http://zurubon.strange-x.com/uploader/

自作するならモジュールとか公開ライブラリ使え。
915nobodyさん:02/03/23 11:43 ID:???
shtmlに埋め込んだ掲示板が書き込んだ後、cgiに移動するんだけど
埋め込みしてあるshtmlの所に戻したいんだけど、どうやるの?
916nobodyさん:02/03/23 12:17 ID:???
正規表現のことでお聞きしたいのですが、
ひらがな、カタカナ、半角英字、全角英字は
[ぁ-ん]みたいな感じで、使用できると参考書に書いてあったんですが、
半角数字や全角数字も
[0-9]みたいな感じで使用できるのでしょうか?
917nobodyさん:02/03/23 13:17 ID:???
>>915
print "Location: http://ほげほげ.shtml\n\n";

>>916
質問の答え
まず自分で試せ。
いちいち人に聞かなきゃ判らない内容か?

俺の質問
ところでどんな参考書を読んだのですか?
918839:02/03/23 15:35 ID:???
>>909
特にプロキシが必要な環境ではありません。
use LWP::Simple;
getprint 'http://www.geocities.co.jp/';
で内容は表示されます。
でも私の欲しいのは最終更新日でして、0が返されてしまうのです・・・。
919nobodyさん:02/03/23 17:47 ID:???
>>918
telnet www.geocities.co.jp 80
GET / HTTP/1.0
すると、
HTTP/1.1 200 OK
Date: Sat, 23 Mar 2002 08:41:52 GMT
Server: Y.G.Apache-SSLv3/1.3.9
Set-Cookie: Geoche=DX8gxX6cO000tucZycfSdO00ScRoAB; domain=.geocities.co.jp; path=/; expires=Mon, 22-Mar-04 08:41:52 GMT
Connection: close
Content-Type: text/html

<html>(以下略)
と返ってくるので、最終更新日は返さないみたいだね>geocities
920nobodyさん:02/03/23 19:12 ID:aOzStk5l
ローカルな環境で、ブラウザのテキストフィールドに文字を入力して、
perlを通して綺麗に整形したHTMLとして出力しようとしています。
入力用のhtmlを整形用スクリプトはできたのですが、その間のデータの受け渡しがうまくいきません。

サーバに自作cgiをアップロードして使用した経験はあるので、同じように

<form method="post" action="c:/zisaku.cgi">
<input type="submit" value="出力">

でデータを渡して、

print <<END
....
END

で表示できるだろうと思っていたのですが、submitボタンを押すとcgiのソースが表示されてしまいます。

無い頭をひねって cgi の一行目に「#!/perl」を付け加えたり、拡張子をcgiではなくplにしてみましたが
うまくいきません。

ActivePerlはインストール済みです。
どなたか解決方法が判る方、ご教授願います。



921839:02/03/23 19:14 ID:???
>>919
どうも、ありがとうございます。
てことは、最終更新日を得るのは不可能ということですか?
方法としては、前回内容を保存しておいて、今回内容と比較して
更新されているかどうかを得る、という方法が現実なんですかね???
922839:02/03/23 19:18 ID:???
>>920
自作CGIはローカルにあるんですよね?
私は、httpdを入れてつかってます。
ActivePerlだけでは、920さんと同じくCGIソースが表示されました。
素人なので原因も解決法もわかりませんが、
ムリなことなんだろうな、とおもいます。
923nobodyさん:02/03/23 19:21 ID:???
>>920
サーバーソフトウェア入れないとCGIは機能しませんよ。
http://www.st.rim.or.jp/~nakata/
http://www.apache.org/

それと
print <<END;
にしましょう。
924nobodyさん:02/03/23 20:39 ID:???
>>922,923
Anhttpedを導入した所うまくいきました。
ありがとうございました。

父親兼社長に、
「某システム社に頼んだら30万で見積もられたって?そんなの簡単だから一万円でやってやるyo!」
って大口叩いていたので、うまくいってほっとしております。
925nobodyさん:02/03/23 21:29 ID:bh9fdkhx
バグの効率よい見つけ方を教えてください。
926nobodyさん:02/03/23 21:38 ID:???
>>925
すべてのifを通るような条件を試す。
927nobodyさん:02/03/23 21:45 ID:???
PerlでSocketで通信するプログラムを作ったんだけど、
LAN内では、問題無く動くのだけど、
外から、だと繋がらない、
思い当たる事無いですか
動いてる環境は、Linuxっす。
928nobodyさん:02/03/23 21:46 ID:???
>>927
ファイアウォール。(x)inetd
929nobodyさん:02/03/23 21:52 ID:???
>>928
火壁は、IPマスカと、フィルターしかしてないから、
関係なくなかくない?
930nobodyさん:02/03/23 21:55 ID:???
アドレスが127.0.0.1のままだったり
931nobodyさん:02/03/23 22:00 ID:???
>>930
それは、ないっすよ。
932nobodyさん:02/03/23 22:04 ID:???
>>929
>IPマスカと、フィルターしか

これだけやってりゃ十分だ。
933nobodyさん:02/03/23 22:40 ID:???
>927
オマエのその価値のないソースを見ないとなんとも言えないZE!
オマエの説明不足からして接続できないのは納得できるZE!
934nobodyさん:02/03/23 23:03 ID:???
質問があります

CGIでHTMLを出力するとして
容量80KBのCGIファイル1つで出力するのと
requireで10KBのファイルを呼び出して20KBのCGIファイル(合計すると30KB)で
出力するのとではサーバーの負荷はどちらが軽いのでしょうか??

perlの勉強をはじめたばかりなんですがどうしてもわからなくて・・。
申し訳ないですがどなたか教えて頂けないでしょうか?
935839:02/03/23 23:34 ID:???
LWPでジオの最終更新日が取れなかったので、
取れない場合は、改行およびタグを外した本文を保存しておき、
次回アクセス時に今回のものと前回のものを比べて更新日を推測する、という
方式を取ることにしました。
>>862でLWPで更新日を取得できなかった場合は、
$doc = get URL;
$doc =~ s/\r\n//g;
$doc =~ s/\n//g;
$doc =~ s/<[^>]+>//g;
としています。
ところが、ジオではないあるページにて、前回と今回の$docが同じにも関わらず、
if(前回$doc ne 今回$doc)
に引っかかってしまうのです。他のサイト(ジオ)では問題ありませんでした。

if(前回$doc ne 今回$doc)という表現に問題があるのでしょうか???
936nobodyさん:02/03/23 23:51 ID:???
カウンタが回って数値が違うとかじゃねーの。

なぜ改行とタグ削って保存するのか疑問。
937839:02/03/23 23:56 ID:???
>>936
カウンタ画像を読みこまないためにタグを削除しました。
ローカルに落として目で確認しましたが、前回$docと今回$docの
内容は同じでした。

ログファイルの中身ですが、サイトごとに<>で区切り、サイトのURLや
最終更新日等を,で区切って保存しています。
open(IN,ログファイル); $log = <IN>; close(IN);
@log = split(/<>/,$log);
foreach $x (@log){・・・・

という感じですが、改行を外すさないとうまく動かないからです。
すみません、たぶん技術がない所為です。
938nobodyさん:02/03/23 23:59 ID:???
>934
便器マークとったら?
939839:02/03/24 00:02 ID:???
追記です。
すみません、2回のアクセスに1度の割合で、
順番に前回と今回の$docが同じでも
if(前回$doc ne 今回$doc)
に反応しているようです。
1アクセス目:反応なし
2アクセス目:LWPで取得できなかったAサイトが反応
3アクセス目:反応なし
4アクセス目:LWPで取得できなかったBサイトが反応(ジオ)



という感じでした。
もしif(前回$doc ne 今回$doc)が悪いのだとしたら、他に良い方法の
ヒントをなんとかよろしくお願いします。
940nobodyさん:02/03/24 00:10 ID:???
すいません、STDOUT 等はどうやって宣言するのですか?

#!/usr/local/bin/perl -Tw
use strict;
exit &func(STDOUT);
sub func {
 my $fh = shift;
 print $fh 'hello world.'."\n";
 return 0;
}

% ./sample.pl
Bareword "STDOUT" not allowed while "strict subs" in use at ./sample.pl line 3.
Execution of ./sample.pl aborted due to compilation errors.

なんとなく FAQ っぽいのですが、"use strict;" STDOUT で
ググってもそれらしいのが見つけられませんでした。
しかしこれ系のファイルハンドルは実行時に自動的に発生する筈ですし、
性質上初期化なんてできませんよね?
941nobodyさん:02/03/24 00:17 ID:???
*STDOUT, \*STDOUT, *STDOUT{IO}
942nobodyさん:02/03/24 00:18 ID:+OOAM91Z
use File::Sort qw(sort_file);
これはどういう意味なのでしょうか?
本を数冊読んだのですが説明がありませんでした…。

sort_file(...);
というふうに関数を使用しているのですが。
943nobodyさん:02/03/24 00:37 ID:???
File::Sort.pmのうちsort_fileメソッドだけ使用するという意味です。
944940:02/03/24 00:39 ID:???
>>941
速攻レス有難う御座います。*STDOUT で上手く行きました。
しかし、それって型グロブってやつですよね?
そうなると、なんか意味として回りくどくなってしまうような
気がしますが、こういう使い方はごく普通なのでしょうか・・・???
945942:02/03/24 01:40 ID:+OOAM91Z
>>943
レスありがとうございます^^
そうすることでメモリ消費を抑えたりするのでしょうか…。
946nobodyさん:02/03/24 01:42 ID:???
>>934
それは、トータルのスクリプト量が小さいほうがDISKアクセス負荷、
CPU負荷、共に軽いんじゃない?つまり、requireしたほうが軽そう。
どうしても知りたいなら、>>938の言うように、なんらかのベンチマーク
を取って、結果報告キボン。

でも、perl自体が起動する負荷に比べれば、
その程度の違いは無いのと同じだと思う。
947nobodyさん:02/03/24 01:45 ID:???
>>927
1.そのスクリプトを動かしたマシンにグローバルアドレスがついてない
2.ついてるんだけど、ファイヤーウォールの設定で遮断されてる
3.上記の問題はないんだけど、127.0.0.1 のみをlistenしている。
948nobodyさん:02/03/24 01:48 ID:???
>>939
「if(前回$doc ne 今回$doc)」以外の場所にバグがあるとしか
考えられない。
949839:02/03/24 02:00 ID:???
>>948
そうですか・・・・
それにしても if(前回$doc ne 今回$doc) に問題がないと
いうことがわかり、前進です! ありがとうございます。
とりあえずEUC(?)にして試してみます!
950nobodyさん:02/03/24 02:20 ID:???
>>945
実際に検証したわけではないので伝聞ですが読み込みが早いそうです。
今思いつくものでは
use Symbol 'gensym';
use Fcntl qw(:flock);
のようなケース。
951nobodyさん:02/03/24 22:03 ID:???
ん?
952nana.cgi:02/03/26 11:46 ID:???
#!/usr/binbin/perl -T
no strict;
use Asian::Pussy qw/:sexy :healthy/;
953nobodyさん:02/03/26 12:00 ID:pm1MjUop
Perl4で作ったBBSがIE以外で表示できません。
ナゼなのでしょうか。

1.NNの場合、Perlが出力したソースが表示されます。
2.Operaの場合はファイルダウンロードのダイアログが起動します。

IEでは問題ないんですけど
私がアフォだからっていう以外の理由を知りたいです。
お願いします。
954nobodyさん:02/03/26 12:01 ID:???
print "Content-type: text/html\n\n";
ってやってるあたりがおかしいから。
955953:02/03/26 12:22 ID:???
>>954
あたりって・・・見たところ良いみたいなんですが(涙。
こんな現象は良くあるんでしょうか?
956 ◆Googlexo :02/03/26 12:29 ID:???
>955
君の良いと正解の良いには違いがある可能性があります。
とりあえずソース晒してください。
957953:02/03/26 12:48 ID:???
>>956
その「あたり」でいいですか?
print<<END;
Content-type: text/html\n\n
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
958nobodyさん:02/03/26 12:52 ID:???
>957
それ以前にprintをしている可能性は?
959953:02/03/26 13:02 ID:???
>958
なさそうです。敢えて言えばサブルーチン名にPrintPageっていうのを使ってます。これは問題ないですよね。
960nobodyさん:02/03/26 13:09 ID:???
ヒアドキュメントの中に\n\nとか書いても解釈されるんだ。はじめて知った。
とりあえずCGIファイルの先頭あたりで
print "Content-type: text/html\n\n";
して様子を見てみるとよいかと。
961nobodyさん:02/03/26 13:13 ID:???
>960
ヒアドキュメントでも
print <<'END';
ってやったら解釈されないから注意。
シングルクォーテーションだと解釈されないのは同じだから。
でも、覚えておくと逆に便利な事もある。
メアドをプリントする時とか\入れなくて済むし。
962953:02/03/26 13:20 ID:???
>>960
>とりあえずCGIファイルの先頭あたりでprint "Content-type: text/html\n\n";
これで正常になりました。

やはり以前のステップに問題があるんだろうと思いますが
現象が解消したので、じっくりゆっくり調べます。
本当にありがとうございました。
963960:02/03/26 13:54 ID:???
>>961
今実験してみたらそうみたい。
さんくす。
>>953
とりあえずよかったねぇ。
がんばって調べろよー。
964超・超初心者:02/03/26 14:40 ID:6InRaAYk
どなたか助けて下さい!以下の2つのプログラムの作り方が
全然わかりません。

  任意の10億までの数を入力して、
  その素因数分解して、その結果を出力
  するプログラムをPERLを使って作成
  してください。


  ファイル名と文字列を入力すると、
  その文字列がそのファイルに含まれるか
  どうかを検査し、含まれていた場合は、
  ファイルの何行目に含まれているかを
  出力するプログラムをPERLを使って
  作成してください。

どうか、宜しくお願いいたします。
965nobodyさん:02/03/26 14:50 ID:???
>作成してください。

宿題は自分でやりましょうね。
はい次の方。
966nobodyさん:02/03/26 14:51 ID:???
>作成してください。
ぉぃぉぃ
宿題?

素因数分解は遅くていいなら簡単だけど。
速くするのは数論の知識も必要になってくる。

grepみたいなのはものすごく簡単だけど。

教えない。
967のび太:02/03/26 16:00 ID:Kul7lxpG
perlでhtmlファイルを書き出し、それと同時に違うサーバーにFTP転送しています。
元ファイルの作成と転送そのものは問題なく動作してるのですが、
コピーしたファイルが元のファイルと比べて内容が変わってしまいます。
※内容が変わるというのは、ファイルが最後までコピーされない感じです(100行あったら90行までしか)
テーブルを使用してるのでレイアウトがグチャグチャに。。。

これはどのような原因が考えられるでしょうか?

ちなみに出力したファイルが全て書き込まれる前に転送しちゃってるのかな?と思い
転送の前にスリープとかやってみても結果は変わりませんでした。
968nobodyさん:02/03/26 16:08 ID:???
>>967
どらえもんに頼んで下さい
969ほげ:02/03/26 16:09 ID:gjNyJjgt
>>967
モールス信号で伝送してください
970nobodyさん:02/03/26 16:35 ID:???
>>969
むしろ手旗信号
971nobodyさん:02/03/26 18:13 ID:???
>>967
スリープしても意味無い。closeしなされ。
972nobodyさん:02/03/26 18:27 ID:???
>>964
$x = ファイル名
$y = 文字列
$cnt = 1;

open(IN,$x);
while(<IN>){
  if($_ =~ /$y/){ print "$cnt行目\n"; }
  $cnt++;
}
close(IN);
973nobodyさん:02/03/26 20:07 ID:???
>>964
$i = $in = $ARGV[0];

for($prime=2;$prime <= $in && $prime<1000000000;$prime++) {
 if ( ($i % $prime) == 0 ) {
  $power{$prime}++;
  $i = $i / $prime;
  $prime = 2;
 }
}
foreach(sort {$a<=>$b} keys %power) {
 $n = $power{$_};
 if ($n == 1) {
  $term = $_;
 } else {
  $term = "$_^".$n;
 }
 push(@result,$term);
}
print "$in = ",join(" * ",@result),"\n";
974nobodyさん:02/03/26 20:40 ID:???
課題とすると
授業で扱った関数使うとか、
前提が思うんだけどな。

>>972-973を提出しても誰かに作らせたとばれてしまう罠。
975973:02/03/26 22:02 ID:???
>>973
つっこみどころ満載でお届けしております。(藁
976nobodyさん:02/03/26 22:21 ID:???
>>980
次スレよろしく
977nobodyさん:02/03/26 22:34 ID:7ingtp1l
$b=$a-1;
print "a-1=$b";
というのを$bを使わないで
print join("", "a-1=", $a-1);
って書くのは普通ですか?もっと良い方法ありますか?
join使うとhtml出力するときとか、めちゃめちゃ分かりづらくなるんですが。
978nobodyさん:02/03/26 22:53 ID:???
>>977
printf "a-1=%f", $a - 1;
# or
print "a-1=${ \do{ $a - 1} }";
print "a-1=@{[ $a - 1]}"

好きな方法を試されよ。
979nobodyさん:02/03/26 22:54 ID:???
>>977
ふつーに
print "a-1=", $a-1;
とか。
980nobodyさん:02/03/26 22:57 ID:???
>977
なんで join でくっつけるの? つっくける意味がわからん。

print '$a-1= ',($a-1),"\n";
または
print "\$a-1= ${\( $a - 1 )}\n";
981nobodyさん:02/03/26 22:59 ID:???
>>977
もしくはprintfだな。
982977:02/03/26 23:03 ID:7ingtp1l
あれーそんなにいっぱい方法が..。
979さんと980さんのはピリオドじゃなくてカンマでいいんですか?
なんかdoってのが一番しっくりきそうなので使ってみます。
てか、今までずっとjoinでやってた..。人に見せなくてよかった。
ありがとうございます!
983nobodyさん:02/03/27 04:56 ID:???
ppm install Net-SMTP すると、
Error installing package 'Net-SMTP': Could not locate a PPD file for package Net-SMTP
ってエラーが出るんだけど、なにこれ?
プロキシ使ってないのに・・・

http://www.activestate.com/packages/
に Net-SMTP が見当たらないのと関係ある?
984983:02/03/27 05:02 ID:LXoBMXbo
ちなみに
ppm install Net-Ping
は成功しました。回線不調ともちがうようです。う〜ん・・・
985nobodyさん:02/03/27 05:07 ID:???
>>983
libnet.ppd
986983:02/03/27 05:34 ID:???
>>985さんどうもです。
ppm install libnetでインストールできました。

その後、
ttp://member.nifty.ne.jp/hippo2000/perltips/net/smtp.htm
>なおこのドキュメントではlibnetモジュールをインストールしたときに
>作成されるC:\Perl\html\lib\site\Net\SMTP.htmlを、

なんてのも見つけました。注意不足でしたか
987帝国 ◆9qoWuqvA :02/03/27 11:30 ID:BFIdDUdC
Perlで質問なんですが、
$folderで指定したフォルダ内に
フォームで受け取ったファイル名($filename)とパーミッション($permission)で、
空ファイルを生成する方法を教えてほしいんですが・・

もしかしてcgi-lib.plとか使いますか??
988nobodyさん:02/03/27 11:35 ID:???
>987
フォルダのパーミッションがきちんと設定されてればopen(MAKE,">$filename");でできる。
パーミッションはchmodで変えれ。
989帝国 ◆9qoWuqvA :02/03/27 11:58 ID:BFIdDUdC
>>988
ファイルの生成はうまく行きました。
でもパーミッションが設定されないんです。。

chmod($permission,"$folder/$filename");

でダメなんでしょうか?
990nobodyさん:02/03/27 12:09 ID:???
>989
パーミッションの数字はなににしてる?
991製作板で誘導した人:02/03/27 12:14 ID:???
$permissionの中身は何?
てかパーミッション設定するのに変数使う必要あるんだろうか・・・・
$file="\.\/$folder\/$filename";
chmod 666,$file;
とかじゃダメ?
992nobodyさん:02/03/27 12:26 ID:???
nobodyに0700にされる罠。
993帝国 ◆9qoWuqvA :02/03/27 12:39 ID:BFIdDUdC
パーミッションはフォームにいれた値。
だから変数に格納する必要が。。
994nobodyさん:02/03/27 12:44 ID:???
パーミッションは8進数で設定するのは別に罠ではないという罠。

立たぬなら 立つまでまとう Perlスレ
995nobodyさん:02/03/27 12:56 ID:???
 
次スレ作りましたー

【Perl】初心者コーナーPart11
http://pc.2ch.net/test/read.cgi/php/1017201229/l50
996nobodyさん:02/03/27 16:20 ID:Uw889VO5
996!
997nobodyさん:02/03/27 16:21 ID:???
997!
998nobodyさん:02/03/27 16:21 ID:???
998
999nobodyさん:02/03/27 16:21 ID:???
999!!!
1000nobodyさん:02/03/27 16:21 ID:???
1000get!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。