【Perl】初心者コーナーPart10
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
02/02/24 22:18ID:zOj6Yq/31:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけど、なんか質問ある?part5】
http://pc.2ch.net/test/read.cgi/php/1009331505/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
過去ログ、その他の役立ち情報は>>2-10を見よう。
0202nobodyさん
02/03/04 13:52ID:???0203nobodyさん
02/03/04 13:56ID:???use constant NDEBUG => 1;
use constant STRING => "hello, world!\n";
if(defined &NDEBUG){
print STRING;
else{
# ..
}
それはそうと>>201は何故こんなに偉そうなんだ?
0205nobodyさん
02/03/05 06:00ID:???whileループの突入条件とそのループ内で同じ文字列のマッチングを行っているのが原因。
これでは文字列のどこまでマッチ作業を試行したのかわからなくなってしまうよ。
具体的にはwhileループ内のマッチ作業によってpos($string)がundefで上書きされてしまう。
$string = 'Watashi ga Kaita. Watashi ga Keshita';
while ($string =~ /Watashi/ig) { # ←◆g修飾詞によってpos($string)が設定される。
$value = 'Watashi(=Yamada)';
$string =~ s/Watashi/$value/io; # ←◆pos($string)がundefで上書きされる。(゚д゚)マズー
}
print "$string";
要するに$stringのマッチ開始位置が巻き戻ってしまう。
このため突入条件のマッチングはg修飾詞があっても常に$stringの先頭から行われてしまい、
$string内にWatashiという文字列がある限りwhileがループを続けてしまう。
>189がやりたい(であろうと漏れが考えた)事をむりやり書き下してみると、
# pos再設定とマッチ以後の文字列置換でむりやり解決
$string = 'Watashi ga Kaita. Watashi ga Keshita';
while ($string =~ /Watashi/ig) {
$value = 'Watashi(=Yamada)';
my $position = pos $string;
if (substr($string, $-[0]) =~ s/Watashi/$value/io) {
$position += length $value;
}
pos $string = $position;
}
print "$string\n";
こんな感じになるんだろうか。でもこんなスクリプトは見た事が無い。
アプローチというか何というか、たぶん他にもっと良い書き方があるのだと思う。
単純に解決したいならループ内で $string =~ s/Watashi(?!\(=Yamada\))/$value/io とか、
処理を挟むなら $string =~ s/Watashi/&process(...)/eg とか。
取り敢えず、普通whileの突入条件とそのループ内で同じ文字列のマッチングは行わない。
perlretutやperlop,perlfaq6などを読むと良いかもね。
つうか正直何をやりたいのか良くわからないから的外れかもしれない。そんときゃスマソ。
0206nobodyさん
02/03/05 06:12ID:???$position += length($value) - length('Watashi');
だね。どーでもいいか。
0207nobodyさん
02/03/05 13:00ID:???&subname; で飛ばす場合は、どちらの方がメモリ消費が少ないのでしょうか?
自分は()を付けると、サブルーチン先の@_と、呼び出しもとの@_は別物と認識するので、
@_に代入するとその分メモリを消費するが、何も代入しない場合はどっちでも変わらないのでは?
と考えるのですが
0208208
02/03/05 22:03ID:OFFg29v+いつも「エラー2」が出てしまいます。何でうまくいかないのかさっぱり分かりません。
どなたかお知恵を貸してください。
acountlist.dat はこんな感じになってます。
id01:pwd01:point01
id02:pwd02:point02
...
------------------------------------------------------------
print "IDを入力してください\n";
$id = <STDIN>;
chop($id);
print "パスワードを入力してください\n";
$pwd = <STDIN>;
chop($pwd);
open(DATA,"<../xxxxxxx/acountlist.dat") or die;
while($line = <DATA>){
chop($line);
@acount = split(/:/,$line);
if($id eq $acount[0]){
if ($pwd eq $acount[1]){
print "いらっしゃいませ $acount[0] さん\n";
print "現在あなたは $acount[2] ポイントお持ちです\n";
exit;
}else{
print "エラー1";
exit;
}
}else{
print "エラー2\n";
exit;
}
}
close(DATA);
------------------------------------------------------------
0209nobodyさん
02/03/05 22:23ID:???acountlist.dat (accountlist.datのスペルミスだとは思うけど)
の最初の行に書いてある人はOKだね。
0210nobodyさん
02/03/05 22:24ID:???それじゃid01の人しか受け付けないよ.
0211208
02/03/05 23:22ID:???おかげさまでうまくいきました。
0212nobodyさん
02/03/05 23:55ID:???どうせましょう
0213nobodyさん
02/03/06 10:16ID:???データベースから引っ張ってきた件数をGoogleみたいに
1 2 3 4 5 ・・ と自動的にリンクを貼りたいんですが。
0214nobodyさん
02/03/06 10:23ID:???10〜100までの10の倍数の乱数を出したい場合。
1〜10の乱数を出して10倍する。
0215nobodyさん
02/03/06 10:25ID:???ひょっとして、乱数は関係ない?
foreach(1 .. 100){
if($_%10==0){print qq(10の倍数);}
}
って事?
0217nobodyさん
02/03/06 14:04ID:???10の倍数とか関係なかった(ごめん)
どうやったらデータベースから引っ張ってきたデータ件数を
Googleみたいに 1 2 3 4 5 ・・ ってリンクできるんだろ
perlじゃないのかな・・・
0218nobodyさん
02/03/06 14:13ID:???$i=0;
foreach(1 .. $n){
if($_%100==0){print qq(<a href=./hoge.cgi?start=$_>) . ++$i . qq(</a>);}
}
googleはこんな感じだろ。
0219nobodyさん
02/03/06 14:16ID:???$j = HIT数;
for($j=0;$j<=$n/100;$j++){
print qq(<a href=./hoge.cgi?start=) . ($j*100) . qq(>$j</a>);
}
ちなみに>218でもこの方法でも0 1 2 3 となるから、実際には1を足すように。
0220nobodyさん
02/03/06 14:17ID:???>219の最後の一行は忘れて。
頭寝てるかもしれないからもう沈むわ。
混乱させてスマン。
0225nobodyさん
02/03/06 16:04ID:???の略ですm(_ _)m
0226nobodyさん
02/03/06 21:21ID:qVNAtP8C教えて下さい。
0227nobodyさん
02/03/06 21:29ID:???正規表現に通したりすると落ちたりするんですか?
あと2バイト文字でファイル名を作らせるのはまずいですか?
URIエスケープすればどうだろう?
0228nobodyさん
02/03/06 21:33ID:???この辺を参考に。
0230nobodyさん
02/03/06 22:04ID:???ありがとう。
メールやネットニュースが対応してないので使わないクセを付けようということなのかな。
そういや,おれの通ってる大学のイタイ教師がメールのフッタに
「半角カナが世にはびころうとする風潮に断固反対する会 会員No.xx」とか書いてたのを思い出した。
どーでもイイが・・・
0231かなり初心者
02/03/06 22:08ID:+Uo+pWisそれを<a href="3"> >>3 </a>のように置換するやり方ってどうやるので、
しょうか?(ちなみに、数字は可変します。)
お願いします。(コードでご説明下さい。)
0232nobodyさん
02/03/06 22:11ID:???$message =~ s/>>([0-9]*)/<A HREF="$1">$1</A>/g;
0233nobodyさん
02/03/06 22:12ID:???$message =~ s/>>([0-9]*)/<A HREF="http://xxxx.xx.com/xxx.cgi?Res=$1">$1</A>/g;
などにすると良い。
0234nobodyさん
02/03/06 22:14ID:???だった。
0236nobodyさん
02/03/06 22:17ID:???じゃないとバグるな。
0237nobodyさん
02/03/06 22:19ID:???0238かなり初心者
02/03/06 22:27ID:+Uo+pWis数字なのですが、2桁の場合も考えられます。
その場合でも、ご提示頂いた物でOKなのでしょうか?
お願いします。
0239nobodyさん
02/03/06 22:30ID:???ローカルで試してみろよ。
できるから。
0240235
02/03/06 22:33ID:???oを付けると、正規表現中に変数があっても、その正規表現の
コンパイルを最初の一度しか行いません。そのため、
2度目以降のマッチングの際にコンパイルしないぶん早くなります。
なので、通常正規表現中に変数を入れない場合はoをつけとく
方が有利です。
で、正規表現中に変数があって、それが変更される
にもかかわらずoを付けると、当然予期する結果が得られません。
0241かなり初心者
02/03/06 22:34ID:+Uo+pWis助かりました。(^_^;)
0242nobodyさん
02/03/06 22:35ID:???なんだこいつは?
EUCもS-JISも悪。JISに統合せよ,だと?
半角カナもJISが対応していないから使うな,ということなのか。
正直WebページのキャラセットにJISなんて使う気もせんが・・・
http://www2.justnet.ne.jp/~chic/TRON005.HTML
http://homepage1.nifty.com/VET06031/kanaok/kanaok.html
0244nobodyさん
02/03/06 22:36ID:???なるほど!ええこと聞いた!情報ありがとう。
>239
ほんまかいな・・・
foreach(1..100000){}で囲むのか?(笑
0245nobodyさん
02/03/06 22:42ID:???meta で指定すれば問題ないやろ?
0248nobodyさん
02/03/06 22:50ID:???ごめん,今気付いたんだが>237へのレスだと思ってた・・・
変なこと言ってすまん・・・
0251nobodyさん
02/03/07 06:18ID:WTUe3Qf10252nobodyさん
02/03/07 08:50ID:hIR8dzV60253nobodyさん
02/03/07 09:09ID:???http://www.google.com/search?hl=ja&q=CGI+User-Agent&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
0258nobodyさん
02/03/07 13:23ID:???意味わかりませんか?User-Agentってようは相手のブラウザを認識するのですよね?
私が聞きたいのはページ(htm,html,texなど)で作成したものに直リンクできない
ようにするための参照制限のことです。
今のところCGI関連のホームページで色々探してみましたが、不可能という答えしか
掲載されていませんでした・・・。
もし知っている方がいらっしゃいましたら教えて下さい。
0260nobodyさん
02/03/07 13:32ID:???だから、CGIでページを生成することにして、そのページへ
携帯電話からアクセスしてきたら弾けばいいじゃん。
htmlファイルへのアクセス制限は、CGIとは別問題で、
.htaccessでDoCoMoからのアクセスを拒否するだけだよ。
0261nobodyさん
02/03/07 14:04ID:???ありがとうございました。
>>259
もしかしたらいい案している人いるかもしれないから
聞いたんじゃん?
代用できる方法知ってるかもしれないし。
私CはわかるけどPerlはさっぱりわからんのじゃ!
初心者なんだから・・・
0262nobodyさん
02/03/07 14:11ID:???初心者である事を免罪符のように使う人物である。
0264nobodyさん
02/03/07 14:21ID:???0265nobodyさん
02/03/07 14:24ID:???i-modeのページも、あれでいて結構気を使うんだよ。
半角カナにしろだの、ここは絵文字にしろだの、クライアントが
うるさいんだよね・・・
0268
02/03/07 14:47ID:q6SBx/iVサンプルとか載ってるととっても助かります
教えて下さい。
0269nobodyさん
02/03/07 14:49ID:???0271nobodyさん
02/03/07 16:32ID:???0272nobodyさん
02/03/07 16:36ID:???よそで基礎知識を付けてからのほうがデマ吹き込まれなくていい。
あらゆる書籍、webサイトで調べてそれでもわからなかったときの
最後の手段が2ch
0276nobodyさん
02/03/07 17:02ID:???0277271
02/03/07 17:05ID:???http://www.harukaze.net/~mishima/perl/perl_j.html
0278nobodyさん
02/03/07 17:09ID:???0279前述のs///oの質問した人
02/03/07 17:13ID:???そのとおりである!
・・・おれはよく甘えるがなー・・・
いやおれも分かる範囲ならできるだけ答えるよ。
でも>261は最初の質問の時点でスレ違いだったからなぁ・・・
0280s///o厨
02/03/07 17:16ID:???試しに自分のページを「エンコード:西ヨーロッパ言語」で見てみ。
それが毛唐ドモのPCに映る画面。
0281nobodyさん
02/03/07 18:09ID:???0282nobodyさん
02/03/07 18:10ID:???0283nobodyさん
02/03/07 18:13ID:???_ _
〃┏━━ 、
>− )
パタパタ | ノノソハ))) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(((\リリ ´ー` リ < 変なこと言うけどPerl/CGIの入門書。
((ニE/⌒ヾ∞"ヽ 上にも書いたけどCGIはある条件さえ満たせば言語は問われないんだ。
(こ) ∞ |こ) 無理してCでの入門書を探すより腐るほど出てる詳しいPerlでの本の方が参考になるよ。
く__∞,ノ 上にも書いたけどPerlはCとかなり似ているから結構読めるよ。
し' し'
暇だから簡単にまとめておくね。
POSTの場合、データは標準入力に入る。
GETの場合、データは環境変数QUERY_STRINGに入る。
リモートホストなどのステータスは環境変数に入る。
出力は標準出力に対して行う。
出力の前にprintf("CONTENT-TYPE: text/html\r\nr\r\n");を忘れないでね。
うぐぅ。あんまり祐一の役にたてなかった気がするよぉ。
0284nobodyさん
02/03/07 19:59ID:???<HEAD>
<SCRIPT LANGUAGE="JavaScript">
function WindowOpen(){
window.open("ここにページの名前.htm")
}
</SCRIPT>
</HEAD>
<BODY onunload="WindowOpen()">
</BODY>
</HTML>
0286nobodyさん
02/03/08 04:19ID:rUODFwebお絵描き掲示板を設置しようかと考えているのですが、
割り当てられた容量が5MBとやや少なめ(と、言われた)なのです。
お絵描き掲示板は負担がかかると聞いたのですが
出来るだけ負担を軽くするようにするにた例えばどのような工夫が必要でしょうか。
要領を得ない質問で申し訳無いですが、ご指南下さい。
0287nobodyさん
02/03/08 04:48ID:???小さなスペースみたいだから、画像サイズが(小さく)選べてjpegに対応してて、
画像圧縮率も変えられるようなのが良いんでない?
荒らし対策も考えると、しぃちゃんのPaintBBSアプレット使った奴がいいかも。
というか、ここは自分でコードを書く人の為のスレッドだよ…。
0288nobodyさん
02/03/08 10:15ID:???一行も書けないよ〜〜〜
0289nobodyさん
02/03/08 11:00ID:wwEgc1iJ頂いてやって来ました。
Apache 1.3.12 文字化け問題で、サーバの管理者にiso-8859-1を削って貰いました。
でも、依然としてMac+ネスケ4.xの環境で、cgiからの飛び先がhtmlだったり、
htmlとcgiの混合フレームの場合に化けます。
化けるのはいずれもhtml部分で、cgiは問題ありません。
そこで.htaccessに AddTypeを入れたところ、Mac+ネスケ環境では改善したのですが、
必ずWIN+ネスケ6.xにおいて激しく文字化け、リロードしても改善されない、という現象に陥ってしまいます。
cgi、html、いずれもshift_jisで書いて、保存してあります。
metaにはshift_jis指定をしています。
また化けhtmlに影響している、cgiに Content-Type: text/html; charset=Shift_JIS とcharestを追記すると、今度はサバエラになってしまいます。
勿論「;」や「"」には気をつけています<削除しないように
スキルがないなりに、\や\nをつけたり色々やってはみました。
はー。何ででしょう?
というか、一番不可解なのは、.htaccessに AddTypeを入れると、
どうしてネスケ6.x+WINで必ず文字化けしちゃうのか、分からないのです。
基礎知識がないので、この状態でいっぱいいっぱいです。
どなたかアドバイスをお願いいたします。
0290nobodyさん
02/03/08 11:12ID:???0291nobodyさん
02/03/08 11:13ID:???始めにhtmlの文字コードは?と聞いたものですが。
cgiも書けるのでしたw
>cgiに Content-Type: text/html; charset=Shift_JIS とcharestを追記すると、今度はサバエラになってしまいます。
コード見せてもらえればツッコミは入れられるかなと思います。
http://www.harukaze.net/~mishima/perl/cgi-tech-tips.html
に一通り文字コード対策載ってますね。
0292289
02/03/08 11:26ID:wwEgc1iJprint "Content-type: text/html\n\n";
print "<html><head><title>$main_title</title>\n";
print "<META content=\"text/html; charset=Shift_JIS\" http-equiv=Content-Type>\n";
print "<META content=text/css http-equiv=Content-Style-Type>\n";
&style;
でしょうか?
一緒に来て頂いて有り難うございます(笑)<291
<291
EUCは試してみていません。<html
保存をEUCにして、metaも変更してみる、という意味ですよね?
っつか、恥ずかしいのですが、eucで書いた事ないので、オノレに不安です。
0293nobodyさん
02/03/08 11:38ID:???0294289
02/03/08 11:46ID:wwEgc1iJ有り難うございます。
CGIは無事動きましたが、依然として最終飛び先のhtmlは化けてます…
0296茶文字 ◆xELvisFU
02/03/08 14:14ID:???>>294
最終飛び先のHTMLはCGIが生成しているのではなくて、もろHTMLなの?
フレームを使っているという話だったから、frameset定義ファイルと
各フレームに入るページの文字コードをそろえておいた方が安全な気はする。
0298289
02/03/08 14:33ID:wwEgc1iJ有り難うございます!(笑)
もろHTMLです。
cgiが生成しているのではありません。
メールフォームを送信し終わった後の飛び先のフツーのhtmlが化けます。
またフレームの方は上フレームがcgi、下がhtml(cgiが生成ではありません)
こちらも文字コードはshift_jisにて一貫させております。
つまり具体的には二箇所化けているのです。
ぶっちゃけて言えば、チャットの入り口と、送信フォームの最後の飛び先です。
メタはタイトルの上に置いたり、色々したんですが、どーしても化けるんです〜。しくしく。
0299茶文字 ◆xELvisFU
02/03/08 15:16ID:???どんな化けかたしてます?
HTMLによるマークアップが反映されているけど文字が判別できないのか、
HTMLの跡形もなくテキストがだーっと続いてる状態なのか。
後者だとしたらバイナリでPUTしてもーたっつー可能性も考えたんだけど。
# 鳩丸見てきたけど、frame要素にtype属性とcharset属性は存在しないみたいっすねぃ。
0300289
02/03/08 15:41ID:wwEgc1iJこんな感じです<ちなみに「戻る」です。
説明が後からになってしまって申し訳ありません。
サーバのapacheのバージョンが上がる前は普通に表示されていました。<チャットも送信フォームも
例の問題のapacheにバージョンアップした途端に駄目になったものです。
朝からずっと皆さんには色々とアドバイス頂いて恐縮です。
引き続きアドバイスお願いいたします。
0301286
02/03/08 15:43ID:???スレ違いだったのですね・・・気づかずに失礼しました。
レスありがとうございます。とても参考になりました。
しぃちゃんのPaintBBSアプレットにしたいと思います。
0302nobodyさん
02/03/08 15:53ID:???ttp://www.ecc.u-tokyo.ac.jp/guide/faq/charset.html
これとかじゃないのかな?
『文字化け』『Apache』のGoogle検索で一発で出たんだけど。
■ このスレッドは過去ログ倉庫に格納されています