文面は伝統だったのかな?・・ 漏れのBOOKMARKも適当に足しました。
6 :
名無しさん@お腹いっぱい。 :01/09/12 13:26 ID:qAAI57Mk
前スレ930です、向こうに書こうとしたら誘導されちゃった ^^ 931さん932さんどうもです。 取り合えず連装配列が簡単そうなので、これでやってみる事に しました。 パッケージも使ってみようと思います、ありがとう
9 :
名無しさん@お腹いっぱい。 :01/09/12 16:35 ID:KyL5/mNU
新しくなったのでもう一度
TwnLounge Faith editionというスクリプトにクッキーを発行させたくて
悪戦苦闘しています。KENTさんのスクリプトのクッキー発行・取得の部分をとってやって見たのですが
うまくいきません。どなたか教えていただけるとありがたいです。
http://www.hpfree.com/giants/lng.txt ↑実際使っているサーバーはCGI可です。
GETできてません。
SETはできてるのかわかりません・・・
よろしくお願いします。
>SETはできてるのかわかりません・・・ こういう事言われるとどこから説明していいか解らんのだが。。 良く見てないが、%in はクライアントのクッキーの値でわ それをSetしても初回訪問者の %in は常に空だから永遠に発行出来ないと セットするのは %FORM では無いのか 何故、printの手前で手動で値を代入したりしないのか もしperlはどうでも良いからクッキーだけ喰わせたいと言うなら 改造スレッドの方が答えが得られると思うがどうか
11 :
10 :01/09/12 17:18 ID:???
何かキツイ言い方かな、多分新規発言モードとレスモードがあるんだろ
からまずは新規発言モードにFORMの内容セットしてみれ
>>9
見てみたけど%in ($in{...}) って何?突然現れてるけど。
フォームの受け取りは %FORM だろ?1083行辺りのサブルーチンreadParamを見れ。
$in{...}を全部$FORM{...}に。
1192行からの
$c_name = $ck{'NAME'};
$c_email = $ck{'EMAIL'};
$c_hpage = $ck{'HPAGE'};
でクッキーをセットした時のキーを使ってない。
name\:$FORM{'NAME'}\,email\:$FORM{'EMAIL'}\,url\:$FORM{'HPAGE'}
でやったんだから nameとemailとurlだろ。
あとURLの入力フォームはデフォルトで
http://が入ってるから 、
クッキーをセットする前に$FORM{"HPAGE"}から
http://を取れ 。
set_cookieサブルーチン内で
$FORM{"HPAGE"} =~s/
http:\/\///; 何も考えんでコピーしても動くはず無いし、進歩もしないぞ。
つかKENTのスクリプトってcookieのエンコードしてねぇの?
ダメダメじゃん。
13 :
名無しさん@お腹いっぱい。 :01/09/12 18:35 ID:fdeTSY12
> まずは新規発言モードにFORMの内容セットしてみれ 言葉が理解できません・・・ 簡単に言うとどういうことですか? 未熟者で本当にすいません。
14 :
つーか :01/09/12 18:50 ID:???
無茶くちゃだってば、 デリミタがGETとSETで違う getとsetで使ってる名前が違う 全体に変数名が無茶苦茶 : 使いたいならエスケープすれ getとset違うスクリプトから持ってきてんのか? もう何が何か解らん 上手く行ってもこのままじゃ日本語は使えない
>>13 簡単に言う。
コピペで済まそうとするな。少しは勉強しろ。
17 :
名無しさん@お腹いっぱい。 :01/09/12 21:49 ID:SnaNq2/g
>
>>12 やってみましたがだめでした
>
http://www.hpfree.com/giants/lng.txt やってねーじゃねーか。
|1192行からの
|
|$c_name = $ck{'NAME'};
|$c_email = $ck{'EMAIL'};
|$c_hpage = $ck{'HPAGE'};
|
|でクッキーをセットした時のキーを使ってない。
|
|name\:$FORM{'NAME'}\,email\:$FORM{'EMAIL'}\,url\:$FORM{'HPAGE'}
|
|でやったんだから nameとemailとurlだろ。
は無視かえ?
ノーミソ使えんなら改造なんかするな。
19 :
名無しさん@お腹いっぱい。 :01/09/12 22:11 ID:SnaNq2/g
urlをhpageにしたんですけど・・・ 大文字じゃないと駄目ですか?
そもそも > KENTさんのスクリプトのクッキー発行・取得の部分をとってやって見たのですが 自体がいいアプローチなのか?
12でも書かれてるが、cookieをエンコードしてない時点で駄目。 ;とか入るとおかしくなる。 1つのクッキーに , 区切りでセットしてキーと値を : のに , と : が値に入る可能性を考慮していないのも駄目。 IEからJScriptで取る場合は日本語がエンコードされてると 正常に取れないけど。(IE 5で検証) だから2ちゃんはエンコードしてない。 そういう事情は無いのにエンコードしない。 阿呆としか思えない屑スクリプト。
22 :
21 :01/09/13 09:20 ID:???
日本語が変だ。 >1つのクッキーに , 区切りでセットしてキーと値を : のに >, と : が値に入る可能性を考慮していないのも駄目。 キーと値を : で区切り、それを , で連結しているのに、 , と : が値に入る可能性を考慮していないのも駄目。 に訂正。
23 :
名無しさん@お腹いっぱい。 :01/09/13 16:27 ID:558g6.Uc
それじゃ、改造しなおそうかと思ってきたのですが どこで配布されているCGIのものが移しやすいのでしょうか? もしくわ打開策を教えていただけるとうれしいのですが・・・
24 :
名無しさん@いつも空腹 :01/09/13 16:39 ID:qZrCzOSM
データソートの質問です 【ソース】 ------------------------------------------------------------ #ファイル読み込み open(IN,"$datafile"); @lines = <IN>; close(IN); #ソートしてから重複データを削除する @lines = sort { $a cmp $b } grep ( !$count{$_}++, @lines ); #書き込み更新 open(OUT,">$datafile"); print OUT @lines; close(OUT); ------------------------------------------------------------ データ形式は 63,父A,30,母A,27,息子A,5,娘A,1 158,父B,55,母B,52,息子B,27,娘B,24 : : [家族の合計年齢],[名前],[年齢]・・・・ というcsvファイルなのですが昇順ソートすると 158→63の順になってしまい私の希望するソートができません 3桁の数字[158]よりも2桁の数字[63]を先に並べるにはどうしたらよいでしょうか?
$a cmp $b ↓ $a <=> $b
質問です。いま、ファイルに入力されている数字を多い順からn個抜き出して表示するプログラムを作ろうと思うのですが、 どうすればよいのでしょうか? ちなみにデータファイル形式は、こんな感じです。 1,5,3,8,4,6 1,6,4,9,7,8 1,3,2,4,6,8 ヒントでも良いのでお願いします。
27 :
19 :01/09/13 18:40 ID:558g6.Uc
なんとか自分で解決しました。 みなさんありがとうございました。
28 :
名無しさん@お腹いっぱい。 :01/09/13 18:47 ID:SoliGA0M
>>26 $n=5として、
9, 8, 8, 8, 7 か
9, 8, 7, 6, 5 のどっち?
>25 なるほど、解決しました ありがとう
31 :
26 :01/09/13 21:12 ID:???
32 :
聖可 :01/09/13 21:22 ID:t/B28ZsY
聖可
>>26 こんな感じ?
my $N = 5; #表示する最大数設定
#カウントする
my %count;
while(<DATA>){
foreach my $number(split /,/){
$number += 0;#数値化
$count{ $number}++;
}
}
#値でキーをソート
my @keys = keys %count;
@keys = sort {$count{$b} <=> $count {$a}} @keys;
#表示
my $junni = 1;
printf "%7s %7s\n",'number', 'count';
printf "%s\n", '='x20;
foreach (@keys){
printf "%7s %7s\n",$_, $count{$_};
$junni++;
$junni > $N and last;
}
__DATA__
1,5,3,8,4,6
1,6,4,9,7,8
1,3,2,4,6,8
$n = 5; undef $/; my %tmp; my @big_n = (sort { $b <=> $a } grep { ! $tmp{$_}++ } split /[,\n\s]+/, <DATA> )[0..$n-1]; print join ', ',@big_n;
35 :
34 :01/09/13 23:49 ID:???
あ、間違った。全然意味が違うね
36 :
34 :01/09/13 23:58 ID:???
やけくそで一文。真似しちゃダメな例。 my $n = 5; my %tmp; print map { "$_ => $tmp{$_} times\n" } (sort { $tmp{$b} <=> $tmp{$a} } grep { ! $tmp{$_}++ } split /[,\n\s]+/, <DATA> )[0..$n-1];
37 :
名無しさん@お腹いっぱい。 :01/09/14 01:38 ID:AP7G9ZdU
テキスト中にあるタグを分解するスクリプトを作っています。 <xxx attribute="value"> というタグを $tag->{xxx}->{attribute} = value; という感じに変えたいと思っています。 $text = q|<img src="../pen.gif" alt="This is a pen." width=10 height=20><br> <font size=3 color=#ff0000 face="Arial" style="text-decoration: overline underline;">あああ</font>|; @tags = map{ m/<(.+?)>/g } $text; for(@tags) { @array = split / /; $xxx = shift @array; for (@array) { /([^=]+?)=["']?([^"']*)["']?/i; $tag->{$xxx}->{$1} = $2 } } print <<"_EOF_"; $tag->{img}->{src} (実際の出力結果:../pen.gif) $tag->{img}->{alt} (This)←ここで値が切れてる $tag->{img}->{width} (10) $tag->{img}->{height} (20) $tag->{font}->{size} (3) $tag->{font}->{color} (#ff0000) $tag->{font}->{face} (Arial) $tag->{font}->{style} (text-decoration:)←ここで値が切れてる _EOF_ これだと、"This is a pen."など半角スペースを含んだ時に期待通りに動いてくれません。 何か上手い方法はないでしょうか?
>>37 $_ = q<font size=3 color=#ff0000 face="Arial" style="text-decoration: overline underline>;
s/"//g;
s/(.*?)([\w\d-]+)=/$1,$2,/g;
my @str = split /,/;
#前後の空白削除
foreach(@str){
s/^\s+//;
s/\s+$//;
}
#display
print shift @str;
while(@str){
my $attribute = shift @str;
my $value = shift @str;
printf " %-15s: %s\n",$attribute,$value;
}
chmod が出来ません。 ユーザから任意の値を受け取って 666 なら $mode = sprintf ("%04d",$mode); chmod ("$mode","$file"); というようにしてるのですが、時々謎の(110とか)値になってしまうのですが。。 chmod (0777,"./foo/boo"); なら大丈夫なんです 手前で適当にprintしてみても 、$mode 0777 、 $file ./foo/boo みたいにちゃんと値は設定されてるんです evalとか使わないと駄目なんでしょか? chmod (eval($mode),"$file"); じゃ駄目ですし
chmod ("$mode","$file"); ←$mode がいけないみたい 777で411になります -_-..
41 :
37 :01/09/15 00:35 ID:VWrSopAU
>>38 ありがとうございました!
空白の扱いが非常に参考になります。
とても助かりました。
>>42 ありがとう、でもこの場合どういう風に使えばよいのでしょうか?
どうも$modeの中の値が10進表記と解釈されて0777(DEC)=>1411(OCT)
で411になっている様です
sprintf とか oct を使えば良いのでしょうか
うまく逝きました。。 $mode = "777"; $mode = sprintf ("%04d",$mode); $modeoct = oct($mode); chmod ("$modeoct","$file"); でも何故かが解らないです。。 8進数の10進表記??? 謎。。。
>>44 まんま、
perldoc -f chmod
>>45 ありがとう、
$mode = '0644'; chmod oct($mode), 'foo';
だと文字になっちゃうからヤバイよと言う事かな。。
"'0644'"は駄目なんですね、難しいです。。
perldoc知らなかったです、勉強になります、ありがとうです
>>45
47 :
名無しさん@お腹いっぱい。 :01/09/15 11:59 ID:X3yJVM3Y
単発スレで怒られました、申し訳ないです。
自分でも頑張って探してみますが、質問します。
他のコンポーネントを使わずに、メールサーバを割り出す方法はどうすればいいのでしょうか?
例えば、
[email protected] の場合、メールサーバはhoge.comだったり、mail.hoge.comだったり、
MXによって変わってきますよね?その場合はどう処理すればよいのでしょうか?
Net::DNS で MX みる。 tu-kahokanokonnpo-nenntottenani
ただの変換ミスさね。
50 :
名無しさん@お腹いっぱい。 :01/09/15 13:49 ID:X3yJVM3Y
>>48 >他のコンポーネントを使わずに、メールサーバを割り出す方法はどうすればいいのでしょうか?
なので、Net::DNSは使えないです、他の方法は無いでしょうか?
じゃあ、Net::DNSがやってることをそのままやればいい。 ソースみれ。
素直に nslookup 呼び出す作戦とか。
#! /usr/local/bin/perl -wT
$addr = shift || '
[email protected] ';
$addr =~ /@([a-zA-Z0-9.-]*)/;
$domain = $1;
$ENV{PATH} = "/bin:/sbin:/usr/bin:/usr/sbin";
print "MX for $domain:\n";
@mx = (sort { $a->[1] <=> $b->[1] }
map { /preference = (\d+), mail exchanger = (.*)/; [$2, $1] }
grep /mail exchanger =/, `nslookup -type=MX $domain`);
print "$_->[0] (preference $_->[1])\n" foreach @mx;
__END__
>>53 nslookupを呼び出すのは禁止なんですよね。
困った困った。
55 :
名無しさん@お腹いっぱい。 :01/09/16 04:15 ID:D8MO0CAo
aa
56 :
名無しさん@お腹いっぱい。 :01/09/16 04:24 ID:D8MO0CAo
1 にも書いてあると思うんだが, もうちょっと「使えなくて」をちゃんと説明してくれ
あぼーん
>>56 多分、-wT は
#!/usr/bin/perl -wT
がやりたいんだと思われ。
で、use strict の使い方と意味知ってますか。
>>56 というわけで、perldoc strict かな。
>>59 良いトリップですな。
61 :
名無しさん@お腹いっぱい。 :01/09/16 14:08 ID:VeBCjLxg
fetchmailというPOPサーバからローカルスプールへメールを 取り込むプログラムがありますが、同じようにWebベースの メールをローカルスプールに取り込むperlスクリプトを作りたい のですが、それを書くのに便利なモジュールとCGIとの会話に 必要な知識が載っている資料(RFCかweb)を知っていたら 教えていただけませんか。
>>61 そんな都合の良いもんねーよ。
もっと基本からはじめろ。
63 :
名無しさん@お腹いっぱい。 :01/09/16 16:15 ID:HiUGkhyw
>>62 そうでしたか。結構CPANとかには「そんな都合のいいもの」って
思うようなものもあるので、誰かが作っているかもって思ったの
です。LWPとか使って書くしかないってことですか。
>もっと基本からはじめろ。
車輪の再発明を避けようと、似たようなモジュールがないか探した
だけで、基本に戻れってことですか?
Webmailなんてサイトによって全然違うんでは? LWP以上の何を求めてるのかが解りませんが hotmail.pmみたいなのを探してるのか。。。
65 :
名無しさん@お腹いっぱい。 :01/09/16 17:06 ID:yvDq7DHw
>>64 たしかに違いますが、大手のinfoseek, exciteくらいなら使っている
人も多いし、webメールが面倒って思って作っているひとがいるかも
って思ったので^
>LWP以上の何を求めてるのかが解りませんが
各WEBの違いを吸収してくれるモジュールがあれば…ってことです。
>hotmail.pmみたいなのを探してるのか。。。
それってあるのですか? CPANとgoogleで検索かけても見つけ
られませんでした。
だから無いってば、大体本家の仕様がかわる度に(以下略 そもそも世界中に一体何千のサービスがあって(以下略
67 :
名無しさん@お腹いっぱい。 :01/09/16 17:45 ID:MGixgscI
68 :
名無しさん@お腹いっぱい。 :01/09/16 18:46 ID:9Q.bsKq2
ttp://www.f2s.comのフリースペースに ttp://www4.tkcity.net/~elmo/accessory/wforum.htmlを設置しようと思い 、
「#!/usr/local/bin/perl」のパスを「#!/usr/bin/perl」に変更し
cgi-binとbbsディレクトリのパーミッションは755に変更。
後は以下のように変更しました。
wforum.cgi(755)
wforum.log(644)
wf_admin.cgi(755)
index.cgi(755)
1.html(644)
pastno.dat(644)
index.html(644)
title.gif(644)
jcode.pl(644)
fold.pl(644)
accesslog.log(644)
code.log(644)
ですが、どうしても「500 Internal Server Error」と出てしまい動きません。
たぶんパーミッションが間違ってるのかな?と思いますが
どう変えれば良いのかがわかりません。
誰か教えて下さい、お願いします。
ちなみにFTPソフトは「Fetch3.0.3J2」を使ってます。
70 :
:01/09/16 20:16 ID:???
>>69 つーか、 use CGI::Carp してみたら助かること多いのにね。
>>68 KCatch.pm使ってエラーメッセージ表示できる。
続きはCGIスレでやってね。
73 :
68 :01/09/16 20:53 ID:gRdNqaZI
すみませんでした。。。
74 :
名無しさん@お腹いっぱい。 :01/09/16 21:17 ID:iOe1OIlA
クッキーの内容によってアクセス拒否を行いたいんですが、 参考になるルーチンなどありますでしょうか。
無い、以上。
ココは厨房の憂さ晴らし場ですか?
>>70 確かに。
私はKCatchじゃなくてCGI::Carp派です。
書いとくか…
BEGIN {
use CGI::Carp qw(carpout);
open FH, ">> ./error.txt";
carpout(*FH);
}
クッキーの内容でアクセス拒否って クッキー切られてたら意味ない気がしたのだが
あぼーん
内容取れなくても拒否だろ。
81 :
名無しさん :01/09/17 22:02 ID:vlnxJJbs
パターンマッチで「ラーメン」など「ー」を検出しようとすると unmatched [] in regexp at ファイル名が表示されるんですけど エラーをなくすにはどうしたらよいですか?
「ラ(.*)メン」で解決しました
頻出ネタですな。 \Q \E quotemeta
ファイル移動に関する質問です $a : 移動前のファイル名 $b : 移動先のディレクトリ名 この場合、どんな風に書けばいいのか教えてください
>84 $c : 移動前のディレクトリ名 rename("$c/$a","$b/$a");
86 :
名無しさん@お腹いっぱい。 :01/09/17 23:49 ID:IPBfuQws
use File::Copy; move($a,$b);
>>84 蛇足ながら。
$a,$bはsort用の特殊変数なので
普通の用途では使わないほうがいい(かもしれない)
88 :
84 :01/09/18 07:57 ID:???
おかげさまで解決しました
カレントディレクトリ名を取得するのって どうやってやるんでしょうか?
>>89 use Cwd;
$dir = cwd();
>>90 わ。そんな簡単な方法があったのですか。
ありがとうございます。感涙です。
92 :
名無しさん@お腹いっぱい。 :01/09/18 23:27 ID:s6QOmheA
入力された文字列を80Byte以下に分割したいと思ってます。 (分割結果を個別で携帯メールに送る) 日本語文字列の分割はどうすればいいのでしょう? substr使って以下のようにすると、1byteコードが入ったところで化けます。 $max_byte = 80; $offset = 0; for($i=0;;$i++){ @mailbody[$i] = substr($mailbody,$offset,$max_byte); $offset +=length(@mailbody[$i]); if(@mailbody[$i] eq ""){ last; } } よろしくお願いします。
93 :
名無しさん@お腹いっぱい。 :01/09/19 00:24 ID:R7HmAIag
>>92 つーか、日本語は2byte(または3byte)って事知ってるか?
@と$間違うレベルじゃ多分無理だろうな。
95 :
名無しさん@お腹いっぱい。 :01/09/19 02:47 ID:qAnhwpTs
perl6からは、初心者が@と$と%間違うのは少なくなるだろう。。。。 逆に間違う古参が出てくるだろうが。
あぼーん
97 :
名無しさん@お腹いっぱい。 :01/09/19 05:36 ID:xKEtyMaE
ローカルでなが〜いスクリプト動かしたいんですけど タイムアウトしてサーバーがみつからんです。っていいます。 なんとかしてください。
>>98 ローカルで?サーバーで、の間違いでしょ?
forkして子プロセスにやらせるとか
やること記述したファイル生成して、cronに拾わせるとか
↑ アンタ甘いな、この聞き方からしてなが〜いスクリプトってのはフェイクなんだよ 良く聞いてみたらなが〜いのはもちろんhelloperlも動かない つーかHTMLも表示出来ん、Pingも飛ばねえってオチ これ基本ね
>98 ブラウザ表示がタイムアウトになっても処理は続いてる。 画面に表示されないだけ。 表示内容を見たいだけならスクリプトの最後に表示させたい内容を 外部保存するように書き換えて、あとからそのHTMLだけ開けばいい。
こんな時間にレスがつくとは!! なが〜いスクリプトってのはただ単に 入れ子になってるだけなんですけど httpdがずっと通信してますよー。ってなってて もうやめた。って感じで止まり、鯖見つからんかった事にしといてー。 ってなるんです。
103 :
じゃ・・ :01/09/19 07:24 ID:AuWg3XVU
頭でヘッダ吐いちゃえ :-)
104 :
名無しさん@お腹ごろごろ :01/09/19 14:53 ID:ZyNXuusg
Windows98+ActivePerlの環境で・・・ Perlスクリプトの設置場所とカレントディレクトリを「c:\temp」にした状態で 「c\temp\sample.txt」を「c:\temp\old\sample.txt」に移動するにはどうすれば良いでしょうか
>104 ログ見ろ! >84-86
え°? [[解決]]
107 :
コアだんぷ :01/09/19 15:35 ID:hUyzFQTQ
みんなってどれくらいでPerlとか使えるようになったの? 例えば簡単な掲示板作れるくらいのレベルに達するのにどれくらい かかった? 先日友人に1ヶ月くらいやってやっと簡単な掲示板作れるレベルになった といわれてビクーリした。そいつは仕事から帰ってずっとPerlやってたみたいなんだけど そんなにかかるの? ちなみに俺は簡単な掲示板作れるようなレベルになるまで1週間かからなかった記憶があります。 個人差もあると思いますがだいたいどれくらいでいけるもんなのですか?
108 :
P :01/09/19 16:05 ID:???
Perlに割いた時間によるでしょうね やりたいことができれば習熟度や経歴なんて関係ないよ〜 私は掲示板のアレンジは即日可能でしたが 特に目的がなかったのでその後は進歩していません
>107 Perl以外のプログラムを組んだ事あるかないかによる。 組んだ事がなくてもその知識があるかないかによる。 文系か理系かにもよる。 漏れは改造から入ったから、簡単な掲示板を1から自分で作ったのが いつだったか全然覚えてない。(ぉ
110 :
名無しさん@お腹いっぱい。 :01/09/19 17:00 ID:tAq/5NMs
すいません。掲示板の通知機能で複数のメールアドレスを指定したいとき、 $mailto = "'x_x_x@xxx','x.x.x@xxx','xxx@xxx'," こんな書き方で大丈夫でしょうか?
BBSを書いてるんですが、ログの扱いでちょっと考えてます。 2chの様に複数のスレッド(トピック)が有ってそこにレス付けて行く BBSの場合トップソート(あげ機能)の有無に関わらずログの整理が 必要ですよね。 多くの掲示板みたいに open (FH,"./log.txt");@log = <FH>; ってやるのは少し気が引けます もし while (<FH>) で何とかしたいとしたら、ここみたいに スレッド毎にログファイルとsubject.txtみたいなテキストを用いる しか無いんでしょうか。 ログファイルが増えるのもちょっとなぁ と思ってるんですが・・・
↑の4行目 @Mailto = ('〜以下省略〜');ですよ。「=」抜けてました(汗々)
114 :
名無しさん@お腹いっぱい。 :01/09/19 23:11 ID:RdNP37os
>>110 のでもいいんじゃないかな?
To: mail_addr@host, nail2@host, ...
で送れるでしょ。
ただ、ダブルクオートでくくると、変数展開がまずいことにならないかな。
$mailto = '"x_x_x@xxx","x.x.x@xxx","xxx@xxx"';
の方が安心かも。
115 :
114 :01/09/19 23:15 ID:RdNP37os
サッキノとリケシー。 動かしているスクリプトの処理によっては、えらいことになりかねない。
116 :
110 :01/09/20 00:32 ID:xeOjatSc
117 :
名無しさん@お腹いっぱい。 :01/09/20 04:24 ID:tvjA6dmg
前板(現レンタルサーバ)でのチャットスレがとても勉強になると聞いたんですが 探しても見つかりませんでした。 どこで見られますか?
118 :
924 :01/09/20 04:48 ID:???
>>116 perlじゃなくて、sendmailの仕様の話だろ
2つの配列同士から同じ要素含んでないか調べるのって どうやるんですかーー? ちなみにgrepって検索文字に変数使えないんですか? 例えば grep ~ /$hoge/,@kensakutaisho; みたい$hogeつかえないのですか?
あぼーん
121 :
らすかる :01/09/20 07:50 ID:MTc8pgUs
今掲示板のスクリプト書いてるんですが スクリプトを1つのファイルにまとめるか複数に分けるか悩んでます。 エラー処理のところなどを別ファイルにしようかと思うのですが やはり複数に分けた方が処理は軽くなるのでしょうか? それとも複数でも全てを1つのファイルにまとめても大してかわらないのでしょうか?
122 :
名無しさん@お腹いっぱい。 :01/09/20 07:56 ID:o56tunDA
web上でcgiからcgiを作るって危険なんですか?
map {$ck{$_}++} @a1; @a3 = map {$ck1{$_}} @a2; @hits = grep {$_ =~ /$hage/} @search_target; ↓ @hits = grep {/$hage/} @search_target; ↓ @hits = grep /$hage/,@search_target;
>121 ログを1ファイルで管理する場合は保存件数を制限するだろ? 複数ファイルで管理するとそれを探すステップが必要なので 入門レベルで処理の重い/軽いを気にするなら1ファイル管理がいいと思うが? >122 作るcgiの完成度と作られるcgiの内容による
>>119 条件によっていろいろなので一概に言えない。
@dupe = grep {$tmp{$_}++} @array1, @array2
>>121 分けたほうが遅くはなるけど、たいして変わらない。
分けるなら読み込みのスクリプトと、書き込みのスクリプトで分ける。
2chもそうだよね。
$ENV{'QUERY_STRING'} = 'name=hogehoge&year=22&sex=men&pass=77777'; だったとして @querys = split (/&/,$ENV{'QUERY_STRING'}); foreach (@querys){   ($name,$value) = split (/=/,$_);   $fromin{"$name"} = $value; } これは理解出来るとして、 @querys = split (/&/,$ENV{'QUERY_STRING'}); foreach (@querys){   ($name,$value) = split (/=/,$_);   $fromin{"$name"} = $value; }   $name = $formin{name};   $year = $formin{year}; これは何故? 殆どの配布スクリプトがこんな感じ なんですけど、、何で @querys = split (/&/,$ENV{'QUERY_STRING'}); foreach (@querys){   ($name,$value) = split (/=/,$_);   unless ($name =~ m/^(name|year|sex|)$/){next;}   $$name = $value; } これで済ませないの?
右へ倣え。 もしくは、盲目的「ソフトリファレンスは使うな」。 もしくは、マッチの負荷を気にしている。 つーか、ハッシュのままでいいじゃん。
128 :
127 :01/09/20 15:52 ID:???
ごめん。s/ソフト/シンボリック/
129 :
名無しさん@お腹いっぱい。 :01/09/20 16:21 ID:UtkSX9Kc
>>126 なんかスクリプトの中にパラメータを
>m/^(name|year|sex|)$/){next;}
って書くのはマジックナンバーの埋め込みみたいに
感じるんですけど。メンテナンスが面倒になりませんか?
130 :
126 :01/09/20 16:34 ID:???
即レス感謝〜 一番の理由はマッチングのコストなのかな、、 シンボリックリファレンスは多用すると参照先が曖昧になってしまうから 上級者さんが、使うなー って言ってるんですよね >メンテナンスが面倒になりませんか? これは上の例の2つ目でも同じ事ですよね 例えばaddを足したら $add = formin{add} を足さないといけないという部分では 色んなスクリプト読んでるんですが、何故か2つめのやり方が凄く 多いんです。で、3つ目は一度も見た事無いんで、何か落とし穴でも 有るのか、それともこう言う基本部分のリファレンス?みたいなのが どっかに有って、みんなそれをコピーして使ってるのかな と思ったんです perlってほんと色々な書き方が有って困ってるのに この部分だけ判子押したように同じだったんで。。。
131 :
名無しさん@お腹いっぱい。 :01/09/20 16:46 ID:X2sVnNMY
たしかに2番よりは3番の方がいいかも知れん。 マジックナンバー(マジックストリング?)なんてどうにでもなるし。 ただ、入力データだということをハッキリさせたいのでハッシュの方がいいとは思うが。 そんな俺は自作のCGI::Queryで$q->param("foo")だけど。
E-mailアドレスとURLをチェックする正規表現教えてください。
133 :
名無しさん@お腹いっぱい。 :01/09/20 17:00 ID:zGNHdu/.
134 :
119 :01/09/20 17:41 ID:???
>>123 >>125 どうもありがとです。
それで試してみます。
123の矢印は省略可って事ですよね?
>>132 どっかのサイトにあったなぁ。
メアドも例外みたいのがあってそれをはじかず
変なアドレスだけをはじいていくってやつが。
ちなみに超長かった。
例外考えないと
if($email !~ /[\w\.\-\&]+\@[\w\.\-\&]+\.[\w\.\-\&]/){&error("メアド変");}
($siteurl !~ /^https?:\/\/[\w|\:\@\-]+\.[\w|\:\!\#\%\=\&\-\|\@\~\+\.\?\/]+$/i){&error("URL変");}
か?
135 :
119 :01/09/20 17:41 ID:???
if($email !~ /[\w\.\-\&]+\@[\w\.\-\&]+\.[\w\.\-\&]/){&error("メアド変");} elsif($siteurl !~ /^https?:\/\/[\w|\:\@\-]+\.[\w|\:\!\#\%\=\&\-\|\@\~\+\.\?\/]+$/i){&error("URL変");} だ。
Perl上級者って名乗れるのはどれくらいになってからですか?
137 :
名無しさん@お腹いっぱい。 :01/09/20 18:18 ID:JzJOOdyA
>>136 とりあえず自分で上級者って言わない奴。
>>136 Inter National Perl Coding Qualification (INPCQ)
Master クラスを取得してから
>>136 Perlを使いこなせるようになってから
140 :
136 :01/09/20 18:39 ID:???
>>138 googleで検索しましたが情報がありませんでした。
どのような資格(?)なのですか?
おしえれ。
初級:モジュールを理解し、汎用的なサブルーチンをモジュールに追い出す 中級:CPANにモジュールを登録し、Perl文化に貢献する 上級:Perlのコアの開発に携わる 神:ラリーウォール
絶対神:KENT
>141 げ。どうしよう。初級者じゃん俺。もっとヘボいと思ったのに俺。
俺も興味有るなあ
kent 照りカット
148 :
名無しさん@お腹いっぱい。 :01/09/20 23:45 ID:dlBnP3mg
Perl初心者が学習用に見るなら、どのスクリプトがおすすめですか?
149 :
名無しさん@お腹いっぱい。 :01/09/21 01:45 ID:D8Pk/8eM
二つの配列から同じ要素を見つけて その要素以外を記録する方法がやはりわかりません。 というかうまく動きません。 これだ!というのがあれば教えてください。
150 :
名無しさん@お腹いっぱい。 :01/09/21 02:05 ID:DP/oQEFM
>>149 @a = (1,2,3,4,5,6);
@b = (2,4,6,8,10);
foreach (@a) {$hash{$_} = ""}
foreach (@b) {exists($hash{$_}) ? delete $hash{$_} : print "$_\n"}
foreach (keys %hash){print "$_\n"}
ぱっとしないけど。
151 :
149 :01/09/21 02:16 ID:D8Pk/8eM
どうもありがとう! 今自分でアイデア出てやっとこさ作れたけどその 数倍長いよw いや親切さん多くてうれしいですね。どうもでした。
152 :
150 :01/09/21 02:18 ID:DP/oQEFM
@a = (1,2,3,4,5,6); @b = (2,4,6,8,10); foreach (@a, @b) {$hash{$_}++} # 重複してるの foreach (sort keys %hash) {if ($hash{$_} >= 2) {print $_, "\n"}} # 重複してないの foreach (sort keys %hash) {if ($hash{$_} == 1) {print $_, "\n"}} こっちのほうがええかも
Perl5.005.3と5.6でなぜ結果が違うのか教えれ。 #!/usr/bin/perl $message = "Hello"; print "子プロセスを起動....\n"; $pid = fork(); if($pid < 0){ die("子プロセスの作成に失敗しました。\n"); }elsif($pid == 0){ $message .= " World"; print "\$message = $message\n"; exit(0); } wait(); print "\$message = $message\n"; exit(0);
Perl5.6 ./log.plでも./log.pl > logfile 子プロセスを起動.... $message = Hello World $message = Hello --------------------------- Perl5.005.3 ./log.pl 子プロセスを起動.... $message = Hello World $message = Hello ./log.pl > logfile 子プロセスを起動.... $message = Hello World 子プロセスを起動.... $message = Hello
>>154 せめて環境くらい書いたらどうだ、ヴォケクァス君!
>>155 のアホ
HP-UXだボケ。
ま、おまえにはわからんだろ(嘲笑)
>>153 -154
(´-`).。oO(仮にもPerl上級者なら、考えるまでもないと思うが・・・)
ばっふぁ。
>>158 (´-`).。oO(仰せのままに・・・・)
# fork()が何をするか、どういったバッファリングが行われるか
# 分かっていれば、何も難しくない。
>>154 -160 ふーんなるほど。ひとつ賢くなった。
こんなことないとperldelta読まない俺は逝ってよしですか。
あぼーん
全然わからん。ちゃんと説明しろ。 素人ども。
164 :
7743 :01/09/21 04:41 ID:0C1HqUNw
UNIXサーバーのcドライブにアクセスしようとする奴になんかいいメッセージをおくってやる方法ねぇかな?
(0) 前提(おおまか) 標準エラー出力以外のストリームは、端末など対話的装置に対しては 行バッファリング(バッファが一杯になるか、改行文字によって書き出す)、 そうでない場合は完全バッファリング(バッファが満杯になって初めて 書き出す)を行う。 (1) ./log.pl の場合 この場合は行バッファリングが行われる。 > print "子プロセスを起動....\n"; (*1) 改行文字により、バッファが標準出力に書き出される。 後はコード通りの(思った通りの)動作をする。 #-------------#
(2) ./log.pl > logfile の場合
この場合、標準出力は端末ではないので完全バッファリングが行われる。従って、
> print "子プロセスを起動....\n"; (*1)
では標準出力に書き出されない。(->バッファへ)その後、
> $pid = fork();
fork()呼び出しによって親のプロセスイメージが複製される際、親の
バッファも同時にコピーされる。(...まあ、大抵"copy-on-write"
だろうけど)
そして、子プロセスがprint "...", exit()した際に
> 子プロセスを起動....
> $message = Hello World
...と、子プロセスのバッファが書き出され、親と子の共有するカーネル空間の
ファイルテーブルのオフセットが更新される。
そして、親は子の死を確認した後、同じくprint "..."; exit()し、更新された
オフセット値から、自身のバッファ
> 子プロセスを起動....
> $message = Hello
を書き出す。...単にこれだけ。
#-------------#
Perl5.6からはfork()の際に自動的に全てのバッファをフラッシュするよう
変更されたため、プログラム作成者の意図通りに(*1)の部分で標準出力
バッファが書き出される。(後の動作は(2)と同じ)
従って、
>>153 -154のような違いが生じた。
167 :
7743 :01/09/21 04:49 ID:0C1HqUNw
cドライブを探したがるウイルスは、どういう仕組みになってるんすか?
間違えた。
>(後の動作は(2)と同じ)
じゃない。(大体分かると思うけど)
(´-`).。oO(Zzz・・・・おやすみ
>>163 )
「バッファをコピー」するからか。 なるへそ。
>>169 Perl上級者の理解力が急に増したのかと思った。
紛らわしいハンドルつけるなゴルァ
>>164 アクセスしてくるURLと一致するファイルをサーバ上に作れば
いいんでない? "c:"で始まるファイル名で。
171 :
名無しさん@お腹いっぱい。 :01/09/21 05:39 ID:DP/oQEFM
ここのスレッドの住人て 他にどんな言語が使えるの?
172 :
名無しさん@お腹いっぱい。 :01/09/21 09:40 ID:5isnB2us
モジュールってなんですか? どうやってインストールするんですか? どうやって使うんですか? なんかモジュールなんて知ってて当然みたいな説明ばかりで 基本的なところがわからない 検索したら、モジュールの作り方とか出てきて涙
173 :
名無しさん@お腹いっぱい。 :01/09/21 09:54 ID:aEvmZgeQ
174 :
名無しさん@お腹いっぱい。 :01/09/21 09:57 ID:5isnB2us
あとCPANもよくわかんない。CPANからもってこい、CPANから ダウンロードしろとか、なんかやっぱりCPANも常識なんですよね? なんかすげぇバカなこときいてるんだろうなぁ…
175 :
名無しさん@お腹いっぱい。 :01/09/21 10:12 ID:5isnB2us
176 :
名無しさん@お腹いっぱい。 :01/09/21 10:13 ID:5isnB2us
うわ。我ながらすげー頭悪い書き方してるな でもなんかもうなにがなんだかわかんないんです
178 :
177 :01/09/21 10:15 ID:???
なんでこんなに遅れて二重投稿(鬱
179 :
名無しさん@お腹いっぱい。 :01/09/21 10:30 ID:j0KdAUa.
>>174 -176
皆おなじ道をたどってきたのさ。。。
WindowsのActivePerlを使ってるなら、CPANからもってくるより
ActivePerlのサイトからPPMつうのでダウンロードするほうが
簡単な場合が多いよ。
ただPPM形式になってるのはメジャーなモジュールだけだから
有名じゃないモジュールはCPANを利用するしかない。
今インストールしてみたいモジュールは具体的に何かあんの?
あぼーん
181 :
名無しさん@お腹いっぱい。 :01/09/21 12:32 ID:5isnB2us
>>179 ありがとうございます。涙。
今ほしいのは、MP3ファイルのタグを操作(主に読み込み)する
ためのモジュールです。
MP3-infoってのを見つけたのは良いのですが、これを
どうすれば???みたいな状態です。
Makefile.PLがあって、Makefileを作る、ってのは成功したものの、
makeなんて持ってないよ?という
>>181 ActivePerlならコマンドプロンプトから
ppm install MP3::Info
ってやればOK。
183 :
名無しさん@お腹いっぱい。 :01/09/21 15:09 ID:5isnB2us
>>182 ありがとうございます。使っているのはActivePerlです。
さっそく実行してみたところ、
Error installing package 'MP3::Info': Could not locate a PPD
file for package MP3::Info
というエラーになってしまいました。
C:\> ppm install MP3::Info
と、
C:\> ppm
PPM> install MP3::Info
両用やってみました。
>>183 むぅ。俺はそれでinstall出来たんだが。
ひょっとしてfirewallの中からのアクセス?だったら
set HTTP_PROXY=
http:// (Proxyホスト名):(Proxyポート)
ってやってppm使ってみて。
>>184 >で、PPMPackageはデリミタ(::)指定じゃないです。
そうなの?俺は :: でも出来たが・・・・。(今試したら、- でも出来た)
VineLinuxにActivePerl入れて試してみたけれど、::でおっけいだったよ。 というか、ppmは中で $package =~ s/::/-/g;としているから、デリミタの問題ではなくてtypoか何かじゃないかなあ。
188 :
名無しさん@お腹いっぱい。 :01/09/21 18:44 ID:nYoU2cMw
ファイルロックではどんなのがありますか? 普通はflock使いますか?
うん。
190 :
名無しさん@お腹いっぱい。 :01/09/21 19:03 ID:TAJp9wyQ
JavaScriptで、onload=で複数のスクリプトは起動できないの? できるとすればどうやって書けばいいの?
板違い。
192 :
名無しさん@お腹いっぱい。 :01/09/21 19:35 ID:TAJp9wyQ
失敬パールだった。
193 :
名無しさん@お腹いっぱい。 :01/09/21 20:36 ID:RIYGknmQ
>>184 -186 わーーーーー。入った。入りました。
ありがとうございます。typoだったのかな?
とにかく嬉しい! 感謝感激です。
194 :
名無しさん@お腹いっぱい。 :01/09/21 20:42 ID:ziETu.IM
Apache::Sessionなんですが、 セッションのタイムアウトを実現するために、 Apache::Session::MySQLでセッションテーブルに TIMESTAMPフィールドを置いて、cronでスクリプト走らせて 一定時間以上前のものを削除しています。 こういうようなことを、Apache::Session::DB_Fileでやるには どうしたらいいんでしょう?
>>184 -187 でした。番号間違い。すみません。
さーがんばるぞー!
>>187 PPM見たけど、s/::/-/な部分が見当たらなかった。
ポインタ示していただけるとありがたいです。
>>196 あ、もしかしたらWindows版のppm.batを見ていませんか?
$ grep "s/::/-/" -n /usr/local/ActivePerl-5.6/bin/ppm
111: s/::/-/g;
164: $package =~ s/::/-/g;
190: $package =~ s/::/-/g;
>>196 Win版なら
C:\Perl\bin\ppm
の107行から(バージョンにより行は多少変わると思うが)
for (@ARGV) {
s/::/-/g;
}
と有ります。ppm.batにも同様に120行から
for (@ARGV) {
s/::/-/g;
}
と有ります。
あぼーん
200 :
196 :01/09/21 23:37 ID:???
>>197 -198
ありがとう。
自分、CygwinPerlでしかも入れてないんで、
PPM-*.tar.gz持ってきてその中身見てました。
201 :
149 :01/09/22 04:45 ID:ZYiZZlao
>>152 レスおそくなっちゃいましたけど。
わざわざありがとうです。
202 :
マヌケ初心者 :01/09/22 05:32 ID:gUO1IwS2
すみません apeボードのスキンを作っているのですが 強制改行させるにはどうしたらいいのでしょうか? 幅500の別ウィンドウに板を表示させてるのですが 改行せずに書き込まれるとマヌケに横に伸びてしまいます そんな事もしらない俺がマヌケなのは重々承知しています どなたか教えて頂けませんでしょうか? 宜しくお願い致します
204 :
名無しさん@お腹いっぱい。 :01/09/22 09:14 ID:YFImM5JM
初歩的でごめんなさい。 Perlでスクリプト書いて、ファイル名の拡張子を 「.pl」と「.cgi」どちらにしたらいいんですか? どちらでも一応同じ動作をするんですが・・。 何か使い分けなんでしょうか・・・・汗
>204 サーバーによる。 サーバーの関連付けの設定で「.pl」でCGIが起動できない所もある。 そういう事があるから、閲覧者が直接参照する方が「.cgi」で、 ライブラリとかが「.pl」なんじゃないかと俺は考えてる。 あくまで憶測。
206 :
マヌケ初心者 :01/09/22 09:47 ID:1q1.uifg
>203 レスありがとうございました おっしゃる通りスキンでなんとか・・と思ったのですが widthで幅きめても結局書き込む時に改行されなかったら 横にのびちゃうんですよ 色々調べ回って他のテスト板試してみたんですが どれも伸びてました(w 紹介して頂いたサイト見てきます ありがとうございました。
207 :
204 :01/09/22 10:02 ID:???
>205 ありがとうございます。 少しずつ勉強したいと思います
208 :
名無しさん@お腹いっぱい。 :01/09/22 12:11 ID:EJpCVqks
<list> <data>〜</data> <data>〜</data> … </list> というデータをXML::Generatorで作ろうと思っています。 与えられたデータ1行→<data>〜</data>に変換、で、 print "<list>"\n while(<>){ my $xml = new XML::Generator; $xml->data(…); } print "</list>"\n のような処理を考えたのですが、これで良い物でしょうか? 不安なのは、while()の中でnewして良いのかなぁ? freeとかってしなくてよいのかなぁ?という点です。 #根本的にかっちょわるいことしてたらやだなぁとも思う
>>208 ガベージコレクターがあるので問題なし。
ちなみに new なら delete でしょ?
210 :
名無しさん@お腹いっぱい。 :01/09/22 16:24 ID:EJpCVqks
>>209 なるほど。そうだったのですか! それなら安心です。
そして、newに対応するのはdeleteなのですね。恥。
211 :
- :01/09/22 16:41 ID:X9qGQ5PU
ディレクトリ下(含サブディレクトリ)にある全ての*。htmlを パス名付きで取得するにはどうやるんでしょうか???
>>212 自分の番号をアドレスに入れようとして失敗
214 :
名無しさん@お腹いっぱい。 :01/09/22 16:58 ID:u4MHoQsY
モジュールがインストールされているかどうか調べるのって どうやるんでしたっけ? perl -e 'use LWP::UserAgent;' とかやってエラーなければインストールされてるって判断して いいんでしょうか?
215 :
名無しさん@お腹いっぱい。 :01/09/22 17:55 ID:bcGEWw7s
今WindowsにPerl入れて勉強してるんですが Windows上で動かしているとflockとか使用できませんよね flock以外にもWindows上だと使用できないものってありますか?
たくさんあるんじゃない
217 :
名無しさん@お腹いっぱい。 :01/09/22 18:12 ID:UPWBdois
>216 Windows上のPerlとかでsubstrとかって使えんの?
218 :
名無しさん@お腹いっぱい。 :01/09/22 18:18 ID:.Ro0S1Bw
大文字小文字を区別しないでソートする処理を 一行で書くにはどうすればいいですか?
>>211 use File::Find;
find sub { push @list, $File::Find::name }, ".";
>>214 perl -MLWP::Simple -e 'print $LWP::Simple::VERSION'
perldoc LWP::Simple
等。
>>215 WinNT/2000ではflock使える。
環境限定されるものは他にもある。
>>217 問題無い。
220 :
名無しさん@お腹いっぱい。 :01/09/22 18:23 ID:B3IfreL6
>>211 use File::Find;
find sub { push @list, $File::Find::name if /\.html$/ }, ".";
>>218 map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { [$_, lc] } @list;
>.221 ありがとう。想像してたよりムズカシー
223 :
名無しさん@お腹いっぱい。 :01/09/22 19:38 ID:u4MHoQsY
htmlから <img src="〜">を探してリストにするというスクリプトを 作ろうとしているのですが、長いページになると止まってしまいます。 正規表現で扱える文字長って最大値が決まってるのでしょうか。 while( $str =~ /(<img [^>]*src="?)([^"]+)("?.*?>)/isg ){ $tag1 = $1; $img = $2; $tab2 = $3; $str =~ s/$tag1$img$tag2//i; print $img. "\n"; } 1行1行処理すれば問題ないのですが、 <img src="〜"> というようなものもあるので
224 :
223 :01/09/22 19:48 ID:u4MHoQsY
>>223 すいません
while( $str =~ /(<img [^>]*src="?)([^"]+)("?.*?>)/isg ){
じゃなくて
while( $str =~ /(<img[ \r\n][^>]*src="?)([^"> ]+)("?.*?>)/isg ){
ですね。最初の<imgから最後までひっぱってた。^^;
馬鹿長いページでエラーが起きるのは同じです。
>>223 それの原因はわかんないけど
タグ抜き出しツールを作るならHTML::Parserつーのも便利。
use strict;
my $file = "hogehoge.html";
my $parser = MyParser->new;
$parser->parse_file($file);
package MyParser;
use base 'HTML::Parser';
sub start {
my ($self, $tag, $attr, $attrseq, $text) = @_;
if ($tag =~ /img/i) { $text =~ tr/\r\n//d; print "$text\n"; }
}
>>226 おぉ、そんなものがありますか。感謝です。
ついでといってはなんですがディレクトリを扱うのに便利な
モジュールってありますでしょうか。
たとえばサブディレクトリを一度に削除できるようになるやつとか。
通常だと最下層から順番にやっていかなきゃいけないから。(´∈ ` )
>>227 use File::Path;
rmtree($root, 0, 0);
229 :
名無しさん@お腹いっぱい。 :01/09/23 00:45 ID:SMJO237A
>>228 なるほど、File::Pathでしたか。
せんきゅですっ!
>>223 -224
についてコメントした方がいいかな...どうだろ。
もちろんですっ!
>>230 色んなアプローチを示すのは良い事だと思うが。
あ...寝るところだった。
>>223 -224さんの言う
>長いページになると止まってしまいます。
というのは、およそ二つの原因があるんじゃないかと。
例えば、下のスクリプトが何故"*"ではなく"**"と表示するのか...とか。
-------------------------------------------
#!/usr/local/bin/perl
our $string = "<<tag>tag>";
while($string =~ /<tag>/g){
$string =~ s/<tag>//;
print "*";
}
print "\n";
-------------------------------------------
>例えば、下のスクリプトが何故"*"ではなく"**"と表示するのか...とか。 ...って当たり前だな。眠いけどまとめてみます。
235 :
名無しさん@お腹いっぱい。 :01/09/23 02:00 ID:uXqIVwdQ
$/ = "<"; s/^img //i and push @imgs, /src="?([^"\s])"?/i while (<>); とか。
236 :
腐ったソース大好き :01/09/23 02:02 ID:uXqIVwdQ
$/ = "<"; while (<>) {/^img /i and push @imgs, /src="?([^"\s]+)"?/i } か
んー、、ラストインなんちゃらでしたっけ この手のは何時も試行錯誤で結果オーライなんだよなー _gunzipさんはエンジンのソース読んでるんだろな・・・ (´-`).。oO(あたまいたい。。。)
あ、糞レスだ。 ありがとッス、考えて見るッス (´-`).。oO(ってまた糞レスだ。。)
すみません。みなさん。 アパッチでperlを動かすには どのような設定が必要なのでしょうか?
漠然としすぎ、つーかしばらくコマンドで遊べよ。 そんな感じで追加質問が延々と続くパターンはたまらんよ 簡単に言うと httpd.confってファイル弄ってexecCGIするんだ 検索すれ
>>239 Apacheで[Perl]が動くって・・・。
別にPerlがインストールされていればApacheの有無に関係ないですけど。
CGIならスレ違いだかんね。
# ここんとこperlの質問で良い感じに流れてる気がする。
242 :
名無しさん@お腹いっぱい。 :01/09/23 03:51 ID:EZbM3lIs
>239 検索すればすぐに出てくるからおとなしくgoogleでも逝ってなさい
243 :
239 :01/09/23 05:41 ID:???
具体的に言うと httpd.confの 設定はどうすればいいか? です。 でもここはperl言語についてのようなので、スレ違いのようですな。
みなさん。 ありがとうございました。 httpd.confにExecCGIをつけて動きました。 ありがとうございました。m(_ _)m
245 :
名無しさん@お腹いっぱい。 :01/09/23 11:43 ID:IRukl05.
Windows上のPerlで下記の簡単なスクリプトを動かそうとしているのですが 動きません。間違ってはないと思うのですが・・・ unlink("*.*"); rmdir("*.*"); print"Content-type:text/html\n\n"; print<<EOF; <html> <head> <title>デリート</title> </head> <body> <BR><BR><BR><CENTER> 消しちゃいました〜(゚▽゚=)ノ彡☆ギャハハ!! </CENTER> </body> </html> EOF exit; 上の方にもありますがWindowsME上のPerlではunlinkが使えないって ことはないですよね? それともunlinkとかrmdirに*って指定できないんですか? とっても初心者な質問ですがお願いします。
246 :
245 :01/09/23 12:19 ID:IRukl05.
補足ですが下部のHTML部分は付け足しただけですので実際に使うときは HTML部分はありません。
ワイルドカードなんて使えたっけ?
globなら使えるけどね。他は無理でしょ。
というわけで
>>245 は
unlink(glob('*.*')); または unlink(<*.*>);
に修正しる。
while() 内はboolコンテキスト(スカラーコンテキストの一種)で評価されるため、 m//gは前回マッチした位置をmagicメンバ(これはリンクリストとして実装されている。)に記憶しておき、次回からはそのオフセットから検索を開始する。 マッチに失敗するか、文字列の内容に対する破壊的動作(代入その他)が行われた場合などは、オフセットを文字列の先頭に巻き戻す。 このことを知っていれば、 ------------------------------- our $string = "target string"; while($string =~ /target/g){ my @a = ( $string =~ /another/g ); } ------------------------------- が無限ループになることがすぐに分かる。 例えば、>233のスクリプトで実際のところ何が起こっているかというと、 (下の[][]..[]はメモリ内のイメージ。('\0'は除く)offsetはSv-PVMGのIVスロットの値、 lengthはlenメンバ、matchはmagic.mg_lenメンバのこと。) -------------------------------------------------------- | $string = "<<tag>tag>"; -------------------------------------------------------- $string = ['<']['<']['t']['a']['g']['>']['t']['a']['g']['>'] | offset = 0 #バッファ領域内の文字列開始オフセット | length = 10 #文字列の実際の長さ | match = -1 # $stringに対するマッチの開始オフセット % メモリ確保のオーバーへッドを抑えるためにPerlは予め余分に % バッファを確保するが、ここでは割愛する。 ------------------------------------------------------- ------------------------------------------------------- | while($string =~ /<tag>/g){ # 一回目のループ開始 ------------------------------------------------------- $string = ['<']['<']['t']['a']['g']['>']['t']['a']['g']['>'] | offset = 0 | length = 10 | match = 7 #次回のマッチ開始位置が更新される % $string の2-6文字がマッチしてリターンする。 -------------------------------------------------------
------------------------------------------------------- | $string =~ s/<tag>//; ------------------------------------------------------- $string = ['<']['<']['t']['a']['g']['<']['t']['a']['g']['>'] | offset = 5 #更新される。上の6セル目に注目。 | length = 5 #当然短くなる。 | match = -1 #オフセットがリセットされる % s///による置換。 % s///によって部分文字列が削除される際、Perlはマッチした個所の % 文字列における位置を調べて、バッファを移動させる量が少ない方を採る。 % この場合、マッチしなかった先頭文字の'<'を5バイト後ろにずらし、 % バッファ先頭からの文字列開始オフセットを5に設定する。 % また、マッチの開始オフセットがリセット(-1)され、次のwhile() % ループのマッチは、文字列の先頭位置から始めることになる。 ------------------------------------------------------- ------------------------------------------------------- | while($string =~ /<tag>/g){ #二回目のループ開始 ------------------------------------------------------- $string = ['<']['<']['t']['a']['g']['<']['t']['a']['g']['>'] | offset = 5 | length = 5 | match = 5 #次回オフセット(文字列終端) % matchの値に従い、**文字列の先頭から**検索を開始し % マッチは(始めの予想に反して)成功する。 ------------------------------------------------------
よく寝た....もう昼じゃん。
>>223 さんの「非常に遅くなる」というのは、理由が二つ考えられるけど、
((( っていうか、なぜs///の部分が入っているのかなあ.....。
....もしかして、while($string =~ /pattern/g) だと、前回マッチした部分文字列が
残っているので、次回もその部分がマッチし無限ループになるのではないかと思ったのかな?
それで、s///でその部分を取り除いておかなくては、と考えたのだろうか?
もしそうなら、m//gはスカラコンテキストでは前回のマッチ位置を記憶しておいて
次回はそこから検索開始するので,while()内にいれても特に問題はないってことは
知っておいて欲しいな。 )))
>長いページになると止まってしまいます。
から思うに、(余計な)s///の副作用(*注)で毎回検索開始位置がリセット(上の例参照)
されるため、毎度文字列の初めからマッチを開始せねばならず、また、置換に伴う
バッファの移動も大量に行われるようになる。その結果、ファイルが大きくなるにつれて
莫大な時間がかかるようになる、というのが原因の一つ。
(*注) $stringへのs///, 左辺substr(),代入などの破壊的操作だけではなく、
単なるm//gパターンマッチだけでもwhile()内のm//g検索オフセットはクリアされる。
他の原因として考えられるのは、
$strに対して、さらに何か手を加えている。#-->無限ループ
| pos($str) = 0 #オフセットを明示的にリセット
| substr($str,0,0) = "hoge"
| $str .= "text"
while()ループ内のs///に'g'修飾子が付いている。#->無限ループ
$str内に'\n', '\w', '\G' 等のキャラクタがあり、s///の所でなにか副作用でも起こしている。
#-->データ見ないことには判断できない。
けつろん
while($string =~ /PATTERN/g)ループの中での$stringの扱いには少し注意して欲しいなあ、
ということです。(単なる読み出しは全く問題なし)
っていうか、
>>223 の場合は6行めのs///を削除すればいいだけのような。
(結局言いたいことはこれだけ.....)
--------------------------------------------
ちなみに、自分はHTML::LinkExtorモジュールの利用を勧めておきますね。
#!/usr/bin/perl
use HTML::LinkExtor;
HTML::LinkExtor->new(\&ext)->parse_file('./index.html');
sub ext
{
my($tag, %attr) = @_;
if( lc($tag) eq 'img' ){
print $attr{src} , "\n";
}
}
順番狂ってる....。 our $string = <<'END_OF_STRING'; <img src="/usr/local/pixmap/title.png"> <img src="./cap.gif"> END_OF_STRING while($string =~ /<img[^>]+?src\s*=\s*["']?([^'" >]+?)[ '"]?>/gis){ print $1, "\n"; }
>>250 -254
なるほどねぃ。
ためになる話をありがとう。
なる!_gunzipイイ(・∀・)♪
_gnuzip = この板最強 ↑ですか?
このスレッドのpart2ぐらいからいるね。最初はAA貼ってて痛い人だたけど。
痛い人とはなんだ (´Д`;) 実際_gnuzip JAPU両氏のお陰で厨房な俺は随分勉強になってるぞ 特に、コンパイラ読んでるらしい発言はメチャクチャ参考になるよ Efectiveの脱線話読んでるみたいでとっても いい(・∀・)
260 :
223 :01/09/24 01:22 ID:39bTpAKQ
>>252 あ、 s///; っていらないんですか。
無限ループるかと思ってました。ありがとうございます。
HTML::LinkExtor調べてみます!
261 :
名無しさん@お腹いっぱい。 :01/09/24 01:29 ID:o1YS9rTQ
スレ違いは重々承知ですが、 このスレに主に住んでいるのでここで質問させて下さい。 作ったページを表示するとエンコードが西ヨーロッパに なってしまいます。 <HTML lang="ja"> などと入れても問答無用です。 ちなみにブラウザはIEです。 何か良い方法はあるのでしょうか?よろしくお願いします。
>261 どこに住んでいようと関係ない。 然るべきスレに逝け。 このスレに引き篭もるな。
引越し準備ととのいましたぁ〜〜;; いってきまふ・・・。
いい場所がみつから〜ん!
みつかった。 それにしてもこの板人すくなぁ〜…。
漏れも西ヨーロッパになるなあ、気にしないけど w 実際の所HTMLだけで文字コード100%指定するのって不可能なんだよね charsetの手前でブラウザがコード決め撃ちしちゃったらそれまでだったりして・・ 昔はS_JISならheadより手前に<!---あ--->なんておまじないも有ったけど CGIだったらHTTPヘッダでContent-type指定してやればマシになるのかなぁ 漏れは中国語サイトを良く見るんでaccept-languageをch-1.0とかしてるのが 悪影響と思ってるけど。。。 激しくすれ違いだからSAGE
CGIだと仮定してみる。 Content-Type: text/html; charset=Shift_JIS 等。 スレ違いだが、まぁ。
htmlの最初のほうにコメントでその文字コード特有の文字を入れておくとか。 gooのホームページはそうだよね。 でもすれちがいなので下げ。
269 :
名無しさん@お腹いっぱい。 :01/09/24 02:59 ID:08MV7o4s
その割にgooは文字化け率高いけどな。 トップのスレを下げてもしょうがないのであげ。
270 :
:01/09/24 03:32 ID:???
ちょっと漠然としていますが、エラー処理について質問です。 編集前の状態 ファイルA=>0 ファイルB=>0 編集後の状態 ファイルA=>1 ファイルB=>1 こんな感じの処理をする時にファイルBの編集中に例外やSIGTERM喰らって 処理が中断してしまった時ファイルAを0に巻き戻すような処理を行いたいのです。 つまりファイルAとBの時系列の同一性を保ちたいんですが(これって何って呼ぶん だったかな、、んー) イメージ的には2chだと、パラメータの汚染チェックが通れば次々ファイルを処理 して行く訳ですが、最終段階のindex.htmの書き換え中にコケてしまうような状態です 例えばショッピングカート等、お金の絡むプログラムだと、これが致命的な欠陥に なると思うんですが、、中々自分では上手く行きません。 参考になる考え方や本なんかは有りますでしょうか。
んー われながら解りにくい日本語だ。。(-_-... 2chだと あるスレにカキコがあると datに追記→subject.txt書き換え→テンポラリHTML書き換え→index書き換え これだけ作業する訳ですが、どれかの更新中にこけてしまうと それぞれのファイルは不整合をおこしてしまいます。 これを、全ての工程が成功して初めて書き換える、と言う感じで行いたいのです。 今の所テンポラリに書き出して一気にrenameする位しか考えが及びません。
知らん、以上。
275 :
名無しさん@お腹いっぱい。 :01/09/24 10:37 ID:EJKgIokw
一週間でマスターするCGIというのをやっているのですが アンケートをとるCGIでenquete.datに書き込んでくれません line11は $data = "$form{'name'}$form{'mail'}\n----------\n\n"; line16は print ENQ $date; なのですが これってどういう意味なんでしょうか? C:\1week\saturday>perl -cw enquete.pl Name "main::data" used only once: possible typo at enquete.pl line 11. Name "main::date" used only once: possible typo at enquete.pl line 16. enquete.pl syntax OK
ホンヤク白〜〜〜 と言いたいがwcしてるのは感心 mainパッケージの$dataが一回しか使われてないけど、タイポしてんじゃ無いの? my ($data,$date);
277 :
名無しさん@お腹いっぱい。 :01/09/24 11:41 ID:RCKEta/A
ありがとうございます すいませんタイポってなんですか?
>>277 typo == "typographical error"
ようするに文字の打ち間違い。
>>272 -273
Temporary -> Rename
ってのが簡単に実装出来る手段だというのは間違い無い。
参考になる本は、ム板の参考書スレにあった気がするぞ。
280 :
名無しさん@お腹いっぱい。 :01/09/24 12:16 ID:W/gfguRs
>>272 -273
>テンポラリに書き出して一気にrenameする
これで良いんじゃない・・・?
最後に一連のrenameするときだけシグナルをトラップして
中断されないように配慮すれば。
281 :
名無しさん@お腹いっぱい。 :01/09/24 12:50 ID:mlN0ge2E
>>278 ご指摘のとうりただの打ち間違いでした
( ´Д⊂ヽううー、ありがとうございました
またヨロシクお願いします
Win32::OLEを使ったExcelのデータの作成・加工を行おうとしています。
セルへのデータ入力の一括入力は、以下のような方法で可能なのですが、
@data = (
[ qw(dataA1, dataB1, dataC1) ],
[ qw(dataA2, dataB2, dataC2) ],
[ qw(dataA3, dataB3, dataC3) ]
);
$Worksheet->Range("A1:C3")->{Value} = \@data;
セルに入力されているデータをURLの一部として持つHyperlinkを
同様にセルに一括挿入する方法が分かりません。
現状、A1:A3のデータを元にHyperlinkを挿入する際、
for (my $i = 1; $i <= 3; $i++) {
$Worksheet->Hyperlinks()->Add(
$Worksheet->Range("A${i}"),
"
http://www.z.com/ " . $data[$i - 1]->[0] . "/");
}
のようにループを回して処理しているのですが、
データ数が多くなると分単位で時間がかかってしまう点が難点です。
Hyperlinkが定数であれば、下記の一括挿入が可能なのですが、
URLの一部にセルのデータを使用した場合のHyperlinkの
効率的な挿入方法はないものでしょうか?
$Worksheet->Hyperlinks()->Add(
$Worksheet->Range("A1:A3"), "
http://www._.com/sample/ ");
VBA寄りの内容かもしれませんが、ご存知の方がありましたら、
ご助言頂ければ幸いです。
Win32::OLEを使ったExcelのデータの作成・加工を行おうとしています。
セルへのデータ入力の一括入力は、以下のような方法で可能なのですが、
@data = (
[ qw(dataA1, dataB1, dataC1) ],
[ qw(dataA2, dataB2, dataC2) ],
[ qw(dataA3, dataB3, dataC3) ]
);
$Worksheet->Range("A1:C3")->{Value} = \@data;
セルに入力されているデータをURLの一部として持つHyperlinkを
同様にセルに一括挿入する方法が分かりません。
現状、A1:A3のデータを元にHyperlinkを挿入する際、
for (my $i = 1; $i <= 3; $i++) {
$Worksheet->Hyperlinks()->Add(
$Worksheet->Range("A${i}"),
"
http://www._.com/ " . $data[$i - 1]->[0] . "/");
}
のようにループを回して処理しているのですが、
データ数が多くなると分単位で時間がかかってしまう点が難点です。
Hyperlinkが定数であれば、下記の一括挿入が可能なのですが、
URLの一部にセルのデータを使用した場合のHyperlinkの
効率的な挿入方法はないものでしょうか?
$Worksheet->Hyperlinks()->Add(
$Worksheet->Range("A1:A3"), "
http://www._.com/sample/ ");
VBA寄りの内容かもしれませんが、ご存知の方がありましたら、
ご助言頂ければ幸いです。
すみません、一部誤りがありました。 (誤) @data = ( [ qw(dataA1, dataB1, dataC1) ], [ qw(dataA2, dataB2, dataC2) ], [ qw(dataA3, dataB3, dataC3) ] ); (正) @data = ( [ qw(dataA1 dataB1 dataC1) ], [ qw(dataA2 dataB2 dataC2) ], [ qw(dataA3 dataB3 dataC3) ] ); よろしくお願いします。
285 :
名無しさん@お腹いっぱい。 :01/09/24 13:16 ID:4RAmdUns
>>284 URLの配列を作ってから一括代入するのはどうすか?
@cells = map { [ map { '
http://www.xxx.com/ ' . $_ } @$_ ] } @data;
$Worksheet->Range("A1:C3")->{Value} = \@cells;
>テンポラリに書き出して一気にrenameする ~~~~~~~ 笑える。
>テンポラリに書き出して一気にrenameする ~~~~~~
>>285 レスありがとうございます。
舌足らずで、説明不足だったようです。どうもすみません。
実現したい内容は、セル自身はURLそのものではなくリンクの一部を表し、
それを使ったリンクを同じセルに埋め込みたいということです。
例えば、URLの一部になるセルのデータとしてISBNや2chのスレIDなどが入っており、
その隣に書名なりスレ名なりが入力されているような状況を想像下さい。
そして、該当リンクへジャンプするとAmazonや2chに実際に飛んで、
具体的な情報が見れるような使い方を考えています。
実際に考えている使用方法では、セル自身のデータがCGIのquery情報を保持しており、
それ自身が意味を持った値ですので、
セルの値にHyperlinkを直接もつというのは避けたいところです。
引き続き、情報お待ちしております。
289 :
名無しさん@お腹いっぱい。 :01/09/24 15:54 ID:GhpSecZ2
htmlのformとcgiでアンケートをつくっているのですが <form method="post" action="enquete.cgi"> "送る"を選ぶとなぜか "次の場所からダウンロードするように選択しました" となってcgiのテキストを開こうとします 本のCDからデータをコピーしたので打ち間違えではないのですが、、、 何が悪いのでしょうか?
290 :
名無しさん :01/09/24 15:56 ID:1qyod3pU
適切なMIMEが設定されていない、とか。 または、IEの場合、*.cgiのファイルをテキストエディタ等に関連付けしてある状態で、 Content-Type: text/plainのCGIにアクセスすると、ダイアログが出るという状況が確認されています。
>289 ヘッダの情報が間違ってるとか。
293 :
名無しさん@お腹いっぱい。 :01/09/24 16:13 ID:GhpSecZ2
ありがとうございます
>>290 ローカルなのですがApache/htdocsに入れました
>>291 *.cgiはメモ帳のアイコンになってますこれがまずいのでしょうか?
>>292 ヘッダってどこのことですか?
>>293 > *.cgiはメモ帳のアイコン
ですね。関連付けを外したら直るかと。
ヘッダとは、Content-Type: text/plain とかのこと。
295 :
名無しさん@お腹いっぱい。 :01/09/24 16:53 ID:bJzfeBUI
>>294 ありがとうございます
それでどうやって関連付けを外すのですか?
申し訳無い
Content-Type: text/htmlというのならcgiデータに書いてあります
text/htmlなのかい。 どうしましょ。 関連付けはwin板ですかね。
変更しなくて良い。 Wクリックでメモ帳で編集出来るようになってるだけだから。。。
298 :
名無しさん@お腹いっぱい。 :01/09/24 17:44 ID:AOw736z6
パスワードを暗号化してクッキ〜に保存するにはどうすればいいのですか? 暗号化のやり方がわからない・・・
>>295 それ良く聞くけど、関連付けは関係無いと思うぞ。
インターネットの(外の)サーバのCGIではそんな風にならないんだろ?
だったら99%httpdの設定だって、WINは知らないけどApacheのconfファイル
見てみ。
>>298 $cryptpass = crypt ($plainpass,salt);
で$cryptpassをURLエスケープする
300 :
- :01/09/24 17:57 ID:qSV25GfU
実際text/plain吐かれるとダイアログは出るぞ。
text/htmlなら何ら関係ないけど。
>>300 よく飽きないね。いい加減ウザイ。
>>301 そっか・・漏れデバッグの時plainで吐いてるけどなった事無かったから ゴメソ
じゃtext/html出してる前提で
httpd.confを触ってみて、多分Option辺りだと思うから。。
303 :
295 :01/09/24 18:10 ID:bJzfeBUI
ありがとうございます
フォルダオプション-ファイルタイプで削除して
*.cgiがwinのアイコンになったのですが
"送る"を押すとブラウザにcgiデータのテキストが出てきてしまいます
>>299 httpd.confというのは本に書いてあるように設定したのですが、、、
>>295 とりあえず、そのCGIは具体的に何するんですかね?
掲示板のようなCGIだと仮定してみる。
普通にtext/htmlを返すのが問題無いとして、
余程変にいじってないApacheならば問題ないはずだが。
305 :
295 :01/09/24 18:22 ID:bJzfeBUI
httpd.confの変更点 ServerName 127.0.0.1・・・Servername new host.name下に書き足し Options FollowSymLinks ExecCGI・・・ExecCGIを書き足し Options Indexes FollowSymLinks ExecCGI・・・MultiViewsをExecCGI AddHandler cgi-script .cgi・・・#を削除 perl、cgiのみだと動くのですが、 html、shtmlに組み込むとまったく動きません
306 :
295 :01/09/24 18:26 ID:bJzfeBUI
>>304 htmlのformを使って書き込まれた内容を
cgiを使ってdatファイルに書き込むというモノなのですが、、、
datに書き込む処理が終わった後、そのdatが表示されるようになってない? もしくはdatに飛ばしてるとか。
組み込むって <!---exec** しようとしてるのカー(゚д゚lll)
309 :
295 :01/09/24 18:41 ID:EJKgIokw
<FORM method="POST" action="enquete.cgi">htmlは問題無いと思うのですが ----enquete.cgiの内容---- #!C:/Perl/bin/perl # ライブラリ require 'cgi-lib.pl'; # デコードサブルーチン &ReadParse(*form); # ライブラリ require 'jcode.pl'; # 文字コード変換サブルーチン &jcode'convert(*form,'sjis'); # 連想配列から値だけを取り出し、区切りのハイフンを追加 $data = "$form{'name'}\n$form{'mail'}\n$form{'sex'}\n$form{'age'}\n$form{'kansou'}\n\n----------\n\n"; # 追加書き込みモード open(ENQ, ">>enquete.dat") || die "File 'enquete.dat' Open Error."; #flock(ENQ, 2); print ENQ $data; #flock(ENQ, 8); close(ENQ); # -----ここから出力 ----- print "Content-type:text/html\n\n"; print << "END_OF_HTML"; <HTML> ----お礼のページが開くようです----
310 :
295 :01/09/24 18:46 ID:EJKgIokw
一週間でマスターするCGIって本なので基本的な設定が間違っているのだと思います データは付属CDからコピぺしたので動くはずなのですが、、、
312 :
名無しさん@お腹いっぱい。 :01/09/24 19:34 ID:AOw736z6
>>299 アドバイスありがとうございます。
が・・・全くわかんないです。
簡単なプログラムのソース書いていただけないでしょうか?
お願いします。
#!/usr/local/bin/perl print "Content-type: text/html\n\n<html><h1>Hello"; ↑ これhello.cgiで保存 <html><body><FORM method="post" action="./hello.cgi"> <input type=submit value="post実験"></FORM> ↑ これhello.htmlで保存 ボタン押しても、直接CGI開けても「Hello」が見えないと駄目 で、何が悪いかと言うと大体Apacheの設定が悪いかWINの設定が悪い お小言言わせて貰うとさ、「一週間でCGI」←このタイトルからしてダメ ●HTMLが書ける。 ●自宅で試すならHTTPDの設定が出来る。 ●Perlのプリント文が書ける。 これ3つとも出来ないとまともに動かない、だから一つづつマッタリと 遊びながらやった方が簡単なんだよね。 だから、どかっっとソース貼られてもアドバイスのしようが無い 「結局ドキュメントルート見えてませんでしたっ」とかも良く有る で上の感じだと多分HTTPDの設定が間違えてるっぽいから googleのリンクで調べてちょってわけ
315 :
312 :01/09/24 20:00 ID:AOw736z6
>>314 スマソ。漏れは下のほうに答えたんです。
パスワードを暗号化してクッキ〜に保存するソースを知りたいんです。
316 :
ほれ :01/09/24 20:15 ID:???
317 :
315 :01/09/24 20:31 ID:AOw736z6
>316 ありがとうございます。 暗号化する方法はわかったんですが、どうやってクッキーの保存、読み出しと組み合わせればいいんですか?
>>279 -280
ありがとうございます、やっぱりお手軽なのはリネームになりますか。
ショッピングカートとかこんな感じのトランザクションをどうやって保証してるんだろう
例えば最悪のタイミングでSIG{TERM}投げられたらどうしようとか、
2chのdjはsubjectの書き換えで0バイト読み込みしちゃってると思うんですが
考え出すときりが無いですよね。
取り合えずム板の参考書スレを読み直してみます。 レス感謝〜
319 :
むぎ茶 :01/09/24 20:55 ID:???
パスワード掛けなければよい (n
┐(´ー`)┌
┏━━━━━━━━━┓
┃('Д')y ─┛~~ ┃
┃むぎ茶 ┃
┃
[email protected] ┃
┗━━━━━━━━━┛
一日見ない内に糞スレ。
321 :
名無しさん@お腹いっぱい。 :01/09/24 21:58 ID:.PROECLA
超初心者な質問なのですが require'jcode.pl'; &jcode'convert(*data,'sjis'); print"Content-type:text/html\n\n"; if($data eq "hehehe"){ print<<EOF; <html> <head> <title>ビィンゴー!</title> </head> <body> 正解じゃい!!<BR> 文句あるんか? EOF } print<<EOF; 間違ってる </body> </html> EOF exit; というのを作りました。 間違ったパスを入れるとちゃんと動くのですが、正解を入れると 正解の文字と間違った時の文字の両方が出てきます。 何か間違ってますか?
>321 if(){}else{}を使おう。 条件分けというものを一から勉強しなおした方がいい。
323 :
322 :01/09/24 22:14 ID:???
>321 一応ヒント。 ・正解の時にだけ出すHTML ・間違いの時にだけ出すHTML ・正解でも間違いでも必ず出すHTML を自分で理解しよう。 間違ったパスを入れた時も、ちゃんとは動いてないぞ。 HTMLソースを見てみな。
むぎを見たのも久しい気がする。
325 :
321 :01/09/24 23:52 ID:.PROECLA
>322 すいません。勉強しなおして解決することができました。 elseで解決しました。また1箇所構文が間違っていてそれも修正して うまく動作するようになりました。 ありがとうございました。
326 :
名無しさん@お腹いっぱい。 :01/09/25 16:02 ID:rq8B7jsc
書き込むほどのことではないのですが 質問しようと思いブラウザを開きましたが、やはり質問する前にもう一度見直してみようと思い 2時間掛けて見直したらどうにか直りました。 何度か見直していたのですがやはり見落としがありました。 どうでもいいことなのですが・・・
どうでも良すぎる。
カレントディレクトリのファイル一覧@filesを最終更新順に並び替えるのってどうすればよいでしょうか?
@file = sort { (stat $a)[9] <=> (stat $b)[9] } @file;
>>326 構文チェックしよう。
perl -wc hoge.pl
>>328 @files = map { $_->[0] } sort { $b->[1] <=> $a->[1] } map { [$_, (stat)[9]] } @files;
331 :
329 :01/09/25 16:34 ID:???
@file → @files
>329 statを呼ぶ回数が多くなって効率が悪い?・・・
333 :
329 :01/09/25 16:55 ID:???
#! /usr/local/bin/perl use Benchmark; timethese(96, { '329' => \&prog329, '330' => \&prog330, } ); sub prog329 { opendir(DIR, './'); my @files = readdir(DIR); closedir(DIR); @files = sort { (stat $a)[9] <=> (stat $b)[9] } @files; } sub prog330 { opendir(DIR, './'); my @files = readdir(DIR); closedir(DIR); @files = map { $_->[0] } sort { $b->[1] <=> $a->[1] } map { [$_, (stat)[9]] } @files; } -------------------------------------------------------------------------------------------- Benchmark: timing 96 iterations of 329, 330... 329: 2 wallclock secs ( 1.54 usr + 0.51 sys = 2.05 CPU) @ 46.83/s (n=96) 330: 1 wallclock secs ( 0.56 usr + 0.17 sys = 0.73 CPU) @ 131.51/s (n=96) 結構差が出るな。
ちなみにファイル&ディレクトリ数が 26個あるディレクトリで計測。 CPU Pentium200MHz RAM 224MB HDD 知らん OS Vine Linux 2.1 Perl 5.6.1
@files = map { $_->[0] } sort { $b->[1] <=> $a->[1] } map { [$_, (stat)[9]] } @files; このソート方法、良く見るんだけど未だに理解出来ない。。。 どっか解説してくれるサイトなあい?
337 :
名無しさん@お腹いっぱい。 :01/09/25 17:56 ID:vAuR/uTY
map の使い方がやっとYO!
338 :
名無しさん@お腹いっぱい。 :01/09/25 17:57 ID:zsF862DA
@files = sort {(stat $b)[9] <=> (stat $b)[9]} @files; と一緒でしょ。やってることは。
げ、329と一緒じゃん。。
$ck{$_} = (stat)[9] foreach @files; @files = sort { $ck{$b} <=> $ck{$a} } @files; ↑ こっちの方が早い
benchとったけど微妙だな。 まぁお好みで。
342 :
名無しさん@お腹いっぱい。 :01/09/25 18:45 ID:TUKvDv4A
ENVってどれくらい種類あるの?
( ´_ゝ`) フーン
346 :
まげ :01/09/25 22:27 ID:???
ちんこがかゆいので 自動チンコかきそふとを作ってください
家の外にアイスクリームを置いて下さい。 暫らくすると蟻が沢山寄ってくるのでそれをパンツに突っ込んで下さい。 上級者向けだけど・・・・頑張って!!
348 :
名無しさん@お腹いっぱい。 :01/09/26 07:22 ID:TfbH1r3A
HTTPではじまる環境変数ってどれくらい種類あるの?
無限にあります。
351 :
らくだ :01/09/26 15:40 ID:???
でかいプログラムを書くと自分の作った関数がどこで呼ばれているかが把握できなくなりませんか? そういうときに簡単に関数の呼び、呼ばれリストが作成できるツールってないのかな?
関数作る際自分でメモっとけ。
353 :
らくだ :01/09/26 15:55 ID:???
なんか開発ツールとかないのかな? JavaのForteとかJbuilderみたいな。
355 :
らくだ :01/09/26 17:13 ID:???
>>352 てめぇの厨房CGIと違って関数100個以上もあるんだよ。
#!/opt/bin/perl5
print "352 逝っとけ\n";
357 :
名無しさん :01/09/26 17:20 ID:mymJ1qjA
どこで呼ばれてるかの確認ってひつようかしら
>>357 まぁ必要だから聞いてるんじゃない?
つーか関数100個以上・・・・。
モジュールとかに分けろよ。
そっちがよっぽど厨房ゲフンゲフン
いやその前に関数多けりゃどうって話じゃねーだろ。
grepで一発ジャン。 馬鹿ばっかだな。
質問の本質をわかってない馬鹿発見。
コテハン糞レスの法則
一部を除いて、どうしてこんなにレベルが低いのだろう。
363 :
らくだ :01/09/26 22:15 ID:???
>> 358,359 モジュールでも共通度が高いと意味がない。 厨房SEはとりあえず黙って逝ってください。 あとgrepじゃ、全体が把握できないでしょ? 君は厨房UNIX使いだから逝っといてね。
364 :
名無しさん@お腹いっぱい。 :01/09/26 22:18 ID:SfAEbkLc
>>351 プロファイラで代用するのは?
(1) hoge.plを実行してプロファイルtmon.outを作成
perl -d:Dprof hoge.pl
(2) tmon.outを解析して関数呼び出しのツリーを表示
dprofpp -t
ただし、あくまでもプロファイラの機能の一部なので、
実際に呼ばれた関数を記録して表示するだけ。
351の意図するところと多少違うとは思う。
共通度が高いのはモジュールとして一番望ましいんじゃねーの? 困った君だね。
「共通度が高い」という用語の共通度が低いのでは?>そこのふたり
369 :
名無しさん@お腹いっぱい。 :01/09/27 01:01 ID:wv3pEXiA
解答者を質問者が煽るというのが最近の流行りなのか?
>つーか関数が把握できなくなるような設計はヘボだと思う。 激しく同意。 >解答者を質問者が煽るというのが最近の流行りなのか? らくだ氏は明らかに精神を病んでおられるので・・・・
371 :
名無しさん@お腹いっぱい。 :01/09/27 02:55 ID:Mu4f6YjE
sentence for (;;;); な書き方ができないのを今始めて知った。 なぜだ。何か問題があったのか。
372 :
1 :01/09/27 03:00 ID:SujucJS2
>>371 forに修飾子はありません。
for修飾子が成立する時はforeachとして解釈されます。
よって()の中はリスト値でなければいけない、と。
374 :
371 :01/09/27 03:27 ID:Mu4f6YjE
>>373 さんきゅう ふぉー ゆあ かいんどねす
そういえば、
print for(1..10);
みたいなことはできるんだよな。なるほど納得。
でも、senetense for(;;) で使ったときに、なんか不味いことでもあるんかなぁ。
見栄え上というか、他の意味と取り違えやすくなったりとか?
375 :
373 :01/09/27 03:40 ID:???
確信あるわけではないけど。 修飾子の時は sentense for 1..10 みたいに書ける。 というか、自分は(1..10)みたくカッコ付けないです。 んで、(;;)の場合はカッコ無いと死んでしまう。 結局構文解釈上の問題なのかな?と。 # 多いに外している可能性があります。 # 識者の補足/説明希望。
376 :
名無しさん@お腹いっぱい。 :01/09/27 14:58 ID:199fgLMY
>>353 ActiveState社からVisual Perlが出ています。ただし有償ですけど。
ActivePerlは無償なんだけど、Debuggerは有償なんですね、ここ。
377 :
Perlあまちゅあ :01/09/27 15:34 ID:n78xCnwc
すいません、コマンドラインで<STDIN>時に「キーボードから入力する文字数」を制限するのは、 どうすれば良いのでしょう? (例えば、コマンドラインで、パスワードを入力するときに、8文字なら8文字と決まっていて、 9文字目は入力しても、画面には表示されない。) OS非依存が良いのですが、依存せざるを得ないのであれば、Win依存でお願いします。 (キーが押されたってことを検出できれば、それをループでまわせるとは思うんですが、 C言語のgetche や kbhitに相当するPerl関数がわからないんです。。とほほ。。。。) 厨な質問ですみません。(「CGIに依存しないPerlの話題一般」とのマルチポストでスンマソン)
( ´,_ゝ`) あっそー
Jフォンから、写真添付メールを送ると、 そのまま掲示板に掲載することのできるCGIはありませんか?
381 :
名無しさん@お腹いっぱい。 :01/09/27 17:27 ID:088OSBr6
ENVのHTTP_X_LOCKINGとHTTP_FORMってなんですか? 色々調べてみたのですが不明です。
382 :
むぎ茶 :01/09/27 18:09 ID:???
色々調べたのにそんな事も分からない君に乾杯 (n
┐(´ー`)┌
┏━━━━━━━━━┓
┃('Д')y ─┛~~ ┃
┃むぎ茶 ┃
┃
[email protected] ┃
┗━━━━━━━━━┛
383 :
名無しさん@お腹いっぱい。 :01/09/27 18:32 ID:2d.Y65Hw
HTTP::Cookiesについて質問です 。
LWP::UserAgentを使ってPDA用中継サーバーを実験で作っています。
サーバーから送信されたcookieを受信して
$cookie_jar->save( $file );
でファイルに書き出すことはできたのですが
内容を要素毎に取り出す方法がよくわかりません。
要素毎に取り出してクライアントのブラウザに登録したいのですが
どのようにしたらいいのでしょうか?
初心者スレッドでする質問でもないような気がしますがほかに
いいスレッドがなかったのでここに質問しました。
384 :
Mr.ちん :01/09/27 18:43 ID:Va6tTvlc
申し訳ありません。 質問があります。 CGI単体で指定フレームにリンクを飛ばせるものですか? HTMLのMETAとか Javascriptのlocationとかを吐き出させる方法以外で。 できるか、できないかだけでも教えてください。 宜しくお願いします。
意味不明。
( ´,_ゝ`) あっそー
>>377 Cで出来ることがわかっているなら、Cでやったら?
このあたりは環境依存は仕方ない気がする。
モジュールあさればあるんだろうけど。
> h2xs -An Win32::Getch
## Getch.xs
#include <conio.h>
MODULE= .. PACKAGE = .. PREFIX = _
int
_getch
int
_getche
int
_kbhit
## Getch.pm
our @EXPORT = qw(getch getche kbhit);
> perl Makefile.PL
> nmake
> nmake install
> perl -MWin32::Getch -e "print chr(getch) while $c++ < 8
>>389 どれに対するレスなのかまったくワカリマセン。
393 :
383 :01/09/27 23:05 ID:???
$cookie_jar->as_string でできました
394 :
377 :01/09/28 02:51 ID:AKSYR8.c
>388さん、親切にありがとう。 やっぱり、教えていただいたみたいに、C関数呼び出すしかないのかな〜。 んでもありがとう。とりあえず、これで良しとします。 CPANもちょと逝てきます。
395 :
名無しさん@お腹いっぱい。 :01/09/28 07:17 ID:WAa6BHU6
$scalar = @array; だと$scalarには@arrayの長さが代入され、 ($scalar) = @array; だと@arrayに入っている最初の要素が代入されます。 配列変数がどのようなものかは大体理解できました。 でも・・・。 $scalar = localtime; print "$scalar\n"; とすると Fri Sep 28 06:14:13 2001 という現在の結果が帰ってきます。 連想配列の場合、$scalarが括弧で括られているかそうでないかで結果が違うの に、 $scalar = (localtime)[0]; ($scalar) = (localtime)[0]; は同じ結果(秒)が帰ってきました。 $scalar = localtime[0]; とすると この場合は[]にどんな数字を入れても Thu Jul 13 20:14:04 1978 という結果が帰ってきます。 localtime()って配列関数の一種ではないのでしょうか? どういう仕組みになっているのか把握できず、混乱しています。 よろしくお願いします。
396 :
名無しさん@お腹いっぱい。 :01/09/28 10:47 ID:B/jfCTJo
aとbというファイルがあってaのファイルがロックされているときは bのファイルに書き込むというのを考えているのですが aがロックされているとき(またはbのファイル)という定義は どのようにすればいいのでしょうか? それともただ単にaファイルに書き込みできずにエラーとなったら bファイルに書き込むという風にするしかないのでしょうか?
use Fcntl qw[:flock]; if(not flock FH, LOCK_EX|LOCK_NB) { print "ロック中\n" } flock は advisory lock なんで、ロックでも操作できます。なので、そういう場合は flock で調べるしか無いです。 LOCK_EX ... exclusive lock LOCK_NB ... do not block (ロックが成功するまで待たない)
398 :
396ではないが :01/09/28 11:25 ID:Qms.AdhU
上の式はFHというファイルがロックされてたらロック中とプリントする ってこと? 初心者なものでifでこういうの初めてみました。
FHというファイルハンドルがロックされていれば「ロック中」と表示します。
400 :
396 :01/09/28 12:08 ID:Aoj3kwsY
>JAPU ありがとうございます。まさかこんなに早くレスがつくとは思いませんでした。 ifでこんな風にもできるんですね。まだまだ修行がたりないようです。 なかなか使える感じです。 ありがとうございました。
401 :
名無しさん@お腹いっぱい。 :01/09/28 12:48 ID:d/jxwhAU
>>395 localtimeは「スカラーコンテキスト」で評価されるとスカラー、
「リストコンテキスト」で評価されるとリストを返すから。
これで前半3つは理解できるはず。
で、最後の localtime[0]は、localtime([0])のカッコ省略形とみなせる。
つまりlocaltimeに [0]という引数を渡しているわけ。
[0]というのは無名配列へのリファレンスなので、
数値として評価すると何かの数値(そのアドレス?)が得られるんでしょう。
実際の[0]の値は↓これで見れるはず。
print [0], "\n"; #[0]をリファレンスとして表示
print [0]+0, "\n"; #強引に数値化して表示
ハッシュ変数のキーの数を調べるにはどうすればいいですか?
403 :
名無しさん@お腹いっぱい。 :01/09/28 13:13 ID:Aoj3kwsY
>402 keysでいいんじゃない
404 :
名無しさん@お腹いっぱい。 :01/09/28 13:18 ID:LKBMQiGk
>JAPU open(FH, "a") || open(FH, "b")||die "File 'data' Open Error."; aがダメならbをFHとしてopenとかでも良くない?
open(FH, ">a") || open(FH, ">b") || die "File 'data' Open Error."; ってことですか? ロックされていても open 自体は成功しますが... flock はあくまでも advisory lock なんで。
406 :
404 :01/09/28 13:34 ID:LKBMQiGk
ロックされててもopenできるの? ではロックされてても追加で書き込みとかできるってことですか? すいません。初心者なもので・・・
407 :
むぎ茶 :01/09/28 14:10 ID:???
:ではロックされてても追加で書き込みとかできるってことですか
頭大丈夫か?(n
┐(´ー`)┌
┏━━━━━━━━━┓
┃('Д')y ─┛~~ ┃
┃むぎ茶 ┃
┃
[email protected] ┃
┗━━━━━━━━━┛
408 :
名無しさん@お腹いっぱい。 :01/09/28 14:13 ID:PZbmJOfw
openはできるけど書き込みはできないんじゃない?
>>403 kyesだと真偽しか返ってきません。
一回keysで展開してカウントする以外にありますか??
>>408 openできる。
読み書きもできる。
ロックはできない。
だと思ふ。
>>409 それしかないと思うけどー。
よく見る例。 $n = scalar(keys(%hash));
412 :
名無しさん@お腹いっぱい。 :01/09/28 15:00 ID:PZbmJOfw
>410 flock中のファイルはopenも出来て書き込みも出来るの? それじゃロックの意味がないんじゃない? カウンターとかでflockよくみるけどあれはファイルを同時アクセス とかでなるべく壊さないようにロックするんでしょ? じゃなきゃロックに意味がないよ〜
>>412 もう少し考えてから発言する事を要求する。
あー 言い方が悪かったかな。 flock ってのは「このファイルは俺が使うから誰も触るなよ」 って宣言するだけです。礼儀正しい人は「もう触ってもいいよ」って言われるまでは触りません。礼儀正しくない人は構わず触っちゃいます。ただそれだけです。つまり、単なる紳士協定。OK? # これ以上簡単な説明は出来ないよ。 ---- あと、共有ロック (LOCK_SH) に関して蛇足。 これは「共有ロックの人だけは何人同時に触っても良いよ」ってロックです。読み取りのみが必要な場面で使います。 排他ロック (LOCK_EX) する場合は共有だろうが排他だろうが1人でもロックしていればロックできません。
415 :
名無しさん@お腹いっぱい。 :01/09/28 16:53 ID:3TgAXZr.
flock(FH,2) flock(FH,8)
416 :
名無しさん@お腹いっぱい。 :01/09/28 16:54 ID:IDlsq36I
さすがPerl初心者コーナー>JAPU
何がしたい?(w>415
418 :
名無しさん@お腹いっぱい。 :01/09/28 20:05 ID:OpN/lBYw
どれくらいの事ができたら「脱初心者」といえるのでしょうか?
419 :
丸出し :01/09/28 22:09 ID:DkMaxtU.
初心者丸出しですが 変数$tmpにどんどん追記していくには どんな関数を使えばよいのですか? 丸出しで申し訳ないですが。
>>419 $tmp = 'hoge';
$tmp .= 'fuga';
print $tmp; # hogefuga
いくらなんでも、名前と全4行の本文を合わせて合計3度も「丸出し」を唱えるのは ちょっと守りを固めすぎですよ(w
422 :
丸出し :01/09/28 22:18 ID:DkMaxtU.
なるほど! スクリプトいろいろ見てて "."ってなんだろ?って思ってたんですが そういう事だったんですか! 即レス感謝!ありがとう〜!
423 :
丸出し :01/09/28 22:20 ID:DkMaxtU.
>421 自慢じゃないですが ディフェンス力の強さだけは 結構高いんですよねw どうもでした〜。
424 :
395 :01/09/28 22:56 ID:???
>>401 うーん。
今の私には何が何やら・・・。
でも理解できるように頑張ります。
ありがとうございました。
どれくらいの事ができたら「脱初心者」といえるのでしょうか? どれくらいの事ができたら「脱初心者」といえるのでしょうか? どれくらいの事ができたら「脱初心者」といえるのでしょうか? どれくらいの事ができたら「脱初心者」といえるのでしょうか?
sleepって1秒単位しかだめなの? たとえば1/10秒とか1/100秒って指定できないのかな? sleep(1/10); とかってやってみたけど無視されてるようなきがするんだけど
>>426 sleep()は秒単位です。
ミリ秒単位でsleepしたい場合はselect()システムコールを用いるか、
Time::Hiresモジュール(Perl5.7.1からは標準)を利用してください。
select(undef, undef, undef, 0.1);
or
#!/usr/bin/perl
use Time::Hires qw[ sleep ];
sleep(0.1);
428 :
名無しさん@お腹いっぱい。 :01/09/30 00:52 ID:sHi5SnW.
今更ですが、このスレッドには御世話になってます。 識者の皆さん、ありがとうございます。 私も皆さんに追いつけるよう、努力していきたいと思います。
教えてください。 HTMLファイルに書き出す時、 .= で、追記したものを、 HTMLファイルに書き出してるんだけど、 これ以外にいい方法ってありますか?
意味が解らないDEATH print文を健作してくだサイ
431 :
名無しさん@お腹いっぱい。 :01/09/30 09:16 ID:dIMlyAZM
どれくらいの事ができたら「脱初心者」といえるのでしょうか? どれくらいの事ができたら「脱初心者」といえるのでしょうか? どれくらいの事ができたら「脱初心者」といえるのでしょうか? どれくらいの事ができたら「脱初心者」といえるのでしょうか?
どっから迷い込んで来たのか・・・・迷惑な話だ
>>429 同じく意味が分からんけど、ファイルに書き出すって事?
print "hogehoge";#は知ってるはず
print<<"_HTML_";
hogehoge
_HTML_ #でもいいし
print HTML <<"_HTML_";
hogehoge
_HTML_
とか結構適当に書けば色々出来るよ :-)
>>430 >>432 ありがとうございます。
意味不明申し訳ないです。cgiファイルではなくてHTMLファイル化ということです。
出力結果部分を.htmlファイルにする方法で.=を使ってますが変なので、
良い方法をご教授願いたいと思っています。宜しくお願いします。
$logfile = "kakidashi.html";
$syuthuryoku = "オマエモナー\n";
#以下の部分を一まとめにして、$htmlに代入する方法とかあるのかな?
$html .= "<html>\n";
$html .= "<head><title>この方法は変でしょ</title>\n";
$html .= "<body>\n";
$html .= "HTMLの出力結果は、$syuthuryoku\n";
$html .= "</body>\n";
$html .= "</html>\n";
open (OUT,">$logfile") || &error('オープンエラー');
print OUT ($html);
close (OUT);
&header();
print "<a href=./kakidashi.html>出力ファイル</a>";
sub error {
&header();
print "<body>$_[0]</body></html>\n";
}
sub header {
print "Content-type: text/html\n\n";
print "<html><head><title>この方法は変でしょ?</title></head>\n";
}
435 :
名無しさん@お腹いっぱい。 :01/09/30 13:19 ID:Bs/Yjz32
あ、太田さん来てる。 UAに依存しないAAですか。いいっすね。
436 :
435 :01/09/30 13:23 ID:???
一つ一つの文字をgifにですか。 なんか効率悪そうですね。gifcat(dog)とかで繋げられないかな?
437 :
名無しさん@お腹いっぱい。 :01/09/30 13:24 ID:LmdMp5e6
>>433 よくわからんが、web上でCGIとして動かしたいって事?
だとしたら、gatewayのサーバー立てて、そこにCGIを設置して、
httpリクエストでAAを取得→A2GIFに渡す→結果を返す
んでいいじゃない?
えーと、そっち方面の知識がまるで無いので・・・ カウンターを繋げたりする方法でしょうか。 1行1画像くらいにできれば効率上がりそうですね。
>>437 えーと・・・どうやるのでしょう?(汗)
自分のPCではちょっと鯖立ては難しいので、
トクトクでやりたいのですが、どうでしょうか・・・。
440 :
名無しさん@お腹いっぱい。 :01/09/30 13:29 ID:LmdMp5e6
>>434 open (OUT,">$logfile") || &error('オープンエラー');
print OUT qq{
<html>
<head><title>この方法は変でしょ</title>
...
};
close (OUT);
441 :
名無しさん@お腹いっぱい。 :01/09/30 13:34 ID:LmdMp5e6
perl動いてセッション間の通信ができれば鯖はなんでもいい。 トクトクは知らんが。 それ以前に、ユーザーインターフェイスの仕様をもうちょっと煮詰めた 方がいいと思われ。 動作イメージがさっぱりわからん。
>>441 今のところ考えているのは、
案1:画面上に入力フォームがあって、そこにAAをコピペ、変換ボタンを押すとA2GIF形式のhtmlが表示される
案2:URLを入力するところがあって、変換ボタンを押すとURL先の内容がA2GIF形式に変換される
案1はちょうど掲示板の入力のような感じで、
案2は確か「幼児語化計画」のようなものです。
443 :
名無しさん@お腹いっぱい。 :01/09/30 13:57 ID:SdkZLPb6
open(COUNT, "+<$countdata") || die "File 'countdata' Open Error."; flock(COUNT,2); $counter = <COUNT>; $counter1 = ++$counter; seek(COUNT, 0, 0); print COUNT "$counter1\n"; close(COUNT); flock(COUNT,8); print "Content-type: text/html\n\n"; print <<EOF; <HTML> <BODY> <CENTER> <FONT size="5"><B> $counter1 </B></FONT> </CENTER> </BODY> </HTML> EOF というのでテキストカウンターを作ったのですが表示したいHTMLに <img src="hehehe.cgi">という風にしても表示されません。 テキストのみのカウンターの場合はどのように表示させてば いいのでしょうか? もちろん単体でしたらうまく機能しています。
>>434 $html = <<"__KOKOMADE__";
<html>
<head><title>それならヒアドキュメントでいいっす</title>
<body>
HTMLの出力結果は、$syuthuryoku
</body>
</html>
__KOKOMADE__
open (HOGE,">hoge.html"); select HOGE; print "<html><head></head>"; print <<"_HTM_"; <body> これselect忘れると変になるんだよなー </body></html> _HTM_
446 :
名無しさん@お腹いっぱい。 :01/09/30 14:41 ID:E6kRmxB6
>>442 案2のほうは437や441が言ってるやつね。CGIプロクシ形式。
無料レンタルサーバだとできないように設定されてることが
多いけど、トクトクはどうなんかねー。
とりあえず、案1はどのサーバでも大丈夫だからやってみれば。
いま使ってる掲示板スクリプトはどんなやつ?
ちょっと改造するだけでオーケーと思うよ。
>>443 image/* を吐かなければいけないCGIに text/html を吐かせて、
君は一体何をしようとしているのだ。
それじゃ表示されなくて当然よ。
あとねー、なんつーか、closeした後にflockとかわけわからん。
HTMLも不思議マークアップだし。
>>447 テキストカウンターらしいよ。
>>443 IMGタグでtext/htmlを出力しようとしてもね…。
449 :
443じゃないけど :01/09/30 15:43 ID:WrCS3j3.
ヒアドキュメントって他にどんなのがあんの?
451 :
名無しさん@お腹いっぱい。 :01/09/30 15:52 ID:mtebbK2k
>>443 みんな不親切すぎ。俺が答えるYO!
(1) SSIが使えるサーバなら
<!--#include file="hehehe.cgi"-->
(2) SSIが使えないサーバなら
<iframe src="hehehe.cgi" width=200 height=50>ブラウザ古い!カウンタ表示不能!</iframe>
>>449 最初よくまちがえるんだけど、
「print<< というヒアドキュメント命令」があったり、
「=<< というヒアドキュメント代入記号」があるわけじゃないですぜ。
<<"HOGE" から HOGEまでが「ヒアドキュメント形式の文字列」で、
それをprintしたり代入してるわけ。
>>451 親切そうに見せといて、不親切この上ない素晴らしい回答。
454 :
名無しさん@お腹いっぱい。 :01/09/30 22:52 ID:5nFULihc
DBからデータ取得後にcsv形式でデータをダウソロード させたいのですがダウソロードのダイアログにサーバ名と ファイル名が表示されません。ちなみにファイルのダウソ ロードは問題なくできます。 $filename="hoge.csv"; $|=1; print "Content-type: application/x-csv\n"; print 'Content-Disposition: attachment; filename='.$filename."\n\n"; #csvファイルをダウンロードさせる open(FH, $filename) || die; binmode(FH); #ファイルに適したMIMEタイプを出力 while(read(FH, $buffer, 512)){ print $buffer; } close(FH); exit;
2chスレッドのポスト関係の部分を取り出して、できるだけアレンジしてみました。
いかがなものでしょう?
<form method=POST action="a2gif.cgi"><input type=submit value="A2GIFで表示" name=submit>
<br><textarea rows=5 cols=70 wrap=off name=MESSAGE></textarea></form>
>>446 回答ありがとうございます。
表面的にはなんとなく分かるんですが内部でどんな動作になっているのか
全く知らないので・・・(1)ポスト用のhtmlで上のコードを入れておく、
(2)ポスト先のcgiファイルでA2GIFに変換して表示 って感じになるんでしょうか。
質問ばかりでは始まらないので、とりあえず掲示板スクリプトを見て勉強したいと思います・・・。
モナー板のこっちのスレでもA2GIFの話をしています。
http://piza2.2ch.net/test/read.cgi/mona/989849855/l50
Win32のPerl使うときっていちいちディレクトリを切るときに'/'を'\' に変更しないといけないんですか? 友達に聞かれたんですけど、今Linuxな環境しかないんで。。。 識者の方、教えてくださいませ
んなこたあ無い。
458 :
名無しさん@お腹いっぱい。 :01/10/01 13:37 ID:kD.LVvDk
>456 そんなことないよ。 それはただ単に変換がLinuxとWin32で違うだけでWin32で¥を押すと ¥がでるけどLinuxとかで¥と押すと逆スラッシュに変換されるだけで 一緒ですよ
バックスラッシュは関係無いと思うぞ。
>>458 >>457 大丈夫、俺は識者じゃ無いけどPerlforWINやACTIVEPerlは
ディレクトリの区切り子を変換してくれる。Cygwinだと先にCygwinが
面倒見てくれるから問題無し。WIN <=> UNIX互換 の場合まず気に
しなくて良いと思う。
因みにMACの : は駄目、死にます
>>459 >
>>457 大丈夫、俺は識者じゃ無いけどPerlforWINやACTIVEPerlは
いや俺に言うたかて、とマジレス入れてみる。
あ、わり
>>460 MACって2つ上は ::: なんだよなぁ・・・
462 :
名無しさん@お腹いっぱい。 :01/10/01 16:09 ID:rWEZiHhg
macは糞
463 :
434 :01/10/01 16:15 ID:???
464 :
暇人 :01/10/01 16:27 ID:???
ID : rWEZiHhg の糞レス一覧。
===== 初心者質問スレ =====
462 名前:名無しさん@お腹いっぱい。 :01/10/01 16:09 ID:rWEZiHhg
macは糞
===== aspがうとしいですが =====
4 名前:名無しさん@お腹いっぱい。 :01/10/01 12:18 ID:rWEZiHhg
>>3 とても傷つきました。
慰謝料請求しますので。
===== JAPUをドキュソと罵る =====
106 名前:名無しさん@お腹いっぱい。 :01/10/01 12:23 ID:rWEZiHhg
DQNプログラマーの素質アリですね。
どうやら2番目のasp教えてスレにレスが無い事にご立腹の様子 ワラ
みんなレスしてあげてね♪
コマンドラインで利用してる時にスクリプトを実行した時の 基準パスは、 1:実行者のカレント 2:スクリプトの置かれたディレクトリ のどちらになるかは決まっていますか? それと、これはある程度OSに依存するものなんでしょうか。 /usr/hoge/に foo.pl、foo.txt foo2.txt /usr/hoge/huga/ bar.txt bar2.txt この状態で/usr/hoge/huga/からfoo.plを実行した時に カレントディレクトリは/usr/hoge/huga/ と思って間違いないですか?
追加 上の状態でスクリプトから ./ をreaddirすると bar.txt bar2.txt が読まれると思って良いでしょうか
テストしてください
>>467 テストしたから聞いています。
「家の環境じゃそうはならないぞ」と言ったご意見を頂きたいのです。
それとも全ての環境をテストしなければ質問は許されませんか?
>>468 アホはほっとけよ 疲れるだろ p
それはともかく当然俺の環境でも同じようになったよ
Linux と Cygwinだけど
つーか今まで俺のツールはそれを前提に書いてきたから通用しない環境があると困るなー
心配ならchdirしときましょう。 もしくは絶対パスで指定。
>基準パスは、 >1:実行者のカレント >2:スクリプトの置かれたディレクトリ Win, Unixは全て1です。
472 :
名無しさん@お腹いっぱい。 :01/10/01 18:53 ID:IQ6dfID2
>443 シンプルなカウンタだな どやって使うんだ?フレームか?
ソースの可読性についてです。 上級者のみなさんはスパゲッチになりがちなperlのソースを書くとき どんな事を心掛けてますか 漏れが自分ルールにしてるのは、、 変数名は5文字まで、ただし変数名の説明を入れる ヒアドキュメントはインデントが崩れるからキライ 大域変数は大文字 くらいッス!
475 :
名無しさん@お腹いっぱい。 :01/10/01 21:05 ID:1S1Hyahg
>>473 >変数名は5文字まで、ただし変数名の説明を入れる
説明ってコメントで?
というか、説明入れないとわからない変数名は最悪。
476 :
名無しさん :01/10/01 21:12 ID:1nBk41eo
>ヒアドキュメントはインデントが崩れるからキライ インデント崩したくないのに激しく同意なんだけど、 printを並べるのも、なんか見栄えはともかく 繰り返し呼ぶことのオーバーヘッドがちょっときになったり。 473はどうしてんの。
>>469-471 ありがとうございます。安心しました ^^
実は自分の書いたファイル管理スクリプトを人に上げたらどうも上手く動いて無い
様なので、そういう可能性を考えたのです。PC初心者さんなんであてにならないけど。。
470さんの言う通りなんですが、例えば ls.pl ./ ってされた時
ls.plでARGVを引っ張ってきたとして、ls.plディレクトリを
基準にされちゃうと非常に困るんです。
他にも方法が有るかもしれませんが、ここは仕様を理解した方が
良いかなと思ったんで。
ありがとうございました。 m(_ _) m
478 :
名無しさん@お腹いっぱい。 :01/10/02 04:48 ID:ISbv0fVM
逆に
>>465 の
>2:スクリプトの置かれたディレクトリ
を取得するほうが難しいよ。特にOS依存なくそうとすると。
実はこれ、自分じゃ書けなかったのでFindBin.pmを見たら、
やっぱ結構苦労している。
CGIを実行するときApacheが自動的にchdirしてくれるってのは
かなりありがたいことだと思った。
479 :
名無しさん@お腹いっぱい。 :01/10/02 07:10 ID:puwr6ecI
とほほさんのwwwsrchを使っているのですが これってcgiファイルの文字は検索対象に入らないのでしょうか? 掲示板の書き込みとかもトップページから検索できるようにしたいので。 どなたかご存じの方は教えて下さい。
>>479 検索対象ファイルに加えてやれば出来ると思うよ。
でもログそのまんまだと読み難いんじゃないかなあ。
読み出しスクリプト通した方が良くない?
>>480 例えばどうするんでしょうか?
(すみません、無知なもので..)
482 :
:01/10/02 10:22 ID:80rCzk0o
### location sub location{ print "Location: $url\n"; exit; }#location END こんな感じで飛ばすと、表示したブラウザの下に Location: ero.cgi?zap と表示されます。表示しないようにする方法はありますか? 宜しくおねがいします
下ってどこよ?
484 :
482 :01/10/02 10:32 ID:80rCzk0o
>>483 ブラウザの一番下(ページ内)です
urlが出たりする所じゃないです
485 :
482 :01/10/02 10:37 ID:80rCzk0o
そりゃただのスクリプトのバグ。 必要ないのにlocationサブルーチンを呼び出してる。 どこだか分からなかったら、適当なところにアプすれば見るよ。
あ、かぶった。鬱。
488 :
1 :01/10/02 15:21 ID:LK1d/L0I
489 :
バイトコードの取得方法について :01/10/02 15:36 ID:ZBXcT.qc
バイナリファイルを「変数」に読み込んで 一バイトずつループ処理をする方法はありますか? 「ファイルハンドル」を用いて指定位置のキャラクタコードを 取得する方法はありますか? (getcだと位置を指定できません) 正に初心者のなのでよろしくお願いします。
CGIで、渡されたフォームデータをデコードする際に、 $value =~ tr/+/ /; で躓いています。 実データの「+」をそのまま「+」で表示し、 半角スペースのみを変換するにはどうしたらいいのでしょう?
491 :
490 :01/10/02 15:59 ID:???
すみません。解決しました。 デコードの順番が逆でした。 逝ってきます。 $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg; $value =~ tr/+/ /; ↓ $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
>>489 seek と getc の組合わせで解決?
seek FH, 100, 0;
$c = getc FH;
# seek の使い方は perldoc -f seek を参照。
# または "プログラミングPerl 第2版" or "Programming Perl 3rd Ed." を買う。
493 :
名無しさん@お腹いっぱい。 :01/10/02 17:50 ID:RaZaDOV6
すみません、
>>479 をもう一度教えてもらえないでしょうか?
494 :
489 :01/10/02 18:51 ID:???
>492 レス有難うございます。帰宅してから試してみます。
& -> &amp; に変換した後だったとかいうオチ?
497 :
1 :01/10/02 20:29 ID:LK1d/L0I
498 :
名無しさん@お腹いっぱい。 :01/10/02 20:37 ID:W6pnxjhI
&
499 :
名無しさん@お腹いっぱい。 :01/10/02 20:38 ID:W6pnxjhI
&
500 :
名無しさん@お腹いっぱい。 :01/10/02 20:52 ID:6OIJd9Gg
拡張子を一括変換するのってどうやるんでしたっけ。 (たとえば全ての拡張子を.tmpに変更する) なんかやりかたがあったような…
501 :
名無しさん@お腹いっぱい。 :01/10/02 20:54 ID:gYYU4i1s
Linuxのコマンドを実行する system("command par"); で、ユーザーの追加をperlでやろうと思うんだけど $username = 'hogehoge'; system("useradd $username"); system("passwd $username"); とすれば確かにユーザ追加されるが、パスワードは何か?と聞かれる(当然だけど) そこでパスワードをパラメータとして入力するにはどう記述すれば良いんですか? $userpass = 'xxxxx'; って感じで変数にしてやりたいんですが。
503 :
名無しさん@お腹いっぱい。 :01/10/03 01:59 ID:VWQvA4GE
>>500 DOSなら ren *.moe *.hoe
504 :
FREAKES :01/10/03 02:32 ID:iOlT3Zgg
507 :
名無しさん@お腹いっぱい。 :01/10/03 05:39 ID:xNIE/jvQ
アクセスカウンタを作ろうとしています。 しかし以下のようなスクリプトだとどうもうまく行きません。 $counterlogのファイルを作成して一度目、二度目は1、2とカウントされ、表示 もされるのですが、三回目はいきなり13となります。4回目は1214、5回目は 12131215という具合です。 sub counter { open(COUNTER, "+<$counterlog"); $counter = <COUNTER>; ++$counter; print COUNTER $counter; close(COUNTER); } どこがおかしいのか分かりません。 よろしくお願いします。
508 :
名無しさん :01/10/03 05:52 ID:xwMhor1s
printのまえにseek COUNTER, 0, 0;かな?
509 :
名無しさん@お腹いっぱい。 :01/10/03 06:27 ID:7VPeoMkk
gzipを使ってみたいのですが、Windowsでテストできますか?
>>508 投稿したあとで検索エンジンで調べてみるとtruncate(COUNTER, 0);と
seek(COUNTER, 0, 0);との組合せを発見しました。
seek(COUNTER, 0, 0);だけでもいいのか・・・。
いろいろ試してみます。
ありがとうございます。
511 :
名無しさん@お腹いっぱい。 :01/10/03 07:03 ID:1Z0sNt2w
>>509 『出来る』と答えりゃ良いのか?
えすぱってみると、mod_gzipかCygwin辺り?
何をしたいのか書いとらんから、さぱ〜り分らん。
> 良い回答は良い質問から
>>1 を良く読んでくれ。
513 :
509 :01/10/03 07:32 ID:7VPeoMkk
すいません。mod_gzipでHTML出力をしたいのです。
514 :
509 :01/10/03 08:46 ID:???
環境はWin2000 + Perl + ANHTTPDです。 apache for win32を入れないと駄目なのでしょうか?
新規でファイルを作成するにはどうすればよいですか? まだ存在しないので open ができずファイルハンドルが 取得できません。
517 :
516 :01/10/03 12:41 ID:???
すみません。うまくいきました。openできないと思っていたのは 他のエラーが原因でした。
518 :
えび :01/10/03 12:41 ID:tut8CQIE
>>510 seek(COUNTER, 0, 0);で良いと思います。
seek(COUNTER, 0, 0);はファイルポインタを先頭までまき戻す。
truncate(COUNTER, 0);はファイルを0バイトまで切り詰める。
という処理ですが、
カウンターファイルに新しく数値を記入する場合であれば
seekで先頭にまき戻して新しいカウントの数を上書きすれば良いと
思います。
カウンターは桁が増えても桁が減るという事はないので
以前のデータから上書きしても以前のデータの切れ端とかが
残る事はないのでseekだけで問題はないでしょう。
520 :
519 :01/10/03 12:50 ID:???
かわいそうなので逝ってらっしゃいのキスして あ・げ・る(はぁと ブチュゥ〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
522 :
名無しさん@お腹いっぱい。 :01/10/03 13:34 ID:6LJeEkqs
523 :
:01/10/03 14:13 ID:???
数段階の仲介を経てからでしかその知識を得られないなんて。 理想ならその業界の技術書を熟読するのが一番なの。 サバ構築だって然り。ネットとは何か?と言うこと。 書店にあるものを読んでるうちは中級どまり。 高校の微積分を学ぶときは決してニュートンやライプニッツの原書を読まないのは単に難易度の問題。 機会があれば読むべき。
523 は何が言いたいのか要点を纏められたし。
525 :
:01/10/03 14:36 ID:???
サラサーテ、著者の飯代の為に使い物にならない偽専門書を買うな! 業界が発行してる物を無料で入手できそうなんだから!
526 :
:01/10/03 14:37 ID:???
まぁ、C/C++ならJIS X 3010やANSIから入手したらいいんだよ 厨房を偽装して買いあさるな!
527 :
:01/10/03 14:40 ID:???
オレはソフトにはカネは使わん!(エンターテイメントは除外) ハードにはしぶしぶ使う。 けどアキバで部品単位でBSテレビが作れるなら それに超したことはない 故障のたんびに悪対応の窓口は死ね!
スレ違い。カエレ!!
529 :
名無しさん@お腹いっぱい。 :01/10/03 15:01 ID:HFewZhw6
とほほさんのwwwsrchを使っているのですが これってcgiファイルの文字は検索対象に入らないのでしょうか? 掲示板の書き込みとかもトップページから検索できるようにしたいので。 どなたかご存じの方は教えて下さい。
530 :
1 :01/10/03 15:11 ID:1nsRDm4c
そんなことより腹減らねぇ?
533 :
丸出し :01/10/03 17:23 ID:eJHCCMAc
最近一日一食だ…。 ところで話を戻しますが、 なんかナイスタイミングで529と似てるんですけど 文字列検索する時って正規表現じゃなくて index使う利点ってあるんですか? これだと大文字小文字区別しない風にできないと 今の知識だと思うんですけども…?あほな事いってます?
534 :
a'x :01/10/03 17:35 ID:???
正規表現よりindexの方が速い。
↑本に書いてあること真に受ける馬鹿
536 :
a'x :01/10/03 17:43 ID:???
アホな質問かもしれませんが while ループでは カウンタは自前で用意する必要がありますか? $xxx みたいにあらかじめ使える変数が用意されているとか ないですか?持っている本には出ていないのですが あればいいなと。
↑Webページに書いてあることを検証もせずに受け売りをする馬鹿
$xxxって何? そんなの有るのか???
>>538 Benchmarkやindexの使い方分からない猿 ププ
低レベルな争いはよせ。
>>541 そんな奴いない。
下らないことには盛り上がるね。
PCとi-mode共用の掲示板を作っているのですが、 半角カナで入力された場合、全角カナに自動的に直して 表示する環境変数を教えて下さい。バイト数をチェックすれば いいんでしょうか?
#! /usr/local/bin/perl use Benchmark; open FH, "./seek.dat"; @lines = <FH>; close FH; timethese(16, { 'REGEXP ' => \&find_by_regexp, 'INDEX ' => \&find_by_index, } ); sub find_by_regexp { my $count = 0; foreach (@lines) { if (/an/) { $count++; } } } sub find_by_index { my $count = 0; foreach (@lines) { if (index($_, "an") >= 0) { $count++; } } } Benchmark: timing 16 iterations of INDEX , REGEXP ... INDEX : 3 wallclock secs ( 3.31 usr + 0.00 sys = 3.31 CPU) @ 4.83/s (n=16) REGEXP : 4 wallclock secs ( 4.02 usr + 0.00 sys = 4.02 CPU) @ 3.98/s (n=16) 2万行のデータで検証。
結論 535 538 はただの煽り。
$ENV{'ZENKAKU_TO_HANKAKU'}の事ですか? これを使えばいいですよ? 検索して頑張って下さい?
当たり前の常識を検証して大得意の545萌え
549 :
538 :01/10/03 18:06 ID:???
で、どっちが速いんだよ?
あほらし。このネタ終わり。 -------------仕切り直し----------------
>>548 まさか本当に検証されるとは思わず嘘ついて荒らそうとしていた
548=538萎え。
indexネタはもう終わりにしてね。
それより
>>547 を問い詰め(以下略
553 :
544 :01/10/03 18:27 ID:6STEKkdE
す、すみません。聞き方がまちがってました。 環境変数じゃなくて、置き換え演算子の事です。 よろしくお願い致します。
554 :
512 :01/10/03 18:34 ID:???
>>514 509
515さんが言ってるとおり、Apache入れた方が凄まじく楽なのは事実。
ただ、mod_gzip使わなくてもCGIの出力ならGZIPと併用して出来なくも
無い筈。AnHttpdは使ってないから分らんけど。
ここ見てくれ。
http//www.ibport.co.jp/~yui/cgiwork/tech/index.html
これやるなら、たぶんCygwin入れると厄介しなくてすむと思う。
つか、Apache(Win32)入れた方が早いかなぁ(苦笑
どっちかと言うと、『CGIだけど、なんか質問ある?』スレ向きな
気もしてきた…。
555 :
名無しさん@お腹いっぱい。 :01/10/03 19:09 ID:1VC1FzQw
>>544 Perl自体には半角全角変換の機能は(まだ)ないから、
自分でコードを書くか、出来合いのライブラリを使います。
たとえばjcode.plを使って$FORM{TEXT}を変換するなら下のとおり。
require 'jcode.pl';
jcode::h2z_sjis(\$FORM{TEXT});
556 :
544 :01/10/03 19:22 ID:???
>>555 ありがとうございました。
演算子を使えばできるかもと思っていたんですが、
勉強不足でした。精進します・・・
557 :
555 :01/10/03 20:07 ID:???
>>556 ついでに自力でコードを書く例も。
%han2zen = ( #一部のみ抜粋
'ニ'=>'ニ', 'ク'=>'ク', 'コ'=>'コ', 'ッ'=>'ッ', 'プ'=>'プ',
'ン'=>'ン', 'マ'=>'マ', 'ズ'=>'ズ', 'ー'=>'ー',
);
$s = "ニクコップン(-д-)マズー";
$s =~ s/([。-゚][゙゚]?)/$han2zen{$1}/ge; # ←ここで変換
print "$s\n";
これで大丈夫かな?? 実際には%han2zenに、
すべての半角カナ→全角カナの対応を入れてください。
558 :
555 :01/10/03 20:12 ID:???
>>557 は間違い。s///ge; じゃなくて s///g; でした。
559 :
544 :01/10/03 20:12 ID:???
>>555 重ねてありがとうございます。
早速、参考にさせていただきます。
まだまだ勉強せねばです・・
560 :
丸出し :01/10/03 20:34 ID:???
なるへそ〜〜〜。 indexのが早いんですか! ある配布cgiで検索機能があったんですけど 半角全角を一緒にして検索できる便利さを捨てて 鯖の負荷を減らす方をとったのか。 なるへそ〜〜。ありがとです。
561 :
名無しさん@お腹いっぱい。 :01/10/03 20:50 ID:VH/5AUng
ローカルでANHTTPとActivePerlで色々やっている者ですが REMOTE_HOSTをgethostbyaddrでIPからアドレスに変換したのですが 変換するとpop3.norton.antivirusと表示されます。 これって何でしょう?間違ってはないと思うのですが… 識者の方でご存知のかたおられましたらお願いします。
悩豚のローカルプロクシだろ、 気にスンな 気になるならセキ板でもいって「ハックされていますっ!!!!」 ってスレ立てて死んでこい w
$xxx はPerlで幾つか用意されているグローバル変数と 言う意味で書いています($で始まるの色々ありますよね)。
だから無いって。
素直にfor使えば? そのためのやつでしょ。
566 :
名無しさん@お腹いっぱい。 :01/10/03 23:37 ID:CQyY2Ec6
全くの初心者で、初心者ならPerlと薦められてきた者ですが、 Perlで定期的に送信フォームを押すみたいなことはできますか? つか、初心者はその前にこれ覚えれみたいなことありましたら指摘お願いします。
答え: まず日本語を勉強してね &heart
568 :
566 :01/10/03 23:43 ID:???
>>567 意地悪しないでお願いします。
どこかおかしな日本語があったでしょうか?
>>566 > 初心者はその前にこれ覚えれみたいなことありましたら指摘お願いします。
質問の仕方
571 :
566 :01/10/03 23:54 ID:???
厳しいなぁ(笑 ちょっと漠然としすぎてて答えようが無いよ この板に良書スレが有るから、そこを良く読んで自分に合った 本を一冊買って下さい。 で、それを読みながらWEBなんかも活用して勉強すればいいよ。 それといきなりCGIは薦めないな、、少しはPERL書けるようになって HTMLも書けるようになれば自然と書ける様になるから
573 :
566 :01/10/04 00:21 ID:???
>>572 ありがとうございます。
全然右も左もわからないもので・・・
以前age荒らしをスクリプト組んでやってる、というのを見て、
プログラミングに興味を持ったのですが、(荒らしをしたい訳じゃないんです。断じて)
例えは悪いですが、そういうことはできるのか知りたかったんですが、
これでもまだ漠然としているんでしょうかね・・・
とりあえず、勉強して出直してきます。有り難う御座いました。
おう、頑張れよー
ま、あれだな。ゲーム作りたくなってプログラミングに興味もったけど、案外難しくて挫折な厨房もいるしな。 関係ないけどね。頑張ってね。
576 :
510 :01/10/04 02:08 ID:f1gid5yY
>>518 えびさん
遅くなりましたが、詳しいお答えありがとうございました。
・・・精進します・・・。
577 :
名無しさん@お腹いっぱい。 :01/10/04 08:23 ID:9Z2wk3j2
向上心のない善人よりも、
明確な目標を持った厨房のほうが好きだね。俺は。
つーわけで
>>566 みたいな奴には期待したい。
(1)ローカルマシンにPerlとWebサーバを入れる。
(2)全環境変数表示CGIを自作し、Webサーバで動かす。
(3)GETメソッドで(2)のCGIにアクセスしてみる(LWP::Simpleモジュールが便利)
(4)POSTメソッドで同じく(2)にアクセス(LWP::UserAgentモジュール)
とりあえ、以上の実験を試してみることをすすめる。
>>537 ,
>>563 残念賞として"$."(現在の行番号)をあげよう。
while (<DATA>) { print "$. $_"; }
__DATA__
mona
giko
579 :
509 :01/10/04 09:10 ID:???
>>515 ,554
有難うございます。Apache for win32入れてやってみます。
580 :
名無しさん@お腹いっぱい。 :01/10/04 11:35 ID:nOAoqb9A
CGIで、呼び出し元のURLを知りたいのですが。 HTMLA → CGI の、HTMLAのURLです
リファラを読む
582 :
名無しさん@お腹いっぱい。 :01/10/04 13:23 ID:nOAoqb9A
CGIモジュールのrefererでよいのでしょうか。
>>581 空白になっちゃうんです。うううむ。
単純に%ENVから読むのはどうよ?
>>557 の正規表現って全然だめじゃん!
てか、えらそうに書いたの俺なんすけど。
正規表現スレ逝って修行してきます・・・。
perlで、いわゆるdiv演算子に相当する演算子って何ですか? 9 div 4 = 2 9 mod 4 = 1 のdivです。
int (9/4) 笑っ
9%4 笑笑っ
589 :
名無しさん@お腹いっぱい。 :01/10/04 16:52 ID:4x063qa6
publicフォルダ外の、ブラウザからはアクセスできない場所にあるファイルに Perlからアクセスすることは可能でしょうか? 出来る場合、相対パスでアクセスするのでしょうか??
>>587 >>588 あ。divはないんですね。
%があるのに変だなぁと思って探してたんです。
#9-(9%4)とかやってたですよ。鬱。int()でいいんだ…
整数計算を多用するときはintegerプラグマ使うと楽っぽい。 いまいち動作がわかってないんだが。 { use integer; $foo = 9 / 4; } または use integer; $bar = 9 / 4; no integer;
>>589 可能である。
相対パスでも絶対パスでも。ただしURLじゃなくてOSのパス。
.pl と .pm の違いが良くわかりません。それぞれどういう長所があるのでしょう。 my と local の違いが良くわかりません。どう使い分けるべきなのでしょう。
>>593 一口には説明できないけど、まず".pl"と".pm"の表面的な違い。
●Hoge.plファイル
require 'Hoge.pl'; で読み込む。
実際はどんな拡張子でもいいが慣例として".pl"が使われる。
requireでは、この命令を実行する時点でファイルが読み込まれる。
必要なときのみrequireするようにうまくコードを書くと
無駄なメモリを使わずにすむ。
● Hoge.pmファイル
拡張子".pm"の扱いは特別で、
use Hoge ('mona','giko'); と書くのは、
BEGIN{ require 'Hoge.pm'; Hoge->import('mona','giko'); }
と書くのと同じ。
BEGINブロック相当なので、コード中のどこにuse Hogeを書いても
Hoge.pmは起動時に必ず読み込まれる。
決して実行されない位置、たとえばif (0) { use Hoge; } でもね。
さらに自動的に実行されるHoge->import()を利用して各種の初期設定が可能。
importメソッドをどう使うかは自由だけど、普通はHogeクラスを
メインプログラムから簡単にアクセスするための設定とかを書く。
#まだ言ってることワケワカだろうけど、そのうちわかる。
595 :
名無しさん@お腹いっぱい。 :01/10/05 11:28 ID:QBNm.OW.
シフトJISのテキストを処理して、UTF-8で出力したいのですが、 どのようにしたら良いでしょうか。 また、ゴミデータ(エディタで表示できないような文字)の 判別方法はありますか?
596 :
名無しさん@お腹いっぱい。 :01/10/05 11:44 ID:Cx9AZXvI
>>595 Jcode.pmを入手して使うと楽。
日本人が作ったやつだけど、CPANにあるっけ?調べてみて。
use Jcode;
my $s = "まあ聞いてくれよ、スレと関係あるからさ。\n";
print Jcode->new(\$s, 'sjis')->utf8;
何がゴミデータかというのはエディタにもよるから。どのエディタ?
597 :
596 :01/10/05 11:46 ID:???
Jcode.pmをインストールするにはCコンパイラが使える 環境でないとだめだったかも。。。 Windows用ならコンパイル済みのやつがある。
>598 そんなの。unix系は"c:"なしで。
600 :
名無しさん@お腹いっぱい。 :01/10/05 13:07 ID:QBNm.OW.
>>596 ありがとうございます!
ゴミデータってのは、制御コードのようなものとか、
文字コードが判別できないような「F・カ」みたいに表示されて
しまうものとか。そういったデータのことです。
エディタによって表示が違うのはその通りですね(^^;
$data = 'hogehogeMicro$ofthogehoge'; $hash{'Micro$oft'} = "VVindovvs"; foreach(keys %hash) { $data =~ s/$_/$hash{$_}/; } print $data; この場合 "Micro$oft" に含まれる "$" がパターンと見なされて うまく置換できません。どのような回避方法が考えられるでしょうか? 自分ではパターン文字列でメタ文字と見なされてしまう文字列を あらかじめエスケープする置換処理を挿入しているのですが あまりスマートとは思えません。 パターン部の変数展開を一度だけ行ってくれるといいんですが。 「o」では期待した動作が得られませんでした。
\Q$_\E
ハッシュキーが少なければ"|"でつなげた正規表現を最初に作っておくのもありだな。 $data = 'hogehogeMicro$ofthogehoge'; %hash = ( 'Micro$oft' => "VVindovvs", 'hoge' => '[ピー]' ); $re_keys = join('|', map { "\Q$_\E" } keys(%hash)); $data =~ s/($re_keys)/$hash{$1}/go; print $data;
604 :
名無しさん@お腹いっぱい。 :01/10/05 23:37 ID:QBNm.OW.
>>600 Jcodeをppmでインストールしようとしたら
>Installing package 'Jcode'...
>Error installing package 'Jcode': Read a PPD for 'Jcode',
>but it is not intended for this build of Perl
>(MSWin32-x86-multi-thread)
というメッセージが出てきてしまいました。バージョン違い?
CPAN逝ってきます。
605 :
名無しさん@お腹いっぱい。 :01/10/06 00:32 ID:MEgHrhMk
607 :
名無しさん@お腹いっぱい。 :01/10/06 08:38 ID:xcBMND.s
ファイルに記録する時、1人(グループ)に関する複数の データを記録する時の区切り文字には定番だったり 慣例のものとかってあるんですか? よく目にするのが<>だったり\tだったりしますが? 教えてくらはい。
608 :
名無しさん@お腹いっぱい。 :01/10/06 10:51 ID:32vtXsHY
自分のPCはWindowsなんですが、perlを書くときに UNIXみたいに#! /usr/local/bin/perl(コマンドライン?) というのを使える様にするにはどうすればいいんでしょうか? ちなみに、perlソフトはActive Perlです。 教えて君初心者ですみません。。
>>607 エクセルとか意識するならCSVは忘れない方がいいんじゃないかな
\tはTSVって言ってCSVの親戚みたいなもんか。。
<>が使われるのは多分BBSとかのログは大抵タグがエスケープされてる
から、デリミタ混入→ミスヒット、の可能性が低くなるからだと思う
610 :
名無しさん@お腹いっぱい。 :01/10/06 11:09 ID:xcBMND.s
>デリミタ混入→ミスヒット、の可能性が低くなるから なるほど!<>にはそういう意味があったんですか! どうもありがとうございます。 TSVってのは知りませんでした。 メモ帳とかで開くとタブで区切っとけば 見やすいからだと思てた・・・。
>>608 入手にちょいと苦労するがむっちゃ便利なプログラムがある。
ベクターで「SOS」を検索してみ。
612 :
名無しさん@お腹いっぱい。 :01/10/06 11:28 ID:xcBMND.s
>>608 Cygwin入れたらいい
これで一件落着
614 :
608 :01/10/06 17:41 ID:PN8fPnr6
>>613 それを入れたら良いとか本に書いてあったんですが
ダウンロードサイトに行ってみたら、どうやら金取られるみたいで..
611さんの言うのもダウンロードしたのですが
どうやってパッチを当てるかいまいちわからなくて..。
ほんと、難しいですよね...鬱
Cygwin有料になったのか? 笑 もっと健作白〜〜〜 何をそんなに焦っているのか? 今日納期の仕事してる訳じゃ無いだろ 実際Unixのshellに触る事は回り道でもなんでも無いんだぞ って9xで使えたかな (・∀・;)??
617 :
614 :01/10/06 20:26 ID:w30D7B7.
>>615-616 どうもありがとうございんます。。
どっかに移動して起動して、というのはどういうことでしょうか?
ディスクトップに解凍するのでいいのですか?
あと、大変失礼な質問なのですが
そのファイルは大丈夫なのでしょうか?
拡張子がexeなので心配で...
どうやらアナタはWINDOWSの操作に先に慣れた方が良さそうです。 まずWIN板に行ってファイル操作や圧縮解凍に付いて学びましょう >あと、大変失礼な質問なのですが >そのファイルは大丈夫なのでしょうか? >拡張子がexeなので心配で... 憶測ですが、おそらく616氏はsetup.exeのAUTHORでもcygwin.comのサーバ管理者でも 無いと思われますので何がどう大丈夫なのかは分からないでしょう
619 :
617 :01/10/06 21:58 ID:w30D7B7.
>>618 すみません、実はP検3級のOSはAなんです(w
解凍とかもたまにUGにいくのである程度はわかるのですが
でも、やっぱり深く掘り下げると難しくて。。
一瞬ウィルスだと思ったんですがアドレスが違うみたいですね。
ちょっとexeファイルに過敏になっていたもので..。
もう少し勉強してまた、質問させていただきます。
解凍はたまにUGに逝くとある程度わかるんですか。名言ですね(藁
621 :
名無しさん@お腹いっぱい。 :01/10/06 22:22 ID:w30D7B7.
>>620 解凍するソフトの種類や拡張子の種類はわかりますです。
622 :
:01/10/06 23:20 ID:???
さてはあなた、ただのワレザーですね
623 :
名無しさん@お腹いっぱい。 :01/10/06 23:29 ID:tXZdOs1c
perlの範疇ではないかもしれませんが… ファイルからデータを読みだし、そのデータを含むHTMLを ブラウザに表示させるスクリプトを書きました。 TELNETのコマンドライン上から実行すると 狙いどおりの出力をしてくれるのですが、 ブラウザ上からURLを入力して実行すると 500 Internal Server Errorがでてしまいます。 パーミッションなども確認したのですが おかしなところは見当たりません。 何かチェックすべきところが他にあるのでしょうか。
Content-type?
625 :
623 :01/10/06 23:46 ID:tXZdOs1c
print "Content-type: text/html\n"; HTMLの直前に書きました。
>>623 print "Content-Type: text/html\n\n";
627 :
623 :01/10/06 23:51 ID:???
改行2つ「\n\n」 でした。自分で書いて気がついた。 助かった〜ありがとうございました。
628 :
626 :01/10/06 23:52 ID:???
ゴメンちぇく済みだったみたいね
629 :
たかちゃん :01/10/06 23:54 ID:j.NzGGwA
すいません 初心者ですが、cgiを設置したのに見ると CGI エラー - 以下のコマンドラインを実行できません : "perl C:\kujira\aska.cgi ", errorcode = 2, No such file or directory と出るのですが、どうしてでしょうか? お願いします おしえてください
CGIスレ逝って下さい。
perlのスクリプトをコンパイルして実行形式にしたいです。 助けてやって下さい。
>631 perlcc。 CGI速くするだけなら別の方法もあるよ。
foreach (reverse 1 .. 10) {}だと、 1番目から10番目を逆順で処理してると思うんですが、 逆順にしてから1番目から10番目を取得するにはどうしたらいいでしょうか。 つまり、 1-30のうち 10,9,8...,2,1ではなくて、 30,29,28...,22,21と取得するということ。
634 :
名無しさん@お腹いっぱい。 :01/10/07 14:44 ID:jXvc6whk
>632 perlccですか!ありがとうございます。 けどやっぱcとかみたいにうまくコンパイルできないとか 言う話をちらほら聞いた事あるんですけどどうなんでしょう? >CGI速くするだけなら別の方法もあるよ。 良かったら教えて欲しいっす!! どんなんでしょう?
>>644 スライスの使えばOK.
(reverse 1..30)[0..9]
すまん。
>>633 ね。逝くわ。
あと、30から21がほしいだけなら、reverse21..30でもいいような。
>>633 for($i = 30; 20 < $i; $i--) としても良いです。
>>634 mod_perl, SpeedyCGI など。Perl の場合は起動と構文解析に時間がかかるので、そのコストをおさえることができます。
>>635 ありがとうございます。
んー。
@read[$hoge .. $moge]を逆順で処理させたくて、
$hoge = 0;
$moge = $hoge + 10;
foreach (reverse @read[$hoge .. $moge]){}
とやってみたのですが、
@readに仮に0-30のリストが入っているとして、
9,8,7,6,5,4,3,2,1,30という処理順になってしまいました。
むむむ…。一体どうすればいいのでしょう…。
>>637 ありがとうございます。
試してみます。
640 :
635 :01/10/07 16:30 ID:???
>>638 修正
> 9,8,7,6,5,4,3,2,1,30という処理順になってしまいました。
→ 9,8,7,6,5,4,3,2,1,0,30という処理順になってしまいました。
>>637 書き込んだらレスがついていたので慌ててお礼だけ書きましたが、、、
まず考えたのがそれだったんですが、作っているのが掲示板で、
リストの最後がいくつになるか判断するルーチンは今のところ無いんです。
ありがとうございました。
641 :
名無しさん@お腹いっぱい。 :01/10/07 16:31 ID:jXvc6whk
>637 サーバーで用いるインタープリタを変えるって事なのかな? 勉強になるです。ありがとうございました。
perlccはcのソースにするのかな? 実行形式にするのにはPerl2Exeってのもあるんですね。 知ってる人の方がおおいんだろうけど 自分見たいののために報告〜。
643 :
名無しさん@お腹いっぱい。 :01/10/07 17:09 ID:Hz5hclI2
>>640 >→ 9,8,7,6,5,4,3,2,1,0,30という処理順になってしまいました。
いったいどうすれば、そんな処理順に・・・。
それをねらってやるほうが難しい(つーか面倒)なのでは。
>>643 @a = (0 .. 30);
@a = reverse @a[-1 .. 9];
print "@a\n";
645 :
名無しさん@お腹いっぱい。 :01/10/07 21:46 ID:XxfLnDlQ
みんなファイルロックするのにどんな方法使ってます? リネームが一番効果的っての聞いた事あんですけど。 DBMてのを使うのは無しで。
646 :
名無しさん@お腹いっぱい。 :01/10/07 22:17 ID:kSNrchYM
キーが二つあるハッシュで、foreachみたく要素を回すにはどうしたらいいでしょうか。 ずーと悩んでるけれど全然スマートな方法が思いつかないッす。
>>645 flockだけど、、evalすらしてない w
>>646 二つしかないならループしなくて良いじゃん?
普通はkeysでkeyの配列作ってその配列をforeachしたり
eachしたり、、
@keys = keys (%hash);foreach (@keys)
while (($key,$value) = each %hash)
648 :
名無しさん@お腹いっぱい。 :01/10/07 22:36 ID:kSNrchYM
>>647 レスさんきゅ
でも、チョット違うかもしんない。
そういう意味でなら、キーがみっつて事になるかな。
$hashref->{1}->{2} = 3;
みたいな。
書き方はこれじゃなくても、何でもいいんで同様のことを実行できる方法ないっすかね。
647に書いてるやん・・・・(゚Д゚)???
650 :
むぎ茶 :01/10/07 22:55 ID:???
ハッシュ使うな全部配列にしろ (n
┐(´ー`)┌
┏━━━━━━━━━┓
┃('Д')y ─┛~~ ┃
┃むぎ茶 ┃
┃
[email protected] ┃
┗━━━━━━━━━┛
651 :
名無しさん@お腹いっぱい。 :01/10/07 22:58 ID:kSNrchYM
$hashref = \%hash; $hashref->{"key1-1"}->{"key1-2"} = "1-3"; $hashref->{"key2-1"}->{"key2-2"} = "2-3"; while (($key, $value) = each %hash) { while (($key2, $value2) = each $value->{$key}) { print $key, "=>", $value->{$key2}, "=>", $value2, "\n"; } } こーいうことがしたいの。
652 :
634 :01/10/07 23:03 ID:???
%hash = (
key1 => { key1-1 => 'val1-1' },
key2 => { key2-1 => 'val2-2' },
);
>>651 %$valueね。
おー。うごいた。そっいうことかー。 むっちゃありがとー。今夜はぐっすりねれそうだよー。
LWPってリジューム可能?
>>652 何言いたいのか解らん、上の方で言ってるのでなんで駄目なんだ
@list = reverse (0..30);
foreach (@list){
print "$_\n";
last if($cc == 10);
$cc++;
}
>>652 こうだと推測してみた。正解なら俺をエスパーと呼べ。
@read = (0 .. 30);
$hoge = 0;
$moge = $hoge + 10;
foreach (reverse @read[-$moge .. -1-$hoge]) { print "$_\n"; }
>>634 foreach (reverse @read[-10 .. -1])
はどう?
変数使うなら
$hoge = $#read;
$moge = $hoge+10;
foreach (reverse @read[$moge .. $hoge])
とか。
これは先に後ろ10個取り出してから,逆順にしてる。
>>638 は始めの10個取り出してる。
659 :
658 :01/10/07 23:33 ID:???
あう,かぶった・・・
660 :
634 :01/10/07 23:45 ID:???
661 :
名無しさん@お腹いっぱい。 :01/10/08 00:04 ID:pELG7ByE
>648 なんかflockだとするロック破られるとか 書いてあるの読んで気がひけるんですよね。 実際どうなのかはわからないですけど。 皆さんの方法とか教えてくれないですかね?
突込みどころ満載なのはいいとして・・・・ foreach ( reverse @read[$page .. $page_end] ) { これは foreach ( reverse (@read[$page .. $page_end]) ) { こう評価される つまりケツから10個じゃなくて頭の10個をreverseしてる 先に@read = reverse @read; とでもして foreach (@read[$page .. $page_end] ){ こうしとけ
>>661 何を破られんのか解らんけど、flockしないなら
rename、simlink、mkdir、辺りの関数で実装するの普通
ここでロック論争始めるとまた色んな信者さんが出てくるから
その辺のスクリプトとか大崎さん所(perlメモ)とか見てくれ
flockよりショボイのは幾らでも組めるが***まともに機能してる***
flock以上のは組めないってのがほんとのところ
foreach ( (reverse @read)[$page .. $page_end] ) { こうだった、鬱
665 :
名無しさん@お腹いっぱい。 :01/10/08 00:54 ID:pELG7ByE
>いやロックだろ。
666 :
634 :01/10/08 01:01 ID:???
>>662 ありがとうございます。
さらに精進します。
みなさま。
ちょっとしつこかったです。反省。
スレ汚しスマソ。です。
恥ずかしいので
>>660 は削除しときます。
667 :
名無しさん@お腹いっぱい。 :01/10/08 01:02 ID:lKBSfyUU
>>655 LWPにレジューム機能は存在しないもよう。
関連モジュール内で"content-range"という文字列を
探したけど該当する機能が見つからなかった。
LWPはでかいから見落としてる可能性もあるけどね。
レジュームしたけりゃ、自分で"Content-Range"ヘッダを付けて
ファイル保存処理をガリガリ書くしかないのかもしれない。
デンパ?
>>668 見れないしスレ違いだし良くワカラナイけど
HTTP_REFERERはREMOTE_ADDRとかと違ってクライアント側で容易に書き換え
出来るわけ。
で、多分link.cgiがQUERYをラップして変わりに取りに行ってると思う訳
671 :
667 :01/10/08 01:38 ID:???
>>670 ありがとう
それをコードにするとどうなるでしょう?ってのは、たしかにスレ違いですね
こんなCGI探してますスレッドでもう一回聞いてみます
672 :
名無しさん@お腹いっぱい。 :01/10/08 14:19 ID:xLWu69kM
indexを用いたマッチ検索で大文字と小文字を区別しない 方法はどの様なのが定番なのでしょうか?
事前に lc または uc でホゲホゲ。 m//i 使っても良いと思うが。
>>668 そうなんですか…どうも。
とりあえずContent-Rangeとやらを調べてみます。
675 :
名無しさん@お腹いっぱい。 :01/10/08 20:31 ID:Kg6GidGE
>673 レスありがとです。 やっぱりindexだといったん大文字か小文字にするしか 無いんですかね? 変換のロスで正規表現の方が早くなったり。
676 :
名無しさん@お腹いっぱい。 :01/10/08 20:50 ID:/cLj7636
>>675 検索対象データのコピーを作って、
そっちをあらかじめ大文字か小文字に統一しとくのは?
ディスクスペースは2倍必要だけど。
そういうのもありですね。 けど検索対象のデータが結構ごちゃごちゃしてるんで これ以上ファイルが増えるとちょっと(^^;
>>677 検索するたびにそんな多数のファイルを開いてると
I/Oに負担かかって氏ぬです。
↑いまは亡き「とほほラウンジ」方式。
selectってコスト高いって本当っすか 乱発するとダメ?
680 :
名無しさん@お腹いっぱい。 :01/10/09 01:08 ID:qw3TKOks
I/O処理について便乗質問ですが @掲示板の全てcgiで制御する A最近の5件ほどhtmlで表示させてそれ以降(ログの表示)は cgiで制御する B書き込むたびに全てhtmlで出力(ページ数は5ページほど)させる だとAが一番サーバに易しいですかね?
>>679 ん? 聞いた事ないけど、何と比べて?
>>680 HTMLは静的、CGIは動的なコンテンツを提供してるって言えばいい?
一年に3人しか書き込まなくてROMが1000万人居るなら2
リロード代わりに見た人間全員が書き込むんなら1、
3は意味解らん、なら1ページに全部吐けば良いじゃん
ココみたいな閑古板なら反って20スレ/PAGEの最終15記事表示くらいの方が良いと思うんだよなー
いやiモードのサイトなんですよ。 そんでデータファイルは別に作っといてそれから htmlファイルとして出力しようと思ったんだけど、 書き込みされるたびにhtmlファイルをすべて作り直すのも負担になるな…と。 だけどアクセスされるたびにcgiで処理する@は論外かなと まぁ一番一般的だけど。 んじゃ大抵の人間はログなんか読まないからTOPページだけhtmlで 出力しておくかなと思って。rom率とカキコ率で変わってくるけど チャットじゃないから最初のページはhtmlにした方が効率が良いかと。 …何をいってるのかわからないと。 処理ごとの負担がデータ化されてるページとかあれば楽なんですけどね。
1週間くらい各ページにアクセス解析つけとけば? カキコのカウントもとればなおよし。
つーかその辺は一般論に従うのが手っ取り早いんですよ 10年前の超オーバーヘッドなSCSIHDD使ってる鯖でHTML化とか言って ガリガリファイル書き換えまくったら速攻でディスクビジーだろうし 結局鯖のuptimeと相談しながらってなるでしょ? それを一からやりたいなら 止めないけど・・・ で、頭の良い先人が色々考えた結果ROM比30:1ならHTMLの方が良いだろっつて アナタが今みてるココとか紅茶板があるんすよ
>頭の良い先人が色々考えた結果ROM比30:1ならHTMLの方が良いだろっつて こういうの知りたかったんです。為になるです。 >684 そうですね。最初は負荷かかっても損して得とれみたいな かんじで統計とってみようかなと思います。 まぁ一概にはいえないんでしょうけど→30:1 参考にしようと思います。
10:1ぐらいだろ 書き出すhtmlのサイズにもよるが。 頻繁にアクセスするファイルはバッファに入るだろうし
>頻繁にアクセスするファイルは 頭大丈夫ですか?
689 :
:01/10/09 15:10 ID:???
@aiueo = "123"; @aiueo = "あいう"; if(@aiueo != 0){ foreach (@aiueo){ print "$_"; } } 配列aiueoに"123"と"あいう"を格納したいのですが、 二つ目のあいうだけしか表示されません。。。
690 :
:01/10/09 15:19 ID:???
もしかして、後から配列に値を加えたい場合は @aiueo = "あいう"; このようにすると値が上書きされてしまいますね・・・(汗 すいません。 後から加えたい場合は必ず push @formcheck, $Name; か、 unshift @formcheck, $Name; でやらなきゃいけないんでしょうか?
>>689 pushなりunshiftなりしなさい。
push @array, $str;
# そもそも @array = $str というのはどうかと思うぞ。
意味不明 @aiueo = "あいう"; これで'あいう'しか入ってないでしょ? @aiueo = ("123","あいう"); こうしとけ つーかリファレンス嫁
693 :
:01/10/09 15:23 ID:???
すいません、勉強不足でした。。
<html> <br>
ぼほほ〜〜。 タグ辞書登録してたらクリックしてもうた〜。すんません。
696 :
名無しさん@お腹いっぱい。 :01/10/09 18:24 ID:caK9Qd8A
変数の中にはいってる変数の名前からそれも評価するような 方法ないでしょうか?↓みたいなかんじです。 $bb="$aa"; $aa="ほげ"; print "$bb"; これだと何も出力されませんが 出力が ほげ と出るような方法は無いでしょうか?
eval (print "$bb");
$cc = eval $bb; print $cc; でもいいっすね。
>>696 $bb='$aa'; #あとこれをシングルクォートに
1行目と2行目逆だよ 1行目で何が代入されるか考えよう
>>699 それじゃダメだって、、それならシンボリックリファレンス使わないと。。。
perl -e "$b=q{ok};$a=q{b};print $$a;"
703 :
:01/10/09 18:45 ID:???
$bb="$aa"; # ここで$bbに$aaが入る。が、$aaは空っぽなので、$bbも空っぽのまま $aa="ほげ"; # ここで$aaに「ほげ」代入 print "$bb"; # $bbは空なので、、、 ってこう糞親切?に書くと怒る厨房っているよね
まとめよう。 方法1 $bb='$aa'; $aa='ほげ'; print eval $bb; 方法2 $bb='aa'; $aa='ほげ'; print ${$bb};
706 :
696 :01/10/09 19:06 ID:???
おぉぉ!この板でこんなに早くレスを頂けるとは 思とらんかたです。しかもこなにイパーイ! なるほど!どうもです。 1行目と2行目が逆なのはこの手法を説明する 為だったんで…。これと全く同じというわけじゃないんです。 わかりにずらかったですね。スマソです。
似たようなシチュエーションだけど、 「文字列の中の変数名」をあとから展開するってどうやってます? おれはこんなの。 $template = 'hello $name!'; $name = 'ほげ'; print eval '"'.$template.'"'; いちおうこれで動くけど、なんか無駄な気が。。。
$str = '$hoe'; $hoe = "sakura"; $str =~ s/(\$\w+)/$1/eeg; print "$str\n"; ってのもアリかも。
709 :
696 :01/10/09 19:11 ID:???
アセンリ言語でいう(0010)とか? みたいにそのアドレスにはいってるアドレスを参照する ってのを知りたかったのです。 なんかいつも質問してるな…。ありがとうですです。
$template =~ s/\$([a-zA-Z\d\-_]+)/$$1/g; みたいな感じか。 あえてやるなら。
711 :
707 :01/10/09 19:22 ID:???
>>708 ,
>>710 あ!置換すればいいんか!
ダブルクォート内の変数展開にこだわってて見えなかった。
どもー。
$bb= eval $aa; $aa= $zz; $zz='hoge'; print eval $bb; こういうのはできないんですねぇ。
$bb= eval $aa; $aa= '$zz'; $zz='hoge'; print eval $bb; こうか。どっちにしろできない。
>>711 無理に置換するよりも、最初のままの方がいいんではないか思う。
あと、
eval(qq($template))
って書くと少しカッコイイ(w
Perl暦2ヶ月の初心者です。 関数のリファレンスについての質問です。 配列やハッシュならよく使っているのですが、関数のリファレンスは どういうときに便利なのかがいまいち理解できません。 先生、ご指導お願いします。
716 :
名無しさん@お腹いっぱい。 :01/10/09 22:19 ID:ac7tHUi6
gzip圧縮されたページを取得した後で展開するのにお手頃なPerlモジュールはありますでしょうか。 プロバイダの個人HPなので、システム変更の自由はきかないんです。 その上、gzipも使えないので。 やはりCPANのArchive::zipを使えと言う事になるのでしょうか?
---例えば配列やハッシュを渡すとき &Fnc(\%data, $file); sub Fnc { my ($ref_data, $file) = @_; my $name = $ref_data->{NAME}; my $title = $ref_data->{TITLE}; open(DATA, $file); ..... } ---例えばクラスを作るとき sub new { my $class = shift; my $self = {}; bless($self, $class); $self->_initialize(); return $self; } sub _initialize { my $self = shift; $self->{NAME} = 'hoge'; ..... }
>714 置き換えても動作せんよ?漏れがいけないんかな?
719 :
名無しさん@お腹いっぱい。 :01/10/09 22:39 ID:rO0MbdjQ
>>716 ローカル環境でgzipの展開にCompress::Zlibを使ってます。
ただしUNIXサーバに入れるにはCコンパイラが必要みたいです。
(うちはWindows + ActivePerl + PPMなのでコンパイル不要だった)
720 :
714 :01/10/09 23:38 ID:1lvwgexc
>>718 あれれ?
$needle='This is sample text.';
$template='$needle';
print $template,"\n",eval(qq($template)),"\n";で、
$needle
This is sample text.って出ませんか?
改行が一部壊れた… しかもageちゃったシクーリ
722 :
名無しさん@お腹いっぱい。 :01/10/10 00:19 ID:FXDqXQ2w
特定のページからリンクされた場合以外は他のページに飛ばす機能を組み込んだ掲示板を作りたいのですが どうすればいいですか? 掲示板はネットで見つかったのですがリンクの制限が見つからなくて困ってます。
>720
それだとばっちし動作します。けど
>>707 の最後の一行と
eval(qq($template))を置き換えても動作しないです。
「文字列の中の変数名」をあとから展開
てのはその方法だとできないって事なのかな?
ちなみにeval(qq($template))のqqてのは何なのでしょうか?
>>722 最初にHTTP_REFERERとって特定のURL以外ならlocationで飛ばせばいいんでない?
725 :
722 :01/10/10 00:39 ID:FXDqXQ2w
できました。ありがとうございました。
726 :
707 :01/10/10 00:54 ID:1woNivdA
>>720 おれも自分で試してみたよん。
eval(qq($template)) では707はうまくいかないっす。
eval(qq("$template")) ならオーケーでした。
結局、このやりかたは評価が2回必要になる(?)ので、
正規表現展開の手間をいれても
>>710 の人のやりかたが速いです。
Benchmark検証済み。
シンボリックリンクでの参照は my変数が見えない、strict refsでは動かない等の問題があることだけ注意。
728 :
720 :01/10/10 01:08 ID:fymnbEUM
729 :
716 :01/10/10 08:19 ID:OwjZu2K6
>>719 レスどうもです。そうですか、ドキュメントを未だちゃんと読んでいなかった
のですが、Compress::Zlibはコンパイルが必要ですか。プロバのHPなので
それも出来なくてちと悲しいです。
>>729 コンパイルもやろうと思えば出来ますよ。
731 :
名無しさん@お腹いっぱい。 :01/10/10 14:09 ID:29gVd4os
LWP::UserAgent からFORMの内容を POSTメソッドで 送信したいんですが、どのように受け渡せばいいのでしょう? $ua->cookie_jar($cookies); みたいに格納できるメソッドがあるのですか?
他人の鯖に設置してある掲示板とかのパスワード保存ファイルって(例えばpass.cgi) CGIで読みこんだりとかできるの?それでパスクラックできねえかな。
「CGIで読みこんだり」ってのが意味不明
732には100%無理。
735 :
名無しさん@お腹いっぱい。 :01/10/10 16:22 ID:2.AeAxdc
>>735 訂正。[name=>'ほげ',...]でした。
LWP使うやつはperldoc lwpcookぐらい読んどけ。
>>735 ありがとうございます。
調べてみたら
$hd =
HTTP::Headers- >new;
foreach $key ( keys %FORM ){
$hd->push_header( $key -> $FORM{$key} );
}
$req =
HTTP::Request- >new( 'POST', $url, $hd );
でもいけそうな感じだったので試してみます。
というかPOSTで渡す内容が不特定なので
[name=>'ほげ', text=>'ふげ']
だと無理ですかね。
739 :
731 :01/10/10 18:23 ID:???
>>738 うう、 $hd->push_header ではうまくいきませんでした。
>>735 さんの方法で上手くできるんでしょうが、不特定多数の
要素を送る必要があるのでこの方法は使えないし…。
すいません、不特定多数の要素を POSTとして送る方法を
教えていただけないでしょうか。
741 :
740 :01/10/10 19:06 ID:???
関数内で関数を記述していますが、同名の関数が出現した場合、 うまく動いてくれません。 何が足りないのか教えてください。 sub foo() { sub _getstr($) { my ($str) = @_; return $str . "だよ\n"; } my ($str) = _getstr("てきとー"); print $str; } sub foo2() { sub _getstr($) { my ($str) = @_; return $str . "だもん\n"; } my ($str) = _getstr("てきとー"); print $str; } &foo(); &foo2();
743 :
名無しさん@お腹いっぱい。 :01/10/10 20:05 ID:0t.5n9Ms
>>742 それじゃ_getstrが局所的な関数定義になってないです。
Perlは基本的に、どこで定義してもグローバル関数(笑
2つの_getsrtを別々の名前空間で定義すればオーケ。
sub foo() { package foo; sub _getstr() 以下略 }
sub foo2() { package foo2; sub _getstr() 以下略 }
>743さん どうもありがとうございます。 my宣言とかできるかちょっと期待したのですが、 これは、packageの方も少し試してみて、 内部関数名を変えるかpackage使うか決めたいと思います。 (関数内でpackage書けるの知りませんでした。どうもです)
package使った方がいい感じなのでそうしました^^
#ローカル関数を使いたいのならば local *foo = sub{ hogehoge }; my $foo = sub{ hogehoge }; #とすれば良いのではないかな?
>>746 それがほんとのローカル関数ですね。
743みたいなのは外から&foo::_getstr()でアクセスできるし。
>746さん なるほど。こんな感じですね。 どうもありがとうございます。 sub foo() { my $_getstr = sub($) { my ($str) = @_; return $str . "だよ\n"; }; my ($str) = $_getstr->("てきとー"); print $str; }
>>749 プロトタイプに注意。
#!/usr/bin/perl
sub PrintScalar($){ print shift, "\n" }
BEGIN{
*PrintScalar2 = \&PrintScalar;
$PrintScalar3 = \&PrintScalar;
}
*PrintScalar4 = \&PrintScalar;
$PrintScalar5 = \&PrintScalar;
my @hoge = qw(foo bar);
PrintScalar (@hoge);
PrintScalar2 (@hoge);
$PrintScalar3->(@hoge);
PrintScalar4 (@hoge);
$PrintScalar5->(@hoge);
PrintScalar6 (@hoge);
BEGIN{
*PrintScalar6 = \&PrintScalar;
}
__END__
751 :
名無しさん@お腹いっぱい。 :01/10/11 16:48 ID:kMiBAPJ6
>>750 えーと、「プロトタイプを有効にするには、BEGINブロックの中で
エリアスを作るしかない」つーことですか?
あ。念のため今perldoc perlsub見たら、そう明記されてたっす。
知らなかったー。プロトタイプあんま使わないから。
要するにプロトタイプ付きの「ローカル関数」は作れないってことなのか。
752 :
751 :01/10/11 16:51 ID:???
perldubじゃねーや。perlrefの"Function Templates"のとこでした。
プロトタイプの'&'って使ったことある人いる? なんかサンプル見るとtry〜catch構文とか作ってて いろんな意味でスゲーんですけど。 俺は一生プロトタイプ'&'を自分で使うことはあるまい。
754 :
nullsann :01/10/11 23:27 ID:S31Vh/vQ
複数のファイルを何度もOpen/Closeさせてるんですが、 ファイルロックは一度で良いんでしょうか? sub filecheck{ &lock;# open IN,"$logfile"; #syori close IN; open FP,"> $logfile" #syori close FP; . . . . &unlock; } mkdirのロック方式使ってるんですが・・・。
756 :
名無しさん@お腹いっぱい。 :01/10/12 01:31 ID:kGkVgeeA
>>756 許可するのが2つぐらいなら
「URL1ではなく、URL2でもなければ、ばいばい」というふうに
素直にコーディングするといいです。
if ($ENV{略} ne 'URL1' and $ENV{略} ne 'URL2') {
・・・
}
758 :
名無しさん@お腹いっぱい。 :01/10/12 10:18 ID:UFajsOUw
cgiからcgiを作るのを習作していますがエラーとなってしまいます。何か 根本的に違うのでしょうか?お教えください。 #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>CGIテスト</TITLE></HEAD>\n"; print "<BODY>\n"; # print "<form name="form1" method="post" action="">\n"; print "<input type="checkbox" name="checkbox" value="checkbox">\n"; print "</form>"; # print "</BODY>\n"; print "</HTML>\n"; __END__
「cgiからcgiを作るのを習作しています」が根本的にワケワカラン(w とりあえず print "<form name="form1" method="post" action="">\n"; print "<input type="checkbox" name="checkbox" value="checkbox">\n"; この二行がだめ。
(´-`).。oO( " -> \" ・・・・)
761 :
名無しさん@お腹いっぱい。 :01/10/12 10:39 ID:DN2jVK/o
('-').。oO
762 :
名無しさん@お腹いっぱい。 :01/10/12 11:11 ID:VXGFJvh.
print "<form name=\"form1\" method=\"post\" action=\"\">\n"; print "<input type="checkbox\" name=\"checkbox\" value=\"checkbox\">\n"; だね。
763 :
名無しさん@お腹いっぱい。 :01/10/12 11:16 ID:VXGFJvh.
一個抜けた。 print "<input type=\"checkbox\" name=\"checkbox\" value=\"checkbox\">\n"; 鬱だ。
素直にシングルクォートかひあどきゅめんとを・・・・・qqでもいいけど。。
>>762-763 のような誤りを避ける為に
qq{<input type="checkbox" name="checkbox" value="checkbox">\n};
まぁ
>>758 、お前はマトモな本で基礎を勉強してから出なおしなさいってこった。
766 :
名無しさん@お腹いっぱい。 :01/10/12 11:43 ID:uPcFyHO2
>>756 ロジックを1行に書くのって頭が混乱しない?
効率悪いかも知れないけど、こんな関数を作るほうがいいと思う。
if (! &is_good_referer()) {
:
}
sub is_good_referer {
my @kyoka = ('URL1', 'URL2');
foreach my $url (@kyoka) {
if ($ENV{HTTP_REFERER} eq $url) {
return 1; # 許可するURLのどれかに一致すれば1を返す
}
}
return 0; # どれにも一致しなければ0を返す
}
767 :
業 :01/10/12 11:57 ID:e.iu2Egs
ネストは見る場合は大事と思われ。 ただ、空白2文字はちょっとな。4文字は欲しい。
768 :
名無しさん@お腹いっぱい。 :01/10/12 12:13 ID:Qk0xmYmc
何故にコマンドラインからだとファイルの 扱いができないのでしょうか? cgiとして動かすか、実行形式にするしかないのですか?
769 :
名無しさん@お腹いっぱい。 :01/10/12 12:18 ID:ZYB0SiF6
>>768 意味わからん…。
もっと具体的に言ってくれ。
771 :
名無しさん@お腹いっぱい。 :01/10/12 12:20 ID:Qk0xmYmc
>769 即レス感謝です。 わかりずらいですね。DOS窓からスクリプト実行すると file openとかしても読み取ってくれないのです。 これは何故でしょうか?
Winで *.pl は実行できません。
773 :
名無しさん@お腹いっぱい。 :01/10/12 12:27 ID:ZYB0SiF6
>>771 ありがちなのは、パス付きのファイル名を書くとき、
ダブルクォート文字列の中で"\"を"\\"としてないこと。
× "c:\hoge\fuga.txt" ←これはだめ
○ "c:\\hoge\\fuga.txt" ←これはよし。
○ 'c:\hoge\fuga.txt' ←シングルクォート使ってもよし
○ "c:/hoge/fuga.txt" ←"\"じゃなく"/"使ってもよし
>>771 パスが違うかパーミッションの問題じゃねーの。
とりあえず
$filename = "moe/moe.txt"
open(F, $filename) or die "$!: $filename";
としかて、なんで失敗しているのか確認スレ。
>>753 難しく考え杉じゃない。
わかれば簡単。で、サンプル
sub synchronized(&) {
my $code = shift;
lock();
$code->();
unlock();
}
synchronized {
#
>>754 から
open IN,"$logfile";
#syori
close IN;
open FP,"> $logfile"
#syori
close FP;
}
776 :
775 :01/10/12 12:40 ID:???
すまん。セミコロンわすれた。 synchronized { #... };#<-これ
777 :
名無しさん@お腹いっぱい。 :01/10/12 13:23 ID:PeaA6TSM
相対パスでやってるんですけど、ダメなんでしょうか? or die "$!: $filename"; いれてやったらファイルみつからんて言われちゃいました.
あれ?絶対パスでもダメだ。
あれれ?簡単なの作ってテストしたらできた。 御迷惑おかけしました。 どうもありがとうございました。
780 :
名無しさん@お腹いっぱい。 :01/10/12 14:02 ID:PeaA6TSM
$var = 'myvar'; $sym = mypack::$var; は、 $var = 'myvar'; $sym = "mypack::$var"; とは違うらしいのですが、何が違うのでしょうか?
うまく動作しない…。何故だぁ。 DOS窓だと open(MAIL, ">>$docomo");って できないんですか?追記のはずが最初の一回目しか 書き込めんですヽ(`Д´)ノ
すみませんまたミスってました。 なんか私の恥じをさらすスレと化してしまい 申し訳ありません。 ごめんなさい。ごめんなさい。ごめんなさい。
前者はコンパイルエラーになりますが、後者はなりません。 ...という違いです。
>781-782 ミスるのはいいから、なにをどうミスっていたか書いておいてほしい。 それを見た他の初心者が同じ事をしないですむ可能性があるんだから。
>784 誰もしないようなミスだったんで、、、 openする前に$docomoをforeach文で上書きしまくってました。 ちなみに相対パスだとオープンできないってのは よくわからないままです。 他はみなさんの言うと通りやったらできました。
>JAPUさん 780に対するのですね。ありがとうございます。 ただそれだけなんですか。なんか深い意味があるのかと 思っちゃいました。
相対パスってスクリプトからの相対パス? 実行時のカレントディレクトリとスクリプトがおいてあるディレクトリは同じ?
スクリプトからの相対パスです。 実行時のカレントディレクトリはスクリプトの ある所になるのでは無いのですか?
スクリプトが無い場所から起動してみればわかると思うけど、 実行時のカレントディレクトリが基準になるのでは。
このスレでやってたよ、ログ探してみ、WIN、UNIXともカレントが正解。
相対パスでできました。 command.comからの相対パスなんですね。 なるほど。ありがとうございます。
>>791 > command.comからの相対パス
何故そう解釈出来る?
command.comからの相対パスだと、基準はC:\Windowsになってしまうでしょ。
実行時のカレントディレクトリだぞ・・・
793 :
名無しさん@お腹いっぱい。 :01/10/12 22:52 ID:.7AHiXCo
え?え? 違うんですか?実行時のカレントディレクトリというのは どういう事ですか? ちなみにcommand.comからの相対パスで やったらうまくいったものでして。。。
駄目だコリャ
ぼほほ〜〜(´Д`;) 見捨てられちゃったのですか? 意味が…わからん…。
s{command.comからの相対パス} {command.comというファイルが置かれている場所からの相対パス} こう考えなさい。
???(´Д`;) ありがとうございますです。 とりあえず勉強不足過ぎという事ははっきりしました。 まぁ前からわかっていましたが…。 今日一日中このスレに常駐していた気がする。 勉強になるなぁ〜。
799 :
名無しさん@お腹いっぱい。 :01/10/13 19:06 ID:Z60DF3aY
801 :
名無しさん@お腹いっぱい。 :01/10/13 21:10 ID:rwndiC8E
>>800 そこはまだ同色のドットをつなげたりしてるからいいっすよ。
799のやつは全部1x1ドットに分解してた(呆
#これ見るためImage::Magickインストールしちゃったよ
DHTMLは良いなあ・・・・ 激しく無意味でイイ(・∀・)♪!
803 :
799 :01/10/13 23:07 ID:Z60DF3aY
すごいけど、実用性無いよね。 遊び以外で使うこと無いような。、
804 :
799 :01/10/13 23:29 ID:Z60DF3aY
805 :
:01/10/14 06:40 ID:9DG4zskV
困っております。 WIN98でapache web server と active perl使ってます。 htdocsフォルダから、とあるcgiファイルをディスクトップ上に移動して、 書籍のサンプルcgiファイル(←移動させたcgiファイルと同じもの) をhtdocsフォルダにコピペしました。 でそのコピペしたcgiファイルを実行すると、ファイルのダウンロードの画面がでてしまい、 結局そのプログラムは実行されませぬ。 なんででしょう? スレ違いな質問かもしれませんがアドバイスお願いします。
>>805 もともとhtdocsにあったCGIは動作してたん?
それなら後からいれたやつは拡張子が変なんじゃない?
(.cgiじゃなくて.plになってるとか)
807 :
753 :01/10/14 12:10 ID:NXFePnJM
>>775 なるほどー。その例はわかりやすいです。ありがと。
sub hoge(&) {…} を hoge {code}; と呼び出すつーのは
hoge(sub{code}) の省略なんだ。といまさらのように理解したおれ。
>「テーブルアート」という言葉自体は自分が勝手に作った >いわゆる「造語」でありますが、従来画像ファイルを用いて >絵を、グラフィカルなページを作っていたと思うのですが、 >これをHTMLタグだけでなんとか出来ないだろうかという >意味あるのか無いのか分からないような取り組みをして >みようと思ったわけです。ここではそうして作った作品を >総称してテーブルアートと呼んでおります。「テーブル」と >呼んでいるのはHTMLタグで絵を描く際にもっとも多く使用 >するのが<TABLE>タグと呼ばれるものである事に起因しております。 だれでも考えつくが馬鹿馬鹿しくてやらないだけだと思われ。
ただ馬鹿馬鹿しくも地道に作る根性は凄いね。 おれなら元画像にビットマップを用意してCGIで 自動でタグ書き出しちゃうけど、ドット単位になるから でかいかな。
>810 意味わからん。
813 :
蝶初審社 :01/10/14 19:02 ID:/5Y8M3zo
ちょっと質問です。 $a="nanashi"; $aa="nanashisan"; の時、 print "$aa"; とすると、表示されるのはnanashia,nanashisanのどっちでしょう? 前者は$aの変数の値と文字列"a"で 後者は$aaの値です。 Javaとかだと、変数と文字列の区切りがあるのでわかりかったんですが。 よろしくお願いいたします。
814 :
名無しさん@お腹いっぱい。 :01/10/14 19:03 ID:THG9awFD
質問する前に試してみない理由はなんなんですか
815 :
名無しさん@お腹いっぱい。 :01/10/14 19:05 ID:r53mAll2
>814 ローカルでテストができずにサーバーに負担をかけるかもしれないと気を使ってる可能性もあるぞ。 >813 ローカルにサーバーを立てて試せ。
816 :
蝶初審社 :01/10/14 19:06 ID:/5Y8M3zo
>>814 そういうわけじゃなくて、"区切り"って無いんですか?
ということを聞きたかったんですが・・・。
>813,816 あるよ。 print "${a}a"; みたいに{}で変数名をかこむ。
$a{a}
>>817 さん
出来ました。レスありがとうございました。m(. .)m
821 :
名無しさん@お腹いっぱい。 :01/10/15 18:29 ID:6vdToKg4
$time=time; @hoge=("1234567890","1234567899","1111111111") foreach(@hoge){ if($_>$time){この要素を削除;} } みたいのを使いたいのですがうまい方法無いでしょうか? 私の貧脳では foreach(@hoge){ if($_>$time){splice (@hoge,$count,1);} $count++; } としか思いつきません。 こんなんあるぞというのあれば教えて下さい。
@hage = grep { $_ <= $time } @hoge;
823 :
名無しさん@お腹いっぱい。 :01/10/15 18:55 ID:6vdToKg4
>822 感謝です!! どういう仕組みかわからないですけど使わせてもらいます。 ありがとうございました。
824 :
823 :01/10/15 19:32 ID:???
なるほど! 配列から$_<=$timeな要素を検索ですか!そして@hageへぶち込むと! 勉強になるですね。
>823-824 念に念を入れる意味で補足しておきますが、 @hoge = grep { $_ <= $time } @hoge; # 左辺の配列も@hoge という風に、「自分自身にぶち込む」こともできます。
>825 レスどうもです。 おっしゃる様に使わせてもらっとります。 ありがたや〜。(^人^)
827 :
名無しさん@お腹いっぱい。 :01/10/17 18:53 ID:TnUIrJkb
配列から特定の要素を取り除くにはどうすればよいのですか?
splice
すいませんもうちょっと具体的にお願いします・・・。 えらそうですいません。。
830 :
名無しさん@お腹いっぱい。 :01/10/17 19:08 ID:mFyYJQ/x
もうちょっと具体的に質問してください。お願いします。 「〜特定の〜」←ココんとこが特にわからん
828 ではないが... perldoc -f splice で全てが解決する可能性が高いです。 @majokko = qw[mami emi pelsia yumi lala]; splice @majokko, 1, 2; print "@majokko\n"; 特定の値を持つ要素を削除したければ grep が使えます。 @majokko = qw[mami emi pelsia yumi lala]; @majokko = grep !/i$/, @majokko; print "@majokko\n"; とか、 @majokko = grep { not 4 < length } @majokko; とか。 ---- 質問するときは具体例まであげると良いかも。
すいません書き忘れていました。(--;; 配列から特定の要素を取り出してその要素を先頭に移すのはどうすればよいのですか? たとえば、@hoge = qw[abc acb asd afd wer]; とあって、asdと言う値を取り出してこの配列の先頭に移すにはどうすればよいのですか?
ちょっと違うんじゃない
835 :
名無しさん@お腹いっぱい。 :01/10/17 21:57 ID:2JY7Wh7v
2つのファイルで更新記録が古い方に書き込むことって出来ますか? もしあるとすればどのように判断すればよいのでしょうか。
-M
stat()
838 :
名無しさん@お腹いっぱい。 :01/10/18 22:17 ID:lS77su3d
cgiでラジオボタンやプルダウンメニューを表示する際、 あらかじめ表示される状態を変化させる方法はどうやったらいいのでしょうか? <select name="number"> <option value="1">1 <option value="2">2 <option value="3">3 <option value="0"selected>0 </select> selectedの位置を変化させるのだろうか?でもどうやって(??)もっとうまいやり方 があるのだろうか?という感じです。よろしくお願いいたします。
>selectedの位置を変化させるのだろうか? はい
>838 俺のやり方の場合 $select[$number] = " selected"; print <<"EOF"; <select name="number"> <option value="1"$selext[1]>1 <option value="2"$selext[2]>2 <option value="3"$selext[3]>3 <option value="0"$select[0]>0 </select> EOF
タイプミス発見・・・。 $select[$number] = " selected"; print <<"EOF"; <select name="number"> <option value="1"$select[1]>1 <option value="2"$select[2]>2 <option value="3"$select[3]>3 <option value="0"$select[0]>0 </select> EOF
>>841 どうでもいいけど識別子をEOFにするのはおかしいような・・・
843 :
名無しさん@お腹いっぱい。 :01/10/18 22:51 ID:gx0MC5aQ
以下の文章から任意の範囲を抜き出したいのですが、 どのような表記をすればいいのでしょうか? <table>の属性なども不確定です。 <table><tr><td> <table><tr><td> <table><tr><td> --------------- この行から 題名 〜不確定内容〜 </td></tr></table> ----------------- この行まで 〜テーブル以外の長い要素が入る〜 フッタ </td></tr></table> </td></tr></table> $str =~ m#(<table[^(<td)]+<td.+?題名</table>).+?フッタ#is; とやってみましたがダメでした。 というか [^(<td)]+ みたいな使い方って正しいんでしたっけ? 「このグループ以外の連続」をやりたいのですが。
844 :
843 :01/10/18 23:14 ID:W7vPTi/j
>>843 なんかわかりにくい書き方だったので補足します。
ようするに
「題名」という文字から前に調べに行って、
最初の「<table」から取得したいのです。
>842 すまない。 いつもはHTMLとか使ってて、でもそれだとカッコわるいかと思って 変えてみてた。(汗 そうだね、EOFはしない方がいいね・・・。
846 :
名無しさん@お腹いっぱい。 :01/10/19 01:02 ID:AxUzxNAn
>>843 勉強のため、いっこ考えてみました。自信ないけど(滅
my $re1 = '<table[^>]*><tr[^>]*><td[^>]*>[^<>]*';
my $re2 ='</td></tr></table>';
$str =~ /($re1(?!$re1)題名.*?$re2)/is;
847 :
名無しさん@お腹いっぱい。 :01/10/19 01:43 ID:LITbLOtt
>>843 こんなのも。
$first_str = '<table';
$last_str = '/table>';
$title_str = '題名';
$title_pos = index $str, $title_str;
$first_pos = rindex $str, $first_str, $title_pos;
$last_pos = index $str, $last_str, $title_pos;
$last_pos -= $first_pos - length($last_str);
print substr $str, $first_pos, $last_pos;
>>847 これ勉強になります、こう言うのってつい正規表現に傾倒しちゃうけど
ループに入れたりして、特定タグ内を抜き出す時とか便利そうですね、 ふむふむ...
print <<EOF;
>>842 どうしてオカシイの? endが一杯になるから?
EOF
End Of File じゃないからってことじゃない? 別にまずくは無いけど、意味上おかしいって意味でしょ。
print '
>>850 うん。でも、シンプル好き。';
852 :
名無しさん@お腹いっぱい。 :01/10/19 16:45 ID:iY0U/7m6
「海」=「?」のような文字参照による文字列を シフトJISまたはUTF-8に変換する関数ってありますか?
>852 化けてて見えないっす。 文字参照詳しく知らんけど&harts;みたいなやつ?
854 :
初心者 :01/10/19 17:59 ID:???
jcode.plじゃダメなの?
855 :
852 :01/10/19 20:08 ID:O4d9Rk3g
ありゃりゃ。&#28023; です
>>853 さん
jcode.plでは変換できませんでした
>>854 さん
856 :
名無しさん@お腹いっぱい。 :01/10/19 20:22 ID:Y/1F1KjV
普通の回覧式の掲示板で、入力フォームを別にして、 入力と回覧を別にしたいのですが、どんなデコード処理を したらいいんでしょうか? sub formにして入力画面のみの サブルーチンを作ってみましたが、上手く入力に反映されません。
>856 他人のCGIの改造? Content-typeの吐き忘れじゃないの? 何がどう上手く動かないか詳しく説明して。 「上手く入力に反映されません」なんて、こっちからしたら なにがどう上手く反映されてないかわからないんだから。
てゆーか、「回覧式」ってなに? BBSをみんなに回すの? 俺が知らないだけ? だとしたらスマン。
>>855 少しは過去スレ見ろよ。以前俺が答えたんだから間違いなくある。
#!perl
use 5.6.0;
my $a = '?';
$a =~ s/?([0-9A-Fa-f]+);/pack 'U', $1/ge;
__END__
あとは自分で考えろ。
860 :
859 :01/10/19 20:46 ID:???
げ、"?"になっちまった。 以下全て半角 #!perl use 5.6.0; my $a = '&#28023; '; $a =~ s/&#([0-9A-Fa-f]+);/pack 'U', $1/ge; __END__
オコリナガラモシンセツナンダネ 860(・∀・)イイ!!
862 :
856 :01/10/19 22:03 ID:???
>>857-858 BBSは一覧表示型です。すみません、自己解決しました。
単なるスペルミスでした、お恥ずかしい。
どうもありがとうございました。
@aaaから$cccだけを取り出したい場合、 foreach(@aaa){ @bbb = split(/<>/); $ccc = @bbb[0]; } とするのと foreach(@aaa){ ($ccc,$ddd,$eee) = split(/<>/); } とするのではどっちが効率的なんでしょうか? 後者で言う$ddd,$eeeは使わないんですが。
>>863 その程度の差なら気にしなくていい。
微量な差が気になるならBenchmark.pmを使え。
因みに後者は
($ccc, undef, undef) = split(/<>/);
とした方が若干メモリの節約になる。若干だが。
>862-864 foreach(@aaa){ $ccc = (split(/<>/))[0]; } ってのはどうなんでしょう? 変わらない?
ぐは、レス番ミス。 >863-864です。
>>863 こんなのも。
@array = qw[a<>b<>c 1<>2<>3];
@result = map { (split /<>/, $_, 2)[0] } @array;
>>864 なるほど。
大して変わらないなら余計な変数使わない前者の方が
ソースがスッキリしそうですね。(実際は11個の要素があるので。)
ありがとうございます。
と、レスしてる間に3つも…。
>>865 ありがとうございます。スッキリしますね。
>>867 初心者のため意味が…。
ちょっと勉強してきます。
>>867 なんとか理解できました。
ありがとうございます。
中級者 =
foreach(@aaa){ m/^([^<>]*)<>/; push(@ccc,$1); }
/(^<>^)/
>873 正規表現は遅いでしょ。 foreach(@aaa){ $ccc = substr($_,0,index("$_","<>")); }
ハァ?
>>875 perl -v
This is perl, v5.6.1 built for MSWin32-x86-multi-thread
use Benchmark;
my $line = 'aaa<>bbb<>ccc<>ddd';
timethese(2000000, {
t_split => q{ my $ccc = (split /<>/, $line, 2)[0]; },
t_substr => q{ my $ccc = substr($line,0,index($line,"<>")); }
});
__END__
Benchmark: timing 2000000 iterations of t_split, t_substr...
t_split: 5 wallclock secs ( 4.28 usr + 0.00 sys = 4.28 CPU) @ 467180.57/s (n=2000000)
t_substr: 5 wallclock secs ( 5.14 usr + 0.00 sys = 5.14 CPU) @ 389105.06/s (n=2000000)
878 :
875 :01/10/21 00:07 ID:???
>877 ほぅ。 それはしらなんだ。 サンクス。
879 :
名無しさん@Emacs :01/10/21 00:15 ID:Xm/NF+m9
このスレ、毎日きっちり読んでいけばかなり上達しそうな気がする・・・
use Benchmark; my $line = 'aaa<>bbb<>ccc<>ddd'; timethese(2000000, { t_split => q{ my $ccc = (split /<>/, $line, 2)[0]; }, t_substr => q{ my $ccc = substr($line,0,index($line,"<>")); }, t_reg => q{ my $ccc = ($line =~ m/^([^<>]*)<>/)[0]; } }); __END__ Benchmark: timing 2000000 iterations of t_reg, t_split, t_substr... t_reg: 4 wallclock secs ( 3.74 usr + 0.00 sys = 3.74 CPU) t_split: 6 wallclock secs ( 5.12 usr + 0.00 sys = 5.12 CPU) t_substr: 5 wallclock secs ( 5.83 usr + 0.00 sys = 5.83 CPU) This is perl, version 5.005_03 built for MSWin32-x86-object
配列から重複要素を取り除く方法で、、 @aray = ('apple','orange','apple','melon','apple','orange'); @dummy{@aray} = (); ####この行 @disp = keys(%dummy); ###の左辺では何が起きているのでしょうか、@と言うのが分かりません。 $dummy{@aray}にしてみると要素数が入ってるし。。。 %dummyはハッシュですよね? 難しいです
882 :
REN :01/10/21 01:37 ID:T+S0eZYV
Perlで掲示板を書いたんですが、日本語がうまく表示されないです。 jcodeはちゃんと置いてるんですが。なにかほかの原因がありますか? ソースが必要ならtxtでアップします。
>>881 スライスについて調べてみれ。
スライスの例として、
@aray = ('apple','orange');
@dummy{@aray} = (1,2);
は、
$dummy{apple} = 1;
$dummy{orange} = 2;
と等価。
884 :
REN :01/10/21 01:47 ID:T+S0eZYV
>882 まずHTMLソースを確認する。 ソースが文字化けしていなければ、文字コードの認識ミス。 METAタグとかで文字コードを指定しよう。 詳しい事はWEB製作板に。 HTMLソースが化けているとしたら、原因はそれ以外。 特定の文字だけ化けるのか全体が化けるのかにもよる。 特定の文字だけ化けるなら「予」「表」「ソ」などが使われている場所で ないか確認。 文字化けする1文字目の後ろに「\」を入れてみる。 ただしこれはs-jis限定、eusでは起きない。 HTMLソース全体が化けるなら、CGIのソースを見せてほしい。
>>883 さん
有難う御座います。
スライスの添え字はリストコンテキストですよね、でも
@dummy[@aray] では駄目なんですよね、これは左辺に有るからですよね。
それで、何故か連装配列になってる!
んー、難解ですぅ、、perldocかなぁ、、、
>884 jcode.pl置いてるだけで使ってないじゃん・・・
>884 $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; &jcode'convert($name,"sjis"); これを$i=0;の上くらいに置こうね。
889 :
REN :01/10/21 01:53 ID:T+S0eZYV
>>887 require './jcode.pl';
これじゃダメなんですか....?
あ、分かりましたです。。
>>883 さん (^_^ ;)
ハッシュスライスって言うのかぁ、、{}でハッシュスライスである事を
明示するんですね、なるほど〜
ダメって言われても、、、、取り合えず
>>2 のリンク一周しといで
892 :
REN :01/10/21 01:56 ID:T+S0eZYV
893 :
REN :01/10/21 02:12 ID:T+S0eZYV
>>888 やってみましたが、どうもダメみたいです.....。
894 :
REN :01/10/21 02:17 ID:T+S0eZYV
>>893 すいません、うまくいきました。
これからいろんなスレ読んで勉強してきます。
ありがとうございました。
895 :
名無しさん@お腹いっぱい。 :01/10/21 14:02 ID:yRzQNOPj
連想配列の keyの部分を正規表現で指定することって できるのでそしょうか? イメージとしては $HASH = ( '20010930'=>'9/30', '20011001'=>'10/1', '20011002'=>'10/2'); delete $HASH{/^200110/}; みたいにまとめて消せればなぁと思いまして。 foreach $key( keys %HASH ){ delete $HASH{$key} if $key =~ /^200110/; } ってやるしかないでしょうか?
896 :
895 :01/10/21 14:04 ID:yRzQNOPj
もうひとつ。 %HASHB = %HASH{/^200110/}; みたいな。感じのことができればいいかなと。 さすがに無理ですか?
>>896 CPANのTie::RegexpHashやTie::Hash::Regexがいいかモナー。
普通のハッシュより圧倒的に遅くはなるがな。
>>895 deleteは引数にハッシュスライスも指定できるよ。
delete @HASH{grep {/^200110/} keys %HASH};
>>896 必要なキーをgrepで出して,mapでそのハッシュ渡せばできる。
簡単な文でやるならforeachで一つづつ追加,かな。
900 :
名無しさん@お腹いっぱい。 :01/10/21 17:01 ID:MXQ9p/0K
CGI自身のローカルパスと、URLを獲得する方法ってありますか?
SCRIPT_FILENAME= SCRIPT_NAME= SCRIPT_URI= SCRIPT_URL= あたり。
>900 foreach (sort keys %ENV) { print "\$ENV{$_}: $ENV{$_}\n"; }を実行してそれらしいのを探す。 print __FILE__; も参考に。
903 :
900 :01/10/22 00:14 ID:???
ありがとうございます。ばっちり獲得出来ました。
904 :
:01/10/22 01:28 ID:???
正規表現で[0-9]のように、[あ-ん]のようなことをやるには どうすればいいのでしょう?
905 :
896 :01/10/22 02:26 ID:???
>>898-899 ありがとうございます。
mapは今まで使ったことなかったのでこれを機会に
詳しく調べてみようと思います。
907 :
名無しさん@お腹いっぱい。 :01/10/22 11:33 ID:VtVoe4OW
ORACLEのデータベースから何十万件のデータを読み込み、 そのデータを貯めて、次ページ、前ページでリスト表示したいのですが、 次ページで再度、同じCGIを呼ぶときに、前に読みこんだデータを保持できないのですが、 なにか方法はあるのでしょうか? データ数が多いのと、レスポンスの関係上、ページ切替毎にDB読みこみは裂けたいという状況なのですが、 もし、何か策があったら、手ほどきをお願い致します。
何十万件もあるデータをメモリに貯めとく方がよっぽど負荷高い。 ファイルの書き出してもORACLEから再度取り出した方が早い。
909 :
名無しさん@お腹いっぱい。 :01/10/22 21:01 ID:VtVoe4OW
apacche::sessionとか、cgi::persistent等、 永続的オブジェクトの詳しいことはどこかに、書いてないですか? 永続的に保持できるとはいうものの、実際どのようにして保持するのかが、 まったくもってわかりません。どなたか、分かる方、教えてください。お願いします。
無名配列って何に使うんですか? て言うかnewって何?、blessって何? 全然分かんないよぅ。。。。ウワァ〜〜ン ε===((((((;´Д`)
911 :
名無しさん@お腹いっぱい。 :01/10/22 21:17 ID:jrHSHu0Z
パスワードをいれないと絶対に見ることができないページって作れますか? 今は 認証.cgi→本体.cgiにして 本体でrefererをチェック認証.cgiと本体.cgi以外からだと蹴ってます。 が、キャッシュは残るし、referer偽造で軽く見られるし… なんかいい方法ないですか?
>911 ./htpasswordを使う。 CGIだけでどうにかするなら、有効期限を10分とか短い時間にしたcookieを食わせる手もある。 ただし利用者がcookieオフにしていたら入れなくなるけどな。 他には認証.cgiでIPを記録してそのIPでのアクセスを許可する手もあるけど、これは串利用者の場合通ってしまう可能性もある。 tu-ka,本体.cgiで認証もすればいいだけじゃ?
$pass = 'hogehoge'; if($hoge eq $pass){HTML表示} これを先頭にぶち込めばいいんでないの?
あっラグで被ったし。。
915 :
あのー :01/10/22 21:43 ID:0plXJa9e
家のWindows98で動作する フリーウェアのDBを探してるんですが、 MySQLがベストなんでしょうか? これよりいいのがあったらぜひ教えてください
perlccを試してるんですが、linux+v5.005_03、Cygwin+5.6 WIN+Activeperl5.6 どの組み合わせでもa.outが実行出来ません(´Д`;)ウゥ.. Activeperl5.6 → ライブラリを探しに行ってあぼーん Cygwin+5.6 → 実行するとコアダンプしてしぼーん linux → コアダンプしてしぼーん と言う感じです、どれも簡単なプリント文なんですが ボクの環境は呪われているのでしょうか? 良いWeb等がありましたらご教授くださいませ。
因みに試したのはこんなのです... #!/usr/bin/perl $mes = 'This is test message'; @array = qw(dog monkey cat cow rabit); @array = sort{$a cmp $b}@array; print "$_\n" foreach @array; print "$mes\n"; exit(0);
>>918 Perlcc でまともなバイナリを作るのは難しいみたい。
google ってみても(日本語のページでは)成功例は見ないね。
>>919 ありがとです(・∀・)
まだまだみたいですね>perlcc、高速化に期待してる訳では無くて
ちょっと秘匿性が上がるのと、pmをスタティックにリンクしてバイナリ化出来る?
らしいので期待してたんですが・・・ どうも5.6系は駄目みたいです
とあるWebで、何気に入れたら何気に動いたんでCGIに使ったらこれも動いた!
って書いてたんで結構枯れてるのかなと思ったんですが
色んなヴァージョン入れてみようかな・・・・とほほ
引き続き安定Ver情報が有りましたらお願い致します。。
5.8入れた人居ますか? どんな感じかなぁ・・・
いやアンタが聞いてなくてもさ。。。
Perl Versions:Stable is 5.6.1. Devel is 5.7.2. 何処に5.8があるんだよ、ボケ。Perlじゃないなら何の5.8かぐらい書こうな。
925 :
名無しさん@お腹いっぱい。 :01/10/23 10:07 ID:FWFaOvc8
Develって何ですか?
>>925 開発版。FreeBSD で言う current みたいなものです。普通の人は使いません。
>>910 多分、「プログラミングPerl (Programming Perl) 改訂版」「実用Perlプログラミング (Advanced Perl Programming)」を読むのが吉。
とりあえず端折った説明。
普通の配列は
@moe = ("motoko", "kanako");
のように変数名が付くけど、無名配列は変数名が付きません。なので、リファ
レンスを使ったアクセスのみ可能です。[...] は無名配列生成子で、無名配列
を生成してそこへのリファレンスを返します。
$ref = ["motoko", "kanako"];
で、これがどう役立つかと言えば、
@moe = (["sakura", "tomoyo"], ["motoko", "kanako"]);
のように使用して、$moe[0][1] ($moe[0]->[1] と等価) のようにアクセスし
ます。$moe[0] は ["sakura", "tomoyo"] という無名配列を差すハッシュです。
(print ref($moe[0]), "\n"; とすれば ARRAY と表示されます。) {...} とい
う無名ハッシュ生成子もあるので、同じように使えます。
(続き) Bless はリファレンスを、あるパッケージのオブジェクトにします。($obj = new HoeHoe; で HoeHoe オブジェクトを作って $obj->hoge(...) のように使 えますが、new の内部で使われます。) 下の例では HoeHoe::new が無名ハッシュへのリファレンスを返していますが、 これは bless されて HoeHoe パッケージのオブジェクトになっているので、 $hoe->value()という呼び出しが可能になっています。 ここではハッシュへのリファレンスを渡しているけど、スカラとか配列へのリ ファレンスでもOKだよ。 #! /usr/bin/perl $hoe = new HoeHoe("puni"); print $hoe->value(), "\n"; $hoe->value("hage"); print $hoe->value(), "\n"; package HoeHoe; use Exporter; use vars qw[@ISA]; @ISA = "Exporter"; sub new { my $pkg = shift; my $value = shift; bless {value => $value}, $pkg; } sub value { my $obj = shift; if(@_) { $obj->{value} = shift; } else { $obj->{value}; } } __END__
>>JAPUさん ありがたぅです なるほぢ、Cの構造体のような感じになるんですね。 >$moe[0][1] ($moe[0]->[1] と等価) $moe[0]->[1]の方が参照外しが分かり易そうでよかったので これで行こうと思います。 >Bless はリファレンスを、あるパッケージのオブジェクトにします まさにperlobjの説明にある関連付けをblessで行うんですね。 今書いて頂いたサンプルを見て色々考えてますです。 上手に使うと、参照渡しより柔軟に変数を操作出来るのかな? OO童貞の厨房にはチト難しいです ((汁; 取り合えずpackageを沢山作りながら勉強します。 使い方は後からにしよう! 本は金欠マンなんで再来月位になりそうですが。。。汗 実用Perlプログラミングを買おうと思います。 ありがとうです
929 :
911 :01/10/23 14:43 ID:ROBN75GS
レスどうもです。 もとからあった日記のCGIを If pass eq pass {もとからあったCGIそのまま} else えらーめっせーじ; にしたんですが、日記の閲覧ページから書き込みページに移動しようとすると とっぷのパスワードチェックに戻って今います。 どうしたらいいのでしょうか? if節の中だとサブルーチンに入れないのでしょうか?
>929 んなこたない。 もう一度よく確認してみろ。 おそらく閲覧ページから書き込みページに移る際にパスワードを渡してないだけだろ。 パスワードが入っていないと元のCGIに辿り着けないんだろ? だとしたらきっとパスワードを渡してないだけだ。
931 :
911 :01/10/23 15:46 ID:ROBN75GS
もとからあったCGIにはまったく手を加えてないのでパスワードはちゃんと渡ってるはずです。
932 :
名無しさん@お腹いっぱい。 :01/10/23 15:59 ID:2S5ZWxco
Perlを始めたばかりでコードの丸写しをして勉強中なんですが、 「’」と「”」を使い分ける理由を教えていただけませんか? Perlは文字リテラルと数値リテラルなど区別がないらしいのに、 どうして・・・ 単純な質問ですいません。
$var = 'hoe'; print '$var'; これは貴方のの予想どうりに動きますか?
あー何か不親切だ ヒアドキュメントで"_HTM_"; とかして @ を使うと死ぬのは 覚えといて下さい、今後の為に。
>>929 >If pass eq pass {もとからあったCGIそのまま}
>else えらーめっせーじ;
perl?
if を If と書いてるとかやってたら殺すよ?
出来るだけ正確に書けよ。
# だからと言って全部引用するなよ。
936 :
932 :01/10/23 16:20 ID:QI3yZ/4i
>933-934 うーん変数にシングルクォーテーションはいらないのは今試してわかりました。 ですが、他の人の書いたコードを見ると文字変数の値を代入する際に「’」や「”」 が入っていますよね? この違いを教えていただけたらうれしいのですが・・・ 933さんの簡単な例題にも時間を取られるような素人ですいませんが よろしくお願いします。
>931 ちゃんと渡ってるかどうか、printして確認してみろ。 エラーが出た時の調査の一番簡単な方法だ。 「そんなはずはない」って思っている部分があったら、きっとそこが間違ってる。 思い込みをしたらエラーは見つけられない。 しらみつぶしに原因を探せ。 if(条件){書き込みフォーム} else{パスチェック} とあったら、その直前で条件を全部表示させてみろ。 それで9割がた解決する。 書き込みフォームの入口を調べろ。
>>936 $foo = 'bar';
と
$foo = "bar";
なら大抵どちらでも同じ。
>>936 んー、そんなに丁寧に聞かれると漏れも・・・(薄っぺらっ!
本家のドキュメントの何処かには、$var = "$foo"; とか return("$bar");
こう言うのは実際良く無いと書かれてます。この辺が
>>936 さんの悩み所?
ただ$var = "$fooさんハロー"; とかになった時に便利なんでやっぱりこの書き方
をしてしまう人が多いと思います。$var = 'ハロー'; が $var = '$fooさんハロー'
とか。結局初めのうちに色々考えながらやってる分には"で括ってエスケープ
しまくるのが手っ取り早いんだと w
後、変数展開のコスト(' と ")に付いて良く議論されてますが、個人的には屁でも無いです
ガンガン " を使いましょう、
後初めの頃に気を付けるべきなのは、print "@array"; とprint @array; は決定的に違います
それとさっき書いたヒアドキュソメントの@、くらいかなぁ漏れが嵌ったのは
C使うなら qq とか qw も調べてみると吉かもしれませぬ。
print "表示"; print '表示'; 前者は文字化けします。(s-jis限定) 変数がないのならなるべく'がいいと思ってます。 その前にeucを使えと言われそうですが。
かなり勝手な想像... 何でもqq、でエスケープしまくり ハヂメテノパール ↓ エスケプウザー(゚Д゚)、で q も使ってみる ←この段階の配布コードが何故か多い ↓ qq、q とヒアドキュで良いじゃん(・∀・)♪ ↓ ソースキレー(゚Д゚)
ああ化けた、、詩嚢、、
945 :
:01/10/23 16:58 ID:jinEtdTY
CGIがNN6.1の場合にのみ2重起動されます。 なにか原因にこころあたりがあるかたいますか? 初回起動のあと5秒くらいで2度目の起動がかかってしまいます。
946 :
936 :01/10/23 17:14 ID:???
みなさんありがとうございました。 今現在ではまだ詳しい事が全然理解できていないので、 みなさんのおっしゃった事を纏めて 変数代入時は「”」 変数に代入しない2byte文字列を使うときは「’」 を使ってみようと思います。 その他色々教えていただいた事は今から調べてみます。 本当にありがとうございました。
947 :
名無しさん@お腹いっぱい。 :01/10/23 20:23 ID:6sXZfXmj
多次元配列でスライスって使えますか? 以下のような場合ダメだったので @kkk = @fff[0][3 .. 6];
>>948 使えるよ
@kkk = @{$fff[0]}[3..6];
>949 高速レス、サンクスです。 @{$fff[0]} = (2, 3, 4, 5, 6, 7, 8, 9, 0); という代入もできるんですね。 もう一つ聞いてもいいでしょうか? 多次元配列にまとめて代入できますか? @kkk = ((3, 4, 5), (2, 3, 4), (6, 7, 8)); だとだめでした。
@kkk = ([3, 4, 5], [2, 3, 4], [6, 7, 8]);
>>950 @kkk = ([3,4,5],[2,3,4],[6,7,8]);
ではなく?
>> 951、952 1次元で () で囲むので多次元でもそうだと思い込んでいました。 有難うございました。
954 :
名無しさん@お腹いっぱい。 :01/10/24 02:11 ID:Haoaz9Y7
$foo{bar}->[0] = 'あ'; $foo{bar}->[1] = 'い'; $foo{bar}->[2] = 'う'; というのがある状態で foreach $hoe ( $foo{bar} ) もしくは foreach $i ( 0 .. $#foo{bar} ) みたいな取り出し方ってできないのでしょうか?
取り合えずperllol辺りを良く読んだ方がいいかと・・・
>>949 のレス貰って分からないとマズイですよ
配列であれハッシュであれ、デリファレンスしたものに対して操作しましょ
957 :
名無しさん@お腹いっぱい。 :01/10/24 04:48 ID:6Q3D2kbA
#!/usr/local/bin/perl print "content-type: text/html\n\n"; $g=25425425124%241; print "$g\n"; これ実行すると0が返ってくる・・・別のサーバーに置くと14が・・意味不明。 わかる人いますか?
変数の初期化って特に必要無いんでしょうか? どうもPERLの作法に慣れなくて・・・・
>>957 再現しないぞー て当たり前か(´Д`;)
961 :
:01/10/24 07:20 ID:WMwwHA4O
目か頭が壊れてる可能性が高いですね
#!/usr/bin/perl -wT require japu;
>>959 その感じだとCからかい?、だとしたらPerlは不定では無い
0又は空文字列って感じ(C#って良いよね)
今の君は白百合女学園からフリースクールに転校してきたような状態なんだよ へへ
他に嵌るパターンて言うと、ループ、再帰、mod_perl環境、undumpした実行ファイル
位かな、どれも前のウンコが入っててシボーンて奴だからそんなに凶悪じゃ無いし。
勿論慣れなきゃ全部初期化してもOK、コストがどうとか言う奴はホットケ(w
書いてればそのうち慣れてくるもんだし。
**もし**宣言の事言ってるんだったら、こっちはちゃんとしよう。
常時strict縛りがお勧め
964 :
954 :01/10/24 09:57 ID:???
>>955 PerlLoL読みました。
参照ではなく実体で渡す必要があるから
foreach $hoe ( @{$foo{bar}} ){
foreach $hoe ( $#{$foo{bar}} ){
とやればいいのですね!
無事解決しました。ありがとうございます。
なんかここが「かちゅ〜しゃ」で読めなくなってる。 なぜに?
my $ref = func(); print $$ref; sub func{ my $hoge; $hoge = "hoge"; return \$hoge; } Cでこれやると駄目だよねえ。PerlでOkな理由がわかんない・・・。
>>967 Perlのmy変数はCのauto変数と違い、
・スタックには積まれるわけではない。
・参照がなくなるまで実体も消えない。
と考えればよいでしょう。
968 :
911 :01/10/24 11:41 ID:EX0y50So
まずページを開いた時に sub login { if ($FORM{'pass'} ne "$pass") { &header; エラーメッセージ表示。 exit; } else{ 日記のCGIそのまま } exit; } でパスをチェックして、つぎに日記CGIないのパスチェックで管理モードに移行させたいのです。 日記CGI単体での動作確認は取れてます。 どこがいけないのでしょうか?
969 :
ぽ :01/10/24 11:49 ID:1tmsVagU
use strict している状態で eval() をした場合 strict がエラーになっても $@ になにも設定されません(T_T Known Bug でしょうか? use strict; eval(<<'EOF;'); $X = 1; EOF; if(defiend($@)){ print "[$@]\n"; }
>>911 次のページに移動するとき
hoe.cgi?pass=password
みたいに渡してる?
@fff[0..1][2] のようなスライスをすることは出来ますか? (スライスとは言わないのかも)
>>969 "Bug" かどうかは分かりませんが、Perl 5.6 では $@ に "Global symbol ..."
が格納されます。
973 :
ぽ :01/10/24 12:31 ID:1tmsVagU
>>972 ありがとうございます。
こちらは Perl5.005_03 です。
ふーむ どうしようかなぁ
STDERR には "Global symbol ..." が出力されるので
こいつを捕まえるのがいいのかな。
974 :
ぽ :01/10/24 12:34 ID:1tmsVagU
STDERR, STDOUT を上書きして文字列として取得したり はたまた 文字コード変換を追加したりできるモジュールとか ありませんでしょうか? &hogehoge(STDERR, \&buffering); &hogehoge(STDOUT, sub { new Jcode(@_)->sjis(); }); みたいな感じで。 CPAN検索中....でも探すのヘタなんですよ(TT
976 :
名無しさん@お腹いっぱい。 :01/10/24 12:41 ID:VLOxIr/R
use CGI; $cgi = new CGI; %FORM = $cgi->Vars; をやろうとしています。Win32上の Perl 5.6.1では出来るのですが プロバイダにある 5.005_03 では Undefined subroutine CGI::Vars と言われてしまいます。 古いバージョンの CGI.pmではどのように要素を取り出したら よいのでしょうか?
そろそろ次スレだな。
>>976 %FORM = map{ $_, $cgi->param($_) } $cgi->param();
$logfile --- 2 1<>dataA<>dataB<>dataC<> 2<>dataA<>dataB<>dataC<> EOF 処理 open(NUM, "< $logfile"); @log = <NUM>; close(NUM); $num = shift(@log); chomp($num); $num++; $data = "$num<>$a<>$b<>$c<>"; unshift(@log, "$num\n"); push(@log,"$data\n"); open(ADD, "> $logfile"); print ADD "@log"; $logfile --- 3 1<>dataA<>dataB<>dataC<> 2<>dataA<>dataB<>dataC<> 3<>dataA<>dataB<>dataC<> EOF という風に unshift(@log, "$num\n"); では行頭に半角スペースが入らなかったのに push(@log,"$data\n"); open(ADD, "> $logfile"); としたら各行の行頭に半角スペースが入ってしまいました。 全く分からないのですが、どこで半角スペースが入ってしまっているのでしょうか?
980 :
979 :01/10/24 13:18 ID:???
あわわ。。 半角スペース失敗。全角で書きます。 処理後の$logfile --- 3 #ここには入ってない。 1<>dataA<>dataB<>dataC<> #ここの行頭 2<>dataA<>dataB<>dataC<> #ここの行頭 3<>dataA<>dataB<>dataC<> #ここの行頭 EOF
982 :
966 :01/10/24 13:24 ID:???
>>967 参照カウンタ持ってるのか。なるほどさんくすありがd
983 :
979 :01/10/24 13:33 ID:???
>>981 う…。失礼しました。
逝ってきます。
過去ログ全部取得して保存しておこう…。
my 新スレ立てるよー;
お願いします。 ってもう立ってるね。 コピペ中っぽいのでまだリンクは張らず。
, -―- 、
, l[》《]| ヽ
/ i/ i ノノノ ))))〉 / ̄ ̄ ̄ ̄ ̄
. / i i |(リ ( | | | ! / 質問に答えてくれたみなさん
〈ヘ|_|l| l ゝ~ lフ/| <. .ありがとうっ
/ | | |( ヽwliヽ | \ このスレはおしまいだよ。
/ /! | l ヘ《~ヘii~∧ ∧ \_____
/ /ノノ! ノ|リ〉 \/( ゚ω゚)
/ , ./-‐- 、/V\ハ_ヲUU
!/ ./ / / | ゝ つつ
ヽ_/ ./ ! jj \
/ i
〈 / | |'
ゝ / l | !/
`〜‐-L__」〜'^
(´-`).。oO(新スレッドだろう・・・・
http://ebi.2ch.net/test/read.cgi/php/1003900311/l50 )
お疲れさまです。 今後もお世話になります。
新スレに書くと10までの参考URL書くスペースをつぶしてしまうので…。 新スレの>7氏宛て かちゅ〜しゃでdat読んでました。 ごめんなさい。
990 :
キリ番ゲッター :01/10/27 09:04 ID:p/1joBiQ
1000間近スレッド発見
991 :
キリ番ゲッター :01/10/27 09:05 ID:p/1joBiQ
1000狙うからな 邪魔するんじゃねーぞ
992 :
キリ番ゲッター :01/10/27 09:05 ID:p/1joBiQ
俺様が1000とったら ウラビデオ 記念にさしあげます
993 :
キリ番ゲッター :01/10/27 09:05 ID:p/1joBiQ
1 0 0 0あげ!!!!!!!!! pupupu
994 :
キリ番ゲッター :01/10/27 09:07 ID:p/1joBiQ
995 :
キリ番ゲッター :01/10/27 09:07 ID:p/1joBiQ
いいか 邪魔したら ウラビデオは 配布中止だ
996 :
キリ番ゲッター :01/10/27 09:09 ID:p/1joBiQ
お前ら ROMだけしておけ カキコするな fuck
997 :
キリ番ゲッター :01/10/27 09:10 ID:p/1joBiQ
どうやら この板の住人は 俺様だけのようだ 勝ったな
998 :
キリ番ゲッター :01/10/27 09:11 ID:p/1joBiQ
1000ほしいか それとも ウラビデオほしいか!!!!!!!
999 :
キリ番ゲッター :01/10/27 09:11 ID:ROzJuflR
俺様=神 邪魔するやつ=うんこ
1000 :
キリ番ゲッター :01/10/27 09:23 ID:ROzJuflR
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。