【Perl】初心者コーナー Part14
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/07/18 16:34ID:jemWJhH31:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 6 (その2)
http://pc.2ch.net/test/read.cgi/php/1025930486/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4】
http://pc.2ch.net/test/read.cgi/php/1012839651/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0785nobodyさん
02/08/05 00:17ID:mlKhZTXHファイルポインタを使って円の面積を計算するプログラム、教えてください。
ファイルポインタには半径1から10の数値があります。
出力結果は次のようになるようにして下さい
半径 面積
1
2
3
・
・
10
0786apholist
02/08/05 00:26ID:vCl4cuclえ?ヤヴァイ?
0787apholist
02/08/05 00:29ID:vCl4cuclネタ?厨?For文使うか一つずつ円周率3で計算すればいいんじゃない。
0789nobodyさん
02/08/05 00:40ID:???>>785 おめー殴らせろ
0790apholist
02/08/05 00:41ID:vCl4cuclマルチだったのか。Perlとか言語の区別もつかんとは
あわれな厨だな。俺よりアフォだ。
とりあえず、うごきますた。Apache2.039が悪かったみたい。
1.326にしたら動いた。
人柱になるのはもっとスキルみがいてからにします。
ご協力感謝。
0791nobodyさん
02/08/05 01:57ID:LdtViypmhogeという文字列を追加したい場合
どう書けばいいですか
0796nobodyさん
02/08/05 09:42ID:???$i=$i++;
はいかんよ
$a=0;
$b=$a++;
の場合は$a=1,$b=0.
$i=0;
$i=$i++;
なら$i=1,$i=0.どっちか分からん。
0797nobodyさん
02/08/05 10:21ID:???while(<>) {
next if !/_/;
s/^/hoge/;
}
ひとつの小難しい正規表現でやるのは嫌な人用。
0798nobodyさん
02/08/05 10:36ID:???よく見かけまずが、未だにperl4しか入ってないサーバばかりなんですか?
0799nobodyさん
02/08/05 11:28ID:???0800nobodyさん
02/08/05 11:37ID:7p5l2D2Kフォームメールでローカル上のファイルを添付して送信するスクリプトを作ったのですが、
パソコンのアウトルックではちゃんと添付ファイル付きのメールが受信できるのに
gooとかのウェブメールや、シグマリオンに付いているMPメールでは上手くいきません。
なにか違いでもあるんでしょうか。
どなたかご教示いただけないでしょうか。
0801nobodyさん
02/08/05 11:53ID:???0802nobodyさん
02/08/05 12:26ID:7p5l2D2Kgooでは件名、本文は正常に受信できて、添付の部分は本文にコードが書かれている状態です。
MPメールのほうは件名もiso-2022-jpと書かれていて、本文もcontent-type云々になってます。
パソコンのアウトルックで使うより、シグマリオンのMPメールで使う方が多いので困っています。
0803nobodyさん
02/08/05 13:47ID:???となってますか。
0804nobodyさん
02/08/05 14:55ID:???$ENV{'QUERY_STRING'}
の内容は1回目で無くなっちゃうんでしょうか。
うまくいかないんです。
そんなこたーないよ。コード見せてみ。
0806nobodyさん
02/08/05 14:59ID:???0807nobodyさん
02/08/05 16:02ID:???全体と載せるのは無理なんで説明します。
で、実は>721でやっているのをやりたいんです。
チェックボックスの値を配列で受け取るとういのを。
#usr/bin/なんたら
$FORM = &getparam; # パラメータ取得
$mode = $FORM{ mode };
if($mode eq "") { &main; }
〜モード判定〜
else { &error("不正なアクセスです。"); }
sub getparam{ # デコードサブルーチン
read( STDIN, $post, $ENV{ 'CONTENT_LENGTH' } );
@data = split(/&/,$post);
foreach $all (@data) {
($name,$value) = split(/=/,$all);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/,/,/g;
$value =~ s/"/"/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/\r\n|\r|\n/<br>/g;
$value =~ s/<br</<br>/g;
$FORM{$name} = $value;
if($name eq "no"){
push(@nos,$value);
}
}
@FORM
0808nobodyさん
02/08/05 16:02ID:???sub main{
foreach $hoge (@nos){
print "$hoge";
}
}
こうやるんですけど、何も表示されないんですね。
@FORMの配列しか受け取れていないんでしょうか。
最後の値を返り値にするから。
なんで
if($name eq "no"){
push(@nos,$value);
}
@nosの値を受け取るためだけのデコードルーチン作ったんですけど
それでもうまく値が返ってこないんですよね。
0810nobodyさん
02/08/05 16:19ID:???$ENV{ 'CONTENT_LENGTH' } でも値がなくなるこたーないよ。出力させてみ。
でも標準入力からは1度しか読み込めない。
0812nobodyさん
02/08/05 16:22ID:???0814nobodyさん
02/08/05 16:29ID:???そのソースは、記念に以下のスレにカキコしといてよ。
http://pc.2ch.net/test/read.cgi/php/1028052835/l50
0816nobodyさん
02/08/05 18:23ID:???_ _ .' , .. .. .' ∧_∧
∧ _ - ― = ̄  ̄`:, .∴ ' ・,‘∴ , . ( ) ←>>814
, -'' ̄ __――=', ・,‘ r⌒> _/ /
/ -―  ̄ ̄  ̄"'" . ’ | y'⌒ ⌒i
/ ノ | / ノ |
/ , イ ) , ー' /´ヾ_ノ
/ _, \ / , ノ
| / \ `、 / / /
j / ヽ | / / ,'
/ ノ { | / /| |
/ / | (_ !、_/ / 〉
`、_〉 ー‐‐` |_/
0817nobodyさん
02/08/05 18:24ID:???∧_∧ _ _ .' , .. .∧_∧
( ´_ゝ`) _ .- ― .= ̄  ̄`:, .∴ ' ( >>815)
/ '' ̄ __ ヽ´=', ・,' r⌒> _/ /
/ /\ / ̄\-―  ̄ ̄  ̄"'" . ' | y'⌒ ⌒\
_| ̄ ̄ \ / ヽ \_ | / ノ |
\ ̄ ̄ ̄ ̄ ̄ ̄ \__) , ー' /´ヾ_ノ
||\ \ / , ノ
||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄ / / /
|| || ̄ ̄ ̄ ̄ ̄ ̄ ̄|| / / ,'
|| || .|| / /| |
!、_/ / 〉
0818802
02/08/05 20:15ID:???Content-Type: Multipart/Mixed;になっています。
もしかしてアウトルックはIEみたいに多少の間違いがあっても
上手いこと動いてくれてしまうんでしょうか・・・。
0819nobodyさん
02/08/05 20:16ID:???0820nobodyさん
02/08/05 21:37ID:TC4MSFf/書き込んでCGI上でリロードする際に、ページの下の方を表示したいんです。
表示と書き込みのCGIを分けて
書き込み側から
<META content=0;URL="read.cgi#sita" http-equiv=refresh>
こんな感じで飛ばしてみたんですが何故か#sitaが反映されません。
何かいい方法はないでしょうか。
0821nobodyさん
02/08/05 21:42ID:???書き込み後にLocationで飛ばせば?
0822nobodyさん
02/08/05 21:44ID:obWCEw8Y掲示板のログファイルを閲覧者からは見えなくしてCGIからだけ
読み込めるようにするにはどんなパーミッションにすればいいですか?
掲示板の削除キーが書き込んであるのが閲覧可能というのは、
やはりまずいかなと思いましてね。
いろいろ探したけどわからなかったので、知ってる方いたらお願いします。
まあ、ファイル名をわかりにくいものにする、などの方法はありますがね。
0823nobodyさん
02/08/05 21:50ID:TC4MSFf/やってみました。
print "Location:read.cgi\#sita\n\n";
こうですよね。
でもやっぱり#sitaは反映されないようです。
他に何か無いでしょうか…。
0824nobodyさん
02/08/05 21:57ID:???パーミッション変えるより、拡張子を.cgiにすれば?
>823
ページの読み込みが終わるまで待ってる?
その前にどこかクリックしたりすると移動しないことがあるよ?
あと、念の為に聞いておくけど、<a name=sita></a>で失敗していたりしないよね?
0825nobodyさん
02/08/05 22:06ID:TC4MSFf/>あと、念の為に聞いておくけど、<a name=sita></a>で失敗していたりしないよね?
そのとおりでした。穴があったら入れたいです。
ありがとうございました。
0826nobodyさん
02/08/05 23:12ID:???みんな仕事でやってるのか。
に、してはレベルが・・・。
0827m(__)m
02/08/05 23:25ID:7ewZSPimコミュニティサイトをしようかと思っているのですが、
メンバー表に登録するとクッキーが焼かれ、
掲示板などに書き込む時偽りができないようにできるスクリプトありませんか?
例を出すと、
http://daichanchi.com/
で利用しているようなものです。
よろしくお願いいたします。
0829nobodyさん
02/08/05 23:58ID:???>>827がたたかれるに1マルク
http://pc.2ch.net/test/read.cgi/php/1021897804/
0830nobodyさん
02/08/06 00:04ID:diugRf3e「writing」と表示されたのにかかわらず
if文の中が実行されません。
超初心者的なミスを犯していると思いますが、なにとぞご指摘ください。
ActivePerl: 5.6.0.620
Apache 1.3.24
Windows2000 +SP2
/* 以下 プログラム */
print "「$In{mode}」";
if ($in{mode} eq 'writing'){
print "hoge";
exit;
}
0832830
02/08/06 00:07ID:diugRf3eprint "「$In{mode}」";
if ($in{mode} eq 'writing'){
print "hoge";
exit;
}
本当は 「writing」hoge と表示して欲しいのに・・・
0833830
02/08/06 00:08ID:diugRf3eネタだと思われるようなミスなのですか(鬱)
どこがおかしいのか教えてください。
0834nobodyさん
02/08/06 00:09ID:???0835830
02/08/06 00:17ID:diugRf3e失礼しました〜っ
0836nobodyさん
02/08/06 00:21ID:???0837830
02/08/06 00:24ID:diugRf3ewritingはHTMLのフォームから渡されてきた物です。
mode=writing の時に書き込み処理をするようなBBSを
作っているのでした(笑)
こんな単純なことで3時間を費やした俺って一体(鬱)
そんなキミに-wスイッチとuse strict;をお勧めするよ。
慣れるまでちょっと時間は掛かるけど、
タイポによるつまらないバグが激減すること間違いなし!
0840art
02/08/06 10:10ID:a25IbhtN1.txt、2.txt・・という具合にファイルを生成したいんですが、
(1)テキストが保存されているディレクトリ内のファイルの数を調べ$prev内に代入
(2)*.txtの*をファイル数を$prev + 1にする。
(3)「($prev+1).dat」という名のファイルにする
という考え方でいいのでしょうか?
もし合っていればどういう風に書くかアドバイスして頂きたいのですが・・。
0841nobodyさん
02/08/06 10:19ID:???ナンバーを保存する別ファイルを作る。
0842nobodyさん
02/08/06 10:29ID:???0843nobodyさん
02/08/06 10:29ID:???0844843
02/08/06 10:30ID:???@hogeと@hage
これをさらに一つの配列にするしかないですか?
0846リファレンスを返す
02/08/06 10:38ID:???my ($hageR,$hogeR)=foo;
0847art
02/08/06 10:42ID:a25IbhtNナンバーを保存する別ファイルか・・
どうやるのですか
0848nobodyさん
02/08/06 10:52ID:???open(FIL,"a.txt");
$a = <FIL>;
close(FIL);
open(FIL,">a.txt");
print FIL ++$a;
close(FIL);
0849nobodyさん
02/08/06 10:56ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0850art
02/08/06 11:03ID:a25IbhtNなめてないよ。
そうじゃなくて、まずファイル生成する時にどうやってファイル名を
1.txt、2.txt、3.txt・・と増やして作ることが出来るかってこと。
0852art
02/08/06 11:09ID:a25IbhtN考えがまとまらなくなってしまって・・・・・。
>>840の方法だと、分かりやすいんですが
そうすると削除とか大変なんですよね。
0853nobodyさん
02/08/06 11:10ID:???0854art
02/08/06 11:11ID:a25IbhtNお願いします・・助けてください・・(笑)
0855nobodyさん
02/08/06 11:23ID:???$datという変数に代入するにはどうすればいいですか?
0856nobodyさん
02/08/06 11:30ID:yJuB6gJh合成ならカウンタとかでよく見かけるんですが、
分割はどうしてもわかりません。
たとえば500x500の画像を
100x100の5個に分割したりする方法です。
0857856
02/08/06 11:30ID:yJuB6gJh500x500
↓
500x100
まちがえたよー
0858nobodyさん
02/08/06 11:31ID:???投稿毎にファイルを生成するなら、ファイル名の数値を調べてインクリメントするが吉。
効率悪いし、メンテナンスしにくいと思うが。
0859nobodyさん
02/08/06 11:35ID:???もしくはGD.pm
0860856
02/08/06 11:39ID:yJuB6gJh画像を携帯から見ようと思うのですが、
当然機種によって表示できるサイズがちがうので、
表示させる段階で分割させたいのです。
厳密にいえば、
大きな画像の任意の一部を抜き出してブラウザに返すのがいいです。
なので、別に分割してファイルを複数つくる必要はないかもしれません。
GD.pmってモジュールですよね?
まだモジュール使ったこと無いので緊張しますが
ちょっと調べてきます。
0861nobodyさん
02/08/06 12:53ID:3j+94g7Zってやるとエラーが出るんですけど、どうすればいいでしょうか?
0862nobodyさん
02/08/06 13:15ID:???0864nobodyさん
02/08/06 13:23ID:xsMd1/x0掲示板が沢山あり、ログファイルが沢山ある場合、
したの処理を、ログファイルの個数だけ書かないといけないのでしょうか?
良い方法が思いつきません
どうすればよろしいのでしょうか?
#!/usr/local/bin/perl
$file1="log.txt";
$a=(stat($file1))[9];
($x,$mm,$h,$d,$m,$y,$x,$x)=localtime($a);
$m++;
print "Content-type: text/html\n\n";
print"掲示板の更新日は$m/$d $h:$mm";
0867nobodyさん
02/08/06 13:57ID:???@list = <DIR>;
closedir DIR;
@CON = grep { /^*.\.txt$/ } @list;
$dat = $#CON;
0868nobodyさん
02/08/06 14:00ID:???0869nobodyさん
02/08/06 14:00ID:???それだと1個足らなくない?
0872nobodyさん
02/08/06 14:12ID:???出力すると「-1」って出てきたんすけど・・
1個少ないんだったら変数に1足しても問題ないですかね?
>>870
簡単に言わないでよ
0873nobodyさん
02/08/06 14:48ID:xsMd1/x0ありがとうございます。
配列に入れて回したのですが
08/06 14:07 メイン掲示板
08/06 14:09 雑談掲示板
・
・
と出力されるのですが、新しいモノが上に来るようにソートするにはどうしたらよいでしょうか?
print "Content-type: text/html\n\n";
foreach $c (1..$q) {
$access=(stat($file[$c]))[9];
($x,$min,$hour,$mday,$mon,$x,$x,$x)=localtime($access);
$date = sprintf("%02d/%02d %02d:%02d",$mon+1,$mday,$hour,$min);
$sort="$date $name[$c]<BR>\n";
push(@new,$sort);
}
@new = sort { (split(/<>/,$b))[6] cmp (split(/<>/,$a))[6] } @new;
print @new;
0874nobodyさん
02/08/06 14:52ID:???の部分は
$sort= "$date<>$name[$c]<><BR>\n";
でした
0877nobodyさん
02/08/06 16:14ID:32Vwa5NBmy %file2mtime;
@file2mtime{@file} = map{ (stat($_))[9] } @file;
foreach my $file (sort{ $file2mtime{$a} <=> $file2mtime{$b} } @files) {
print $file, "\n";
}
0878nobodyさん
02/08/06 18:57ID:+CLAZ6EKcgiからの出力を、ブラウザの戻るボタン押下時に意図的にリ
ロードさせたいだけなんですが。。。
<%
Response.AddHeader "Expires", "0"
If Request.ServerVariables("SERVER_PROTOCOL") = "HTTP/1.0" Then
Response.AddHeader "Pragma","no-cache"
Response.CacheControl = "no-cache"
Else
Response.CacheControl = "no-cache"
End If
%>
とか
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="-1">
とか
試したんですが無理でした。
誰かよろしくお願いしますっ!
0880nobodyさん
02/08/06 19:29ID:???ttp://pc.2ch.net/test/read.cgi/php/1025930486/444
マルチポスト氏ね
0881878
02/08/06 19:36ID:+CLAZ6EKPerl cgiです。。
formにオブジェクトを埋め込めないため、ノーキャッシュ
で制御しようとしてるんですが、IEではうまく動かないん
で、どなたか経験者がいらっしゃたらなぁと。
>>880
答えれねぇんなら出てくん名ぼけが
0882nobodyさん
02/08/06 19:41ID:???向こうのスレでレス返してやってるのは俺なんだがな。
マルチポスト氏ね。
0883878
02/08/06 19:49ID:+CLAZ6EKおおそうか。ならあのページにかかれてある事が
上のソースでやってる事もわかってて書いたんだろうな。
まったく、大変有意義なレスだよな。
ぷ。
■ このスレッドは過去ログ倉庫に格納されています