【Perl】初心者コーナー Part15
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/08/08 23:19ID:???1:自分はこう言う事がしたい。
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あたりを見よう。
0554548
02/09/02 12:39ID:???なるほど。
$tm=time;
($mday,$mon)=(localtime $tm)[3,4];
で、できました。
ありがとうございました。
(undef,undef,undef,$mday,$mon)=localtime;
0558542
02/09/02 19:45ID:???@txt = <TXT>;
&unlock_close(TXT);
open(OUT,"> x.txt");
print OUT "@txt";
close(OUT);
&lock_open(TXT, "a2.txt");
@txt = <TXT>;
&unlock_close(TXT);
open(OUT,">> x.txt");
print OUT "@txt";
close(OUT);
&lock_open(TXT, "x.txt");
@txt = <TXT>;
&unlock_close(TXT);
foreach $m (@txt) { chop($m); }
でできました。opendirの意味がいまいちわからなかったので544さんの「それはopendirしたディレクトリのファイルリストを得る関数だ」
の助言で納得できました。おさわがせしてすみませんでした。ありがとうございます。
0559nobodyさん
02/09/02 20:49ID:???@txt = &lock_open("a.txt");
とか
print OUT &lock_open("a.txt");
とか
chop @txt;
とか。どーでもいーけど。
0561nobodyさん
02/09/02 20:56ID:???0563nobodyさん
02/09/02 21:53ID:Ldjfc++cその際にタイムアウトの時間を設定することは出来ませんか?
例えば、10秒以内に取得できなければ、エラーを出して終了するとか出来ませんか?
現在↓みたいにして取得しています。
よろしくお願いします。
#---------------------------
use Socket;
my $sock_addr = pack_sockaddr_in(80, inet_aton("2ch.net"));
socket(SOCKET, PF_INET, SOCK_STREAM, 0);
connect(SOCKET, $sock_addr);
select(SOCKET); $|=1; select(STDOUT);
print SOCKET "GET / HTTP/1.0\r\n";
print SOCKET "\r\n";
while (<SOCKET>){m/^\r\n$/ and last;}
while (<SOCKET>){print;}
#--------------------------
0564nobodyさん
02/09/02 21:55ID:???$time=$^T;
if(int($^T-$time)>=10){shutdown(2)}
0567nobodyさん
02/09/03 00:40ID:???ヽ(´∀`)ノ
( へ)
ヽ
0568nobodyさん
02/09/03 00:41ID:???0570nobodyさん
02/09/03 18:24ID:???0571nobodyさん
02/09/03 19:43ID:bBGpZ26t0572nobodyさん
02/09/03 19:48ID:???0573f
02/09/03 19:51ID:K/olstAP---●●●変態痴女を紹介致します。●●●---
例えば>欲求不満オマ●コヌレヌレ女・露出オナニー痴女・
フェラチオおしゃぶり女・ミニスカ・ノーパン娘・巨乳パイズリ娘・
アナルSEXおねだり娘・オマ〇コ弄られマン汁グチョグチョ女・
SM牝豚・緊縛・浣腸・スカトロ・等・・・刺激を求めています。
●●●学生・OL・主婦・モデル・牝豚・女王様・オカマ等・多数!●●●
090-8002-8356番
-----------------------------
http://www.mttdocomo.jp/
-----女性アルバイト随時募集・高収入(日払い)月100万円可能-----
http://www.mttdocomo.jp/
Iモードはこちら→http://www.mttdocomo.jp/i
0574nobodyさん
02/09/03 20:21ID:OLMxXVpc0575初心者
02/09/03 23:24ID:KI0OEEO7perlで、他のurlに変数と値をポスト送信してアクセスする方法はありますか?
print"Location: http://〜";
はうまくいきませんでした。お願いします。
詳しい方、教えてください。
0578初心者
02/09/03 23:34ID:KI0OEEO7ふつう、<a>タグの記述だと、
"〜.cgi" method="post" postdata="name=value&name2=value2"
とかになるのかな?と思うのですが(htmlではなくhdmlで作業して
いるので、そういう記述になっています)、
GETメソッドなら
print"Location: http://〜.cgi?name=value&name2=value2";
みたいなやり方で出来るのかもしれませんが、
postだとどうなのかな?と。
perl自体、初めて触ったという話にならない初心者なので、
正直まいっています。
詳しい方、またそうでない方も、参考程度の意見で構わないので、
聞かせていただけたら幸いです。
0579bloom
02/09/03 23:43ID:L4DD9EQOhttp://www.leverage.jp/bloom/start/
0583T女の竹田
02/09/04 01:43ID:???ソケットで繋いで、Content-Lengthを書いて、その後は普通に
データを送る。
POST http://www.perl.org/survey.cgi
Content-Length: 66
Content-Type: application/x-www-form-urlencoded
name=Gisle%20Aas&email=gisle%40aas.no&gender=M&born=1964&perc=3%25
って感じで。
(参照:http://member.nifty.ne.jp/hippo2000/perltips/HTTP/Request/Common.html)
ただ、こうするともちろんレスポンスもらうのはスクリプトだから注意して。
そのままprintしてやればとりあえずOKだけど、ブラウザのURLが
POST送ったスクリプトのままだから、相対リンクのイメージとかが
めちゃくちゃになりそう。
ダミーのHTML用意して、フォーム書いて、OnLoadかなにかで送るのが
一番早いかなぁ。
0584nobodyさん
02/09/04 02:59ID:???http://www.parkcity.ne.jp/~chaichan/qanda/qa3100.htm?02-09-04-02-58
0585nobodyさん
02/09/04 09:33ID:???# 記事の最大保存容量(単位:KB)
$maxsize = 100;
$maxsize = $maxsize * 1000;
$logsize = (stat($logpass))[7];
while($logsize > $maxsize) {pop @data; $logsize = (stat($logpass))[7];}
書き込み処理の直前に↑のようにやってみたんですがうまくいきませんでした。
変数を書き出したりしてみたんですが原因がわからず困っています。
どなたかわかりませんでしょうか?
0586名無しさん@Meadow
02/09/04 10:08ID:???ファイルは変わっていない。
0588名無しさん@Meadow
02/09/04 12:03ID:gOg0cXWU書き込む前でしょ。
while($logsize > $maxsize) {pop @data; ↑$logsize = (stat($logpass))[7];}
矢印のところで書き込まないと・・・
それより別の方法を考えたら?
0589nobodyさん
02/09/04 13:23ID:???0590nobodyさん
02/09/04 14:56ID:???foreachでまわして一行ずつlength関数でバイト数を調べるほかに何か方法ありますでしょうか?
0591nobodyさん
02/09/04 15:15ID:???0592nobodyさん
02/09/04 15:23ID:2Otyyhgvここのメル友募集用掲示板で会員用サイトを作りたいのですが、
http://tsubaki.sakura.ne.jp/~campus/grooweb/jewel.html
メールを送る時にID&PASSでアクセス制限をかけたいのです。
どの様に作ったら良いのでしょうか?
0593名無し
02/09/04 15:51ID:AttOz/Tz回答が書かれているのを見つけられないので
以前、質問した人に代わってお聞きします。
CookieをOnにしないと弾き出してしまう
ここで使っているものみたいなCGIのスクリプトを
扱っているようなホームページは知りませんか?
もちろん、ここにスクリプトを書いて下されば
もちろん、なおさら有り難い事ですが…
0594b
02/09/04 16:01ID:07M2lj7H0595nobodyさん
02/09/04 16:12ID:A3ZRMRKj実行する際に、専用のSSLサーバー(ttps://***.site-secure.net/)
を通すとInternalServerErrorが出てしまいます。
どなたか分かる方いたらお願いします。
0596nobodyさん
02/09/04 16:19ID:???, - - 、 /ヽ
/ O \グヒャッ ! /ヽ、 / ヽ
,, : ,ー, O | / _,;, -'''"~~ ヽ
'' ; ∴_ノゝ ゝ /o O ヽ
ヽ ,;''"~"'';, / ┌─┐ ノ( ヽ
_ノ| ;;'';;'';;'';;'' | / | ⌒ | <スレ違いもはなはだしいわ!
ゝ、ヾ ヾ | ト、 | /
/ ヽ ヾ ヾ ヾ、 \ノ ノ
ノ\_ヾ ヾ /⌒ヽ、 ___/、
ノヾ ヾ_ _/ ノ, ヽ
ヽ、ゝ ノ ノ ハ ヽ
ゝ、 ノ ノ、 ノ ゝ | )
ー─一'´ ゝ、 l'´
) /
CGIだけど、なんか質問ある? Part 6
http://pc.2ch.net/test/read.cgi/php/1025930486/
0597nobodyさん
02/09/04 17:33ID:???どんなスクリプトでも頭に以下のような文を入れれば弾ける。
unless($ENV{'HTTP_COOKIE'}){
print "Set-Cookie: value=check; path=$ENV{'SCRIPT_NAME'} domain=$ENV{'HTTP_HOST'} expires=Fri, 31-Dec-2010 00:00:00 GMT\n";
}
&error_end('くっきーオンにしてちょ') unless($ENV{'HTTP_COOKIE'});
0598593
02/09/04 19:35ID:rVUPKdSlどうも有り難うございました。
まさか、こんなに早く教えて頂けるとは思いませんでした。
ところで
expires=Fri, 31-Dec-2010 00:00:00 GMT\n
の部分なのですが、ここの記述は
絶対こうでなくても構いませんよね。
0600名無しさん@Meadow
02/09/04 21:42ID:rtiaBVOu$ perl -e '@ar=qw(a b c d e f); print length("@ar"), "\n";'
11
0601nobodyさん
02/09/04 22:06ID:???一気に消す方法はないでしょうか?ご教授頂けないでしょうか?
0602名無しさん@Meadow
02/09/04 22:18ID:rtiaBVOu$ perl -e 'system("rm -rf ./dir");'
./dirってとこは、消すディレクトリのパスを入れてね。
0604601
02/09/04 22:33ID:???0605名無しさん@Meadow
02/09/04 22:35ID:rtiaBVOu>そう言う方法があるのですがね。
~~
逆説の「が」ですか?
だったら、
$ perl -e 'use File::Path; rmtree ("./dir");'
0606601
02/09/04 22:42ID:???そういう意味じゃないです(;´Д`)
そちらもダメでした・・・
logフォルダーに 1 と言うフォルダーがあり、
その中に、0.log 1.log ・・・ 10.log
と言うファイルが有るので、それをフォルダーごと消したかったんです。
説明が悪かったのかも知れませんが・・・
0607名無しさん@Meadow
02/09/04 22:50ID:???>そちらもダメでした・・・
perl5でしょ?
libディレクトリにFileモジュールが入ってないってこと?
考えがたい。
じゃスクリプトミス?
use File::Path;
rmtree("./dir");
ってちゃんと書いた?
じゃファイル属性を確認してちょ。
0611nobodyさん
02/09/05 04:56ID:???\r\nって\nにしちゃダメなんすか?
特に動作に問題は見当たらないしファイルサイズも削れるんで\nでいきたいんすけど。
それとも不都合な環境とかあるんでしょうか。
0612名無しさん@Meadow
02/09/05 05:34ID:???改行は、<br>で表すんだから、別に構わんです。
ただ、編集環境がwindows(MS-dos)なら、普通、¥r¥nが自動的に
つくんですが。いちいち変換するの?
0613611
02/09/05 05:48ID:???改行コード自体いまいち理解できてないんですすんまそん。とりあえず
print "Set-Cookie: $cookie\r\n";
とか
print "Content-type: text/html; charset=EUC-JP\r\n\r\n";
とかの\r\nを\nにしちゃまずいんかなと思ただけ、というか
\nでいけるならなんでわざわざ\r\n使ってるんだろうとか思ってみただけれす。
レスどうもっした。
0614名無しさん@Meadow
02/09/05 06:01ID:???http://tohoho.wakusei.ne.jp/wwwxx011.htm
0615名無しさん@Meadow
02/09/05 06:12ID:???出力だから、問題は起こらないね。
0617T女の竹田
02/09/05 11:51ID:sI+RlSZgftp://ftp.nic.ad.jp/rfc/rfc1945.txt
The line terminator for HTTP-header fields is the sequence CRLF.
However, we recommend that applications, when parsing such headers,
recognize a single LF as a line terminator and ignore the leading CR.
(訳)HTTPヘッダ領域の行末区切りはCRLFの並びです。しかし、アプリケーションが
そのようなヘッダを読み取るときは、単独のLFを行末区切りとして解釈し、続くCRを
無視することをお勧めします。
というわけで、実際問題LFだけでも問題はまずないだろうけど、正式には
CRLFだよ。
0618T女の竹田
02/09/05 11:52ID:???続くCR→前のCR
0619ゆゆ
02/09/05 12:03ID:FN8hs1rsエラーで
70行目に @Iとあるけど\@Iにするべきというエラーがでるのだけど
そんなものどこにも書いてないです。
いままで行数があってないなどありましたが、@Iというもの自体が
ない場合のエラー場所がわかりません。
何か特有の字が @Iとなったりしますか?
0620nobodyさん
02/09/05 12:17ID:???0621nobodyさん
02/09/05 13:53ID:???0622613
02/09/05 13:58ID:???\nを使うって事はアプリケーション側のサービスに甘えるってカンジすか。
とりあえずCGIを公に配布とかしたりしない限りは
こっそり\n使っちゃってもいっか、と解釈。
0623nobodyさん
02/09/05 14:11ID:???だとWindowsサーバーで動かすときとか、おかしくなることがある。
0625nobodyさん
02/09/05 14:24ID:???のように16進数でCRLFを表すのがいいらしい。
Windowsでの改行はCRLFだから、\r\nで出力してしまうと\r\r\nになってしまう罠。
0626613
02/09/05 14:29ID:???0628名無しさん@Meadow
02/09/05 14:55ID:???0629nobodyさん
02/09/05 16:18ID:FN8hs1rs>>EOF 内にHTMLのほうで使ってるまま持って来たら
InternalServerErrorに・・・。
ジャバスクリプト取ったらエラーは起こらないのだけど。
初心者わらってんじゃねーよ。
初心者をあざ笑うスレでも作ってそこでやってくれ。
解っているのなら教えてやって下さい。
初心者同士で嘗め合うことから先に進めません。
>>629
Java Script はクライアント側で動作しますので、
Perl 文法エラーの可能性が高いと思われます。
0635kusokote ◆4XfSMGTg
02/09/05 21:42ID:???◆4XfSMGTg はオープントリップ kusokote
630 と 631 は別人。
0636nobodyさん
02/09/05 22:27ID:CVMgCTHS初めてperlでCGIを書いてみたんですが動きません。
どんな原因が考えられますか?
#!/usr/local/bin/perl
require "./jcode.pl";
$object = $ENV{ 'QUERY_STRING' };
open (FILEOUT, ">./xxx.txt");
print FILEOUT @object;
close (FILEOUT);
exit;
0638nobodyさん
02/09/05 22:35ID:???jcode.pl が使われていない。
GETで受け取るため文字制限がある。
0639nobodyさん
02/09/05 22:45ID:???フォルダ内のファイル数を数えて、その数+1を新規の過去ログのファイル名にしてるんすよ。
でも、そうすると既に存在するファイルを削除した場合、当然やけどファイル数が減ってしもて
ファイル名がかぶってしまうんすよ。
何か良いファイル名の付け方知りまへんか。
ご教授よろしくお願いします。
0640nobodyさん
02/09/05 22:50ID:???0642nobodyさん
02/09/05 23:04ID:???空きが見つかるまでリピートぶん回して
open(OUT, "./log/日付とか$i.html");
0643nobodyさん
02/09/05 23:08ID:???0645639
02/09/05 23:16ID:???0646T女の竹田
02/09/05 23:55ID:???半角全角は面倒だね。Perlでやると大抵Shift-JISとかで送られてきた
文字列を処理することになるから文字の境界で苦労する。
>>628さんの言うとおり、JavaScriptでやるのがいいと思う。
ちょっと書いてみた。板違いだけど…
<form OnSubmit="txt=mainForm.messageArea.value;
while (txt.match(/[0123456789]/))txt=txt.replace(/[0123456789]/,
'0123456789'.charAt('0123456789'.indexOf(RegExp.lastMatch)));
mainForm.messageArea.value=txt;">
これで全角→半角が一応IE6ではできた。他は試してない。
mainForm.messageAreaは好きに変えてね。
0647636
02/09/06 00:15ID:GoSqrpgTけれどデコードっぽいことをしてませんが、半角カナいれたりしても何も問題がありません。
のちのちまずいことになりますかね?
>半角カナいれたりしても何も問題がありません。
EUCで書いてるからカシラ
0649nobodyさん
02/09/06 00:22ID:+YKj9Zdt俺はJAVAscriptで入力制限てどうも気に入らないんだけどどうよ?
ユーザビリティーを考えてjavascriptの入力チェックを書くことあるけど
クライアントでチェックってどうも設計上よろしくないと思っている俺。
0650636
02/09/06 00:37ID:GoSqrpgTはい EUCで書きますた
0651nobodyさん
02/09/06 00:37ID:???ここはPerlスレだからCGIと仮定するのもおかしいかもしれないけど、
「CGIでParsed headers」なら規格上 LFのみ か、 CRLF のどちらかです。
http://hoohoo.ncsa.uiuc.edu/cgi/out.html
もうちょっと詳しく言うと、CGIのヘッダというのは
HTTPサーバが解釈して、HTTPヘッダを生成するためのものなので、
フォーマットは一緒ですがHTTPのヘッダとは別物と考えるべきです。
蛇足で、NPHの場合はそのままクライアントに渡されるので、
当然CRLFにする必要があります。
■ このスレッドは過去ログ倉庫に格納されています