Perlコーディング初心者質問スレ Part 48
1 :
nobodyさん :
2006/04/26(水) 18:00:50 ID:RLbnve1J Perlのコーディングで困ってる人のスレです。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは
>>2-10
どっかで、変数の受け渡しはリファレンスを使用すれば メモリの節約になるって見てから、それ以降ほぼ全てのやり取りを リファレンス経由でやってるんですが、これってどうなんでしょうか? そこらへんの作法がよくわからなくて・・・ リファレンスを使用するのは大きなデータを読み込んだときだけにした方がいいんですか? $str = 'aaa' ↑こういうほんのちょっとの変数でさえリファレンスで渡してたんですが、 普通に変数をコピーして渡すべきなんでしょうか?
やりすぎ。パフォーマンスチューニングは特に気になるところだけに集中すべき。
スレ立て乙
>>10 その処理のためにスクリプトが10バイトくらい増えてたりしてw
データ大きい時に使うリファレンスはメモリ使用量じゃなく速度目当ての方が多いんじゃないかな。
>>10 メモリーを節約したいならそんなもんじゃぜんぜん不十分だろ。
リファレンスが必要になる時点でおわっとる。
変数は全部グローバルにして使いまわさないと。
コピーに比べたら関数の呼び出しはめっちゃコスト高いからな。
もちろん配列をループで扱うなんてもってのほか。
似たような処理はコピーペーストで記述したほうが速いぞ。
さらにやるなら変数ひとつについてファイルをひとつ作って
必要になったときのみ読み込むようにすると信じられないくらいメモリーが節約できる。
他にもまだまだあるけどこれ以上の極意はタダじゃ教えられないなー
とまあそのくらい Perl でのパフォーマンスチューニングというものは虚しいものなのだよ。
Perlでパフォーマンスを上げにくいということは 逆にいえばパフォーマンスを下げにくいということ? たまに処理がクソ重い掲示板をとか見かけるんだけど、あれは何が原因なんだろう。 もちろん同じ鯖上で他の掲示板は速かったりする。
17 :
nobodyさん :2006/04/26(水) 22:08:45 ID:keS5Imx+
MEMORY I/OよりもDISK I/Oを選んでる時点で>14はクソ 以上 ハイ次
「必死にメモリだけを節約してどうする?」って意味の皮肉だろ。
perl起動しただけで結構喰ってるだろうに スカラ変数1個のメモリなんて誤差範囲に含まれるくらい
10みたいなやつに限ってsubの中でグローバル変数を定義してるに違いない
>>16 掲示板で体感でわかるほどの違いになることなんかないんじゃなかろうか。
たまたま別の処理でメモリー使い切っていたとか無駄な解析で遅くなっているとか。
やたらCSSやJS、画像が多いと体感でもはっきり遅いけどね。
前スレ消費してください
>>16 表示する部分だけ拾えばいいところを全メッセージなめてるとかは
普通にありそうだな。
過去ログの量に比例して (下手するとそれ以上で) 重くなるとかね。
つーか前スレの奴ageで書き込んでるし昨日の変な奴だろ… 無視しろよ。
26 :
nobodyさん :2006/04/28(金) 04:16:53 ID:maSTbsWh
1: 16進数で範囲演算子をするにはどうしたらいいでしょうか? 2: for ($a = 0; $a <= f; $a++) 3: ダメポ
# 16進数 for (my $a = 0; $a <= 0xf; $a++) { print "$a:(゚д゚)<シメジ\n"; } # 範囲演算子? for (0 .. 0xf) { print "$_:(゚д゚)<シメジ\n"; }
28 :
26 :2006/04/28(金) 04:48:31 ID:???
>>27 thx!!
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
じゃなくて
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e
と演算させるには地道に置換しかないですか?
pack使え
リストを作ればいい。 for('0'..'9', 'a'..'f'){ ... }
こんな時こそ sprintf じゃないのか?
33 :
26 :2006/04/28(金) 16:24:53 ID:???
domo!
$str =~ s/// と、tr/// の機能の違いがわかりません。 どっちも同じこと出来ますよね? 本にはtrの方が高速だと書いてあります。なら全部trでいいですよね? 変換と置き換えの違いがわかりません。 教えてください。
>どっちも同じこと出来ますよね? 使い方次第。 >本にはtrの方が高速だと書いてあります。なら全部trでいいですよね? 何をしたいかによる。 試しにs/// で、変数中に含まれる小文字アルファベットを全部大文字にする 正規表現を書いてみよう。 trだと tr/a-z/A-Z/; なんだけど、違いが分かるかな?
tr///はパターンマッチをしていないってハッキリ書けよ。
trはメタキャラクタ(エスケープシーケンスの一部)は通すけど、キャラクタクラスは通さない。 気をつけないと嵌る。 tr/\t\n//; # タブと改行にマッチ tr/\d\s//; # "d"と"s"にマッチ
<STDIN>を一度使うと以後使えなくなりますよね? read (STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); read (STDIN,$buf,$ENV{'CONTENT_LENGTH'}); $buf eq '' and die; $buf = $buffer; ではなくてもう一度<STDIN>に入力する方法ってありませんか?
>>40 何故それ(STDINへの再入力)が必要なのか、やりたい事を書いて下さい。
>>40 > <STDIN>を一度使うと
使うってどういう意味? 標準入力に出力したいのかな。
> もう一度<STDIN>に入力する方法
STDIN へ出力はできないのでは。
というより、設計を見直した方がよさそう。
>39 処理する(考慮する)内容が少ないからtrが高速ということか
STDINは読み進んだら、後ろは消えてなくなります そういう仕様です なので、STDINで読み取ったものを再利用したいのなら一度ファイルに書き戻すか、 サイズが小さいなら読み込んだものを再利用するようにコーディングすればいいです
45 :
35 :2006/04/30(日) 07:48:31 ID:???
>>36 s/[a-z]/[A-Z]/;
ですね。違いは・・・カッコ?
>>37 参考ページありがとうございます。
tr///は正規表現を使えないということでいいのでしょうか。
>>38 つまり、探すんじゃなくて見つけたモノを単純に置き換えるということでしょうか。
>>39 なるほど。タブや改行を使えると・・・。でもメタ文字は使えないということですね。
みなさん解説ありがとうごぜーました。
ようやく違いがわかりました。
重複するとこもあるけど、役割はちゃんと違うんですね。
>>43 文字クラス展開の有無なんかより、
バックトラックする必要の無い事の方が大きいと思うよ。
>>45 tr/ab/AB/ に等価なのは
s/[ab]/ $& eq 'a' ? 'A' : $& eq 'b' ? 'B' : $& /eg
47 :
36 :2006/04/30(日) 10:54:32 ID:???
>>45 ちっがーう! ちゃんと動かして試してみた?
「g」オプションが無いんですよ。
…というのは嘘で、もし s/// で書くとしたら
s/a/A/g;
s/b/B/g;
(中略)
s/z/Z/g;
ってしないとダメなんだ。全然違うでしょ?
>>45 に gつけても、出てくるのは小文字アルファベットを [A-Z]に置換した
ワケワカメな結果だけ。
[A-Z][A-Z][A-Z] [A-Z][A-Z][A-Z] [A-Z]…とか。
48 :
36 :2006/04/30(日) 10:59:21 ID:???
$bar= "i have a pen.\n"; $bar=~ s/[a-z]/[A-Z]/g; print $bar; 結果: [A-Z] [A-Z][A-Z][A-Z][A-Z] [A-Z] [A-Z][A-Z][A-Z]. # キャラクタクラスだのパターンマッチだのより先に言うべき事が…(;´д`)
49 :
40 :2006/04/30(日) 11:00:50 ID:???
(STDINへの再入力)が必要な理由は 自分のHPで複数の掲示板を設置しているのですがコメントスパムがひどいんです。 その対策として現在稼動しているCGIにスパム対策を記述したplファイルをrequire '….pl';と読み込ませば 今後の追加対策もplファイルひとつで対応出来ます。 本体のCGIを改造するのは複数あるので困難だし配布先がバージョンアップすると一からやり直しだし、。 という理由で対策用のplファイルで一度<STDIN>読み込んで処理し問題無ければ本体のCGIに戻る→標準入力から呼び出す処理が始まる。 という理由です。
>>49 複数の掲示板って一体いくつあるの?
面倒がらずに改造したものを一つ一つ上書きすればいいじゃん。
'….pl'でコメントスパム対策ができるくらいのスクリプトは書けるんでしょ?
本体の頭でrequireしておいて、<STDIN>の後ろに外部サブルーチン呼び出しを
書くだけだから実質2行の追加で本体改造は終わると思うんだが。
適当にラッパー書く手もありますがね。
そもそもここは「お手軽に既存スクリプトを改造したい人の手助けをするスレ」じゃないよな。 改造物なら専用スレできいてほすぃ。 あくまでもPerlコーディング初心者、つまりこれから上達したい人の質問にその道の先輩が 答えるのが本道なわけだし。
>>47-48 tr/ab/ba/ と s/a/b/g; s/b/a/g; は結果が変わるから
tr/a-z/A-Z/ を s/a/A/g …のように説明するのはどうかと思うんだ。
54 :
47-48 :2006/04/30(日) 13:58:12 ID:???
>>53 そりゃ、結果は変わるよね(変換がまとめて行われるか否かってレベルで)。
s/a/A/g; のように26回繰り返せば tr と同じ事ができるよって言いたかったんじゃなくて
s/// と tr/// の用途の違いを見せたかっただけ。
そもそも tr は 0-9 a-z A-Zのように連続している事が保証されている文字グループを
同数の別文字に変換する目的なので、その場合は数の多寡に限らず s/// は使わないのがよい。
とか追記すればよかったかな。
55 :
47-48 :2006/04/30(日) 14:09:07 ID:???
それともちろん trには文字リストを2つ並べて変換するって用途もある。 jperlやPerl5.8+UTF8で、漢字の新旧変換とか異体字変換する時に重宝する。
56 :
40 :2006/04/30(日) 14:33:27 ID:???
確かにあからさまな初心者的質問では有りませんが、 自作しているPerlのコーディングに関する内容なのでここで質問した次第です。 スレ主1の趣旨とかけ離れていると思いませんでしたし。それにここは人が多そうなので。 どうせならrequire '….pl';1行の改造だけで済ませたいです。 # GETメソッドによるチェックもあるのでCGIの2行目に記述しているから どういうラッパーなんでしょうか? パイプを変則的に使えば実現出来るのは知っていますが、うちのプロバイダのサーバでは パイプが使えないようなんです。
>>56 > 自作しているPerlのコーディングに関する内容
え、自作なの?
>>49 では
> 配布先がバージョンアップすると一からやり直しだし
って書いてあるけど…。
Perlのdirty hackをなめるなっ
例えば本来のSTDINを閉じてIO::Stringにtieするモジュール。
strictじゃない環境で動かすつもりならIO/String.pmに
ttp://search.cpan.org/src/GAAS/IO-String-1.08/String.pm を置いて、四行目以降をplファイルに突っ込めばOK。
#=======================================
package Hack::STDIN::Seekable;
use strict;
use warnings;
use IO::String;
my $stdin = join '', <STDIN>;
close STDIN;
tie *STDIN, 'IO::String', \$stdin;
1;
#=======================================
…新たに書こうとしてるならこんなのは絶対に使って欲しくないけどね
59 :
nobodyさん :2006/05/01(月) 00:18:30 ID:kok0N6Ez
Text::ChaSenモジュールをインストールしたのですが、 プログラム中でUse::TextChaSenとしても実行されていないようです。 #!C:/cygwin/bin/perl use Text::ChaSen; print "hoge"; とするとエラーも何も出ずに終わってしまうのですが、どういうことなのでしょうか? モジュールが正しくインストールされていないんですかね?
酔っ払い中。
>>59 > プログラム中でUse::TextChaSenとしても実行されていないようです。
その宣言は間違いかもしれません。一般に、 use Text::ChaSen; かも。
> use Text::ChaSen;
> print "hoge";
> とするとエラーも何も出ずに終わってしまう
モジュールが正しく導入された、正常な状態です。
モジュールのインストールでミスってると、@INCを全部探したけどモジュールのファイルが
見つからんぞ、どないなっとんねん?というエラーメッセージが出るはずなので。
結論としては「何ら問題なくインストールできてる。use するときの書き方を再確認すると安心」
ぐらいじゃないですか?
61 :
>>60 :2006/05/01(月) 00:34:25 ID:kok0N6Ez
use Text::ChaSen; print "hoge"; とした場合hogeは表示されると思うのですが、それすら表示されないのです。 use Text::ChaSenの行でプログラムが終了してそれ以降の行に進んでいない気がするのですが…
>40 CGIアクセスが実行されるときは、それが投稿なのか普通にアクセスされただけなのかは判別出来てるよね? それなら簡単じゃないかと・・・ たとえば my($spamflag) = 0; if($in{'exec'} eq 'postmsg'){ require 'denypost.pl'; $spamflag = &denypostcheck($in{'posttitle'}, $in{'posthome'}, $in{'postmail'}, $in{'postbody'}); } のようにすりゃいいんじゃないのでしょか? denypost.plは sub denypostcheck{ だらだら〜あーだこーだ } 1; だけ 難しく考えすぎじゃないのかな?
63 :
nobodyさん :2006/05/01(月) 10:13:04 ID:BiGx6+8r
@rankpairs=split(/&/,$ranking); foreach $log(@rankpairs){ ($jikan,$name,$score)=split(/=/,$log); if($pair{score}>$score){ push(@newrank,"$hiduke=$pair{name}=$pair{score}"); $check=1; } if($check==1){ if($pair{name} eq $name){next;} } push(@newrank,"$jikan=$name=$score"); } 得点ランキング用のCGIで、個人の最高得点を記録した後、 ログファイルにある$log{name}データと、フォームから送られた$pair{name]が同じ場合は、 それ以降、同じ名前の人は登録をせずにスルーしたいのですが、どうしてもうまく動いてくれません。 全てが「真」と判断されてしまうみたいで、全て「next」を通ってしまいます。 一体、どこが間違っているのでしょうか? perlの辞典も買ってきて 色々と調べているのですが本当に分かりません。
>63 ロジックをよく見直せ。 pushした後で名前の値を比較してどーすんだよ。アフォかいな。
65 :
nobodyさん :2006/05/01(月) 11:19:05 ID:BiGx6+8r
一回目のプッシュは登録されて構わないので、そこで$checkを1にしておいて、 それ以降のループで名前の比較をして、nextしているつもりなのですが…。
@rankpairs=split(/&/,$ranking);
foreach $log(@rankpairs){
($jikan,$name,$score)=split(/=/,$log);
if($check==1){
if($pair{name} eq $name){next;}
}
if($pair{score}>$score){
push(@newrank,"$hiduke=$pair{name}=$pair{score}");
$check=1;
}
push(@newrank,"$jikan=$name=$score");
}
でも、順番を変えたら成功しました。
なぜこれだとうまく行くのか、正直まだ理由が理解できていませんが、
>>64 、ヒントを下さってありがとうございました。
>66 そのソースじゃ問題ありそうな悪寒
教えて下さい。 掲示板を作っているのですが openで読み取りの前に読み込むログを ロックする必要はあるのでしょうか?
ログを飛ばしたくないならロックはした方がいい k○ntのロックの仕方は真似しちゃ駄目よ
>69 ありがとうございます。
ke*tって本も出してるし、利用者多いし、優れたコード書く人じゃなかったのか。
ガクブル
m9(^Д^) ・・・
初心者の僕に何が悪いのか説明してください・・・
>>75 サンクス。
必死だということだけは理解した。
俺が思うにKENTで配布されてる物の大半は初心者の頃に書いた奴だと思うのだが 今でもあんな書き方してるんだったら知らん^^;
(^ω^;)……
もう kent 話はいいじゃないか。 おまえら注目しすぎ。
KENTさま〜
>>69 最後の1行余計。
KENTのソースで普段から勉強してんのか?
82 :
40 :2006/05/01(月) 20:23:44 ID:???
58氏有難うございます。
動作確認しました。
個人的に使うだけなので・・・(^^;
稼動中の掲示板にはrequire一行だけしか記述せずに動作させてみたかったんです。
>>40 にもそれらしいことは書きましたが
plファイル抜ける時にreturn $buffer;としてそれを受け取るように稼動中のCGIも改造すれば
すむんですが、こだわってみたかったんです。
だからplファイルはほとんどif文ばかりです。もちろんそれがPOSTとGETなのか動作判定はしてます。
動作的に投稿時の<STDIN>を2回処理する無駄はありますが、体感出来るほどでもないですし。
83 :
pel :2006/05/02(火) 10:15:11 ID:???
Windows2003ServerにActivePerl5.8.8,mod_perl2をインストールし、CGIを作成しているのですが、長時間かかる処理を実行したいため、ブラウザがタイムアウトを起こさないようにバックグラウンドで処理を実行したいと思っています。
例えば下記CGIを実行したとき、バックグラウンドでthre2を実行しておき、ブラウザにはすぐthre1を実行した結果としてprintを実行したいのですが、thre2の終了を待たなければ、thre1は実行されないのです。
これではブラウザがハングアップしてしまうのですが、どのようにしたらよいのでしょうか?
perlのforkやDOSのコマンドstartも試したのですが駄目でした。
***************
use v5.8.0;
use threads;
my $thread1 = threads->new(\&thre1, "1");
my $thread2 = threads->new(\&thre2, "2");
$thread1->join;
$thread2->join;
sub thre1() {
print "$_\n";
threads->yield();
}
sub thre2() {
sleep(30);
threads->yield();
}
***************
よろしくおねがいします!
※マルチポストさせていただいています。
http://www.gac.jp/article/index.php?stats=question&category=10&id=17717&command=msg
似たような処理を一つのルーチンにまとめてモード別の細かい条件はifで判断して実行していくのと、 全体のコードが長くなっても、ifを使わないで別処理にしていくのでは、どっちがいいんでしょうか? 前者はコードは短くなりますが、頻繁にifを使うので処理が重くなりそうな気がするんですが・・・
>>83 fork使うのなら、
CGI fork バックグラウンド
で検索すると出てくると思う。
winでforkって使えるんだっけ
88 :
85 :2006/05/02(火) 11:33:29 ID:???
あー、Windowsの場合は平行処理してくれないのか。
89 :
pel :2006/05/02(火) 11:35:57 ID:???
85>> 86>> UNIXサーバで動いたforkを使ったソースそのままをWindowsサーバで動かしたら、thread同様printされずです。
でもthreadは使えるんじゃなかったっけ
91 :
pel :2006/05/02(火) 12:09:46 ID:???
すいません、今テストしたところ、threadは使えてバックグラウンド処理は行えているようです。 (タスクマネジャ参照) しかし、ブラウザが拘束されて、printされないことが回避できません。 方法知りませんか?
92 :
pel :2006/05/02(火) 12:11:19 ID:???
書き直し。 すいません、今テストしたところ、threadは使えてバックグラウンド処理は行えているようです。 (タスクマネジャ参照) しかし、ブラウザが拘束されて、sleepが終わらないとprintされないことが回避できません。 方法知りませんか?
94 :
pel :2006/05/02(火) 12:29:52 ID:???
95 :
pel :2006/05/02(火) 15:13:58 ID:???
>>93 うまくいきました!!
ありごうとうございました。
Net::FTPを使って $net_ftp->rmdir('directory'); だと、空じゃないディレクトリは消えないのですが、これを rm -rf(unix) rd /s /q(NTのCMD) みたいなことってできますか? 先にディレクトリの中を空にしてから、cdup()で上がって消すしかないですか? あと、これはついでなのですが・・・ rmdir(DIR,[RECURSE]) mkdir(DIR,[RECURSE]) の中に入るRECURSEって何を入れたらいいもんなんでしょう。。
recurseは再帰。 $net_ftp->rmdir('dir', 1); みたいにしたらディレクトリの中身ごと消してくれる。 とNet::FTPのドキュメントに書いてある。
>>97 そのあたりはドキュメント見ながらやったのですが、
$net_ftp->rmdir('dir', 1);
をやるとエラーが出ます。
Deep recursion on subroutine "Net::
FTP::rmdir " at C:/perl/lib/Net/FTP.pm line 612.
となって、100回以上ループしてるようなんです。
1と文字列の'true'は試してみました・・・
教えて下さい 今CGI掲示板をいじっているのですが foreachの前に配列や変数を空にする場合 よく@xxx=(); $=0;と見るのですが undefはあまり使わないのでしょうか?
undefはアボーン 初期化とは意味が違います
>>100 ありがとうございます
意味は判るのですが
どちら使うか迷ってまして
適当に使ってみます。
#!/usr/bin/perl -W use strict; my($test); $test=""; #初期化 print $test; undef $test; #削除 print $test; 結果:Use of uninitialized value in print at a.pl line 11. まぁお好みでいいんじゃね?
warningsなんて使ってる奴まだ居たのか…Perlの意味ねーだろ
>>104 いや、strictなソースは素晴らしいけど、warningsはマジで要らなくないか?
空の値をprintするだけでも警告出るんだぞ?
空の変数をprintするのが悪いだろw
-wなんて超几帳面な奴しか使ってないよ
ワーニングはデバックする時しか使ってね
運用時には-Wは使ってないけど、開発中は常にそれでやってる
そんなオプションがあるのを初めて知った。
#!/usr/bin/perl -wc
そのトイレオプションの詳細を
perl --help perldoc perl
ネットに繋がってないので見れないです
>>105 warnings は、warnings の存在意義を理解できないプログラマに最適化されたプラグマです。
つまり、あなたのためにこそ存在しているんです。
必要だと感じる *前に* ぜひ使ってください。
warnings厨うざいな
warningが出るソースを配布するカスもウザいよな
>>115 ということは、CGIとしては動かない?
つーか perl -h しろよ
-wc と strict は常識じゃなかったのか・・・
>>122 お前の常識は世間の非常識
っていう煽りは置いといて、
常識は常識だろうけど開発が終われば外すのがいいんでねーの
ダンは-Tw 使うこと勧めてるけど。 そんな面倒なことやってられるかと思ってたけど、 実際コーティングしていくと、必然的に全ての外部データは チェックするのが当然だしね。 ただ、処理速度が犠牲になるのがネックか。
> 開発が終われば外すのがいいんでねーの はつみみです。
教えて下さい 掲示板をいじっているのですが (かなり頻繁にログをチェックしたり読み込んだりするタイプです。) ソースを見ると openでログを読み込む時に全部読み込んでいるようです つまり@xxxx = <F>;となっています。 これは必要な部分だけ抜き出すように書き換えた方が良いのでしょうか? 書き方は調べて判ったのですが いまいち効果があるのか無いのか判りません。 ログの最大容量はまだ決めていないのですが 最大1Mbyteくらいにしようと考えています。 使っているサーバーは共用サーバーで mod-gzipが自動的に入っているみたいです。
メモリの消費量を抑えたいのなら書き換えた方がいいかもね〜 まぁ一概には何とも言えんが
>>126 ログ = 1ファイルで1MBということなら、掲示板にしてはかなりサイズが大きいかもね。
その1MBをまた別の変数へ格納してるとか。マズイ造りになっているようなら改造するのもありだけど、
そうでないなら別に気にするほど大きいわけでもないよ。
131 :
126 :2006/05/04(木) 00:00:07 ID:???
手直しする事にしました 100ヶ所くらいあるので迷ってました >127-130 ありがとうございます。
>>126 ファイルにデータを置くなんて馬鹿のやることでつよ。
問答無用でDB使えるなんていい環境だな
DB使えない環境だとブーブー文句言いそうだねw
BerkeleyDBが使えないんですか!? 私は開発から抜けさせていただきます! こういうことですかぁ
えっ、ログファイルって全部読み込まなくても処理できるんですか? 掲示板のログ読み込みだと、 open(FH,'<',$path) or die "error: $!"; @data = <FH>; って全部読み込んでから@dataに対して要素数を調べて、最大表示件数で割って・・・ ってな感じでやってたんですが、 直接FHの行数(要素数?)を調べたり、5行目から10行目を読み込むみたいな操作が出来るんでしょうか? FHは配列と同じように扱えるのかな? やり方教えてください。
>>137 俺は使った事ないから分からないけど、tieを使えばできると思う。
ただテキストファイルの10MBや20MBくらい屁でもないし(Perl5.8@WinXP)
スクリプトを簡潔に書く意味でもまとめ読みがいいんじゃないかな…
すごくアクセスが多いとかログファイルが膨大とか
掲示板レンタルシステムみたいなのになったらまた話は別だけど。
>>137 そんなに配列で扱いたいのなら、Tie::Fileでもつかうといいさ。
# 使ったことがないから、効率はシラネ。
ログの解析とかって、それこそ RDBMS に突っ込めば楽だよね。
特殊変数$. の使い方ってこれであってますか? 本に現在の行数を表すと書いてあったので、 while(@data = <$fh>){ if($_ =~ /^$num\t/){ $line_num = $. ; } } このように組みました。 ファイルを読み込んでいって、パターンにマッチするデータがあったら その行数を $line_numに記録しておいて、 あとから@dataにspliceで、記憶していた行にデータを挿入・・・としたいのですが なんかうまくいきません。
>>141 > なんかうまくいきません。
そういわれても…。まずは
>>1 を読んでね。
で、
>>141 のコードの 1番目の間違いは、while の条件部にリスト(ここでは配列への代入)を置いていること。
s/while/foreach/ で恐らく動作するようにはなるけれど、改良の余地はあちこちにごっそりありそうなんでがんばれ。
# もちろん 0番目の間違いは use strict と use warnings 乃至 -w スイッチを使っていないことなわけだが。
>>142 > s/while/foreach/ で恐らく動作するようにはなるけれど、
$. が常に最後の行番号になるのは変わらんな。
>137 複数のファイルにわけたら? 件数でわけるなり、日で分けるなり。
145 :
142 :2006/05/05(金) 15:37:32 ID:???
>>143 > $. が常に最後の行番号になるのは変わらんな。
ツッコミさんきゅ。
仮に「あとから」でなくてよいのであればこんな解法も。
push @data, /^$num\t/ ? ($insert, $_) : $_ while <$fh>;
>>141 を額面どおりに取ればこんな感じか。
while (<$fh>) {
$line_num = $. if /^$num\t/;
push @data, $_;
}
-1からのインクリメントでいいじゃん
コーディングからはずれる質問ですが… 例えば1から9まで入力させて、それぞれに対応したhtmlを表示するcgiを作るときは ・それぞれのhtmlを作る関数を作っておいて、ifで入力によって呼ぶ関数を分ける ・それぞれのhtmlを作るcgiを作って、ifで呼ぶcgiを分ける どっちが一般的ですか?あとヒアドキュメントを使うのは好ましくない場合とかありますか?
やろうとしてることをわざわざ小難しくしなくてもいいんじゃない? 入力者の名前とかを使いたいなら (1)表示用HTMLをテンプレートとして用意 (2)CGIで適当なテンプレートHTMLを読む (3)名前とか、そのほか色々を置換して表示 がいいんじゃないかな HTMLは1つで済むし
>>147 1〜9までのHTML名を配列に入れておき、
入力に応じてファイルとして読み込んでそのまま表示
HTMLを表示させるだけならJavaScriptで充分かと思う
>>147 起動スクリプトは1つの方が管理は楽
#条件処理
my $ACTION = {
1 => \&do_1,
2 => \&do_2,
3 => \&do_3,
}
MAIN:{
# 初期化処理を適当に
$ACTION->{ $cgi->param('action') }->();
# テンプレ表示処理などをする
}
sub do_1{}
sub do_2{}
sub do_3{}
書くならこうかしらん。
my $mode = get_mode();
my $action = [undef, \&do_1, \&do_2, \&do_3]->[$mode] or error();
$action->();
>>152 オブジェクト指向以外で、いい書き方ある?
> オブジェクト指向以外で、いい書き方ある? どんな書き方をオブジェクト指向としたいのか明確にしてよ。
まぁ、なんと言うかPerl臭い書き方ですな
> まぁ、なんと言うかPerl臭い書き方ですな KENT 臭い書き方ということ?
KE●Tは多分こんな感じ if($mode eq 'write'){ &write; }
KENTさんの方が分かりやすいな。
その局面でわざわざ hash にする意図が分からん。 my $action = 'do_' . $cgi->param('action'); eval { no strict 'refs'; $action->(); };
>>154 パッケージ作って、blessした変数を使う方法全般。
Perlっぽいとしたら、こんなのとか。
my $mode = get_mode();
my $do = "do_". $mode;
my $obj = Local_table->new();
$obj->$do();
exit;
package Local_table;
sub new { return bless {}, shift }
sub do_1 {}
...
sub AUTOLOAD {
use vars qw($AUTOLOAD);
my $self = shift;
my $name = $AUTOLOAD;
$name =~ s/.*:://;
error("not implemented $name");
}
sub DESTROY {}
# 書いてたら、
>>159 に似てる…。
ずっとKENT風に書いてきた・・・ 渡された変数名の関数を呼べばKENT風に書かなくてもいいのか。 なるほど。 でも、存在しない関数を呼び出されそうな場合のトラップはどうすればいいだろ? その関数が存在するか調べてたらKENT風に書くのと対して変わらんし・・
eval と $@ で十分じゃん。
eval と $@ で十分じゃんって言われても分からんかったので調べた・・・ evalの中で関数呼び出して、evalを抜けた直後の$@がNULLだったらエラー無しか なるほど これはいいかもしんない
詳しくも何も >163 のまんまじゃねーか…
初心者スレなんだからKENT風でいいんじゃね? リファレンスを使うのはポインタでつまずくC言語みたいだし、 evalはうっかりダブルクォートで変数を使ったりするとアレな事があるし。
最後の変数を〜 の部分がわからない なんか不具合でも? 携帯だから調べらんねorz
レベルの高低ではなく、初心者が読んで勉強にならないようなレスは
このスレ的に糞レス。
上級者気取りのPerlerの腕自慢スレじゃないんだぞ☆
>>162-163 kwsk
ぐぐると一番上にでてくる物すら読めないのかよ
@ とか $ ってぐぐれないだろ
うん
全くひどい話だ
こ
Perlコーディング””初心者質問スレ”” Part 48
まぁ俺だけかもしれないけど 別言語に移植しやすいように書くよう心がけてます
"perl eval"でぐぐれば、出てくるがな。
if ($mode eq 'test1') { &test1; } elsif ($mode eq 'test2') { &test2; } elsif ($mode eq 'test3') { &test3;} &main; test.cgiにそのままアクセスされたらサブルーチンmainを表示 test.cgi?mode=test1でアクセスされたらサブルーチンtest1を表示したいのですが 実際やってみても全てmainが表示されてしまいます、どうしたらいいんでしょうか。。。
179 :
nobodyさん :2006/05/06(土) 17:40:22 ID:y5pDzvYJ
age忘れ
180 :
nobodyさん :2006/05/06(土) 17:40:52 ID:qaiuXg8a
古い掲示板スクリプトで、 &jcode::sjis($value); とかやって、外から入ってきたデータの文字コードをshiftjisにしてますが、 これを今のEncodeモジュールを使って表現するとどうなるんでしょうか?
>>178 else{ &main; }
サブルーチン名にmainを使ってる点はあえてスルーした
182 :
178 :2006/05/06(土) 18:14:42 ID:y5pDzvYJ
>>181 if ($mode eq 'test1') { &test1; }
elsif ($mode eq 'test2') { &test2; }
elsif ($mode eq 'test3') { &test3;}
else { &main; }
にしたんですが、、やっぱりmainの内容が表示されてしまいます…
$modeの定義方法が悪いのでしょうか…
test.cgi?test1と書いたらtest1の内容がちゃんと表示されました
むー…
>>178 >test.cgi?mode=test1
これで test1 が $modeに入るわけないけど、そこらへんの理解は大丈夫だよね?
>>168 少し上に調べて理解できた初心者がいるのに、お前が理解できないのはただの怠慢。
186 :
178 :2006/05/06(土) 18:23:50 ID:y5pDzvYJ
>>183 はあ…確かにそうですよねえ
でもKENT氏のCGIとか見てもよくわからない…
そこらへんの理解が大丈夫そうじゃないですorz
あーもう分かったからソース全部どっかのあげてみろや
188 :
178 :2006/05/06(土) 18:31:07 ID:y5pDzvYJ
>>188 いきなり
> #$mode = $ENV{'QUERY_STRING'};
に吹いたw 何でコメントアウトしてあるんだよw
ワロス
191 :
178 :2006/05/06(土) 18:41:01 ID:y5pDzvYJ
>>189 それを入れるとtest.cgi?test1になってしまうからですかね…
どうやったら$modeをきちんと認識させられるでしょうか...
$modeには mode=test1 が入らないか?(試してないから分からんが) そしたら = でsplitして後は好きなように料理すればいいじゃん
use CGI qw(param); my %mode_map = map { $_ => 1 } qw(test1 test2 test3); my $mode = param('mode') || ''; $mode_map{$mode} ? $mode->() : main(); これでいい気がする。
195 :
178 :2006/05/06(土) 18:59:44 ID:???
>>192 ありがとうございます、参考にしますm(__)m
>>193 ありがとうございます
>>194 ためしにやってみたらできました!
みなさん本当にありがとうございました
これで目的のものを作っていけます
197 :
nobodyさん :2006/05/06(土) 22:10:22 ID:5YeEOpS5
#!/usr/local/bin/perl $countdat = "count.dat";#カウンターログファイル $ipdat = "ip.dat";#IPログのファイル open (IP, "+<$ipdat"); flock(IP, LOCK_SH); $iplog = <IP>; $ip = $ENV{ 'REMOTE_ADDR' }; if( $ip eq $iplog ){ seek(IP, 0, 0); print (IP $ip); close (IP); } else{ open (DATA, "+<$countdat"); flock(DATA, LOCK_SH); $count = <DATA>; $count++; seek (DATA, 0, 0); print(DATA $count); close(DATA); print (IP $ip); close (IP); } exit;
198 :
nobodyさん :2006/05/06(土) 22:11:24 ID:5YeEOpS5
IPが重複していたらカウントしないような、カウンターを 作りたくて上記のようにうってみたのですが、エラーが出て しまい、うまく動作しません。何が間違っているか自分では分からないので 教えてもらえたらと思います。
エラーメッセージも何も示されていないのでよく判りませんが、2行目に use Fcntl qw(:flock); を入れてみるとか。
>>198 エラーってまさか「Internal Server Error」とかじゃないよね・・・?
>>199 で確かにエラーは消えるが…はてさてフフーン
標準出力に何も吐かないCGI
204 :
nobodyさん :2006/05/06(土) 23:20:24 ID:5YeEOpS5
すみません。説明不足でした。
裏で処理させるだけのものってことでお願いします・・・。
>>200 Internal Server Errorなのか分からないです。
分かることだけ書いてみます。
・パーミッションは実行権限与えてます。【755】
・呼び出してはいるみたいですが、実行できていないため
ファイルも作成されていません・・・・。
>>205 とりあえず、自力でもっと頑張ってみます。
質問に答えてくれてありがとうです。
なんでエラーログぐらい貼ろうとしないのよ・・・ 実行できてないのが分かってるなら文法エラー エラーログにエラーとなる原因の行が書かれてるからその1行を書く エラーがごっそり出てる場合は、たとえばCGIにアクセスした時間が00:00:50とするなら、 エラーログで00:00:50の時間帯のエラーの最初の1文を貼り付ければいい 念のため2〜3行でもいいし とにかくエラーログを貼らないとどうにもならないです
209 :
nobodyさん :2006/05/07(日) 00:36:16 ID:NJ/WTSjH
211 :
nobodyさん :2006/05/07(日) 00:48:45 ID:NJ/WTSjH
>>197 悪癖をこじらせたまま成長して欲しくないのでざっと目視添削してみます。
1. 特に理由がなければ常に -w スイッチ(あるいは可能なら use warnings)を使いましょう。
# できれば use strict も使いましょう。
2. flock() で文字列定数を使うときには...
>>199 3. CGI.pm の利用を検討しましょう。大丈夫、案外怖くないです。
4. or die などを用いて open (と flock, seek)の返り値を確認しましょう。
# サンプル用に省略してたなら失礼。
5. "+<" モードでは存在しないファイルを開けません。前もってファイルを用意しておくか sysopen() を使いましょう。
6. print(FH $output) ではなく print FH ($output) と書きましょう。間接オブジェクトスロットの記法に注意しましょう。
7. サーバにアップロードする前に、最低限 -wc スイッチを用いたチェックをクリアーしましょう。
がんばれ。
213 :
212 :2006/05/07(日) 01:13:44 ID:???
s/文字列定数/定数/; # 訂正。寝ぼけてましたごめんなさい。
こういう具体的なポイントを示してくれるのってすごくありがたい。 参考にさせてもらうよ
215 :
nobodyさん :2006/05/07(日) 02:12:23 ID:uQfuojW8
Win32::OLEを使ってperlでWordの文書を印刷しようと考えています。 一応本(VBA)とネットの情報で、ローカルで実行して動くものはできました。 ただこれを、同じPCにApache入れてCGIとして動かすと動作が止まってしまいうまくいきません。 Apacheのエラーログには何も残らず、Wordが強制的に中断されたような状態になってしまいます。 行き詰まってしまって全く手がかりがつかめません。 どなたか、ご教授願えませんでしょうか。 # 一応Content-type書いてないとかそういうミスはないと思います。
216 :
nobodyさん :2006/05/07(日) 02:36:06 ID:uQfuojW8
なんかデーモンをAn httpdってやつにしたら動きました。。。 すれ違いの質問っぽいので向こうで聞いてきます。。。
217 :
nobodyさん :2006/05/07(日) 11:10:27 ID:YyQiWuCM
はじめまして。 掲示板を作りたくてperlについて学び始めた者です。 で、そのための学習書に沿って学ぼうとしてるんですけどperlのサンプルファイルがうまく起動しなくて困ってます。 ファイルを立ち上げても、一瞬ウィンドウが開いてすぐに消えてしまうからです。 原因のわかる方、対処法を教えてください。よろしくお願いします。
>217 その説明ではエスパーでないと原因が分からないと思います。
>>217 どのOSか知らんがコマンドラインから実行してみな
perl sample.pl
恐らく関連付けでサンプルを実行してるかと思われ なので219さんが言う通りにやってみるとよい
221 :
217 :2006/05/07(日) 11:35:33 ID:YyQiWuCM
コマンドラインについて調べた上でやってみたらうまくいきました。 219さん、ありがとうございますm(_ _)m でも直接立ち上げるにはどうしたらいいかわかります? やっぱり少し不便なんでアドバイスもらえるとありがたいです。
1.perl で GUI を開発できる環境 2.常にコマンドプロンプトを起動しておく 3.Apache を入れる
いずれかをどうぞ コマンドプロンプトを起動しておいたままってのが一番簡単かな
俺ならCopal2をすすめるけど。 練習にはコマンドプロンプト起動よりずっと良いし、CGIじゃなければそのまま使い続けられる。 UTF8のスクリプトに対応していないのが残念だが、練習レベルでは関係ないし。
>>212 197に書かせてもらった本人です。
これを参考にもう一度見直してみます。
エラーの内容が分かったらまた書かせてもらうかもです。
ありがとうございます。
>>217 @echo off
perl %*
pause
とかなんかそういう内容のバッチを書いて拡張子 ".pl" に関連付けるがいい。自己責任で。w
ちなみに cmd.exe 限定。command.com な人はちょっと違ってくるので注意な。
228 :
nobodyさん :2006/05/08(月) 15:30:46 ID:SAcZGaHh
クッキーが書き込めないよう(つд‘) テンプレートをHTML::Templateを使用して出力しているのですが、 クッキーをヘッダに書きだすにはどうすれば。。。? use strict; use CGI; use HTML::Template; my $q = new CGI; my $cookie = $q->cookie(-name=>'TEST', -value=>"cokkietest", -expires=>'+1h'); print $q->header( -type => 'text/html' -charset => 'EUC-JP', -cookie => $cookie); my $tmpl = HTML::Template->new(filename => 'test.html'); $tmpl->param(TESTNAME => 'クッキー書けない'); print "content-type: text/html\n\n"; print $tmpl->output();
229 :
nobodyさん :2006/05/08(月) 15:35:38 ID:??? BE:240570454-#
(゚Д゚)ハァ?
230 :
nobodyさん :2006/05/08(月) 15:39:16 ID:??? BE:673596487-#
誤爆スマソー
>print "content-type: text/html\n\n"; いらなくね?
>>228 手元のマシンでヘッダを吐くところまで、一度実行してみるといいよ。
>>225 原因が分かりました。
標準出力に何も表示させないとエラーが出るみたいです。
なので、
print "Content-Type: text/html\n\n";
print "$count\n";
を付け加えて、CSSでvisibility: hidden;で隠せばエラーが出ず
ファイルをうまく作成してカウントしてくれるみたいです。
最後に、質問に答えてくれてありがとうございます。
234 :
nobodyさん :2006/05/09(火) 02:28:53 ID:sSrkJPdW
1: Shift-JISで書かれたページで文字コードをEUC-JPに変換 2: &jcode::convert(\$word, "euc"); 3: ひらがなや漢字のみのケースでは変換されましたが 半角カナのみのケースや半角カナだけのケースでは変換されませんでした
236 :
nobodyさん :2006/05/09(火) 03:56:51 ID:sSrkJPdW
>>235 マジっす。
&jcode::convert(\$word, "euc");
してから再度Shift-JISに変換したら今度は文字化けします。
237 :
210 :2006/05/09(火) 04:44:28 ID:???
多分ここら辺だろうね。 ・厳密にはShift_JISに半角カナは含まれない。 ・Shift_JISで使う半角カナのコードはEUC-JPの漢字コードと被ってる。 よってノーマルのjcode.plの自動判別に半角カナは使えない。 入力する文字コードを指定するか、jcode.plを自分でカスタマイズする。
フセチー をsjisで保存してeucとして開くと・・・
>>239 どんな下ネタが飛び出すかとドキドキしたよw
なんか釣られた気分いっぱいだorz
・・テ・ユ・・・テ・ユ・・ェ。ェ
しねばいいとおもった
質問です
#!/usr/bin/perl
#use CGI::Carp qw/fatalsToBrowser/;
use LWP::Simple;
use XML::Simple;
$xml = XMLin(get('
http://weather.livedoor.com/forecast/rss/24/42.xml '));
print 'Content-Type: text/html; charset=utf-8', "\n\n";
print $xml->{'channel'}->{'item'}->[1]->{'title'};
1.ローカルで実行した時に
"Wide character in print at〜"と出るのを消したい
2.XREAに置いた時、エラーになって動作しない
2行目のCGI::Carpのコメントアウトを外すと正常に動作します
なぜでしょうか?
お願いします
245 :
nobodyさん :2006/05/09(火) 18:16:35 ID:KHJc4thI
>>244 1.はSTDOUTのレイヤを適切に指定してやればいいと思われる。
utf-8で出したいようなので、例えば
binmode STDOUT, ':utf8';
をprintする前に実行。
2はオレにはよくわからん。
2はモジュール入ってないだけじゃね?
248 :
244 :2006/05/09(火) 19:55:29 ID:???
>>246 ついさっきまでローカルで実行してた時は 1. の表示は出なかったんですよね
急に出たんです。なんででしょう。
>>247 CGI::Carpのコメントアウトを外せばちゃんと正常に表示されるので
モジュールは入ってると思います
>>248 XREA使ってるし、 use CGI::Carp qw(fatalsToBrowser); を
使ったりコメントアウトしたりもしてるけど、それが原因でコケたことはないです。
コードがBOMつきのUTF-8で書かれてるとCGI Wrap Errorが出るかも。
hoge.cgi(例)を hoge.cgid にリネームしてアクセスしたら詳細が出ますよ。
250 :
244 :2006/05/09(火) 23:48:12 ID:??? BE:192457128-#
>>249 ありがとうございます
could not find ParserDetails.ini in /usr/local/lib/perl5/site_perl/5.8.3/XML/SAX
って出ました。別のパーサー使えば治りそうなのか…な?
スクリプトファイルの文字コードはASCII文字列だけなので、特にはありません。
バイナリエディタで確認してもBOMは付いてなかったです。
Wide〜のエラーが出るのは何なんでしょうね?
251 :
244 :2006/05/09(火) 23:56:34 ID:???
ちょっと調べてみたら XMLパースの時点でutf8フラグが付いてますね これ無くすオプションみたいなのないんでしょうか
253 :
244 :2006/05/10(水) 00:13:17 ID:???
>>252 ありがとうございます
そこは何度も見ています
XML::Simpleは重いとの噂もありますし、
なるべく使わない方がいいのでしょうか?
少しは自分で判断しろや
質問に答えられない馬鹿はレスしなくていいよw
256 :
nobodyさん :2006/05/10(水) 14:27:15 ID:B75NkyiD
これはひどい 少しは自分で判断しろや
ではXML::Simpleの使用は自分で判断するとして 1.のエラーが突然現れたのは何故でしょうか?
>>257 鯖の応答が突然変化したか、お前が忘れてるだけで何かやったの
どちらか。
259 :
nobodyさん :2006/05/10(水) 14:43:49 ID:??? BE:433026566-#
>>258 自分のレスを読めば分かると思いますが、
皆さんのおかげでXREAの問題は解決しています
ローカルで時間を置いて実行したら急に『Wide〜』の表示が出たので
自分が何かをした、と云うのは無いと思います
Locationヘッダについて質問です。 Locationヘッダを最後に書き別のページへ移動するようにした スクリプトをインラインフレームから実行してもフレームを抜けてくれません。 とある解説書によるとLocationヘッダは動的にアドレス欄を変更することで どの子フレームも抜けられるはずなんですが・・・。 代替策でもいいのでアドバイスお願いします。 また、ここの掲示板に書き込みすると「書き込みました。しばらくお待ちください。」 と表示されて自動的にページが移動しますが、あれはどうやっているのでしょうか。
261 :
nobodyさん :2006/05/10(水) 15:19:15 ID:??? BE:96228342-#
インライン内では無理だと思う 「しばらくお待ちください」からページが変わるのはMETAタグのRefreshで フレームを解除したいなら、そのフォームのTARGETに_top指定とかは?
264 :
nobodyさん :2006/05/10(水) 15:39:59 ID:??? BE:180427853-#
板違いじゃないだろう JavaScriptで window.open("jump_to.html", "_top"); これでうちの環境はインラインフレーム抜けたけど
265 :
nobodyさん :2006/05/10(水) 15:54:44 ID:??? BE:240570645-#
何秒後とかやりたいのなら setTimeout('top.location.href="jump_to.html"',"3000"); とか
>>264 は池沼だからしょがない
残念な人だから優しくヌルーしてあげるのがやさしさだ
268 :
nobodyさん :2006/05/10(水) 16:15:28 ID:??? BE:144342443-#
少なくとも質問者はLocationヘッダ云々言ってるんだからスレ違いじゃないでしょ。 回答者が何を答えようと勝手でしょ そんな事も分からないのかな…
HTTPヘッダがいつperl特有のものになったんだよチンカス
270 :
nobodyさん :2006/05/10(水) 16:26:27 ID:??? BE:180427853-#
それも一種のコーディングでしょ。
解答者が何を答えようが勝手とか、どこまで残念な脳味噌してるんですか・・・ 残念将軍だな
272 :
nobodyさん :2006/05/10(水) 16:27:58 ID:??? BE:324770639-#
>代替策でもいいのでアドバイスお願いします。 って書いてあるでしょ 日本語読めるの?
ロケーションヘッダ送信後の動作はクライアントの問題であり、Perlコーディングの問題では無い。 ここまで丁寧に書かないと駄目ですか・・・
264と268は、267の「残念な人」を「Perl=CGIだと勘違いしている人」と 読み替えてみるところから始めるといいと思うよ。
275 :
nobodyさん :2006/05/10(水) 16:32:13 ID:??? BE:144342634-#
ここwebprogだし、HTMLとかも含めての質問じゃないの?
277 :
nobodyさん :2006/05/10(水) 17:31:05 ID:??? BE:240570645-#
(´・∀・`)ヘー もうどうでもいいや
Perlのflockの事で、「OSによっては致命的エラーになる可能性がある」という記事を読んだのですが、 ここで言うOSとは鯖のOSの事なんですか? flockchという検査用の配布スクリプトを実行してみたところ正常に動作しましたが、 flockの動作がクライアント側のOSに依存するのであればmkdir方式に変更しようかと考えてます。 良い方法を教えてください
板とスレはきちっと区別しましょう
PHPスレでPerlの質問はスレ違い
だからPerlスレでHTML・Perlはスレ違い
ある質問に対して最初の回答ならまだしも、それ以上の回答はスレ違いだからと誘導があるのにしつこい
>>277 が悪いな
280 :
nobodyさん :2006/05/10(水) 17:48:37 ID:??? BE:324770639-#
Win98とかじゃないの
281 :
nobodyさん :2006/05/10(水) 17:49:15 ID:??? BE:433027049-#
282 :
nobodyさん :2006/05/10(水) 17:50:33 ID:??? BE:541282695-#
だから〜回答者が何を言おうと自由なの。 ここは君のスレでも君の板でもないの。
283 :
nobodyさん :2006/05/10(水) 18:23:56 ID:dkGjsQPO
なんだろ かわいそうな固定って何処の板にも居るもんですね
284 :
nobodyさん :2006/05/10(水) 18:25:04 ID:??? BE:144342926-#
もうコテやめたしー
285 :
nobodyさん :2006/05/10(水) 18:28:07 ID:dkGjsQPO
beで書いておいて固定じゃないとか(((;゚д゚)))
286 :
nobodyさん :2006/05/10(水) 18:28:07 ID:??? BE:180427853-#
で、さ。
悪口は別にいいんだけど、
>>246 ,248
の答え分かる人居ないのかな?
287 :
nobodyさん :2006/05/10(水) 18:28:47 ID:??? BE:866052689-#
Beはニュー速の規制回避の為に常時付けてるだけだよ 外すのもめんどいし
雑談は他でやれ
test
265より上の人たちよ!! おいおい、君らほんとに2ちゃんねる使ってるの? 2ちゃんねるではJavaScriptを切っても、書き込み後に自動的に移動するぞ。 確認もせずにまあぬけぬけとJavaScript談義を抜かして何やってんだかorz だから、perlでどうやって自動的にページを移動するかというのが問題。 だふんperlのalert関数を使ってるんじゃない? この関数はフリー鯖では使えないけど。
291 :
nobodyさん :2006/05/10(水) 19:22:04 ID:??? BE:541282695-#
何だこの流れ('A`)
293 :
278 :2006/05/10(水) 19:37:49 ID:???
>flockの動作がクライアント側のOS C/Sを理解してるか?
295 :
nobodyさん :2006/05/10(水) 19:42:43 ID:??? BE:144342162-#
むしろどうやったらクライアントに影響が出るのか小一時間
296 :
278 :2006/05/10(水) 19:43:31 ID:???
>>294 >C/S
まったく分かりませんorz
一度flockが動作したら、その後も同じ鯖であればクライアントの環境に影響せずに動作するんでしょうか?
297 :
278 :2006/05/10(水) 19:45:48 ID:???
>>295 そう言われるとそうですね。
クライアント側がサポートしていなければevalでトラップするのかと思ってました
perlがどこで動いてると思ってるんだ
299 :
278 :2006/05/10(水) 20:10:49 ID:???
おかげで理解しました。 ありがとうございました
早 /::::l:::l::、:::::、:::::ヽ::、::::::::::::\:::\::::::::ヽヽ::::::ヽ 駄 .く /:::!::::i:::!:::ヽ:::ヽ::::::ヽ::ヽ、::::::::::\:::ヽ:::::::ヽヽ::::::', 目 な. /:l::::!::::ヽ!::ヽ:::::::ヽ:::::::\:::ヽ、::::::::ヽ:::ヽ::::::::!::i:::::::! だ ん ハ:::l:::::、::::ヽ::::\:::::\:::::::\:::`ヽ、:::ヽ::ヽ:::::!:::!:::::l と /:::::::l::::::!ヽ:ヽ::::、:::::ヽ:::、:\::::: \::::::\::::!::::ヽ:!:::i:::l:l こ か !:/!:::::!::::::!::ヽ:ヽ{:::\:::ヽ::::\:::\::ヽ:::::::ヽ!:::::::}!::::l::li| い し j/:::l:::::!:、:::!::ト、:、:ヽ:::::`ヽ{、::::::\::::\{、::::::::::::::::i::!::l:l ! つ な l:i:l::::i::i:、:l::lテ=-、:ヽ、_、::\_,≧ェュ、_、\:::::::::i::li::!::リ : い !ハト:{:!:i:トN{、ヒ_ラヘ、{ >、{ 'イ ヒ_ラ 》\::l::!:ト!!:l::l! : と ヽ i、ヽ:ト{、ヾ ̄"´ l!\ `" ̄"´ |::!:l::! j:ll:! : !::、::::i l u |:::/lj/l:!リ : ヾト、:!u j!/ j|:::リ ヾ! ヽ ‐ u /イ´lハ/ }ト.、 -、ー-- 、__ /' !::// リl::l゛、 `二¨´ / |/:/ rー''"´ト!::i{\ / / !:/ / ^ヽ ヾ! ヽ _,,、'´ / j/
PerlのCGIで定期的に処理をさせたいのですが、そのようなことは不可能でしょうか? 具体的には、30分ごとに指定されたURLをGETリクエストするという処理です。 完全にサーバー側で処理させて、クライアントからのアクセス無しに定期的に処理したいのですがやはり不可能でしょうか?
302 :
nobodyさん :2006/05/10(水) 22:14:24 ID:??? BE:168400027-#
cron使えよ
304 :
301 :2006/05/10(水) 22:27:12 ID:???
>>302-303 すいません、書き忘れていましたがcronは使いたくないのです。
cronを使わずに一定間隔ごとにクライアントからの要求無しに処理をするのは不可能でしょうか?
305 :
nobodyさん :2006/05/10(水) 22:29:43 ID:??? BE:144342162-#
at
perlに関係無いことと環境がかかれてないことに気付いてくれ・・・ なんだ、今日は「スレ違い祭」なのか?
>>307 やはりできませんか…おとなしくcron使います。ありがとうございました。
309 :
301 :2006/05/10(水) 22:41:13 ID:???
すいません
>>308 は
>>301 です。cronのほかにやり方があるならぜひ教えてください。お願いします。
310 :
nobodyさん :2006/05/10(水) 22:44:38 ID:??? BE:288684083-#
つーか具体的にどう云うスクリプトを書きたいのか書けば もう少し的確なアドバイスが出来るかも
311 :
301 :2006/05/10(水) 22:51:09 ID:???
>>310 >>301 に書いたように一定間隔で指定されたURLをGETリクエストして保存するスクリプトです。
ほかにどのように詳しく書けばいいのかよくわかりませんのでとりあえずこれだけできればいいんでこれだけ書きます。
>>311 っ【無限ループ】
元々CGIともPerlのコーディングとも関係ないけど
cronが使えるのに使いたくない理由が知りたい。
313 :
301 :2006/05/10(水) 23:05:02 ID:???
>>312 無限ループをどのように使ったらいいのでしょうか?1回アクセスしたら無限ループにすることはできますがブラウザを閉じてしまったら
その要求は破棄されてそのスクリプト(CGI)はとまってしまうのでは無いのですか?
>cronが使えるのに使いたくない理由が知りたい。
自鯖だけで動かす予定じゃなかったんで、cronが使えない鯖でも動いたらいいなってことです。
CGIとして動作させないもんだと思ってたら > ブラウザを閉じてしまったらその要求は破棄されてそのスクリプト(CGI)はとまってしまう こうなってるし、よくわかんないので酒飲んで寝ます。 無限ループは忘れてくだちい。
さすがWebprog板
素直にクライアントからCGIを動かすURLを叩いてればいいかと
だね。クライアントでcron動かして叩き続ける
>>261 はこの事態を想定してこのURLを出したんだよ!
これはすなわち延々とRefreshし続けろということなんだよ!
CGIで動く以上、サーバのタイムアウトがあるだろうから無限ループは無理だけどね。
よろしくおねがいします 下記の文字列を正規表現を使い$a$、$b$、$c$と それぞれ置き換えるのにはどうしらたらいいのでしょうか、いまのままだとうまく置き換えられません $a$$b$$c$
321 :
320 :2006/05/11(木) 12:36:50 ID:O4GQ7qfs
>>320 ちなみに
$a$-$b$-$c$などと文字を挟むと置き換えられます
323 :
320 :2006/05/11(木) 13:43:30 ID:O4GQ7qfs
レス有難うございます しかし下記のような場合はどうしたらいいのでしょうか $tmpl='$a$$b$$c$'; $tmpl =~ s/\$$_\$/$in{$_}/g;
>>323 $_にa,b,cが入ってて、foreachで回すならそれで動くんじゃないの?
じゃないなら(何したいかよく分からんけど)
$tmpl =~ s/¥$(.)¥$/$in{$1}/g;
325 :
nobodyさん :2006/05/11(木) 13:57:18 ID:mIPF1ZNx
・@dataにテキストファイルの中身が収められている ・@dataは空っぽの場合もあれば、数千行の場合もある ・@dataの「空行ではない最終行」を$lineに取得したい これらの条件の場合、Perlらしい素敵な記述はどのようになりますでしょうか? ちなみに下記はショボい例。 @data = reverse @data; foreach (@data) { if ($_) { $line = $_; last; } }
326 :
320 :2006/05/11(木) 14:14:43 ID:O4GQ7qfs
説明が下手で申し訳ない こんな感じなのですが、連続しているとマッチして置き換えられないんです 仮に$str='$a$-$b$-$c$'といった違う文字が挟んである場合は大丈夫です。; $str='$a$$b$$c$'; foreach (%in) { $str =~ s/\$$_\$/$in{$_}/g; }
327 :
nobodyさん :2006/05/11(木) 14:35:32 ID:??? BE:180428235-#
>>325 我ながら酷いコードだけど
until (($line = pop @data) ne "") {}
328 :
nobodyさん :2006/05/11(木) 14:45:48 ID:mIPF1ZNx
>>327 ありがとうございます。なるほど、pop使えばreverseは要りませんね。
ワンライナーでキレイではないでしょうか?
ちょっと後でベンチマーク取って試してみようと思います。
329 :
325 :2006/05/11(木) 15:14:29 ID:mIPF1ZNx
小さいファイルだと4倍以上untilの方が速い事もありましたが、 Benchmark: timing 1000 iterations of foreach, until... foreach: 1 wallclock secs ( 0.86 usr + 0.08 sys = 0.94 CPU) @ 1067.24/s (n=1000) until: 1 wallclock secs ( 0.64 usr + 0.06 sys = 0.70 CPU) @ 1422.48/s (n=1000) 70KBくらいのファイルで試してみたところ差が縮まりました。
ループ内は配列演算だけにして、最後に$lineへ代入したら速くなる? for($i=$#data; !$data[$i]; $i--){} $line = $data[$i];
>>325 $_ and $line = $_ for @data;
$_ ne '' and $line = $_ for @data; 初歩的間違い >> 331
333 :
325 :2006/05/11(木) 17:33:07 ID:mIPF1ZNx
>>330 さん、
>>332 さん、ありがとうございます。
イテレーションを5000回に増やして試してみました。
なお、
>>332 さんの方はreverseが必要になると思うので、追加しています。
Benchmark: timing 5000 iterations of No.330, No.332, foreach, until...
No.330: 3 wallclock secs ( 3.31 usr + 0.39 sys = 3.70 CPU) @ 1350.26/s (n=5000)
No.332: 5 wallclock secs ( 3.94 usr + 0.23 sys = 4.17 CPU) @ 1198.75/s (n=5000)
foreach: 4 wallclock secs ( 3.89 usr + 0.19 sys = 4.08 CPU) @ 1226.09/s (n=5000)
until: 3 wallclock secs ( 3.42 usr + 0.14 sys = 3.56 CPU) @ 1403.31/s (n=5000)
334 :
325 :2006/05/11(木) 17:35:50 ID:mIPF1ZNx
すみません、ちょっとミスしたところがあるので計り直しです。 Benchmark: timing 5000 iterations of No.330, No.332, foreach, until... No.330: 4 wallclock secs ( 3.30 usr + 0.36 sys = 3.65 CPU) @ 1367.99/s (n=5000) No.332: 4 wallclock secs ( 3.42 usr + 0.28 sys = 3.70 CPU) @ 1350.26/s (n=5000) foreach: 4 wallclock secs ( 3.83 usr + 0.28 sys = 4.11 CPU) @ 1216.84/s (n=5000) until: 4 wallclock secs ( 3.23 usr + 0.38 sys = 3.61 CPU) @ 1385.04/s (n=5000)
335 :
nobodyさん :2006/05/11(木) 17:38:31 ID:??? BE:577368768-#
あんまどれも変わらんね 読みやすいコードでいいんじゃないかな?
要するにどうでもいいと、そういうことですか?
>>333 >>332 の方式は、先頭から空行でなければ$lineへ代入を末尾まで行う方式のためreverseすると間違いです。
@dataがオンメモリという前提だとあまり効率的でないかも?ですが、
ファイルからの読み込み時にそのまま適応できる、ということですね。
338 :
325 :2006/05/11(木) 17:40:59 ID:mIPF1ZNx
ごめんなさい、泣きの一回です。これで帰ります。みなさんありがとうございました。
>>325 に書いたスクリプト、reverseの位置を変えただけで処理速度がかなり上がります。
foreach (reverse @data) {
if ($_) {
$line = $_;
last;
}
}
結果:
Benchmark: timing 5000 iterations of No.330, No.332, foreach, until...
No.330: 4 wallclock secs ( 3.42 usr + 0.33 sys = 3.75 CPU) @ 1333.69/s (n=5000)
No.332: 3 wallclock secs ( 3.47 usr + 0.30 sys = 3.77 CPU) @ 1328.02/s (n=5000)
foreach: 4 wallclock secs ( 3.25 usr + 0.34 sys = 3.59 CPU) @ 1391.21/s (n=5000)
until: 4 wallclock secs ( 3.27 usr + 0.39 sys = 3.66 CPU) @ 1367.24/s (n=5000)
ここまで来ると誤差の範囲ですね…。ではまた。
最下行からループしたほうが早いんでない?
$_ ne '' and $line = $_ for 0..$#data; こうか。
ちがう、全然違う!無視してくれ
342 :
325 :2006/05/11(木) 17:58:35 ID:???
>>337 なるほど、勘違いして失礼しました。
結果は貼りませんが、reverseを追加しなければ僅差でNo.332が最速でした。
まあどれもほとんど同じ、お好みでって事になりますね。
>>339 No.332以外は最下行からループするアルゴリズムになっていると思います。
ただNo.332は上から全部見て行っても遅くありませんでした。
reverseにかかる時間とforでloopする時間とに違いがあるかどうかだな。 添え字付けアクセスは結構遅いということか。
初心者の自分としては、こう書いてもらいたい。 do { $line = pop @data; } while($line eq "");
>>332 をもう少し早くしたいなら
$_ ne '' and $line = $_, last for @data;
until で書くと
1 until ($line = pop @data) ne '';
あ、reverse が必要か。 $_ ne '' and $line = $_, last for reverse @data; 短いのは until のやつかな。
347 :
nobodyさん :2006/05/11(木) 20:50:54 ID:V8lYCtov
#!/usr/local/bin/perl $maximum = 99999;#カウンターの最大値(最大値を超えると0に戻ります。) $value = "%05d";#カウンターの桁数( %04d, %05d, %06d ←このように桁数を変更して下さい。) $countfile = "count.txt";#ログファイル(カウンター) $ipfile = "ip.txt";#ログファイル(IP) open (COUNT, "<$countfile"); flock(COUNT, LOCK_SH); chomp($count = <COUNT>); $iplog = <COUNT>; close(COUNT); $ip = $ENV{ 'REMOTE_ADDR' }; $maximum = sprintf("$value", $maximum); if( $ip ne $iplog ){ $count++; } if( $maximum < $count){ $count = 0; } open (IP, ">$countfile"); flock(IP, LOCK_EX); print IP ($count."\n"); print IP ($ip); close(IP);
348 :
nobodyさん :2006/05/11(木) 20:53:04 ID:V8lYCtov
#時間取得 ($sec, $min, $hour, $day, $mon, $year) = localtime(time); $year = $year + 1900; $mon++; $sec = sprintf("%02d", $sec); open (LOG, ">>$ipfile"); flock(LOG, LOCK_EX); print LOG ($ip."\n"); print LOG ($year."/".$mon."/".$day."\t".$hour.":".$min.":".$sec."\t".$ENV{ 'HTTP_USER_AGENT' }."\n\n"); close(LOG); $count = sprintf("$value", $count); print "Content-Type: text/html\n\n"; print "document.write('$count')"; exit;
上記スレ二つに書いたコードなんですが、 これをもっと高速化するにはどうしたらいいですか? SSIのexecとincludeが使用できないので、Javascriptで 呼び出しています。 他にもっといい呼び出し方などあったら是非教えてください。
350 :
nobodyさん :2006/05/11(木) 20:57:21 ID:??? BE:589397077-#
特にないんじゃない? 突っ込みどころは沢山あるけど
351 :
nobodyさん :2006/05/11(木) 20:58:34 ID:V8lYCtov
$count = sprintf("$value", $count); この行必要?
>>347 ・ファイルのオープンには絶対エラーチェックを入れる
・ファイルを二回にわけてオープンしてたら、ロックの意味が無い
最低この二点を勉強して。
突っ込みどころ多すぎて、全部突っ込めと言われたら完全に書き直しになるが、 あえて一つ突っ込むなら、$countfileを一旦閉じて開きなおしてるのはいかん。 これじゃアクセスが重なると空回りするぞ +<モードで開いておいて、読み終わったら頭にseekして書き込み、 そして閉じる前にtruncateするのが最適解かと。
my $line = $_ while( pop @data ); でいいと思う。 行にゼロは無いと仮定しているレスばかりだが、いいのか?
>>355 definedは厳密に言えば付けた方が良いですが、まあ一般に要らないと思います。
変数のスコープって何で大事なの?グローバル変数だけのプログラムは何故だめなの?引数なしの関数は何故悪いの?
358 :
nobodyさん :2006/05/11(木) 22:06:26 ID:??? BE:144342926-#
汎用的でない、読みにくい等…
>変数のスコープって何で大事なの? スコープの範囲によって変数の値が変わる場合があるから。 グローバル変数にするとスコープの範囲がグローバルになるから、範囲を気にする必要なくなる。 >グローバル変数だけのプログラムは何故だめなの? 規模が大きくなると破綻するらしいけど、自分で管理できるならグローバル変数でOKなんじゃない? >引数なしの関数は何故悪いの? 暗黙のうちにグローバル変数を使うことになるから。
スコープ内で使用する変数全てをローカル変数に一気に宣言してしまう方法はないでしょうか? my()宣言するのがとても大変です。 またグローバルで使う場合もある処理の場合、そのままコピペできればと思うのですが よろしくお願いします
>>325 今更だけど
if($data[-1]){
$line=$data[-1];
}
これじゃ駄目なの?
>354 +<でopen read seek truncateで0バイト化 print って手順てこと? truncateで0バイト化するならseekは要らない気もするけどどうなんでしょ? 言葉が足りなくて上げ足取りみたいな感じたらスマソ それとも桁が減った場合を考えてのtruncateを使用ってことでしょうか?
>>355 $lineが拾えないのですが…。(undefになっているようです)
>>361 ファイルの最終行が空行かも知れません。
その前の行も空行かも知れません。
>325 my($linecnt) = $#data; my($lastline); if($linecnt){ $lastline = @data[$linecnt]; }
>>364 -wでwarningが出て、さらに最終行に空行が入っていると中身を取得出来ないようです。
>363 そうゆうことがあるなら・・・ $linecnt = $#data; for $i ($linecnt..0){ $lastline = chomp($data[$i]); if($lastline){ last; } } もしループを抜けて$lastlineが空なら、@dataは空か、改行だけしかないデータとなる
>>362 スマソ、少し説明が足りなかった。桁が減った場合を考えて、だね。
truncateとprintが逆で、書き込んだ後に、tellしてその長さにそろえるの。
read
seek
print
truncateで現在位置(tell)まで切り詰め
truncateは位置が頭に戻ることを保障されてないから、その場合でもseekを消すとまずいかも。
susv3のftruncate仕様より
> The value of the seek pointer shall not be modified by a call to ftruncate().
あっ、なるほど 書き込み後のファイル位置まで削るってことか。 書き込み後のファイル位置は気にしたこと無かったから想像できなかったわ
>>357 本物のプログラマはローカル変数を使わない
・本物のプログラマは全てのグローバル変数を混乱せずに管理出来る。
・本物のプログラマはサブルーチンを作るときに引数を使わない。
・本物のプログラマは不要になった変数空間が解法されずに残ることを恐れない。
本物のプログラマなら誰でも知っている通り、有用な変数のスコープはグローバル変数しかないのだ。
さまざまな関数の一時変数や再帰、さらにはクロージャの変数管理はすべてグローバル変数で実装可能であり、わざわざ複雑な構造を取り入れてプログラミング言語をごちゃごちゃにせずとも、ただの特殊な場合として扱うことが可能なのである。
このような手の込んだ構造の最悪な点は、それらを使うときにいちいち宣言しなければならないと言うことにある。
初心者が勘違いするからやめなよ…
>>370 ああごめん、初質スレだったな…せめて最後に一言加えるべきだったか
ここじゃ釣れないぞ
ちょと質問です $data = "\0\0\0\x0a"; $data =~ s/([\x00-\xff]{$n})$/ func($1) /e; データ末尾 nバイトを置き換えようとしてるんですが なぜか 0x0A にマッチしてくれません。 これは一体どうゆうことでしょうか? そしてこれはどう書くべきなのでしょうか? お願いします
>374 ありがとです。 スッキリしました。
>>325 $_が項で主張してるとPerlっぽくない。
というかもし、最終行以外捨てるならそこが一番重いところになる。
$line = grep /./, @data;
>>375 もっとすっきりするには・・・
s/(.{$n})\z/ func($1) /sex;
悔しいけどちょっとウケた。
>>378 typoじゃね?
s/(.{$n})\z/ fuck($1) /sex;
381 :
325 :2006/05/12(金) 09:22:53 ID:???
おはようございます。昨晩はいろいろありがとうございました。
Benchmark: timing 50000 iterations of No.330, No.332, No.344, No.345, No.346, No.366, foreach(338), grep(377), until(327)...
No.330: 3 wallclock secs ( 2.98 usr + 0.06 sys = 3.05 CPU) @ 16409.58/s (n=50000)
No.332: 4 wallclock secs ( 4.06 usr + 0.08 sys = 4.14 CPU) @ 12074.38/s (n=50000)
No.344: 3 wallclock secs ( 2.92 usr + 0.02 sys = 2.94 CPU) @ 17018.38/s (n=50000)
No.345: 3 wallclock secs ( 2.91 usr + 0.00 sys = 2.91 CPU) @ 17205.78/s (n=50000)
No.346: 3 wallclock secs ( 2.88 usr + 0.13 sys = 3.00 CPU) @ 16666.67/s (n=50000)
No.366: 3 wallclock secs ( 2.75 usr + 0.03 sys = 2.78 CPU) @ 17979.14/s (n=50000)
foreach(338): 3 wallclock secs ( 2.73 usr + 0.03 sys = 2.77 CPU) @ 18076.64/s (n=50000)
grep(377): 3 wallclock secs ( 3.08 usr + 0.05 sys = 3.12 CPU) @ 16005.12/s (n=50000)
until(327): 3 wallclock secs ( 2.84 usr + 0.03 sys = 2.87 CPU) @ 17391.30/s (n=50000)
個人的には
>>376-377 さんのgrepを使ったアルゴリズムが好きです。
注)
@dataが壊れる(壊れても構わないのですが)場合、結果がおかしくなるので
公平を期すため、全てのテストルーチンには@data = @backup;を入れています。
それが不要なアルゴリズムは、省けばさらに速くなります。
(昨日出したベンチマーク結果は毎回ファイル開いて読んでました…無駄すぎですね)
また、@dataにはchompが掛かっているので
>>366 さんからはそれを省いています。
>>381 @data=@backupだけのも測定して欲しい。そうすれば引き算して比べられる。
383 :
325 :2006/05/12(金) 10:03:29 ID:???
>>382 backup: 3 wallclock secs ( 2.72 usr + 0.02 sys = 2.74 CPU) @ 18281.54/s (n=50000)
謎です、これじゃ引き算出来ません。
benchmarkの測り方を間違えていたなんていう強力なオチがありそうで怖いですが…。
どこかにスクリプト自体をアップした方が良いですかね?
384 :
325 :2006/05/12(金) 10:16:16 ID:???
>>383 もちろんそのまま引き算できるわけでなく、たとえば 回数/s の逆数をとって一回あたりの
秒数をだして引き算するわけよ。
387 :
325 :2006/05/12(金) 11:03:32 ID:???
>>385 まとめ、大変分かりやすいです。どうもありがとうございます。
>>386 なるほど、あの結果はあれでおかしくはないんですね。
とりあえずスクリプトは
>>384 でアップしましたので、お好きな方にカスタマイズは
お任せするつもりです。
388 :
nobodyさん :2006/05/12(金) 12:32:30 ID:??? BE:192455982-#
いい加減うざいんだけど
>388 それは自分への言葉ですか? 分かってるなら消えろよカスwww
390 :
nobodyさん :2006/05/12(金) 13:19:22 ID:??? BE:541283459-#
( ^ω^)やだお
391 :
nobodyさん :2006/05/12(金) 14:15:44 ID:DNrRJ4oV
aboneで読めないな。。
392 :
nobodyさん :2006/05/12(金) 14:25:09 ID:??? BE:252599437-#
どうやってあぼーんしてるか気になるなぁ Be全体をあぼーんでもしてるのだろうか(笑)
abone設定完了。簡単。
394 :
nobodyさん :2006/05/12(金) 14:36:21 ID:??? BE:288685038-#
(;^ω^)
395 :
nobodyさん :2006/05/12(金) 14:48:47 ID:HUYCFakY BE:207328853-
396 :
nobodyさん :2006/05/12(金) 14:52:12 ID:??? BE:420998257-#
訳分からん 改造スレ池
397 :
395 :2006/05/12(金) 16:07:29 ID:??? BE:82932023-
出来ました^^ めげずに頑張ってみるものですね!
まんこがかゆい
400 :
nobodyさん :2006/05/13(土) 00:50:41 ID:RdM+BVxR
#!/usr/bin/perl print "Content-type: text/html\n\n"; print "こんにちは!\n"; ↑これだとInternalServerErrorが出るんですが、 #!/usr/bin/perl -w に書き換えると正常に『こんにちは!』と表示されるのですが、どうしてでしょうか? -wはエラーがあったら表示、みたいに思いこんでたんですが…
>>400 -wはwarningオプションなのでエラーとはまた違います。
(こういう書き方はイカンとか、間違ってるかも知れないとかの警告)
それで、ぱっと見た感じ間違いは無さそう。
正常に表示されるスクリプトから、「 -w」の3バイトを丁寧に削ってまた試してみては?
402 :
nobodyさん :2006/05/13(土) 01:04:20 ID:RdM+BVxR
>>401 さん
なるほど、Warningの略だったんですね。
アドバイス通りに『 -w』を削ってみました。
1バイトあたり1分ぐらいかけて慎重に削り、パーミッションも744にしたのですが、
やはり『 -w』が無いと動かないようです。
というか、MovableTypeを見ていて『-w』と書いてあるのを見てマネしたら動いちゃった、
って感じなのですが、『-w』をつけないと動かないってことはあり得るんでしょうか?
>>400 既にFAQだなこりゃ
FTPで上げるときにBinaryモードで上げてるだろ。Asciiモードでやって見れ
404 :
nobodyさん :2006/05/13(土) 01:12:21 ID:RdM+BVxR
>>403 さん
なるほど、それが原因なんですか…
これも既出もいいとこかもしれませんが、仕事中なのでコッソリ教えてもらえるとうれしいです。
IEでFTP接続しているんですが、AsciiモードやBinaryモードを切り替えることはできるのでしょうか?
よろしくお願いします。
何でもいいからIE以外のFTPクライアントを使うことを勧める・・・
406 :
nobodyさん :2006/05/13(土) 01:29:23 ID:RdM+BVxR
>>405 さん
普段はFFFTPを使ってるんですが、今使ってるサーバーはFFFTPだと
ファイル一覧が取得できないんですよね…
しかし、MovableTypeはIEでアップロードして動いたのに、不思議なものです…
スレ違いになってしまったので、このあたりで失礼します。
親切にありがとうございました。
>>406 スレ違いで難だけど一応ここまで聞いちゃったら…
ホストの設定の"NLST -Rを使って高速に再帰取得"を切ってみれ。
それで駄目なら"LISTコマンドでファイル一覧を取得"にチェックを入れてみれ。
#!/usr/bin/perl[CR][LF] だとOSは"/usr/bin/perl[CR]"というコマンドを起動しようとする。
よってそんなインタプリタは見つからないのでエラー。
#!/usr/bin/perl -w[CR][LF] だとOSは"/usr/bin/perl"に"-w[CR]"を渡そうとする。
perlはCRを無視して無事起動。そういや、どこかの入門サイトでエラーになることがあるから、
shebang行には#!/usr/bin/perl -と書けと言っている迷サイトもあったと聞いたな。
408 :
nobodyさん :2006/05/13(土) 01:56:30 ID:RdM+BVxR
>>407 さん
ありがとうございます。
おかげさまでFFFTPでファイル一覧が取得できてしまいました。
今までの苦労は何だったんだ、と怒りに震えるほど感謝しています。
今までの23年間の人生で初めて涙を流して感謝しました。
shebang行の最後にスイッチを終了させる「 --」をつけても解決できると思うよ。
my の使い方で質問です。例えば foreach $line (@list_hoge) { my ($key, $value) = split ":", $line; $hash_ref_hoge->{$key} = $value; で、my がループ毎に実行されるのが気分的によくないです。 繰り返しブロック中の一時的な変数って、ブロックの中/外、どちらで 宣言するのが一般的なんでしょうか?中で宣言するとループ毎に別変数に なってしまう(と思う)し、外で宣言すると my の意味が無い気がする。
何で気分が良くないのか和漢ね { my $hoge; for(@fuga) { } }
ありゃあ途中で送信しちゃったけどループの外のブロックで宣言すれば? そういう事じゃなかったらごめん
だいたい$lineをmyしてないヤシが(ry
よほど繰り返し回数の多いループとかじゃなければ見易さ優先でいいと思うのだが。
415 :
nobodyさん :2006/05/13(土) 21:56:02 ID:vvOrsJnf
perlスクリプト内の'chop'は全て'chomp'に置き換えても問題ないですか? #ちなみに、'chop'と'chomp'が混在してるスクリプトの場合です
>>415 chopとchompは意味が違うので、無条件に置き換えられるかどうかは不明
わざわざ混在してるとなると、置き換えられないかも
作者に聞いてくれ
>>410 それでいいんだよ。
その1周分のループの中でしか使わないし、その明言でもある。
違和感あると言うけど、ひょっとして「my付けろって言われたからつけてる」って程度の認識だったりしない?
>>410 変数の寿命は短ければ短い方がいいという教えに従えば内側で宣言する。
別に外で宣言してもいいけどね。
420 :
410 :2006/05/13(土) 22:33:22 ID:???
>>411-414 ありがとう($lineのmy抜けはtypoということで。)
自分は
>>414 と同じ考え方で質問に書いた書き方をしてるんだけど
「普通こう書くだろう」っていうのがあれば、と思い質問した次第です
(412 が「普通こう書く」なのかな?)
#あまり気にしないことにします。
421 :
410 :2006/05/13(土) 22:52:39 ID:???
あ、書いてる間にレスが・・
>>418 違和感は、
自分は「$key、$value はこの foreach ブロック(!=ループ)でワーク変数として使う」
つもりで宣言しているのに、ループ毎に別変数が生成されると、何か
変数入れるメモリがもったいないんじゃない?とか思ってしまう
からなわけです(貧乏性)。もしかしてループ毎に前のループの変数は
開放されるのかな? であれば問題ないな。
( ^ω^) ・・・
my宣言された変数はそのブロックの最後で消滅してるので ループ中のmy宣言されてるものはその都度新しく生まれ変わってる別物です
生成と破棄が嫌ならループの外に出せば良い。 その場合は、同じ変数を使い回す事になる。 split後の$key, $valueの文字列長が、ループ内でだいたい同じ程度なら Cレベルでのreallocもあまり気にしなくて良くなる。 一方、ループ内に入れた場合は、変数のメモリはループ毎にヒープに返される。 最適化がどうなってるか分からないけど、 もしかしたら同じスカラを使い回しているかも知れない。 微妙な違い。多分、ループ外に置いた方が速い。
>>421 内側が基本。
外側で宣言しちゃったら値の局所化、名前の局所化どちらも意味なくなっちゃうじゃん。
このPart48スレで何回か話題なったから読み返してみ。
もちろん、ループの進行と共に変化していく系の変数なら外のスコープで宣言するしかない。
426 :
nobodyさん :2006/05/14(日) 02:15:49 ID:EM3+kg+P
BBSスクリプトの一部なんですが、↓のような記述があります。 $message =~ s/<a href="\.\.\/test\/read\.cgi\/$FORM{'bbs'}\/$FORM{'key'}\/n?\d+-?\d*" target="_blank">(>>\d+-?\d*)<\/a>/$1/g; $message =~ s/<r>>>(\d+)-(\d+)<\/r>/<a href="..\/test\/read.cgi\/$FORM{'bbs'}\/$FORM{'key'}\/n$1-$2" target="_blank">>>$1-$2<\/a>/g; $message =~ s/<r>>>(\d+)-<\/r>/<a href="..\/test\/read.cgi\/$FORM{'bbs'}\/$FORM{'key'}\/n$1-" target="_blank">>>$1-<\/a>/g; $message =~ s/<r>>>(\d+)<\/r>/<a href="..\/test\/read.cgi\/$FORM{'bbs'}\/$FORM{'key'}\/n$1" target="_blank">>>$1<\/a>/g; これの一部分から“n”を抜いても問題はないですか? 具体的には、次の部分を右のように変更しました。 一行目:n?\d+-?\d → \d+-?\d 二行目:n$1-$2 → n$1-$2 三行目:n$1- → $1- 四行目:n$1 → $1 これで動作異常とか出ることないですか?
read.cgiっつーと、nがあるか無いかは
>>1 を表示するかしないかのただのオプションじゃないか?
>>426 抜いて問題があるかないかと言えば、抜いたら問題があるから入っているんでしょうとしか言えないです。
そもそも、何でnを抜きたいのでしょう?
見た限り、パラメータとして掲示板の投稿No.をn1〜n10みたいに示すためのnのようですが、
受ける側の処理もそれに合わせて書き直せばnを抜こうが何だろうが大概動きますよ。
レスどんもです。
>>427 なぜかn抜いても1見えますです。
>>428 抜かなかったら、ソース見たとき変な現象がおきるです。
たとえばこんな感じに。
<a href="../test/read.cgi/php/1146042050/n2-10" target="_blank"><a href="../test/read.cgi/php/1146042050/2-10" target="_blank">
>>2-10 </a>
<a href="..">が二個連続で表示されて、その片方にnを含むのが出ますです。
ちなみに、n消したら二個連続の表示ではなくなりますた。
432 :
nobodyさん :2006/05/14(日) 02:37:29 ID:??? BE:48114522-#
エロゲーしてオナニーして寝よっと
$message =~ s|<a href="\.\./test/read\.cgi/$FORM{'bbs'}/$FORM{'key'}/n?\d+-?\d*" target="_blank">(>>\d+-?\d*)</a>|$1|g; $message =~ s|<r>>>(\d+)-(\d+)</r>|<a href="\.\./test/read.cgi/$FORM{'bbs'}/$FORM{'key'}/n$1-$2" target="_blank">>>$1-$2</a>|g; $message =~ s|<r>>>(\d+)-</r>|<a href="\.\./test/read.cgi/$FORM{'bbs'}/$FORM{'key'}/n$1-" target="_blank">>>$1-</a>|g; $message =~ s|<r>>>(\d+)</r>|<a href="\.\./test/read.cgi/$FORM{'bbs'}/$FORM{'key'}/n$1" target="_blank">>>$1</a>|g; nは関係ないけど2行目以降はピリオドの前に\が付いていなかったのでとりあえずエスケープしてみました。
失礼。エスケープし忘れの箇所がありました。(read\.cgi) $message =~ s|<a href="\.\./test/read\.cgi/$FORM{'bbs'}/$FORM{'key'}/n?\d+-?\d*" target="_blank">(>>\d+-?\d*)</a>|$1|g; $message =~ s|<r>>>(\d+)-(\d+)</r>|<a href="\.\./test/read\.cgi/$FORM{'bbs'}/$FORM{'key'}/n$1-$2" target="_blank">>>$1-$2</a>|g; $message =~ s|<r>>>(\d+)-</r>|<a href="\.\./test/read\.cgi/$FORM{'bbs'}/$FORM{'key'}/n$1-" target="_blank">>>$1-</a>|g; $message =~ s|<r>>>(\d+)</r>|<a href="\.\./test/read\.cgi/$FORM{'bbs'}/$FORM{'key'}/n$1" target="_blank">>>$1</a>|g; まあ、追加で直した部分も関係ないでしょうけど。
次の質問どうぞ
437 :
nobodyさん :2006/05/14(日) 12:36:02 ID:AA1LZHii
すんません宜しく。 ブラウザのオートコンプリート機能を一時的にOFFにするか、オートコンプリートのデータから特定のキャッシュを削除する事って できるんでしょうか? HTTPヘッダー・・では無いと思うんですが。
ここは「Perlコーディング初心者質問スレ」です
>>437 オートコンプリートをONにしているバカだから
マルチポストがどれだけ嫌われているかもわかんないみたいだな
しかも、糞IE専用機能でセキュリティもOFFにしていないと
危ういとの話なのに
サーバサイドでは無く、クライアントサイドしかもIEに特化
もうね、バカかとアホかと。もう白雉はネットに繋ぐべきではないとか。
| <input/form autocomplete="off">
`──────────┐ ┌───
, '´l, ..| ./
, -─-'- 、i_ |/
__, '´ ヽ、
',ー-- ● ヽ、
`"'ゝ、_ ',
〈`'ー;==ヽ、〈ー- 、 !
`ー´ ヽi`ヽ iノ
! /
r'´、ヽ
`´ヽノ
PerlのCGIで定期的に処理をさせたいのですが、そのようなことは不可能でしょうか? 具体的には、30分ごとに指定されたURLをGETリクエストするという処理です。 完全にサーバー側で処理させて、クライアントからのアクセス無しに定期的に処理したいのですがやはり不可能でしょうか?
441 :
nobodyさん :2006/05/14(日) 14:17:40 ID:??? BE:649539869-#
GW終わってもこの有り様か
>440 定期かよ・・・ cron or タスク(Winならだけど) or 定期的にURLアクセスするクライアントソフト ハイ次
むしろ同じ質問が定期的に…
>>440 レン鯖ではまず不可能。cron使えないなら諦めれ。
すいません、書き忘れていましたがcronは使いたくないのです。 cronを使わずに一定間隔ごとにクライアントからの要求無しに処理をするのは不可能でしょうか?
448 :
nobodyさん :2006/05/14(日) 14:44:03 ID:??? BE:216513836-#
輪廻
無限ループって(ry
while (1) {
print "
>>440 ";
}
激しくうろ覚えでテキトーに書いてみる @sorted = sort{ $a[3] <=> $b[3]} split(/\t/, $data); ・・・おそらく間違ってるだろうな(;´Д`)
>>453 「Perl シュワルツ変換」辺りでぐぐる
456 :
違うスレからきました :2006/05/14(日) 21:38:49 ID:n3OZH3Uz
#!/usr/local/bin/perl $greeting = "こんばんは"; $name = "三島"; &prt_message2($greeting,$name); sub prt_message2{ print "$_[0]、$_[1]さん","\n"; } はコマンドプロンプトがでてきません 違いはフォルダが違うだけなんですが どう対処したらいいでしょうか?? ダブルクリックで起動させようとしました いつもperl command line interpreterで開いてます 物凄い速さでウィンドウが とじることまではわかりました それをとめる方法はどうしたらいいでしょうか?? 調べたらプロパティをいじくると書いてあったんですが みても書いてありませんでした CMDですよね?? よろしくおねがいします
457 :
456 :2006/05/14(日) 21:40:34 ID:VsACWTan
OSはXPです
マルチみたいですね(哀)
460 :
458 :2006/05/14(日) 21:47:02 ID:???
461 :
nobodyさん :2006/05/14(日) 21:54:05 ID:VsACWTan
サンクス バッチがわからないけど調べるよ
462 :
458 :2006/05/14(日) 21:54:53 ID:???
463 :
nobodyさん :2006/05/14(日) 22:00:05 ID:VsACWTan
違うスレで聞きますって書いたんだけど それでもマルチになるの? それならごめん
464 :
nobodyさん :2006/05/14(日) 22:01:20 ID:VsACWTan
>>460 初めからウィンドウ開いておくとはどういう事でしょうか?
ウィンドウ開いた瞬間にpause押せば止められるよ
初心者なんですが、plaggerのやりかた教えてください。
467 :
nobodyさん :2006/05/14(日) 23:09:50 ID:VsACWTan
pauseがわからないです 一応ぐぐったんですが よろしくお願いします
468 :
nobodyさん :2006/05/14(日) 23:10:56 ID:VsACWTan
PAUSE BREAKは押しても無理でした あの速さでは…
469 :
nobodyさん :2006/05/15(月) 00:05:56 ID:??? BE:589397077-#
もうね…
>ID:VsACWTan コマンドプロンプトは開きっぱなしにしれ でなきゃ実行結果を表示してくれるIDE(統合環境)を導入してください
IDEとは何でしょうか? HDDはSerial ATAなどではなくてIDE接続ですが、このことでしょうか?
こりゃ傑作だ(´∇`)ケラケラ
474 :
nobodyさん :2006/05/15(月) 03:30:43 ID:lq2mogk+
>>459 俺の掲示板に組み込みたいんで、Rock54のスクリプト記述教えてくださいよ。
焼き部隊に所属してるあなたなら知ってますよね?
×焼き部隊 ○石焼き部隊
※の中の人も大変だな
※未承認広告
>>475 > ×焼き部隊
> ○石焼き部隊
↓
○焼き部隊
○石焼き部隊
480 :
nobodyさん :2006/05/15(月) 23:27:09 ID:FBQXjrwN
1: cgiからcgiのソースを書き込む 2: それで↓こんな風にやってみたが・・・ if ($ENV{REQUEST_METHOD} ne 'POST' || read(STDIN, $post, $ENV{CONTENT_LENGTH}) != $ENV{CONTENT_LENGTH}) { $postdata = $ENV{QUERY_STRING};} ・ ・ のようなソースを別ファイルに書き込もうと(拡張子はcgiもしくはpl)、 $file = "$urltrip\x5F$mon$mday$hour$min$sec.cgi"; open OUT,">$file"; print OUT "#!/usr/local/bin/perl\n\n# トリップテスト\n\n"; print OUT "if ($ENV{REQUEST_METHOD} ne 'POST'\n || read(STDIN, $post, $ENV{CONTENT_LENGTH})\n"; ↑こうやったら 3: $ENV{REQUEST_METHOD}などが書き込み元の値に代入されてしまう・・・。 ご教授おねがいします
'頭が激しく足りないことをやっているようだけど。'
>>480 print文中の$を、バックスラッシュでクォートする
シングルクォートのヒアドキュメントでいいじゃん。
print << 'KENTWEB'; KENT レベルのスクリプトっていいかげん消えてくれないかなぁ。 KENTWEB
486 :
480 :2006/05/15(月) 23:51:56 ID:FBQXjrwN
print OUT 'if ($ENV{REQUEST_METHOD} ne 'POST'\n || read(STDIN, $post, $ENV{CONTENT_LENGTH})\n'; ↑これでもダメですけど?
print OUT 'if ($ENV{REQUEST_METHOD} ne "POST"\n || read(STDIN, $post, $ENV{CONTENT_LENGTH})\n'; で、何のためにうんこコードを保存してるの?
だめだ、ばかばっか
489 :
480 :2006/05/15(月) 23:56:32 ID:FBQXjrwN
>>488 すんません、ちょっとだけバカなんです
でも体育と社会は得意なんです
490 :
nobodyさん :2006/05/16(火) 00:26:08 ID:??? BE:159192836-#
マ板のスレ荒らしてるのもお前等だろw
GW終わってるっつーの
492 :
483 :2006/05/16(火) 00:29:55 ID:???
>>480 人の話をキケー!
print OUT <<'EOF';
if ($ENV{REQUEST_METHOD} ne 'POST'
|| read(STDIN, $post, $ENV{CONTENT_LENGTH}) != $ENV{CONTENT_LENGTH})
{ $postdata = $ENV{QUERY_STRING};}
EOF
# もう来ないでね。
>>492 インデント汁。
で、インデントはタブかスペースかで3スレくらい費して議論汁。
494 :
480 :2006/05/16(火) 00:39:36 ID:Neqg1YJy
>>492 'EOF'でオッケーなんですね!
たとえば $baka という元ファイルの変数を別ファイルに代入させたい場合は
print OUT <<'EOF';
if ($ENV{REQUEST_METHOD} ne 'POST'
|| read(STDIN, $post, $ENV{CONTENT_LENGTH}) != $ENV{CONTENT_LENGTH})
{ $postdata = $ENV{QUERY_STRING};}
<りゃく>
$aho = $1;
EOF
print OUT "$baka";
print OUT <<'EOF';
$unko = $chinko;
EOF
# { とかってやればいいっすか?; }
知っているがお前の態度が気に入らない。
496 :
480 :2006/05/16(火) 03:11:36 ID:Neqg1YJy
>>492 うーん、、、途中までいい漢字だったんですけどなぜか途中から上手くいきません
print が絡んでるところで、
$manko = "まんこ";
<略>
print "$manko"; ←これを$manko=まんこのまま新しいファイルに持ち越すのは
print OUT <<'AHAN';
print "$manko";
AHAN
じゃだめですよね
それでこの部分だけ
print OUT \"print \"$manko\";
にしてもだめでした><;
えーん><;
うわー、答えたくねーw
シュワルツ変換でぐぐれと教えてもらった者です。 たいへん参考になりました。 感謝とともにご報告申し上げます。
>>484 =KENTWEBファン
いちいち固有名詞だすなクソやろう
掲示板で英語だけのSPAMが多すぎるので 英語だけの投稿はエラーにしたいのですが ・全部半角英数字 または ・全角文字が1文字でも入っている でマッチさせるには、どう記述すれば良いでしょうか? よろしくお願いします。
501 :
500 :2006/05/16(火) 13:01:43 ID:???
すみません、紛らわしい書き方しました。 「または」ってのは OR でって事じゃないです。 どっちかの記述の方法が分かれば、判断できるかな という意味で書きました。
502 :
nobodyさん :2006/05/16(火) 13:06:44 ID:??? BE:192457128-#
>>500-501 アンタみたいな奴らばかりが集まるネ申KENTサポで無限ループされているから覗いてみろ
ディスクの空き容量を知るにはどうすればいいですか?
`df`
>>505 当方 Windows で CGI書いてますので、よろしく。
KENTサイキョウ!(^^)
508 :
nobodyさん :2006/05/16(火) 14:05:07 ID:??? BE:589397077-#
それが質問者の態度か Win32-DriveInfoでも使ってろアホ
当方モジュール入れるなんてマンドクサイことやってられないので、 もっと簡単な方法をよろしく。
510 :
nobodyさん :2006/05/16(火) 14:07:33 ID:??? BE:420997875-#
絶対教えてやんねー(#^ω^)ビキビキ…
はい次の質問者どうぞ
>>506 マイコンピュータをダブルクリックすれば残り容量が出るぞ
513 :
nobodyさん :2006/05/16(火) 14:51:19 ID:??? BE:649539869-#
お前優しいな!
まんこやちんこでも表示される件について
どんなコード書いてるんだよ 超わろたw
>>500 『鬼畜米英』
『妥当チャーチル』
『欲しがりません勝つまでは』
この3つをスローガンに掲げて掲示板トップに掲載しとく。
効果てきめん。
518 :
500 :2006/05/16(火) 19:37:15 ID:???
519 :
nobodyさん :2006/05/16(火) 19:45:50 ID:??? BE:288684364-#
偽者うぜぇ
520 :
500 :2006/05/16(火) 19:52:21 ID:???
偽者じゃありません、本当のことをおしえてください
521 :
nobodyさん :2006/05/16(火) 20:11:23 ID:??? BE:48114522-#
Shift_JISの全角だけだったらこんな感じじゃねーの if($comment =~ /[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc]/s){ print "Japanese"; } else{ print "Not Japanese"; }
>514 その計算機によると、うちは東京なのにアクセスポイントは愛知らしいwww すごいな、うちって専用線だったんだ(*´д`)
>>522 あの計算機はデタラメ吐くよwwwwwwwプロバすらもでたらめwwww
本当なのはIPだけwwww
でもIPさえ分かれば、後は自分で調べられるな。
>>500 >・全部半角英数字
$comment =~ /^[ -~]+$/s; # 全部半角英数字と記号
$comment =~ /[^ -~]/s; # 半角英数字以外がある(日本語かも)
いまの2chのIDってまだcrypt使ってんの?
528 :
500 :2006/05/17(水) 05:49:51 ID:???
>>528 ありがとうございますと言いながら、それ全然お礼じゃないよな。
慇懃無礼な物言いを直さないと、今後誰もあなたの質問に答えてくれなくなるかもよ。
m9
>>531 一日ごとに/dev/randomを読み直してるからだと思う。
というか、md5じゃなかったけか。
534 :
nobodyさん :2006/05/17(水) 12:38:53 ID:??? BE:144342443-#
crypt(DES)…トリップ MD5…ID
537 :
nobodyさん :2006/05/17(水) 17:02:26 ID:YyZihD9s
cat /etc/passwd を編集した結果をWEBブラウザに表示させるプログラムを作成しようと考えているのですが、 cat /etc/passwdの結果をperlのプログラムに取り込むにはどのようにしたらよいでしょうか? どなたか教えてください。
>>537 ファイルの内容が見たいのなら普通にopenして読み込めばいいんじゃないの
>>537 Perlはrootから実行されるからopenでOKだお
>539 なんだそのへたれ回答は・・・
Perlって危険なんですね
真に受けるなカス
543 :
nobodyさん :2006/05/18(木) 01:16:03 ID:fJu7t3bW
ファイル送信の質問です・・・ htmlからPOSTでデータを送信すると、 $ENV{'REQUEST_METHOD'} の中には POSTが入るでしょ? んで、 htmlからGETでデータを送信すると、 $ENV{'REQUEST_METHOD'} の中には GETが入るでしょ? それじゃ、 htmlからデータを送信しなかった場合(cgiを呼び出しただけ)は何が入るのですか??
実際に試してみればよいのでは?
>>543 クライアントがGETでリクエストすればGETだし、
POSTをリクエストすればPOST。
HTTPを学んでください。
>>547 だから何も指定しなかったら何が入るのかっつー話だろw
日本語を学んでください。
普通ディフォルトはGET
って、元質問を読みなおしたら、HTMLのA要素辺りの話かYo。 このスレに書かれてるから勘違いしてた。
GETとかPOSTを指定しなければ空 (実際にGET動作でも指定がなければ環境変数に入らない)
>>543 #!/usr/bin/perl
print "Content-type: text/html\n\n";
print $ENV{'REQUEST_METHOD'};
>>551 はうそ
さすが底辺のwebprog板,
>>551 のようなクズまで回答者やってんのかwww
RFC1616
5.1 Request-Line
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
Methodは必須、省略はできない。
>>553 底辺と馬鹿にしておいてそんな回答かよwww
ブラウザでは指定しない場合はGET。が正解だろ?
555 :
nobodyさん :2006/05/18(木) 14:52:37 ID:??? BE:541283459-#
>>554 ==
>>548 == ディフォルト君
> 普通ディフォルトはGET
ディフォルト
ディフォルト
ディフォルト
ディフォルト
ディフォルト
ディフォルト
ディフォルト
ディフォルト
ディフォルト
ディフォルト
ディフォルト
ディフォルト
557 :
nobodyさん :2006/05/18(木) 15:10:10 ID:tdyLNCZH
Webページで、ボタンを押すと指定のファイルをDLする仕組みを作りたいのですが、 どのような作り方をすればよいですか?
559 :
nobodyさん :2006/05/18(木) 15:22:38 ID:??? BE:481140858-#
>>558 お前、普段から「ディフォルト」って言ってんの? www
デフォルトだと思ってる? 英語の発音だとディフォルトなんだけど。 っつーかこういうどうでもいいやつ多いなおれみたいな。
562 :
557 :2006/05/18(木) 15:51:28 ID:tdyLNCZH
回答ありがとうございます。 具体的には、 <a href="list.csv">DownLoad</a> と書いているのですが、list.csvのpermissionを777にしてもInternal Server Errorが出てしまいます。 このエラーの回避をし、ダウンロードを可能にするにはどうしたらよいのでしょう
>>561 日本語の外来語表記では、「ディフォルト」は「デフォルト」の表記のゆれとして扱われる。
だからどちらも間違いではないが、一般的には「デフォルト」と書く。
564 :
nobodyさん :2006/05/18(木) 16:34:05 ID:??? BE:433026094-#
>>565 そのページにおもいっきり
>【コンピュータ】デフォルト, (デフォルト値を)採用する.
と書いてあるんだが…。
しかし、webをウェブじゃない!ウェッブだ!!とか
ホームページじゃない!ウェブサイトだ!!とか言う
香具師って、年逝ってるのが多いよね。
どーでも良いんだよ意味が伝われば(w
>566 デフォでOK
デファウルト
570 :
nobodyさん :2006/05/18(木) 19:19:37 ID:C+uZ+IY0
訳があり、CGIで <SELECT NAME="color"> <OPTION value="1">1</OPTION> <OPTION value="2">2</OPTION> <OPTION value="3">3</OPTION> <OPTION value="4">4</OPTION> <OPTION value="5">5</OPTION> <OPTION value="6">6</OPTION> <OPTION value="7">7</OPTION> <OPTION value="8">8</OPTION> <OPTION value="9">9</OPTION> <OPTION value="10">10</OPTION> </SELECT> を10個ほど連続で記述しているのですが、正直、長くなりすぎて困っています。 シンプルにできないでしょうか?
571 :
nobodyさん :2006/05/18(木) 19:24:42 ID:??? BE:541283459-#
for使えばいいんじゃね
配列につめて回せばおk
ぷりんと <OPTION value="$_">$_</OPTION> ふぉー 1..10;
574 :
nobodyさん :2006/05/18(木) 19:38:26 ID:C+uZ+IY0
>>571-572 本当に申し訳ない
Perl初めて一週間のオイラにはなんのこっちゃか・・・
そ こ か ら か !
まず自分でやってみてから質問せい
for
1週間なら普通もうforとかforeachとかwhileくらいはとっくにやってると思うが さぼってんじゃねーぞ
_匕∠ニ≡=E─天¬冖卞广了 ̄ _匕∠ニ≡=E─天¬冖卞广了 ̄ _匕∠ニ≡=E─天¬冖卞广了 ̄_匕∠ニ≡=E─天¬冖卞广了 ̄ _匕∠ニ≡=E─天¬冖卞广了 ̄_匕∠ニ≡=E─天¬冖卞广了 ̄  ̄了广卞冖¬天─E=≡ニン、匕_  ̄了广卞冖¬天─E=≡ニン、匕_  ̄了广卞冖¬天─E=≡ニン、匕_ ̄了广卞冖¬天─E=≡ニン、匕_  ̄了广卞冖¬天─E=≡ニン、匕_ ̄了广卞冖¬天─E=≡ニン、匕_ _匕∠ニ≡=E─天¬冖卞广了 ̄ _匕∠ニ≡=E─天¬冖卞广了 ̄ _匕∠ニ≡=E─天¬冖卞广了 ̄_匕∠ニ≡=E─天¬冖卞广了 ̄ _匕∠ニ≡=E─天¬冖卞广了 ̄_匕∠ニ≡=E─天¬冖卞广了 ̄
>>579 sugeeeeeeeeeeeeeeeeeeeeeeeeeeeeee!!!!!!!!!
>>574 print '<SELECT NAME="color">',"\n";
$i=0;
while(1) {
$i=$i+1;
print '<OPTION value="',$i,'">',$i,'</OPTION>',"\n";
if($i==10) { goto DERU; }
}
DERU:
print '</SELECT>',"\n";
変わったコードだな…
print '<SELECT NAME="color">',"\n"; map {print qq|<OPTION value="$_">$_</OPTION>\n|} (1..10); print '</SELECT>',"\n";
>570
>>573 さんのようにPerlだからでこその記述の仕方ではないけど・・・
print "<select name=\"color\">\n";
for(1..10){
print "<option value=\"$_\">$_</option>\n";
}
print "</select>\n";
>>579 普通に感動
すごいなそれ
qq| | っていいね。初めて知った。
他のスレから来ました。
Perlで他のサイトを取得して表示したいと思っています。
(著作権侵害とかそういうことをしたいのではないです)
お時間のある方にお願いしますが、次のコードで@niftyのトップページを取得してみたら
どうなるか教えていただけませんでしょうか?
print "Content-Type: text/html\n";
print "\n";
use LWP::Simple;
print get( '
http://www.nifty.com/ ' );
私のところだと、ブラウザ上での表示がぐちゃぐちゃになるんですが…。
589 :
587 :2006/05/18(木) 22:37:14 ID:???
せっかくスライドして来てくれたのだから楽しんでって貰おうよ。
応接するメンツはそれほど変わらんと思うけど。w
>>587 その質問に対する答えなら、「試しちゃいないけど、たぶん僕んとこでも同じです」だね。
でな、ひとつ提案なんだけれど、「やりたいこと」、「試したこと」、「その結果」をそれぞれ正しく伝わるように書いてみませんか。
「どうなるはずだと思ったか」を書かずに、単に「どうなるか」と問われても、「書いた(コード)なり」、としか答えられませんし、
また「ぐちゃぐちゃ」が実際にどういった現象を指しているのか、そしてそれはあなたの狙いとどう食い違っているのか、そのあたりは最低限明記しなくては有益な議論になりません。
TT でも使っとけばよくね?って言いたくなるコードが多いね。
594 :
587 :2006/05/18(木) 23:02:26 ID:???
>>590 ありがとうございます。
■やりたいこと:
Perlスクリプトから任意のページを取得する
(丸ごとゲットしたいわけではなく、ブラウザで表示するだけ)
■試したこと:
>>587 のようなコード(socket関係、LWPモジュール関係)
■結果:
指定したページは取得できているけれど、相対パス指定の画像や外部ファイルが
読み込めていないため、スタイルシートに依存しているページなどでは
表示がぐちゃぐちゃになる
■「ぐちゃぐちゃ」とは:
スタイルシートに依存しているページなどをオフラインで見た時のようなイメージ
■私の狙いとどう食い違っているのか:
私は、スクリプトにアクセスすると、スクリプトが指定したページを取得してきて
それをブラウザに返し、そこからブラウザがリンクを解析して画像などを読み込んでくると
思っていました。
でも、絶対パスの画像などは読み込まれてきますが、相対パスのものが
全く読み込まれません。
これって普通なんでしょうか?
595 :
587 :2006/05/18(木) 23:03:25 ID:???
マルチしてません。
>>593 はスルーして下さい。
ていうかあなたがやったんでしょう?
597 :
587 :2006/05/18(木) 23:04:53 ID:???
すみません、第三者が見て不快になるレスをしたかもしれません
>>595 はスルーして下さい。
鳥つけるヤシに限ってググれば解決する問題を延々とここで質問するからクソだよな
599 :
nobodyさん :2006/05/18(木) 23:06:16 ID:??? BE:336798274-#
ワロス
このトリップは先に質問した時のスレからずっとつけてます。 つけてないのは偽者です。
>>594 >これって普通なんでしょうか?
それで正しい動作。あまりに普通。
ソース解析して中身まで持って来たりはしない。
こりゃひどい酷すぎる 呆れたってよりも可哀想だ…
>>592 のリンク先で質問してるのもこいつ本人なんだろうな……。
>>601 そうなんですか…。どうもありがとうございます。
それでは、相対パスの画像なども読み込まれるようにするには、
どうコーディングすればいいんでしょうか?
>>603 >ググっても解決しませんでしたが。
何て検索したか言ってみろ
俺のディスプレイには解答への検索結果が出てるが
587は、世の中にはエスパー機能付きブラウザがあると思ってるわけか
→(丸ごとゲットしたいわけではなく、ブラウザで表示するだけ) 丸ごと以上にゲットしなきゃだと思う。。。@HTMLを解釈して必要な物を再度取得する。 ブラウザってば、普通の人にはなんの変哲もない事をやっているように見えるけれども、 中の人はほんと大変なんだけどなぁ。。。
本気で酷いな。
>>609 「@HTML」って何ですか?
ググっても「@」という記号が無視されるようで、検索できませんでした。
真性だたかw
>>612 前スレ行って謝ってこい。話しはそれからだ。
>>614 何を謝るんですか?
質問しただけなのに荒らされて、迷惑を被ったのはこっちの方です。
>>612 該当するページのソースを丸ごと取得してから、ソースを解釈して<img src="uri">などの"uri"からリソースを再度取得し、
ローカル内に再配置する。それからそれから(長いので省略)
という意味です。
お前のせいでスレに迷惑がかかってるのに気が付かないか?
>>616 …ということは、ブラウザと同じようなものを作るしかないということなんですね。
どうもありがとうございました。
>>618 自演だったのかぁ♪
>>619 そういうことです。
ブラウザを甘く見ちゃエケナイのです。
ファイルロックしてるのにファイルが消えるんですが。
なぜスルーできないヒトがここまで多いのかわからん
624 :
622 :2006/05/18(木) 23:38:34 ID:???
>>623 >なぜスルーできないヒトがここまで多いのかわからん
スルーしないで答えてくださると嬉しいですね。
>>623 向こうのスレ見てない人?答えてるのは自演だよ。
print <<'EOF'; 早 /::::l:::l::、:::::、:::::ヽ::、::::::::::::\:::\::::::::ヽヽ::::::ヽ 駄 .く /:::!::::i:::!:::ヽ:::ヽ::::::ヽ::ヽ、::::::::::\:::ヽ:::::::ヽヽ::::::', 目 な. /:l::::!::::ヽ!::ヽ:::::::ヽ:::::::\:::ヽ、::::::::ヽ:::ヽ::::::::!::i:::::::! だ ん ハ:::l:::::、::::ヽ::::\:::::\:::::::\:::`ヽ、:::ヽ::ヽ:::::!:::!:::::l と /:::::::l::::::!ヽ:ヽ::::、:::::ヽ:::、:\::::: \::::::\::::!::::ヽ:!:::i:::l:l こ か !:/!:::::!::::::!::ヽ:ヽ{:::\:::ヽ::::\:::\::ヽ:::::::ヽ!:::::::}!::::l::li| い し j/:::l:::::!:、:::!::ト、:、:ヽ:::::`ヽ{、::::::\::::\{、::::::::::::::::i::!::l:l ! つ な l:i:l::::i::i:、:l::lテ=-、:ヽ、_、::\_,≧ェュ、_、\:::::::::i::li::!::リ : い !ハト:{:!:i:トN{、ヒ_ラヘ、{ >、{ 'イ ヒ_ラ 》\::l::!:ト!!:l::l! : と ヽ i、ヽ:ト{、ヾ ̄"´ l!\ `" ̄"´ |::!:l::! j:ll:! : !::、::::i l u |:::/lj/l:!リ : ヾト、:!u j!/ j|:::リ ヾ! ヽ ‐ u /イ´lハ/ }ト.、 -、ー-- 、__ /' !::// リl::l゛、 `二¨´ / |/:/ rー''"´ト!::i{\ / / !:/ / ^ヽ ヾ! ヽ _,,、'´ / j/ EOF
ファイルロックしてるのにファイルが消えるんですって。 誰か教えてくださいよ〜。
>>627 意地悪で言うんじゃないからちゃんと読んでね。
お前さんがそこそこ腕の立つ医者だったとしようや。
患者がやってきて、
「病院に通ってるのに病気が治らないんですけど」
って言うんだ。
僕たちは商売でもないのに、毎度基礎的な事実関係を優しく問診してあげるところからスタートしなくちゃいけないかい?
問題解決に興味があっても(だから僕たちはここにいるんだけど)、問題が何なのかわからなくちゃどうしようもないんだ。
629 :
543です :2006/05/19(金) 00:27:52 ID:1sSf/5KF
いつもお世話になっております。
htmlからデータを送信しなかった場合(cgiを呼び出しただけ)ではGETが入っていました。
>>544 試してみたら簡単でした
>>547 日本語を学んでください
>>548 ありがとうございました
>>551 GETでした
>>552 わざわざソースまでありがとうございました
>>553 意味がわからなかったです・・・
>>554 正解でした
>>556 病院に行ってください
さんきゅーみんな!さんきゅーな!!
Perl5.8で、スクリプトをcp932で記述、use encoding "cp932"; を指定した後に 漢字を含むファイルの読み書きをする決定的な方法はないでしょうか? どうもパスやファイル名だけがUTF-8になってしまう妙な不具合(仕様)が あるようなので困っています。
すみません。
>>631 は
「漢字を含むファイル」→「漢字を含むパスやファイル名」です。
>>631 読み書き以外の操作に関しては入出力レイヤのような便利(?)な仕掛けはないので
自分でencodeしないとだめだという仕様。
なるほど、全角アルファベットを使う奴は無視することにしよう。
ファイルロックは消せないようにするものじゃないので不思議でもなんでもないわけだが。
637 :
574 :2006/05/19(金) 12:14:00 ID:???
本当にごめん。皆ありがとうorz ちょっくら真剣に勉強してきます orz
638 :
nobodyさん :2006/05/19(金) 14:58:40 ID:JIoPGZWV
utf8で書かれたスクリプトがあり、エラー処理が ・・・ or error("×××失敗: $!"); のようになっているのですが、サーバー(Linux)の設定が eucのため $! もeucになり、文字化けしてしまいます。 $! を使った箇所はたくさんあるため、1つ1つ ・・・ or error("×××失敗: " . decode("euc-jp", $!)); のように変更するのは避けたいのですが、簡単に 解決する方法はあるでしょうか。 ※スクリプトの文字コードやサーバーの設定は変えられません。 何かいい方法がありましたらご教授下さい。 よろしくお願いします。
そんな意味不明な設定をしているサーバから離れる。 仕事で IT 土方やってるなら、地面を掘るほうの土方に転職する。
サーバの設定というのが意味不明だな。 普通はスクリプトで全て設定できる。
641 :
nobodyさん :2006/05/19(金) 16:10:56 ID:4aaheppT
初心者質問スレなんだから教えてやれw
>>638 通常ユニコード文字列とバイト文字列をつなげるときにバイト文字列はlatin-1としてdecodeされるが、
これはencodingプラグマで変更することができる。
したがってバイト文字列な$!をeuc-jpとしてdecodeするように
use encoding "euc-jp";
としてやればいけるはずだ。ただ他の部分にも影響するから注意。
一応動作確認:
use utf8;
use encoding 'euc-jp';
open F, "</hogehoge" or die "ほげほげ: $!";
というプログラムをutf8でセーブして
% LANG=ja_JP.eucJP perl foo.pl 2>&1 | hex
0x00000000: e3 81 bb e3 81 92 e3 81 - bb e3 81 92 3a 20 e3 81 ..祉....祉..: ..
0x00000010: 9d e3 81 ae e3 82 88 e3 - 81 86 e3 81 aa e3 83 95 ...??.......??..
0x00000020: e3 82 a1 e3 82 a4 e3 83 - ab e3 82 84 e3 83 87 e3 ..<.ゃ.??......
0x00000030: 82 a3 e3 83 ac e3 82 af - e3 83 88 e3 83 aa e3 81 .c.??.??....??.
0x00000040: af e3 81 82 e3 82 8a e3 - 81 be e3 81 9b e3 82 93 ??.......障.....
0x00000050: 20 61 74 20 66 6f 6f 2e - 70 6c 20 6c 69 6e 65 20 at foo.pl line
0x00000060: 34 2e 0a - 4.J
>>638 binmode STDERR, ":encoding(euc-jp)";
644 :
643 :2006/05/19(金) 17:02:27 ID:???
あ、出力を UTF-8 で固める話ね。読み違えてた、ごめん。 そゆことなら error() の定義を書き換えるか、オーバーライドしてしまえば最小限の修正で済むんでないかな、と。
> ※スクリプトの文字コードやサーバーの設定は変えられません。 どんな状況でどんな理由なのだろうか
646 :
638 :2006/05/19(金) 18:34:56 ID:???
ご回答ありがとうございます。
>>640 TeraTermというソフトでサーバーにアクセスすると文字コードがeucとなっているので、
そのことを伝えたくて書きました。私自身が分かっていないまま書いてしまい申し訳ありません。
>>642 頂いたテストコードでうまく行くのは確認できました。しかし、いろいろテストしてみましたところ、
use utf8;
use encoding 'euc-jp';
eval { open FH, "hoge" or die $! };
if ($@) {
print "エラー: $@";
}
のような感じにすると、なぜか文字列全体がeucになってしまいました。
また、
> 他の部分にも影響するから注意
の「影響」も分かっていない状態で使うのは、何か問題が起きた際にどうしようもなくなって
しまうため、せっかくのところ申し訳ないのですが別の方法を探そうと思います。
>>644 error("utf8文字列 eucの$!") という具合なので、error に渡った時にはもう文字コード混在
状態なのです。それを判断して変換できればその方法が一番よいように思うのですが、
$! の組み込まれ方も様々でして、私ではどうにもできませんでした。
>>645 既に稼動状態にあるものを引き継いだため、大きな影響が出そうなことはできないのです。
>TeraTermというソフトでサーバーにアクセスすると文字コードがeucとなっているので、 oioi
もしログ見る奴が我慢できるなら、LC_MESSAGESをCにしちまえば 英語になるので文字化けからは解放される。
>>646 いくつか質問。
1.それはCGIの類なのか、ただのスクリプトなのか、何なのか
2.見るのに使うソフトウェアはブラウザなのか端末ソフトなのか何なのか
3.見たいものはログファイルなのか、スクリプトの出力なのか、何なのか
つ $ENV{LANG} = 'euc-jp'; って云うのもありかな?
651 :
631 :2006/05/19(金) 19:44:44 ID:???
>>633 おこたえありがとうございます。やっぱりありませんか…orz
時間を獲得する場合って「$ENV{'TZ'} = "JST-9";」は必ず必要? 無くても平気?
>>652 無くても平気だけれども、正確に日本時刻を取得したいのならば(locale依存)
$ENV{TZ}を待避させてから'JST-9'を入れてあげるといいと思うそ。
655 :
638 :2006/05/19(金) 21:06:17 ID:???
>>648 ログが英語になるのはまったく問題ないのですが、
それはどこの設定を変えればよいのでしょうか。
>>649 1.CGIやバッチ処理を行うスクリプトなど様々です。
2.ログは端末ソフト上で見たり、ダウンロードして秀丸で見たりします。
3.エラーは通常ログファイルに出力されますが、ちょっとした確認は標準出力したりしています。
>>650 $ENV{LANG} = 'euc-jp'; を追加してみても直りませんでした。
>>655 あ、そうか。。。
だったら、>639かな♪
>>655 起動する前にあらかじめ環境変数LC_MESSAGESにCを設定しておくか、perlの中だけでやりたければ
POSIX::setlocaleを使う。後者の例はperldoc perllocale参照。
658 :
638 :2006/05/19(金) 23:07:44 ID:???
>>657 ありがとうございます。スクリプトの先頭で
use POSIX;
POSIX::setlocale(LC_MESSAGES, "C");
とすることで、エラーメッセージが英文になりました。
大変勉強になりました。
$ENV{LANG} = 'euc-jp'; なんて書き方ねーよ。
システムの吐く文字コードが英字限定になって、 自前のスクリプトが吐く文字コードがUTF8で、 ターミナルの文字コードをUTF8にしておくで解決したのかな。
>>646 UTF-8対応のTeraTerm使えばいいだけの話じゃないの
正規表現についてですが、 if ( $url =~ /\.html$/ or $url =~ /\.html\#/ ) これをもっと簡単に書くことはできませんか?
$url =~ /\.html(?:#.+)?$/
ありがとう。
あるCGIのクッキーの処理を見ていたら $wday = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') [$wday]; という箇所があったのですが、この配列(?)のケツに付いている「[$wday];」って何でしょうか? 調べてもまったく出てこなくて・・・・・・
>>665 @aho = (3,4,3); $aho[1] eq 4 みたいに配列の要素へアクセスするときはブラケットの中に数字を入れる。
>>666 失礼。もう1ついいですか。
配列は「@wday」と書くものだとずっと思っていたのですが、ここでは「$wday」となっています。
これはどういった意味があるのでしょうか?
また、
>>665 はどういった処理をしているのでしょうか?
何度も申し訳ないです。。。。 よろしくお願いします。
>>665 $var = (11,22,33,44)[2];
↑33が入る
('Sunday' ...)がリスト(配列) それの$wday番目の要素を$wdayに代入
本当に分かったんかなぁ?
自分も初心者ですが。。。 これ↓はリストを配列に代入。 @wday = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'); 個々の配列要素にアクセスするときは、@ → $にする。なぜなら個々の要素は普通の値(もしくは文字)だから。 @だと配列全体を表すことになる。 $a = $wday[2]; # (0から数えて)2番目の要素である Tuesday を $a に代入 print $a; # Tuesday と表示 これ↓だと先述したリストを一旦、配列に入れるというのをぶっとばして、いきなりリストの2番目の要素に アクセスしている。 ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[2] すなわち、その値は、Tuesday という文字。 下の代入は、まず$wdayには数字が入っていて、リストの何番目の要素を取り出すかを決めている。 例えば、$wdayに2が入っていれば、Tuesday が選ばれたことになる。そしてその Tuesday を$wdayに代入している。 $wdayは最初、数字だったのがこれにより文字列になるわけですね。 $wday = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') [$wday];
# --- 鯖時間をそれなりに変換♪ # Exchange_Date(mode, unixtime) # mode が 'jp' の時には日本語で返す。 # unixtime time(3)の値。 sub Exchange_Date{ my $mode = shift; my @date = localtime shift; @date = ( $date[5] + 1900, ('01' .. '12')[$date[4]], $date[3], qw(Sun Mon Tue Wed Thu Fri Sat 日 月 火 水 木 金 土)[$date[6] + ($mode eq 'jp' ? 7 : 0)], $date[2], $date[1], $date[0] ); return $mode eq 'jp' ? sprintf qq|%04d年%02d月%02d日(%s) %02d時%02d分%02d秒|, @date : sprintf qq|%04d/%02d/%02d(%s) %02d:%02d:%02d|, @date ; } みたいな♪
何でみんな、そんな親切に教えるかなぁ? こんなの(いくら初心者っつったって)前後の流れを見れば分かることだし 分からないようならPerlに限らずどんな言語だって身に付かないと思うよ。 甘やかすのと手助けするのは全然違う。
それと
>>673 は
$wday = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') [$wday];
すら分からない初心者に、自分はこんなにすごいんだYOと自慢しているようにしか見えない。
で?
Perlerにはお人好しが多いってだけの話
>>676 相手のレヴェルも考えましょうってことサ
>>677 リアルで聞かれたら親切に教えるんで、俺もやっぱりお人好しかなw
この板の人は皆優しいです。
そりゃ回答してるのが全部俺だけだからなぁ
バロスwwwwwwwwww
683 :
nobodyさん :2006/05/21(日) 03:26:23 ID:MNSamSTB
質問です 現在チャットを作っているのですが 在室者・閲覧者の表示方法がわかりません どういう感じにすれば表示できるかご教授してくださるとうれしいです
>>683 在室者は、ログインしてから退室するまでのメンバーを表示すればいいだけだし
閲覧者は、1分に1回くらい画面をリフレッシュして、その時にIPを拾えばいい
大雑把に言えばこんな感じだけど、どういうチャットを作りたいのかはあなたしか
知らないんだから、自分の理解出来る範囲で仕様を決めればいいんでないかい
言うまでもないけど、管理のロジックは自分で考えるんだよ。 例えば ・IP ・ユーザ名 ・名前の色コード ・リロード時間(個人個人で設定が違ってくるから) ・現在の状況(在室中か閲覧中か) 等を構造体に持たせるとか。
686 :
683 :2006/05/21(日) 04:13:12 ID:MNSamSTB
>>684-685 深夜にも関わらずレスありがとうございます
つまりログインしたときその人の名前とIPを拾い別ファイルに記録
(ログアウト時には削除する)
閲覧はログイン手前画面のIPを監視して記録と…
とりあえずこういう感じに自分で書いてみようと思います^^
またわからなくなったときよろしくおねがいしますm(__)m
困った時は、ネ申KENT様のスクリプトを教本として作ればいいんですよ ネ申KENT様のスクリプト以外は全て糞ですウンコです。
ですよね。 use strict;とかつかうやつは馬鹿しかいないし、 オブジェクト指向とか、設計時間の無駄ですよね。 目の前の納期に間に合えばいいもんね!
perl4の環境を考えるとネ申KENT様より多少救いのある物しか 書いて配布できない環境下の俺が来ましたよ? 古くからやっていると、そこら辺が難しい perl4のものはバクと最適化とセキュリティ関係以外は打ち止めにして 頭の弱い利用者を配慮してperl5のは別鯖で配布していたりする それ以前に「ネ申KENT様」と書けば反面教師としてですね
利用者と環境によってKENT式かそれ以外を使い分ければよくね?
691 :
nobodyさん :2006/05/21(日) 18:44:21 ID:0cIEHbzA
Perlの正規表現で、 $str='01234567890abcdef'; で、 〜/[0-9]*/と正規表現させた場合、 マッチした部分(この場合、マッチした'01234567890')を取り出す場合、どうすればよいのでしょうか?
ぐぐれかす
$str =~ s/[0-9]*//g;
695 :
nobodyさん :2006/05/21(日) 19:42:31 ID:??? BE:35376522-#
さすがにここまで低レベルな質問に回答出来ない奴は居ないだろ
すいません教えてください
バロスwwwwwwwwwwwwww
ワロタ
697 名前:nobodyさん[sage] 投稿日:2006/05/21(日) 20:00:37 ID:???
>>696 おまいのやりたいことは
>>693 で合ってるか?
ならそれでいいんだけどなw
698 名前:nobodyさん[sage] 投稿日:2006/05/21(日) 20:00:53 ID:???
>>696 え、
>>693 は思いっきり間違ってるけどこれでいいの?w
700 名前:nobodyさん[sage] 投稿日:2006/05/21(日) 20:03:18 ID:???
バロスwwwwwwwwwwwwww
701 名前:nobodyさん[sage] 投稿日:2006/05/21(日) 20:03:39 ID:???
ワロタ
気持悪りぃ…
ほっとけ
>>696 perldoc perlrequick
を隅から隅まで 3回読んで理解してから、また同じ質問をしに来てみて。
まだその気が残ってればね。
「w」を使う奴ってホント痛いの多いな
>>704 そういう返しは嫌いだなボクチン
>>705 >>704 にむかついたので教えてあげようと思ったがやめた。
perlの正規表現を扱っているページならほぼ確実に載ってると思うんで自分で調べろ
708 :
693 :2006/05/21(日) 20:15:20 ID:???
これは酷い
wwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwww w 臭ぇんだよカス
氏ね氏ね
厨国人どもうぜーぞアホ
あーもう黙れよ屑が。。。
716 :
nobodyさん :2006/05/21(日) 21:02:56 ID:??? BE:141504544-#
この流れワロタ
このクソな流れのどこが面白いんだか・・・
はお、次の質問どうぞ
>バロスwwwwwwwwwwwwww >ワロタ 日本語以外を話されても困ります この言葉を日本語に翻訳してくれるプログラムを教えて下さい
721 :
nobodyさん :2006/05/22(月) 02:26:31 ID:8/L06kwr
なんだかこんな雰囲気で質問するのも悪いんですが質問です CGIスクリプトのHTML部分でUTF-8のコードを使いたいのですが スクリプト本体をUTF-8で書いても500Errorがでてしまいます どうしたらいいんでしょうか? < META http-equiv="Content-Type" content="text/html; charset=UTF-8" > このタグだけUTF-8にしてみたりしたんですが、元のコードが違うため化けてしまってだめです どうか教えてください
>>721 UTF8以外で書けばエラー出ないの?
エラーは何が出てるの?(500じゃわからんよ)
>>721 状況がよくわからんけどとりあえず文字コードをUTF-8Nで保存してみ
724 :
721 :2006/05/22(月) 03:05:46 ID:???
レスありがとうございます 723さんのとおりUTF-8Nで保存したら表示されました! ありがとうございます^−^
Windowsのメモ帳とか問答無用でBOM付けるのでちょっとした修正にも使わない方がいい。
726 :
nobodyさん :2006/05/22(月) 10:56:00 ID:??? BE:185724173-#
727 :
nobodyさん :2006/05/22(月) 10:56:32 ID:??? BE:212256746-#
と言うか関西弁か
728 :
nobodyさん :2006/05/22(月) 11:40:06 ID:p6aDul8l
データファイルから切ってきて 例えば設定ファイルに「$bgcolor=red」などと書いたものを そのまま1行ずつ読み込んだとします これをスクリプト内でそのまま使って 機能させることはできますか?
nihongo de ok
できる - 終了 -
工夫次第でできる。 - 終了 -
eval
733 名前:nobodyさん[sage] 投稿日:2006/05/22(月) 13:11:35 ID:???
>>732 オマエはバカか?よく見ろ。
あ?おい
> あ?おい あ行の勉強中ですか? お疲れさまです。
ふたりともかおがまっかですよ
eval while(<DATA>);
print $bgcolor,"\n", $color, "\n";
exit;
__END__
$bgcolor=red
$color=blue
>>728 こういうこと?
デバッグ用に配列の中身がみたいと思っています。 PHPでの print_rのようなものはありませんか? googleで検索したところ Dumperというのを見つけたのですが、 配列を入れても配列の構造を返さないようです。 ちなみに以下のようにしました。 $dumper = new Data::Dumper(\@array); print $dumper->Dump();
740 :
nobodyさん :2006/05/22(月) 18:43:14 ID:??? BE:477576869-#
print Dumper(\@array); じゃだめなん
>>740 だめなんですよねぇ。
ちょっと調べているんですが、以下のようなコードで配列に連想配列を
突っ込むというようになっているからかもしれません。
@array = ('a','b','c');
foreach(@hoge) {
$array{$_}{$fuga} = 'hogehoge';
}
print Dumper(\@array);
-> a,b,cがでてくる
print Dumper(\$array);
-> undefがでてくる
742 :
nobodyさん :2006/05/22(月) 19:26:38 ID:??? BE:141504544-#
\%array じゃないのか…
743 :
nobodyさん :2006/05/22(月) 19:39:48 ID:ZM446lpM
どなたかお願いします。 perlの変数値を複数行にする事は可能でしょうか? 例えば、htmlソースを変数に入れる際改行を消して一行にするしかないのでしょうか? 例)以下のソースを$wordという変数に代入するには・・・ <table> </tr> <td> hello </td> </tr> </table> ↓ $word = "<table><tr><td>hello</td></tr></table>"; とするしかないのでしょうか?
744 :
nobodyさん :2006/05/22(月) 19:45:41 ID:??? BE:318385049-#
ヒアドキュメントとか $word = << '_END_'; <table> </tr> <td> hello </td> </tr> </table> _END_
>>743 ぐぐれかす
>>743 改行文字入れるだけ。訊く前に自分で試してみては。
"<table>¥n<tr>¥n<td>¥nhello¥n</td>¥n</tr>¥n</table>¥n"
>>742 > \%array じゃないのか…
その通りでした...
ぐぐって出てきたページには \$hash って書いてあったと思ったのに orz
ありがとさんくす
アンカーの記号に全角使うヤツってプログラムを手に付ける人だとは思えない
749 名前:nobodyさん[sage] 投稿日:2006/05/22(月) 20:52:52 ID:??? アンカーの記号に全角使うヤツってプログラムを手に付ける人だとは思えない バロスwwwwwwwwwwwww 突撃させて荒らしてやろっかこのスレww
基地外が来る分には構わんが むしろ低脳集団か^〜^
決めたわwwwwうぜぇからwwwこのスレ荒らさせるwwwwwww VIPPER舐めんなw
753 :
nobodyさん :2006/05/22(月) 21:10:04 ID:HprcJTxW
クソスレ終了
754 :
nobodyさん :2006/05/22(月) 21:11:26 ID:/ImCeCNj
糞スレ終了 でいいのかな?
>752 クソ人生終了 でいいのかな?
756 :
nobodyさん :2006/05/22(月) 21:17:42 ID:??? BE:716364599-#
VIPよりニュー速に宣伝書き込みまくった方が人来るよ
757 :
nobodyさん :2006/05/22(月) 21:20:14 ID:BVU2xPKh
糞スレ終了
クソスレ終了
759 :
nobodyさん :2006/05/22(月) 21:22:06 ID:Lsku8mlu
, -‐''''"´ ̄``ヽ、 //´ ______,,>、 / _ ヽ /::/ / ̄:::::::::::::::::::::::\ /  ̄ ̄ j /::::l/:::::::::::::::::::::::::::::::::::::::::l l _ィニニア二二二ニヽ、j._ ,l:::::::::::/l/lノノ/_イ:::::::::::::l | 0Lj/ヽ /・l,`ヽ l::::/ /ヽ /・l, l::::::| レ:r、/i・ ノ く、ノ| |::l i・ ノ く、ノ !:;:::/ {, ニ , .|ヽ {, ニ , .|:::/ レ} 人 ノヽ | } 人 ノヽ |ノ/ l:T`'''i, `ー" \__,/ノ T`'''i, `ー" \__,/ ヽ}, `ー--ー'''" /' レ}, `ー--ー'''" // x, _,,.x=" `x, _,,.x=" _,r┴‐-`v´-‐j-、__ , -‐-、_r┴─'ー‐チト / ̄/:.:.:.:| ̄ ̄`T ̄´|:.:.:.:l´ `ヽ / ヽ ̄`ー-‐'´`''''⌒ヽ 「バルス!」 / ,':.:.:.:.:.l l l:.:.:.l \ _r‐、-、-、r, 、 ', |:.:.:.:.:.:.! ! !:.:.l ,. -‐ゝ/// 〉 〉 〉 〉 〉 ! ', l:.:.:.:.:.:.l | l:.:.:l / 人〈〈〈〈 ' ' ' /っ l l l:.:.:.:.:.:.! ! l:.:.:.ト/ / ```´-ァ‐'''" / l 、__/:.:.:.:.:.:l | |:.:.:ヽヘ l // / _ ィノ /:.:.:.:.:.:.:! l |:.:.:.:.:l `ーヽ、_ノ´l、______/lニ二」 ____l:.:.:.:.:.:.:.| l |:.:.:.:.:! |_ ( ( ) )_〕| l l`ー‐‐'匸二l ̄ ̄l二フーイ /  ̄ `‐‐'´ ヽ |
vip でやれ
クソスレ終了
762 :
nobodyさん :2006/05/22(月) 21:28:43 ID:acwyxWDg
vip
763 :
nobodyさん :2006/05/22(月) 21:31:00 ID:xLp91Sew
クソスレ終了
764 :
ヴぃぱー :2006/05/22(月) 21:33:18 ID:???
>>752 を引き取りにきますた
ご迷惑おかけしました
765 :
nobodyさん :2006/05/22(月) 21:36:32 ID:aQon5hVc
しまったローゼンかと思ったらコーディングだった!!!!!!!!!!!!!!!
766 :
nobodyさん :2006/05/22(月) 21:38:15 ID:jSkZd7uq
〜∞ /|/| 〜∞ 臭い?>/ ^ω^ | プーン | ー / て つ | / し´し´ 〜∞ 〜∞
767 :
nobodyさん :2006/05/22(月) 21:46:13 ID:EyXuXU5p
r'゚'=、 / ̄`''''"'x、 ,-=''"`i, ,x'''''''v'" ̄`x,__,,,_ __,,/ i! i, ̄\ ` 、 __x-='" | /ヽ /・l, l, \ ヽ ( \ /( _ 1 i・ ノ く、ノ | _ i i, / ) \ \ _ _ |_i, / ) {, ニ , .| ( \ i, _ _ _ / / \ \( | | |)/ / } 人 ノヽ | \ \( | |. | )/ / ) |_|_|_|| / T`'''i, `ー" \__,/ .| | |_ |_ | _| ( | \__\___\__) ) }, `ー--ー'''" / ( (__/___/__/ | | / | `x, _,,.x=" .| \ | | / / `ー'" | \ / \ ( / \ ) /
768 :
nobodyさん :2006/05/22(月) 21:48:05 ID:9+sFjQV+
クソスレ終了
769 :
申し訳ない。 :2006/05/22(月) 21:53:09 ID:ca5AJboc
VIPPER兼このスレの住人として、お詫びを申しあげる。 勘違いでしないでもらいたいが、VIPPERはこんなDQNばかりではない。 少なくとも本当のVIPPERは名前欄に「VIPPER」などと入れない。 2ちゃんねらには真面目な議論を好みジョークがわかる奴もいれば、 やっていい事といけない事の区別も付かないような奴もいるのは、ご存知だと思う。 これと同じように、VIPPERの一部(主に妹とかおっぱいとか言ってる層)が暴走しているだけである。 他の板にまでVIPの空気を持ち込むのは、このような輩だけである事をご理解いただきたい。 自分に不利になると召集をかけるサマは、そこらでたむろっているDQNと同じで、ただ醜い。 長文失礼しました。
771 :
nobodyさん :2006/05/22(月) 21:55:37 ID:??? BE:557172779-#
この程度かよw レベル低すぎw
う〜ん、使えねぇなあVIPは・・・。
773 :
nobodyさん :2006/05/22(月) 22:25:31 ID:Hm6mUF9z
VIPPER兼このスレの住人として、お詫びを申しあげる。 勘違いでしないでもらいたいが、VIPPERはこんなDQNばかりではない。 少なくとも本当のVIPPERは名前欄に「VIPPER」などと入れない。 2ちゃんねらには真面目な議論を好みジョークがわかる奴もいれば、 やっていい事といけない事の区別も付かないような奴もいるのは、ご存知だと思う。 これと同じように、VIPPERの一部(主に妹とかおっぱいとか言ってる層)が暴走しているだけである。 他の板にまでVIPの空気を持ち込むのは、このような輩だけである事をご理解いただきたい。 自分に不利になると召集をかけるサマは、そこらでたむろっているDQNと同じで、ただ醜い。 長文失礼しました。
V〜中略〜い。 長文失礼しました。
どこを縦読みですか
勘違い← 少なく←
空気を切って質問しますが....大丈夫でしょうか? 入力された文字列をソートするcgiを作りたいのですが 入力フォームから$in{'text'}これにソートしたい文字列を入れて ソートしたいんですが 配列への代入ができません @texts = $in{'text'}; @sortd_texts = sort { $a <=> $b } @texts; print <<"EOM"; 〜〜〜〜HTML〜〜〜〜 EOM foreach $texts ( @sortd_texts ) { print ( $texts ); } これだと入力した文字列がそのまま表示されるだけです。。。 この処理はどういじったらできるようになりますでしょうか?
778 :
nobodyさん :2006/05/23(火) 03:25:58 ID:CTr6dA2u
age忘れ…
>>777 $in{'text'} に改行区切りの文字列が入るって事でいいのかな?
@texts = split /\n/, $in{'text'};
で改行で区切って配列に代入できるよ。
あと、文字列をソートするなら <=> 演算子じゃなくて cmp 演算子じゃないかな。
780 :
777 :2006/05/23(火) 04:15:33 ID:CTr6dA2u
>>779 できました、が…
それだと改行を入れないとソートされないですよね
普通に文字を入れて、ソートできたら便利なんですが
ただ1文字1文字を区別するような方法は…
あればぜひ教えてくださいm(__)m
無理そうであれば諦めます
printするごとに\nをださなきゃ改行されないですがな それか特殊変数に\nを入れておいて、配列をそのまんまprintする方法もあります
> ただ1文字1文字を区別するような方法は…
>>777 は「配列に1文字(1byte?)ずつ叩き込みたい」だったのか…
783 :
777 :2006/05/23(火) 04:57:06 ID:CTr6dA2u
ちょっと
>>780 のことの「それだと改行を入れないとソートされないですよね」が意味不明ですかね
↓がフォームだとして
a
b
a
b
a
b
@texts = split /\n/, $in{'text'};でやると
こういう風にしないとソートされないと言いたかったんです
それと丁度作りたい感じのがありました
tp://compact.s56.xrea.com/defrag.html
こういうのです
>>780 と、後から新しい情報を出すのは「情報の小出し/後出し」と言われていて嫌われる行為です。
質問する時には、なるべく詳しい状況を書く事をオススメします。
@texts = split //, $in{'text'};
で1文字ずつ区切って配列に入れられます。詳しくは split 関数のマニュアルを参照。
785 :
777 :2006/05/23(火) 05:12:57 ID:???
>>784 最初はそうなると考えてなかったのです、すいませんでした。。
次回書き込むことがあった場合気をつけます
無事にできました
こんな初心者にレスしていただいたみなさまありがとうございますm(_ _)m
全角でやってみるといいよ
787 :
nobodyさん :2006/05/23(火) 15:57:06 ID:Mf/1DNRk
perlで、一定バイトの、中身に飛び飛びに文字列や数値を持つデータを作るにはどう書けば良いですか? cで書けばこういう事です。 char data[1000]=""; memcpy(data,"aiueo",5); memcpy(&data[100],"kakikukeko",10); memcpy(&data[200],"sasisuseso",10); memcpy(&data[300],999,4); よろしくお願いします。
789 :
787 :2006/05/23(火) 16:20:26 ID:Mf/1DNRk
>>788 レスありがとうございます。
一定バイトのメモリを確保するにはどう書けば良いのでしょうか?
それとも、
my $data="";
と宣言すれば、
substr($data,100,10)="kakikukeko";
などとした時に自動的に1〜99バイト目にはヌルが入って
100〜109にはkakikukekoが入るのでしょうか?
簡単なテストをしてみたところうまくいきませんでした。
ちゃんとPOD読もうよ 全部書いてあるじゃないか
>>787 my $data = pack('a5@100a10@200a10@300a4',"aiueo","kakikukeko","sasisuseso",999);
期待する結果はこっちか 'a5@100a10@200a10@300N'
793 :
nobodyさん :2006/05/23(火) 17:29:41 ID:Bg5mY8j2
$a =~ s/ケース/case/; のように、SHIFT-JISで正規表現内に「ー」(文字コード81 5C?)等の 文字を使う場合、Internal Server Errorを回避するにはどのようにすれば良いでしょうか? EUCで保存する以外に方法はないでしょうか?
794 :
nobodyさん :2006/05/23(火) 17:32:53 ID:??? BE:176880645-#
$a =~ s/\Qケース\E/case/;
795 :
793 :2006/05/23(火) 17:51:14 ID:???
>>794 即レスありがとうございます!正常に動作しました。
なるほど、「\Qと\Eに挟まれてる部分は、メタキャラクタを無視する」
ということのようですね。
勉強になりました。ありがとうございました。
誰かあぼーん機能の事について教えてくれないか? 上手く作れないのだが・・・・。
797 :
nobodyさん :2006/05/23(火) 18:31:34 ID:??? BE:318384094-#
(゚Д゚)?
Perlで、XML用に文字列をサニタイズする関数は用意されていますか。 PHPのhtmlspecialchars()に相当する関数です。 自作するのでもいいのですが、なるべく一般的な作法に従いたいと思い、聞いてみました。 テンプレートエンジンを使えというのはなしでお願いします。
799 :
nobodyさん :2006/05/23(火) 20:40:22 ID:??? BE:318384566-#
関数じゃないけど CGI::Util::simple_escape CGI::escapeHTML あるにはあるね。 全然一般的じゃないけど
>>796 Name_Not_Found<>mail<>2005/09/25 03:44:39<>text
↓
あぼーん<>あぼーん<>2005/09/25 03:44:39<>あぼーん
datをこうすりゃいいだけじゃないのか?
日付の部分はどうなってたか覚えてないが
53 名前:あぼーん[あぼーん] 投稿日:あぼーん あぼーん
803 :
nobodyさん :2006/05/24(水) 05:17:49 ID:NTQf+ORl
変数を()で囲う意味がわかりません。 ( $hashkey ) = split( ":", $data ); $hashkey = substr( $hashkey, 1 ); ↑という文があるのですが、左辺の変数を()で括ったり、括らなかったり。 意味が違ってくるのでしょうか?
$num = @array; と同じ意味で、split の返りに括弧で括らないと要素の総数が入るんじゃない? 試してないから憶測だけど。
Encode モジュール (Ver.1.38) なのですが、196 行目の正規表現部分でエラーがあり少々困っています。 196:define_alias( qr/\bkoi8[\s-_]*([ru])$/i => '"koi8-$1"' ); \s-_ の範囲指定が不正だよんとエラーが出るのですが、これを同じ動作をする構文で書き換えた場合どうなるでしょうか? それともここは [\s\-_] でいいんでしょか・・・
1.38 って…(;´Д`) Encode 2.14, Encode::Alias 2.04 だと、 /usr/lib/perl/5.8.8/Encode/Alias.pm:190: define_alias( qr/\bkoi8[\s\-_]*([ru])$/i => '"koi8-$1"' ); になってる。
標準で入ってるのはアップデートしたことなかったorz 早朝レスどもです 使うモジュールはアップデートしるか・・・
>804さん ありがとう。そうなのかもしれないです。 試してみます。
>>803 リストコンテキスト
スカラーコンテキスト
>804 >809 わかりましたよ。 split関数の値を代入する先には、基本的には配列全体を表す「@○○」を するけど、もし最初の区切りまでの部分だけ必要であれば、()で括った 変数を指定してやればいいみたい。()で括られた変数は、配列として扱える。 もし()で括らなかったら、配列をスカラ変数として扱ってしまう為 その配列の数が返ってくるみたい。 実際に試してもそういう結果になりました。 ありがとう。
>811 まずは、このページから熟読します。 ありがとうございます。
813 :
nobodyさん :2006/05/24(水) 18:06:59 ID:RkOZr6U0
配列の中身をそのままスカラーに入れるスマートはないでしょうか。 例えば、 @array = (a,b,c,d,e,f); という配列があったとして、 $Aに「a,b,c,d,e,f」(コンマ区切り付き)という値を入れる場合、 $A = ($array[0],$array[1],$array[2],$array[3],$array[4],$array[5]); とするのが一番手っ取り早い方法なんでしょうか?
>813 join をどぞ
>>814 できました。ありがとうございました。
超初歩的な愚問で恥ずかしい限りです。
一応、他にも同じようなおバカさんが居た場合のために(さすがに居ないか…)
812の例ならば、
$A = join(',', @array);
でできました。
>>815 ×812の例
○813の例
スレ汚しすみません。
いえいえ汚しなんかじゃないですよ
汚くはないけどちょっと臭いますね
813だけど、正直joinは使ったこと無いwww
820 :
nobodyさん :2006/05/24(水) 18:54:33 ID:??? BE:159192263-#
$" = ","; $A = "@array"; 遅いけど
>>820 がなぜ遅くなるのかわかる人教えておくれ。
822 :
nobodyさん :2006/05/24(水) 20:19:12 ID:Cp3G4SBW
使っていたBBSスクリプトや書籍のサブルーチン(kentかな)を使って スクリプト中にcookieを入れるのですが、なかなか上手く行きません print "Set-Cookie: というのがそのまま表示されたり、 HTMLのprintと絡んで誤動作します 注意点はありますか?
Contentヘッダより先にCookieヘッダを出力
824 :
nobodyさん :2006/05/24(水) 21:38:08 ID:Cp3G4SBW
失礼しました、新たなる悩みです 認証のパスワードを記憶させたいのです 他の(自分で組み込んだ)cgiで作ったクッキーは読み込めていますが スクリプトに組み込んだものだと動作しません 書き込んではいるのですが、表示させてみると変な記号になっています 厳しいなぁ
>>824 >>1 の2.と3.に当たる部分をどうぞ。
> 表示させてみると変な記号になっています
URIエスケープしたものがきちんと書き込めていても、人によっては「変な記号」ですし。
826 :
nobodyさん :2006/05/24(水) 22:54:13 ID:Cp3G4SBW
FORMの処理が違うようです 頭冷やして明日出直します、失礼しました
スクリプトの改造はスレ違いじゃね?
改造の仕方じゃなくて、こういう風に改造しててperlの書き方がわからないだから、 別に問題ないんでね?
829 :
nobodyさん :2006/05/25(木) 11:49:58 ID:KsPQY1Yo
配列についての質問です @A = (0,0,0,0,0,0,0,0,0,0, ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0); @B = ("0","0","0","0","0","0","0","0","0","0", ,"0","0","0","0","0","0","0","0","0","0" ,"0","0","0","0","0","0","0","0","0","0" ,"0","0","0","0","0","0","0","0","0","0" ,"0","0","0","0","0","0","0","0","0","0"); という2つの配列を設定して、 @A,@Bを表示すると両方とも 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 という風になって最後に半角スペースがついてしまいます。 そのせいかわかりませんが、 おかげで $A[1]+=1; みたいな代入しても反応ないし、 $As = join(',', @A); で連結しても反応しません。 何が悪いのでしょうか?
local $" = ','; print "@A"; or... local $, = ','; print @A;
831 :
nobodyさん :2006/05/25(木) 12:08:13 ID:KsPQY1Yo
>>829 ありがとうございます!
そのように試してみたら
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,
のようになりました・・・
>>828 今 $As = join("<>", @A); で連結を試してみたら
0 0 0 0 0 0 0 0 0 0 0 0<>
な風に最後の所だけつきます・・・
832 :
nobodyさん :2006/05/25(木) 12:22:44 ID:KsPQY1Yo
>>830 >>829 ちなみに
@A = (0,0,0,0,0,0,0,0,0,0,
,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0);
設定直後に表示すると最後に半角スペースはついてないようです
push(@A.log,"$aa,$ab,$ac,$ad,$ae,@A,\n");
でA.logにセーブして
foreach $Al(@A.log) { ($aa,$ab,$ac,$ad,$ae,@A,$dm)= split(/,/, $Al); }
で取り出した後@Aを表示すると0 0 0 0 0 0 0 0 というように
最後に半角スペースがついてしまうようです。
833 :
nobodyさん :2006/05/25(木) 12:33:50 ID:??? BE:35376522-#
訳分からんぞ…情報を小出しにするなっての…
エスパー的回答 @Aに正しく配列が入ってない
@A = (0,0,0); これでやってみろ
836 :
nobodyさん :2006/05/25(木) 13:43:47 ID:KsPQY1Yo
@A = (0,0,0); でprint "@A";表示すると0 0 0de 一回ログに書き込んでから呼び出して push(@A.log,"$aa,$ab,$ac,@A,\n"); foreach $Al(@A.log) { ($aa,$ab,$ac,@A,$dm)= split(/,/, $Al); } print "@A";表示すると0 0 0 niなります もしかしてログに変数と配列の両方を入れてしまうからおかしくなるのでしょうか? ログの形は $aa,$ab,$ac,0 0 0, $aa,$ab,$ac,0 0 0, $aa,$ab,$ac,0 0 0, 1行ずつ下に書き込んでいく感じです。
ログはどうでもいい。 配列についての理解ができてない。
838 :
nobodyさん :2006/05/25(木) 13:56:33 ID:??? BE:123817027-#
変数名にドットって使えたっけ >print "@A";表示すると0 0 0 niなります お前がそうなるコード >($aa,$ab,$ac,@A,$dm)= split(/,/, $Al); を書いてるんだから当たり前じゃん
配列について一からやれ
840 :
nobodyさん :2006/05/25(木) 14:45:39 ID:KsPQY1Yo
ワロスった
正規表現中に下記のように漢字で人名を入れてみると なぜか誤動作してしまいます $name = '相川|山本|岡田|下柳'; 30名ほどでどの漢字で起こるのかわかりません 全てにエスケープ入れてみてもだめです どこかに誤動作を起こす文字の記載がありますか?
843 :
nobodyさん :2006/05/25(木) 17:36:29 ID:??? BE:53064623-#
(Shift_JIS) 山本 = 8e 52 96 7b 7b = { とか
>>842 「\」以外にも、正規表現内では、「(@$/[]{}」を2バイト目に含む文字も予期せぬ動作を起こす可能性がある。
エスケープするには、これらの前に「\」を入れらければならないので無理。
(2バイト目が「\」の場合は、後ろに入れても結果として同じになる)
一部のものは、正規表現を\Q〜\Eで囲って回避できるが、@などはこれでも無理。
山本 → \x8e\x52\x96\x7b
のように文字コード形式で表すようにするか、EUC-JPに変換してから検査する。
なるほど、変換は私にはムリなので 文字コードを調べてみます 有り難うございます
>>845 文字コードをあれこれする方がメンドいと思うぞ
>>842 じゃあ僕は Encode.pm でも勧めておくか。
面倒に感じるかも知らんけど、この手のソリューションとしては本線ということで。
>>845 > なるほど、変換は私にはムリなので
たとえあなたには無理でも、
それを代わりにやってくれるモジュールがあります。
すいません質問です アップローダを設置しました それでアップしたファイルが1週間後には自動で削除するにはどうすればいいでしょうか? つまりファイルの有効期限の設定です
850 :
nobodyさん :2006/05/26(金) 03:58:36 ID:VJllj5+q
853 :
850 :2006/05/26(金) 04:05:03 ID:VJllj5+q
はずしても変わらないかと思っているんですが 実行したら動かないし
>>849 有効期限機能のあるアプロダを使う
>>850 別に必要ではないよ。 , (カンマ)でもOKだし他にも方法あり。
' と " の対応に注目すると吉。
>>850 print qq|<form method="post" action="$reload">\n|;
「.」(ドット)は文字列を結合する演算子。 print '<form method="post" action="' . $reload . '">' . "\n"; 「<form method="post" action="」という文字列 「$reload」というスカラ変数 「">」という文字列 「\n」という文字列 を結合した結果を print している。
857 :
849 :2006/05/26(金) 05:28:59 ID:???
858 :
850 :2006/05/26(金) 05:40:00 ID:VJllj5+q
みなさん ありがとうございます 結合っての確か見た記憶があります
結合って言ったらtieのことじゃね?連結だろ?
いや、合体だろう。
究極合体か
>>857 stat[9] と現在の時刻を比較して1週間たっていれば unlink
六神合体ゴットマーズ、を思い出した・・・
865 :
nobodyさん :2006/05/27(土) 00:17:15 ID:Ea6+r9JB
ソースを印刷してはさみで切る
>>865 大雑把に。
foreach(split(/\n/, $data)){
push(@news, $_."\n") if (/<!--テンプレ-->/.../<!--テンプレ-->/);
}
それと、一応個人サイトへのリンクは、h抜いて書いて。
> それと、一応個人サイトへのリンクは、h抜いて書いて。 なんで?
マナー 自分のサイトのアクセス解析で2chから大量に来てたら、 ちょっとヒくんじゃね?
昨日LWPの存在を知り、Perlをインストールしてプログラム書いて「便利便利!」 と喜んでました。 で、プロバイダ(ぷらら)に上げたら動きませんでした。 ググって見ると「nifty plala biglobeなどは他サーバへのアクセスができないようになってるので無理」 なる情報を見つけました。 これはあきらめるしかないのでしょうか?
>>870 どんなモジュールが入っているのかまず調べるべきでしょう。
>>872 そうですね。モジュールの調べ方は知らないので明日調べてみます。
plalaのサイトにはPerlのバージョンは5.8と書いてありました。(Perlに関してはそれだけ)
私が自分のWinにインストールしたのはActivePerlの5.8xxxです。
Jcode.pmがデフォで入ってないのにびっくりしました。jcode.plを使ってます。
LWPは、動かなかったのでプロバイダにモジュールがないのかな?
と思いsite/libのLWPディレクトリをUPしてみましたが駄目でした。
LWPとは別に
HTTP::Liteなるものもあるようなので明日試してみます 。
もし、plalaで(LWP||
HTTP::Lite )を(使えてる||使えてない)な人がいらっしゃいましたら
情報くださると助かりますです。
#「push @a, $b」と「push(@a, $b)」はどっちにすべきですか?
>>873 本題とはそれるけど、
5.8なら Jcode.pm っていうか Encode.pm が入ってるから、そっち使えばいいと思うよ。
jcode.pl じゃユニコのデコエンコできないからねえ。
push () は自分で見やすいほうを。
あとniftyは、今はどうか知らないけど、標準モジュールとか何も入ってなかったとオモタ。
perlにはEncodeがあるからな。 plalaはデフォでJcode入ってるよ。 サーバー間通信がそもそも出来ないように設定してあるのでどうやってもLWPは使えない それと、普段は前者だが引数が二つ以上なら push @a, ( $b, $c ); とかやるかも。
> マナー > 自分のサイトのアクセス解析で2chから大量に来てたら、 > ちょっとヒくんじゃね? そもそもマナーとは何かだよね。 でさ、何で「ヒく」んだろう。
>>873 恐らく、デーモン的な使われ方を阻止する為でしょう。
つまり、セキュリティ上の仕様ではないでしょうか。
pushについては私は前者の方が簡潔で好きですけど、
カッコを付けないと、優先順位の問題が置きやすいので、一長一短です。
Perlのコードは十人十色(TMTOWTDI)なのでお好きにどうぞ。
優先順位の問題は例えば print ($a + $b), " is answer"; と書くと
" is answer" が無視されてしまいます。これを防ぐには
print (($a + $b), " is answer"); のようにカッコをつける必要がります。
または print +($a + $b), " is answer"; のように前に「+」をつけてもいいですけど。
>>873 #!/usr/bin/perl
use File::Find;
print "Content-type: text/html;\n\n";
find(\&wanted, @INC);
sub wanted {
if(/\.pm$/i){print "$File::Find::name<br>\n";}
}
880 :
873 :2006/05/27(土) 17:45:38 ID:???
881 :
nobodyさん :2006/05/27(土) 20:52:04 ID:/9Ndz8t/
if ($in{'name'} eq "") { $in{'name'} = "$noname"; } で$noname=名無しさんって感じになってるんだけどコレだとクッキー保存されちゃって 次回からはこの名前を一回消して自分のHNに変える必要がある。 だからこの名無しの時だけ次回からは名前欄が空欄とか名無しじゃないときのHNにしておくみたいな事出来る? 説明下手だがこんな事をしたい。
よくわからんが、if文いっこ挟むだけでできるでしょ。 クッキーの情報を使いたくない時には、そうなるように書けばいいだけ。
883 :
nobodyさん :2006/05/27(土) 21:15:40 ID:/9Ndz8t/
それがよく分からんのだが・・・。
my $name = $in{'name'}; みたいのを用意すれば、if ($name eq "") { $name = $noname; } しても $in{'name'} に $noname が代入されませんよ、とか。 別に必ず $in{'name'} をそのままクッキーに保存しなきゃいけないわけじゃないし クッキーから読み出した前回投稿時の名前を仕舞っておく変数ぐらい あってもいいよね、とか。 方法はいろいろ。
>>881 が「分からん」のは、条件分岐云々じゃなくて「クッキーの焼き方」だべさ。たぶんね。
886 :
nobodyさん :2006/05/28(日) 06:25:30 ID:LqLk4cEL
perlの質問です。 $jump_url=~s/(\W)/'%' . unpack('H2',$1)/eg; という構文の解読の仕方が分からないのですが、この説明をお願いできませんか? どういうことをしている構文なのでしょうか?
>>886 URLエンコード または URIエンコード でググるべし
888 :
nobodyさん :2006/05/28(日) 06:56:06 ID:LqLk4cEL
>887 朝早くから答えて頂きましてどうもありがとうございました! 教えて頂いたキーワードで只今ググって来ました。 エンコードをしているのは分かるのですが この構文の流れを説明していただけないかと思いまして。 お願いします!教えてください! まず分からないのは、 =~s/(\W)/'%' と unpack('H2',$1)/eg の間にある "." なのですが 正規表現の結果を足しているという事なのでしょうか? 何の為に???????(x_x)? と思って全く発想が浮かびません。。。 ヒントだけでも頂けないでしょうか? ちなみに、perlの辞書を片手に頑張ってはいるのですが 自分の未熟さに頭が上がりません。。。 よろしくお願いします!!
$jump_url=~s///eg; s///が正規表現による置換。オプション'e'と'g'。 (\W) マッチさせる正規表現。 '%' . unpack('H2',$1) 本来置き換える文字列だけど、'e'がついてるから実行する文。 あとは辞書で。
file.txt 1,あいうえお,142 2,かきくけこ,127 3,さしすせそ,139 というファイルがある時、この3列目が多い順に行をsortし表示するには どうすればよいですか?
質問を少し間違えました。 この3列目が多い順に行をsortし2列目を表示するには どうすればよいですか? でした。よろしくお願いします。
892 :
nobodyさん :2006/05/28(日) 11:32:27 ID:LqLk4cEL
>889 ありがとうございました。 期待していた回答とは違いましたが、この辞書とネットを使いながらいろいろ試してみます。
>>892 '%'. を入れたのと入れないのを両方実行して、比較してみれば意味が分かるよ。
>>890 ,891
open(F, 'file.txt');
while (<F>) {
chomp();
push(@data, [split(/,/)]);
}
close(F);
@data = sort {$b->[2] <=> $a->[2]} @data;
foreach (@data) {
print $_->[1], "\n";
}
test.plというファイルを用意して同じディレクトリにfile.txtを置き、 「perl test.pl」で以下のコードを実行したのですがファイルを開けません。 何か書き方が悪いんでしょうか。 test.plの内容: my @buf, $line; if(! open(IN, "<file.txt")){ @buf = <IN>; foreach $line (@buf){ print $line; } close(IN); } * if( -e "file.txt"){}でチェックしたところファイルは存在していました。 * 環境はWinXPHomeSP2 + ActivePerl v5.8.6 です。
897 :
895 :2006/05/28(日) 15:00:28 ID:???
直りました。ありがとうございます。
898 :
nobodyさん :2006/05/28(日) 16:20:50 ID:LqLk4cEL
>894 すみません。教えて頂いたその方法でやってみたのですが 何度やってもエラーになってしまいます。何故でしょうか?
>>898 なんてエラーでてるのか書きなよ。
ブラウザで print "Content-type: text/html\n\n"; 忘れてるとかだったらはたかれるよ。
>>898 見やすいように全角スペース使ってインデントしてあるけど、削除した?
>>895 !はnotの意味だぞ、と指摘しないと成長しないような気がする
本人が何を思って ! をつけたかだな。
903 :
nobodyさん :2006/05/28(日) 22:39:51 ID:??? BE:159191892-#
正常終了コードが 0 と勘違いしたのでは
たまたま見たサンプルの記述がそれだったから に、10ガバス
大本命に随分少額だな。 はらたいらに100点並
クイズダービーだっけ?
907 :
bc :2006/05/29(月) 14:43:29 ID:BOZTb2Dk
>>907 > でラジオボタンって作れるんですか??
作れません。
> これだとただの表示されるだけじゃないんでしょうか??
その通りです。で、何か問題でも?
時間のデータで、○○時○○分と書かれたものがあります ここから○○を抜き出すことはできます これを数字として扱って比較したいのですが、どうしたらいいですか? 時間や分は「09時05分」などと必ず二桁で保存されています
すbstr
>>909 <=> を使え。
「必ず二桁」なら文字列比較でも結果は変わらないはずだけど。
SEE ALSO
perldoc -f sort
912 :
909 :2006/05/29(月) 16:08:04 ID:???
わかりました 有り難うございます
913 :
907 :2006/05/29(月) 17:23:20 ID:BOZTb2Dk
質問の意味が分からないのは俺だけ?
あれかな、「受け渡し方」って書いてあるけど、受け方しか書いてないんじゃボケェ! っていうこと?
最近の若者はすぐ切れるからな。
>907
君の質問の仕方が下手なのと、
>>915 さんって親切だなって思った。
そして、その参考にしてるサイトは駄目駄目なので他所を探すことをおすすめします。
サンプル動かして、表示されたページが文字化け万歳とか哀しかったです orz
920 :
907 :2006/05/30(火) 00:06:24 ID:B/4ya/Hv
おおぉありがとうございます
すげー勘違いしてました
>>919 でもサンプルが詳しいサイトはあんまりないんですよ
探したんですが
921 :
nobodyさん :2006/05/30(火) 00:18:38 ID:D128RUeT
質問いいですか? >890さんじゃないけど file.txt 1,あいうえお,0-1-8 2,かきくけこ,1-3-2 3,さしすせそ,1-9-4 この3列目の ○-△-□ の △ の数が多い順に行をsortして、その行の2列目を表示するための方法を教えてください
>>921 open(F, 'file.txt');
while (<F>) {
chomp();
($num, $name, $value) = split(/,/);
$value = (split(/-/, $value))[1];
push(@data, {name => $name, value => $value});
}
close(F);
@data = sort {$b->{value} <=> $a->{value}} @data;
foreach (@data) {
print $_->{name}, "\n";
}
923 :
nobodyさん :2006/05/30(火) 01:11:36 ID:D128RUeT
早い!!? >922さん ありがとうございます 早速試してみます
924 :
nobodyさん :2006/05/30(火) 01:20:49 ID:D128RUeT
>922さん 質問してもいいですか 6行目の push(@data, {name => $name, value => $value}); の部分なのですが 右から2番目の value は $value じゃなくても良いのですよね? 他にも{}の中にあるもので $ が付いていない箇所があるのですがこれで正しいのですよね! わたしには初めてで読めなかったので、参考に6行目の説明をお願いできませんかm(*u_u)m
925 :
nobodyさん :2006/05/30(火) 01:32:02 ID:D128RUeT
>922さん 今アップしてみたのですが正しく表示できました! 出来たものの、>922さんが書かれた文の意味は分かりません。。。 どうか教えてもらえませんか?
>>924 ,925
ええと、ハッシュは知ってるかな。
%hoge = ("name" => $name, "value" => $value);
みたいなやつね。
このキーの部分のダブルクオーテーションは、省略できることになってる。
%hoge = (name => $name, value => $value);
みたいにね。
で、右辺を()でなくて{}で囲うと、ハッシュのリファレンスになる。
リファレンスが分からなかったら、ネットか書籍で調べて。
それが6行目の{name => $name, value => $value}
ハッシュはスカラーなので、
$hoge = {"name" => $name, "value" => $value};
と代入できる。
この$nameを取り出すのが、$hoge->{"name"}なんだけど、
このダブルクオーテーションも省略できるので、9行目の
$a->{value}みたいな書き方になる。
詳しくは、「ハッシュ リファレンス」でググってね。
このスレの優しさに泣いた
928 :
nobodyさん :2006/05/30(火) 01:41:26 ID:D128RUeT
>926さん わぁ♪ありがとうございます!早速ググってきますっ
このスレってこんな親切だったっけw
>>926 最近どうしたんですか?(ぇー
テンプレサイト作って、過去に出てきた例集なんてものあったら便利かもね 正直 CSV ソートの質問は秋田(;´Д`)
931 :
nobodyさん :2006/05/30(火) 05:26:45 ID:D128RUeT
Missing right curly or square bracket at ./sub.cgi line 67, at end of line syntax error at ./sub.cgi line 67, at EOF ./sub.cgi had compilation errors. というエラー文が出ているのは、どんな意味なのでしょうか?
>>931 「EOFまで行っても } が足りないですよ。はい、コンパイルエラー」
閉じ忘れたカッコを頑張って探してください。
エラーメッセージの意味がわかんないと毎回同じように困るわけで、
Excite翻訳を利用したりして、慣れるようにしてください。
>>930 随分前(テンプレが桂三枝で始まってた頃)に、FAQ・いい回答を
載せるCGIを提供してくれた人がいたような…どうなったか覚えてないんだけどね。
933 :
nobodyさん :2006/05/30(火) 06:53:05 ID:D128RUeT
>>932 さん
ありがとうございました!地道に探してたら括弧をエスケープしているのに気が付きました。
それでまたエラーが出てきたので、Exite翻訳を利用して解決しようとしたところ
[baby.html:?:warn] Malformed UTF-8 character (2 bytes, need 1) in array dereference.
というエラーなのですが
[baby.html:、:、警告、]、アレイ反参照の奇形のUTF-8キャラクタ(2バイト、必要性1)。
という結果になって意味が分かりません(P口`q。)".
これはどういう意味なのでしょうか?
934 :
nobodyさん :2006/05/30(火) 07:01:17 ID:D128RUeT
ちなみに、/baby.cgi?page=1&id=0000 というような構成で ログにあるデータを数ページ分吐き出すようにしているのですが 一部のページのみにこのエラー文出てしまいます。 サーバのスペックが低いからでしょうか。。。?
なんでサーバのスペックやねんw 恐らくログにWindowsの外字とか、UTF-8で扱えない文字が入っているはず。 根本的解決には本人にそれなりの知識とそれなりの技術が必要。 文字コードがらみの処理はややこしいので、改造レベルの人はあきらめるのが吉。 # というかデフォでwarning入ってんのか?
配列のデリファレンスの中に不正なUTF8文字列が含まれています、だろ。 その行晒せや。
>>936 ログの何行目というエラーの出方ではないので「その行晒せ」は無理だろう。
(質問者に、そこを調べて提出せよというのは難しそう)
938 :
nobodyさん :2006/05/30(火) 12:28:11 ID:RehvEaNH
すみません。1行目のところで「Permission denied at cgiファイル名 1行目」 とエラーになりファイルオープンできません。権限で怒られているのはなんとなく分かるのですが 対処法を教えてください。よろしくお願いします。 ※aaaaa.txtというファイルは存在しません。 ※cgiファイルのパーミッションは777です。 1 open(OUT, '>aaaaa.txt') or die "$!"; 2 print OUT "abcde"; 3 close(OUT);
ファイルが無いので新しく作ろうとしているが権限が無くて作れない
940 :
938 :2006/05/30(火) 12:38:16 ID:???
ディレクトリのアクセス権限か.htaccessの影響のようでした。 影響の無いディレクトリではオープンできました。 お騒がせしました。
テストプログラムを動かすときって、だいたい 「Hello World !」 ってやってるけど、 それじゃああんま面白くないし、2〜3行に渡ってやってみたいんだけど、そういうのってなんかある? なんか知ってたり面白いの思いついたら教えてください。(´▽`)ノ
いや、テストなんだし何でもいいと思っている俺ガイル
1から10を足すとか。
いやなんかこう print 'Hello World !!'; はいいけど、 print <<__EOT__; Hello World !! __EOT__ とか、なんか味気ないし1行じゃ意味ない感じでさあ。
何のテストなのかがよくわからないけど、
>>943 みたいなのとか、環境変数を全部吐くのとか、
「とりあえず動くことの確認」みたいなサンプルだったら、そういうのでいいのでは?
「いや、そうじゃなくて、こう、なんていうか、アレだよアレ」な場合(?)は
「エラストテネスのふるい」でぐぐるなり何なり。
946 :
nobodyさん :2006/05/31(水) 01:06:18 ID:8kzUocWY
>>921 です。
昨日の質問の続きなんですけど、ずっとわたしひとりで考えても分からなかったので教えてください(P口`q。)".
昨日聞いたものをsub readとして、下のどこかで&readしてHTMLに表示させたいんですけどどうしてもできません・゚・(PД`q)・゚
sub print{
local($jump_url);
if($EST{rank_fl}){
$jump_url=$Slog[2];
$jump_url=~s/(\W)/'%' . unpack('H2',$1)/eg;
$jump_url="$EST{cgi_path_url}$EST{rank}?mode=link&id=$Slog[0]&url=$jump_url";
}
else{$jump_url=$Slog[2];}
print<<"<!--HTML-->";
<!-- ログ\表\示 -->
<hr size=1 color=black>
<strong>[IN $in_pt][OUT $out_pt]</strong><br>
<a href="$jump_url"><b>$Slog[1]</b></a>
<br>
<!--HTML-->
print<<"<!--HTML-->";
$Slog[6]<br>
<!--HTML-->
}
foreach $line(@log_lines){
@Slog=split(/<>/,$line);
&print;
}
訪問ランキングスクリプトです。意味が分からなかったらファイルをお渡しします。 よろしくお願いしますm(*u_u)m
よくわからんが、カンで答えると、 「@log_lines」 がファイルの中身なら、 「foreach $line (@log_lines) {」 の前で 「&read」 ?でソートさせにいけばいいんじゃない? それでもできないなら、上で答えてくれたソースをその 「&read」 でどう改造して使ってるかによるな。
948 :
nobodyさん :2006/05/31(水) 01:21:31 ID:8kzUocWY
具体的には、 sub read の中で、file.txt というファイルを読み込んで 1,あいうえお,0-1-8 2,かきくけこ,1-3-2 3,さしすせそ,1-9-4 この3列目の ○-△-□ の △ の数が多い順に行をsortして、 その行の2列目を@log_lines に格納する準備をしておいて その後のsub print の中で@log_lines を利用してHTMLに吐き出すという事がしたいのですが 見ての通りsub print はテンプレート化したもので、sub read はcgiファイルなので別々のものを うまく組み合わせるのに困っています(u_`u。) sub read はlocal関数を使って、後々問題にならないようにしてみたりしたのですが 実際に起動させて見るとどれもうまくいきませんでした。....ρ(。 。、 ) ちからを貸していただけませんか?(*u_u)☆
949 :
nobodyさん :2006/05/31(水) 01:43:02 ID:8kzUocWY
>>946 さん
お返事ありがとうございます゚+.(・∀・)゚+.゚+.゚
いろいろ試してみてたのでめちゃくちゃになってるんですが貼ってみます。
sub read{
$file="file.txt";
@log_lines=(); #表示データリスト
%Clog=(); #各カテゴリの登録数
local(@temp_lines,%temp_ref,$line,@kt,$kt,@Slog,$st_no,$end_no,$i=0,$j=0,@data,$IN_count);
$end_no=$EST{hyouji}*$LC_page -1;
$st_no=$end_no - $EST{hyouji} +1;
open(IN,"$file");
while($line=<IN>){
chomp();
@Slog=split(/<>/,$line);## $Slog[13] = 0_0_0_0, $Slog[2] = URL
@IN_count=(split(/_/,$Slog[13]))[2];
push(@data,{url => $Slog[2], IN_count => $IN_count});
$Clog++;
}
close(IN);
@data = sort{$b -> {IN_count} <=> $a ->{IN_count}} @data;
#foreach $kt(@kt){
#if($LC_kt eq $kt){
#$temp_ref{$Slog[0]}=$i;
#push(@temp_lines,$line);
#$i++;
#}
#$Clog{$kt}++;
#}
close(IN);
950 :
nobodyさん :2006/05/31(水) 01:44:30 ID:8kzUocWY
>>947 さん、間違えてしまいました(>_<)すみません!
#foreach $line(sort{$b <=> $a}(keys %temp_ref)){
foreach(@data){
if($st_no<=$j && $j<=$end_no){
#push(@log_lines,$temp_lines[$temp_ref{$line}]);
push(@log_lines,$data[$j]});
}
$j++;
#}
#undef(@temp_lines); undef(%temp_ref);
}
お兄ちゃんみたいで頼りにしてます(ο^v^ο)
よろしくお願いしますo(*u_u)o
どっかにソースをまとめてうpしる
952 :
nobodyさん :2006/05/31(水) 02:05:27 ID:8kzUocWY
>>951 さん
まとめてうpしるって、まとめてアップしろってことですか?
良く分からなくてすみません!(>_<)
> 見ての通り sub print はテンプレート化したもので、sub read はcgiファイルなので別々のものをうまく組み合わせるのに困っています ここが理解できないのはうちだけ? テンプレート化って何 テンプレート化って。 どういう流れなのかいまいちわからないなあw
954 :
nobodyさん :2006/05/31(水) 02:20:28 ID:8kzUocWY
955 :
nobodyさん :2006/05/31(水) 02:22:01 ID:8kzUocWY
>>953 さん
sub print の方は、HTMLファイルになってるんです。
sub read の方は、CGIファイルです!
956 :
nobodyさん :2006/05/31(水) 02:28:01 ID:8kzUocWY
落としてみたけど、sub read なんてないなw sub open_in_new かw
>>955 は拡張子はHTMLファイルだけど、require できる普通のperl形式だったね。
かなりルーズに書いてるから、別ファイルだから受け渡しできない〜、とかそういうことはないと思うぞ。
件とは関係ないかもだけど 178行目
push(@log_lines,$data[$j]});
なってエラーでる。
push(@log_lines,$data[$j]);
こうじゃね。
しかもこれ直してもまだカッコ閉じられてない風なエラーでて しかもどこだかわからないw
動くファイルあげてw
って、すぐ近くにあったw 181行目 #} ↓ } もっとがんがれー ( ´Д`)
959 :
nobodyさん :2006/05/31(水) 03:02:45 ID:8kzUocWY
>>957-958 さん
落として見てくれたんですね(*^_^*)♪
ありがとうございます!
なんでそんなに早く分かるんですか!?
しかも、書いてもらってるのに
>件とは関係ないかもだけど 178行目
>push(@log_lines,$data[$j]});
>なってエラーでる。
>push(@log_lines,$data[$j]);
の2行目と4行目の区別がわかりません。....ρ(。 。、 ) 全く同じに見えます。。。
でもほんとにほんとに、なんで見ただけですぐ分かっちゃうんですか??!!
960 :
nobodyさん :2006/05/31(水) 03:07:08 ID:8kzUocWY
ああ〜〜っΩ(*'〇^*)Ω わかっちゃいましたぁ☆ } が付いてたのが余計だったんですね! ホントに何でそんなに早く分かるんですか???
961 :
nobodyさん :2006/05/31(水) 03:27:09 ID:8kzUocWY
>>957-958 さん♪
できましたぁ〜☆+゚ヽ(^◇^◎)/
って言ってもエラーが取れただけでランキングは、正しく表示されていませんでした^^;
ファイルの中身を読んで、昨日言われたとおりに書いたつもりなんですけど
CGIの方のファイルを見てると、該当するカテ用のログを読んで、
その中のデータを「IN」が多い順にソートして、それから
1ページ分に表示させる分だけ@log_lines に入れてますよね? 解釈も記述も合ってますよね?^^;
HTMLの方では、@log_lines から <> を除いて@Slog に入れてから&print をしてますよね?
そこでは、1ページ分だけのデータが入ってる@Slog のURL部分をいじっておしまいなのに
画面で確認すると、INの降順じゃないんです。。。
しかも、@Slogを直接表示させるとやっぱりINの降順にそーとされてないデータが出てくるんです。 ( ´Д`)なんでー
誉められてるんだかけなされてるんだかわからなくなってきたとです・・・。 orz
エラーはエラー文に行数でてればすぐわかるんだけどw
っていうかスクリプトはルートわからんかぎり見当つかないな。確かめられないのでなんとも。
@log_lines より先に、ソートする open_in_new (?) を呼べばいいとしか答えられないや。
>>948 で言ってた sub print が sub PRlog に当たってるんだろうか?
その中で local(@log_lines); こうやってるけど、これはいいんだっけ? 消したほうが・・・。
・・・
あー、もしかして、
@IN_count=(split(/_/,$Slog[13]))[2];
↓
$IN_count=(split(/_/,$Slog[13]))[2];
こうじゃね?w
ここはやけにハイテンションな顔文字が多いインターネッツですね
964 :
nobodyさん :2006/05/31(水) 03:51:05 ID:8kzUocWY
>>962 さん♪
誉めるっていうより、絶賛ですょ〜w(*・o・*)w オォォ
最近PC買ったんでついつい面白くていろんなことやり出したら止まらなくて^^;
けど掲示板って思ったより時間が掛かるから、すぐ聞けてわたしもすぐ答えられるようなものあったらいいのになぁ♪
>@log_lines より先に、ソートする open_in_new(?) を呼べばいいとしか答えられないや。
早速実践してみます!
>sub print が sub PRlog に当たってるんだろうか?
そうです^^
>local(@log_lines); こうやってるけど、これはいいんだっけ? 消したほうが・・・。
消しましたぁ☆
>@IN_count=(split(/_/,$Slog[13]))[2];
>↓
>$IN_count=(split(/_/,$Slog[13]))[2];
>こうじゃね?w
やってみましたが、結果は同じでした。。。(。_。*)
プログラムって難しいですねぇ^^;
先生に少し習ったくらいだから、わたし全然だめですよne...
965 :
nobodyさん :2006/05/31(水) 03:52:24 ID:8kzUocWY
>>963 さん
こんばんゎぁぁ 猫(゚ロ゚L)
遅くまで起きてるんですねぇ^^♪
福岡県在住のねーちゃんの懸賞サイト作りにタダ働きさせられてて(´・ω・) カワイソス
967 :
nobodyさん :2006/05/31(水) 03:58:55 ID:8kzUocWY
>>962 さん♪
今書いたスクリプト見て
>@log_lines より先に、ソートする open_in_new(?) を呼べばいいとしか答えられないや。
のところをやろうとしたら、
#&open_in_new;
foreach $line(@log_lines){
@Slog=split(/<>/,$line);
&PRlog;
}
って、なってました^^; なるわけ無いですよね。。。
そこで、# を外してみたら。。。!!!
。。。やっぱり正確に表示されませんでしたToT
それどころか、登録してある部分が消えてました(оД〇;)マヂ?!
open_in_new の方で、ちゃんとlocal を使ったりしてないのがまずかったんですかねぇ。。。??
この流れにワロタwww
>>966 orz
でも一度答えると責任ってのが発生してなかなか逃れられない罠。
>>964 いや、変わらないのはありえないなw
元が、157行目の、
@Slog=split(/<>/,$line);## $Slog[13] = 0_0_0_0, $Slog[2] = URL
@IN_count=(split(/_/,$Slog[13]))[2];
push(@data,{url => $Slog[2], IN_count => $IN_count});
だったので、 $IN_count は未定義で、IN_count => $IN_count には undef が設定されてたので、いままでソートがされていなかったはず。
それが、
$IN_count=(split(/_/,$Slog[13]))[2];
に直すことで $IN_count は定義されて、ソートができるようになったはず。
>>961 でソートされてない、っていってたけど、まだされてない?
もしソートできてないなら、 $IN_count の値が怪しいなw
本当に (split(/_/,$Slog[13]))[2]; で正しいのか確認してみて。
print $IN_count, $Slog[13], "\n"; とかやるなりして。
$array[2] は 「123-456-789」 でいえば 456 じゃなくて 789 だぞ?
ID:8kzUocWYは次スレ立てて来い
971 :
nobodyさん :2006/05/31(水) 04:10:25 ID:??? BE:185724937-#
もうだめだねこのスレ
いや、むしろこれは序章にしか過ぎないのだった・・・
>>962 =
>>969 の人が本気でかわいそうになって来たんだけど
ニヤニヤしながら生温かい目で見守ることにする。
>>971 なんだか急に「お客さん」向けのスレに変わったなぁとは思う。
>>969 改造は改造スレでどぞ。
と、自治厨ぶるつもりはなく、むしろ「親切な人も居るんだなぁ」とROMってたんけどな。
この調子で続けられると荒れそうな気がしないでもなく。
で、他のROMは落としたスクリプトの著作権のとこ見てニヤニヤしてるんだろ?な?w
975 :
nobodyさん :2006/05/31(水) 04:21:37 ID:8kzUocWY
>>969 さん♪
迷惑ですよね。。すみません。
遅くまで付き合っていただいてありがとうございました!
とても親切な方でしたので、つい調子に乗ってしまいました。
ごめんなさいm(__)m
ID:8kzUocWYには任せそうにもないので次スレ、逝ってきます。
うん、うちもこういうふいんき(何故かry)のは mixi とかでやれ、と思った。コミュが合えば答えるw あと、178行目 push(@log_lines,$data[$j]); ↓ push(@log_lines,$data[$j]->{url}); で、 print $_->{url}, "<hr>\n"; html 165行目 ↓ print $_, "<hr>\n"; にした方がいいような気がする。
978 :
976 :2006/05/31(水) 04:26:11 ID:???
> ERROR:新このホストでは、しばらくスレッドが立てられません。 生IPもISP串もこうなったので、ほかの方お願いします...orz
>>976 よろ〜
>>975 いや、迷惑っていうか、なんていうか。
まぁ、動かして確認できるようにファイル一式同梱でもしてくれたら1レスで済んだんだけどね。
プログラムは、、、ほんと勉強するとしないとで雲泥の差だねw
勉強しないでやるとkentくらいで終わる気がする。
まぁがんばってちょ。
>>978 最近建てられたことないけどやってみるーw
982 :
976 :2006/05/31(水) 04:39:05 ID:???
>>981 乙。IPレンジかぶってなくてよかった。
連投規制値知らないので(全部貼ってもだいじょぶ?)、無駄な投稿をここに投げてみる。
983 :
976 :2006/05/31(水) 04:45:01 ID:???
あり?連投で止まった?続き逝っときます。
規制うけました orz もしかして過去ログって省略して倉庫だけでよかった?(;´Д`) 誰か後2個だけよろしく orz
>>983 ごめん、串とかクッキーとかいじったけど何故かダメじゃった。ありー
987 :
976 :2006/05/31(水) 04:47:06 ID:???
989 :
nobodyさん :2006/05/31(水) 05:01:09 ID:??? BE:318384566-#
あーキモかった 二度と来んな
クラッカーだとしたらレベル低スw
POSTメソッドを送信するプログラムを書いているのですが Content-Type: application/x-www-form-urlencodedで送らなければいけない場合に文字化けが発生します 具体的には日本語と書いてエスケープして渡した値が??{??になったりするものです $str =~ s/([^\w ])/'%' . unpack('H2', $1)/eg; $str=~ tr/ /+/; ではだめなのでしょうか?
993 :
nobodyさん :2006/05/31(水) 06:08:16 ID:??? BE:106128162-#
情報を小出しに(ry
そこだけ出されてもわからないけど、$strに入ってる「日本語」の 文字コードはどれかに決め打ちされてるの? どっかでEncode.pmなり何なりを使わなきゃいけない仕組みになってない?
>>994 いま、POST先のページを見てきたら charset=euc-jpとなっていました。プログラム側の文字コードは決めてないです。
POST先のページがeuc-jpだとEncode.pmを使わなければいけないのでしょうか?
>>995 「日本語」が
・%C6%FC%CB%DC%B8%EC
・%93%FA%96%7B%8C%EA
・%E6%97%A5%E6%9C%AC%E8%AA%9E
どれになってるのかも、そこからどうしたいのかもわからんので何とも言えません。
>>996 %93%fa%96%7b%8c%eaとなっています。情報が小出しですいませんでした。どの情報を書けばいいのかすらわからなかったもので…
>>997 どこまで小出しが続くのかもわからんので、
それ(
>>996 の2つめ)はShift_JISですよー、とだけ言い残して落ちよう。
がんばれ。
999 :
nobodyさん :2006/05/31(水) 06:28:24 ID:??? BE:318384566-#
The Galaxy Express 999 GET !!!!
__END__
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。