1 :
名無しさん@お腹いっぱい。 :
01/12/28 23:21 ID:SPLRvqQi
2 :
名無しさん@お腹いっぱい。 :01/12/28 23:32 ID:SPLRvqQi
3 :
名無しさん@お腹いっぱい。 :01/12/28 23:34 ID:SPLRvqQi
4 :
名無しさん@お腹いっぱい。 :01/12/28 23:37 ID:SPLRvqQi
5 :
_gunzip :01/12/28 23:46 ID:SPLRvqQi
ごめん。ついでにこれも。
Perl6 & Parrot VM についての情報
http://dev.perl.org/perl6/ --------------------
Parrot Hello world!
--------------------
# hello.pasm
print "Parrot Hello world!\n"
end
6 :
名無しさん@お腹いっぱい。 :01/12/29 00:20 ID:5xfLHV23
PERLでSharedMemory使ったりセマフォ切りたい 時のお勧めサイトって有る?
>>5 TryAndCatch萌え ヽ(´ー`)ノ
FILE *handle1 = NULL, *handle2 = NULL, *handle3 = NULL;
try {
handle1 = fopen ( ... );
handle2 = fopen ( ... );
handle3 = fopen ( ... );
...
}
catch ( ... ) {
if ( handle1 ) close ( handle1 );
if ( handle2 ) close ( handle2 );
if ( handle3 ) close ( handle3 );
throw;
}
8 :
名無しさん@お腹いっぱい。 :01/12/29 14:21 ID:gaX+fcP8
try-catchはいいやね。 文字列検索よりは早そうだし。
age
10 :
名無しさん@お腹いっぱい。 :01/12/30 08:01 ID:tHdvBy1w
>1 スレ立てお疲れ様です。 さっそく質問させていただきます。 Win98にActivePerlをインストールしましたが、 DOSプロンプトから起動できません。 「コマンドまたはファイル名が違います」と言われてしまいます。 sample.plをダブルクリックすると、一瞬だけですが起動するので Perl自体のインストールは出来ていると思いますが……。 何がおかしいのか、考えられることを教えてください。
>>10 DOSプロンプトから perl -v でVersion情報が出力されますか?
問題無く出力されるようなら、
perl C:\somewhere\sample.pl
で実行できるはずですが。(C:\somewhere\は適当に読み替えて下さい)
スクリプトの多分岐にわたる セッションのテストってどんな風にしてます? モンキーレンチとか使えるのかなぁ・・・・・
ちょっと読んだ 能動的な型付けとか、最適化に関わる所が結構突っ込まれてるのかな Class eq Package じゃ無くなるってのも中々よさげ 今よりずっとOOusefulになると良いな でもオペレータ変更しすぎなんだよ先生よぅ・・・・ %hash{foo} ← これが参照外したスカラーなんて・・・ (死
あ、
>>5 @ _gunzipさんね
>>10 同じくPATHに一票
SETENVだかPATHだかでSET出来たかな(適当)
キーワード書くから調べて栗 w
「PATH」「環境変数」「DOS」「追加」「SET」
>14 間違えてんぞ〜 $hash->{foo} が $hash{foo} or $hash.{foo} だろ、んで $hash{foo} が %hash{foo} だよん つーか嫌すぎこれ
17 :
名無しさん@お腹いっぱい。 :01/12/30 14:57 ID:vG4UP0Ys
%tmp = ("aa0"=>"00","aa1"=>"11","aa2"=>"22"); foreach(0..2){$tmp[$_] = $tmp{aa$_};} みたいな事をやりたいのですが、 foreach(0..2){$tmp = "aa$_"; $tmp[$_] = $tmp{$tmp};} しかわかりません。 もっとスマートな方法があれば教えて下さい m(_ _)m
18 :
名無しさん :01/12/30 15:05 ID:6JQJx1N9
WEB上でアイコンがUP出来る掲示板とかありますか?
>17 ん? foreach(0..2){$tmp[$_] = $tmp{aa$_};} ↓ foreach(0..2){$tmp[$_] = $tmp{aa.$_};}
20 :
17 :01/12/30 15:42 ID:vG4UP0Ys
>19 あっ、そうですね。恥。。 即レスどうもありがとうございます。
21 :
10 :01/12/30 17:17 ID:???
>11、>13、>15 どうもお答えありがとうございます。 カレント\binでは、perl -vもちゃんと動いていましたが、 他の場所からでは起動できませんでした。 だからアドバイスどおり、PATHが通っているかをまず疑いました。 autoexec.batには、SETで始まる\binまでの行がちゃんとありました。 しかし実際にはうまくいっていないため、 試みにこの行を上の方にもってきて、再起動をすると、なぜかうまくいきました。 というわけで(一応無事に)解決したようです。 どうも助かりました。ありがとうございました。
22 :
名無しさん@お腹いっぱい。 :01/12/30 23:56 ID:uoyv0Wnn
open DAT,">>$file"; 上の様に追記でファイルをオープンした場合 ファイル内容が空になる瞬間というのはあるのですか?
>>22 ある。
* 他のプロセスが空にする。
* 自分で空にする。
24 :
ダメ男 :01/12/31 03:34 ID:zWJaANkc
その他では、新規ファイル作成時も
25 :
22 :01/12/31 03:42 ID:lAX6iAu+
今2個のプロセスで追記しまくった所 平気だったです。
26 :
22 :01/12/31 04:42 ID:lAX6iAu+
もう一個質問よろしいですか? $tmp = "o("; @data=grep(!/$tmp/,@data); ↑これを実行するとエラーとなるんですが、 何故でしょうか?
27 :
ダメ男 :01/12/31 05:07 ID:SHzKQGPS
$tmp= "o("; ↓ $tmp = "o\\(";
"("はRegexpのメタ文字なんだよ。
29 :
22 :01/12/31 15:02 ID:???
$tmpの部分は入力フォームから入力してもらい、 さらにgrepした後入力を表示させたいのですが、 こういう場合$tmpに格納されている文字はただの文字として 検索するという方法は無いのでしょうか? またo(以外にも「ソ」もエラーになるのは文字コードが メタ文字とかぶっているからですか?
30 :
22 :01/12/31 15:27 ID:???
とりあえず @data=grep{($tmp1,$tmp2)=split /\t/,$_;$tmp1 ne $tmp}@data; で緊急避難しました。 29の方法あったら教えて下さい。
>>30 =22
CGIかなにかだと思うけど、内部の処理でS-JISを使用するのはお勧めしない。
入出力と内部の処理は分けて、内部ではEUCなんかを使うのが吉。
あと参考までに、quotemeta() や \Q も調べておくとよいでしょう。
perldoc -f quotemeta
perldoc perlre
33 :
22 :01/12/31 21:02 ID:???
>>31 どうもすいませんです;;
と検索どうもです。
>>32 なるほどです。
quotemeta() 調べてみます。
ご親切にどうもありがとうございました。
34 :
おねがいします! :02/01/01 02:00 ID:RjS1sLKo
超初心者なんですが、、、。 逆スラッシュが打てません。 \になっちゃうんです。 どうしたらよいのでしょうか?
>>34 おれにはちゃんと逆スラッシュに見えてるが?
38 :
34 :02/01/01 02:57 ID:dE6tT7ED
>36 すみません。 Mac OS 9.04 MacJPerl 5.2.Or4 J1 です。 よろしく!
みなさん、おめでとうございます!
perlfuncだとdbm〜〜の変わりにtie,untieを使えと書かれてますが
レンタルサーバでモジュールの依存関係(標準も入ってないdeath)何かが面倒な時
はdbm〜を使っても良いですか?
1000件程度なんでそれ程速度も気になりません
>>34 \のままで良いよ (^-^
全角はダメだよ
40 :
:02/01/01 06:07 ID:RYgD0SJz
@char=('0'..'9','a'..'z','A'..'Z'); という62文字を使って 1 (あるいは 0)から ZZZZZZZZ までの 62進数を順番に生成したいのですが、上手にやる方法はありますか?
>40 ハードコーディングで良いなら push (@value,0) for (1..8); これを初期値(つまり$value[0]が1桁目、$value[1]が2桁目)にして 値を1増やす関数と、@valueを分解しながら$char[$value[$_]]とかして 表示する関数を書いてみ。 それが出来たら桁とか@charを可変に出来る様にしてみよう。
42 :
名無しさん@お腹いっぱい。 :02/01/01 22:46 ID:mPGnAlls
Benchmarkモジュールについて教えて下さい。 Benchmark: timing 10000 iterations of for,foreach... for: 27 secs (27.18usr 0.00 sys = 27.18 cpu) foeach: 11 secs (10.54usr 0.00 sys = 10.54 cpu) この出力結果はどういう意味なんでしょうか。forとforeachというアイテム?を比べて、 forが27秒かかってforeachは11秒、これはforeachの方がお得だね、というのは判るんですが、 usrとsysの意味が判らないです。この二つからcpuの使用率を出してるようなんですけど…
usrが動かしてるべんちに掛かった時間じゃネーノ んでsysが他のプロセスが使った時間じゃネーノ んでcpuがトータルのCPU時間って事じゃネーノ 適当に想像だけどね つーかその結果の方が気になるわっ (w
44 :
42 :02/01/03 02:53 ID:jaPZDeyi
なるほど、何やってもsysが0のままなのが不思議でした。 ありがとうございました。
45 :
:02/01/03 23:06 ID:sFx8M0Lj
>>39 dbmかndbm入っているんだったら、dbmopen使ったって別にいいんじゃないかと思うけど。
将来のバージョンでの対応が保証がされないだけで(笑)
動けばいいやっていうんだったら、全然かまわないかと。
46 :
名無しさん@お腹いっぱい。 :02/01/04 00:04 ID:VeQd/ckC
皆が2ch用ブラウザを利用しているわけではない。
48 :
名無しさん@お腹いっぱい。 :02/01/04 12:28 ID:SUGVa40q
3Gくらいのテキストファイル処理をしたくすったもんだやっています。 GDBMを使ってDB化(?)しているのですが、 tell & seek のサイズ限界にひっかかっているようです。 この場合は、ファイルを分割するしかないのでしょうか? 初心者です。よろしくお願いします。
Tie::Handle::BigFileを自分で実装してみるとか。 なかなか面白そうだ。
50 :
48 :02/01/04 14:14 ID:SUGVa40q
ぐぅ〜 そんな力も時間もないでちゅ・・・・・
51 :
48 :02/01/04 14:15 ID:???
わしのIDカコイイな。
52 :
48 :02/01/04 14:30 ID:SUGVa40q
>>49 教えてちゃんですみません。ロジックのヒントをお願いします。
53 :
名無しさん@お腹いっぱい。 :02/01/04 14:49 ID:kY4aCT8X
既出かもしれませんが。教えてください。 あるCGIで生成した結果を表示後それをHTMLファイルとして保存するにはどうしたらよろしいでしょうか?
ファイル(F)→名前を付けて保存(A)...
55 :
53 :02/01/04 14:51 ID:kY4aCT8X
追記 HTMLとして保存するスクリプト、または関数をご存知の方お教えください
56 :
53 :02/01/04 14:53 ID:kY4aCT8X
>>54 たぶんそんなつっこみがくるとおもってました。(藁
追記です
HTMLとして保存できるスクリプトか関数をお教えください
57 :
初心者 :02/01/04 14:58 ID:???
>>53 初心者だけど。
HTMLで結果吐いて、
同じ内容をtimeなりでファイル名決めて書き出せばいいのでは?
58 :
初心者 :02/01/04 14:58 ID:???
あとは自分で調べる努力を。
59 :
53 :02/01/04 15:04 ID:kY4aCT8X
>>57 マジ、わからないんですが、おっしゃられているのは「ファイル(F)→名前を付けて保存(A)...」
で保存してってことですか?
>53 ダイジョウブ?
61 :
初心者 :02/01/04 15:10 ID:???
62 :
53 :02/01/04 15:18 ID:kY4aCT8X
板にgzipをとり入れようと思うんだけど どのように記述すればいいんでせう? よろしくお願いします。
それPerlの質問か?
>>48 分割したファイルが一つのファイルのように見えるようにインターフェイスを整えるのだ。
だから本当に大きなファイルが扱えるわけではない。
それでいいならちょいと書いてみるが?
66 :
名無しさん@お腹いっぱい。 :02/01/04 16:33 ID:ZcIQHoBD
KENTのPetitBoardに新記事のマークを付けるにはどうしたらようのでしょうか?
67 :
48 :02/01/04 16:33 ID:SUGVa40q
>>65 ありがとうございます。お願いいたします。 ;;
ファイルサイズはこの先大きくなる一方なのですが、分割していくしかないでしょうか?
もしくは、データベースに突っ込むか・・・・・・
「Cで書け!」と言われてしまいました。
齢20代後半で今からCは身に付くでしょうか? ソース見てもクラクラします ;;
68 :
65 :02/01/04 16:58 ID:???
そんなに期待されると…(汗 あくまでも個人的に面白いと思うから作るだけなんで。 だからといって適当な物を書くわけじゃないですが。 ついでに言うと*DBM_Fileとの連携は出来ないかと。
166 名前:名無しさん@お腹いっぱい。 投稿日:02/01/04 16:48 ID:ZcIQHoBD KENTのPetitBoardに新記事のマークを付けるにはどうしたらようのでしょうか??? 167 名前:名無しさん@お腹いっぱい。 投稿日:02/01/04 16:51 ID:??? ↑何でマルチすんだよ糞ガキ消えろ 168 名前:名無しさん@お腹いっぱい。 投稿日:02/01/04 16:56 ID:ZcIQHoBD うるせぇ俺は20歳だ。そんだけ気になっとんだ。 169 名前:名無しさん@お腹いっぱい。 投稿日:02/01/04 16:57 ID:ZcIQHoBD そんな事より即効で文句言うてめぇの方がガキだ。
70 :
名無しさん@お腹いっぱい。 :02/01/04 17:37 ID:AGeoy3Tc
>>67 バイナリで書くよりはCの方が簡単です。
まぁマジレスすると身につかないことは無い。
構文自体はPerlに似てるし。ただ、Perlに比べて
もっと「プログラムらしい規約」が多々出てくるので
Perl以外にプログラムをやったことが無かったら
馴染めないかもね。
おれは逆にZ80からCやFortran、RINGOやAppleScript等を
経てからPerlに来て、なかなかPerlに馴染めなかったけど。
71 :
48 :02/01/04 18:02 ID:SUGVa40q
>>68 すみません。ヒント程度の気楽なもので十分です。
ありがとうございます。
やりたいのはレコードの検索なので、DBMと連携なりは、考えます。
>>70 ありがとうございます。道のりの割に、使う機会が少なそうで・・・・
でも追い込まれないと勉強しないし・・・・・
自分は、N88BASIC -> 永い永い月日 -> Perl, PHP, VBScript群
しょぼ。
72 :
65 :02/01/04 19:28 ID:???
とりあえず ・配列にファイルハンドル(以下FH)を入れておく ・そのFHを通じて何か書き込みをする度にサイズをチェック(stat()してもいいし長さを記録しておいても良い) ・サイズが一定値を超えたら新しいファイルを作成して配列に新しいFHを追加 ・seek()やらtell()やらは合計ファイルサイズを考慮して計算 ・これらのことを通常のIOインターフェイスを通じて行えるようにタイクラスに閉じ込める。 って感じで(超適当な説明だが) DBMと連携するにはまた別のことを考えなきゃいけないね。 複数のDBMハッシュを保持したタイハッシュクラスを考えればいけるんじゃないだろうか。
73 :
:02/01/04 19:32 ID:CJ4spD6O
PostgreSQL使ってみるとか。
74 :
:02/01/04 19:36 ID:CJ4spD6O
後は検索ルーチン次第だけど、検索項目ごとにインデックス用のDBM作って、 メインデータは、データのカテゴリごとに分割する。 データ自体に一意のID振っておけば、それでデータの抽出が出来る。 そもそも、そんな巨大なデータをwhileとかで回しても、効率よくないだろうし。
75 :
48 :02/01/06 14:51 ID:4VaeiTUG
>72 うをー! ありがとうです! エンジンかかってきた! やるでー!! >73 >74 ありがとー DBに入れるのも考えましたが、ディスク資源も既に虫の息なので、ホント ツライです。
>>75 シーラカンス本(約\3,500)説明ワカリヤスイヨ.
プログラミング一から勉強するよりよっぽど楽勝ですし。
77 :
名無しさん@お腹いっぱい。 :02/01/08 16:04 ID:2bmV9luV
アクセスカウンターやその他のデータを ファイルに記録する時などでファイルを open (FILE,"+<$file"); で開いて変更するのと open (FILE,"$file"); 書き換え作業 open (FILE,">$file"); という方法だと後者だと良くないのでしょうか?
良くなくない
>>77 どういう考えでそういう結論に至ったのか問い詰めたい
80 :
名無しさん@お腹いっぱい。 :02/01/08 16:20 ID:2bmV9luV
即レスどうもです。 いろいろスクリプト見てると前者の方が多いと感じまして 後者の方はいかんのかな?と思ったです。 特に問題は無いと考えて良いみたいですね。 他に美しくない、負荷がかかる、なんかの問題も 無いのでしたら、何故前者の方がよく使われてるのでしょうか?
前者の方がコードが簡単だからではないだろうか。 処理中に落ちてデータが壊れる確率も大差ない気がする。 消えにくいようにするならこれかな? open IN, "<$file" or die; # ... close IN; open OUT ">$file.tmp" or die; # ... close OUT; rename "$file.tmp" => "$file" or die;
82 :
名無しさん@お腹いっぱい。 :02/01/08 16:36 ID:XZoY9u5U
>処理中に落ちてデータが壊れる確率も大差ない気がする。 後者の方が壊れる確率高いよ。
83 :
名無しさん@お腹いっぱい。 :02/01/08 17:03 ID:2bmV9luV
1度のopenで、ファイルに書き込むデータのサイズが 減る可能性がある場合はtruncateは必須なんでしょうか?
どう言う意味が分からないよぅ。 ファイルサイズを揃えておきたい時なんかはそのまま書き出して 閉じたりするよ 必須と聞かれればNOになる
>>84-85 ごめんです
試したら思いっきり変になりました。
これってOSによって実装されてない場合あるんですよね?
あんま使いたくなかったなぁ。
レスどうもでした。
87 :
名無しさん@お腹いっぱい。 :02/01/08 17:45 ID:2bmV9luV
すいません。もう1つ質問よろしいでしょか? 皆さんはチャットやらカウンターなんか作らない かもしれないですが、 カウンターの場合は読み書き両用で1度だけopenするのに対して チャットなんかだと読み込みのみでopenして 書きこみはまた後で書き込みのみでopenしてるのですが この違いは何なのでしょうか?
作ったヤツに聞け。
カウンターだからチャットだからと言う事は無い ただCGI(だよな??)は排他とかトランザクション取らなきゃならないので 色んな手法でデータの同一性を保証出来るようなコードを書く必要は有る チャット位ならどうって事ないような気がするが
90 :
どなたか :02/01/09 12:29 ID:6I7ENOMK
指定した個数の固有な乱数を効率良く得る方法ってありますか? 例えば1から100の範囲で4つ乱数を生成して、それを一つの配列に入れたいんですが。 $max = 乱数の最大値 $num = 個数 @kekka = 得られた乱数を[0..($num-1)]で格納する配列 という風にしたいんですが、どうしてもうまくいきません。 単純に指定個数の乱数を作って配列に入れるならできるんですが、 重複を許さないためにifやwhileで今までの結果を参照させようと するとうまいコードが思い浮かびません。 もしかしたら簡単な解決方法があるのかと思いここに書き込ませてもらいました。
uniqな値って事かな until ($n == $max) { $r = rand(100); push(@ary,$r) and $n++ if(!grep /$r/,@ary); }
あ、ちょっと違うか until (my $n == $num) { my $r = rand($max); push(@kekka,$r) and $n++ if(!grep /$r/,@kekka); }
なんとなく90は「整数を」欲しがってるきがするので、その書き方をしてみる。 my @kekka; my $max = 100; my $num = 4; die('$max の値が $num より多いとダメだから注意な。') if $num > $max; my %temp; my $rnd; my $n = $num; !$temp{($rnd = int(rand $max) + 1)}++ and push(@kekka, $rnd) and --$n while $n;
94 :
93 :02/01/09 13:20 ID:???
あ、dieのメッセージが逆だ(w
95 :
90 :02/01/09 13:23 ID:6I7ENOMK
おお!早速有り難うございます。そうです、uniqueな値を指定個数生成したいんです。 でも実行してみたらループしてる・・・うーん、どっか変数間違えたかな。 こんな感じでやってみたんですが #ここから $max="10"; $num="4"; until (my $n == $num) { my $r = int(rand($max)); push(@kekka,$r) and $n++ if(!grep /$r/,@kekka); }; print "@kekka"; #ここまで これってgrepの結果が真だった場合は同じ$nでまたループしてるんですよね。 ということは、grepが真を返してない(?_?)
96 :
名無しさん@お腹いっぱい。 :02/01/09 13:25 ID:lzfPILoX
ちかごろは、srand;しないでも良くなったんですか?
97 :
90 :02/01/09 13:26 ID:???
お!!!93さんの動いた!!! 助かった〜〜〜 91さんも93さんも有り難うございます。 解読して考え方を参考にしますね。
98 :
90 :02/01/09 13:27 ID:6I7ENOMK
>96 らしき話をどこぞで見たような。
100 :
90 :02/01/09 13:31 ID:???
自己レス。 5.004 以降だとsrandが無い場合は最初のrandが自動的に 呼び出しているそうです。その場合はtimeとprocess IDを元にsrandしている ことになるそうです。受け売り。
101 :
名無しさん@お腹いっぱい。 :02/01/09 13:54 ID:lzfPILoX
>>98-100 なるほど〜、ありがとうございます。
5.003以前だとsrandしないといけないって事ですね。
バージョン依存は難しいです、いろいろ。。。
102 :
名無しさん@お腹いっぱい。 :02/01/09 15:11 ID:yTZZpKpq
初めまして、今回仲間内のHPで出席簿を作ってみようということになって少しやってみたのですけど まったくうまい子といきません。 やりたいことは、名前入力 名前に対してのカウント数 これくらいです。 一応ソース載せます、めちゃくちゃだと思うので一から出直せとかきついこといってください。 read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); foreach $pair(split(/&/, $query)){ ($name,$value)=split(/=/,$pair); $name=$value; } OPEN(FILE, ">+./$name/count.dat); $count=<FILE>; print FILE ++$count; close<FILE>; OPEN(NAME, ">+./namedata.dat"); while ($check=<NAME>){ if ($check ne $query){ seek(NAME,0,2); print NAME $query\n;} } ####スミホマ print"content-type: text/html\n\n"; print"<table border=\"1\">"; while($uname[$list]=<NAME>){ $data="./$uname[$list]/count.dat"; print"<tr><th>$uname[$list]</th><td>$data</td>\n"; } print"content-type: text/html\n\n"; print"<table border=\"1\">"; foreach $key (sort keys %uname){ print"<tr><th>$key</th><td> まだ途中です。
104 :
名無しさん@お腹いっぱい。 :02/01/09 15:33 ID:yTZZpKpq
>103 ううむ、もっかいやり直して載せてみます。 頑張ります。ありがとー
>>102 何を参考にしたらそんなソースになったのか知りたい。
106 :
名無しさん@お腹いっぱい。 :02/01/09 22:46 ID:CEjm/hO6
perlのファイルをupすると、一行目のパスの頭になぜか<がついて <#!/usr/bin/perl となってしまいます。windowsからアップしているのですが、 LFでアップしようがなんだろうが<がついてしまいます。 原因わかるかたいらっしゃったら教えてくださいー
107 :
名無しさん@お腹いっぱい。 :02/01/09 22:50 ID:no3DVS2q
108 :
名無しさん@お腹いっぱい。 :02/01/10 11:13 ID:6z++Gsnn
tellが取る位置が納得いかない。 毎行index化したいのですが open(F, file) || die; tie(%IDX, 'GDBM_FILE', file.gdbm); $id = tell(F); while(<F>) { $name = $_; #ココ? $IDX{$name} = $id; $id = tell(F); #この行は } untie %IDX; close F; これはうまくいくのですが、「$id=tell(F);」を、「ココ?」に入れる方が 正しい気がしてなりません。 しかし、そうやって作ったgdbmファイルの返す結果はズレズレです。 えらい勘違いしてるのかもしれませんが、よろしくお願いします。
が実行される度に次の行の始点にいくのでうまくいかなくて当然です。
>>102 まったくうまい子といきません。
ワラタ
>>106 鯖の問題では?
タグ埋め込もうとしてるとか
112 :
108 :02/01/10 13:54 ID:6z++Gsnn
>109 「ポインタは行頭にしか置かれない」と思い込んでました。アホー 前行の行末 = 次行の行頭 なんですね。 スッキリしました。ありがとうございました。
113 :
名無しさん@お腹いっぱい。 :02/01/11 13:45 ID:sSwGXaK5
114 :
名無しさん@お腹いっぱい。 :02/01/11 15:34 ID:uaH1srIU
2ch書き込み補助プログラムを作ろうと思ってるんだけど, ソース見てると出てくる <input type=hidden name=time value=1010730193> って何? 時間みたいだということはわかるんだけど・・・ あと,perlで書かれた2ch書き込みプログラムのサンプルが あったらきぼんぬ
115 :
名無しさん@お腹いっぱい。 :02/01/11 15:50 ID:USEv/wv3
>114 time関数で取得した書き込み時間をhidden属性で渡してると思われ。
どうやってそれでチェックするの? (^∀^)
ごめんなさいごめんなさい 本当に困っています 教えて下さい
121 :
名無しさん@お腹いっぱい。 :02/01/11 16:26 ID:USEv/wv3
わからんものはいらないんだからマネしなくていいじゃん。
>>120 =
>>114 なの?
>>114 でゆってる「ソース」ってブラウザ画面からとってきたやつ?
そう言うアナタは解るんですね :-)
123 :
114 :02/01/11 16:37 ID:uaH1srIU
>>121 あ,
>>120 じゃないです,けどThx.IEやネスケの「ページのソースを見る」
ってやつだとオモタ(IEもネスケも使ってないから知らん).
生timeを10進数で書いただけなのね
…あ,もしかして,これをいじると連続投稿できたりするの?
もしかして(って,そこまで杜撰じゃないか)
これ何の意味も無いって、御まじない HTMLにID埋めて判別出来なる訳ないじゃん
125 :
121 :02/01/11 17:01 ID:???
>122 わかりませんです。 ソース見てない作者でもない >115で書いたことくらいしかわがんねっす。
>>125 実際に試してみて書き込めるかどうか試してみる
こときぼんぬ
127 :
121 :02/01/11 17:18 ID:???
>126 オレ?
分数の計算するにはどうすれば?
129 :
名無しさん@お腹いっぱい。 :02/01/12 02:26 ID:Ex/FkKTs
sub get_time{ $ENV{'TZ'} = 'JST-9'; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $day = ('日','月','火','水','木','金','土')[$wday]; $date = sprintf("%04d/%02d/%02d(%s) %02d:%02d:%02d",$year+1900,$mon+1,$mday,$day,$hour,$min,$sec); } とあって、時間表示で秒を表示させたくないとか年を表示させたくないとか、 色々変えたいのですが初心者すぎてどうしたらいいのかわかりません。 時間表示をどういう風にカスタマイズしたらいいのか、 解説してあるサイトを教えていただけませんか? 他の所も勉強すべきなんでしょうけど、急いでいるので とりあえず時間表示の部分だけどうしたらいいのか知りたいのです。 検索しようにも漠然としててどうしたらいいかわからないし、よろしくお願いします。
131 :
:02/01/12 03:52 ID:H5EXwuVV
> 130 ;### 時分秒・年月日・曜日を取得するなら以下で充分 ($sec,$min,$hour,$mday,$mon,$year,$wday)= (localtime)[$[ .. $[+6]; ;### 年および月は次のようにする $year+= 1900; $mon++; ;### 時・分・秒・月・日は、ゼロサプレス無しにするなら次のように ;### する。(sprintf関数がオーバーヘッドは大きくてらっしゃるから) if ( $sec < 10 ){ $sec= '0' . $sec; }
132 :
130 :02/01/12 04:39 ID:???
>>131 ありがとうございます…
一生懸命理解しようとしたのですがよくわかりませんでした。
どこにどうやって記述したらいいのかが…
年表示は2002年なら02にするか非表示にしたいんです。曜日表示も消したいんですが…
例えば(02/01/12/04:38)か(01/12/04:38)のようにしたい。
途中経過を無視して答えだけクレクレ厨してるようで心苦しいのですが
どう書けばいいのか丸ごと教えてくださればうれしいです。
本当にすみません。
>途中経過を無視して答えだけクレクレ厨してるようで心苦しいのですが >どう書けばいいのか丸ごと教えてくださればうれしいです。 ここはPerlのコーディングで困ってる人のスレです。
136 :
130 :02/01/12 05:18 ID:???
137 :
:02/01/12 06:11 ID:h7K0q4m9
> 132 ;### 年表示フラグ $DISP= 1; # (0:年非表示, 1:年表示) ;### 年月日・時分の取得 $get_time= &get_time; ;### 年月日・時分取得用サブルーチン sub get_time{ my( $min, $hur, $day, $mon, $year )= (localtime)[$[+1 .. $[+5]; $year+= 1900; $mon++; if ( $min < 10 ){ $min= '0' . $min; } if ( $hur < 10 ){ $hur= '0' . $hur; } if ( $day < 10 ){ $day= '0' . $day; } if ( $mon < 10 ){ $mon= '0' . $mon; } $year= $DISP ? substr($year, -2, 2).'/' : ''; "$year$mon/$day/$hur:$min"; }
138 :
:02/01/12 06:29 ID:gr/TbQbq
> 137 補足しておきますが、字下げのために全角スペースを使用していますので、 コピペする場合は半角スペースに書き替えてください。
>>137-138 ご丁寧にありがとうございます…
スペースを半角にしてそのままコピペしましたが、
でもそれでやると、[]となって一つも表示されません…
素直に改造スレへ逝って来た方がよさそうです…
140 :
:02/01/12 07:30 ID:8mAO1za5
> 139 これをやっても表示されないとなると困ったことですね。 念のため次の実行でワーニングが出るかどうか試してみては? perl -wc xxx.pl
(月/日 時:分)なら sub get_time{ $ENV{'TZ'} = 'JST-9'; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $date = sprintf("%02d/%02d %02d:%02d",$mon+1,$mday,$hour,$min); }
>>140-141 やっとわかりました!
希望通りにできました。
色々と変える変更も好きなようにできました。
脱線話題なのにつきあってくださって教えてくださって本当に感謝します、
ありがとうございました。
143 :
名無しさん@お腹いっぱい。 :02/01/12 22:55 ID:WkPCmc4x
perl言語をわかり易ーく説明しているサイトを教えてください。 それと、CGI作る際に覚えといたほうがいい言語って何ですか?perlは駄目??
>>143 とほほとか。
CGIはPerlでもいいけどPHPの方が簡単だと噂
145 :
ム板の住人 :02/01/13 03:44 ID:XUMgdFRP
>>143 ちゃんと削除依頼も出していたみたいやから、えらいね。
144がいう。とほほはここ。
http://tohoho.wakusei.ne.jp/wwwperl.htm PHPもいいけど、RubyができるならeRubyでもいいかも。
言語として簡単と言うより、PHPやeRubyはCGIを作るのが簡単。
CGIはPerlが一番資料があると思うけど、
配布されているPerlのCGIのソース見るとわかるように、
ほとんど暗号だから。
保守性やOOで組みたいなら、PythonやRubyを使った方がいいかもね。
146 :
初心者 :02/01/13 04:52 ID:DlteyoA5
あのーAN HTTPD Daemonを使って CGIを使いたいのですが 自分で色々やってみたんですがどうしてもできませんでした やったことはActive PerlとJperlをInstallして 落としてきた掲示板CGIにそのパスを書いたんですが FTPからそのCGIの属性変更をしようとしても変更できず HTTP 500内部サーバエラーが出てできませんでした どなたか詳しく教えていただけませんか?
147 :
名無しさん@お腹いっぱい。 :02/01/13 04:54 ID:H4tslrXd
悪ロダみたいな掲示板のスクリプトを探しています テキストファイルやMIDIファイルを主に扱いたいのですが JPEGファイルだけでなくいろいろな形式のファイルを アップロードできる掲示板のスクリプトで デファクトスタンダードっぽい有名なものとかあるのでしょうか? イメージ掲示板にはどこに行ってもこれと同じのを使っているなぁという 有名なのがあるみたいですが
148 :
名無しさん@お腹いっぱい。 :02/01/13 04:54 ID:34eWZDO9
150 :
名無しさん@お腹いっぱい。 :02/01/13 05:07 ID:H4tslrXd
おおおおお!喰らった816件! おれも「アップローダー」&「CGI」&「フリー」&「配布」で 検索して同じように膨大な結果になったんですけど 無難なとこで、みんなが使っている有名なやつにしたいなぁなんて ダメっすか?(^^;
試験
152 :
初心者 :02/01/13 06:14 ID:DlteyoA5
僕はネタと思われるほどおかしい事をやっているのでしょうか ここでこんな事を聞くのはお門違いなのでしょうか
153 :
名無しさん@お腹いっぱい。 :02/01/13 06:17 ID:9ZeVW+fZ
>>152 いちいち反応しないでじっくり待ってみなよ。
>>146 属性とは何か。パーミッションとは何か。
調べれば自ずと答えが見つかる気がする。
あとはhttpdのヘルプでも読んでくれ。
要するにPerlの問題じゃないって事。
155 :
名無しさん@お腹いっぱい。 :02/01/13 07:14 ID:rQlmrkvV
test
156 :
名無しさん@お腹いっぱい。 :02/01/13 07:34 ID:Wnlhf2ri
2ちゃんねらーの多く出入りする掲示板を運営しています。 掲示板にトリップ機能を組み込みたいんですが、誰かわかりますか?
>>156 みちのくんとこにある2ちゃんコピーの掲示板についてる。
158 :
名無しさん@お腹いっぱい。 :02/01/13 11:31 ID:0YPd0etQ
requireとサーバーの負担について質問です。 #!/usr/bin/perl print "Content-type:text/html\n\n"; require "a.cgi"; print $tmp; require "b.cgi"; print $tmp; require "a.cgi"; print $tmp; exit; a.cgiには $tmp="a"; b.cgiには $tmp="b"; と書いてあります。 と書くと、結果はabaとしたいのですが、abbとなるんです。 3回目のrequireが1回目と同じために3回目の処理を勝手にスキップ してるのではないかと推測してみたんですがあってますでしょうか。 別の案として、 require "a.cgi"; $tmpa=$tmp; require "b.cgi"; $tmpb=$tmp; print "$tmpa$tmpb$tmpa"; と考えたんですが、a.cgi b.cgiは本来40個くらい変数格納していて、 全て変数に取っとくのもどうかと思い最初の案を考えたのですが。 日本語が不鮮明だな…。まとめてみると、 「2度目のrequireを有効にすることができるか、できるならその方法」 「別の案の場合、サーバーに掛かる負担ってのは憂慮するほどのものであるか」 の二点が疑問です。 どなたかご教授頂ければ幸いです。
>>158 それは、requireの仕様。
# てか、requireの使い方を激しく勘違いしているような、、、
とりあえず、perldoc -f requireしてみること!
158の知りたいことが全て解説されている。
160 :
158 :02/01/13 11:53 ID:0YPd0etQ
どうも有難う御座います。 requireの使い方は人のCGIを見て使い方を自分の中で勝手に認識したので…。 perldoc -f requireやってみます。 というかどこで(?)やればいいのかも解らないのでとりあえず調べてきます。 それでは。
161 :
:02/01/13 12:09 ID:???
>>160 > というかどこで(?)やればいいのかも解らないので
コマンドラインから
162 :
名無しさん@お腹いっぱい。 :02/01/13 13:35 ID:2oX90M6u
lolipop.jpの鯖にapeboard+を置いたんですけど、 505で動きません。 アスキーモードで転送したし、 Perlのパスは指定のものに変更したし、 パーミッションも755にしているのに動きません。 何故かしらー?? どころか、テストのために同じ状態でUPした、 Hello World!クラスのcgiも動かないのです。 鯖が悪いのか?FTPソフト(FFFTP)が悪いのか? お分かりの方おりましたらお教えください。
POSIXモジュールを使っている人はいる? 使いまくると見づらい? 例えば、$ENV{'QUERY_STRING'}を参照すればいいものをPOSIX::getenv("QUERY_STRING")とやるということ。
165 :
名無しさん@お腹いっぱい。 :02/01/13 15:53 ID:iK+xIF0s
るせヴォケ
169 :
156 :02/01/13 19:36 ID:ZxK7891W
すいません、
>>157 のみちのくの意味がわかりません。
もしよろしければ、もう少し詳しいことを教えてください。
171 :
156 :02/01/13 21:05 ID:ZxK7891W
>>170 申し訳ない。わざわざ有難うございます。
172 :
名無しウィルス ◆UETvirus :02/01/13 21:26 ID:hUoFkGoF
173 :
名無しさん@お腹いっぱい。 :02/01/14 15:38 ID:xszmZ/SM
Perlでfork関数を使用した際、 子プロセスがいくつ生成されているか、 親プロセスが知るにはどうすれば良いのでしょうか? 具体的にはHTTPのGETをしたりするスクリプトで 子プロセスの数を(例えば3個までとかに)制限したい ということなんですけど。
174 :
perl初心者 :02/01/14 19:00 ID:n0YvEQb/
現在perlを始めたばかりのプログラミング初心者です。 HC Editorというフリーのテキストエディエターで perlを書いているんですが、保存時の漢字コードをEUCにすると なぜか保存して、再び読み出したときに中身が文字化けしてます・・・ OSはWINDOWSです、よろしくお願いします。
>174 なぜその製作者のサイトで聞かない? それが一番確実なはずだけど。
176 :
:02/01/14 19:48 ID:???
177 :
perl初心者 :02/01/14 20:10 ID:RxHccNR/
そっか(汗 そーします。
178 :
名無しさん@お腹いっぱい。 :02/01/14 23:46 ID:zLD178tU
パッケージ関数bar を標準で入っている関数die の別名として使おうとして package foo; *bar = \&CORE::die; bar("hoge"); と書いてみましたが,そんな関数知らんと怒られてうまくいきません。 どうやればできますか?
179 :
名無しさん@お腹いっぱい。 :02/01/14 23:57 ID:x1aEi06n
スレ違いだけど妥当なスレが見当たらなかったので 書き込ませてください。 CGIかうんた設置を試みてるのですが、どうもうまくいきません。 FFFTPを最近使い始めたのですが、転送する前・・・つまり こちら側にあるファイルのサイズと、鯖に転送したファイルのサイズが 微妙に違うのです。 20000バイトなら、鯖のは19621バイトといったふうに。 こういうのって、CGIの誤作動に繋がりますか? 何度転送してもそのようなサイズになってしまいます。
180 :
:02/01/15 00:09 ID:???
>>179 もしかして広告とか?
でも、やっぱりここで訊くのは間違ってる
お邪魔してしまってすみませんでした<(__)>
他の板で聞いてみます
広告とは?
>>179
183 :
:02/01/15 00:16 ID:???
>>182 > 広告とは?
ゴメソ。適当に言っただけ。忘れて下さい。
184 :
名無しさん@お腹いっぱい。 :02/01/15 08:49 ID:DyvaVHMP
このリファレンスの使い方って、マズいですか? (sub内のmyな変数のリファレンスを返却) sub foo { my %ret; $ret{"bar"} = "baz"; \%ret; } my $r = &foo(); print $$r{"bar"} . "\n";
185 :
名無しさん@お腹いっぱい。 :02/01/15 10:28 ID:mJdfZzdE
>184 結果はどうなの? 最後の一行を print $r->{"bar"}."\n"; でどうよ。
( ´ ・∀・`) へー
187 :
185 :02/01/15 13:37 ID:mJdfZzdE
>184 なんだ。そのままで動くやん。 「sub内でのmy変数のリファレンスを返す」こと自体は全然マズくないよ。
188 :
184 :02/01/15 15:41 ID:DyvaVHMP
>187 >「sub内でのmy変数のリファレンスを返す」こと自体は全然マズくないよ。 ああ、そうなんだ。ありがとう。
189 :
名無しさん@お腹いっぱい。 :02/01/16 02:09 ID:JQVH7PKS
ふーむ。sub呼ぶ度にheapに%retが確保されるようなイメージですかね。 sub foo { my ($k, $v) = @_; my %ret; $ret{$k} = $v; \%ret; } my $r1 = &foo('key1', 'var1'); print $r1 . "\n"; print $$r1{"key1"} . "\n"; my $r2 = &foo('key2', 'var2'); print $r2 . "\n"; print $$r2{"key2"} . "\n"; print $r1 . "\n"; print $$r1{"key2"} . "\n"; $ ./x.pl HASH(0x8105ce4) var1 HASH(0x80f857c) var2 HASH(0x8105ce4) $
190 :
102再びです。 :02/01/16 10:23 ID:MJHKAqJj
どうも、以前にも質問しました。 時間が空いたのでもう一度書き直してみましたが、動作しません。 出席簿みたいな感じのCGIです、 少しチェックして欲しいです。 require'jcode.pl'; require'cgi-lib.pl'; &ReadParse(*answer); $name="$answer{'name'}"; open(DATA,">>./log.dat"); while(@dname=<DATA>){ foreach $key(@dname){ ($namelist,$count)=split(/,/,$key); if($namelist eq $name){ ++$count; } } print DATA "$name,$count";
191 :
102再びです。 :02/01/16 10:24 ID:MJHKAqJj
openの後が意味不明、何がしたいのか説明してみてくれる?
193 :
102再びです。 :02/01/16 10:57 ID:MJHKAqJj
(名前、カウント数) でデータを保存したいのです。 それを参照して同じ名前があったらカウント数増加、 なかったら新規で作成という感じにしたいのです。
>open(DATA,">>./log.dat"); 追記モードで開いてもポインタがファイルの終端を指しているから データの読み込みは無理。 SEEKするか? >while(@dname=<DATA>){ ↑これは >@dname = <DATA>; こうするか >while(<DATA>){ こうしなさい。 どちらにしても、追記モードでオープンしてるんじゃ無理。
195 :
102再びです。 :02/01/16 11:08 ID:MJHKAqJj
おぉ、分かりました。 open(DATA,"+>./log.dat"); にして入出力用にすればいいのかな もうちょっとのところまできてるんでしょうか? とりあえずもうちょっと修行します。 また、報告させていただきます。
>SEEKするか? ( ´ ・∀・`) へー
>196 追記モードだとSEEKでも前に戻れなかったね。 スマソ。 >195 とりあえず書いてみろよ。 ローカルでテストする分には誰も文句言わないから。
198 :
超初心者 :02/01/16 12:10 ID:zfCnc17S
Grepについて教えてください open IN, "highschool.csv"; while ($line = <IN>){ if ($line eq '') { print "(空行)<hr>\n"; next;} @splited = split (/\n/, $line); $test = @splited; @test = grep (/東京/, @splited); print "@test<hr>\n"; } close IN; とhighschool.csvを読んで「東京」というキーワードでGrepかけ、検索結果を<HR>つきで表示させたいのですが マッチしなかったところにも<HR>がついちゃいます。どのように回避するのかお教えください、
@splited = split (/\n/, $line); これが何やってるかが分からないから その後も何やってるかが分からない @splited に何を入れたいんだろう・・・
open (IN, "highschool.csv"); while (<IN>) { if ($_ eq "") { print "空行<hr>"; } elsif (index($_, "東京") >= 0) { print $_, "<hr>"; } } close (IN);
201 :
超初心者 :02/01/16 12:38 ID:zfCnc17S
>>199 一応読んだcsvを改行コードで区切って@に入れてるんですが。間違ってますか?
それと198で訂正がありましたすみません
open IN, "highschool.csv";
while ($line = <IN>){
if ($line eq '') { print "(空行)<hr>\n"; next;}
@splitted = split (/\n/, $line);
@test = grep (/東京/, @splitted);
print "@test<hr>\n";
}
close IN;
>201 一行ずつ読み込んで、改行マークでsplitしたって、全文が$test[0]に入るだけでしょ? csvファイルの区切り文字って\nでしたっけ?
203 :
超初心者 :02/01/16 12:52 ID:zfCnc17S
>>202 いえこの時点でカンマで区切る必要はなく、改行で区切る必要があったんです。
>while ($line = <IN>){ これはなにをしてる所? 俺は「ファイルから1行ずつ呼び出す」ものだと思ってるんだが。 つまり\nが二つ以上ある可能性はないのだけれどね。
open IN, "highschool.csv"; while ($line = <IN>){ $c++; print qq($c行目 $line\n); @splitted = split (/\n/, $line); foreach $i(0 .. $#splitted){ print qq($c行目$i個目の要素 $splitted[$i]\n); } } close IN; とりあえずこれを実行してみて何が起きているか考えてみてくださいな。
つか200で良いべさ。
207 :
超初心者 :02/01/16 13:15 ID:zfCnc17S
皆様。ご指導ありがとうございました。
>>200 さんのアドバイスでできました。
ホントお恥ずかしい・・・
208 :
:02/01/16 20:19 ID:???
@char=('0'..'9','a'..'z','A'..'Z'); という62文字を使って 1 (あるいは 0)から ZZZZZZZZ までの 62進数を順番に生成したいのですが、上手にやる方法はありますか?
2週間もやってるのか (笑
>208 生成した数値(文字列)をどうしたいのか 配列に入れると218340105584895個要素が居るがそれでも良いのか つーか41で分からんの?
212 :
名無しさん@お腹いっぱい。 :02/01/16 22:55 ID:iUy26tny
リンクを張られた文字の隣にクリックされた回数を表示するにはどうすればいんですか?
> 208 簡単過ぎ @char= ('0'..'9','a'..'z','A'..'Z'); for $char ( @char ){ print &xxx($char),"\n"; } sub xxx{ my( $ret, $flg ); for ( reverse split(//, $_[$[]) ){ unless ( $flg ){ if ( $_ eq 'Z' ){ $_= '0'; } else { if ( $_ eq '9' ){ $_= 'a'; } elsif ( $_ eq 'z' ){ $_= 'A'; } else { $_++ ; } $flg= 1; } } $ret= $_ . $ret; } $flg ? $ret : "1$ret"; }
214 :
名無しさん@お腹いっぱい。 :02/01/17 02:41 ID:EnQVX8GI
$foo->{hoge}; と $foo->hoge; は、上がハッシュだとして、下のは何を表すんでしょうか?
>214 メソッド。
216 :
214 :02/01/17 02:55 ID:EnQVX8GI
ありがとうございます。これがメソッドか…
217 :
名無しさん@お腹いっぱい。 :02/01/18 02:21 ID:/Sq0HWtq
えと、Perlのスクリプトの速度比較、つまりベンチマークをしたいのですが、なにか方法はないでしょうか?
219 :
名無しさん@お腹いっぱい。 :02/01/18 12:15 ID:/Sq0HWtq
>>218 さんありがとうございます。
試しに「for」と「while」のベンチマークをしてみたところ
やや「while」の方が効率がいいようですね。<読み込むスクリプトでは
まだ簡単なスクリプトでしか試してないので、分かりませんが。
220 :
名無しさん@お腹いっぱい。 :02/01/18 13:09 ID:mZLIoXNk
perlでこの行を入れてアップすると500エラーになるんですよ。 my $query = $ENV{'QUERY_STRING'}; Win用のアパッチでテストした時は良かったんです。 理由を教えていただけませんか
Perlが腐ってるから myを外そう
222 :
220 :02/01/18 13:22 ID:mZLIoXNk
ありがとうございます。即効解決しました。 Perlが腐ってるんですね。 感謝
>>221 解説希望。うちだとエラー起きないから、何処が腐ってるのかわかんない・・・
>>223 Perlが5より古くてlocalしかないとか?
俺のプロバのPerlが4なんだけど、myを入れるとエラーになるよ。 ということで>224に同意。
226 :
223 :02/01/18 17:21 ID:???
腐ってるって、そういう意味か・・・・・・
ぷ
228 :
名無しさん@お腹いっぱい。 :02/01/18 19:10 ID:6q/Kp0dN
今、perlの勉強していて、SSIを使ってアクセスカウンターを作りました。 それで、できたplファイルとshtmlを同じ階層に入れて、 shtmlをブラウザ(IE6.0)で開いて確認しようと思ったんですが、 開けないんです。どーしたらいいんでしょーか。 スクリプトは間違ってないと思うんですが。。。
229 :
◆efPZis9A :02/01/18 19:29 ID:y3hRDyTH
パーミッションはどうよ?
230 :
228 :02/01/18 19:34 ID:6q/Kp0dN
パーミッションはどうなってるか分かりません。 Apache起動して、ローカルでテストしてます。 ブラウザの右下にある青いバーが 増えていってるだけで画面は何も変わりません。
231 :
名無しさん@お腹いっぱい。 :02/01/18 20:11 ID:TBZ1H2T9
正規表現で「?」を検索したいんですが、「\?」だと上手く動作しません。 別の方法があるのでしょうか。
>230 アクセスカウンターが無限ループしてるとかじゃないの? >>231 \?で大丈夫のはずだよ。 念の為にローカルで試してもみたけど、普通に出来た。 その前後の文に問題があるんじゃないのかな?
>232 無限ループは無いと思います。サンプルファイルでもやってみました。 アドレスに、 127.0.0.1/*.shtmlとやってますが、白いまんま。 shtmlをhtmlにかえると表示はされるのですが、スクリプトは動かないです。 shtmlのアイコンは、IEのアイコンにならないの?
>232 そのカウンタを直接呼び出したら? てゆーか、ApacheのSSIの設定が通ってないとかは? アイコン変える方法は、ファイルの関連付けでしょう。
235 :
232 :02/01/18 21:18 ID:???
できました。 原因は、本に誤りがあったようです。ホームページで確認しました。 <!--#exec cmd="*.pl"--> を <!--#exec cgi="*.cgi"--> に変えろということでした。変えたところ、上手くいきました。 どうもありがとうございました。
236 :
名無しさん@お腹いっぱい。 :02/01/18 23:49 ID:vKcOvEew
カレンダーを作ろうとしています。 例えば2002年1月1日の曜日を知りたい場合、以下の式で分かるのですが、なぜこ れだけで分かるのでしょう? ($year + ($year-1)/4 - ($year-1)/100 + ($year-1)/400) % 7 上の式で出た余りを対応させれば2002年の最初の日の曜日が出ますが、これだけ でなぜそうなるのか全く分かりません。 また、 $i = ($year + ($year-1)/4 - ($year-1)/100 + ($year-1)/400); とした上で、 2002年4月1日の曜日を知りたい場合はその前の月(1月から3月まで)の日の合計 (31+28+31)を$iに足して7で割り余りを出すと出て来ます。 ($i+(31+28+31)) % 7 でもこの仕組みが良く分かりません。そもそもなぜ年だけで、任意の年の最初の 日の曜日が分かるのか、また、それをもとにしてどうして任意の年の任意の月の 最初の曜日まで分かるのか全く分かりません。 どなたか説明をお願いできますか。
238 :
名無しさん@お腹いっぱい。 :02/01/19 01:59 ID:tDZ3djB8
すいません・・・超初心者なんですが、よろしくおねがいします! win98に、間違ってwinNTのPerlをインストールしてしまったんですが、 アンインストールはどうすればいいのでしょうか??? C:を「Perl」とか「NT」で探したら、Temporaryフォルダにしか ないみたいなんで大丈夫かな?と思ったんですが、 インストーラーをもう一回起動させたら、 『指定されたサービスはすでに存在します』 ってエラーメッセージが!!!! 『アプリケーションの追加と削除』には、何もできてません。 どなたかお助けーーーー!
> 238 C:がダメならD:があるさ
240 :
Tupple3d :02/01/19 05:30 ID:tSYJ2BTR
すんまそん。Web制作板から来ました。 $a = 1; $a = $a++; Perlで$aの値はどうなりますか?
> 240 「すんまそん」って、出だしから寒すぎて手がかじかんでうまく答えがかけないよー。 どうしよー。
242 :
240 :02/01/19 06:28 ID:???
分かったー!
Perl : 1
Java : 1
C(gccだっと思う) : 2
JavaScript : 1
>>241 お前もなかなか
$a = 1; $a = $a++; # $aは 1 $a = ++$a; # $aは 2
244 :
名無しさん@お腹いっぱい。 :02/01/19 07:06 ID:tDZ3djB8
上書きで無事アンインストールできたよーーーー^^
>244 おめでとう
246 :
名無しさん@お腹いっぱい。 :02/01/19 15:46 ID:b2nTXpDv
Flash5とcgiの絡みの勉強してるのですが、 FlashからデータをPOSTで送信しようとすると、 データが渡ってないようです。 GETだとちゃんとわたってます。 cgiはこんな感じです。(一部ですが) #フォームデータの取得 if($ENV{'REQUEST_METHOD'} eq 'POST'){ read(STDIN,$query,$ENV{'CONTENT_LENGTH'}); } else{ $query=$ENV{'QUERY_STRING'}; }
247 :
初心者 :02/01/20 06:05 ID:+Bzlb+s3
Perlで書かれたCGIスクリプトを自分で読んで解析しています サブルーチンの定義のところで sub FormThList($;$) { 処理・・・ } という部分をいくつも見かけます 引数にある" $;$ " という部分は何をあらわしているのでしょうか? 自分で書籍やWebを調べてみたりしたのですが、引数なのか、リフ ァレンスなのか、それとも他のものなのか、さっぱりわかりませんでした。 どなたかお分かりの方ご教授ください。宜しくお願いいたします。
248 :
名無しさん@お腹いっぱい。 :02/01/20 15:18 ID:GAoGOGYW
あげ
249 :
:02/01/20 17:22 ID:xUMdAd4X
$_は、あれ、をあらわします。 ほら、あれもってきて。って、よく、彼女とかにいってるでしょ。 そのあれ。だよ。
>>247 引数の形式を指定してる。
$はスカラー。;以降は省略可。 ほかにもいろいろ指定できる。
詳しくはperldoc perlsubか,プログラミングPerl改訂版133Pを参照のこと。
251 :
名無し :02/01/20 21:19 ID:Nggbj65w
勉強ついでに指定ディレクトリのファイル全文検索作ってみたんですけど、キーワードに日本語入れるとうまく動かないんですがなぜでしょう? $dir = ''; # 指定ディレクトリ $file = '.html'; # 検索対象ファイルの拡張子 $key = ''; # キーワード opendir(DIR,$dir); @files = readdir(DIR); closedir(DIR); foreach (@files){ if(/$file$/){ open(FILE,"$dir/$_"); @data = <FILE>; close(FILE); foreach (@data){ $seach = $seach . $_; } if($seach =~ /$key/i){ push(@list,$_); } } } foreach (@list){ print; print "\n"; }
>251 URLデコードをしてないとか。 「ー」が含まれてるとか。 余談だけど無駄が多いからもうちょっとシェイプアップした方がいい。 grep使うとか。
253 :
名無しさん@お腹いっぱい。 :02/01/20 23:36 ID:9LP6jm+w
>>251 EUCの場合
$EUC_JP = '(?:[\x00-\x7F]|[\xA1-\xFE][\xA1-\xFE]|\x8E[\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE])';
if $seach =~ /^$EUC_JP*$key/i {
...
perlメモだかに、詳しく載ってた気がする。
> 250 それにしてもサブルーチンに引数の形式を指定するメリットがわかんないんだけど、 どういうことYO! 単に引数形式を明確にするだけのこと? うーん!こんやも眠れない。
>>254 眠れないんだったらperlsub読みなよ。
どういうときに使うのか書いてある。
仮引き数書けない方がずっと異常です 逝っちゃってますねもう
> 256 なるほど、漏れが異常なのか。チョットだけ安心しました。 255さんの提案でperlsub読んでだいたいはわかりました。 それにしても今までラクダ本しか読んでなっかったからバージョンアップに伴う追加・更新部分は 未知な部分が多いネー。
Win98+ActivePerlで勉強しようと思うのですが、 日本語部分は(メッセージなど)EUCで書くのが正解と聞きました。 ところが、DOSプロンプトだとEUCは文字化けします。 Shift-JISで書けば、DOS上では問題ないですが・・・。 どうしたらよいですか? print "日本語いーゆーしーだ!"; とかでやると ニ・ワク・、。シ、譯シ、キ。シ、タ。ェ になります。
259 :
名無しさん@お腹いっぱい。 :02/01/21 09:52 ID:yXZYknLA
>258 S-JISで全然問題ない。
260 :
名無しさん@お腹いっぱい。 :02/01/21 12:43 ID:O1LRho5n
フォームメールのCGIを作ってみてるんですが、半角スペースが入るとスペース 以降のデータが受取れません。 流れとしては、HTMLフォームから入力して送信ボタン→確認画面で送信ボタン→メール送信 というもので、確認画面ではスペースはちゃんと入ってて、例えば「山田 まさし」 と入るのですが、その確認画面から「送信」ボタンを押して再度同じCGIを呼びだして データを受取ると「山田」で切れてしまうです。 $value =~ tr/+/ /;この行で送られてきたスペースコード(+)をスペースに変えて いるのですが、再送信するときには変換されたスペースをまた(+)のようなコードに 戻してあげないとダメなんでしょうか? 試しに普通の+に戻してみたらそのまま+が出てきてしまいました。。 わかりづらくてゴメナサイ、アドバイス貰えればありがたいです。
261 :
aaa :02/01/21 13:36 ID:7eJzqhDP
Perl関連のほしい本があるんですが、その本が5.6対応では ありませんでした。(elements programming with Perlです。) 5.5?やってから5.6本やってもおそくないですか? あと、支障とかないですか?
262 :
茶文字 ◆xELvisFU :02/01/21 15:57 ID:0ovwchs4
テキストファイルを読み込んで、1行目を<title>と<h1>に、2行目を<h2>にするようにしたいのです。 open FILE,"xxx.dat"; @page = split(/\n/,<FILE>); print <<"EOH"; <html> <head> <title>$page[0]</title> </head> <body> <h1>$page[0]</h1> <h2>$page[1]</h2> EOH $count = 0; foreach $i(@page){ if ($count > 1){ print $page[$i]; } } print "</body></html>"; close FILE; 2行目を$page[1]として<h2>に、3行目以降をforeachで順に出力するつもりで 以上のように書いたのですが、$page[2]以降を取得できないようです。 どこで勘違いしているのでしょうか?
>262 >foreach $i(@page){ ここに問題がある。 この場合、$iには何が入るのかな? 俺は数字じゃないように思えるんだが。 >foreach $i(1 .. $#page){ との違いはわかるかな?
>foreach $i(2 .. $#page){ こっちが正しいな。 修正する前に書き込んじまった、スマソ。 あともう一つ質問。 $countはずっと0のままでいいのかな? 数字が全然増えてないから、if文の中に入れないようにも見えるぞ。
265 :
251 :02/01/21 16:14 ID:???
>>252 URLをデコードするってどういうことでしょうか?
よくわからないのですが。
266 :
251 :02/01/21 16:17 ID:???
検索したらすぐ出てきました。迷惑かけてすいません。 逝ってきます。
>>264 をっとスマソ
うまくいかないので別の方法で無理やり辻褄あわせてて、もとのスクリプトと
違うこと書いちゃいました。
$count++をforeachの最後に入れて、print $page[$count];にしてたはず・・・
うがー なんでこんなところにひっかかってんだ私;
268 :
名無しさん@お腹いっぱい。 :02/01/21 16:25 ID:yxhIL91Y
>267 俺ならこんな感じ。チェックしてない。 open (FILE,"xxx.dat"); @page = (<FILE>); close (FILE); $page[0] =~ s/\n//g; $page[1] =~ s/\n//g; print <<"EOH"; Content-type: text/html; charset=Shift_JIS <html> <head> <title>$page[0]</title> </head> <body> <h1>$page[0]</h1> <h2>$page[1]</h2> EOH $count = @page; for($i = 2;$i <= $count; ++$i) { $$page[$i] =~ s/\n/<BR>\n/g; print $page[$i]; } print "</body></html>";
269 :
名無しさん@お腹いっぱい。 :02/01/21 16:26 ID:yxhIL91Y
>268 ミス >$$page[$i] =~ s/\n/<BR>\n/g; $一個おおいっすスマソ
>>260 print "Content-Type: text/plain\n\n";
print $ENV{QUERY_STRING}
とかやってデータを確認したら?
確認後のエンコード周りがあやしい。
>>261 5.6触ったこと無いが,
Perl5.6は仕様を足しただけみたいだから
Perl5やってからでも特に支障無いと思う。
>>268 あ 何となくどこで勘違いしているのかわかったかも。
さっそく試して報告するです。
ありがとうございました。
272 :
:02/01/21 16:30 ID:VXT1KPc/
shift @page; foreach (@page){ print $_; } じゃいけんの? $countってどこでインクリメントするの?
273 :
:02/01/21 16:36 ID:rALZtRCf
print <<"EOH"; Content-type: text/html; charset=Shift_JIS <html> <head> <title>$page[0]</title> </head> <body> <h1>shift(@page)</h1> <h2>shift(@page)</h2> EOH foreach (@page){ print $_; } 具体的にはこうか?
274 :
:02/01/21 16:38 ID:pTKsFCnA
あ、全然だめだ。スマソ。逝ってきます。
275 :
傍観者 :02/01/21 16:40 ID:bIKApu3O
268完璧だと思うんだけど、文句いう奴いるんだよな
276 :
ほげ :02/01/21 16:41 ID:bIKApu3O
268でいいと思われ
できました。
268は完璧でした。
>>272 $countがインクリメントしていないのは私の転記ミスです。
>>273 おしい。
ヒアドキュメントの中では @{[shift @hoge]} のように使うと吉。
281 :
名無しさん@お腹いっぱい。 :02/01/21 17:00 ID:yxhIL91Y
あ!、もう出来たんだね。 でも、せっかく作ってきたので書いちゃう。 どうしてもforeach使うんだったらこんな感じ。 やっぱしチェックしてない。 open (FILE,"xxx.dat"); @page = (<FILE>); close (FILE); $page[0] =~ s/\n//g; $page[1] =~ s/\n//g; print <<"EOH"; Content-type: text/html; charset=Shift_JIS <html> <head> <title>$page[0]</title> </head> <body> <h1>$page[0]</h1> <h2>$page[1]</h2> EOH $i = 0; foreach (@page){ if ($i ne "0" && $i ne "1"){ $_ =~ s/\n/<BR>\n/g; print $_; } ++$i; } print "</body></html>";
282 :
名無しさん@お腹いっぱい。 :02/01/21 17:01 ID:yxhIL91Y
>278 お、おれ? おれかよ!(笑)
283 :
:02/01/21 17:01 ID:???
open (FILE,"xxx.dat"); @page = (<FILE>); close (FILE); $title = shift(@page); $h2 = shift(@page); print <<"EOH"; Content-type: text/html; charset=Shift_JIS <html> <head> <title>$title</title> </head> <body> <h1>$title</h1> <h2>$h2</h2> @page; </body></html> EOH
みなさんありがとう。 それぞれのサンプルもきちんと見て勉強させてもらうです。 WebProg板サイコー(・∀・)イイ!
改行をつけたい場合は2回目のshiftのあとに @page = map {$_ . <BR>} @page; だね。
287 :
:02/01/21 17:31 ID:???
@page = map {$_ . "<BR>"} @page; やろがぁ! @page;のセミコロンはいらん。オケ?
しょうもない質問だと途端に元気になるな このスレの回答者は (笑)
290 :
aaa :02/01/21 17:42 ID:7eJzqhDP
>270 レスどもです。
291 :
名無しさん@お腹いっぱい。 :02/01/21 19:00 ID:6X0/37gM
GUIで次のようなプログラムを書け、という問題が学校でだされました。 ちんぷんかんぷんです。しかもスレ違いの予感もしてます。ごめんなさい。 プログラムはグレー色のウィンドウで表すこと。 しかもユーザーに赤、青、緑から好きな色を選ばせられるようにすること。 なおかつ1度ではなく何度もユーザーにその色を何度も変える事ができるようにすること。 誰か教えてください。
プラットフォームを書くこと。
293 :
名無しさん@お腹いっぱい。 :02/01/21 19:12 ID:6X0/37gM
ほんとごめんなさい プラットフォームとは何ですか・・・?
Windowsとか、Linux, BSD, HPとか。 それと、言語はPerlなの?
>>293 頑張れ!
君の開発環境を書くのだ。
しかし、宿題をスレに投げる という安直さがゴルァ!だ。
296 :
名無しさん@お腹いっぱい。 :02/01/21 19:27 ID:6X0/37gM
全て英語で書かれてて、なんだか注文をそのまま英語にしたみたいです Your name? Lucy Occupation/Job Title? Comedian Nice to meet you Lucy, Comedian! 名前を入れればそのままその名前が文章につかわれる ってなのを前回説明されました。 これはPerlなのでしょうか?
>>296 うーん・・・・・ 他になんかないの?
全部英語で書かれてて、一行目が「#!/usr/local/bin/perl」です、とか。
291と296の関係がよくわからん。 取りあえず、環境を書いてくれ。 UNIX系なのか、Windowsなのかぐらいは判別できるだろ?
299 :
名無しさん@お腹いっぱい。 :02/01/21 19:40 ID:6X0/37gM
書かれてないんです。ってか質問しか書いてないので・・・。 とりあえず次の授業にきっぱりと出来ませんでしたって胸はって言います。 一緒に考えて下さってありがとうございました。 ところで、授業のレジュメにAlgorithmも学ぼうって書いてあります。 このAlgorithmもなにかの言語なのでしょうか?
>>291 に関連して素朴な疑問。
PerlでGUIのプログラムなんて出来ないよね?
ただ、適切なスレに誘導するために情報聞き出してるんだよね?
まさかPerlで書けるから聞いてるんじゃないよね?
ビクビク…。
何のための言語バインディングだよ。素人か?
>>299 ていうか授業出てなかったろ…。
出てれば絶対こんな質問しないぞ…。
Perl, Ruby, Python, とか大抵ののスクリプト言語でGtk, Tk, Qt, Win32用のバインディングが用意されてるだろ。
304 :
名無しさん@お腹いっぱい。 :02/01/21 19:56 ID:6X0/37gM
はい、素人です やっぱりどうも難しいのでもっと初心者用のスレから出直してきます ありがとうございました。。。
>>304 300向けであって、あんたに言ってるんじゃないと思うぞ。
306 :
名無しさん@お腹いっぱい。 :02/01/21 20:01 ID:hWcQ0KB7
>296 どう見てもこれはCの課題だよな。
307 :
名無しさん@お腹いっぱい。 :02/01/21 20:02 ID:hWcQ0KB7
>291 VBかVCの課題だろ?
308 :
:02/01/21 20:07 ID:OlNKxLTk
309 :
300 :02/01/21 20:13 ID:???
>>301 はい。初心者です。
みんな当然のように答えてたから疑問に思ったです。
言語バインディング、検索逝ってきます。
ありがと。
310 :
301 :02/01/21 20:14 ID:???
>>311 何を聞きたいの?
もうちょっと分かりやすく書いてみて
313 :
300 :02/01/21 20:19 ID:???
ていうか、やっぱり釈然としないんだけど、 PerlでWindowsアプリケーションは作れないよね? なんつーか、 > プログラムはグレー色のウィンドウで表すこと。 とか。。 それと同様にX Window のアプリケーションも作れないよね? ってことはGUIのプログラムって作れないんでは? んー。どこの考え方が間違ってるんだろう。。 「GUI」を勘違いしてるのかな…。
>>311 あのさ、重箱の隅だけど、「コーディング」はコンパイル出来ないよ
(w とか言わずに一緒に勉強しようよ
>>313 Perlでは出来ないけど、TkとかGtk使えばperlの文法で出来るんだから
全然間違えて無いよ。
もし無くてもPerlが叩けるライブラリ書けば良いでしょ?
質問者と同レベルの人が居るのがおかしいね
317 :
名無しさん@お腹いっぱい。 :02/01/21 20:35 ID:hWcQ0KB7
>315 TkとかGtkを課題に出す情報処理系の宿題かこれ? というそもそも論に帰ってしまった私です。
318 :
300 :02/01/21 20:35 ID:???
>>314-315 なるほど。ありがとうございます。
>>316 初心者だけどなんか役に立つこと出てくるかなぁと思って
かちゅ〜しゃのお気に入りに入れて巡回してますが。。
311の意味が分からんのは俺だけかな・・・・
311はことばの用法を間違ってましたスマソ 聞き流してくだされ>all で、話は変わりますが。 Webサーバ上の特定のディレクトリにあるファイルをリストアップして、 ファイル一覧を表示するスクリプトを作りました。 せっかくだから各ファイルの更新日時を自動的に表示させたいのですが、 これはPerlでは無理なのでしょうか? .cgiでSSIを許可するのはなんか怖いし、JavaScriptは自分自身あまり ONにしないので、できたら避けたい今日この頃なんですが。
んー、自動的と言うのはどう言う意味だろう(CGI殆ど書かないので。。) 基本的にそのディレクトリに有るファイルが、CGIのみから更新されるなら SSIでincludeする(execは殺す)為のファイルを書き出すだけで良い。 もし、CGIが感知しない部分でダイナミックに更新されるなら 素直にCGIで表示するか、呼び出し元のHTMLを書き換えるしか無いんじゃ 無いかな
>>321 早レスさんくす。
実はファイルリスト表示も各ファイルの内容閲覧も同じスクリプトでまかなっています(リストされるファイルはすべてHTMLのbody部分です)。
例)
hoge.cgi
→引数がない場合はファイルリストを表示
hoge.cgi?page=020121
→ファイル名が020121のファイルをbody部に取り込んで表示
なので、更新日時を表示するときの拡張子が.cgiなわけです。
SSIを使うには、.cgiからSSIを使えるようにしなければならないわけで、
これは320に書いたように避けたいのです。
てことは、ファイルリスト表示は.shtmlで出力してやるのが無難っぽいですね。
短いスクリプトなので、頭の体操だと思って最初から組み直してみます。
ありがとうございました。
と書いてから気がついたのだけど、 組み直さなくてもHTML出力部分だけ付け足して、 そのあとリダイレクトすればいいのか?
>>322 > hoge.cgi?page=020121
Taint check をしっかりとやるようにね。
初めてご質問をさせていただきます。今、 $abcd = "AAAA"; open(CF, "./a.txt") || die "Can't open Header File $!"; while (<CF>){ chop; print; } close; と記述しました。 a.txtには $abcd と書きました。ですが、どうしても上記プログラムを実行したら $abcdと表示されるだけでAAAAと表示されません。どうにかして $abcdを変数としてファイルより読みだすことはできないでしょうか?
print eval($_); かな?
eval
328 :
325 :02/01/21 23:51 ID:???
>>326 >>327 ありがとうございます。早速やってみます。
evalは、shでしか使ったことありませんでした。
勉強します
>325=328 細かいことだけど、自分がたずねる質問に「ご」をつけるのは ちょっと変だと思うよ。
330 :
名無しさん@お腹いっぱい。 :02/01/22 10:12 ID:efarCwHc
すみません。お教えください 日記帳のように画像アップして1行コメントを入れるスクリプトを書いてるんですが うまくいきません。 どこかによいサンプルはないでしょうか?
332 :
名無しさん@お腹いっぱい。 :02/01/23 04:57 ID:sT5Qn28R
すみません。質問なんですが、 htmlファイル内の&を%44になおすプログラムを作っていて 以下のとおりやってはみたもののうまくいきません。 #!/usr/local/bib/perl while(<stdin>){ s/&;/%44;/; print; } どうしても置き換えてくれません。 教えてください。
>>332 Perlへのパス
stdinからデータが読み込まれているか
検索・置換する文字列
を確認してみてわ
334 :
332 :02/01/23 07:16 ID:sT5Qn28R
>333 遅れてすみません 333さんがおっしゃられるところは確認しました。 自分で気になっているところは test→test1みたいな普通の文字の置き換えはできるのですが &とか%がはいっているとまったく駄目なのです。 どうしたら解決できるかわからなくて。。。
335 :
名無しさん@お腹いっぱい。 :02/01/23 09:25 ID:fLlnsoLj
>>334 ほい。
#!/usr/local/bin/perl
while(<stdin>){
s/&/%44/g;
print;
}
336 :
名無しさん@お腹いっぱい。 :02/01/23 19:47 ID:SS/bYptO
メール件名をMIMEエンコードしようと思い、
CGIファイルと同ディレクトリに「mimew.pl」
http://www.cc.rim.or.jp/~ikuta/mime_pls/index.html を設置して、
CGI内のメールのヘッダ情報記述部分で
$mimew = './mimew.pl';
require $mimew;
$subject = "[カタログ請求]";
$subject2 = &mimeencode($subject);
open (SENDMAIL, "| $nkf | $sendmail -t -n") || die;
print SENDMAIL "To: $recieve\n";
print SENDMAIL "Bcc: $bcc\n";
print SENDMAIL "From: $mail\n";
print SENDMAIL "Reply-To: $mail\n";
print SENDMAIL "Subject: $subject2\n";
print SENDMAIL "Content-Type: text/plain; charset=\"iso-2022-jp\"\n";
print SENDMAIL "Content-Transfer-Encoding: 7bit\n\n";
上記のようにしたのですが、エンコードされません。
お助け。。。
>>336 $nkf = '/usr/local/bin/nkf';
$sendmail = '/usr/sbin/sendmail';
$mimew = '/フルパス書いてちょ〜/mimew.pl';
でどうよ。
338 :
ちょっとおしえて ごめんね :02/01/23 20:48 ID:FEde7HEx
339 :
名無しさん@お腹いっぱい。 :02/01/23 21:30 ID:Pj40bVNf
340 :
332 :02/01/23 21:37 ID:sT5Qn28R
333 335> 貴重なアドバイスありがとうございました。 解決しました。 あらためてありがとうございます。
341 :
名無しさん@お腹いっぱい。 :02/01/23 22:30 ID:RVBh2RNr
1:自分はこう言う事がしたい。 テキストカウンタを作っている。 CGI自体はhtmlでなくテキストだけを吐いて、 イメージカウンタと同じような感じに html内に挿入するようにしたい。 2:それでこんな風にやってみたが・・・ Content-typeをtext/htmlにしたままimgで貼ってみたけど 3:それだとこんなエラーが出て上手く行かなかった。 ペケが出るだけで無理だった。
342 :
名無しさん@お腹いっぱい。 :02/01/23 22:34 ID:6XVla5oi
フォームメールcgiに手をくわえてます。 htmlフォームから送信ボタンを押すとcgiを呼んで確認で内容を一覧表示させてます。 そのあとにブラウザの戻るボタンを押したとき、htmlフォームに戻りますが、それまで 入力していた内容が消えてしまいます。元のcgiではブラウザの戻るボタンで戻っても フォームに入力されていた内容は消えなかったんです。 この違いはどういった原因が考えられるでしょうか?
343 :
342 :02/01/23 22:44 ID:6XVla5oi
あれ?今度は戻るボタン押して戻ったらフォームに入力した値が出てた・・
CGIの影響じゃないのかな・・ この現象誰か知りませんか?
>>341 ペケが出るって事は画像へのリンクがうまくいってないんじゃないかな?
344 :
341 :02/01/23 22:58 ID:RVBh2RNr
>>343 いや、画像でなくテキストを挿入したいんですが
コンテントタイプの吐きかたとhtml側の呼び出し方がわからなくて
とりあえずimgで貼ってみただけです。。
CGIが画像を吐いてないので当たり前といえば当たり前なんですが。。
>フォーム
戻るボタンは単にブラウザが自分の履歴を表示しているんだから
この場合呼び出されてないCGIは関係ないと思います。
というか、どんな風に手を加えたらおかしくなったかを書くと吉と思われ。
346 :
336 :02/01/23 23:07 ID:7DXRWN8l
>>337 ありがとうございます。
今外出中なんで明日にでも試してみます。
347 :
341 :02/01/23 23:16 ID:RVBh2RNr
>>345 有り難うございます。
過去にフレームで画面をちっちゃく切り取って
そこにhtmlで吐いたカウントを放り込んでいたんですが、
それをやめたくていろいろ試しているので
SSIの方を調べてみようと思います。
348 :
名無しさん@お腹いっぱい。 :02/01/24 00:12 ID:gcEosdJo
配列の中にある数字を指定した部分だけ検索したいんですが、 for ($no = 0; $no <9; ++$no){ @suuji = (1,2,3,4,5,6,7,8,9,10); @kekka = grep /$no/, @suuji; print "@kekka\n"; } を実行すると、 10 1 10 2 3 4 5 6 7 8 と、10まで出てきてしまうんですが、 1から9までのみ出すようにするにはどうすればいいんでしょうか?
for ($no = 0; $no <9; ++$no){ @suuji = (1,2,3,4,5,6,7,8,9,10); @kekka = grep /^$no$/, @suuji; print "@kekka\n"; } 誰でも思いつく一番簡単な変更はこれだわな。
my @ary = qw(1 3 4 5 8 9 11 14 19); my $max = 10; my $min = 3; my @result = grep{$_ > $min && $_ < $max}@ary; print @result;
print join "\n", grep { /^\d$/ } @hoge
>>349-351 ありがとうございました。なんとか出来そうです。
正規表現だけで出来たんですね…。もっと本をよく読みます。
353 :
352 :02/01/24 05:00 ID:???
出来ない… 1 あいうえお 2 かきくけこ というようなものが、配列に100個ほど入っているとして、 右の番号を指定して、その部分だけ左のものと一緒に取り出したいんですが…。 上のやりかただと、どうやっても出来なくて…。 このままじゃ気になって寝られない…でも寝ないと死ぬので寝よう…
354 :
名無しさん@お腹いっぱい。 :02/01/24 08:11 ID:nUVwgo4z
>353 デリミタを使う。 1<>あいうえお 2<>かきくけこ ・ ・ ・ とする。 これを配列に読み込んで、、たとえば、@linesに読み込んだとしたら、 foreach (@lines) { ($number,$text) = split(/<>/,$_); if ($number eq "目的の番号") { print "番号は$numです。内容は$textです\n"; } } こんなかんじになるわけ。
FAQだと思うのですが LinuxにPerlがインストールされているかどうかを 確認するには簡単にはどうするのでしょうか。 そのperlのVersionも表示させれると うれしいのです。 よろしくサンクスコ
356 :
名無しさん@お腹いっぱい。 :02/01/24 09:12 ID:nUVwgo4z
>355 コマンドラインから、 perl -V
ありがとうございます。m(._.)m ペコッ
358 :
336 :02/01/24 10:49 ID:ENGsaylW
>open (SENDMAIL, "| $nkf | $sendmail -t -n") || die; 上記の部分を以下の様にすると、無事エンコード処理されました。 open (SENDMAIL, "| $sendmail -t -n") || die; #$nkfを外しました 結果的に解決はしたのですが、何が悪かったのかが分かっていません。 そもそも上記の箇所はいつもメール作成部分の定型的に使用していたの で、nkfがどんな役割を果たしているのか、なぜnkfが絡むとエンコードさ れなかったのかがわかっていません。 (ちなみにnkfは冒頭で $nkf = "/usr/bin/nkf -j"; と定義しています) 何が悪かったのでしょうか?
359 :
名無しさん@お腹いっぱい。 :02/01/24 11:11 ID:LyCCkAYD
@EXPORT, @INC は何を意味して名前を付けたのかわかるのですが @ISAって何の略なのでしょう?
@EXPORTはそのまんま。 @INCはIncludeかねぇ。 @ISAはISAバスしか思いつかない・・・。
is a と読めば良いでしょう
困っているわけではないのですが、ちょっと質問です。 IPの桁を 「0.0.0.0」→「 0. 0. 0. 0」 こんな風にそろえるプログラムを作ってみたんです。 で、この桁をそろえる部分でどれくらいのロスがあるのかなと思って、2種類のプログラムを組んで試してみました。 プログラム「い」 ($ipa , $ipb , $ipc , $ipd) = split(/\./, $remoteadd); if ($ipa < 10) { $ipa = " $ipa"; } elsif ($ipa < 100) { $ipa = " $ipa"; } if ($ipb < 10) { $ipb = " $ipb"; } elsif ($ipb < 100) { $ipb = " $ipb"; } if ($ipc < 10) { $ipc = " $ipc"; } elsif ($ipc < 100) { $ipc = " $ipc"; } if ($ipd < 10) { $ipd = " $ipd"; } elsif ($ipd < 100) { $ipd = " $ipd"; } $ipadd = "$ipa\.$ipb\.$ipc\.$ipd"; プログラム「ろ」 @ip = split /\./, $remoteadd; if ($ip[0] < 10) { $ip[0] = " $ip[0]"; } elsif ($ip[0] < 100) { $ip[0] = " $ip[0]"; } if ($ip[1] < 10) { $ip[1] = " $ip[1]"; } elsif ($ip[1] < 100) { $ip[1] = " $ip[1]"; } if ($ip[2] < 10) { $ip[2] = " $ip[2]"; } elsif ($ip[2] < 100) { $ip[2] = " $ip[2]"; } if ($ip[3] < 10) { $ip[3] = " $ip[3]"; } elsif ($ip[3] < 100) { $ip[3] = " $ip[3]"; } $ipadd = "$ip[0]\.$ip[1]\.$ip[2]\.$ip[3]"; この二つを、 while (--$kurikaesi){ } の中に入れて1000000回(爆)繰り返してベンチマークした結果、プログラム「ろ」の方が約1秒も速いという結果を得ました。 速いのはいいんです。それはいいんですが、なぜ配列を使っただけで処理速度が上がったのかがわかりません。 これはなぜなのでしょう?
>>364 sprintfとかじゃだめなんでしょうか?
366 :
配列 :02/01/24 15:36 ID:RS3bsnfp
しつもーん (1)配列をある文字列で検索して、その配列の番号を調べる。 (2)配列の任意の位置に要素を代入(追加)する (3)配列をCSVデータ(カンマ割りテキスト)に変換する。 上の事をforeachなんかを使って配列の要素をグルグル一個一個 調べて実現する事は出来るんだけど・・・もっと効率的なやり 方があるような気がしてならない・・・。 (2)はつまり @ary[0]="A";@ary[1]="C";@ary[2]="D";を、いかにして @ary[0]="A";@ary[1]="B";@ary[2]="C";@ary[3]="D"; にするかって事なんだけど・・・簡単?
>366 @ary = (@ary[0 .. 1] , $newdata , @ary[2 .. $#ary]); とかいう方法は?
>>366 とりあえず(2)だけ
splice @hoge, 1, 0, 'B';
続けて(3) こういうことかな? join ',', @hoge;
370 :
名無しさん@お腹いっぱい。 :02/01/24 15:53 ID:nUVwgo4z
(1)は普通、ぐるぐる回すしかない。
371 :
配列 :02/01/24 15:53 ID:RS3bsnfp
>>367 なるほどぉ、そういう風にするのかぁ。
できました、できました。ありがとうございます。
>>368 あっ、こんなやり方も・・・これから試してみます。
ありがとうございます。
>>369 そんなに簡単に・・・試してみます。
372 :
配列 :02/01/24 15:59 ID:RS3bsnfp
すごい!!
>>369 >>368 できました。なんて簡単なんだ!
(1)はやはりグログロ回すしかないんですね。
(1)はこんなのいかが? my @hoge = qw(hoge fuga foo bar); my $i; print join " ", map { $_->[0] } grep { $_->[1] =~ /f/ } map { [ $i++, $_ ] } @hoge; #=> 1 2
でもBenchmarkとったらforで回した方が早いな。 インデント崩れるかな。 use Benchmark; timethese(10000, { A => sub { my @hoge = qw(hoge fuga foo bar); my $i; my @res = map { $_->[0] } grep { $_->[1] =~ /f/ } map { [ $i++, $_ ] } @hoge; }, B => sub { my @hoge = qw(hoge fuga foo bar); my @res; for (my $i = 0; $i <= $#hoge; $i++) { $hoge[$i] =~ /f/ or next; push @res, $i; } }, });
375 :
名無しさん@お腹いっぱい。 :02/01/24 16:12 ID:nUVwgo4z
foreachで回すのが一番早そうな予感・・・・・・・
376 :
配列 :02/01/24 16:13 ID:RS3bsnfp
>>373 スゴ!ここまでになると僕には記号の羅列にしか見えませんが
出来ました。
う=ん。perlは深すぎる。
>う=ん めっちゃなごんだ
378 :
352 :02/01/25 00:02 ID:???
>>354 えと、これを実行したところ、
($number,$text) = split(/<>/,$_);
の行でエラーが出ました…。
何か変えないといけないんでしょうか…。
>378 まさか全角スペースそのままでコピペとかしてないよな?
380 :
名無しさん@お腹いっぱい。 :02/01/25 00:17 ID:PBLVziZQ
>379 それだな・・・・ >378 インデント使えないから全角スペースはいってます。 半角スペースに直して下さい。
381 :
352 :02/01/25 01:47 ID:???
あ…全角になってました…。 半角にしてやったらうまく動きました。 今度こそ…。 ありがとうございました。
382 :
配列 :02/01/25 12:07 ID:IeC8qMZZ
...と、和ませついでに聞いてみる。 僕のような初心者がもう一歩踏み出す為の本ってなんかお 勧めありますか? あと、思うのは英語がわかれば、プログラム言語の収得の 時間は半分くらいに短縮できるんじゃないだろうか?文献 もイパーイあるし、そもそも構文が英語だし、その点日本人っ てかなり不利な様な・・。 関係ないけど今、Apacheの設定してんだけど、もう、この コメントがスラスラ読めたらどんなに楽だろう・・・と・・・ ふ=。
384 :
名無しさん@お腹いっぱい。 :02/01/25 13:40 ID:r3/rqZp3
↑ 絶対に、わかりずらいぞ。 日本語記述プログラム
385 :
名無しさん@お腹いっぱい。 :02/01/25 14:55 ID:eF69uSNx
open(FILE, "<$FilePath"); while (read FILE, $_, 1024) { unless ($Count % $DivSize) { $FCount = sprintf("%04d", ++$FCount); open(OUT, ">${FileName}_$FCount$AddExt"); binmode(OUT); } print OUT $_; $Count++; } これは $DivSize に 500 とか指定して指定KB単位で ファイルを分割する(昔DOSで使っていたkitcutみたいな)のですが、 Active Perl for Linuxでは期待通りに動くのに Active Perl for Win32(Win98SE)では失敗します。 直接の原因は読み込むファイルに"0x1A"があると そこで処理が終了してしまうようですが、 なぜそうなるのかは分かりません。 Windows系OSでも正常に動かすにはどうすればよいのでしょうか?
386 :
名無しさん@お腹いっぱい。 :02/01/25 15:08 ID:79BxtF4T
ハッシュの値に配列を登録することはできるのでしょうか? my @array; my @some_array = (1, 2, 3); %hash = {'key' => @array}; for (@some_array){ push $hash{key} $_; } print $hash{key}[0]; #出力は「1」 となるようにしたいのですが、「push $hash{key} $_;」ここで compilation errorが出てしまいます。 希望通りの結果を出すにはどのようにすればよいのでしょう?
my @some_array = (1, 2, 3); my %hash = ("key" => \@some_array); print $hash{"key"}[0];
388 :
■■■■■ :02/01/25 17:52 ID:xsDEBfwk
#!/usr/local/bin/perl -w ↑の-wはどういう意味なのでしょうか?
>>388 検索しろやボケ(w ←の"w"と同じ。
ちなみに #!/usr/local/bin/perl -プ にすると警告メッセージの文体がうざくなります
391 :
名無しさん@お腹いっぱい。 :02/01/25 18:03 ID:/7cgUOJj
>388 ワーニングのwだよ。
392 :
■■■■■ :02/01/25 18:07 ID:xsDEBfwk
どんなキーワードで検索するのですか? マジ質問なんですが。-wはキーワードにならないもので。
394 :
■■■■■ :02/01/25 18:08 ID:xsDEBfwk
なるほど、「スイッチ」ですか。ありがとうございます。
正直 man perl / perldoc perl ぐらい見ろやボケ と言いたい。タダの教えて厨じゃん。
マターソ光線 しびび(以下略
397 :
名無しさん@お腹いっぱい。 :02/01/25 18:28 ID:S6WZ3j03
ユーザーに一時的にユニークなIDを付加したいのですが、 何か定石になっている方法等はないでしょうか。
>397 $$
400
>>385 これは、0x1A(=^Z)がDOSでEOFだったという歴史的経緯によるもの。
純粋に入力をバイナリとして扱うには、FILEについても
openの直後にbinmode(FILE)とすることで解決するはず。
402 :
名無しさん@お腹いっぱい。 :02/01/25 21:24 ID:Y6CV5/iR
>>399 やはり$$が定石なのですね。
ありがとうございました。
403 :
名無しさん@お腹いっぱい。 :02/01/25 21:56 ID:79BxtF4T
自作のPerlモジュールを@INCのパスに 置かずに、使用する方法はあるのでしょうか?
404 :
名無しさん@お腹いっぱい。 :02/01/25 22:02 ID:/7cgUOJj
>403 use lib
>403 ていうか、モジュール自作できるのに、そのモジュールの使い方がわからないなんて事あり得るのだろうか?
406 :
403 :02/01/25 22:36 ID:79BxtF4T
ゴメンよ、お馬鹿で。でもあり得るんだよ、実際ココにいるから。 で、 use lib '/path/to/my_module_dir'; を加えたら、とりあえず動いたんだけど、 use lib 'ディレクトリパス'; とすれば @INC にここで指定した'ディレクトリパス'が 加わったのと同様と考えていいのですか?
use lib "/path/to/dir"; print @INC; で分かるだろが。自分で調べろヤ。
マターソ光線 しびび(以下略
409 :
名無しさん@お腹いっぱい。 :02/01/25 23:10 ID:XMaI9lFd
>>401 ありがとうございます。
入力側もバイナリモードにすることにより期待通りに動きました。
出力に関しては以前引っかかったことがあったので
気にしていたのですが入力も、とは・・・やられました。
>マターソ光線 しびび(以下略 これって教えて君を増やす為なの?
411 :
名無しさん@お腹いっぱい。 :02/01/26 00:51 ID:OfzJhL7v
SSHでログインして「use benchmark;」を使ってベンチマークをするのは出来たんですが これって、ブラウザからは出来ないんですか?500エラーになるんですが…。 結果の数値を表示させるにはどうしたら良いでしょう?
412 :
名無しさん@お腹いっぱい。 :02/01/26 02:20 ID:WUMSdJPW
jisコードの数字(ISO2022-JPの文字列ではなくて、文字をあらわす 文字コード、例えば「あ(2422)」の2422という数字) をEUCの文字に変換して出力するにはどうしたらよいのでしょうか? print &convert(2422); (表示) あ 見たいな感じにしたいんですが・・・。
> 411 use benchmark; ⇒ use Benchmark;
415 :
名無しさん@お腹いっぱい。 :02/01/26 18:44 ID:4vbo6FDe
質問なのですが Perlで、配列を一つのスクリプト内で何度も再利用することで、 その都度、別の名前の配列を複数作る場合に比べて メモリ消費は低減できるのでしょうか?
416 :
ループに関して :02/01/27 23:58 ID:y07CruPJ
formからpostで受け取ったデータを ハッシュにして…ってところ何ですけど。 require './cgi-lib.pl'; &ReadParse(*form); $A1="$form{'A1'}"; $B1="$form{'B1'}"; $A2="$form{'A2'}"; $B2="$form{'B2'}"; $A3="$form{'A3'}"; $B3="$form{'B3'}"; ・ ・ ・ $A50="$form{'A50'}"; $B50="$form{'B50'}"; っていう感じにしたいんです。 まあ「動く」ってだけなら気合いで書けば問題ないんですけど、 ループとか使ってきれいに書く方法を教えていただきたいのです。 どうもループは苦手でして。。。よろしくお願いします。
417 :
名無しさん@お腹いっぱい。 :02/01/28 00:45 ID:i9Ky8+Ox
>416 while (($key,$value) = each(%form)) { $$key = $value; } なんのためにこんな事をするんだろう?・・・・
418 :
うんこ :02/01/28 07:44 ID:???
>>414 情報ありがと。漏れの検索が甘かったです。すんません。
419 :
http://nara.cool.ne.jp/mituto :02/01/28 15:08 ID:Ye799Ifr
420 :
:02/01/28 15:19 ID:???
うんこ発見!!!
>420 いいようんこ見つけたくらいでいちいち騒がなくて。 小学生じゃあるまいし。
422 :
うんこ :02/01/28 16:35 ID:???
あーあ、みつかっちまった。(誰に?!) 厨房だからっていじめないでおくれよ。 頑張ってプログラミングしてます。
423 :
名無しさん@お腹いっぱい。 :02/01/29 00:28 ID:4QGFGOvy
以下のようなtest.plを作って実行すると config.txt did not return a true value at test.pl line 4. と言われてしまいます。しかも print "$board\n";以下が表示されません。 どうしたものでしょうか。 config.txtに $board = "文字列01"; $dir = "文字列02"; $limit = "文字列03"; $down = "文字列04"; を書き込んでいます。 ======test.plの内容====== #!/usr/bin/perl -w if ($#ARGV < "0") { print "[ERROR]\tUsage: perl test.pl config.txt\n"; exit; } if (-e $ARGV[0]) { require ($ARGV[0]); } if (!defined($board) || !defined($dir) || !defined($limit) || !defined($down)) { print "[ERROR]\n"; exit; } print "$board\n"; print "$dir\n"; print "$limit\n"; print "$down\n";
424 :
名無しさん@お腹いっぱい。 :02/01/29 00:34 ID:kF9Gt4SC
>423 config.txtのお尻に 1; と書いてみる。
425 :
名無しさん@お腹いっぱい。 :02/01/29 01:05 ID:aDiD5uGU
my $sentence = '今日は29日だ。01:05分'; if ($sentence =~ /([\d]+)/) { $sentence .= "\n・$1"; } print $sentence; この結果 > 今日は29日だ。01:45分 > ・29 が出力されますけど、 いくつ含まれているか判らない数字列を全部取り出して、 それを全部後ろにくっつけて、 > 今日は29日だ。01:05分 > ・29 > ・01 > ・05 と出すにはどうすればいいでしょう。
while($sentence =~ s/([\d]+)//) { $sentence .= "\n・$1"; } 間違えると無限ループになるから注意。
tu-ka,自分で間違ってるじゃん。 $sentence2 = $sentence; while($sentence =~ s/([\d]+)//) { $sentence2 .= "\n・$1"; }
my @number = $sentence =~ /\d+/g; $sentence .= join "\n", '', map { '・' . $_ } @number if @number > 0;
429 :
名無しさん@お腹いっぱい。 :02/01/29 01:23 ID:qEiE9m0V
"20020129012155"という文字を $yyyy = "2002"; $mm = "01"; $dd = "29"; $h = "01"; $m = "21"; $s = "55"; こうしたいんですが、スマートなやり方はないでしょうか? 今は @date = split //,$date; for (1..4) {$yyyy .= shift @date;} for (1..2) { $mm .= shift @date;} こんなのを書いてるんですがいかんせん汚い・・・
/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/ あんま奇麗じゃないか
431 :
名無しさん@お腹いっぱい。 :02/01/29 01:44 ID:jKfeCUaQ
432 :
429 :02/01/29 02:10 ID:mntfCIt4
ああ、なるほど、マッチさせればいいのか・・・ ありがとうございました。
>>429 unpack ('A4A2A2A2A2A2', $str);
434 :
425 :02/01/29 03:55 ID:???
435 :
名無しさん@お腹いっぱい。 :02/01/29 06:48 ID:yBBFlrS0
再び質問させてください。 htmlファイル中にある&を%44になおすプログラムを作っているのですが そのファイルの中には&が8個あって1番目の&だけを修正したいのです。 #!/usr/local/bin/perl while(<stdin>){ s/&/%44/o; print; } 上記の状態から修正したいのですが、どうしたらよいでしょうか??
436 :
340=435 :02/01/29 07:13 ID:yBBFlrS0
私のやり方だと8個の&すべて%24に変わってしまいます。 色々やってみたのですがうまくいきません。 おちから貸してください。
437 :
・・・ :02/01/29 07:29 ID:???
#!/usr/local/bin/perl while(<stdin>){ unless ($this_scalar_means_flag == 3.14159265358979){ $this_scalar_means_flag = 3.14159265358979; s/&/%44/o; print; } }
一秒たりとも自分では考えたくないんだね :-)
439 :
340 :02/01/29 07:43 ID:yBBFlrS0
すみません。単純に勉強不足です。 わたしなりには考えたのですがどうしてもうまくいかなくて。。。
440 :
名無しさん@お腹いっぱい。 :02/01/29 09:32 ID:/LeYWjfo
ところでgunzipさんのサイトってあるの? 以前作ってるとか聞いたことあるんだけど。。
>437 チョト感動。 タノチイ。
443 :
名無しさん@お腹いっぱい。 :02/01/29 12:43 ID:F543ET41
馬鹿発現なのは100も承知。 $iのiとはなんのi? あと$1とか…… 色々しらべてみても、これ? つーのが。
あぼーん
>443 どれにレスしているのか引用しなさい。 わからないことが馬鹿なんじゃなくて、他人に自分の意志を 伝えられる文章を書けないのが、馬鹿。
447 :
名無しさん@お腹いっぱい。 :02/01/29 13:44 ID:F543ET41
>>445 すんまへん。引用じゃなかったんで。
>>446 >一般的にi、j、kなどが使われる理由を知りたいって事?
そ、そういうことです(苦笑)。
vは valueなのかな、とオボロゲにゃー思うんですが。
>447 i はイテレータの頭文字じゃないかな?
449 :
447 :02/01/29 15:00 ID:???
www.ruby-lang.org/ja/uguide/uguide09.html これのことですかね?
450 :
名無しさん@お腹いっぱい。 :02/01/29 15:14 ID:JIM4MzqN
よろしくお願いします。 open(DAT,"foo.dat"); @foos = sort <DAT>; close(DAT); foreach (@foos) { print; } これだとファイルが大きいとメモリを使いすぎるみたいなのでやめようと思って、 下のように書き直したんですが open(DAT,"foo.dat"); foreach (sort <DAT>) { print; } close(DAT); この場合も結局、一旦<DAT>を全部読み込んでからsortしてるんでしょうか? @foosにコピーしないだけマシですか?
451 :
名無しさん@お腹いっぱい。 :02/01/29 15:29 ID:7v+0Ir29
たいしてかわらん
452 :
450 :02/01/29 18:58 ID:???
そうですか。。。 じゃああまり気にしないことにします。
453 :
名無しさん@お腹いっぱい。 :02/01/29 20:12 ID:GCzt07oL
perlで、ファイルリストを渡すと、そのファイルの中の 特定文字列を置き換える、という処理をしたいのですが どうしたらよいのでしょうか? a.txt b.txt c.txt と渡すと、 a.txtのmonaをgikoに、 b.txtのmonaをgikoに、 c.txtのmonaをgikoに、置き換えるという処理をしたいのです。
454 :
453 :02/01/29 20:21 ID:GCzt07oL
環境はWindowsです。しょぼん。
455 :
名無しさん@お腹いっぱい。 :02/01/29 20:27 ID:7v+0Ir29
perl -p -i -e 's/moga/giko/g' a.txt b.txt c.txt
456 :
453 :02/01/29 20:31 ID:GCzt07oL
>455さんありがとうございます。最後のa.txt b.txt c.txt部分が リストになって渡されるのです。 Linuxみたいに`cat list`とかできるとよいのですが…
457 :
453 :02/01/29 20:35 ID:GCzt07oL
cat list | perl …ではだめですよね。なんかだめっぽいです。 やりかた間違ってるんでしょうか?
>455 Can't do inplace edit without backup.
>457 Windowsにcat入っているの?
460 :
名無しさん@お腹いっぱい。 :02/01/29 20:45 ID:7v+0Ir29
cat list | xargs perl -i.bak -p -e 's/giko/mona/g' だけど。今思ったらWindowsなんだね。 じゃあ、自分でファイルオープンして置換しながらtmpファイルに出力して renameで。
461 :
453 :02/01/29 20:58 ID:GCzt07oL
catじゃなくてtypeでした
>>457 でもどのみちだめっぽいですね。
1行ずつ「exec perl」で呼び出すってのはだめでしょうか?
type list | perl -e "while(<>){exec \"perl -e's///'\"}みたいに
やってるんですが…うううむ
@files = ('a.txt','b.txt','c.txt'); foreach $file(@files) { @DATA = (); open(FILE,"$file"); while (<FILE>) { $_=~ s/mona/giko/g; push (@DATA,$_); } close (FILE); open(FILE,">$file"); print FILE @DATA; close (FILE); }
perl -p -i.bak -e "BEGIN{chomp(@ARGV=<ARGV>)} s/mona/giko/g" list.txt ってのはどうかな。何故かlist.txtが破壊されるけど。
perl -p -i.bak -e "BEGIN{chomp(@ARGV=<>)} s/mona/giko/g" <list.txt なら破壊されないか。
465 :
453 :02/01/29 21:28 ID:GCzt07oL
なるほろ!いったん配列にいれるのですか。ありがとうございます。
466 :
462 :02/01/29 21:31 ID:9LBydpPt
・・・・・・・
ワラタ
468 :
462 :02/01/29 21:41 ID:vVENca1F
>467 ひどいや。
469 :
467 :02/01/29 22:41 ID:???
気分を害したならあやまる。スマン。 おれは462の466のコメントがうまいなと思っただけで、 別にけなしているわけではない。ある意味、逆にリスペクトだよ。
470 :
429 :02/01/30 00:14 ID:vUn9vtFi
>>433 ありがとうございました。
unpackって使った事がないので他にも色々試してみます。
471 :
462 :02/01/30 01:15 ID:Dm6D5Jsh
>469 いえいえ、そうでもないです。 ていうか、コピペにでも見られたのでしょうか?マジに手打ちでちこちこ書いたのに 見事な放置っぷりで悲しくなりました。動作確認までしたのに。 どうしてでしょう? やっぱ、一行目に #! /usr/local/bin/perl 書かなかったのが敗因でしょうか?(笑)
472 :
名無しさん@お腹いっぱい。 :02/01/30 10:45 ID:cYid0m8S
ディレクトリー名を変更するにはどうしたらいいの?
473 :
名無しさん@お腹いっぱい。 :02/01/30 12:18 ID:jvP4y3Zo
>472 リネームする。
>474 perlでリネームする。
レンタル鯖 UNIX LINUX どこも、板違いに思えたので、 こちらで質問させてください。 CGI(Perl)を自作していて、 @Linesに、文字列を埋め込んで (HTMLの文法に沿った文字列です) print "@LINES"; この処理を、AのサーバーとBのサーバーで実行した場合、 表示できるAのサーバーと表示できずにエラーとなるBの サーバーがあります。 これは、物理的なメモリーの不足が問題でしょうか? Apacheの設定の問題でしょうか? 次回、Cのサーバーをレンタルする場合に、 上記のエラーを回避できるサーバーを選択するには、 何を確認すればいいのかわかりません。。。 どうか教えていただきたいです。 ちなみに、@LINESを出力できないって問題は、 foreach $temp(@LINES){ print $temp; } これで、クリアしました。 また、foreachで一行ずつ、書き出す場合と @LINESで一気に書き出す場合で サーバーにかける負担と プログラムの処理にかかる時間についても ご教授いただければ、幸いです。 よろしくお願いします。 長文スイマセン。。。。
477 :
名無しさん@お腹いっぱい。 :02/01/30 13:31 ID:jvP4y3Zo
>476 それぞれのサーバの環境、特に導入されているperlのバージョンなどが わからなければ何とも言いようがないけど、このケースでは全く Apacheは関係ないし、メモリの実装量も、あまり関係あるとは思えないな。 オーバーフローでも起こしていない限りスワップしてでも実行するだろうし。 perl単体の問題だと思います。
478 :
名無しさん@お腹いっぱい。 :02/01/30 13:37 ID:jvP4y3Zo
>474 $souce_dir = "test"; # リネームしたいディレクトリ名 $dist_dir = "test1; # リネーム後のディレクトリ名 `mv $souce_dir $dist_dir`;
479 :
476 :02/01/30 13:37 ID:???
>477 ご回答ありがとうございます。 失敗したBのサーバーのPerlのバージョンを 調べてみます。 @LINESで一気に書き出す場合と、 $LINESで、一行ずつ書き出す場合については、 Per単体の問題がない場合は(エラーで落ちない場合) @LINESの方が高速に動作すると考えても良いでしょうか?
480 :
名無しさん@お腹いっぱい。 :02/01/30 13:39 ID:jvP4y3Zo
>479 foreachの行程分だけ早いだろうけどね。 微々たる問題だとは思うけど。
481 :
476 :02/01/30 14:02 ID:???
>480 ご回答ありがとうございます。 スワップファイルをHDに書き出す可能性や サーバーにかける負担を考えると foreachの方が良いってことですね。 ありがとうございました。
482 :
名無しさん@お腹いっぱい。 :02/01/30 14:14 ID:jvP4y3Zo
>481 ううん、逆です。 foreachのほうがその繰り返しの行程分 リソース食うって意味です。 でも多分本当に微々たる問題だと思います。
483 :
日付の計算? :02/01/30 14:27 ID:5H2ncmbe
たとえば、今日から30日後の年月日を算出すると いった場合どうしてます?。なんかカレンダーの テーブルとか自作しなくちゃいけないとか? 随分前から悩んでるんですけど・・。
>483 localtime(time + 30*24*3600);
485 :
名無しさん@お腹いっぱい。 :02/01/30 15:14 ID:L4I/gPlU
"@LINES"だと文字列をつくるんでリソース食わないか? あと、print foreach @LINES と print "@LINES"は$"によっては、 結果が違ってくるね
486 :
日付の計算? :02/01/30 16:40 ID:5H2ncmbe
487 :
名無しさん@お腹いっぱい。 :02/01/30 17:45 ID:5H2ncmbe
[簡単な暗号化] cryptのような暗号化されたものを、元の状態にもどせない ものではなくて、 任意のキーを与えて文字列を暗号化して、またそれをその のキーで元の文字列に復元できる。 なるたけサーバーに付加がかからない。 って何か方法があるだろうか? もしくはもっと簡単でもいいので、今思いつく方法としては 文字コードに変換して幾つかずらして暗号化するって方法ぐ らいかな。
>>487 その辺がお手軽では?
全く強度を気にしないならBASE64辺りでも良いだろうけど。
少し凝るなら文字コードに変換したのをKeyで作った変換テーブルで
変換すると云う手も有る(テーブルを作る都合上処理は大きくなるけど)。
或いは適当な(数学で云う)関数を作ってKeyにより係数を変動させる。
その関数に文字コードから変換した数を代入し値を出し、適当に文字に
変換なんて手もあるかも(この場合計算誤差が出ないようしなけりゃ成らない…)。
ぱっと考えたものだと上記くらいですね。
処理の重さは…知らない(笑)。
暗号強度と暗号化の複雑さは大体天秤の関係で状況に拠るから一概には
どれが良いっては言えないのは当然だから難しい問題かもしれないけど。
ちなみに自分は新たにアルゴリズム考えるのめんどいからCPAN辺りからモジュール
拾ってきて組み込んだなぁ…。
あれ?このコードが動かないんだけど、もしかしてオレ何か勘違いしてる? #!/usr/bin/perl use 5.6.1; use FreezeThaw 0.41, qw(freeze thaw); my $a = thaw freeze ['Anon_Array_ref' ]; print ref($a) ? "ok\n" : "not ok\n"; __END__
490 :
名無しさん@お腹いっぱい。 :02/01/31 10:47 ID:HryKlcft
age忘れ。 動かないっつか「okにならない」ね。
$a がリファレンスじゃないからじゃねーの?
>>491 そりゃちょっと教え方が不親切じゃねーの。
>>489 thaw の返値は配列なので、リストコンテキストで受ける必要あり。
493 :
489 :02/01/31 11:20 ID:???
>>492 スマソ。俺はFreezeThawとか言うモジュール知らんから
>>491 程度しか分からんかったんだよぅ。
495 :
名無しさん@お腹いっぱい。 :02/01/31 12:40 ID:cIzQvI9F
>>488 ご返答ありがとうございます。
そうですね、どっかでモジュール拾ってくるのが得策かも。
ちょっと昨日帰りの電車で考えたのは、文字列をランダム
に配置しなおして、その位置情報をキーとして解読する方法。
つまり、文字列「abcde」を「53124」というキーで再配置する。
暗号化された結果は「ecabd」になる。解読はそれをキーの位
置情報で並べ替える。16進数使えば16文字まで可能だし。たぶ
ん簡単そうだ。
まぁ、わかるヒトがみれば3秒で解読できるだろうけど(ワ)、
この辺が簡単でいいかな。
496 :
perl-5.6.1 :02/02/01 14:19 ID:SRe8SKGM
#!/usr/bin/perl -w use strict; open(FILE, "filename"); foreach (<FILE>) { print "$.: $_"; } close(FILE); これを実行したら、filenameの行数が40行だとすると、 $.が全部40になるんですが。
>>496 while(<FILE>){
foreach はループに入る前に
リストを全部用意する(この場合ファイルを全部読み込む)からね。
498 :
名無しさん@お腹いっぱい。 :02/02/02 05:14 ID:uZ4d4EH7
ファイルの末にデータを付け足す事はできる。 じゃぁ、データを削る事はできるか?ゴメンねむいんだ。 初心者が生意気にも掲示板作成中。いいやねよう。 おやすみ。
499 :
名無しさん@お腹いっぱい。 :02/02/02 08:03 ID:Z9fivj2K
htmlソースから、<htmlタグ>ほげ</htmlタグ>を抽出したい(perl)と思ってます。 で、こういう話題(途中改行にも対応とか云々・・・)をあつかったサイトが、有名どころの どこかにあった気がするのですが・・・ ご存じないですか?
500 :
名無しさん@お腹いっぱい。 :02/02/02 09:01 ID:fydzz3EG
あのPerlスクリプトを書くのに文字コードはEUCが良いといわれてますが EUCのメリットって文字化け対策(\回避)がいらないだけですか? その他にS-jisよりも優れてる部分ってあります?
502 :
名無しさん@お腹いっぱい。 :02/02/02 09:22 ID:H8DUG7wU
503 :
500 :02/02/02 14:15 ID:???
なるほど。ありがとうございました。
指定したIPアドレス以外は別ページへ飛ばすにはどうしたらいいですか?
505 :
504 :02/02/02 19:46 ID:???
早く教えろよ
if(指定したIPアドレス以外){ 別ページに飛ばす }
>505 お前が常時監視して手動で誘導しろよ。
508 :
:02/02/03 00:25 ID:1JKHBAhE
a.pl として、 #!/usr/local/bin/perl print "sine"; と書きました。そして、サーバーにアップして、 chmod 755 a.pl で、絶対パスで、実行した所 [homepage@sv ~]# /home/homepage/a.pl /home/homepage/a.pl: Command not found. と出てきます。 ファイルは、あるのに、コマンドは無い...って どうしてですか?
509 :
名無しさん@お腹いっぱい。 :02/02/03 00:28 ID:+IXT+7Wc
>508 /usr/local/bin/perl -V とかやってみれ。
510 :
504 :02/02/03 00:29 ID:???
>506 プ 早く教えろよ わかるやついないのか?
511 :
504 :02/02/03 00:30 ID:???
>507 はぁ・・・・低脳。 いいから早く教えろよ
512 :
:02/02/03 00:30 ID:1JKHBAhE
こんなに、長いのが出てきました。 Summary of my perl5 (5.0 patchlevel 5 subversion 3) configuration: Platform: osname=linux, osvers=2.2.18-1.6, archname=i386-linux uname='linux dhcp-115.jp.tlan 2.2.18-1.6 #1 tue feb 13 04:54:12 utc 2001 i686 unknown ' hint=recommended, useposix=true, d_sigaction=define usethreads=undef useperlio=undef d_sfio=undef Compiler: cc='cc', optimize='-O2', gccversion=2.95.2.1 19991024 (release) cppflags='-Dbool=char -DHAS_BOOL' ccflags ='-Dbool=char -DHAS_BOOL' stdchar='char', d_stdstdio=undef, usevfork=false intsize=4, longsize=4, ptrsize=4, doublesize=8 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 alignbytes=4, usemymalloc=n, prototype=define Linker and Libraries: ld='cc', ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib libs=-lnsl -lndbm -lgdbm -ldb -ldl -lm -lc -lposix -lcrypt libc=, so=so, useshrplib=false, libperl=libperl.a Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic' cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib' Characteristics of this binary (from libperl): Built under linux Compiled at Feb 16 2001 06:49:02 @INC: /usr/lib/perl5/5.00503/i386-linux /usr/lib/perl5/5.00503 /usr/lib/perl5/site_perl/5.005/i386-linux /usr/lib/perl5/site_perl/5.005
513 :
名無しさん@お腹いっぱい。 :02/02/03 00:32 ID:+IXT+7Wc
>512 そしたら、 perl /home/homepage/a.pl ってやってみそ。
514 :
:02/02/03 00:35 ID:1JKHBAhE
キタ━━━━━━(゚∀゚)━━━━━━ !!!!! 動きました!!!! 何だったのでしょうか?
515 :
名無しさん@お腹いっぱい。 :02/02/03 03:56 ID:5Ne5ycjd
PerlでファイルアップロードCGIを作りたいのですが、経験がないのでセキュリティなどで不安です。 参考になるフリー配布のスクリプトがあったら教えてください。
516 :
名無しさん@お腹いっぱい。 :02/02/03 04:01 ID:+IXT+7Wc
517 :
名無しさん@お腹いっぱい。 :02/02/03 04:06 ID:+IXT+7Wc
ERROR:スレッド立てすぎです。。。 ホストntttkyo050192.adsl.ppp.infoweb.ne.jp WebProg板のみんなで作ろうよ! 名前: 名無しさん@お腹いっぱい。 E-mail: age 内容: まず、WebProg板謹製アップローダーとか、どうでしょ?
518 :
名無しさん@お腹いっぱい。 :02/02/03 04:35 ID:1D0LvUGL
あぼーん
>>476 おそらく、Perl5の""内での@の解釈が変わったことによるものだと思う。
出力されないといっているほうは、そのまま"@LINE"という文字列が
出力されいないか? もしそうだとしたら、Perlがversionが古い。
で、print "@LINES"; の代用として foreach $temp (@LINES){ print $temp }
で問題ないのなら、素直に print @LINES; としとけ。
@LINES @Lines どっちだよ。
522 :
名無しさん@お腹いっぱい。 :02/02/04 12:16 ID:6nIPvsGB
こんにちわ、perlの事で他スレから誘導されてきました マルチポストですが質問させてください。 以下のスクリプトですが #! /usr/bin/perl # お約束 # 私のスクリプトそのままです(編集はしてません) $TMP = 10 ** 10; # $TMP に10の10乗を代入 $X = 10; # $X に10を代入 while ($TMP) # $TMPが0になるまで繰り返し処理 {$A = --$TMP % $X; # $TMPの値を-1し、$Xの剰余を$Aに代入 print "$A $TMP \n";}# 処置した値を画面に表示 上記のスクリプトですが、表示される$Aの値が変化しません 5 999999999 5 999999998 5 999999997 ...... $Xの値が1だと$Aは0で固定 $Xの値が2だと$Aは1で固定 $Xの値が3だと$Aは0で固定 $Xの値が4だと$Aは3で固定 $Xの値が5だと$Aは0で固定 $Xの値が6だと$Aは3で固定 $Xの値が7だと$Aは3で固定 $Xの値が8だと$Aは7で固定 $Xの値が9だと$Aは3で固定 私の知識が正しければ、$TMPの値を$Xで割った余りの数値が表示され 1行ごとに値が変更されると思うのですが。。。 どこか間違っているのでしょうか 識者の皆様、ご回答をお願いします
>522 10**10じゃなくて10**3から試してミソ。
524 :
522 :02/02/04 13:18 ID:6nIPvsGB
>>523 返答ありがとうございます
早速10**3で試してみたところ、期待通りの動作が確認できました
(10**9まで、動作が確認できました)
どうやら値が大きすぎたようです
でも、$TMPの数値は整数で表示されているのに・・謎だ。
助かりました
525 :
カリハン :02/02/04 15:00 ID:uKBk3jL4
FLASH板住人用アップローダを作ったのですが、頻繁に503がでてしまい困っています。
http://www.th-ladybird.co.jp/flash/ 回避方法として、ftpでUPするものを作ろうと思うのですが、それって可能でしょうか?
当方UNIXのコマンドほとんどわかりません。
上記の製作可否や、503の回避方法、それらの教材サイト、教本、等ありましたら教えてください。
503 Service Unavailable なんてあまり見ないな。 ソースを見なきゃ何も言えないね。
527 :
カリハン :02/02/04 16:20 ID:uKBk3jL4
>>525 もう少し症状を詳しく書いてくれると助かるんだが・・・
Unavailableはどんな時に出るの?
適当に解釈すると、ファイルサイズが大きくなるとUL途中で
コネクションが切れると言う事かな
だとしたら、99%サーバサイドの問題なのでどうしようも無いんじゃ
ないかな。
後の1%は説明が面倒なので省略 w
で、FTPならanonyで開放する事になるんだけど、作ると言うか開放して
おしまいなので、何の知識も要らないでしょ
ただ、今時そんな危ない所は誰も使わないと思うよ
最近はExecutableなflashが問題になってたりするし、怖くて見れないよ
あ、FTPってWEBでULした後にスクリプトからFTPしたいと言う事かなあ だったら全く意味が無い。 HTTPDがリクエストを処理をする段階でヘバってるんだから 試しに何秒位で死ぬか実験してみればよく解るよ
>>527 503で見られなかった。
サーバーの負荷が高いだけじゃない?
531 :
カリハン :02/02/04 17:12 ID:uKBk3jL4
症状は、
UP容量は5,000,000バイトでしばってあるんですが、とりあえずテストでは、UP途中でオチたことはないです。
UPはできるのですが、ファイルUP後ほぼ必ず503がでてしまいます。
チャット設置なんかを禁止しているので、サーバが弱いのは間違いないのですが、なんか回避できないかなと。
ここのレスはチェックしつつ、
>>529 を勉強してみます。
ありがとうございました。
>>527 なんつーか、いかにも"素人が書きました"っつー感じのスクリプトだな。
プログラムって物自体これが始めてのまぁ素人ですから。 大目に見てください。
すみません、もしかして、オレ勘違いしてますか。 初心者スレじゃなくて、素人スレ探して聞くべき質問ですか。
>527にアクセスした時にも1回503が出た。 アクセス数か転送量かどちらかが一定以上になるとストップかけられるとかは? 鯖業者に聞いた方が早くない?
あのー、超初心者の質問なので気がひけるのですが、 ジオシティーにHPをなんとか作ることができたのですが、 掲示板を設置したいなとおもって、フリーソフトのBBSをダウンロードして 使おうとしたのですが、Perlへのパスがわからなくて、行き詰まっています。 ジオシティーのパスを知っているもしくは どこに行けばわかるか知ってらっしゃる方、よろしければ教えていただけませんでしょうか。
スレ違いだよ GeocitiesってPerl使えないんじゃないの? FAQ探して読んでみるべし 「CGIは使えますか?」とか有るから
>539 ありがとうございます。 そうなんですか、ちょっとがっかりです。 間違ってスレに書き込んでしまってすみませんでした。
542 :
perlのバージョン :02/02/04 22:48 ID:4hvyQ2bt
perlのCGIからperlのバージョンって調べられるっけ?
open(PIPE,'/usr/local/bin/perl -v |'); print <PIPE>; close(PIPE);
$]
545 :
perlのバージョン :02/02/04 23:16 ID:4hvyQ2bt
print `/path/to/perl -v`;
$] ないし perl -V:version
549 :
perlのバージョン :02/02/04 23:27 ID:4hvyQ2bt
>>544 $]は、書き間違いかと思ってしまった・・
だんだん自分が嫌になってきた(鬱
ガムバレーw
551 :
名無しさん@お腹いっぱい。 :02/02/05 01:36 ID:bVJSiotc
他人のHPに張ってあるリンク数を自動的に調べて書き出すスクリプト を教えてもらえないでしょうか? Aさんのページは○個のリンクが張ってあります。 Bさんのページは○個のリンクが張ってあります。 という具合にしたいのですが。。。
以前Web制作で聞いてらっしゃいましたね。
553 :
名無しさん@お腹いっぱい。 :02/02/05 02:51 ID:hit8P6YF
$linknum=scalar /(<a)/sgi;
554 :
名無しさん@お腹いっぱい。 :02/02/05 03:25 ID:fmBbp0lc
Tスイッチを付けると @INCの価が変わるんですが( .がなくなる) そんなもんなんですか? 5.005_03です。
そんなもんですと言えば良いのか? w カレントをコマンドサーチパスに加える事の危険性と 意味は同じだと思うが。
556 :
554 :02/02/05 04:17 ID:???
>555 Tスイッチについて調べても、 @INCについて触れているものがなかったので @INCは自分の環境でしか変わらないのかなぁ思い質問しました。 > カレントをコマンドサーチパスに加える事の危険性 は知らなかったのですが、 カレントディレクトリにスクリプト内で使われているのと同名のファイルを 他人に勝手に置かれた時に、意図しない動作をする可能性があるから危険 ということですか?
>>541 それがですね。スナックのHPと上記アップローダだけおいてるんですが、
HPのほうは1日多くても20アクセス(内半分は従業員)ほどなんです。
>>556 >カレントディレクトリにスクリプト内で使われているのと同名のファイルを
>他人に勝手に置かれた時に、意図しない動作をする可能性があるから危険
その通り。
ついでに-T付けると$ENV{PERL5LIB}とかも無効になるから。
559 :
名無しさん@お腹いっぱい。 :02/02/05 20:07 ID:kMSeXYwX
掲示板を作りたいのですが、 書き込みフォームは別に作る必要があるのですが ログをとりたいのですが、 これだと入力したのを出力するだけの事しか出来ません。 誰か改造を・・・。 #!/usr/local/bin/perl #データの受け取り read( STDIN, $query,$ENV{ 'CONTENT_LENGTH' } ); @in_params = split( /&/, $query ); foreach $in_param ( @in_params ) { ( $key,$value ) = split( /=/,$in_param ); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-f0-9])/pack('C',hex($1) )/ge; $param{ $key } = $value; } #結果の出力 print "Content-type: text/html\n\n"; print $param{ 'name' }; print "<br>"; print $param{ 'gimon' }; print "<br>"; exit;
>>559 意味がわからない。
説明もプログラムの意図も。
あ、ファイル!ファイル!
open
print
<>
close
など勉強して。
その前に日本語を勉強して。
日本語を勉強し終わったら常識を勉強して。
563 :
名無しさん@お腹いっぱい。 :02/02/05 22:11 ID:Zu+hD/6k
ゲームを作ろうとして頑張ってるんですが、 まず最初に、Login画面を出して、 個人の認証をおこないます。 その次に、その認証した人用に、常にHTMLを反映させたいのですが、 どうすればいいでしょうか? たとえば、モナーという人がログインしたら、 常に、モナーという人を意識したページにしたいんですが。 誰か、教えてくださいませ。
>>563 cokkieで良いのかな?
$ENV{"HTTP_COOKIES"};
書き込み方は勉強して。
もしくは生成するページのリンクを
/path/a.cgi?name=モナー
として常にモナー用のデータを出力するようにするとか。
565 :
563 :02/02/05 22:23 ID:Zu+hD/6k
>>564 そうなんですよね。
クッキーでやるのがベストかな。
>もしくは生成するページのリンクを
>
>/path/a.cgi?name=モナー
>
>として常にモナー用のデータを出力するようにするとか。
これだと、誰かが不正に利用してしまいそうで、
(まぁ、パスワードも常に出力するというのもありだけど)
厳しいかなぁと。
他のログインを利用してるページを見ると、
この方法は使ってないようですし。
もうないけどrobotmailっ言うwebメールがこの方式。 もちろん暗号化+httpsだったけど。
567 :
563 :02/02/05 22:40 ID:Zu+hD/6k
ふむふむ。 なんか、もっとスマートな方法はないでしょうか? クッキーも拒否してる人がいないとは限らないし。 ヘルプミ〜
COOKIEの時点でガリガリにスマート。
そこまでする奴は君のサービスも迷惑と感じる人。
570 :
563 :02/02/05 22:46 ID:Zu+hD/6k
やはり、クッキーですか。 クッキー以外になにかあればと思ったのですが。 教えてくれて、どうもありがとうございました。
571 :
セキュリティホールについて :02/02/05 23:19 ID:Iem+OJzp
大変御無沙汰しています。教えていただきたいことがあります。
WEBはセミプロ程度、WEB言語系は素人若干書き換え程度です。
現在、ボランティア系の団体で複数の応募フォーム、SSLPGPクレジットカード引き落としなどを
使ったホームページを担当しています。
若干コーディングできる方から、簡易計算自動入力、曜日自動入力を強く勧められて以下の
スクリプトを頂きました。
曜日自動入力については、動作して入力欄がブランクでなく選択なので、安全上問題ない気がしますが、
自動計算に関して、動作もおかしく、それよりも入力欄ブランクで、タグその他
記述された場合、セキュリティ面でかなり不安なのですが、いかがでしょうか。
私個人としては、買物カゴ式の別CGIをあてる方が良いのではないかと思うのですが、
どうか教えて下さい。宜しく。 (長くて乗らないので一部除く)
<!-- saved from url=(0022)
http://internet.e-mail -->
<HTML>
<HEAD><TITLE>簡単な入力検査の例</TITLE>
</HEAD>
<BODY>
<H3>簡単な例</H3><HR>
<FORM NAME="ValidForm">
5/18
<INPUT TYPE="TEXT" NAME="T0" SIZE="3">
人
<p>5/19
<input type="text" name="T1" size="3">
人</p>
<p>合計
<input type="text" name="T2" size="3">人</p>
<p>申込金(人数×2000円)<input type="text" name="T3" size="20">円</p>
<p>入金日 2002年<select size="1" name="D1">
<option value="1">1</option>
</select>月<select size="1" name="D2">
<option value="1">1</option>
</select>日<input type="text" name="T4" size="3">曜日</p>
<p> </p>
</FORM>
</BODY>
</HTML>
572 :
Name_Not_Found :02/02/05 23:25 ID:IJ+Ly9Q8
すごく初歩的なことで壁に当たっています。 相対パスの記入の仕方で ../みたいなのってもっと..が小さくないといけないと思うのですが どうやって打てばいいでしょうか? よろしくお願いします。
573 :
名無しさん@お腹いっぱい。 :02/02/05 23:29 ID:Zu+hD/6k
>>571 あなたの質問に答えてあげたいけれど、
微妙に日本語の意味がわからないです。
でも、タグが心配なのであれば、
Perlの正規表現を使って除去すればいいのではないでしょうか?
>>571 情報が少ないのでなんとも言えません。
HTML・JavaScriptの話なら板違いです。
>>572 >../みたいなのってもっと..が小さくないといけないと思うのですが
意味がわかりません。
>>572 フォントの問題だと思う
等幅とそうじゃないのだと点の大きさちがうから
どっちでもよい
576 :
こぐぅ :02/02/06 00:00 ID:1lbXw0DS
2チャンの板みたいな掲示板が作りたいのですが 根本的なことから分かりません。 誰か無知な私を助けてください。
簡単に言えば掲示板の掲示板。 ほら、スレッドって一般的なサイトで一般的にある掲示板形式じゃん。
>578 それ Cじゃん
>>579 ほぼそのままで効率の悪いperlプログラムに変換できるでしょ。Cなら。
変数って普通に使ってると、 グローバル変数になりますが、 myとか使って、スコープを設定すると、 メモリーの使用量に変化は出ますか? なるべく、my使ったほうがいいでしょうか?
メモリは同じ変数を使いまわす方が少なくすむはず。 しかしそれ以前の問題で、myを使った方がいいと俺は思うね。
583 :
:02/02/06 10:47 ID:???
初心者過ぎて話にならないと仰らずに 入門者のおいらにも教えて下さいな。 JAVAやクッキーがオフだと別のページに 飛ばしてしまう様なcgiってありますか? これってcgiを使わなくてもできますか?
586 :
名無しさん@お腹いっぱい。 :02/02/06 15:22 ID:JVnz6bAn
Perl初心者です。 文字列前後のホワイトスペースの取り除き方を教えて下さい。 PHPだと、trim関数でできてしまいます。 例:$REPORT = trim($REPORT); Perlでの方法を教えて下さい。 文字列の中の改行は残したいです。 よろしくお願いします。
587 :
名無しさん@お腹いっぱい。 :02/02/06 15:23 ID:ovT8yWtO
$REPORT =~ s/^\s//;
for($REPORT){ s/^\s+//; s/\s+$//; }
589 :
名無しさん@お腹いっぱい。 :02/02/06 16:11 ID:JVnz6bAn
>587さん >588さん 出来ました。 ありがとうございました。 またよろしくお願いします。
590 :
kopt :02/02/06 18:11 ID:BylxzAgo
すみませんGoogleで探せといわれると思いますが、 探したものは説明がないので参考にならないんです。 というわけで,質問させてください ファイルアップロードスクリプトでファイルの制限(GIFとかJpegとか)させたいのですが、 どのようにすればいいかヒントをください。
>>590 スクリプトがないから何とも言えないけど
指定したファイルの拡張子以外のアップロードできないようにすれば?
そうするのはどうするのってのはスレ違いね。
>590 精度低いけど,ファイルのContent-Type見るとか。
593 :
kopt :02/02/06 19:17 ID:BylxzAgo
>>591 スレ違いですか? でも、このスレって初心者のスレでしょ?駄目ですかねぇ
どのスレ行っても
ここで聞くなとかいわるんだろうなぁ
>593
とりあえず
>>1 を読んで、1〜3をしっかりしよう。
そして君は「ヒントが欲しい」と言った。
>591はヒントを教えた。
それでいいだろ。
597 :
590 :02/02/06 20:17 ID:BylxzAgo
>>595 うーん,もちろんそれは候補にあるんです。
それをかけないんですよね。
まぁ、こんな厨房じゃ書くなって事ですね。
>>594 ヒントを教えてもらったのは確かですので感謝しマース
598 :
ファイルロック :02/02/06 21:15 ID:6W+ZcRg7
たぶん、もう何度も話題にのぼってると想うんですが。。 今一どうすりゃ安心なのかわからないファイルロック。 掲示板のログファイルの保護の為にファイルロックする場合、 書き込む時に open(IN, ">>$file"); flock(IN,2); print IN "$data\n"; close(IN); この程度で、十分役割を果たすものでしょうか? ログファイルの読み出しの時にもロックってかけます? またこのflockの汎用性はどの程度ですか、NTやらは抜かして
掲示版なるものを書いた事が無いんで良く分からんのだけど 結局cgiのファイルロックってのは、行き着く所は システムコールのアトミック性なんだな。 で、上の書き方だと、open と flockの間に時間的なスキマが絶対有るだろ? もしその間に100人が同じファイルをopenしちゃったら、 ファイルポインタの加減で死ぬ可能性が有るってこった それがどれ位掲示版で危ない事なのかは、漏れには分からない。
何か変な説明だな 例えばファイルが100バイトだとするだろ? で、openしてflockする前に他のプロセスが同じファイルを開くだろ? そうすると、そのプロセスは全てファイルポインタを100バイトに あわせて、そこから追記し始めると言う訳
601 :
ファイルロック :02/02/06 21:41 ID:6W+ZcRg7
>>599 なるほど、氏ぬ可能性がある・・と。
でも、まぁ絶対は無いモンみたいだからこれでいいかなぁ
だいぶ遅スレ。 gifの判別はヘッダを見るべし! gif89aとか書いてある。 jpgはダンプしたこと無し。
>602 PNGや JPGもヘッダでわかるはず。
598じゃないが
>>600 ってことは、書き込む時に
sysseek HANDLE, 0, 2;
とすればいいのだろうか?
それじゃappendにならないじゃん
606 :
名無しさん@お腹いっぱい。 :02/02/06 23:47 ID:+a0hOzna
お願いします。 $_ =~ s/ー/あ/g; ってやったらエラー出ます。 $_ =~ s/!/あ/g; だったら出ません。 どうしてですか? 漢字コード変換したりしていろいろやってみたんですが、うまくいきません。 よろしくお願いします。
607 :
605 :02/02/06 23:48 ID:???
ああ、ごめんごめんやっぱり中途半端だった (笑 ただ>604氏の方法じゃ上手く行かないと思うよ ファイルポインタはプロセス間で共有されてる訳じゃ無いからね 追記モードの時は SEEK_SET == SEEK_END になってるだけで 上書きするのと何ら変わらない筈だから 後は、書き込む度にwriteの戻り値分SEEK_ENDを進めているだけ だから、0,SEEK_END とすると他のプロセスが書き込んだ分は無視されてしまうよ WINは知らないけど、大体同じ様なもんだと思う (しかし下手な説明だ・・・)
608 :
605 :02/02/06 23:49 ID:???
s/\Qー\E/あ/g; で如何? 後はquotemetaとかを検索
609 :
名無しさん@お腹いっぱい。 :02/02/06 23:53 ID:+a0hOzna
>>608 ありがとうございます!
1行目は意味不明でしたが、quotemetaで検索したらいろいろ出てきました。
調べてみます。
610 :
ブクログラマー ◆eLx2NxJ6 :02/02/06 23:56 ID:6/WQt+6L
はじめまして。質問させていただいてよろしいでしょうか。 現在 僕は、CGIでメールを送信するページを作ってるんですが ローカルで、sendmailを実行することはできますか?
sendmailがあればいくらでも。
612 :
ブクログラマー ◆eLx2NxJ6 :02/02/07 00:04 ID:4GVSBAfQ
>>611 Apacheで確認して、その後鯖にうpするやり方で、作ってるんですが
Apacheにはsendmailがついてないようです。
DLすればよろしいんですか?
OSに依存しそうな問題なのだから自分のOS位書くのが礼儀ではないでしょうか? 後、うpとか言う人信用できないです。 自分のアドバイスでメールばらまきCGI組まれても困りますから。 新しい人をお待ち下さい。
>>613 礼儀知らずで、ごめんなさい。
うpっていう言葉も2chだから使ってしまいました。
使用しているOSはWinXP(Home)です。
PC上の仮想サーバー(Apache)で、sendmailの機能を使いたい、と考えています。
メールをばらまく行為とかは、考えていません。
その誓いとして、自分のメルアドとふしあなを書いておきます。
無礼をお許し下さい。
鯖がhi-hoです。 それでCGIゲームを置きたくて とりあえずApacheで動作確認したFFAとEndlessBattleを置いてみましたが FFAは呼び出しの時点でスクリプトエラー EBは呼び出しはできたもののどれかひとつでもリンク押すとスクリプトエラー 僕の力じゃどうしようもありません。 何か方法は無いでしょうか?
あ、スレ違いだ!? すいません、出直してきます(汗
サーバの設定とスクリプトの設定を一致させる。 できない、わからないならまだ時期ではない。あきらめる。
そうですか、じゃあもう少し調べてみて駄目なら諦めます。 ありがとうございました。 あと、スレ違いすいません(汗
1行目のperlのパスに気を付けて。
喧嘩売ってるとしか思えんな (w
すいません(汗) あの後戻っていろいろやってたらそのまま寝てしまって・・・。 Perlのバージョンはドメインがmaxなので5.6らしいです。 それでパスもやったんですが結局無駄でした(汗
でも5.6でも動かないんだからやっぱ4,036なのかな・・・。 仕方が無い・・・厨房なんで学校いってきます。 本当にすいませんでした・・・。
#! /path/perl print "CONTENT-TYPE:text/html\r\n\r\n".$[; バージョンチェック。
626 :
まゆ :02/02/07 09:37 ID:BzGq5BfM
Perlで画像アップロード掲示板を作成していますが、ユーザから 「アップされた画像を任意の大きさに変更したい」と言われましたが そのようなことができるでしょうか? ローカルからサーバにアップされた画像をたとえば250×200に変更するとか、 サイズを50Kに変更するといったようなことはできるのでしょうか? どなたかご存じの方がいましたら教えてください。 また、そんなことはできないよということでも良いのでどなたか教えてください。
2ちゃんねるで・・・/test/read.cgi/板名/スレ番号/ という形式でcgiが使えているでしょう。 これはどうやっているのですか?
628 :
初心者 :02/02/07 13:49 ID:???
>>626 要するにgifなりjpgなりを加工したい訳だよね。
ファイルサイズを変えたいと言うことは。
そりゃぁPerlには無理なんじゃないかなぁとか思ってみる。
それとも、そんなモジュールとかあったりするんだろうか。。。
と、検索。
こんなの発見。
GDモジュール(日本語チョウ訳)
http://member.nifty.ne.jp/hippo2000/perltips/gdmemo.htm より。
getBounds
GD::Image::getBounds( ) オブジェクト・メソッド
このメソッドはそのイメージの幅と高さの2つ要素を持つリストを返します。
取得することはできますが、作成したらイメージの大きさを変更することができません。
やっぱり出来ないのかな?
629 :
初心者 :02/02/07 13:53 ID:???
あった。
copyResized
GD::Image::copyResized(sourceImage,dstX,dstY,srcX,srcY,destW,destH,srcW,srcH) オブジェクト・メソッド
copyと似ていますが、コピー元と出力先に違う大きさを指定することができます。
コピー元と出力先の大きさは、それぞれ (srcW,srcH) と (destW,destH) で指定します。
copyResized()は指定された大きさに合わせてイメージを拡大、縮小をおこないます。
例:
$myImage = new GD::Image(100,100);
... いろんな描画 ...
$srcImage = new GD::Image(50,50);
... いろんな描画 ...
# 25x25 ピクセルの領域を $srcImage から
# $myImageの(10,10)に大きくしてコピーします。
$myImage->copyResized($srcImage,10,10,0,0,50,50,25,25);
---
参考:
http://homepage1.nifty.com/smastani/hp/smastani/pc/thumbn.html
630 :
名無しさん@お腹いっぱい。 :02/02/07 20:01 ID:wErLB+F6
文字列のすべての文字間に例えば/と入れたい場合はどうしたらいいですか? あいうえお-->あ/い/う/え/お こんな感じ。 とっても簡単なんだと思うんだけど、文字列置換ではやり方が思いつかないし、 splitとjoinでもなんか区切り文字が必要で、この場合区切り文字は無くて.. 頭悪くてすみません。お願いします。
632 :
630 :02/02/07 20:40 ID:wErLB+F6
ありがとうございます!! 斜め読みしたかぎり、理解できませんでしたが、 題名からして回答っぽいです。参考にさせていただきます。
>>629 GIFはたしかUNISYSが版権?持ってて、画像をくっつけるぐらいなら
問題ないけど、加工するとなると権利に引っかかる可能性アリだった
と記憶してる。
pngとかでできないのかな?
634 :
名無しさん@お腹いっぱい。 :02/02/07 22:36 ID:XOjr1cO9
>>633 最近のGDはGIFサポートしてないのぉ
635 :
名無しさん@お腹いっぱい。 :02/02/07 22:59 ID:cTwOw5ea
>>630 print join "/",(split //,"aiueo");
でいいんじゃないのん?
636 :
635 :02/02/07 23:08 ID:cTwOw5ea
あ、全角のコトを言ってたのね。 勘違いしてた。ゴメ。
っでぇあんな時間にレスがΣ( ̄□ ̄;) すいません、重なって書き込みだったらしく気づかずそのまま行ってしまいました(汗 で、あと・・・KCatchの使い方が良くわからなかったです(汗 今までいじる程度しかやってなかったんで・・・。
あ、すいません(汗 今のが623さんへです。 それと、625さん。それをファイルにして動かして見ればよいのでしょうか?
Perlのチャットを設置しようと考えています。 鯖への負担を減らしたいので、いくつかのCGIをテストしてその負荷を調べることにしました。 CPUの処理時間から負荷を量ろうと win2000+ActivPerl+AN HTTPDの環境で、スクリプトの上のほうに $CPU_start = (times)[0] ; #計測スタート 表示部分(普段リロードされる)の下のほうに $CPU_end = (times)[0]; printf("<DIV align=right>消費時間: %.3f CPU秒</DIV>\n",$CPU_end-$CPU_start); と書きました。しかしどのCGIも0.000〜0.010秒程度となり、比較ができませんでした。 Perlの負荷(チャットリロード時)を計る良い方法はないでしょうか?
どう削りたいのかによる CPUビジーとは限らんだろ、メモリかも知れんし、ディスクかも知れない Benchmark取れば君の言ってる事は出来るが それが何の役にたつのやら・・・・
>>639 自作して自分なりのダイエットを徹底的に行うって言うのも楽しい。
642 :
まゆ :02/02/08 09:23 ID:WCH/GiDk
ご回答ありがとうございます。 みなさんのアドバイスを参考に作成いたします。 初心者さま 参考になるページありがとうございます。
Perl-CGIからデータベース接続したいんですけど、 Java-ServletみたいなConnection Poolingってできるんでしょうか? 調べてみたんですが、mod_perlしか見つかりませんでした. 事情によりmod_perlは使えないので、その他の方法でなにかあります?
>>640-641 ご教授ありがとうございました。
Benchmark.pmの解読にいってきます。
お金を表示させようと思って、普通に表示したら お金っぽくないんです。 で、なんでかなぁ?って考えたら、カンマがないからだとわかりました。 $money='500000' に、3桁区切りのカンマをつけるにはどうすればいいでしょうか?
$data = "500000"; for($i = 0;$i < $length($data);$i++) { if($i % 0 == 2) { $res .= ","; } $res .= sybstr($data,$i,1); }
>>647 早レスありがとうございます。
なるほど、そういう方法もありですか。
(たぶん$length → lengthだと思うのですが)
個人的には、正規表現か、sprintfでなんとかならないかなぁと思ってるんですが、
どうでしょうか?
そこまで解っていて何故聞く? $l = reverse $l; $l =~ s/(\d{3})/$1,/g; $l = reverse $l;
あ、そうか。/gで全部処理すれば良いんだ。
>>644 多分 mod_perl + Apache::DBI じゃないと無理なんでないかな。
653 :
名無しさん@お腹いっぱい。 :02/02/09 00:46 ID:JKGEpIyz
>>646 $money='500000'
$money =~ s/500000/500,000/;
654 :
644 :02/02/09 00:47 ID:XYP1PySz
>mod_perl + Apache::DBI やっぱりそうなりますか ひとつだけperlプロセスを常駐させてそこからConnection受け渡し、とか いろいろ考えてたんですけど・・・ Hashの参照と中身(データ)を丸ごとプロセス間でやり取りってのは・・・ できないですよねぇ
655 :
名無しさん@お腹いっぱい。 :02/02/09 00:54 ID:R07+bRc7
perlに付け足してアクセスログをとる方法なんですが、 ブラウザの種類(携帯は機種も)、IP、SSID、日付、訪問回数等を 取得できる方法ありませんか? 今は # 適当なファイルをopenして open(LOG,'>>logfile'); # 情報を書き込む print LOG "$ENV{'DATE'} $ENV{'HTTP_USER_AGENT'} $ENV{'REMOTE_HOST'} $ENV{'REMOTE_ADDR'}\n"; # ファイルをクローズ close(LOG); ってやってるんですが、1回のアクセスで同じ情報が数回残るんです。 ちなみに掲示板のCGIの上のほうにつけてるんですが。
>>655 表示 1回。
書き込み 1回。
リロード 1回。
同一IPアドレスからは連続して情報を書き込まないようにすれば。
657 :
名無しさん@お腹いっぱい。 :02/02/09 01:12 ID:R07+bRc7
>>656 そのやりかたがわからないんです。
日付とSSIDの取得もわかりません。
もしわかるのであれば簡単なソースでものせてもらえませんか?
それじゃ解りまへん 自分が取りたい所で取れば良し
659 :
名無しさん@お腹いっぱい。 :02/02/09 01:37 ID:R07+bRc7
そうですか、ありがとうございます。 他の人が教えてくれるのを待ってます。
それ改造してんだろ? つーかSSID何かログれんのか? 自分で書いて何処でどう動いてるか分からんのか? 改造だったら改造スレにソース上げれば教えてくれるかもな
662 :
652 :02/02/09 02:26 ID:???
>>644 Storable, FreezeThaw, Data::Dumperなどで$dbhをプーリングする
・・・くらいしか思いつかなかったヨ。
> Hashの参照と中身(データ)を丸ごとプロセス間でやり取り
これをやってくれるのが上記のモジュール群だと思うのだが、どうか。
663 :
644 :02/02/09 03:32 ID:???
>>662 ありがとうございます.その辺から調べてみます.
664 :
名無しさん@お腹いっぱい。 :02/02/09 13:58 ID:ZyuqXnPG
半角英数字を全角に変換したいんですがうまく行きません。 require "jcode.pl"; &jcode'tr(\$string,'0-9A-Za-z','0-9A-Za-z'); これってなにか間違ってます?いろいろ調べたんですが、 頭の&無かったり'が::だったり、jcodeのヘッダでは最初の引数が*line で*ってなんだ??とか全然わからんです。お願いします。
666 :
664 :02/02/09 16:13 ID:ZyuqXnPG
そこはちゃんと読んで、すべてEUCでやってます。
どう上手く行かないんだ? 別段間違えて無い筈だぞ 一応最新Ver落としてやり直してみれ まさかターミナルがSjisとかじゃ無いよな?
668 :
664 :02/02/09 16:33 ID:ZyuqXnPG
そうですか。jcode壊しちゃったかな。 何も変換されません。 ちなみにターミナルってなんですか?
telnetクライアントなどシェルと入出力を行う環境(?)。
どんな環境でやってるのやら・・・ ターミナルはターミナルだ、訳せ :) &は関数のプレフィックスな、まあ有っても無くてもいい 'と::は意味が同じだが、まあこれもなるべく::を使え *と\はちょっと違うんだけど、まあ似たようなもんだから気にするな
671 :
664 :02/02/09 16:47 ID:ZyuqXnPG
ごめんなさい。本当にごめんなさい。 jcode.plが壊れていたようでした。 正常なものに更新したら無事変換されました。
>670 投げやりな回答が分かり易くてGood (・∀・)b
>'と::は意味が同じだが、まあこれもなるべく::を使え Perl5から非推奨だっけ?'
>>673 んだ。
Perl5からはパッケージデリミタは :: になっている。
' は後方互換の意味しかない。
型グロブとリファレンスについては、
速度の点や、スレッド有効での問題があるから、
素直にリファレンス使ったほうが良い。
675 :
名無しさん@お腹いっぱい。 :02/02/10 03:48 ID:TjXtgJNe
おしえて下さい。 208_978_4_37 この時、 208を取り出すにはどしたらいい? substrを使うかな?もっと簡単な方法あるよね?
(split /_/)[0]
1. $str = "208_978_4_37"; $str =~/^(\d+)/$1/; 2. $str = "208_978_4_37"; $str = (split /_/, $str)[0]; substrが一番簡単です。
678 :
名無しさん@お腹いっぱい。 :02/02/10 03:55 ID:TjXtgJNe
はや、 ほんじゃ substr使います。 >676 >677 ありがとうございました。
679 :
名無しさん@お腹いっぱい。 :02/02/10 11:23 ID:jVpiRjZn
良く本に載っているソースなどで local(*data, @cokkie); などを見かけますがこれの*dataの「*」の意味が理解出来ません。 どなたかご教授お願いします。
681 :
名無しさん@お腹いっぱい。 :02/02/10 11:38 ID:jVpiRjZn
>>680 お答えありがとうございます。
参照という事はつまり、上記の
local(*data, @cokkie);
では、$data @data %dataが全て局所化されるという意味でしょうか?
ポインタはCの経験が無いもので、ちょっと理解出来ないです。。
型グロブと参照は違うだろ。
意味は
>>681 であってる。
683 :
名無しさん@お腹いっぱい。 :02/02/10 17:16 ID:LAh5h/Xv
書き出したテキストファイルを Windowsで関連付けしたアプリで自動的に開きたいんですが、 どうすればいいんでしょうか? hoge.txt を書き出したとして、 それを関連付け実行(ダブルクリック)した動作が実現すればいいんですが…。 (エディタでhoge.txtが開ければOK)
system("hoge.txt");
685 :
683 :02/02/10 17:26 ID:LAh5h/Xv
>>684 ありがとうございます。でも、
「コマンドまたはファイル名が違います.」
と出てしまいます…。
686 :
名無しさん@お腹いっぱい。 :02/02/10 17:29 ID:SYLMgyWM
>>685 hoge.txtのパス通ってる?
同じフォルダに置いてやってみ?
あ、やっぱり失敗か。 systemの実装がshellexecute()なら動くけどね。
system("start hoge.txt")
689 :
686 :02/02/10 17:33 ID:SYLMgyWM
出来ないこともあるんか。 漏れが出来たから、、偉そうな事言ってごめそ
690 :
683 :02/02/10 17:36 ID:???
>>688 これでできました!
パスは通ってました。
>>686 DOS窓から関連付け実行する時も start〜 で行けますね。勉強になりました。
ありがつおございました。
#と言うか、こんな時間に即レスが帰ってきたことにビクーリ
691 :
681 :02/02/10 18:08 ID:wM0dEuj6
>>682 *data
↑は型グロブいうんですね。知らなかったです。で検索して見たところ
Knave Web講座 というすごくわかりやすい解説がしてあるページにたどり
付きまして、なんとか理解することが出来ました。
>>680 さんともどもありがとうございました。
クッキーを設定するにあたって質問です。 Set-Cookie: ****** は必ず Content-type: ******* の1行下に記述しなければいけないのですよね?下の例であってますでしょうか? 例: Content-type: text/html\n Set-Cookie: web=$hoge\n HTML記述〜
>>692 逆。
Set-Cookie: web=$hoge\n
Content-type: text/html\n
後、有効期限書かないとすぐ消えるよ。
数字のリストから空いているのを探すのって出来る? たとえば 1,3,4,5,6,7,8,9 とかあったら2を返すようにしたいんですけど。
>>694 階差数列を利用すれば?
$a[$i + 1] - $a[$i] = 1
となる。この条件に合わなければブビー!
696 :
名無しさん@お腹いっぱい。 :02/02/10 20:14 ID:SYLMgyWM
@char = (1,3,4,5,6,7,8,9); %char = map { $_, 1 } @char; for(1 .. 9) { print if not exists $char{$_} } イマイチ?
grep { ! { map { $_ => 1 } @hoge }->{$_} } (1..9);
698 :
デビデビ :02/02/10 20:38 ID:TkcMar2j
Gimp-Perl のスクリプトを X はインストールされてるけど、 X サーバが走ってないマシンで、動かす方法はあります?
>>693 OH!?だから動かなかったのか。。?
どうもありがとうございました。
700 :
:02/02/10 21:26 ID:???
メールを読んでその代価としてお金がもらえます。当然、登録・維持全て無料。
広告メールの配信企業は他にも多数あります。しかし登録したはいいがメールが来ない、懸賞は自作自演、
果てには個人情報収集目的のサービス実態なし、なんてサイトまであります。
その点このサイトは月10通〜20通の配信実績がありますし、何より住所・電話番号等不要なので匿名性が高く、安心。
それにちゃんと送金してくれます。私も既に3回送金してもらいました。
ポイントが加速度的に増えるサービス、いくつかありますので仮登録したらCheckしてみて下さい。
※注意※
必ず 本登録 して下さい。仮登録のままではポイントが加算されません。
本登録するには アンケート に答えてから 本登録スタートボタン (メールでURL配信される)を押します。
興味のある項目を答えるアンケートでは全てチェックを入れるのが吉。その分配信メールが増えてポイント増。
本登録スタートボタンのURLが載ったメールが来るまで数日〜数週間かかりますが、待っただけの価値は十二分にあります。
時間がかかるケースが多いので早めに仮登録を済ましておくことをお勧めします。
その後の本登録維持も忘れないようご注意下さい。(何かと面倒なのも広告出稿者を多く集める為の策のようです)
Ariga10.com
http://www.ariga10.com/?id=207008 こちらから登録できます。記入欄は少ないので時間はほとんどかかりません。
>>701 あれだろ。
スレ立てて指摘されたんで質問直しなんだろ。
マターリマターリ
>>696 >>697 を参考にして
grep { ! { map { $_ => 1 } @hoge }->{$_} } ((sort @hoge)[0]..(sort @hoge)[$#hoge]);
てな感じか?
704 :
703 :02/02/10 22:56 ID:???
705 :
名無しさん@お腹いっぱい。 :02/02/11 00:20 ID:rEaHJsWI
$sort = [sort { $a <=> $b } @hoge]; print grep { ! { map { $_ => 1 } @hoge }->{$_} } ($sort->[0]..$sort->[$#hoge]);
706 :
名無しさん@お腹いっぱい。 :02/02/11 00:21 ID:rEaHJsWI
直結すると長くなるから分けただけで↓でも。 grep { ! { map { $_ => 1 } @hoge }->{$_} } ((sort { $a <=> $b } @hoge)[0]..(sort { $a <=> $b } @hoge)[$#hoge]);
foreach (@hoge){......}とかで配列処理する場合、今現在、 何番目の要素なのかを取得する方法って有る? いつもブロックの中で$i++とかして参照しているけど、 いまいちスマートで無い気が。
>707 それが一番スマート。
709 :
名無しさん@お腹いっぱい。 :02/02/11 02:54 ID:fuw0wehn
SSIについてここで質問してもイイ?
>>709 Perlと関係ねーだろ。
CGI質問スレのほうがまだまし。
>>708 ふ〜む、やっぱりこれしか無いか。ありがd
>>707 =711
for (my $i = 0; $i <= $#hoge; ++$i) {
...
}
という手も有り。
150ぐらいの単語をいっきに表示させたいんですけど,配列をforeachでまわすのと, 配列へ入れずにファイルをwhileでまわすのとどっちが効率いいんでしょう?
>>713 効率というのはメモリ効率なのか処理効率なのか分からないが
この場合は(単語1つ1つが膨大なサイズでなければ)
前者の方がメモリを喰らうけど速いなり。
もっとも、1・2回の繰り返しじゃ体感できるような差はないと思われ。
>714 レスサンクスです。参考になりました。 実はチャットの名前の色のリストなんですね。たいした量じゃないです。(笑
dbmopen(%FOO, foo, 0666); for(0..$bar){ @data = split(/\0/, $all_data[$_]); unless(defined($FOO{$data[0]})){ print"処理:新データとして書き込み"; }else{ print"処理:旧データと一部差し替え"; } } print"最終処理" dbmclose(%FOO); ソケットで得た複数のデータ(名前、所属、個人番号、等)を、 $FOO{個人番号}に収めて管理するプログラムを作っています。 データは正しく受け取れて、一通りの動きはしてくれるのですが、 なぜか最終処理の部分まで到達してくれません。 不思議な事に、ローカル環境(Win2000+Apache、Win98+Apache)では最終処理まで到達します。 解決方法をご存知でしたらご教授いただければ幸いです。
>>716 print"最終処理"
; が最後に抜けているとか?
\nないからバッファリングのデータ(最終処理)が吐き出されないとか?
>>716 野暮だが・・・
Perl5ならdbmopenじゃなくtie使ったほうが良いよ。
>>716 Socket扱うならバッファリングは行わないのが吉。
$| = 1;
720 :
名無しさん@お腹いっぱい。 :02/02/11 23:18 ID:rEaHJsWI
>>712 値にアクセスする時 $hoge[$i] になって遅くなる。
とラクダに書いてある。w
continue { $i++ }
とかはどうかな。。あんま変わらんか。
721 :
707 :02/02/11 23:53 ID:???
>>720 ラクダ見たけど、遅くなるなんてどの辺に書いて有るんでせうか。
>>712 そういうことで、改めてラクダ読んだら、第2章のforeachの説明
のところで、明確にforeach中で、要素の番号を知る方法は無い
と書かれていました。で、隣り合った要素を比較するなどの場合
は、
>>712 の方法が一つの解として紹介されており、ラクダを良く
読まねばと思う、今日この頃。
722 :
720 :02/02/12 00:14 ID:ed1xHjmG
>>721 たぶん同じページやでw
ラクダ第2版日本語のp.114、
> また、こちらのほうが高速なのは〜〜〜アクセスできるからだ。
って奴。
そういうことはちゃんと読んでから言えw
723 :
720 :02/02/12 00:15 ID:???
あ、次のページだったねw
725 :
たま :02/02/12 00:37 ID:/NrbiZO4
727 :
:02/02/12 01:38 ID:???
%Link = ('1'->'www.yahoo.com', '2'->'www.google.com'); %Link = ('2'->'www.google.com', '1'->'www.yahoo.com'); while(($Name,$Addr) = each %Link){ print qq( [ <A href="$Addr">$Name</A> ]); } で出力が同じなのはなぜスか? リストのほうで並び替えても出力(並び方)が変わらんのだが・・・ いい書き方あれば教えてください。
ハッシュは取り出す順番がバラバラ、、 って前もどっかに書かれてたな、、 sort key %Link にするか、どっかのモジュール(名前忘れ)使うかどっちかがいいと思われ。
729 :
727 :02/02/12 02:01 ID:???
>728 フム,sort key %Link のほうを調べてみます。 ありがとう!
ああそうか,実際は'1','2'じゃないからsortじゃ工夫せんと無理だな〜 '1_藍上尾', '2_柿苦毛子'にしてwhileでまわして,表示する直前に'1_'を消すとかか。 うーむ,めんどいな。
>>727 -> ではなく =>
> どっかのモジュール
Tie::IxHash
> 728-729 key ⇒ keys 1_, 2_ などのキーをソートしたいなら、sort {$a <=> $b} %Link だけど、 必ず数値+_形式のキーが来ると決まっているのなら、末尾の_を取り除いて 普通の配列にしてもいいネー。
全然気付かんかったw < =>,keys
ちなみに
>>732 sort { $a <=> $b } keys %Link
みんな眠いから凡ミス?
どっかのスレッドにActivePerlを使ってて、 CGItempXXXXというファイルが残るって書いたものですが、 解決いたしました。
736 :
名無しさん@お腹いっぱい。 :02/02/12 05:49 ID:PUJwyJrl
>735 よかったねー。 なんかいい方法あったの?
>>735 >どっかのスレッドに
書き逃げでもしたの?
>解決いたしました。
解決方法も書き込めば、ログ読んだ他の人も助かるかもよ。
>>727 そのままだとひとつのサイトに対して
「ハッシュのkey」と「ハッシュのvalue」の
2つづつしか要素を持てないから
いっそのこと
%site = (id => 1, url => 'www.google.com', name => 'Google', comment => '便利!');
みたいな形式にしちゃって
push(@list, \%site);
していってそれをソートして表示してみるっていうのはどう?
foreach $this (sort {$a->{name} cmp $b->{name}} @list) {
print $this->{id}.'<a href="'.$this->{url}.'">'.$this->{name}.'</a>'.$this->{comment};
}
これならひとつのサイトに対していくらでも要素を持てるし、
ソートもID順とかURL順とかいろいろできるからいっそう便利かなーと。
739 :
print<<"EOF"; :02/02/12 15:27 ID:sXZ1u4GK
Perlでヒアドキュメントって嫌われているんですか?
>>739 何故?普通にバリバリ使いまくってますが。
>>739 多分ヒアドキュメントを書くときソース中でインデントできない
とかいうやつですか?
先頭のインデントを出力する前に正規化で削除すれば綺麗になる
し、ソース中の見栄えもよくなるからよろしいかと思われ
てかまったく関係なかったらゴメソ
確かにインデントしてないヒアドキュメントは読みにくいかも。 自分の場合はキレイにしないでそのまま(\t付きのまま)出力してるけど、、 クックブックの24ページにのってるね。<正規
>>740-742 レスありがとうです。
そうです、
>>741 さんの言うとおりインデント出来ないのが…。
と思ってたら、やっぱり回避策があったんですね。
頑張って自己満足なソースの美化に尽くします(笑)
あ、そうだ。ベンチマークでもとってみるか。ヒアドキュメントの。意味ないけど。
>>743 >あ、そうだ。ベンチマークでもとってみるか。ヒアドキュメントの。意味ないけど。
そういう心がけが上達の道だと思ったり。何となくだけど。
料理本以外にもEffective Perlは個人的にはお薦めなんでご覧あれ。
745 :
名無しさん@お腹いっぱい。 :02/02/13 07:36 ID:u18sBL1T
ヒアドキュメントでインデント、どうやれば出来るんでしょう。 数時間検索したけど見付けられず…。 どなたか解説、お願い出来ないでしょうか。
($hoge = <<_HERE_) =~ s/^\s+//mg; ... _HERE_
747 :
745 :02/02/13 09:47 ID:???
>>746 /igsoe位しか修飾子つかったことが無かったのですが、
/m 文字列を複数行として扱う、はこう使うものなんですね。
勉強になります。ありがとうございました。
関係ないが、どっかのPHP本でPERLはヒアドキュメント中で 変数を展開できないとか書いてあって、鬱。 こういうもんなんすかね、一応プロフェッショナルブックとか 名うってあったんですが(藁
>748 酷い本だな。
ちとおしえてください。 HTMLファイル内の記述で、.cgiファイルを起動させたいのですが、 どうしたらいいですか?<img src=xxx.cgi> だと、HTMLに画像跡がでるし。 お願いします。
イメタグで1x1の透過gif出力するとか
>751 ありがとうございます。消えたました。 imgタグで起動してるか心配だけど試してみます。
753 :
名無しさん@お腹いっぱい。 :02/02/13 18:11 ID:KS70lsn0
$temp = int( 18.9 * 100 ); で,$temp = 1889 になったんだけどなんで? ActivePerl 5.6.1.630
>>753 18.9を2進法に変換してみると分かると思われ。
>>753 ま、可能な限り不自然にならないように、いろいろ苦労してるんですよ。
756 :
名無しさん@お腹いっぱい。 :02/02/13 21:34 ID:xqc5dBTw
>>756 簡単に言うと「Perlは人と同じように数値を理解しているわけではない」ってこと。
これは仕様なんで注意して扱うしかない。
どうしても高精度な計算がしたいならモジュールを使う事。
#!/usr/bin/perl
use Math::BigFloat;
my $num = new Math::BIgFloat('18.9');
print int($num * 100);
__END__
っと、一文字間違えた <my $num = new Math::BIgFloat('18.9'); >my $num = new Math::BigFloat('18.9');
>>758 「難しく」言うと、どのような理屈になるのでしょうか?
できるだけ付いてこられるように頑張ります。
>>760 とりあえず、Perlが数値を表現するのに確保しているメモリの量では、
18.9を正確に表現することは出来ない、ってことです。
これ以上詳しく言うと長くなりすぎるんで「浮動小数点 内部表現」とか「浮動小数点 フォーマット」
とかで検索すると多分ずらずら出ます。
(でも大抵はその仕様について書かれてるだけなんでイメージしづらいんだよな)
762 :
753 :02/02/13 23:23 ID:???
>>761 精度(?)云々というのはなんとなく頭の片隅にはあるんだけど
int( 18.9 * 10 )=189
int( 18.9 * 100 )=1889
int( 18.9 * 1000 )=18900
なんで,*100 の時だけ?というのが腑に落ちないんだな,これが
>>762 で、浮動小数点については調べてきたのか?
>>763 そこはそれ
>>755 ということ。
具体的に何やってるのかは知らんが、善処した結果なんだろうね。
まぁ俺も妙だとは思う。int()を外すと1890になるのも不可解だし。
>>764 構造知らずして結果の食い違いは理解できないぞ。
754の解説をお願いします
>768 うろ覚えだけど, 2進数では 整数部分は 1, 2, 4, 8, 16, 32, 64...と位が上がっていって 小数部分は 1/2, 1/4, 1/8, 1/16, 1/32...と位取りされている んじゃなかったかな。
ちなみにprint $nとprint int $nの結果が違う事だが、 Perlのprint()関数は、C言語のprintf()、 またはそれに準ずるフォーマットルーチンを使って実装されていて、 不動小数点数はある桁数(これは自由に設定可能である)で繰り上がる仕様になっている。 この現象は "print 2/3" 等とした時にも見られる。 ところが、int()というのは小数点以下を黙って全て切り捨てる。 これにより、答えが整数であるべき時でも"print int $n"と"print $n"に差が生じる事があるのだ。
>>762 53bit同士の計算で, 結果の54bit目が1だと切り上げされるからじゃない?
18.9 ≒
10010.111001100110011001100110011001100110011001100110
10 = 1010
100 = 1100100
1000 = 1111101000
10000 = 10011100010000
100000 = 11000011010100000
18.9*10 ≒
10111100.1111111111111111111111111111111111111111111111
->10111101
18.9*100≒
11101100001.1111111111111111111111111111111111111111110
18.9*1000≒
100100111010011.111111111111111111111111111111111111111
->100100111010100
18.9*10000≒
101110001001000111.111111111111111111111111111111111111
->101110001001001000
18.9*100000≒
111001101011011001111.111111111111111111111111111111110
773 :
名無しさん@お腹いっぱい。 :02/02/14 14:21 ID:+0g/R+F6
Perlでファイルを取り扱うモジュール(というかクラス?)を作ったのですが、ファイルハンドルがインスタンス間で共有されてしまってイマイチ使いづらいです。 同じクラスのインスタンスを複数作った場合、インスタンス間でファイルハンドルを別々に持つようにできますでしょうか? $file1=new FileClass('read.txt'); $file2=new FileClass('write.txt'); $string=$file1->getLine(1); $file2->insert($string); $file1->close(); $file2->close(); みたいな。 ファイルハンドルに参照とか無名配列みたいのがあれば自分で解決できそうだけど聞いたこと無いので。
774 :
名無しさん@お腹いっぱい。 :02/02/14 14:23 ID:X8oQt8gz
perlで、あるhtmlファイルから、見出しタグ(<Hn>ほげ</Hn>)とその中身だけを書き出したいんですが、 どうすればいいのでしょう・・・。 (結果として、以下のようになる) <h1>ああ</h1> <h2>いい</h2> <h3>うう</h3> <h2>いい</h2>
775 :
名無しさん@お腹いっぱい。 :02/02/14 14:34 ID:0AhamLLI
print $1 if m|(<([hH][1-6])[^>]*>[^<]*</\1>)|o;
776 :
774 :02/02/14 16:11 ID:peM7yPQ9
どうもです
>>775 でも、
$filename = "test.html";
open(IN, $filename) || die "$filename: $!";
open(OUT,">result.html") || die "result.html: $!";
while(<IN>){
chomp:
print OUT $1 if m|(<([hH][1-6])[^>]*>[^<]*</\1>)|o;
}
close(IN);
close(OUT);
で、結果が0k。。。。なぜ?
test.htmlの中身は、以下の通り
aaaa<H2>えいちに</H2>bbb
<h1>えいちわん</h1>
777 :
774 :02/02/14 16:18 ID:peM7yPQ9
もとい、chomp:でなくchomp;としてます。
>>773 使用法なんてどうでも良いから実装を見せろよ。
多分 "open HANDLE" とかしてるんだろうけど。
とりあえず標準ライブラリの Symbol と IO::Handle および IO::File のソースを読めば幸せになれるかもな。
関係ないが、クラスの名前に"Class"をつけるのはアホらしいと思うのは俺だけか。
print $1 if m|(<[hH]([1-6])[^>]*>[^<]*</[hH]\2>)|o; としてみたらいけた。()のネストってこうなるのか。
780 :
773 :02/02/14 17:07 ID:???
>>778 非常にありがd。ついでにスマソ。
で、ご指摘どおりsymbolを読んで、とりあえず幸せになれた。
ファイルハンドルにスカラー変数が使えるとは。
クラスの名前にClassなんて、いつもは付けてないけど今回は念のため。
781 :
名無しさん@お腹いっぱい。 :02/02/14 22:58 ID:oPnLkVh5
すっごい初歩な質問でスマソなんだけど 掲示板で書きこみ者の任意の回数だけ要素(例えばアイコンとか)を 繰り返し表示させるスクリプトを組み多淫です。 うんこのアイコンを選んで「10」とエリアに入れてpostしたら うんこアイコンが10個出る、見たいな感じで。 この繰り返させるスクリプトの書き方がわからんのです どなたかわかる方いたら教えてください。
782 :
名無しさん@お腹いっぱい。 :02/02/14 23:33 ID:7pMXJhas
多淫。
多淫だな。
どうすればいいんですか? を変換しようとするとき どうすれ売淫ですか になって、よく困るな。そういえば。 こういうことやるから、また売淫ででるな。
>>781 アイコン<select name="icon">
回数<input name="kaisu">
-------------------
for (1..$in{'kaisu'}) {
$icon.="<img src=$in{'icon'}>";
}
-------------------
>785 こんな基本的なコードでも人のコードは勉強になる。 なるほど,すごくシンプルだ。おれなら"i="云々書いてるとこだった。
$icon = qq{<img src="$in{'icon'}">} x $in{'kaisu'};
788 :
781 :02/02/15 00:55 ID:LCJ4YCpt
>>785 >>787 THANXです!
今スクリプトをこねくり回してますがうまいこといかないです。
成功したら完成形を報告します。うー…
789 :
名無しさん@お腹いっぱい。 :02/02/15 06:20 ID:WCBRMEef
どうも
790 :
名無しさん@お腹いっぱい。 :02/02/15 06:20 ID:oL67ZYlw
ごば、、
>>多淫 汚染チェックと上限チェックを忘れないようにな。頑張れ。
> <img src="$in{'icon'}"> > $in{'icon'}の値が「xxx.gif" onLoad="JavaScript:ウケケ」に書き替え られて送信されてきたらどうする?チェックはキッチリやっておこうネ! そうしないとセキュリティホールになったりして。
>792 とほほみたいなこと言うなよ・・・
794 :
♀ :02/02/15 16:07 ID:???
したらばの「管理人メニュー」に意味不明のものがありました。 FAQにも書いてありませんでしたし、 サポート掲示板に書いても反応がありませんのでこちらでお願いします。 >Getによる投稿を認める Getってなんですか?
>>794 CGI側:データ受け取りに環境変数を使うか標準入力を使うか。
ブラウザ/サーバ側:HTTP0.9でも動くか否か。
ファイルハンドルにスカラーを使うとき、printで出力するときはどうするのでしょう。 open(FILE,'>text.txt') print FILE 'abcd'; close FILE; の代わりに $file=1; open($file,'text.txt'); print $file 'abcd'; close($file); とやるとprintで死ぬのですが。<>でくくってもだめだったです。
>>793 セキュリティホールに気を配るのは基本だと思われ
くだらない質問かも知れないけど、@a[1]と($a[1])って等価? ちょっと気になったもので。
>798 「1」はダメだろ。
ファイルロックって書き込む時だけすればいいの? 読む時もロックしといたほうがいい?
>>803 読み込んでる最中にロックされると困りませんか?
805 :
798 :02/02/15 18:19 ID:???
>>802 中身のないスカラーはFH代わりに使えないけど、なにか代入したら使えましたよ。
もっとも、私は標準ライブラリsymbolの
$sym = gensym;
open($sym, "filename");
のgensymの意味がわからないのでテケトーにやってみた、というだけの話ですけど…。
まぁ、モジュール化とかの理由で通常のファイルハンドルが使えない状況なので無理にスカラーをば。
で、1じゃだめですか?
>804 なるほど。つまりやめとけって意味ですか? レスの意味はよく考えたんだがちょっと想像できない・・・。 人が読み込んでるときに自分が読み込めないのは無駄で遅くなる原因になるっぽいけど・・・
807 :
名無しさん@お腹いっぱい。 :02/02/15 19:33 ID:u5RDXGaq
$file=1; open($file,'text.txt'); print $file 'abcd'; close($file); これは、やっていることは以下といっしょ。 open(1,'text.txt'); print 1 'abcd'; close(1); よって、君がいう「通常のファイルハンドル」となんら代わり無い。 そんなことより、open($file ,'> text.txt') でしたという落ちはなしにしてくれ。
>>800 @hoge[] はスライス、($hoge[])はスカラーが一個のリスト。
>>803 読むときもファイルロックすべき。
読むときにロックしないで、読んでる最中にいきなりロックかけられたら困るでしょ?
>>804 の答えはそういうこと。
> 人が読み込んでるときに自分が読み込めない
いいえ、これはLOCK_EXでなくLOCK_SHを使えばいいだけの事。
この辺り、過去ログでJAPUさんが詳しく述べているとこあり。
過去ログ閲覧をお勧めする。
>808 2ちゃんねるの過去ログなんて、これほどあさりにくいものはないっすよ 横やり失敬しました(笑)
810 :
800 :02/02/15 23:15 ID:???
>>808 あ、それはわかるんですけど、
実際使う上で違いがあるのかどうかを聞きたかったんです(^^;
>>810 あ る に 決 ま っ て る だ ろ !
ランキングで困っています。 2_45_5_74 4_36_3_53 8_83_2_27 こんな感じのデータがある時、12_45_5_74 の 1番目の12と3番目の5を足してその値を大きい順に 並ばせるにはどうしたらいいでしょうか? データを開いて、whileで各、足していって、 データ保存 保存したデータを大きい順に並べていって、 データ保存 こんな感じを感じを考えているのですが、 一つにまとめる方法とかありますか? おねがいします。
速さ求めるならクイックソートでもすれば? 数値の大きさ比べるだけなら実装も楽でしょう。
sort()使えば。
挿入ソートとか。 計算後のデータを記憶する際に大きい順になるように記憶させれば。
> 812 open(READ, $readFile); while(<READ>){ if ( /^(\d+)_\d+_(\d+)/ ){ $sort{$1+$2}++; } } close(READ); open(WRITE, ">$writeFile"); for ( reverse sort keys %sort ){ print WRITE "$_\n"; } close(WRITE);
>>816 いちいちソートするのって効率悪くないですか?
> 817 > ソートだけにそーっとすればOK (ヮ
819 :
名無しさん@お腹いっぱい。 :02/02/16 02:21 ID:smdGl30B
$moji = "a'a'a'a'"; となっているのをs//やtr//などを使って $moji = "a\'a\'a\'a\'"; という結果にしたいのですが、どうしたらいいでしょうか?
> 819 > $moji=~ s/'/\\\'/g;
「断罪!断罪!また断罪!!」 改め、元の「賛成の反対の反対ナノだ!」に戻ります。
822 :
名無しさん@お腹いっぱい。 :02/02/16 02:27 ID:smdGl30B
>>820 それはやってみました。以下のエラーがでます。
syntax error at test.cgi line 6, near "$moji~"
Execution of test.cgi aborted due to compilation errors.
>822 =~じゃなくて ~= にしてない?
> 822 > $mojiに 漢字コードが入っているのでは?
825 :
名無しさん@お腹いっぱい。 :02/02/16 02:37 ID:smdGl30B
>>823 ありがとう!!
自分のぼんくらミスに気付きませんでした。(感謝)
>>820 それじゃ予め \' となっているものも置き換わので、後読みするのが吉。
s/(?<!\\)'/\\'/g;
827 :
名無しさん@お腹いっぱい。 :02/02/16 02:54 ID:smdGl30B
828 :
名無しさん@お腹いっぱい。 :02/02/16 03:26 ID:hJTYeQVW
>>805 素直にIO::File使うのじゃだめ?
use IO::File;
my $fh = new IO::File "text.txt", "w";
die "なんか開けませんでした:$!" unless $fh;
print $fh "abcd";
$fh->close;
>>798 IO::Fileみたく型グロブを使うとか。
open HANDLE, 'hoge.txt';
$fh = *HANDLE{FILEHANDLE}; #$fh = \*HANDLE;
print $fh 'HOGE';
最近のperlなら *GLOB{IO} って形じゃないかしら、と記憶。
>803です。 >808 なるほど分かりました。そうします。
スクリプトをできるだけ重くしないコツってどんなのがあります? スクリプトを分割するってのは意味あるんでしょうか?
>>832 例えば1〜10を足すとき、
for($i=1;$i != 10;$i++)
{
$sum += $i;
}
と、
$sum (10 * 9) / 2;
の2種類がある。
まぁ、こんなそのものズバリの公式がある場合は少ない。
基本的にはその処理をいかに少ない命令で実現するか。
sprintfとかは重いらしいwからそう言うのも考慮して。
ループの外でもできる処理はループの外に出すとか。
ループ内でうまくnext;last;を使うとか。
なお、分割したところでコード量は減らない。
むしろ各種オーバーヘッドがかかったり。
なぜ分けるかと言えばその方がわかりやすいから。
関連の機能をまとめてモジュール化しているわけです。
834 :
名無しさん@お腹いっぱい。 :02/02/17 12:42 ID:jcHWzcYr
他人のソースを見て勉強しようと思うのですが、 誰のソースは勉強になる、誰のはやめとけっていうのは やっぱりありますか?? 全然perl初心者なので、そのへんの区別がつきにくいです、、
>>834 初心者ならどれ読んでも参考にはなるかな?
と、言うか読めるのか??大変だぞ。人のソース。
>>835 応、簡単な入門書などを読んで、すげー単純な掲示板などは
作れるようになったくらいのレベルです。
やっぱりもっと本などで十分に勉強してからのほうがいいのかも、、、
コードをまねることはないんだよ。 おもしろいと思った処理を自分の書き方でパクればいい。 まぁ、クイックソートとかリストとかデータ構造とアルゴリズムは知って置いて良いかも。
>833 なるほど,意味ないんですか。 まぁできるだけ意味のないこと(アクセスログ採取とか)はやめとけってことですね。 >834(>836) そのくらいのレベルならここに定着したら良いかと。
Win+ActivePerlなのですが、 Perlを実行する時は、コマンドプロンプトからですか? ダブルクリックでは実行できますか? あと、Perlの拡張子は何ですか?
840 :
名無しさん@お腹いっぱい。 :02/02/18 02:12 ID:FZ6+Jcwo
あげ
841 :
:02/02/18 02:22 ID:g517xzDH
なぜファイルハンドルという概念が必要なんでしょう
>>834 人によって変数の書き方や改行の仕方の癖があるので
色々みてみて、自分の書き方に近い人、読みやすいものを
さがすといいのでは。
Perlだと、人によってはすごくトリッキーな、
もはや芸術的なコードを書く人がいますんで。
いいんだか悪いんだか最初はわからないかもだけど。
> 839 DOS窓から次を実行。 % perl test.pl --- 拡張子はなんでもOKだが、一般には.plを使う。--- > 841 ファイルとお話するためです。しゃべり専門と聞き専門がいますが、 しゃべり専門は、考えたことを一気にしゃべり倒すのか少しずつしゃべって いくのかタイプが分かれますが、途中で切り替えることもできる器用な人です。 聞き専門の人は話が今どこまで進んでいるかを憶えておかないといけない。
中身 @zzz = ("a","b","c","d","e","f","g","h","i","j","k"); $xxx = 3; 表示 abc<br>def<br>ghi<br>jk<br> 「@zzzを$xxx回ごとに<br>で区切って表記」 と、いう処理をしたいんですが、どうしたらいいでしょうか?
845 :
名無しさん@お腹いっぱい。 :02/02/18 09:33 ID:9k5avLiX
>841 同時に開くファイルが、1つであるとは限らないからです。 2枚以上のファイルを開いているときに、FHをつかって、 どっちに仕事させたいのか指定するのです。
846 :
名無しさん@お腹いっぱい。 :02/02/18 21:03 ID:Lwlv3uzp
ここでいいのかな? BBS作って、書き込みがあったら管理人のメアドに書き込み内容を自動送信するようにしたんです(sendmailで)。 自動送信するのとしないのとでは30秒程度のタイムラグがあります。sendmailの設定が悪いの?
>846 その質問内容で、君の相談内容が理解できたやつは神。
>>846 MZ-80じゃあるまいし、書き込み変数をそのままsendmailに投げて送信するだけで30秒も掛からないっすよ。
851 :
8484 :02/02/18 21:20 ID:zt3xmvgw
プチワラねえ。
プチワラなんでアクセス制限されないんだ?(笑)
> 844 こんな感じ? ;# 設定 my( @zzz )= ('a'..'k'); my( $xxx )= 3; my( $cat ); ;# 処理 for ($i=$[; $i<=$#zzz; $i+=$xxx){ $cat.="$zzz[$i]$zzz[$i+1]$zzz[$i+2]<br>"; } print $cat,"\n";
855 :
844 :02/02/19 00:16 ID:???
>>854 うひゃー(;д:)
出来ました。ありがとうございましたぁ(;_;)
あぁ、しかし、凄い初心者な質問だったということが
解答から見て取れる・・・ 鬱だ。(2週間目で初心者そのものですが)
>855 いやめんどくさそうだから誰も書かなかったんだと思うよ。
857 :
名無しさん@お腹いっぱい。 :02/02/19 01:13 ID:u2bv8Yg8
ボディに含まれる1000とか572とか0とかって何なんでしょうか?
で、これを飛ばすのにはどうしたらいいのでしょうか?
1000
<html><head><meta http-equiv="Content-Type" content="text/html; charset=x-sjis"><base href="
http://pc.2ch.net/test/read.cgi/php/ " target="body"></head><body><font size=2>
<a href="1003539977/l50">1: WebProg板の名無しさんを決めよう (299)</a>
<a href="1013945931/l50">2: ASP VS PHP (24)</a>
(略)
<a href="987850713/l50">304: PH
572
PとJAVAさぶれっと (26)</a>
<a href="987470871/l50">305: デザイナーとの連携 (28)</a>
(略)
</body></html>
0
>>857 HTTPのリザルトコード・・・にしては不自然。
何の話よ?ところで。
socketでsubback.htmlを所得したらそんなのが混じるんですよね まあtelnet系でも混ざってるんでPerlに限った話でもないでしょうし ブラウザソースでは消えるんですが。 でも整形する時にはかなり邪魔なのでどうしたものかなぁ、と。。。
>>856 実は今、改めてみてみると、
$xxx= 3;
$xxxが絶対"3"で無ければなりたたない解答だと言うことに気付いた…(爆)
これじゃ$xxxが5だった場合に即破綻してしまう(汗)
う、うーん・・・。結構難しいのか・・・?
と、取り敢えず
>>854 をヒントに頑張ってみよう(;´д`)
ヒントは確かにもらえた感じがする。
お礼も「ありがとう」ぐらいしか言えないし、頼ってばかりでもなんだし(汗)
861 :
名無しさん@お腹いっぱい。 :02/02/19 02:21 ID:uiFxg8op
@zzz = ("a","b","c","d","e","f","g","h","i","j","k"); $xxx = 3; $i =1; foreach(@zzz) { print $_; if ($xxx == $i) { print "<BR>"; $i = 1; } else { ++$i; } }
my $i = 0; foreach (@zzz) { print; $i++; $i %= $xxx; print '<BR>' unless $i; }
863 :
862 :02/02/19 02:26 ID:???
あう、かぶった。
>>857 ,858
chunk-part-size の 16進表記
詳しくはHTTP/1.1仕様書などを見れ
>>861-862 あっ、お二方、ありがとうございます(;-;)
しかし、同じ結果処理に色々な解答が出るものだなぁ。
いつか質問者じゃなくて解答者になれるんだろうかなぁ。
頑張ろう(>_<
>865 一つの問いに数多の解答、がPerl。 半年がんばれば、回答者に入ってくると思うよ。
>>864 ありがとうごぜーますです。。
ということでHTTP/1.0にしたらなんとなく解決しましたです。。
う、、これは逃げなのか、、(^_^;)
868 :
864 :02/02/19 07:21 ID:???
質問です。 例えば現時点でWEBプログラム板の上位にあるスレ のスレタイトルをHTMLにインクルードしたい場合、 どんな処理をしたら良いのでしょうか。。
>869 対象を取得し,解析し,変換し,書き出す。
>>871 いや subject.txt は確かにそこにあるんだけど、
Monazillaに属する2ch専用ブラウザじゃなきゃ読み込めないように
しちゃったんだよね。。一応読み込む方法はあるんだけど。
873 :
名無しさん@お腹いっぱい。 :02/02/20 02:43 ID:zdJQxaGu
分からなくて困っています。 以下は『1である限りはif文以下を実行せよ』という スクリプトなのですが、何が1なのでしょうか? 『何かが1である限り』ではなく、『偽である限り』という意味なのでしょうか? それなら何が偽なのでしょう? while(0)とすると何も実行せずに終ってしまいます。 #!/usr/bin/perl -w $| = 1; $test = "mona"; while (1) { if ($pid = fork) { wait; } else { print "子プロセス\t$test\n"; } } よろしくお願いします。
0 は偽、1 は真。 while( ループ継続条件 ){ だから while (1)は、何時までもやってろゴルァ(゚Д゚)y-~~
>>873 > 何が1
while の条件が1でしょ。常に真だろ。
あと、何でwaitpidじゃなくてwaitしてんの?
876 :
名無しさん@お腹いっぱい。 :02/02/20 03:41 ID:3mg+TPcG
>>874 あ、そうでした。
0が偽、1が真だった。
でも・・・何を評価して真か偽かを決めてるんですか?
ごめんなさい。
>>876 >0が偽、1が真だった。
だよね。
だから、while (1) { は
while (真) { っていうワケで常に真。
878 :
名無しさん@お腹いっぱい。 :02/02/20 05:05 ID:dXs9ILx0
>>877 それだ!
うう・・・ありがとうございます。
そしてお休みなさい・・・。
偽 0 真 0以外 でないの?
undef
空文字列も偽
"0"
>879 条件式には-1の場合もあり得る。
正規表現に変数は使えないのですか? $a = "aaa.jpeg"; $oks = "jpeg"; if($a =~ /\.$oks$/i){ print "aru"; } ファイル名の拡張子を調べるルーチンを組みたいのですが・・・
>>884 「〜はPerlでは出来ないのですか?」と聞く前にまず自分が間違っていないかどうか確かめろ。
つーか、
>>884 の結果は「aru」なんだが、アンタどういう環境で実行してんだ?
>885 解決。見まちがえてました(爆
887 :
名無しさん@お腹いっぱい。 :02/02/20 15:47 ID:Mi91V+XZ
やりたいことはファイルに保存してあるURL一覧から情報を引っ張って来てどん どん裏でどんどん画像をダウンロードすることです。すでにダウンロードを始め ているファイルの転送が完了しないうちに次行に書かれてあるURLからダウンロー ド始める・・・要するに同時にいくつものファイルをダウンロードするというも のですが、forkの使い方で躓いています。 でも以下のスクリプトだと$fileの最初の行のURLをダウンロードし続けるだけで す。実はforkの使い方がよく分かっておりません。 子プロセス側の処理はオーケーとして、親プロセス側の処理が問題なのではない かと睨んでいますが、どうにも・・・。 よろしくお願いします。 #!/usr/bin/perl -w $file = "./image"; open (READ, "<$file"); while (<READ>) { $data_url = "$_"; &get("$data_url"); } close (READ); sub get { while (1) { if (fork) { wait; } else { print "Download: $_[0]\n"; system "wget -q $_[0] "; exit; } } }
body$back_envで設定した壁紙と背景色が出力できるようになってるんですけど 同様にページのテキストの色を設定するのはどう書き加えればいいですか?
>888 死んでしまえ。
>>887 上の方でwaitpidの事シカトされたから教えてやんない。
perl -cでデバッグしてもなぜかEOFにエラーが出るんですがどういうことでしょう? Missing right curly or square bracket at D:\usr\www\home\chat\chat.cgi line 834, at end of line syntax error at D:\usr\www\home\chat\chat.cgi line 834, at EOF Execution of D:\usr\www\home\chat\chat.cgi aborted due to compilation errors.
>>893 {}の対応がおかしくなっているのでは。
ブラケットを確認セヨ。
>893 EOFまでのあいだに}が見つからないって話だよね。
>894 >895 即レスさんくす! さっそく探してみます!
>894 >895 やったやった!動いた!ありがとう!
>897 よかったねー!
899 :
吉野家紗香 :02/02/20 19:33 ID:cwPAEcob
a1.html a2.html gikogiko.cgi omaegana ――― b1.html b2.html omaemona ――― haa.txt oremona ――― itteyoshu.dat z.html こういうファイル構成から下のようなファイル一覧を作るには、 どのようにやればよいですか? a1.html a2.html gikogiko.cgi omaegana/b1.html omaegana/b2.html omaegana/omaemona/haa.txt omaegana/oremona/itteyoshu.dat
カレントから再帰で潜って行って吐き出す
902 :
901 :02/02/20 20:10 ID:???
違った。鬱士
opendirつかうか、ls -lR取ってテキスト整形する。
904 :
名無しさん@お腹いっぱい。 :02/02/20 22:51 ID:Mi91V+XZ
>>892 頭がいっぱいいっぱいでwhile(1)のことばかり気にしていて・・・。
ごめんなさい。
>>887 の件、教えて下さい。
ちょっと来てない間にpart9まで出来てたのか。 perlを勉強する人が増えたって証拠かな?
>904
レス読み流してない?
>>873 周辺とか。
みんながみんなperl習ったらおもしろくないね(ぷ
Perlメモのファイルロックを使っています。 同時に3つのファイルをオープンする場合は,先にロックしてからまとめてオープンする(つまりロック→ファイル1オープン→ファイル2オープン→ファイル3オープン→アンロック)のと,それぞれのオープン直前に専用のロックをするのとどちらがいいのでしょう? ただし,それぞれ別作業でオープンする場合もあります。
>>908 俺はプログラムごとにエクスクルーシブロックかけるが(ダメダメ)。
>>908 環境やどんなプログラムなのかわからない以上、状況によるとしか言えない。
911 :
飲み活要員 :02/02/21 02:35 ID:h7QujQlw
こんなもん作ってみたーよ。
http://www.lodestar.nu/niki/index.cgi 中途半端なWikiEngineみたいな感じだけど
・一応認証がある
・文法がHNS下位互換
・単語をページごとのリンクに変換できる。
・逆リンク
・段落ごとにリンクをはれる
・ブラウザ上からハイパーテキストを編集するツール
という特徴がある。
こーいうツールの必要性があるものかどうか、ふと確認してみたくなった。
どうよ?意見キボンヌ。
>>911 私的には大変興味アリ。
カテゴリつくりたい時なんかにも役立つ?
派生して色々な用途に使えそうなので良いのでは。
914 :
飲み活要員 :02/02/21 03:10 ID:h7QujQlw
>>911 しまた、ここはPerlの質問を受け付ける擦れだったのか。
間違いた。スマソ
>>911 おもしろいね。いろんなことに使えそう。
上の方にある「一覧」とか選ぶとエラー出るのは仕様?
おおしろいね。 実は煮たようなものを作ろうとしていたりします。
Wiki系には興味あり。新規スレッド立てたら?
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■477まで読んだ■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
920 :
名無しさん@お腹いっぱい。 :02/02/21 19:32 ID:9QK6Cxc7
$loginstr中の</DIV>\nを$indexstrで置換えたいとき、 $loginstr =~ s/<\/DIV>\n="$indexstr"; では出来ないのでしょうか? 正しい表現が分らず困惑しとります。
$loginstr =~ s/<\/DIV>\n/$indexstr/;
922 :
920 :02/02/21 20:07 ID:???
ごめんなさいまたもや。 $indexin =~ s/$indexstr//; ってできますか? $indexinの中から、$indexstrと被る部分を削除したいんです。 中身日本語だからダメなのかしら? $indexstrの中身の頭数行が、文字化けして表示されて、続いて invalid [] range "7-0" in regexp at ./hp.pl line 72. ていうアナウンスがあります。 お願いとどきますように。
>>923 変数$indexstr内が正規表現の場合、展開される。
$i = '.*';
s/$i//; #<- s/.*//;
925 :
名無しさん@お腹いっぱい。 :02/02/21 20:45 ID:aeAe/JtX
$indexinの中身がS-JISなんじゃねえの? CGIはEUC-jpが基本。
白状するとCGIプログラムではないんです。
で、文字コードに関してはよく分らなかったので、
取り敢ずやってしまえって試しにやってみたら、うまくいった。
で、それじゃぁって、つくりたいプログラムを書いてたら
920,923の質問にはまったと。
>>924 正規表現ではなく文字列なんです。
で、文字列だとすると、
>>925 文字コードが関ってくるんでしょうか?
928 :
名無しさん@お腹いっぱい。 :02/02/21 21:13 ID:+rGDE/uD
929 :
名無しさん@お腹いっぱい。 :02/02/21 21:14 ID:+rGDE/uD
取りあえずソース
930 :
8484 :02/02/21 21:36 ID:39ejQiBa
932 :
名無しさん@お腹いっぱい。 :02/02/21 21:44 ID:xFoRv15a
掲示板全部CGIをeucでつくって そのままeucでhtmlを出力してるんですが、 エンコード自動選択でsjisになってしまいます。 metaタグでちゃんと宣言してるんですけど。 なんか他にすべきことありますか?
933 :
932 :02/02/21 21:46 ID:xFoRv15a
なんか日本語変だった。 掲示板CGIを関連ファイル全部EUCで作って...です。
937 :
名無しさん@お腹いっぱい。 :02/02/22 00:18 ID:Ednlkjpe
1Gくらいのtextfileを読み込んで処理しようとするとout of memoryになってしまいます。 何とか分割して処理できないでしょうか?読み込んだ後は単に文字列検索したいだけなんですけど・・・・
>>937 >textfileを読み込んで処理しようとすると
どういう状態?
>937 興味あるな。 どんなデータ? 繰り返し同じものが出てくる場合はKeyにして別DBにする、っていう リレーショナル的な分割しかないと思うけどね。
940 :
937 :02/02/22 00:45 ID:Ednlkjpe
A、T、G、Cのランダムな繰り返しから構成される 遺伝子の配列データです。その中から特定の配列を検索して抽出するスクリプトを 書きたいのです。無理かな。。。 単純にfileをopenして配列変数にぶちこんで検索をかけ・・・を繰り返しているんですが 途中で止まってしまいます(当たり前か)。
>940 Cで書くべきだと思うよ。
943 :
937 :02/02/22 00:52 ID:Ednlkjpe
>941 ありがとうございます。さっそくやってみます。
>>932 print "Content-Type: text/html; charset=EUC-JP\r\n\r\n";
ぷっ,遺伝子データをPerlで処理するのか。 そんな大きな規模なら別の言語で最適化しつつやっても3日ぐらいかかるのが普通じゃないの?
$| = 1; って必要あるんですか?よく意味が分かりません。 グーグルで調べようにも""囲みでもヒットできないので困ります。
>>937 よく知らんのだけど、bioperlって使えないのかな?
>>946 foreach(1..5) {
print "$_:";
sleep 1;
}
$|=1;
foreach(1..5) {
print "$_:";
sleep 1;
}
ってやってみ。
>>946 $| の説明はperlvarに載ってる。
ぐぐーるする前に手元のperlマニュアル読もう。
950 :
937 :02/02/22 02:05 ID:Ednlkjpe
>941 どうやらうまくいったようです!! ありがとうございました。
(´-`).。oO(そろそろ次スレかな…)
>>940 http://bioperl.org/ bioperlのBio::Tools::Blast, StandAloneBlast辺りのモジュールを使って
BLAST, FASTA辺りの吐くサーチ結果をパースするのが一番簡単&&高速だと思うな。
$in = new Bio::Seq(-id=>"test query", -seq=>"GAAG");
$blast_report = $factory->blastall($in);
詳しくは付属のドキュメント参照ね。
_gunzipタン久しぶり〜
デザインが似てるとパクリになるんですか?
955 :
8484 :02/02/23 11:59 ID:gBGRhxGb
おにぎりワッショイ!!
\\ おにぎりワッショイ!! //
+ + \\ おにぎりワッショイ!!/+
+
. + /■\ /■\ /■\ +
( ´∀`∩(´∀`∩)( ´ー`)
+ (( (つ ノ(つ 丿(つ つ )) +
ヽ ( ノ ( ノ ) ) )
(_)し' し(_) (_)_)
http://www.puchiwara.com/hacking/ 韓国版ってでるらしいけど、どんな内容になるんだ?
この手のものが韓国に翻訳されるなんて初めてでは?
956 :
名無しさん@お腹いっぱい。 :02/02/24 00:15 ID:5vPUCqZK
日付から(2002/2/24)から、1970からのシリアル秒?を計算したいんすけど、 だれか知りませんか?
>>956 ルーチンくまなきゃだめです。
シリウス歴か何かで検索。
958 :
956 :02/02/24 00:28 ID:5vPUCqZK
>>957 ルーチン組むって、
1970から、指定年数まで、閏年のチェックするって感じになります?
なんか、もっとスマートな方法あるかとなぁ〜と思って探してたんですけど、
どでしょ
>>956 use Time::Local;
$time = timelocal($sec,$min,$hour,$mday,$mon,$year);
>960 モジュールのコード使えば?
962 :
名無しさん@お腹いっぱい。 :02/02/24 02:15 ID:1IBSQesy
>>960 time::localは標準モジュールだよ?
965 :
956 :02/02/24 03:57 ID:5vPUCqZK
とりあえずこんなふうで、作ってみたけど、 ループに2個あんのが、どうもなぁ〜 こんなんしか無いかね? sub date2Time { local ( $year , $mon , $day , $hour , $min , $sec ) = @_ ; $days = $day - 1 ; foreach ( 0 .. $mon - 2 ) { $days += (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[ $_ ] ; } foreach ( 1970 .. $year - 1 ) { if ( ( $_ % 4 == 0 && $_ % 100 != 0 ) || $_ % 400 == 0 ) { $days += 366 ; } else { $days += 365 ; } } $seconds = $days * 86400 ; $seconds += $hour * 3600 ; $seconds += $min * 60 ; $seconds += $sec ; $seconds -= 32400 ; return $seconds ; }
966 :
--- :02/02/24 04:37 ID:???
> 965 チョットこんぱくとにするとこんな感じかナー。 sub date2Time{ local( $year, $mon, $day, $hour, $min, $sec )= @_ ; $days= $day - 1 ; for ( 0 .. $mon - 2 ){ $days += (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[$[+ $_] ; } for ( 1970 .. $year - 1 ){ $days+= (( $_ % 4 == 0 && $_ % 100 != 0 ) || $_ % 400 == 0) ? 366 : 365; } $seconds = $days* 86400; $seconds+= $hour* 3600; $seconds+= $min * 60; $seconds+= $sec; $seconds-= 32400; $seconds; }
>>965-966 おしぃ〜。あとちょっと。$yearがうるう年だったとき、ちょびっとずれるみたい。
use POSIX;
srand();
foreach(1..100) {
$y = 1970 + int(rand(40));
$m = int(rand(12)) +1;
$d = 1;
$t = POSIX::mktime(0, 0, 0, $d, $m-1, $y-1900);
$t2 = date2Time($y, $m, $d, 0, 0, 0);
printf("%4s/%2s/%2s : $t %s= $t2\n",$y,$m,$d, $t==$t2 ? "=" : "!");
}
968 :
名無しさん@お腹いっぱい。 :02/02/24 17:04 ID:KO+bj0za
正規表現で、質問があります。 <select name="hoge"> <option> <option> </select> <select name="hoge"> </select> にヒットする表現を知っている方がいましたらよろしくお願いします。
>>968 格納されてるのは1変数?リスト?それによる。
レスありがとうございます! 具体的には HTML文を$bodyという変数に読み込んで、 <select name="hoge"> <option value="fuga">商品名1 <option value="fuga1">商品名2 </select> で二つに切ろうとしているんですが、 ($top,$bottom) = split '<select(.|\n)*</select>',$body; とやってもうまくいきません。 $bodyに格納されているのはただのHTML文です。 よろしくお願いします。
そもそも正規表現形式ではない。 他人の正規表現って解析面倒だから・・・。 /'<select.*?<\/select>'/ とか。
ありがとうございます。 試してみました。 でもやっぱり$bottomの方に何も格納されません。 $topの方には<select が出てくる直前までの文が格納されるんですが・・ >そもそも正規表現・・ 囲む記号は何でもいいらしいというのを本で読んだので、エスケープ するのが面倒なんで、''でくくっていました。でも普通使わなさそうなので 素直に//でくくります。 もっと、試行錯誤してみます。アドバイスがありましたらよろしくお願いし ます。
自己解決しました。 /<select.*<\/select>/s,$body,2; とやれば出来ました。 (.|\n)使っていたのがおかしくなる元だったのかな? ひまになったら考えてみます。 ありがとうございました。
974 :
名無しさん@お腹いっぱい。 :02/02/24 18:44 ID:oPNaAPLP
質問です。 Perlで書いたプログラムが遅いと言われた場合、 PHPに移植すれば高速化できるものなのでしょうか?
当然処理の内容によります。 劇的な速度の変化など期待するだけ無駄です。
>>973 > 囲む記号は何でもいい
区切り文字に//以外を使用するなら、m演算子が要る。
即ち、//が区切り文字の時のみm演算子省略可能。
>>973 ?外すと最大マッチするから気をつけてね。
質問です. バイナリとして読み込んだテキストファイルを処理して出来た文字列があります. この文字列の末尾の改行を取り去りたい場合, s/\x0D?\x0A?$// とする以外無いのでしょうか. chompはどうも\x0Aしか消してくれないみたいなので, 改行コードが\x0D\x0Aだった場合は\x0Aのみが消されて\x0Dが残ってしまいます. s/\x0D?\x0A?$// より良い方法があればご教示ください. OSはWindows2000,PerlはActivePerlとPerl for Cygwinを使っています. $_ = "str\x0D\x0A\x0D\x0A"; open(OUT_BIN, "> ./out_bin.txt") or die; binmode(OUT_BIN); chomp; print OUT_BIN; close(OUT_BIN);
>978 binmodeをコメントアウトしたらうまくいかない?
>>978 substr($data,length($data)-2,2):
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | 次スレ立てて!! .| |_________| ∧∧ || ( ゚д゚)|| / づΦ
982 :
978 :02/02/24 21:32 ID:???
即レスどもです.
>>979 混乱させてしまったようで申し訳ありません.
テキストとして出力すると出力時に\x0A→\x0D\x0Aの変換がされてしまうので,
結果がわかりやすいようにサンプルコードではbinmodeしておきました.
実際にやりたい事を書いておきます.大崎氏の
「ファイルの最後の数行だけ表示する(
http://www.din.or.jp/~ohzaki/perl.htm#File_Tail )」
を改造して「ファイルの最後の数行を『逆順に取り出す』」スクリプトを作っているのです.
取り出すところまでは書けたのですが,取り出した行の改行コードがchompでは取れない.
そこで質問したというわけです.
>>980 どもです.しかし一応改行が\x0D\x0Aでない場合(\x0Aとか)も考えておきたいのです.
>>978 DOS改行が入力される可能性がある場合は、
>>978 の通りにやってます。
s/\r?\n$//;
こんなかんじー。
1 0 0 0 ま で 平 然 と 質 疑 応 答 が 繰 り 返 さ れ る ス レ を 目 指 そ う ょ
>985 お気に入りに入れて移動しマスです。。。。
987 :
978 :02/02/24 22:29 ID:???
>>983 ありがとうございます.一応支障は無いので私もこのままいく事にします.
答えてくれたみなさん,どーもです.
>>985 乙カレー.
988 :
978 :02/02/25 00:31 ID:???
うわ,つーかPerlメモの「改行コードを削除する」にしっかり書いてあった……. お騒がせしてすまんかった.抜けてるなー,おれ.
989 :
名無しさん@お腹いっぱい。 :02/02/25 12:34 ID:xTyCNQEK
つかぬことをお伺いします。 既にログに記録されている数桁の文字列を、 出力時にカンマやピリオドで区切ることは可能なのでしょうか? 例えば "19800"とログに記録されているものを19,800として出力、 或いは "20020224"とログ記録されているものを2002.02.24として出力、 いかがでしょうか、 もし可能でしたら方法を教えてもらえると大変助かります。
991 :
名無しさん@お腹いっぱい。 :02/02/25 13:07 ID:ZVFFw9ik
1 while ($str =~ s/^(\d+)(\d{3})/$1,$2/); で、数字にコンマをつけます
992 :
989 :02/02/25 16:29 ID:xTyCNQEK
ありがとうございます。>990さん、991さん 望んでいたとおりの完璧に動きを得ることができました!
993 :
出来の悪い子 :02/02/25 17:11 ID:KjItHBP9
出来の良いお前らに質問です cgiにプルダウンでパラメータを渡そうとしています XXX.cgi?year=2002&month=02&day=25 という形にはなったのですが cgi側が吐き出す結果$Todayは -- という形になります $day = $in{"day"}; $month = $in{"month"}; $year = $in{"year"}; $Today = $year . "-" . $month . "-" . $day; print $Today どこらへんの記述を見直せば良いでしょうか? ヒントよろしくお願い致します。
>993 このへんかな? >出来の良いお前らに質問です
>993 $buffer = $ENV{'QUERY_STRING'}; @pairs = split(/&/,$buffer); foreach $pair (@pairs){ ($key,$value) = split(/=/,$pair); $in{$key} = $value; } この辺。 肝心な部分が載ってねーじゃねーか。 だから出来が悪いって言われるんだ。 改善を要求しる!
ふが
ほんとにできがいいなー
。。。。。
あ
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | 1000 ∧ ∧ |/\_________ (,,゚Д゚)____. (つ/~ ※ ※ \ /※ ※ ※ ※ \
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。