Perl コーディング初心者質問コーナー Part31
いらっしゃーい、Perlのコーディングで困ってる人のスレです。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは
>>2-10
乙
牌
02 あけおむ
おめことよろ
perl愛してます。
flockに関しての質問なんですが、 flockでロック中にエラーで終了したら、永久ロックになりますか? もしそうなら、そのロックを外部から解除する方法はありますか?
>14 おいおいおい、それはいくらなんでも乱暴だろう >13 ローカル環境で試せよ
あけぼのー
>>15 UNIX系とWindows系ではflockの実装が違ってたりして混乱する可能性を指摘。
symlinkできないしね
変数 $mojireru の中の aaa という語句を bbb に置き換えるときは $mojiretu =~ s/aaa/bbb/g; って書きますよね。 この aaa という部分に、 perl の文法とぶつかりそうな記号が入っているときは どうしたらよいですか? 例えば文中の %5$%@@&*( という文字を bbb に置き換えたいんです。 短ければ手作業で \%5\$ ... のように 一個ずつ \ を入れて行けばいいんでしょうけど...
>>19 ちっとは調べろやヴォケ。大体変数名間違ってるから$mojireruの値は置換できんぞ
21 :
nobodyさん :04/01/03 17:58 ID:/wLbv58n
$x='a$y'; の様な変数内の変数を展開するにはどうすれば良いのでしょうか?
"
23 :
nobodyさん :04/01/03 19:02 ID:3/9s6tLE
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
32 :
nobodyさん :04/01/04 01:17 ID:w6ZpBJYI
あぼーん
あぼーん
あぼーん
37 :
nobodyさん :04/01/05 06:15 ID:mMUs2iDZ
ウザ
仏
39 :
nobodyさん :04/01/05 14:42 ID:VUii+BmO
require './xxx.pl'; これだとうまくいきますが、 require '../hoge/xxx.pl'; これだとエラーになってしまいます。 なぜでしょうか。
require './../hoge/xxx.pl';
41 :
nobodyさん :04/01/05 16:31 ID:CnMsYeM+
よくある「アクセス拒否」ルーチンあたりで使われる 「$_ =~ s/\*/\.\*/g;」 の意味がどうしてもわかりません。 「\*」を「\.\*」に変えてどうなるの?って思ってます。 これって不要じゃないかなと思いますが。 わかる人お願いします。
いわゆるワイルドカードの * を 正規表現の .* に 変換してるんだろうな
あぼーん
あぼーん
あぼーん
?
48 :
nobodyさん :04/01/05 18:18 ID:7ac0jPN7
あのおお、馬鹿にしたり、嫌がらせしたりするのはもうやめて パンチ5分の2を教えてくださいよ そんなに人を馬鹿にして楽しいですか?
あぼーん
あぼーん
あぼーん
日ごろはウザイAAだが、
>>50 で抜ける。
女を自分の好きな女に照らし合わせると何故か抜けてしまう
(;゚∀゚)=3ハァハァ
54 :
nobodyさん :04/01/05 20:18 ID:PXoQ1Cnf
キモーイガールズの数ページ後じゃなかったかな? 知ってる俺って・・・(鬱
56 :
nobodyさん :04/01/05 22:10 ID:u0kvWwGa
my $i = 0; $sample1 = $sample2 = $sample3 = ""; foreach (@hoge) { ${"sample".$i++} = $_; } 汚いソースを整理したく、mapとか使い出したんですが ↑のようなのはmapでかけますでしょうか? というかもうチョットきれいになりますでしょうか? あとmapについてなんですが↓のような使い方は、おかしいというか無駄でしょうか? $foo = join "",map "<option value=\"$_\"$bar{$_}>$hoge{$_}\n",keys (%hoge);
ちと素朴な、だけど、切実な疑問なんですが、 perlスクリプトのパーミッションの推奨あるいは必須として通常考えられるのは、 705、755、700(700はSunExecの場合)だけですよね? どうしても、どのパーミッションでもInternalServerErrorが出るスクリプト&サーバのペアがありまして。 (スクリプト自信は、hello worldを出すだけで、他サーバではちゃんと動きます)
>InternalServerErrorが出るスクリプト&サーバのペア このことだけで十分だろ。気づけYO!
>56 $sample1 $sample2 $sample3 ↓ $sample[0] $sample[1] $sample[2] とするだけで、綺麗になるし処理も楽になる。 @sample = @hoge;
60 :
57 :04/01/05 22:46 ID:???
>>58 でもなぜか、気づいたんですが、そのサーバで動くスクリプトがあるみたいなんです。。。
で、そのスクリプトをコピーして(もちろんパーミッションもそのまま)、実行すると、InternalServerErrorになります。
>>56 foreach でやると汚いから map 、という発想自体が勘違い。
$foo = ... のような使い方は、それだけ見れば別におかしくないが、
その前後で何をしていて、全体の流れとして適切な手順かどうかは
別問題。
あと qq/<option value="$_"$bar{$_}>$hoge{$_}\n/ として
エスケープまみれになるのを避けるといい。
62 :
sage :04/01/05 23:20 ID:Z2HbJ21+
>>57 Perlのパスをミスっても、useやrequireミスでも、Perlのバージョン違いでも、Taintモードでも落ちる。
エラーログか、せめてスクリプトくらいはないと判別できないよ。
あーさげみす。
>>62 「スクリプトコピーして」って書いてあるからパスミスはないだろ。
気づけYO!
あぼーん
あぼーん
あぼーん
あぼーん
69 :
56 :04/01/06 00:06 ID:???
すいません鯖落ちかと勘違いしててレス遅れました(あぼーんにより取得できなかった)
>>59 えっと普段なら普通に配列にするんですが、
htmlファイルの<!--hoge-->(name,urlなど複数ある)の部分を$hogeの内容に置換
というルーチンに通すんでスカラーにしました。
別にこの変数だけ配列にしてルーチン書き換えてもいいんですが、
コイツだけの為にそうすると面倒な上に処理も遅くなると思うんです。
>>61 >foreach でやると汚いから map 、という発想自体が勘違い。
ごもっともです
>$foo = ... のような使い方は、...
書き直しました。↓こんな感じです
%mobile = (
"i" => "i-mode", "EZ" => "EZweb",
"J" => "J-sky", "PC" => "PC"
);
foreach (split (/\,/,$data{mobile})) { $select{$_} =" selected"; }
$html = join "",map "<option value=\"$_\"$select{$_}>$mobile{$_}\n",keys (%mobile);
なんとか無い知恵絞って考えて見ます。レスthxでした。
70 :
nobodyさん :04/01/06 00:18 ID:Sai3E6zR
すいません鯖落ちかと勘違いしててレス遅れました(あぼーんにより取得できなかった)
>>59 えっと普段なら普通に配列にするんですが、
htmlファイルの<!--hoge-->(name,urlなど複数ある)の部分を$hogeの内容に置換
というルーチンに通すんでスカラーにしました。
>>61 >foreach でやると汚いから map 、という発想自体が勘違い。
ごもっともです
>$foo = ... のような使い方は、...
書き直しました。↓こんな感じです
%mobile = (
"i" => "i-mode", "EZ" => "EZweb",
"J" => "J-sky", "PC" => "PC"
);
for ( ; ; ) {
print "selected";
}
foreach (split (/\,/,$data{mobile})) { $select{$_} =" selected"; }
$html = join "",map "<option value=\"$_\"$select{$_}>$mobile{$_}\n",keys (%mobile);
なんとか無い知恵絞って考えてみました、詳しくはないんで、自己責任で行ってくださいね
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
77 :
nobodyさん :04/01/06 01:44 ID:Nia5VEWW
uza
79 :
57 :04/01/06 02:52 ID:???
いまだに理由わからずですが、Taintモードってはじめて知りました。 ありがとうございます。
81 :
nobodyさん :04/01/06 23:34 ID:bkmGUS1Q
@num = (11, 22); だったとして、それをresult.txtに 「11\t22」と書き込みたいのですが printf FILE "%d\t%d", "$num[0]","$num[1]"; だと何か問題はありますか? 他にスマートな方法があれば教えてください。
>>81 ・print で足る事に printf を使わない。
・何でもかんでもクォートしない (%d に渡すのにわざわざ文字列にしている)
print FILE $num[0], "\t", $num[1];
print FILE "$num[0]\t$num[1]";
print FILE join "\t", @num;
>>81 print FILE join "\t", @num;
タブをエスケープするなら
print FILE join '\t', @num;
じゃだめ?
print FILE join "\t", @num; これが俺ごのみかも。 複数のlist変数があって全部そうしたいなら、localして特殊変数いじるのもありかと。 ただ、特殊変数ってあんま覚えてないから他人の特殊変数いじった記述はなんじゃらほい。 ちょっと値のチェックをしながら保存したり、値を微妙に変えたりとか、リファレンス構造持ってるなら foreachでGOかな。俺の場合。
>>83 >print FILE join '\t', @num; やってみたの?
すみません。おわかりの方いたら教えていただきたいのですが、 やりたいこと:XML-XPathモジュールを使用してXMLファイルを調べ、指定のパスの位置の要素を表示したい。その際、存在しないパスだったら、エラー終了でなくて、「そのパスは間違っています」と表示させたい。 なのですが、 my $xp = XML::XPath->new(filename => 'a.xml'); my $nodeset = $xp->find("$my_path"); foreach my $node ($nodeset->get_nodelist){ print "node = $node\n"; } として、$my_pathをいろいろ指定すると、 $my_path = '/a/b/text()'; の場合はちゃんと値nodeAが表示されて、 $my_path = '/a/c/text()'; ではただエラー終了してしまいます。これをエラー終了でなくて、上記の目的のようにするにはどのように修正を加えると良いのでしょう。 ------------ a.xml <a> <b>nodeA</b> </a> -------------
>>86 書き直しました。↓こんな感じです
my $xp = XML::XPath->new(filename => 'a.xml');
my $nodeset = $xp->find("$my_path");
foreach my $node ($nodeset->get_nodelist){
print "node = $node\n";
}
for ( ; ; ) {
print "selected";
}
foreach (split (/\,/,$data{mobile})) { $select{$_} =" nodeA"; }
$html = join "",map "<option value=\"$_\"$select{$_}>$mobile{$_}\n",keys (%mobile);
なんとか無い知恵絞って考えてみました、詳しくはないんで、自己責任で行ってくださいね
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
すみません、先ほどのソースが下記間違いをしてました。 改めて載せます。お返事いただいたかた、ありがとうございました。どこの部分でどんな値が返ってエラーになってるのかもわからないんです。 すみません。おわかりの方いたら教えていただきたいのですが、 やりたいこと:XML-XPathモジュールを使用してXMLファイルを調べ、指定のパスの位置の要素を表示したい。その際、存在しないパスだったら、エラー終了でなくて、「そのパスは間違っています」と表示させたい。 なのですが、 my $xp = XML::XPath->new(filename => 'a.xml'); my $nodeset = $xp->find("$my_path"); foreach my $node ($nodeset->get_nodelist){ $item = XML::XPath::XMLParser::as_string($node); print "node = $item\n"; } として、$my_pathをいろいろ指定すると、 $my_path = '/a/b/text()'; の場合はちゃんと値nodeAが表示されて、 $my_path = '/a/c/text()'; ではただエラー終了してしまいます。これをエラー終了でなくて、上記の目的のようにするにはどのように修正を加えると良いのでしょう。 ------------ a.xml <a> <b>nodeA</b> </a> -------------
96 :
81 :04/01/07 00:53 ID:???
>>82-85 ご回答どうもありがとうございます。
print FILE "$num[0]\t$num[1]";
とさせていただきました。
printfは何かスマートじゃないと思ってたのでお蔭様ですっきりしました。
>>95 > どこの部分でどんな値が返ってエラーになってるのかもわからないんです。
分からないんなら調べればいいんじゃないの。
my $xp = XML::XPath->new(filename => 'a.xml'); # $xp の中身
my $nodeset = $xp->find("$my_path"); # $nodeset の中身
foreach my $node ($nodeset->get_nodelist) { # $node の中身
$item = XML::XPath::XMLParser::as_string($node);
print "node = $item\n";
}
>>96 漏れもそれがスマートつーか見た目一番分かりやすい。(初心者にとって)
>>81 C言語の癖が出てまつね(笑)
>>97 ご指摘ありがとうございました。
調べてみたら、どこまで値が存在してるかわかりました。
ここで分岐させると良さそうです。
あとはなんとかやってみます。
げとー (・∀・)
>>99 自力解決できる力はちゃんとあるんだから、これからは
安易に人に尋ねず足掻いてみような。
デバッグのコツなんかも自分で指動かさないと身につかんぞ。
>>99 これからは安易に人に尋ねんじゃねーよ!!このクズ!!
おまえはうざいんだよ、質問する前に鏡の前でちゃんと見ろ!!
生きる価値のないおまえは、二度と来ないでね
うざい!!くたばれ!!
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
塩酸なんかたいしたことないし
110 :
nobodyさん :04/01/07 17:36 ID:+LjjP/pC
掲示板を作っていますが、ファイルのロックは symlink方式とmkdir方式はどっちが良いですか?
111 :
nobodyさん :04/01/07 17:39 ID:+WIF+aLa
>>99 そんなの自分で決めろ!このクズ!!
おまえはうざいんだよ!!掲示板作るのは迷惑だから、絶対にやめてね
生きる価値のないおまえは、二度と来ないでね
うざい!!くたばれ!!
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
120 :
nobodyさん :04/01/07 18:18 ID:/9q+t4l2
硫酸って確か透明なビンに入れたらだめなんじゃなかったっけ?
121 :
nobodyさん :04/01/07 18:28 ID:oR3XpBNy
Perlでは、JavaScriptのswitchみたいに、1つの変数の値に応じて処理を振り分けるにはどのようにすればよいでしょうか?
123 :
nobodyさん :04/01/07 20:27 ID:MpZPxmlE
すいません、ファイルのアップロードができません。 こちらのサイトを参考にして、tp://www.ss.iij4u.or.jp/~somali/web/_perl_upload.html 以下のようなスクリプトを組んでみたのですが、ファイルがアップロードされません。 0byteのファイルが作成されます。 #!C:/perl/bin/perl use CGI; $query=new CGI; #ファイル名 $file=$query->param('file'); #アップロード open(OUT,">test.jpg")||die "Error"; binmode(OUT); while(read($file,$buffer,1024)){ print OUT $buffer; } close(OUT); close($file); #結果出力 print "Content-type:text/html\n\n"; print "OKです。このファイルをアップロード\n"; print "$file\n"; exit; このスクリプトに含まれていない部分を、 上記のサイトのスクリプトからコメントアウトしてみたのですが、 コメントアウトしても上記のサイトのスクリプトは正常に動作します。 つまり、99%同じスクリプトなのに、俺のスクリプトは正常に動作しないということです。 どうしてでしょう。
>>123 enctype="multipart/form-data" はOKかね?
125 :
123 :04/01/07 20:41 ID:???
>>124 できました!
まさかHTML側に不備があるとは思いませんでした!
ありがとうございます!!!
>>123 > tp://www.ss.iij4u.or.jp/~somali/web/_perl_upload.html
<form action="upload.cgi" method="post" enctype="multipart/form-data">
<input type="file" name="filename">
<input type="submit" value="送信">
</form>
このスクでやっているのなら、
#ファイル名
$file=$query->param('file'); ×
$file=$query->param('filename'); ○
127 :
nobodyさん :04/01/07 20:46 ID:PcR1A7Vx
質問させてください。 perl5.6でスクリプトを書いています。 多次元配列を関数に渡す場合、例えば $array[0][0] = "文字列"; $array[0][1] = "文字列"; $array[0][2] = "文字列"; $array[1][0] = "文字列"; . . . $array[30][2] = "文字列"; という多次元配列を関数にリファレンスで渡す場合は &mySub(\@array) #関数側 mySub{ my @ar = @{$_[0]}; #処理 } としてもうまくいきませんでした。(@arをループさせて調べたら、配列のlengthが30になっていない) もしかしたら関数側の処理が間違えているのかもしれないのですが、 関数へのわたしかたがこれであっているのかも疑問です。 間違えをご指摘願います。よろしくお願いします。
128 :
127 :04/01/07 20:51 ID:PcR1A7Vx
↑訂正 mySub{=× sub mySub{ です
129 :
nobodyさん :04/01/07 20:52 ID:63FZKlc/
質問です。。。 my $code = sub {print("CODE");}; この様なコードのリファレンスを、他の変数にコピーするにはどうすればいいのでしょうか つまり、内容は同じだけど、参照先を別々にしたいのです
130 :
nobodyさん :04/01/07 20:54 ID:QngMKJ6S
0..30のlengthは31かと・・・
131 :
nobodyさん :04/01/07 21:00 ID:63FZKlc/
>>127 mySubの中で、
@ar->[0]のように
アロウ演算子でアクセスしてますか?
132 :
127 :04/01/07 21:00 ID:PcR1A7Vx
>>130 すいません。間違えてますね。
lengthは5くらいになっていました。
関数への渡しかたはこれであっているのでしょうか?
>>127 どういう結果になってほしいか書いてくれ。
コードは書かれたようにしか動かん。
my($str, $i) = ('string', 0);
my @array = map [ $str++, $i++ ], 0..29; # 30個の無名配列から成る配列
sub mysub {
my @ar = @{$_[0]};
print $_->[1], ':[', $_->[0], "]\n" for @ar;
}
mysub(\@array);
134 :
131 :04/01/07 21:01 ID:???
$ar->[0] スマソ
135 :
127 :04/01/07 21:03 ID:PcR1A7Vx
>>131 $cnt1 = 0;
for my $key1 (@ar){
$cnt2 = 0;
for my $key2 (@{$key1}){
$cnt2++;
}
$cnt1++;
}
このように調べています。これもおかしいでしょうか?
質問ばかりで申し訳ないです。
>>127 知らんけどその関数名大丈夫なの?
受け渡しは問題ないように思えた予感。
137 :
131 :04/01/07 21:08 ID:???
>>129 > 内容は同じだけど、参照先を別々にしたいのです
意味不明。アドレスが一緒なら当然指し示す先も一緒。
同じ処理内容のコードリファレンスを複数作りたいなら
複数回生成するしかない。
sub new_code_ref {
my $str = shift;
return sub { print $str };
}
my $code1 = new_code_ref('CODE');
my $code2 = new_code_ref('code');
$code1->(); # CODE
$code2->(); # code
>>135 まぁおかしかないけど、
左辺値をスカラーコンテキストで求めれば数が出てくるのでは?
140 :
131 :04/01/07 21:11 ID:???
>>138 アドレスが一緒とは一言も言ってませんが。。。
ありがとうございます、コピーはちょっと無理でしたか
もうちょっと自分で考えてみます
141 :
127 :04/01/07 21:13 ID:PcR1A7Vx
>133 >136 >137 >139 ありがとうございました。関数への渡しかたがこれであっているのか、 という質問でした。書き方がおかしくて申し訳ございませんでした。 おかしくなったのは(実際の)関数側の処理ということですね。 ありがとうございました。
>>129 Storable::dcloneで出来るかも。出来ないかも。
>>129 関数を複製したいということ?
my $sub_string = qq{ sub{ print("CODE"); } };
my $f1 = eval $sub_string;
my $f2 = eval $sub_string;
$f1->();
$f2->();
print "\n";
print "$f1\n";
print "$f2\n";
144 :
nobodyさん :04/01/07 23:28 ID:ZDK8d65X
質問です。 ローカル鯖でCGIのパーミッションを変更するには どうしたらいいのでしょうか? OSはWindowsXP 、サーバーはApache1.3.29、PerlはPerl 5です。
>>144 chmodで足りないならWin32::FileSecurity
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
154 :
144 :04/01/08 01:18 ID:aowYINr6
>>145 すいません、
「chmod」が分からなかったので検索したのですが、
LINUX関連のサイトばかりかかります。
Winでの鯖のパーミッション設定に関するサイトが全くかからないのですが。。
だってないもん>パーミッション
NTFS ならユーザ毎にアクセス権を設定できるけどな。
157 :
nobodyさん :04/01/08 02:45 ID:8eGssvcS
XREAにあるCGIのスクリプトから、
PlalaのCGIサーバーに置いてあるファイルを読もうとしています。
$datapath = '
http://cgi**.plala.or.jp/垢/data.dat '; # 伏せてます
open(IN, "<$datapath") || print "error";
と組んでいますが、どうしても偽が返り「error」が表示されます。
どのようにすればデータを読み込むことができるのでしょうか?
LWPの質問は多いなあ。
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
そろそろアク禁
169 :
144 :04/01/08 11:38 ID:9aALHIuH
>>155 ない?
設定できないってことですか?
まいったな…
そのCGIに外部からアクセスしてもらったら
"取り消されたアクション"
とか出たらしいです。
どうしたらいいのでしょうか?
ヤフーファイナンスから株価だけを切り抜きたくて下のように書いたんですが何も表示されません。
use LWP::Simple 'get';
my $URL = '
http://quote.yahoo.co.jp/q?s=4689 ';
my $html= get ($URL) ;
my $html=~ /<b>([0-9\,]+)<\/b>/;
print "Content-type: text/html\n\n";
print $1;
どなたか分かる方いらっしゃいますか?
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
質問させてください。 カウンタログから数値を読み取って、その数字に対応させたgifを表示させる普通のCGIの画像カウンタを使っているのですが、 それをテキストカウンタに置き換えたいと思います。 ページ自体はHTML、かつSSI不可なので、カウンタはgifで表示するのが一般的だと思うのです。 gifcatで画像連結して、 print "Content-type: image/gif\n\n"; print &gifcat'gifcat(@GIF); で出力しています。 HTML側では<img src>でcgiの画像を呼び出しているのですが、 カウンタログを画像に変換せずにテキストのままで、 HTMLに<img src>などを使って出力することは可能でしょうか?
181 :
nobodyさん :04/01/08 17:55 ID:J/IzCu60
open(FILE,"+> hoge.txt"); @hoge = <FILE>; print FILE "@hoge"; close(FILE); こうしたら、ファイルの中身が消えてしまいます。 なぜでしょうか。 (省いてありますが、ファイルの中身に手を加えて それを同じファイルに書き込むという事です。) 読み込みopenと書き込みopenを分けるとその間に隙ができてしまうので 一度に行いたいのです。
>>172 Finance::YahooJPN::* とか。試してないから動くかどうか分からんが。
あと正規表現の使い方が間違ってるぞ。
それだと「$html にはマッチしたかどうか」しか入らん。
もういっぺんマヌアル読め(・∀・)。
>180 imgタグでは不可能 どうしてもやりたければiframeとか使いなさい >181 +<
184 :
172 :04/01/08 18:22 ID:???
>>182 ありがとうございます。
perlの参考書に
パターンをカッコで囲うと$1に代入されると書いてあったんですが、違うんですか?
すみませんが、そのあたり教えていただけると助かります。
>>184 my $html= get ($URL) ;
$html=~ /<b>([0-9\,]+)<\/b>/;
正規表現のせいじゃなく同じ変数に対してmyが余計
あぼーん
187 :
172 :04/01/08 19:00 ID:???
>>185 ああ、お恥ずかしい…むちゃくちゃ初歩的な間違いでした。
コピペばかり使ってるからこんなことに気づかないのですね。
と、言い訳してみる。
おかげで、何事も無く動きました。
ありがとうございました。
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
うわ、昼間に書き込みがあるよ。ひきこもりかよ(w
質問よろしいでしょうか [関数名] [スカラー変数] {コード} のような関数を作るにはどうすればいいのでしょうか? printx 'あああ' { printf("どうも"); } のような形です
>>195 何をする為にそういう事をする必要があるのか説明してくれたら
もっとマシな解決方法を提示できるかも知れない。
200げとー
201 :
144 :04/01/08 23:47 ID:6SjzJ2Zx
>>170 解決しました!
ありがとうございます。
それから…
open(FH,"<data.txt");
@data=<FH>;
というスクリプトを組んだときに、
$data[0]、$data[1]、$data[2]、......には、
改行ごとに区切られた文字列が入るんですよね?
改行以外で区切られて入ることってあるのでしょうか?
203 :
144 :04/01/09 00:19 ID:KE8pFtNS
>>202 ありがとうございます!
デフォルトだと改行なんですよね。
open(FH,"<data.txt");
@data=<FH>;
としたときに、
デフォルトで、data.txtに改行が含まれていないのに、
@dataには区切られたデータが入ります。
ものすごく都合のいい形で区切られて入るのですが、
あまりにも完璧に区切られて入るので不可解で気持ち悪いんです。
perlが俺の意図を読み取ってるようで…
改行もないのに俺の区切って欲しい場所で区切ってくれるんです。
気持ち悪いですよね。
すっごく嫌です。
完璧に区切ってくれるのでそれでもいいかと思ったのですが…
そう組んだ覚えのない動作をされるということで
やはり危険かと思ったんです。
data.txtに規則性がないことはないのですが、
スクリプトを組まずに読み取れるような規則性ではないです。
何か霊的なものでしょうか?
>>203 unixとwinの改行コードの違いじゃ内科医?
205 :
204 :04/01/09 00:37 ID:???
つーかねそんなことはどうでもいいんよ。 俺が言いたいのは、あぼーんはレス再取得しなきゃいけないからやめてくれよ。 やるなら基地外を規制かけてくれ
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
> めがねのキモオタが書き続けて迷惑 > 自作自演でスレ上げて迷惑 自分で自分(ry
215 :
nobodyさん :04/01/09 02:00 ID:YnO0ddlG
パンチ5分の2のスクリプトをまともに教えてくれなかった事がそんなに悔しかったか?
216 :
nobodyさん :04/01/09 02:22 ID:kbq9DYze
Perlの正規表現で質問なのですが、
<a href="
http:// ○○.com/dir/dir/">
http:// ○○.com/dir/dir/</a>
から、
http:// ○○.com/dir/dir/ だけを取り出すには、どのようにしたらいいのでしょう?
$URL =~ s/("*")//g;
$URL =~ s/(["]*["])//g;
色々やってみましたがなかなか上手く行きません。
どなたか教えて頂ければ幸いです。
あぼーん
あぼーん
あぼーん
>>215 まともな質問じゃなかったから誰も答えようがなかっただけだよ。
いじわるして教えなかったわけじゃない。
連続で半角スペースを出すにはどうすればよいのでしょうか。 (↓ここは普通はいじらない方がよいですか?) =~ tr/+/ /;
アク禁頼むかねぇ、面倒くせーなぁ。
あぼーん
あぼーん
あぼーん
あぼーん
228 :
nobodyさん :04/01/09 08:57 ID:z1iUrrA5
天才占い師の
>>250 によると
コピペ荒らしの正体は
229 :
216 :04/01/09 11:43 ID:???
>>217 ありがとうございます。出来ました。
$URL =~ s/href="([^"]+)"//;
$URL = $1;
結局この2行になりましたが、大変参考になりました。
# bbsのログ(HTML)を(log形式に)一括変換するスクリプトです。
シェルスクリプトでwget・変換、CRONで回すと掲示板内検索
するの楽で良いです。
>>222 > 連続で半角スペースを出すにはどうすればよいのでしょうか。
=~ s/ / /g;
. ↑半角スペース二つ
230 :
216 :04/01/09 11:46 ID:kbq9DYze
あれ?もしかして2chって&を変換しないのか? =~ s/ / &nbsp;/g; . ↑半角スペース二つ &は半角で。
231 :
144 :04/01/09 12:40 ID:0iEHnHUN
>>204 そのtxtファイルはwinで動作しているソフトから生成されたもので、
鯖もwinです(XP)。
232 :
181 :04/01/09 12:56 ID:IDjsxzm+
>>183 +> だと、内容が全部消えてしまいます(たぶん@file = <FILE>;の動作効いていない為)
+< だと、前の内容が残っていて、その下の行に新しいデータが書き込まれてしまいます
> +< だと、前の内容が残っていて、その下の行に新しいデータが書き込まれてしまいます 俺はこれ、動作怪しい時あるから信用してない。 Cで言う所のファイル読み込みポイント(?)の関係かも知れないけど、 メンドくさいから一度全部ロードしてそこに追記、そのまま書き出してる。 でかいファイルを扱う時は、Cでゴリゴリ書いちゃうけど。
234 :
181 :04/01/09 13:55 ID:IDjsxzm+
# ファイル読み込み open (FILE, "$file"); &lock; # ロックする @file = <FILE>; close (FILE); # ※ここに隙ができるのを防ぎたいのですが… # データを更新して、上書き open (FILE, ">$file"); &lock; # ロックする # ここで@fileになんか手を加える print FILE "@file"; # 適当に書き込む close(FILE);
235 :
181 :04/01/09 13:57 ID:IDjsxzm+
ちなみに、ロック形式が、flockの場合です
open (FILE, "+<$file"); flock (FILE,2); seek (FILE, 0, 0); @file = <FILE>; print FILE "@file"; truncate (FILE, tell); close (FILE);
237 :
nobodyさん :04/01/09 14:08 ID:MPFjJl+g
<form name=form1 method=POST> <INPUT TYPE=SUBMIT NAME=Submit VALUE=その1> <INPUT TYPE=HIDDEN NAME=name VALUE=$name> </form> <form name=form2 method=POST> <INPUT TYPE=SUBMIT NAME=Submit VALUE=その2> <INPUT TYPE=HIDDEN NAME=name VALUE=$name> </form> ↑のようにするとボタンが縦に並んでしまいます。 form2つのボタンを横に二つ並べるにはどうしたらよいですか?
>>237 それはHTMLでしょ。Web制作板へどうぞ。
239 :
144 :04/01/09 14:13 ID:???
>>237 TABLEタグとか使ったらどうですか?
240 :
181 :04/01/09 15:01 ID:IDjsxzm+
>>236 やっぱり「+<」だと、前のデータの下の行に新しいデータが書き込まれてしまいます。
>>240 こういう手もあるけど
open (FILE, "+>$file");
flock (FILE,2);
truncate (FILE, 0);
seek (FILE, 0, 0);
@file = <FILE>;
print FILE "@file";
close (FILE);
さっきのもそうだけどseekで先頭に移動できたかどうか
$result = seek (FILE, 0, 0); とかやって$resultの値を見てみ
242 :
181 :04/01/09 15:51 ID:IDjsxzm+
何度もすんません、 1が返ってきたんで、成功はしてるようです。 一応、確認しておきたいのですが、やりたい事は、 テキストファイルの中身が AAA だったとして、 それを、AをBに置き換える処理だとします。 そうするとテキストファイルの中身は BBB になってくれればよいのですが、 現状だと、 AAA BBB のようになってしまうという事です。 使ってるサーバーのせいで+を付けたファイルのオープンはできないのかもしれないですね。
わかると思うが
>>236 も
>>240 .も読み込んだデータを再び上書きだからな
データに手を加えて書き換えはprint FILE "@file";あたりでやってくれよ
>>242 書き込むデータの処理が間違っているんじゃないか?
本当にBBBになった上で書き込んでるか?
245 :
181 :04/01/09 16:31 ID:IDjsxzm+
何度もすんません、はじめに調べれば良かったんですが、 「@file = <FILE>;」 これをやったあとに、htmlに@fileを表示してみたら何も出ませんでした。 そりゃ、いくら@fileを展開して変更しても無理だった訳です。 という事はやっぱり「読み込み&上書き」openができないって事でしょうか。
246 :
181 :04/01/09 16:47 ID:???
前にも書きましたが、 +> だと、@fileにはファイルの中身が入っていません。 +< だと、@fileにはファイルの中身が入っています なので、可能性があるとしたら、「+<」を使うしかないと思うんですが、 openしてファイルの中身を取得したあとにファイルの中身消すみたいな関数ないですかね。 まぁそんなのがあれば+<を使う必要もない訳で。
truncate それからできないできないって言ってるだけじゃなくて環境とか書けや
248 :
181 :04/01/09 17:22 ID:IDjsxzm+
lolipopです。
open (FILE, "+>$file"); flock (FILE,2); @file = <FILE>; truncate (FILE, 0); seek (FILE, 0, 0); print FILE "@file"; close (FILE); こうだな
250 :
181 :04/01/09 17:39 ID:IDjsxzm+
あれ!? あれ!? open (FILE, "+<$file"); #「+<」に変更 flock (FILE,2); @file = <FILE>; truncate (FILE, 0); seek (FILE, 0, 0); print FILE "@file"; close (FILE); こうしたら出来た!!! なんで!? なんで!? やったー!
251 :
181 :04/01/09 17:49 ID:IDjsxzm+
パールがうまく組めて嬉しい私の喜びをダンスで表現してよいかしら? ♪ワン、ツー、スリー、フォー! ♪エラー探してデバッグー 右へ左へcopy and paste ♪パール組めて良かった〜、うれしはずかしOh my heart ♪パール、組めてうれしい僕の、体の一部が ホット!! ホット!! ホット!! ホット!! ホット!! ホット!! ホット!! ホット!! ホット!! ホット!! ホット!! ホット!! ホット!! ホット!! ホット!! ホット!! ホット!! ホット!! ホット!! ホット!! ホット!! ホット!! ホット!! ホット!!
252 :
222 :04/01/09 17:56 ID:???
253 :
nobodyさん :04/01/09 20:14 ID:0Ib8//vj
フォームから入力された内容を現在Jcode.pmで &Jcode::convert(\$text,'sjis'); こんな形でsjisにして保存してるんですが、 半角カナがたまに文字化けします。 ネット上探しまわりましたが、この問題はよくあるみたいなんですが、 半角カナが入った文字列の文字コード判定は難しいそうで、 みんな結局半角禁止みたいな対処のようでして、 具体的な解決策が見当たりませんでした。 当方、携帯サイトなので、表示スペースの有効利用といった意味でも、 できるだけ半角カナで表示させたいと考えており、なんとか解決したいです。 また、ゆくゆくはz2hも使って全部半角にすることも考えておりますが、 兎に角文字化けを直さない限りはどうしようもないので詳しい方ご教授願えませんでしょうか。
フォームからsjisを受け取ればいい。そのまま保存して出力してくれ。
255 :
253 :04/01/09 20:46 ID:???
Jcode::convert() するなってことでは。 でもこれだと、誰かが sjis 以外で書いた時に文字化けして見えちゃう。 携帯って EUC-JP はダメなのかな?
257 :
253 :04/01/09 23:40 ID:???
いやおそらく255で問題ないかと思います(完璧では無いようですが) ページをmetaでsjisと指定することにより、 そのページのフォームから入力された文字コードもsjisとなるようです。 (↑これ知らなかったデス。2chもおそらくこうしてると思われます) なのでこれに全角→半角を組み合わせる方向で改造中です。
258 :
253 :04/01/09 23:44 ID:???
携帯の文字コードも調べてみたところやはりsjisのようで おそらくEUC-JPだと化けるんではないでしょうか。 とりあえず皆さん有難うございました。 (つーか全然駄目。そんなんじゃ解決してないよ?とかありましたらお願いします。)
cp932 と sjis でひかっかったとか?
>>251 喜びをダンスで表現するなら、せめてこれぐらいは使って欲しかった。
おにぎりワッショイ!!
\\ おにぎりワッショイ!! //
+ + \\ おにぎりワッショイ!!/+
+
. + /■\ /■\ /■\ +
( ´∀`∩(´∀`∩) ( ´ー`)
+ (( (つ ノ(つ 丿 (つ つ )) +
ヽ ( ノ ( ヽノ ) ) )
(_)し' し(_) (_)_)
ソフトウェアは命じゃないので死ねないと思いますがね
確かに、ソフトウェア=命ではないだろうな。
というか、願望だな。IEがもし生きてたら殺してやりたいくらい憎いと言うような。
「相対性理論は死んだ」とか普通に言うやん。ただの比喩だよ。
>>262 お前はkillというコマンド名にも文句を言いそうだな。
この世には擬人法すら知らないやつもいるということで。
必死すぎるぞ。「IE死ねよ」の発言者・・・
でも「IE氏ねよ」と言った意味を理解しているんだろ?>喪前等 揚げ足取りなんて小さいぞ、なんと小さい人だ
271 :
nobodyさん :04/01/11 10:19 ID:lgZdz8Cf
---------ここから---------- 1<>a<>1073782944<> ---------ここまで---------- 今まで↑のようなテキストファイルを配列に格納するときに @list = split (/<>/,scalar(<FH>)); としてたんですが、最後に改行があるときに \nだけが入った要素が最後に追加されていたことに気づきまして、 $temp = <FH>; chomp $temp; @list = split (/<>/,$temp); としたんですが、 これだとおそらく無駄にメモリ食ってるんじゃないかと思いまして (結構大きいデータなもんで・・・。) 変数$temp介さずに格納できないものでしょうか?
>>271 Perl が面倒見てくれるから、メモリがどうのこうのなんて、あまり気にしなくていい。
273 :
271 :04/01/11 10:37 ID:???
ごめんなさい。この場合メモリとか関係ないような気もしてきました。 しかし、「無駄な処理さしてる、コードが汚い」という観点から、 もうちょっとスマートに書けないものか、という質問に変えさせてください。
一行にダラダラ書くのと、一時変数を上手く使って書くのであれば 後者の方がコードが綺麗だよ。無駄な処理でもない。 どうも君のコードに対する美意識は理解しかねる。
275 :
nobodyさん :04/01/11 10:57 ID:KP2Tb5at
chop $list[$#list]
chomp (@list = map split /<>/,<FH>);
変数にデータを入れるのって全然無駄じゃないし負荷もかからないんですね。 誤解してました。有難うございました。
>277 省略した場合、$_に代入されてるだけだからな。
数KB程度なら別にいいけど、数MBを超えるようなデータは気にしたほうがいいよ。 正規表現で置き換えるときとか、無制限アップローダを作るときとかね。
あぼーん
usr.datに 一行目user:pass 二行目aaa:passwd と書いて cgiから二行目のIDとパスを取得したいんですがどうしたらいいでしょうか? 教えてくださいお願いします。
open DAT, "<", "usr.dat" or die $!; my($id, $passwd) = split ":", (<DAT>)[1]; close DAT;
open IN, 'usr.dat'; <IN>; chomp($line=<IN>); my($id, $pwd)= split(/:/, $line, 2);
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
package Hoge; sub new { my $class = shift; my $this = { 'age' => undef }; bless $this, $class; return $this; } sub setAge { my $this = shift; $this->{'age'} = shift; } sub getAge { my $this = shift; return $this->{'age'}; } package main; my @array = ('1','2','3'); my $obj = Hoge->new(); $obj->setAge(@array); my @obj_age = $obj->getAge(); foreach(@obj_age) { print "$_\n"; }
>>291 のソースで最後のプリントで1,2,3とでればいいんですがでません。
つまり何がしたいかというとインスタンス変数に配列を持たせたいんですが、どーやればいいのでしょう。
Perl OOP初心者です。よろしくです。
>>293 ありがとう!!できた!
以下のメソッドへと修正した。
sub setAge
{
my $this = shift;
@{$this->{'age'}} = @_;
}
sub getAge
{
my $this = shift;
return @{$this->{'age'}};
}
ちょっと質問です あるhogeというディレクトリ内にあるディレクトリ全てに対して、ある操作をしたいんですが、 hogeをopendirして、どうやって中の「ディレクトリ」だけを探すかというところで悩んでいます。 ディレクトリ以外には拡張子の為に「.」が含まれているので、正規表現で「.が含まれていなければ・・・」 とすれば実現できそうなんですが、こういう場合、皆さんはどのような方法をとられるのでしょうか?
296 :
nobodyさん :04/01/12 21:06 ID:Xwc9MLk4
ファイルチェック演算子をつかう
297 :
nobodyさん :04/01/12 21:10 ID:aTrw1Und
grep(!/^\.\.?$/ and -d "hoge$_", readdir(HOGE));
有難うございます。参考になりました。
>-d ディレクトリであれば こんなのがあったんですか・・ 恥ずかしながら知らなかったです。有難うございました。
あぼーん
あぼーん
Perl一つ使えない厨房が荒らしてるな どうせPHPも使えないへたれなんだろ
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
>>305 は何のAAかわからないのだが・・・
オシエテオクレ
Perl一つ使えない厨房が荒らしてるな どうせVBも使えないへたれなんだろ
質問です。 $hoge = "2004/1/13 8:00:00"; $hogeにこのような時間のデータが入ってるときに、 この変数が、時間として正しいかを判定したいのですが、 if ($hoge !~ /^(\d{4})\/(\d{1,2})\/(\d{1,2}) (\d{1,2}):/ || ごにょごにょ) { print "おかしいよ"; } このようにしてごにょごにょの部分で後方参照し判定しようかと思ってるんですが、 こんなんでいいのかなぁ?というか、もっと簡単な関数とか用意されてるのかな? と思いまして質問させていただきました。 すいませんがよろしくお願いします。
ごめんなさい。今のところ分と秒の部分は別に判定してもしなくてもyかったんで、 省いてました。
三度すいません。 この後use Time::Localでtimelocalするんですが、 このときに変な時間渡すとエラー吐くんで、 それをevalで実行させて判定に利用しようと思います。 お騒がせしました。
>>311 use strict;
use Date::Calc qw(check_date check_time);
my $hoge = "2004/1/13 8:00:00";
my ( $year,$month,$day,$hour,$min,$sec) = split(/\D/, $hoge );
if( check_date($year,$month,$day) and check_time($hour,$min,$sec) )
{ print "valid\n"; }
else{ print "invalid!\n"; }
アルファベットを入力するとエラーが出るというのは、どのように記述すればよいのでしょうか。 特に以下のような構文を使う時に、何と書けばよいのかよくわかりません。 if($text eq ""){ return (101,"");} どうかよろしくお願いします。
>>315 きみはなにをいってるのかねなにがしたいのかいみがわかりませんわおじちゃんにわ
sub fanc {
$text = shift;
return (101,"???なにこれ?") if $test =~ /\w/;
}
my @ary = ("$a is $b.", "$a was $b.", "$a are $b."); my ($a, $b) = hoge("boy, girl"); my $out = $ary[1]; print "$out\n"; などとしたときに、表示されるのが"彼 is 彼女."のような形にしたいんですが、 (彼とかの部分はhogeの仕様によりますが) 動かしてみると、"is."のように、$outの中の$aなどの変数部分が無視されています これはどこに問題があるのでしょうか…。
>>317 sukuriputomitene-si,mirukimonaikedo,1024dewattaraiidakejane-nokayo.
dokowoijirebaiinokamowakaranaitoiunonara,siran.bennkyousiro.
>>315-318 お前ら(同じ香具師一人か?)いいかげんにしろ、ちっとは調べろや。勉強城や。
>>318 hoge("boy, girl");ってなんなんだよ関数なんか?
つーか大体一行目と二行目逆にせんかぎりちゃんと動くわけねーだろーが
my ($a, $b) = ("boy", "girl");
my @ary = ("$a is $b.", "$a was $b.", "$a are $b.");
my $out = $ary[1];
print "$out\n";
#意味不明ってかあほすぎるコードだよ?
322 :
nobodyさん :04/01/13 17:54 ID:hDqA/G+I
ファイルハンドラを変数で持つことは可能でしょうか? my $p; open($p, "test"); こんな感じで。 ----------------------------------------------- my $p="a"; としてからopenすると何故か動くのですが、今度は、use strict の場合に、 #!/usr/bin/perl -w use strict; my $p="a"; open($p, "test"); こうすると、以下のように怒られます(実行ファイルは./aです)。 Can't use string ("a") as a symbol ref while "strict refs" in use at ./a line 4. 何故なんでしょうか? (そもそもファイルハンドラの定義がよく分からないのですが。ポインタ?)
323 :
315 :04/01/13 17:54 ID:???
>>316 できました!ありがとうございます!
ところで、例文を用いて
if(xxxxxx){
$text = shift;
return (101,"abc") if $test =~ /\w[a-z]/;
}
というふうに同一構文内でifを2回記述するのは大丈夫なのでしょうか。
ifを2回使うわなくてもよい書き方がありましたらご教授願います。
あと、\w[a-z]の中で、ある文字だけを例外的にエラー回避させたい時は、
どのように記述すればよいのでしょうか。(正規表現では無いようですが…)
どうかよろしくお願いします。
>>320 別の人だと思います。スクリプトを色々いじっていたのですが、
色々やってみてもエラーばかりだったのでこちらで聞いてみました。
Perl4日目の初心者ですが、これからたくさん頑張って勉強していきたいと思います。
324 :
316 :04/01/13 17:59 ID:???
>>323 いいかい?色々やってみたのですがの前に
調 べ ろ
>>5 のリンク先とか行って、「perlとは」みたいな所から勉強しろ
my ($a, $b) はダメ
326 :
323 :04/01/13 18:51 ID:???
>>324 そういう言い方ってないんじゃないの?
何十時間もいじって調べていじって調べていじって調べていじって調べて、
それでもわからないからやっと聞いてみたわけ。色々やるには調べてから色々やってるわけ。
初心者の質問コーナー?全然初心者向きじゃないじゃんw
>>323 if(xxxxxx){
$text = shift;
return (101,"abc") if $test =~ /\w[a-z]/;
}
↑めちゃくちゃ
328 :
316 :04/01/13 19:30 ID:???
>>326 そういう言い方ってないんじゃないの?
君の記したコードと
>色々やってみてもエラーばかりだったのでこちらで聞いてみました。
↑これをみたら誰でもこう思うよ。
「知識ないやつが色々試して何かできるわけがないだろ」
道具を何も使わずに色々ためしても家を建てれるかい?てか何を"色々やってみる"の?
はやく
>>5 のリンク先で"道具"とってこいよ
ちなみに俺は傍観者だが、328の肩を持つぞ。
>>326 つまりお前は初心者レベルにも達していないわけだ
>>322 >If FILEHANDLE is an undefined scalar variable (or array or hash
>element) the variable is assigned a reference to a new anonymous
>filehandle, otherwise if FILEHANDLE is an expression, its value
>is used as the name of the real filehandle wanted. (This is
>considered a symbolic reference, so "use strict 'refs'" should
>*not* be in effect.)
内容がundefでないスカラ変数を使うとき、その内容をファイルハンドル名として
(シンボリックリファレンスで)扱う…みたい。
(ファイルハンドルをシンボリックリファレンスって、良く分からんw)
ファイルハンドルはファイルハンドルで、操作が必要な時には型グロブで扱う。
スカラ変数に入れるときは、型グロブのリファレンスを入れる。
とはいえ、スカラ変数でファイルハンドルを扱う場合は
FileHandleやIO::Fileモジュールを使うのが一般的かと。
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq5.html#How_can_I_use_a_filehandle_indir
332 :
331 :04/01/13 20:19 ID:???
引用元はperldoc -f openでした。
そいつはマルチだからもういいよ
>>330 痛いな
>初心者レベル
お前の作った新語?
何だよ、初心者レベルって。
始めたばかりの人=初心者だろ
初心者より下なんかあるんか?
無論、DQNとかくだらない煽りはいらない。
335 :
nobodyさん :04/01/13 20:35 ID:hDqA/G+I
>>331 有り難うございます。やっと分かりました。
スカラ変数の場合、シンボリックリファレンスになるんですね。
ってことはuse strictやってるのにシンボリックが使えない!
なんて言うのは矛盾してますね。
解決しました。有り難うございました。
336 :
331 :04/01/13 20:48 ID:???
入門者と初心者を別というのか。ひねくれたヤツだな・・・ リアルでも揚げ足ばっかとってるんだろうなぁ
>>337 316くん、あんたが何を言おうと恥を上塗りしてるだけだ
こんなとこで油売ってないで検索、試行を繰り返しなさい。
俺316ってことになってんのか?
>>330 のカキコでちょっとムカッとキタから通りすがりに書いてみただけなんだがな
決め付けは良くないよ
>>337 変?
うーん、そういう感覚だったんだけど。
>340 自作自演と言われそうだが、俺もそういう感覚。
342 :
nobodyさん :04/01/13 21:28 ID:hDqA/G+I
無駄な言い合いばっかしてるね。 なんの意味があるんだ? 名前も顔も分からないバーチャルの世界で。 文句言われても無視しとけよ。バーチャルなんだから。 相手を言い負かしたり、言い訳を述べてどうなるんだ? プライドが回復するのか? ほっとけ。
>バーチャル 激しくワラタ
ま、まぁやめようや。 ホントはおれ316の言い方も悪かったんだろうと、少し反省してたよ。 気を取り直して、雰囲気も取り戻していきませう・・。
入門者のスレはどこですか?
入門者は入門者用の本でも勝って読め。 さすがにHellow World!から教えてくれるスレはないと思われ。
そりゃそのスペルじゃ教えてもごもごもごもご・・・・・・ ともあれ、ちょっとぐらい自分で調べてperlを理解してもらわないと話にならないですからね。 そんな人に教えると、すぐ「じゃあこういうときは・・」とかいって質問マシンガン発射するからね 何でもかんでも、ちょっと調べれば解ることでもすぐ人に頼る癖もつくしね
349 :
323 :04/01/14 00:01 ID:???
留守にしている間に結構レスが。道具もないし知識もないし初心者レベルにも達していないわけだけど、
すでに数日前からサーバーで色々なスクリプトを使ってサイトを動かしてしまっているから、
色々やるのは入門者としてはアブナイかもねw でもおかげさまでバグはほとんどなくなったからめでたし。
例にあげたソースの中身はわけあってわざと判別しにくいものにしていたから
めちゃくちゃなのは気にする必要無し。
>>5 やその他ここのリンクもクリックする必要無し。
>>339 私はちょっとどころかかなりムカついたから言わせてもらったんだけど。
でもまあ確かに初心者には厳しくしないとね。いつも専門板の初心者スレで懇切丁寧に回答してるけど、
今日からは入門者や初心者には鬼のように厳しくするようにするわ。入門者や初心者ってイジメがいあると思う。
>>348 >>質問マシンガン発射
確かにそうだな
これをされるとものすごくウザイ
ほんのわずかな違いでもどんどん聞いてくる。
それにしてもあぼ〜んの多いスレだ。
351 :
323 :04/01/14 00:02 ID:???
参考までに「初心者」の意味を調べてみた。
三省堂「大辞林 第二版」より
しょしん-しゃ 2 【初心者】習いはじめの人。未熟な者。
岩波書店「広辞苑 第五版」より
しょしん-しゃ 【初心者】初めて習う人。習いはじめの人。習ったばかりの人。
#「入門者」という言葉は広辞苑にも大辞林にもその他いくつかの辞書にも記載していない。
私は習いはじめの人で未熟な者で初めて習う人で習ったばかりの人だから「初心者」と名乗ったんだけど。
入門者と初心者は似たような意味でも、ここの人達は入門者を区別して嫌っている様子。
次スレからは <<入門者絶対お断り!!>> というような文句を
>>1 のテンプレでもにつけておけばよいのでは。
>>351 もういいからどっかいけよw満足したんだろ?そんな危なっかしいスクリプトで。
じゃあいいじゃんバイバイ。
そんなことよりサーバーで実験するのだけはやめといた方がいいと思うぞ
なんていうかねぇ、どうかしてるよキミ。
>>323 スレ違いだけど、
おまえ鯖のセキュリティはしっかりしてあるんだろうな。
踏み台になって他の香具師に迷惑かけるなよ。
DQNだから心配だ…
スレ違いsage
>>323 みたいな質問とコードを書いておきながら
「わざと判別しにくいものにしていた」とは恐れ入ったよw
本7なみにへらず口は達者なようだな
またAA荒らしが増えるのか…
356 :
351 :04/01/14 10:30 ID:???
あれ、まだレスついてる。嬉しいなあ。
>>352 >>353 実験じゃなくて運用に入ってる。perlは大して使ってないし普通に動いてるから大丈夫。
>>354 へらず口でもやることはやってるけど?コードが判別しにくいのは見たまんま。
例題のコードなんて適当に加工したって別にいいんじゃない。
もちろん本コードはきちんと記述してあるしバグもなく動いてるから問題無し。
もう満足したよ。じゃあね。
めちゃめちゃ本7ぽいな。
______ /::::::::::::::::::::::::::::::::::::\ /::::::::::::::::::::::::::::::::::::::::::::::::::\ /:::::::::::::::::::::::::::::::::::::::::::::人:::::::::::ヽ /:::::::::|:::::::::::::::::::::::::::::::::/ ヽ、:::::::ヽ |:::::::::::@ヽ-------‐‐'′ ヽ:::::::::| |::::::::::/ |:::::::::| |:::::::::/ ̄ ̄ ̄ ̄ヽ===/ ̄ ̄ ̄ ̄ヽ|:::::::::| |::::::=ロ -=・=- |, | -=・=- ロ=::::::| |::::::::/ヽ /ノ ヽ /ヽ:::::::| |:::::/ `─── / ` ─── 丶:::| |:::ノ (●_●) |::| |::| l l |::| |::| __-- ̄`´ ̄--__ |::| |::| -二二二二- |::| |::::\ /::::| \::::::\ _- ̄ ̄ ̄-_ /::::::/ |Ξ|~ \ / ~|Ξ| /::::::ヽ/|\_______/|\ /:::::::ヽ |::::::::::| \ / |::::::::::::| /|:::::::::::| \ / |::::::::::::| 今度来たら殺すよ、初心者は二度と来るなよ!!うざい!!邪魔!!消えろ!!
360 :
nobodyさん :04/01/14 13:53 ID:LCxPtJ1k
___ 彡川三三三ミ / \ 川川 ::::::/ \ヽ / / \ \ 川川::::::::ー◎-◎-) | (゚) (゚) | 川(6|:::::::: ( 。。)) | )●( | ._川川;;;::∴ ノ ▽ ノ __\ ▽ ノ /;;;:::::::::::::::\_;;;;;;;;;;;∪ノ /;;;:::::::::::::\__∪ / /:::: /:::::::::::: |::::| /:::: /:::::::::::: |::::| (:::::::: (ミ: ・ ノ:::・/:::| (:::::::: (ミ: ・ ノ:::・/:::| \::::: \::::::: (::: | \::::: \::::::: (::: | /:::\::::: \::: ヽ| /:::\::::: \::: ヽ| /:::: \::::: \::: ヽ ) /:::: \::::: \::: ヽ ) |::: \::  ̄ ̄⊇)__ 〜 |::: \::  ̄ ̄⊇)__ 〜 |::::::: \;;;;;;;;;;;(__(;;;・) 〜 モワー |::::::: \;;;;;;;;;;;(__(;;;・) 〜 モワー \:::::::::: ミ(;;; );; ) 〜 \:::::::::: ξ(;;; );; ) 〜 \:::::::::::: ) ) \:::::::::::: ) ) )::::: // )::::: // /::::::::: // /::::::::: // /::::: (_(_ /::::: (_(_ Perlオタクをなめるなよ!!苦情があるなら、ここに書きこんでみろ!!チキンども!!
361 :
nobodyさん :04/01/14 13:53 ID:LCxPtJ1k
彡川川川三三三ミ〜 プゥ〜ン 川|川/ 臭\|〜 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ‖|‖ ◎---◎ |〜 ∠ ! はあっ はああっ 川川‖ /// 3///ヽ〜 | かごたん 川川 ∴)д(∴)〜 \______________ 川川 〜 /〜 川川川‖ 〜 /川〜 ピュッピュッ / 川川 _/ ;|\〜 ρ / / ;| | ρ ( (;; ・ ・;)..|ρ \ \ 亠 ρ);;| /: \ \ C)) ;) | /::: \  ̄つ/ / | / /::: \ (__/ / _;/ (:::: ;;\__// / ズリズリ〜 \::: (;;;)⊂ /\. \ ヽ---/ \ モソモソ彡
362 :
nobodyさん :04/01/14 13:54 ID:LCxPtJ1k
おまえらみんな雑魚!!Perlこそが神!! __________ || // // | || / ̄ ̄ ̄ ̄\ . | / ̄ ̄ ̄ ̄\ || ( 人____) | ( ) || |ミ/ ー◎-◎-)| (ヽミ | || (6 ゜(_ _) )|. ( 6) | || __| ∴ ノ 3 )| (∴ \____ノ_ || (_/.\_____ノ | >--(っ___□__) || / ( )) ))ヽ| ( )) |三| ヾ . ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ||========[]===|) |_|| | ̄ ̄ ̄ ̄ ̄| (_)\|三三三三三| (:::::::::::::::::::::y:::::::::ノ)\ |:::::::::::::::::::::|:::::::::| |
363 :
nobodyさん :04/01/14 13:56 ID:LCxPtJ1k
〜∞ 彡川川川三三三ミ〜 プーン 川|川\ /|〜 ‖|‖ ◎---◎|〜 川川‖ 3 ヽ〜 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 川川 ∴)〆(∴)〜 < Perl以外はみんな死ね!! 川川 〜 /〜 | どんなにでかい絵はられても 川川‖ 〜 /‖〜 \__書きこんでやるぜ! 川川川川 (⌒)川‖〜 ヴィシッ! //::::::::|-、 ,-/::::::ノ ~.レ-r┐ / /:::::::::::| /:::::ノ__ | .| ト、 | /:::::::::::::::| 〈 ̄ `-Lλ_レ′
364 :
nobodyさん :04/01/14 13:57 ID:LCxPtJ1k
し! _ -── ‐- 、 , -─-、 -‐─_ノ ア ギ // ̄> ´  ̄  ̄ `ヽ Y , ´ ). ア ギ ア ャ L_ / / ヽ ア ャ ア ア / ' ' i ア ア ア ア / / く ア ア ア ア l ,ィ/! / /l/!,l /厶, !! ア ア ア i ,.lrH‐|'| /‐!-Lハ_ l /-!'|/l /`'メ、_iヽ ア ア l | |_|_|_|/| / /__!__ |/!トi i/-- 、 レ!/ / ,-- レ、⌒Y⌒ヽ ア ア _ゝ|/'/⌒ヽ ヽト、|/ '/ ̄`ヾ 、ヽト、N'/⌒ヾ (●) ,イ ̄`ヾ,ノ! ア ア 「 l (●)(●) (●) ′ | | |(●)L! (●)(●) リ ア ヽ | ヽ__(●) (●)、ヽ シ(●)! ! |ヽ_、ソ, (●)(●)(●)_ノ _ノ -┐ ,√ ! (●)(●)(●)(●) リ l !  ̄ (●)(●)  ̄ 7/ レ'⌒ヽ/ ! | (●)〈(●)(●) _人__人ノ_ i(●)く(●)(●)(●) //! 人_,、ノL_,iノ! /! ヽ(●)r─‐- 、 「 L_ヽ r─‐- 、(●)u(●)/ / / lト、 \ ヽ, -‐┤ ノ ギ 了\ ヽ, -‐┤(●)(●)/ ア ギ { / ヽ,ト、ヽ/!`hノ ) ャ |/! 「ヽ, `ー /) _ ‐' ア ャ ヽ/ r-、‐' // / |-‐ く ア > / / `'//-‐、 / ア ア > /\\// / /ヽ_ ! ア ( / / // / `ァ-‐ ' ア ア / /! ヽ(●) レ'/ ノ ア >●)∠-‐  ̄ノヽ / { i l !(●)●/ フ ア / (●)-‐ / ̄/〉 〈 \ /!
365 :
nobodyさん :04/01/14 13:58 ID:LCxPtJ1k
___ / \ ___________ / ∧ ∧ \ / | ・ ・ | < 初心者の質問は禁止!した奴ブッ殺す!! | )●( | \____________ \ ー ノ \____/ / ̄ ̄ ̄ ̄ ̄⌒\ __ / _| | | ヽヽ / / \ | | ,,,,,,,iiiiillllll!!!!!!!lllllliiiii,,,,,,, \\| |____| .| | .,llll゙゙゙゙゙ ゙゙゙゙゙lllll, \/ \ | | .|!!!!,,,,,,,, ,,,,,,,,,!!!!| | ヽ_「\ | |、 | ゙゙゙゙!!!!llllliiiiiiiiiilllll!!!!゙゙゙゙ .| | \ \――、. | | ヽ .| .゙゙゙゙゙゙゙゙゙゙ | | / \ "-、, `| | ヽ | ぬ | _/ / "-, "' (_ ヽ ヽ .| る | / __ノ "'m__`\ヽ_,,,, ヽ | ぽ | `ー― ̄ ヽ、__`/ー_,,,, ゙゙゙゙!!!!!!!lllllllliii| ハ | \゙゙゙゙゙゙゙!!!!!lllllllliiiii| ン | \ ヽ | マ | ヽ \ | | | | \.| | `ヽ、,,_ノ| | ゙゙!!!,,,,,,,, ,,,,,,,,,!!!゙゙
ファイルロックの方法について考えてみたんだけどさ、 こういうのはどうよ? #ファイルがロック状態かどうかを、別のファイルに書き込む。 #そのファイルを見て書き込みができるかどうかを判断する。 #60sec経っても解除されない場合は異常なロックとみなし、別のプロセスにより強制ロック解除。 #但し、時間差による誤強制ロック解除を防止するために、 #ファイルがロック状態かどうかを書き込むファイルは次のように書き込む。 # 書き込みOK→0 # ロック中→ロックしたプロセスがロックした時間を書き込み、終われば0を書き込む。 #書き込みができなかったプロセスはその瞬間から60sec、毎secそのロック状態が書かれているファイルを調べる。 #解除されていればロックをして次の処理に移る。 #60sec以内にロックファイルの内容が変化していれば、別のプロセスによりロックされたと判断。 #そこからさらに60secチェックしながら待つ。
sub filelock{ open(FL,"<filelock.txt"); #ファイルがロックされているかどうかが書かれているファイル $filelock=<FL>; $filelock2="$filelock"; #$filelockの内容を変数として記憶 close(FL); while ($filelock != 0){ $sec++ #毎秒++ open(FL,"<filelock.txt"); $filelock=<FL>; close(FL); if ($filelock ne "$filelock2"){ #記憶している内容と比較し、違っていたら現在の内容を保存 $filelock2="$filelock"; $sec=0; } if ($sec=60){$filelock=0;} #60sec経ったら強制ロック解除 sleep(1); } $nt=time; #現在の時間を取得 open(FL,">filelock.txt"); print FL $nt; #それを書き込むことによってロック close(FL); }
>>366 ロックを勉強しなさい。はなしはそれから
>>367 ファイルのロック情報を書いているファイルに対するロックをどうするのか、
という話が浮上する。既存の方法を使う方が無難だと思うが。
それ以前に367はロックとして機能しないでしょう。
373 :
鬱だ… :04/01/14 20:27 ID:???
何でわざわざ画像にしてあんのかが気になる。
376 :
nobodyさん :04/01/14 21:18 ID:SLc5ap0Y
マウント(smbmount)しているディレクトリにあるファイルを、renameすると、 エラーとなり、$!には『 無効なクロスデバイスリンクです 』というメッセージが 入っています。 ですが、同ファイルをunlinkする時にはとちゃんと動きます。 なぜ、同じファイルなのにunlinkはokでrenameだとエラーになるのでしょうか?
ERROR:ロックは人生だ。
use File::Copy; move("before", "after") or die;
380 :
nobodyさん :04/01/15 03:02 ID:le05BWuU
携帯サイトを作ってるんで、文字列を全角->半角の変換をさせたいんですが、
どの説明しているページを見てもEUCでないと駄目となっています。
携帯サイトですからもちろん扱っている文字はshift-jisですし、
書いてるperlもs-jisです。理想?としては以下のような形で実現できればと・・・
$line = 'ア0−A';
Jcode::tr(\$line,'0-9A-Za-z−','0-9A-Za-z-');
print $line;
---結果----------------------------
ア0-A
-----------------------------------
Jcode.pmをほかの処理で使っているのでJcode::trでできないものかと
色々調べてみましたが、やはりEUC云々とかかれています。
ttp://perldoc.jp/docs/modules/Jcode-0.82/Jcode.pod 何かいい方法はないでしょうか。
z2hというのがあったと思いますが、あれもEUCでないと変換してくれない と書かれたページがありまして・・
>>380 S-JIS→EUC→「全角->半角」→S-JIS じゃダメなん?
>>382 それも考えましたが、わざわざ全→半の変換の為にEUCに一度変換するというのは
無駄な処理に思えてならないのですが・・
なにかEUCでないと変換できないというのには、技術的な理由があってのことなんでしょうか?
例えば自分で変換用ルーチンを組んでそこを通すといったことは技術的に可能なことなんでしょうか。
#その前にこういったことは、携帯サイトの動的コンテンツを組んでる人なら、
#誰しもが考えることのように思えるのですが、なぜそのような文献が見当たらないのかが不思議です。
ユーザーによってデータを登録する時に全→半変換させようと思ってるのですが、
この登録されたデータを検索する機能の中でも検索ワードを全→半変換するといったことも
それほど高負荷でなければ組み込もうと考えてまして、
EUCに一度変換するならちょっと負荷が気になります。
とは言え技術的に不可能ならば仕方ないのでその方法をとらざるを得ませんが・・。
>なにかEUCでないと変換できないというのには、技術的な理由があってのことなんでしょうか?
あるからそのようになっている。Shift-JISは一部の文字の文字コードに、半角文字の文字コードを含み、
それが本当に半角なのか、全角文字の一部なのか判断できなくさせている。(Perlにとっては、だが)
なので、
>>382 が正解。
仕様がはっきりしないが……
1.PCに対しては全角文字、携帯に対しては半角文字を返す仕様
Shift-JISで投稿を受け付け、EUCに変換して保存。
表示する際に半角全角処理をし、Shift-JISに変換して表示。
2.投稿の全てを半角文字で表示する。
投稿時にShift-JIS→EUC-JP→全角→半角→Shift-JISの処理を行い保存する。
これなら、負荷も最小限で済む。
負荷を具体的に知りたいなら、Benchmarkをとってみるよろし。
それをしないで「負荷が気になる」と言われても「やってみもしないでえらそうなことを言うな」がオチ。
>>384 有難うございます。しかしながら理解できない点が一つあります。
>あるからそのようになっている。Shift-JISは一部の文字の文字コードに、半角文字の文字コードを含み、
>それが本当に半角なのか、全角文字の一部なのか判断できなくさせている。(Perlにとっては、だが)
これは確かにそのようで、それが原因でjcodeを通すとたまに半角カナが化けるという現象を確認してます。
しかしそれなのになぜ、「
>>382 が正解」となるのでしょうか。
>S-JIS→EUC→「全角->半角」→S-JIS
つまり半角なのか全角なのかを判断することができないものを何故EUCに変換できるのか。ということです。
S-JISからEUCに問題なく変換できるなら、それは半角と全角の判断が可能ということにならないのでしょうか?
> 携帯サイトですからもちろん扱っている文字はshift-jisですし、 > 書いてるperlもs-jisです。 $line = do_something_returns_sjis(); use encoding 'Shift_JIS'; $line =~ /0-9A-Za-z−/0-9A-Za-z-/; 5.8.1 以降でしか使えんし、スクリプトが sjis で書かれてることに依存してるから スマートな解決方法じゃないけど。
>>386 有難うございます。そのような方法があるのですね
と・・なにをしてるのかわからなかったんで検索してみたんですが、
目的の解説ページにはたどり着けず、先に鯖の仕様を確認したところ、
Perlはバージョン5.6でした・・・。
やはり今の私の環境では
>Shift-JISは一部の文字の文字コードに、半角文字の文字コードを含み、
>それが本当に半角なのか、全角文字の一部なのか判断できなくさせている。
これに尽きるのでしょうか。
今から一応テストしてみようとは思いますが、
EUCに変換しようが、その過程で正しく認識できなく、文字化けを起こすような気がします。
以前どこかのランキングサイトで「入力内容の全角カナは全て半角に変換されます」
ってかかれてたサイトがあったのを思い出し、それをうちのスクリプトに組み込もう
と考えたのですがどうやら難しそうです。
$str = 'テストテストtestてすと'; Jcode::convert(\$str, euc, sjis, h); Jcode::convert(\$str, sjis, euc); print $str; これで求めていた動作をしてくれました。(少なくとも上の文字列では) EUC変換時に第二引数を渡してあげなければ、やはり文字コード判定できず化けますが。 しかし何故s-jisで全角->半角変換が出来ないのか、凡人の私には理解できません。 文字コード判定でs-jis半角カナが混じっている場合に、s-jisかEUCの判別は難しくとも 半角が混じっていようとも、s-jisからEUCに問題なく変換できるということは、 コードがsjisと解っているときは、きちんと半角と全角の区別が出来るということではないのでしょうか。 ということはjcodeには組み込まれていないが、技術的には可能なのでは? と、技術のない馬鹿が長々とほざいておきます。有難うございました。
言い忘れてました。全->半変換してくれるのは「かな」だけです
>>380 の文字列を入れると結果は「ア0−A」となります。
これはこういう仕様ですのであきらめます。
何度もすいません。以下で可能でした。 $str = 'テストテストtestてすと'; Jcode::convert(\$str, sjis, sjis, h); print $str; これで出来るということは・・・どういうことなんでしょ。 内部的に一度EUCに変換してるとどこかで読んだ記憶があるのですが、 だから可能なのかな・・・。
>>380 Perl 5.6 は UTF-8 に対応しているのを知ってる?
S-JIS、ECU には、それぞれ難点があり、気を使いな
がら使わねばならない。
マルチバイトの文字に対して複雑な処理をするなら、
UTF-8 を使うのが、一番お奨め。
392 :
nobodyさん :04/01/15 12:30 ID:y+hUeXhG
今度来たら殺すよ、初心者は二度と来るなよ!!うざい!!邪魔!!消えろ!! ______ /::::::::::::::::::::::::::::::::::::\ /::::::::::::::::::::::::::::::::::::::::::::::::::\ /:::::::::::::::::::::::::::::::::::::::::::::人:::::::::::ヽ /:::::::::|:::::::::::::::::::::::::::::::::/ ヽ、:::::::ヽ |:::::::::::@ヽ-------‐‐'′ ヽ:::::::::| |::::::::::/ |:::::::::| |:::::::::/ ̄ ̄ ̄ ̄ヽ===/ ̄ ̄ ̄ ̄ヽ|:::::::::| |::::::=ロ -=・=- |, | -=・=- ロ=::::::| |::::::::/ヽ /ノ ヽ /ヽ:::::::| |:::::/ `─── / ` ─── 丶:::| |:::ノ (●_●) |::| |::| l l |::| |::| __-- ̄`´ ̄--__ |::| |::| -二二二二- |::| |::::\ /::::| \::::::\ _- ̄ ̄ ̄-_ /::::::/ |Ξ|~ \ / ~|Ξ| /::::::ヽ/|\_______/|\ /:::::::ヽ |::::::::::| \ / |::::::::::::| /|:::::::::::| \ / |::::::::::::|
393 :
nobodyさん :04/01/15 12:31 ID:y+hUeXhG
Perlオタクをなめるなよ!!苦情があるなら、ここに書きこんでみろ!!チキンども!! ___ 彡川三三三ミ / \ 川川 ::::::/ \ヽ / / \ \ 川川::::::::ー◎-◎-) | (゚) (゚) | 川(6|:::::::: ( 。。)) | )●( | ._川川;;;::∴ ノ ▽ ノ __\ ▽ ノ /;;;:::::::::::::::\_;;;;;;;;;;;∪ノ /;;;:::::::::::::\__∪ / /:::: /:::::::::::: |::::| /:::: /:::::::::::: |::::| (:::::::: (ミ: ・ ノ:::・/:::| (:::::::: (ミ: ・ ノ:::・/:::| \::::: \::::::: (::: | \::::: \::::::: (::: | /:::\::::: \::: ヽ| /:::\::::: \::: ヽ| /:::: \::::: \::: ヽ ) /:::: \::::: \::: ヽ ) |::: \::  ̄ ̄⊇)__ 〜 |::: \::  ̄ ̄⊇)__ 〜 |::::::: \;;;;;;;;;;;(__(;;;・) 〜 モワー |::::::: \;;;;;;;;;;;(__(;;;・) 〜 モワー \:::::::::: ミ(;;; );; ) 〜 \:::::::::: ξ(;;; );; ) 〜 \:::::::::::: ) ) \:::::::::::: ) ) )::::: // )::::: // /::::::::: // /::::::::: // /::::: (_(_ /::::: (_(_
394 :
nobodyさん :04/01/15 12:32 ID:y+hUeXhG
彡川川川三三三ミ〜 プゥ〜ン 川|川/ 臭\|〜 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ‖|‖ ◎---◎ |〜 ∠ ! はあっ はああっ 川川‖ /// 3///ヽ〜 | かごたんとPerl命!! 川川 ∴)д(∴)〜 \______________ 川川 〜 /〜 川川川‖ 〜 /川〜 ピュッピュッ / 川川 _/ ;|\〜 ρ / / ;| | ρ ( (;; ・ ・;)..|ρ \ \ 亠 ρ);;| /: \ \ C)) ;) | /::: \  ̄つ/ / | / /::: \ (__/ / _;/ (:::: ;;\__// / ズリズリ〜 \::: (;;;)⊂ /\. \ ヽ---/ \ モソモソ彡
395 :
nobodyさん :04/01/15 12:32 ID:y+hUeXhG
おまえらみんな雑魚!!Perlこそが神!! __________ || // // | || / ̄ ̄ ̄ ̄\ . | / ̄ ̄ ̄ ̄\ || ( 人____) | ( ) || |ミ/ ー◎-◎-)| (ヽミ | || (6 ゜(_ _) )|. ( 6) | || __| ∴ ノ 3 )| (∴ \____ノ_ || (_/.\_____ノ | >--(っ___□__) || / ( )) ))ヽ| ( )) |三| ヾ . ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ||========[]===|) |_|| | ̄ ̄ ̄ ̄ ̄| (_)\|三三三三三| (:::::::::::::::::::::y:::::::::ノ)\ |:::::::::::::::::::::|:::::::::| |
396 :
nobodyさん :04/01/15 12:32 ID:y+hUeXhG
〜∞ 彡川川川三三三ミ〜 プーン 川|川\ /|〜 ‖|‖ ◎---◎|〜 川川‖ 3 ヽ〜 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 川川 ∴)〆(∴)〜 < Perl以外はみんな死ね!! 川川 〜 /〜 | どんなにでかい絵はられても 川川‖ 〜 /‖〜 \__書きこんでやるぜ! 川川川川 (⌒)川‖〜 ヴィシッ! //::::::::|-、 ,-/::::::ノ ~.レ-r┐ / /:::::::::::| /:::::ノ__ | .| ト、 | /:::::::::::::::| 〈 ̄ `-Lλ_レ′
397 :
nobodyさん :04/01/15 12:37 ID:y+hUeXhG
**********************--死のレス--************************ l;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;| i \、|;;;;;;;;;;;;;;;;;;;;;;;;;M、;;;;;;;;;;;;;;;;;;;;;;;;;;ハ;;;;;;;;;;;;;;;;;;;;レ,.ィ´ - 、、,_」;;;;;;;;;;;;;;;;;;;;;;;;/ N、;;;;;;;;;;;;;;;;;/ ヽ;;;;;;;;;;;;;;;;;;;;;/ ヽ;;;;;;;;;;;;;;;;;;;;;N ヽ;;;;;;;;;/ l;;;;;;;;;;;;;;;;;/ _」;;;;;;;;;;;;;;;;;ト! ∨∨ |;;;;;;;;;;;;;;7  ̄`ヽ;;;;;;;;;;;;;;;;;;;;ト、 ‐ 、 `i;;;;;;;;;/ _>;;;;;;;;;;;;;;;;Nヽv- ‐ ミ:、__ _,,ィァ¬、vj!;;;;;/ ヽ、`ヽ;;/rク7;;;ト、ミi{ {:::〉 l}>-z=i i{ 〈:::} }/ Vニ,ヽ ,_,ィ=-、 __,rー 、 ';'、 { !、レハ、! ヾミ=−ジ~´ `ニ=‐'" ,}K // //_, /,ィフ;;;;;/⌒ヽ \};;;ヽ、>、 − i ヽ、 /゙ '^! 、、 ./ノ-'/ /;;{'´ _,/;∠ノ;;;;;∠,____ ;;;;;;;;;;;;;;;;;;;;;;;` ̄| }、 / ___ __ l ノl|'II゙_,ノ-';;;;ノ'´;;;;;;/;;;;;;;;;;_;;、-‐<´ ;;;;;;;;;;;;;;;;;;;;;;;;;;/| ヾミーム三三三三三ミニジノB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'ー'´;;< ̄` ;;;;;;;;;;;;;;;r‐<|!ヽ,l `ヾミ{从儿从儿从州' /Y^^i;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;ナ' ノ `ト、 `'ミ三三三三三ツ ハ ヽへ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;Iニコ / ! |ヽ、, ` ̄´ ` ̄´ /! Z;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;<, /{ | i、ヾ冖''´ `ア´ i } IニI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;匕 ヽ〉 l | ヽ \___/ l ′ _,}_;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; これは死神のレスです。このレスを見た人は三日以内に死にます。 死因は全て心臓麻痺です。 信じるも信じないも自分しだいですが、警告はしておきます。
398 :
nobodyさん :04/01/15 12:43 ID:y+hUeXhG
ζ / ̄ ̄ ̄ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ / | < カツオ、こづかいじゃ。 | ⌒ ⌒ /| \_______ | (・) (・) ||||||| | ⊂⌒◯-----∂)___ ___ | ||||||||_ / ゙Y" \ \ヽ_/ \/ \ \ / \ / ̄ ̄ ̄ ̄) * ( ̄ ̄ ̄ ̄) | ─< |\ >─ ( | ) / (|ミ;\ ( ) ヽ  ̄ ̄) /(___人|,iミ'=;\ (  ̄ ̄ ) /" ̄ ̄ ̄ ̄ / 《v厂リiy\  ̄ ̄ ̄ ̄\ / / ゙|,/'' v:,,、.¨)z,_ \ / / ミ/ .-─ .゙》z、 \ / / 〔」″ノ‐ 、u ¨\ ) ( / ゙|, ..冫 .rー  ̄\_ | | 〔 ミ./′ ..r-ー __,,ア┐ | | | {. .,,,, .′ .´′ .¨\| | | ∨ ノ冖′ =vvvvvv¨\ | / ミ. ,i' .゙\_ | / .{. ノ ,r¬″ .¨\ | / ゙|, | ノ ー''''''''''' .ーミz
399 :
nobodyさん :04/01/15 12:43 ID:y+hUeXhG
Perlオタクは死ね死ね死ね死ね死ね死ね し! _ -── ‐- 、 , -─-、 -‐─_ノ ア ギ // ̄> ´  ̄  ̄ `ヽ Y , ´ ). ア ギ ア ャ L_ / / ヽ ア ャ ア ア / ' ' i ア ア ア ア / / く ア ア ア ア l ,ィ/! / /l/!,l /厶, !! ア ア ア i ,.lrH‐|'| /‐!-Lハ_ l /-!'|/l /`'メ、_iヽ ア ア l | |_|_|_|/| / /__!__ |/!トi i/-- 、 レ!/ / ,-- レ、⌒Y⌒ヽ ア ア _ゝ|/'/⌒ヽ ヽト、|/ '/ ̄`ヾ 、ヽト、N'/⌒ヾ (●) ,イ ̄`ヾ,ノ! ア ア 「 l (●)(●) (●) ′ | | |(●)L! (●)(●) リ ア ヽ | ヽ__(●) (●)、ヽ シ(●)! ! |ヽ_、ソ, (●)(●)(●)_ノ _ノ -┐ ,√ ! (●)(●)(●)(●) リ l !  ̄ (●)(●)  ̄ 7/ レ'⌒ヽ/ ! | (●)〈(●)(●) _人__人ノ_ i(●)く(●)(●)(●) //! 人_,、ノL_,iノ! /! ヽ(●)r─‐- 、 「 L_ヽ r─‐- 、(●)u(●)/ / / lト、 \ ヽ, -‐┤ ノ ギ 了\ ヽ, -‐┤(●)(●)/ ア ギ { / ヽ,ト、ヽ/!`hノ ) ャ |/! 「ヽ, `ー /) _ ‐' ア ャ ヽ/ r-、‐' // / |-‐ く ア > / / `'//-‐、 / ア ア > /\\// / /ヽ_ ! ア ( / / // / `ァ-‐ ' ア ア / /! ヽ(●) レ'/ ノ ア >●)∠-‐  ̄ノヽ / { i l !(●)●/ フ ア / (●)-‐ / ̄/〉 〈 \ /!
>385 技術的には可能だけどPerlが対応してないだけ。 対応してないって言うかPerl自身は文字コードの判別をしない。 なのでモジュール等に頼る事になる。
>>380 use ShiftJIS::String qw(kataZ2H strtr);
$str = 'テストテストtestてすとア0−9';
kataZ2H(\$str);
strtr(\$str, "0123456789−", "0123456789-");
print $str, "\n";
ShiftJIS::StringはCPANで。
Jcode.pmは複数の文字コードを扱うために
EUC-JPで内部保持(処理)してると思います。
402 :
380 :04/01/15 20:23 ID:???
有難うございます。 やはり技術的には可能なんですね。 ちょっと時間取れないんで、時間のあるときに色々教えていただいたことを 検索&施行してみます。
どうしても Shift_JIS に固執するのなら、独自に変換テーブルを描いてやっちゃえばどうよ? 平仮名片仮名数字「だけ」ならそれほどの数でもないからさぁ。 案外バックトラッキングが出ない分(やり方による)、モジュール類をつかうよりか速くなっちゃう鴨よ。
みんなのPerlソースのコメントアウトレイアウト見てみたいかも。 どんなコメントを書けば見やすいのか研究中。 とりあえず、 #==========# # 処理名 # #==========# とか、 #>>>>> 処理名 とか書いてる。 一応それなりに目立つし、全部 # で書くとウザイから ########### # 処理名 # ########### こんなんとか。 見にくい。。。 みんなはどうだ?チェキラ
> コードがsjisと解っているときは、きちんと半角と全角の区別が出来るということではないのでしょうか。 なので hidden で判別できる程度の全角文字を裏で埋め込んでおいて、 フォームに入力された文字コードを判別したいときはそっちを利用するってのは?
407 :
nobodyさん :04/01/16 03:30 ID:DCARFZ4G
http://pc2.2ch.net/test/read.cgi/php/1072896288/l50 にある
HTMLのフォームで、
<FORM action=../../../bbs.cgi method=post>
<INPUT type=submit value=書き込む name=submit>
名前: <INPUT size=19 name=FROM> E-mail<FONT size=1>
(省略可) </FONT>: <INPUT size=19 name=mail><BR>
<TEXTAREA name=MESSAGE rows=5 wrap=off cols=70></TEXTAREA>
<INPUT type=hidden value=php name=bbs>
<INPUT type=hidden value=1072896288 name=key>
<INPUT type=hidden value=1074191121 name=time></FORM>
というものがある場合、Perlプログラムから投稿する場合のプログラムをください。
410 :
◆ymwwFPCsCI :04/01/16 03:47 ID:neNRKodC
>>380 こうすればいいんでは?
#!/usr/local/bin/perl
use CGI ':all';
print header(-charset=>"sjis"),
start_html(-title=>"DQN"),
p("perlテスト"),
end_html;
これでできますよ。
>410 charsetが無茶苦茶だな
>>410 というかテメェー何の話してんだ?ずれてんだよ
>>403 × バックトラッキングが出ない
○ ラウンドトリップを必要としない
じゃないの?
……blog じゃないんだから(;´Д`)
414 :
:04/01/16 10:37 ID:???
むかしうちのビデオにトラッキングボタンてのがついてたんだけど、 今無いね。どこいったんだろう。
415 :
nobodyさん :04/01/16 11:25 ID:DCARFZ4G
>>415 おい知障、ここは質問スレだ。
おまえの希望のプログラムを提供するスレじゃないんだよ。
その程度も分からん香具師は人の迷惑だから掲示板使うなよ。
初心者ですが質問させてください Perlでキーワード検索作ったのですが検索単語を空白にすると 登録されている内容全てが表示されてしまいます if($in{'mode'} eq ""){ &PrintPage; exit; }とやって、$in{'mode'}が 空白だったら最初のページを表示させようとしてもうまくいかず 内容全て表示されてしまいます。 よろしくおねがいします。
>>418 PrintPage サブルーチンの中身を書かなきゃ話にならんだろうが。
というかその程度だったら何をやっても話にならんだろうが。
まず、そのスクリプトを知らない俺らが、サブルーチン名をだされても、
何をしているかわからない。これに気づかない。
次に、$in{'name'}=valueという形でフォームデータが格納されてるんだろうが、
どう考えても$in{mode}に検索ワードが入ってるとは思えない。おそらく$in{word}か。
最後に「初心者です」と最初に公言している。
∴
>>420 で書いたとおり、何をやっても話しにならない。
デフォで使ってください。
422 :
418 :04/01/16 15:38 ID:???
>419 PrintPageサブルーチンの中身です sub PrintPage{ print <<END; Content-type: text/html; charset=Shift_JIS <HTML><BODY><CENTER> キーワード検索<BR> <FORM method=POST action="keyword.cgi"> <INPUT type=text name=word size=30> <INPUT type=hidden name=mode value="search"><BR><BR> <INPUT type=submit value="検索"> </FORM></CENTER></BODY></HTML> END }
>>418 そいつぁな、
if($in{'mode'} eq "")
ここで、改行コードがあるために""にならんのじゃよ。
$in{'mode'}をchomp汁。
424 :
418 :04/01/16 16:17 ID:???
chomp $in{'mode'}; if($in{'mode'} eq ""){ &PrintPage; exit; } chompやっても無理でした…
$k{'ひらがな'} = "あいうえお<>かきくけこ"; @val = split(/<>/, $k{"ひらがな"}); print "<b>$val[0]</b>、<b>$val[1]</b>"; <b>あいうえお</b>、<b>かきくけこ</b>と表示したいのに <b></b>、<b></b>としか表示されません。どうして??
>>418 use Data::Dumper;
print Dumper($in{mode});
…の結果は?
どんな値が入ってるかどうか確認するのはデバッグの基本。
>>425 コピペして動かしたら、期待している通りの動作をした。
>>418 と同じように
use Data::Dumper;
print Dumper(\@var);
してみて、本当に値が入ってるかどうか確認してみ。
プログラムの勉強するんなら言語使用だけじゃなく、デバッグの仕方とか、ノウハウも
身に付けような。
>>426 文法チェックもかけたし
Perlで実行もしたけどブラウザでやるとできないんです
428 :
nobodyさん :04/01/16 17:58 ID:tmlrsYhW
偏差値重視の詰め込み教育がこういう "考える力の無い" 人たちを生んでるのかな? ゆとり教育とやらは来年度から無くなるらしいけど、教育方法 戻してもこれじゃ意味無いね。
>>418 おまえだけじゃないけどさ、
>>初心者ですが
はっきり言ってウザイ。
「初心者です」「質問です」「お願いします」 そんなもんいらんから質問内容だけわかるように書け
433 :
nobodyさん :04/01/16 18:48 ID:tmlrsYhW
>>418 デバッグの仕方ってわざわざ教えないと分からないのかな?
一つ一つの処理ずつ確認していけばおのずと答えは出るだろ?
ps.まあ、こういうバカが更正して賢くなると困るんだけどね。
バカが多いほうが仕事も給与も増えるし。だからもうわざわざ注意しない^^
>>432 だろ?
俺はそれを言いたいんだよ。
それなのに
>>430 みたく意味不明なレスをする香具師が・・・
つまるところ回答者側からの要望は一つっス。 >1 1: 自分はこう言う事がしたい。 2: それでこんな風にやってみたが・・・ 3: こんなエラーが出て上手く行かなかった。 をちゃんと書いてくれと。 作ったスクリプトが動かない場合、2は必須。
>>427 > use Data::Dumper;
> print Dumper(\@var);
> してみて、本当に値が入ってるかどうか確認してみ。
>>435 に日本語読め、ってのも追加してくれ。
有益な解答しても、話聞いてくれんのじゃダメぽ。
>>386 >$line = do_something_returns_sjis();
??
>$line =~ /0-9A-Za-z−/0-9A-Za-z-/;
$line =~ tr/0-9A-Za-z−/0-9A-Za-z-/;
>>413 >>403 ってアルゴリズムの話だと思うけど、
blogってどういう意味?
>>437 トラックバックと読み間違えた……_| ̄|○
日本語できてないのは俺ぽ。
もうね、何でもかんでも調べずに人に聞かないと出来ない香具師なんて放置しとけばいいんですよ。氏んだらいいんですよ。
>>418 あのにぃ、chompだけじゃ\nしかトンないから、
$in{'mod'} =~ s/\r\n//;汁よろし。
>440 それは激しく語弊があるな。
もー滅茶苦茶。馬鹿はすっこんでろ
>>434 >>だろ?
>>俺はそれを言いたいんだよ。
>>それなのに
>>430 みたく意味不明なレスをする香具師が・・・
だったら初めからそう言えばいいじゃん。
>>429 みたいな言い方も意味不明で混乱しやすい。
「はっきり言ってウザイ」じゃなくて、「"初心者ですが"って書かれるのがウザイ」とするべき。
446 :
444 :04/01/17 00:11 ID:???
サーバがunixで入力がDOS系なら
>>440 で正解
あのさー、ルーチンの中で宣言と同時に代入してる値って 最初のコンパイル段階でセットされるよね? sub test{ my $set= 5; }
449 :
nobodyさん :04/01/17 01:42 ID:R0DKrVEo
ハッシュのリファレンスをデータベースに保存したいのですが、どうすれば良いのでしょう? my(%foo); my(@set) = (0) x 10; $foo{"hoge"} = \@set; pop(@{$foo{"hoge"}});#古いログインデータを消去 unshift(@{$foo{"hoge"}}, time);#今回のログインデータを入力 &DbmWrite(\%foo, "test"); sub DbmWrite { my($data, $filename) = @_; my(%writehash); tie %writehash, AnyDBM_File, $ini'path.$filename, O_CREAT|O_RDWR, 0666; %writehash = (%writehash, %$data); untie %writehash; return 1; } @setの参照先メモリが$foo{"hoge"}に保存されるかなぁと思ったら保存されず。
Perlでディレクトリの名前って変更できるのでしょうか? renameはファイル名だけだし mkdirでディレクトリ作成して、そこにopenで1個1個コピーして・・・ 最後にrmtreeで元のディレクトリ削除っていうとんでもないやり方しか思い浮かばん 何かいい方法ってないですか? あったらぜひ教えて欲しいです
>>451 renameはディレクトリにも使えますよ。
453 :
nobodyさん :04/01/17 05:21 ID:qcF/S2Pi
今度来たら殺すよ、初心者は二度と来るなよ!!うざい!!邪魔!!消えろ!! ______ /::::::::::::::::::::::::::::::::::::\ /::::::::::::::::::::::::::::::::::::::::::::::::::\ /:::::::::::::::::::::::::::::::::::::::::::::人:::::::::::ヽ /:::::::::|:::::::::::::::::::::::::::::::::/ ヽ、:::::::ヽ |:::::::::::@ヽ-------‐‐'′ ヽ:::::::::| |::::::::::/ |:::::::::| |:::::::::/ ̄ ̄ ̄ ̄ヽ===/ ̄ ̄ ̄ ̄ヽ|:::::::::| |::::::=ロ -=・=- |, | -=・=- ロ=::::::| |::::::::/ヽ /ノ ヽ /ヽ:::::::| |:::::/ `─── / ` ─── 丶:::| |:::ノ (●_●) |::| |::| l l |::| |::| __-- ̄`´ ̄--__ |::| |::| -二二二二- |::| |::::\ /::::| \::::::\ _- ̄ ̄ ̄-_ /::::::/ |Ξ|~ \ / ~|Ξ| /::::::ヽ/|\_______/|\ /:::::::ヽ |::::::::::| \ / |::::::::::::| /|:::::::::::| \ / |::::::::::::|
454 :
nobodyさん :04/01/17 05:21 ID:qcF/S2Pi
Perlオタクをなめるなよ!!苦情があるなら、ここに書きこんでみろ!!チキンども!! ___ 彡川三三三ミ / \ 川川 ::::::/ \ヽ / / \ \ 川川::::::::ー◎-◎-) | (゚) (゚) | 川(6|:::::::: ( 。。)) | )●( | ._川川;;;::∴ ノ ▽ ノ __\ ▽ ノ /;;;:::::::::::::::\_;;;;;;;;;;;∪ノ /;;;:::::::::::::\__∪ / /:::: /:::::::::::: |::::| /:::: /:::::::::::: |::::| (:::::::: (ミ: ・ ノ:::・/:::| (:::::::: (ミ: ・ ノ:::・/:::| \::::: \::::::: (::: | \::::: \::::::: (::: | /:::\::::: \::: ヽ| /:::\::::: \::: ヽ| /:::: \::::: \::: ヽ ) /:::: \::::: \::: ヽ ) |::: \::  ̄ ̄⊇)__ 〜 |::: \::  ̄ ̄⊇)__ 〜 |::::::: \;;;;;;;;;;;(__(;;;・) 〜 モワー |::::::: \;;;;;;;;;;;(__(;;;・) 〜 モワー \:::::::::: ミ(;;; );; ) 〜 \:::::::::: ξ(;;; );; ) 〜 \:::::::::::: ) ) \:::::::::::: ) ) )::::: // )::::: // /::::::::: // /::::::::: // /::::: (_(_ /::::: (_(_
455 :
nobodyさん :04/01/17 05:22 ID:qcF/S2Pi
彡川川川三三三ミ〜 プゥ〜ン 川|川/ 臭\|〜 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ‖|‖ ◎---◎ |〜 ∠ ! はあっ はああっ 川川‖ /// 3///ヽ〜 | かごたんとPerl命!! 川川 ∴)д(∴)〜 \______________ 川川 〜 /〜 川川川‖ 〜 /川〜 ピュッピュッ / 川川 _/ ;|\〜 ρ / / ;| | ρ ( (;; ・ ・;)..|ρ \ \ 亠 ρ);;| /: \ \ C)) ;) | /::: \  ̄つ/ / | / /::: \ (__/ / _;/ (:::: ;;\__// / ズリズリ〜 \::: (;;;)⊂ /\. \ ヽ---/ \ モソモソ彡
456 :
nobodyさん :04/01/17 05:23 ID:qcF/S2Pi
俺とPerlこそが神!!パンチ5分の2なんてぜってー教えないもん __________ || // // | || / ̄ ̄ ̄ ̄\ . | / ̄ ̄ ̄ ̄\ || ( 人____) | ( ) || |ミ/ ー◎-◎-)| (ヽミ | || (6 ゜(_ _) )|. ( 6) | || __| ∴ ノ 3 )| (∴ \____ノ_ || (_/.\_____ノ | >--(っ___□__) || / ( )) ))ヽ| ( )) |三| ヾ . ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ||========[]===|) |_|| | ̄ ̄ ̄ ̄ ̄| (_)\|三三三三三| (:::::::::::::::::::::y:::::::::ノ)\ |:::::::::::::::::::::|:::::::::| |
457 :
nobodyさん :04/01/17 05:23 ID:qcF/S2Pi
〜∞ 彡川川川三三三ミ〜 プーン 川|川\ /|〜 ‖|‖ ◎---◎|〜 川川‖ 3 ヽ〜 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 川川 ∴)〆(∴)〜 < Perl使わない奴はみんな死ね!! 川川 〜 /〜 | どんなにでかい絵はられても 川川‖ 〜 /‖〜 \_迷惑でも、書きこんでやるぜ!! 川川川川 (⌒)川‖〜 ヴィシッ! //::::::::|-、 ,-/::::::ノ ~.レ-r┐ / /:::::::::::| /:::::ノ__ | .| ト、 | /:::::::::::::::| 〈 ̄ `-Lλ_レ′
458 :
nobodyさん :04/01/17 05:24 ID:qcF/S2Pi
**********************--死のレス--************************ これは死神のレスです。このレスを見た人は三日以内に死にます。 死因は全て心臓麻痺です。 信じるも信じないも自分しだいですが、警告はしておきます。 l;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;| i \、|;;;;;;;;;;;;;;;;;;;;;;;;;M、;;;;;;;;;;;;;;;;;;;;;;;;;;ハ;;;;;;;;;;;;;;;;;;;;レ,.ィ´ - 、、,_」;;;;;;;;;;;;;;;;;;;;;;;;/ N、;;;;;;;;;;;;;;;;;/ ヽ;;;;;;;;;;;;;;;;;;;;;/ ヽ;;;;;;;;;;;;;;;;;;;;;N ヽ;;;;;;;;;/ l;;;;;;;;;;;;;;;;;/ _」;;;;;;;;;;;;;;;;;ト! ∨∨ |;;;;;;;;;;;;;;7  ̄`ヽ;;;;;;;;;;;;;;;;;;;;ト、 ‐ 、 `i;;;;;;;;;/ _>;;;;;;;;;;;;;;;;Nヽv- ‐ ミ:、__ _,,ィァ¬、vj!;;;;;/ ヽ、`ヽ;;/rク7;;;ト、ミi{ {:::〉 l}>-z=i i{ 〈:::} }/ Vニ,ヽ ,_,ィ=-、 __,rー 、 ';'、 { !、レハ、! ヾミ=−ジ~´ `ニ=‐'" ,}K // //_, /,ィフ;;;;;/⌒ヽ \};;;ヽ、>、 − i ヽ、 /゙ '^! 、、 ./ノ-'/ /;;{'´ _,/;∠ノ;;;;;∠,____ ;;;;;;;;;;;;;;;;;;;;;;;` ̄| }、 / ___ __ l ノl|'II゙_,ノ-';;;;ノ'´;;;;;;/;;;;;;;;;;_;;、-‐<´ ;;;;;;;;;;;;;;;;;;;;;;;;;;/| ヾミーム三三三三三ミニジノB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'ー'´;;< ̄` ;;;;;;;;;;;;;;;r‐<|!ヽ,l `ヾミ{从儿从儿从州' /Y^^i;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;ナ' ノ `ト、 `'ミ三三三三三ツ ハ ヽへ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;Iニコ / ! |ヽ、, ` ̄´ ` ̄´ /! Z;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;<, /{ | i、ヾ冖''´ `ア´ i } IニI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;匕 ヽ〉 l | ヽ \___/ l ′ _,}_;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
459 :
nobodyさん :04/01/17 05:25 ID:qcF/S2Pi
ζ / ̄ ̄ ̄ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ / | < 糞スレ♪ | ⌒ ⌒ /| \_______ | (・) (・) ||||||| | ⊂⌒◯-----∂)___ ___ | ||||||||_ / ゙Y" \ \ヽ_/ \/ \ \ / \ / ̄ ̄ ̄ ̄) * ( ̄ ̄ ̄ ̄) | ─< |\ >─ ( | ) / (|ミ;\ ( ) ヽ  ̄ ̄) /(___人|,iミ'=;\ (  ̄ ̄ ) /" ̄ ̄ ̄ ̄ / 《v厂リiy\  ̄ ̄ ̄ ̄\ / / ゙|,/'' v:,,、.¨)z,_ \ / / ミ/ .-─ .゙》z、 \ / / 〔」″ノ‐ 、u ¨\ ) ( / ゙|, ..冫 .rー  ̄\_ | | 〔 ミ./′ ..r-ー __,,ア┐ | | | {. .,,,, .′ .´′ .¨\| | | ∨ ノ冖′ =vvvvvv¨\ | / ミ. ,i' .゙\_ | / .{. ノ ,r¬″ .¨\ | / ゙|, | ノ ー''''''''''' .ーミz
460 :
nobodyさん :04/01/17 05:26 ID:qcF/S2Pi
Perlオタクは死ね死ね死ね死ね死ね死ね し! _ -── ‐- 、 , -─-、 -‐─_ノ ア ギ // ̄> ´  ̄  ̄ `ヽ Y , ´ ). ア ギ ア ャ L_ / / ヽ ア ャ ア ア / ' ' i ア ア ア ア / / く ア ア ア ア l ,ィ/! / /l/!,l /厶, !! ア ア ア i ,.lrH‐|'| /‐!-Lハ_ l /-!'|/l /`'メ、_iヽ ア ア l | |_|_|_|/| / /__!__ |/!トi i/-- 、 レ!/ / ,-- レ、⌒Y⌒ヽ ア ア _ゝ|/'/⌒ヽ ヽト、|/ '/ ̄`ヾ 、ヽト、N'/⌒ヾ (●) ,イ ̄`ヾ,ノ! ア ア 「 l (●)(●) (●) ′ | | |(●)L! (●)(●) リ ア ヽ | ヽ__(●) (●)、ヽ シ(●)! ! |ヽ_、ソ, (●)(●)(●)_ノ _ノ -┐ ,√ ! (●)(●)(●)(●) リ l !  ̄ (●)(●)  ̄ 7/ レ'⌒ヽ/ ! | (●)〈(●)(●) _人__人ノ_ i(●)く(●)(●)(●) //! 人_,、ノL_,iノ! /! ヽ(●)r─‐- 、 「 L_ヽ r─‐- 、(●)u(●)/ / / lト、 \ ヽ, -‐┤ ノ ギ 了\ ヽ, -‐┤(●)(●)/ ア ギ { / ヽ,ト、ヽ/!`hノ ) ャ |/! 「ヽ, `ー /) _ ‐' ア ャ ヽ/ r-、‐' // / |-‐ く ア > / / `'//-‐、 / ア ア > /\\// / /ヽ_ ! ア ( / / // / `ァ-‐ ' ア ア / /! ヽ(●) レ'/ ノ ア >●)∠-‐  ̄ノヽ / { i l !(●)●/ フ ア / (●)-‐ / ̄/〉 〈 \ /!
461 :
nobodyさん :04/01/17 09:56 ID:4l/yLaSm
変数の値を掛け算し、その結果の小数点以下を切り捨てる処理をしたい。 例えば my $v = 123; $v = $v * 0.1; $v = int($v); print $v; としたときに、12 と出力させたい。これを限りなくスマートに書きたい。 my $v = 123; int($v *= 0.1); print $v; では12.3と出てしまった。 どうすればいいのか教えてくださ。
my $v = 123; print int $v * 0.1;
(´-`).。oO(試しに AA 群を Rock54 に入れてみるか。)
粘着荒らしが書き込む度に、俺の navi2ch-spamfilter が鍛えられていく。
2ヶ月ぶりぐらいにこのスレ見たけど 飽きもせずに、まだ居たんだ…(ゲラ
>466 こなくていいよ(^^
468 :
nobodyさん :04/01/17 13:38 ID:yYXfpx2m
>461 use POSIX; my $v = 123; print POSIX::floor( $v * 0.1 );
モジュール使うほどのことか?
470 :
nobodyさん :04/01/17 14:17 ID:yYXfpx2m
みんなで 100 通りくらい方法を書くのが、 perl 流かと。(実はその perl 流があまり好きじゃなかったりするが) int 出たし。>462
471 :
nobodyさん :04/01/17 14:36 ID:qcF/S2Pi
>>466 そうなんすよ
すごいだろ(w
まだ、教えてくれねーんだよ、パンチ5分の2
早くおしえろよ!
472 :
nobodyさん :04/01/17 14:37 ID:qcF/S2Pi
今度来たら殺すよ、初心者は二度と来るなよ!!うざい!!邪魔!!消えろ!! ______ /::::::::::::::::::::::::::::::::::::\ /::::::::::::::::::::::::::::::::::::::::::::::::::\ /:::::::::::::::::::::::::::::::::::::::::::::人:::::::::::ヽ /:::::::::|:::::::::::::::::::::::::::::::::/ ヽ、:::::::ヽ |:::::::::::@ヽ-------‐‐'′ ヽ:::::::::| |::::::::::/ |:::::::::| |:::::::::/ ̄ ̄ ̄ ̄ヽ===/ ̄ ̄ ̄ ̄ヽ|:::::::::| |::::::=ロ -=・=- |, | -=・=- ロ=::::::| |::::::::/ヽ /ノ ヽ /ヽ:::::::| |:::::/ `─── / ` ─── 丶:::| |:::ノ (●_●) |::| |::| l l |::| |::| __-- ̄`´ ̄--__ |::| |::| -二二二二- |::| |::::\ /::::| \::::::\ _- ̄ ̄ ̄-_ /::::::/ |Ξ|~ \ / ~|Ξ| /::::::ヽ/|\_______/|\ /:::::::ヽ |::::::::::| \ / |::::::::::::| /|:::::::::::| \ / |::::::::::::|
473 :
nobodyさん :04/01/17 14:37 ID:qcF/S2Pi
Perlオタクをなめるなよ!!苦情があるなら、ここに書きこんでみろ!!チキンども!! ___ 彡川三三三ミ / \ 川川 ::::::/ \ヽ / / \ \ 川川::::::::ー◎-◎-) | (゚) (゚) | 川(6|:::::::: ( 。。)) | )●( | ._川川;;;::∴ ノ ▽ ノ __\ ▽ ノ /;;;:::::::::::::::\_;;;;;;;;;;;∪ノ /;;;:::::::::::::\__∪ / /:::: /:::::::::::: |::::| /:::: /:::::::::::: |::::| (:::::::: (ミ: ・ ノ:::・/:::| (:::::::: (ミ: ・ ノ:::・/:::| \::::: \::::::: (::: | \::::: \::::::: (::: | /:::\::::: \::: ヽ| /:::\::::: \::: ヽ| /:::: \::::: \::: ヽ ) /:::: \::::: \::: ヽ ) |::: \::  ̄ ̄⊇)__ 〜 |::: \::  ̄ ̄⊇)__ 〜 |::::::: \;;;;;;;;;;;(__(;;;・) 〜 モワー |::::::: \;;;;;;;;;;;(__(;;;・) 〜 モワー \:::::::::: ミ(;;; );; ) 〜 \:::::::::: ξ(;;; );; ) 〜 \:::::::::::: ) ) \:::::::::::: ) ) )::::: // )::::: // /::::::::: // /::::::::: // /::::: (_(_ /::::: (_(_
ところでちょっと聞いて欲しいんだが、 HTML::Template をこんな感じで使ってた訳ですよ。 --------------------------------------------------------- use IO::Handle; use HTML::Template;# v2.6 my $tmpl = HTML::Template->new( scalarref => \<<__FOO__ ); <TMPL_VAR NAME="foo"> __FOO__ $tmpl->param( foo => '100 de gowasu' ); my $io = IO::Handle->new; $io->fdopen(fileno(*STDOUT), 'w'); print $tmpl->output( print_to => $io ); --------------------------------------------------------- で、出力されないんだこれが。 もちろん、print_to => *STDOUT にすれば出力される。 ?? と思いつつ HTML::Template の中身を見た訳。
474 続き そしたら、 --------------------------------------------------------- tie $result, 'HTML::Template::PRINTSCALAR', $args{print_to} if defined $args{print_to} and not tied $args{print_to}; --------------------------------------------------------- こんなのがあって、そんでもって PRINTSCALAR の定義は --------------------------------------------------------- package HTML::Template::PRINTSCALAR; use strict; sub TIESCALAR { bless \$_[1], $_[0]; } sub FETCH { } sub STORE { my $self = shift; local *FH = $$self; print FH @_; } --------------------------------------------------------- こんなのだった。 で、出力は $result .= $value; の様に行われていた。
475 続き ここまで読んで段々ムカツイテ来た。 最初の問題は $tmpl->output( print_to => $$io ); ってすりゃ良いってことで一応解決はしたが、 HTML::Template 作った野郎はなんで $tmpl->output( print_to => $io ) で動くようにしなかったんだ。 みんな、最初っから $tmpl->output( print_to => $$io ) って書くと思ってんのか。タコタタコタココタコタコ 大体この HTML::Template::PRINTSCALAR が気に食わない。 $result .= $value; ってしたいだけで、こんなん作るんじゃネェ。タコタタコタココタコタコ 素で IO::Handle を受け取れるように作っとけや。ヴォケェェ と思った訳だが、実際どうなんだ。これは普通なのか? これでムカツクなんてボクチャンマダマダなんでちゅか? じつは tie もあまり好きじゃないとか言ったら、みんな失笑ですか? $ @ % が諸悪の根源とか言ったら、顔写真公開ですか? だいたい俺は perl 好きなんですか? # 後は適当にイジレ
独り言は夢・独り言板でおながいします。
>477 簡単に要点を書くとこうなる。 perl のデータ構造を一緒にオナリグチリたい。 偉い人に perl を愚痴って解説してほしい。 偉い人に馬鹿にされたい。構って欲しい。 イジ(メ)ラレタイ
パンチ5分の2君がかまってくれるよ。
>474 そもそも print $tmpl->output( print_to => $io ); これは、 $tmpl->output( print_to => $io ); の typo でいいのか。多分そうとしか思えんが。
481 :
nobodyさん :04/01/17 18:08 ID:4l/yLaSm
461だけど POSIXははじめて知った。 そんなのあったんだ。
482 :
449 :04/01/17 18:23 ID:R0DKrVEo
すんません、どうしてもわかんないんですけど
>>449 use Data::Serializer;
>>474 $io->print($tmpl->output);
で、いいんじゃない?
484 :
468 :04/01/17 20:26 ID:???
>481 ずぼらに文字列を整数にする時は int を使ってる。 真面目に小数の切り上げ,切り下げをやるときは POSIX::ceil($v); POSIX::floor($v); を使うように意識してる。
485 :
468 :04/01/17 20:50 ID:???
>483 perldoc HTML::Template\n /You may optionally .... ---------------------------------------------------------------------- You may optionally supply a filehandle to print to automatically as the template is generated. This may improve performance and lower memory consumption. Example: $template->output(print_to => *STDOUT); The return value is undefined when using the "print_to" option. ---------------------------------------------------------------------- 本来 stream class みたいなのがあって欲しくて、!defined($args{print_to}) だったらその stream は、chararray output stream みたいなやつで、 そしたら return $result.to_s みたいな感じの実装が美しいかと。 defined($args{print_to}) だったら戻り無しみたいな。 現状だと、メソッド名を output じゃなくて content とかにしたくなってまう。 特に print_to オプションがなかったら。
>449 use MLDBM; とか。 無けりゃ入れろ。入れられなきゃ 483。 それもダメなら自前で頑張れ。 あと、DBM はいろいろあるから暇なら適当に幾つかいじってみれ。 QDBM とかの試用 report しる。
URLエンコードする場合 半角スペースは必ず「+」に変換しなきゃならないのでしょうか? しないで良い場合、したほうが良い場合それぞれあったら教えて下さい。
488 :
nobodyさん :04/01/17 21:19 ID:4l/yLaSm
宮崎県西諸県郡須木村 を 西諸県郡須木村 にするために s/.*県//; としたら 郡須木村 になってしまいました。後ろの「県」にマッチしてるようです。 これを、前の「県」にマッチさせて 西諸県郡須木村 とするにはどうすればいいでしょう!? おねがいします!
>>488 「Perl 正規表現 最短マッチ」で検索
490 :
nobodyさん :04/01/17 21:43 ID:4l/yLaSm
そうか、最短マッチっていうのか!!!! うまくできたぜ! ありがとうな!
kihondesuyone...
494 :
493 :04/01/17 22:14 ID:???
ごめん続き オプションで perl 版 writer を貰ったらそいつに write(). 貰わなかったら perl 版 CharArrayWriter を生成してそいつに write(). でオプション無しの場合は、最後に return writer.toString(). みたいにやった方が、output ってメソッドの名前に相応しいだろうと.
>>493 ありゃ、ボケかましました…。
>>494 うーん、好みが分かれそうですね。
便利だとは思いますが、perlっぽくないような気もします。
# って個人的な趣味ですねw。
496 :
487 :04/01/17 23:06 ID:???
497 :
nobodyさん :04/01/18 00:01 ID:+WjH7Bzr
ζ / ̄ ̄ ̄ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ / | < 糞スレ♪ | ⌒ ⌒ /| \_______ | (・) (・) ||||||| | ⊂⌒◯-----∂)___ ___ | ||||||||_ / ゙Y" \ \ヽ_/ \/ \ \ / \ / ̄ ̄ ̄ ̄) * ( ̄ ̄ ̄ ̄) | ─< |\ >─ ( | ) / (|ミ;\ ( ) ヽ  ̄ ̄) /(___人|,iミ'=;\ (  ̄ ̄ ) /" ̄ ̄ ̄ ̄ / 《v厂リiy\  ̄ ̄ ̄ ̄\ / / ゙|,/'' v:,,、.¨)z,_ \ / / ミ/ .-─ .゙》z、 \ / / 〔」″ノ‐ 、u ¨\ ) ( / ゙|, ..冫 .rー  ̄\_ | | 〔 ミ./′ ..r-ー __,,ア┐ | | | {. .,,,, .′ .´′ .¨\| | | ∨ ノ冖′ =vvvvvv¨\ | / ミ. ,i' .゙\_ | / .{. ノ ,r¬″ .¨\ | / ゙|, | ノ ー''''''''''' .ーミz
>>496 ごめん、ボケてました。
%20でエスケープしてください。
# フォームと勘違いしました。
499 :
498 :04/01/18 00:41 ID:???
QUERY_STRING部分はスペースを+で変換。 それ以外は%20でOKです。
Perlでモジュールを使いたいのですが、 インクルードパス(@INC)を設定するモジュールがどこにあるか知りませんか? 前にどこかのページで見かけた気がするのですが、
502 :
nobodyさん :04/01/18 15:46 ID:OtEt/VLD
use lib qw{/path};のこときいてるんちゃうの?
>>502 言いたいことがわからん。。。
うち、もうビチビチやねん!
505 :
nobodyさん :04/01/19 01:11 ID:fVsnEalX
以前にwebで開発を行っていたとき、デバッグしやすいように処理ごとに ファイルへログを吐き出していたのですが、今回mod_perlを使用するという ことになり、そのデバッグのためのログ出力で困っています。 mod_perlの場合、きちんとcloseを行わないとファイルへの出力が行われない ということのようなのですが、どうにかスクリプトが終了 (エラーで終了も 含む)ときに自動的にcloseが行われるようにすることは出来ないでしょうか?
MaxRequestsPerChild 1 でいけるかも
CGIで表示する、テンプレートHTMLファイルを読み込んで、それを書き出す時に、 HTMLの中に置換される文字を用意しておきますけど、 そういう時、%%HOGE%%みたいにしますよね。 この%%はなんか意味あるんでしょうか。
無い。殆ど文中に出てこないような文字列にしてるだけ HOGEだけだと、テンプレート中に使う場合もあるかもしれんだろ
ありがとうございます
510 :
nobodyさん :04/01/19 13:35 ID:bny4IV18
name. name.東京 name.横浜 のように name.以下が何もない場合 name.以下が全角文字列 ならABCに変換したくて $line_data =~ s/name.[^ -~。-゜]*/selected/; とやったところ Invalid [] range "´" before HERE mark in regex m/sel.business_hours_class1.[^ -~。- << HERE 烟*/ とエラーが返されました。 使ってはいけない文字があったのでしょうか? いい方法があったら教えてください。
>>507 どの言語を使ってるか知らないが、
「車輪の再発明」の問題があるので、
できれば用意されたモジュールを使うことをおすすめする。
512 :
nobodyさん :04/01/19 14:42 ID:TBqYdeZg
デコードについて質問させてください。 本文欄に書かれた「=」「!」「?」の各記号の処理なんですが、現在は $message=~ s/\=/\=/g; $message=~ s/\!/\!/g; $message=~ s/\?/\?/g; ↑こう書いて、とりあえず強制的に半角に変換させています。 これを、全角で書かれた場合は全角のまま、半角で書かれた場合は半角のまま表示させるためには記述をどのように変えればよいのかがわからず悩んでいます。 どうかお知恵をお借りできればと思います。よろしくお願いします。
藁
まあ確かにそうだなw
516 :
nobodyさん :04/01/19 17:27 ID:5UFSwei7
<select name="HOGE"> <option value="あ">ここの値</option> </select> 「ここの値」をCGIで受け取ることってできますか?
ども
あの、多分どーでもいい質問だと思うんですけど、 errorっていうサブルーチンでエラー画面吐いてexitするんですけど、 データをチェックするときに以下のようにelsifでつらつらと書いてるのを良く見ますが、 if ($id eq "") { &error("IDを設定してください。"); } elsif (length ($id) > 8) { &error("IDが長すぎます。"); } elsif (length ($id) < 3) { &error("IDが短すぎます。"); } ↑elsifじゃなくて、全部ifで書いても一緒ですよね? elsifの方が処理が軽いとかそんな理由があってのことでしょうか?
全部ifだと、どんな内容でもすべての条件が評価される。 elsifにすると、例えば $id eq "" が真なら、それ以外の条件は評価されない。
>>520 いや、だから真ならどうせerrorでexitするから、
それ以上評価しないんで一緒ですよね?ってことなんですけど。
>>521 抜け出すのならコードの上では一緒だけど、意味合いが変わってくるよ。
後から人(自分も含めて)が読む時に
「あれ、なんで elsif 使ってないんだ?何かあるのかな?」って勘違いする
原因になる。
&error("IDをありません。") if ($id eq ""); &error("IDが長すぎます。") if (length $id > 8); &error("IDが短すぎます。") if (length $id < 3); これでもいいと思うんだ。見栄えが。
524 :
519 :04/01/19 20:35 ID:???
うーんでもそういう処理(データチェックして引っ掛かったらerror)をするって部分だから問題ないと思うんですけどね
>>523 そうそう、そうした方が自分的に見やすいんで、その形で統一しようかと思ったわけです
ま、処理の速さとかには変わりないんだと思うんで、自分で判断します。
お騒がせしました。
>>505 IO::FileかFileHandleかApache::Fileを使う。
>>510 encoding使ってる?
それと、その正規表現はnamexやname.xxxにもマッチする。
>>524 速さが気になればBenchmark!
クセをつけよう!
>>523 &error("IDをありません。") if ($id eq "");
$id =length ($id);
&error("IDが長すぎます。") if ($id > 8);
&error("IDが短すぎます。") if ($id < 3);
イイ!!ベンチとるソフトないですか? copal2っていう簡単なperlの実験ってか動作テストするソフト、 最近よく使ってるんだけど、 これに実行速度出てくれたらいいなと思いつつ・・他探すか。
PerlでPROXYを弾くライブラリみたいなのってありませんか?
>>528 いやあの……ネタ?
Perl には Benchmark モジュールと言う強い味方がいるのに、
どうしてわざわざ別のソフトを……。
ソフトで簡単なスクリプト書いて動作実験するときにポンッとどっかに実行速度0.何秒って出てたらええやん?素敵やん?
関西弁だとちっとも素敵に思えない
unix 系なら time ./foo.pl
関西弁ってかいうか伸介やん?
便乗質問なんですけど・・・ ソフトウェア毎のCPU負荷率を、計測するソフトご存知の方はいませんか?(GUI Windows全体の負荷率を、計測出来るものは色々あるようなんですが・・。 #かなりスレ違いですね…。 知ってる方が居たら教すてください。
そんなものはない
>536 タスクマネージャ
539 :
536 :04/01/20 07:51 ID:???
>539 Ctrl+Alt+Del
Ctrl+Shift+Esc
ファイル名を指定して実行→taskmgr
>507 余談だけどテンプレート使う時はHTML::Templateとかみたいにタグかコメントを使った方が良いよ。 <HOGE>とか<!--HOGE-->みたいに。 自分なら後者選ぶかな。 #まあテンプレート中に素の文を全く入れないとか絶対に被らないと言うのなら別に良い
広告スクリプトでソケットを使って代理店に取りに行って表示ってやつなんですが、 htmlファイルからssiでad.cgiを呼んで、ad.cgi内でそれを行い、 ヘッダとしてContent-type: text/plain\n\n、 それと広告内容を返させてるんですが、 自分のサイトコンテンツのcgi(仮にtest.cgi)で表示されるページに関しては、 ssiを経由せずtest.cgiから必要な部分でrequireを使い、このad.cgiを呼んで 広告内容*だけ*を返させたいのですが、当然 Content-type: text/plain\n\n←コレも一緒に返ってきてしまいます。 で、対策を考えたんですが、 「ssiで呼ばれたかどうかを確認するすべがある」 「requireで呼ばれたかどうかを確認するすべがある」 どちらかができればヘッダをつけるかどうかを分岐できると思います。 そのような関数とかってありますでしょうか? また無ければ、どのようにしたら可能orどうあがいても不可能を教えていただけませんか?
for(@LOG){ my($dammy,$no)=split(/<>/,$_); for(@LOG){ my($dammy,$no2,$no3)=split(/<>/,$_); if($no eq "$no3"){ print "LOG"; for(@LOG){ my($dammy,$no4,$no5)=split(/<>/,$_); if($no2 eq "$no5"){ print "LOG"; } } } } } を1,2回のforルーチンで処理することってできますできますでしょうか?
>>545 ループを減らす以前にこれで目的に適った結果が得られているのか?
やりたいことをわかるように文章で書いてみ
547 :
545 :04/01/20 16:37 ID:???
LOG1 LOG1の返信 LOG1の返信の返信 LOG1の返信の返信の返信 のような感じの目的に適った結果は得られましたが、 この方法では返信の階層数の3階層になってしまいます。 無限階層の返信がやりたいです。 どうか、ご教授おねがいいたします。
548 :
545 :04/01/20 16:39 ID:???
間違い 階層数の3階層になってしまいます。 訂正 階層数が3階層になってしまいます。
549 :
nobodyさん :04/01/20 17:00 ID:MBAxoXoZ
<input type="hidden" name="hoge" value="あああ"> <input type="hidden" name="hoge" value="いいい"> <input type="hidden" name="hoge" value="ううう"> nameが同じ場合はどのようにパラメータを取得したら良いですか?
551 :
545 :04/01/20 17:06 ID:???
LOG1の返信 LOG1の返信の返信 すいません。 こんな感じです。
>>549 &で切ってそれをまた切ったのを$keyと$valueとかに入れて
ハッシュなりに入れてるでしょ?
$in{$key} = $value;こんなんとか、
$hoge = $value if $key eq "hoge";って感じに。
これを
push (@hoge,$value) if $key eq "hoge";
みたいに配列に入れたら?
Dummy<>ID<>返信元のIDってデータ構造? だとしたら、返信元のツリーを辿るには再帰を使うのが自然。 sub foo { my ($id) = @_; for (@LOG) { my $pid = (split/<>/)[2]; if ($id eq $pid) { print "LOG"; foo($pid); } } } for (@LOG) { foo( (split/<>/)[1] ); } 因みに元のスクリプト見ても、捕捉説明読んでも、何の事だか全く分からなかったので、 メールのスレッド表示みたいな事をしたいんだな、と推測。
554 :
545 :04/01/20 17:41 ID:???
>>553 無事にできました。
ありがとうございました。
あの
>>544 なんですが、やはり方法無いでしょうか。
やっぱり2つのCGIにわけるしかないのですかね
>>544 ($0 =~ /ad\.cgi/) and print "Content-type: text/plain\n\n";
でどう?
↓adじゃなくてtestですよね? ($0 =~ /test\.cgi/) and print "Content-type: text/plain\n\n"; >$0 : 実行している perl スクリプトのファイル名。 $0 に代入を行なうと、ps(1) プログラムが参照する引数領域を変更する。 あぁ、これでいけそうですね。今、邪道ですがtest.cgiで使ってる変数($bar)をつかって print "Content-type: text/plain\n\n" if (!$bar); と書いて組み直し始めたところだったんですけど、後で$0でやってみます。 有難うございました
if($sort_no){@road_list=reverse sort{(split(/<>/,$a))[0] <=> (split(/<>/,$b))[0]}@road_list;} else{@road_list=sort{(split(/<>/,$a))[18] <=> (split(/<>/,$b))[18]}@road_list;} これを日本語に訳すとどういう処理になりますか?
if ( $sort_no ) { @road_list = reverse sort { (split(/<>/,$a))[0] <=> (split(/<>/,$b))[0] } @road_list; } else { @road_list = sort { (split(/<>/,$a))[18] <=> (split(/<>/,$b))[18] } @road_list; } ……KENT? いやしかし、これが読めないとなったらかなり困るだろうに。 お前はこれを何をしているものなのか、少しは考えたんだろう。 その考えを述べよ。それに対してコメントを入れる形での回答ならしてもいい。
しかし……なんか生理的に汚いと感じてしまうな、このコード。 特に前半のソートとか。 なんでreverseを使っているのかと。 拡張性もないし。
561 :
nobodyさん :04/01/21 00:55 ID:i185C90e
ポケットリファレンスで調べたところsplitは文字列を分割する………………と
562 :
nobodyさん :04/01/21 00:56 ID:i185C90e
ポケットリファレンスで調べたところreverseはリスト値を逆順に並べ替える………………と
[0]と[18]が何の数字かワカリマセヌ
言うならまだどうのつるぎとかわのたてなんですよ。
>>563 数字の意味をお前がわからないのにこっちがわかるわけないだろう?
後、sort もきっちり読んどけ。
それと配列のところも。
マジ、汚いソースだ。
多分これは、掲示板か何かの書き込みデータを、表示する時にどんな風に並べ替えるかの部分だろう。
@road_listには、書き込みデータが入っていて、
$road_list[n]は、一つの書き込みデータになっているんだろう。
そして、一行は、
data0<>data1<>data2<>...
のような構造になっているんだろう。
(<>なんてデリミタを使ってるのは、KENTかKENTで学んでまだその影響から抜けられない連中だろうからな)
この時、並べ替えの基準を、<>で区切ったデータの左から数えて0番目か18番目するか、
$sort_noの真偽で振り分けてる訳だ。
この数字はデータの構造(項目の順番)を変えた時には当然変更しなければならない訳で、
素人が勝手な改造をした後でこの部分を変更せずにいて「おかしくなった」とか大騒ぎする一因となる。
1歩先に自己解決しました。 まさにdata0<>data1<>data2<>...になっていてdataxを2つ挿入したら動かなくなってました。 口調は荒いですが丁寧なマジレスありがとうございました。デリミタとか意味わかりませんが 皆さんKENTってサイトで学んでいくもんなんでしょうか? それにしてもコードが綺麗汚いってどうやったらわかるもんなんでしょうか。 そういう関係のお仕事に就かれているとか?
<>よく使うけど、なんか問題あるの? BBSの投稿とかってだいたい<,>に置換させるし、いいと思ったけど。 <>じゃなければ,か\tとか?
↑<,>は<、>ね。
はっきり言ってKentのソースは汚すぎて読みたくない
じゃあどこで勉強すると綺麗なのでしょうか
>>570 コメントなしの自分のソースを1週間後に見て理解できれば綺麗なソース。
日々の精進でつ。
>>569 綺麗な方だと思う。
C-B○ard見た後に見てみろよ。ほっとするぞ。
CじゃなくてChildだったかな。
俺もKENTに学んだ覚えはないが<>を使ってる。
見やすいからじゃないかな。 俺も前は<>を使ってた。 何となく , かtab に変更したけど。
データとしてありえないコードだったらデリミタ/セパレータはなんだっていいよ。 サニタイズしてデータに保存することが前提だったら<>はデータとしてありえない。 保存する文字コードが決めうちなら別に2バイト消費する必要性もないといえばない。
既存のモジュール(Text::CSV, DBI/DBD) を使うのはあまり普通じゃないのか。
>>577 最近知ったばかりで、言いたいだけちゃうんかと。
580 :
nobodyさん :04/01/21 10:35 ID:mIVImWGJ
ぶっちゃけ、WEB関係は、TSVが一番いいと思う。 \0使う人居るけど、\0とか使うと、エディタとかで編集しにくくなるし。 フォームからは普通タブは送信されないはずだがら捨てちゃっていいと思う。 というか、デコード時に、 s/[\x00-\x09\x0b\x0c\x0e-\x1f]|\x7f//g; で改行以外のコントロール文字は捨てとかないと危険。 俺、うぜぇ_?
まぁ・・そんなところ
583 :
nobodyさん :04/01/21 14:18 ID:oKdmLhYc
utf-8 を扱うスクリプトを書きたくて、 ひとまず実験として以下のようなコードを書いて これをコマンドプロンプトから試したら正常に実行されました。 しかしWEBブラウザから試してみたら「500 Internal Server Error」が返ってきてしまいました。 #!/usr/local/bin/perl use Encode; print "Content-type: text/plain\n\n"; print "あいうえお"; どうやら「use Encode;」の部分がダメらしいんですが、 理由が全然わかりません…。 ちなみに環境は Active Perl 5.8.2 です。
ごめん。Perl 5.8.2で動かしたのか。逝ってきます。
587 :
583 :04/01/21 15:59 ID:???
うわあぁぁゴメンナサイーー!! 実は私、Perl5.6 と Perl5.8 を共存させてるんですが まちがえて 5.6 のほうで試してました… そりゃあ 5.6 には Encode.pm はない罠… 本当にすみませんすみません でもここで疑問が。 コマンドプロンプトで試したときも Perl5.6 で動かしたはずなのに どうしてエラーにならないんでしょう?
>>853 ファイルの実行権は?
ファイルのエンコードは?
どうやって保存した。どうやって確認した?
又、サーバーにアップロードして実行した場合はFTPクライアントの設定で変更されていないかも確認する。
コマンドプロンプトから試したと言うのは、どうやって?
./foo.cgi
perl ./foo.cgi
/usr/local/bin/perl ./foo.cgi
perlのパスとバージョンは合ってる?
/usr/local/bin/perl -v
複数のバージョンが混在している事もあるので注意。
ファイルの先頭にBOM付いていない?
一般的な問題からunicode特有の問題まで。
原因は色々と考えられるけど、エラーログを見ればすぐ解決すると思うよ。
500 Internal Server Errorじゃなくて、サーバーのerror.logのメッセージを提示しよう。
>>562 そういう意味じゃなくて、
この場合$a,$bを逆にすれば逆順になるんだからreverseいらないだろ。
590 :
583 :04/01/21 16:28 ID:???
余談ですが、私のPCには
Perl 5.6 が c:/usr/local/bin/perl
Perl 5.8 が c:/usr/bin/perl
にインストールされてます。
5.8 はutf8が使いたくて本日導入したんですが
今までのクセでcgiファイルの1行目に
#!/usr/local/bin/perl
って書いてしまっていたのでした…(重ね重ねお騒がせ致しました)。
>>588 コマンドプロンプトから試したときは
perl c:\cgi\test.cgi
という風に実行しました。
スクリプト本体は Shift_JIS です。
で、ご指摘のとおり apache の error.log を見たら
Can't locate Encode.pm in...(以下略)
と書いてあったのでようやく気がついた次第です(お恥ずかしい)
>>590 perl c:\cgi\test.cgi
これだとtest.cgiの#!行はコメントとして解釈されるので、
どっちのperlで実行されるかは、環境変数のPATH次第です。
c:\usr\local\bin\perl c:\cgi\test.cgi
c:\usr\bin\perl c:\cgi\test.cgi
で試してみると、どちらのバージョンでエラーが出たのか明白だと思います。
>>580 おおむね同意。
TSVもいいが、CSVも一応視野に入れておきたいところ。
Excelでどーのこーの言うところに、システム納品することだってあるだろうし。
タブ区切りでも、エディタで開いて全選択コピー、Excelにはりつけってすればいいんだけど、
1ステップ余計にかかるのは辛いよね。
逆は面倒だけど、TSVからCSVには簡単に変換できるし。
Kentで<>を使っているのは、タグ抜きで<>が入らないからだよね。多分。
>>580 のような処理が無かったと思うから、”Kentでは”妥当だと思う。
初心者には分かりやすいけど、突き詰めればTSVやCSVが良いんだろうね。
<>はどうせタグ無効化で重複する事がないからそれを使ってた。 カンマ区切りだとカンマもエスケープしないといけなくなるから面倒。 とは言え、最近はタブ区切りを使い始めている俺。 区切りが崩れないように入力されたタブは に変換してる。 &am;nbsp;だと一部のブラウザで化けるから。
最後の一行は の間違い。
?は良い手だね。うちは, の2バイトで区切ってる。 , がきたら,の1バイトにしてる。 って、よく考えたらあまり意味なさそうなんで?x2C;にしようかな。 んで、これ↓が気になる。 >&am;nbsp;だと一部のブラウザで化けるから。 が化けることってあったっけ?普通の1スペースが消えちゃうブラウザは知ってるけど。
あー、やっちまった。 もうちょっと気の利いたサニタイズして欲しいなぁ。
>596 は0xA0であり0x20じゃない。 この差のせいかブラウザによって「・」とか「?」に見えてしまったりもするらしい。
ほんとだ。過去にNNとかで化けたらしいね。 ということは   とかがいいのかな?半角スペース。
すいません。なんか思うように動いてくれなくて、 どうやらここがおかしそうだって所は見つけて解決したようなしてないような・・ ってな感じなんで、ちょっと質問させてください。 、 POSTで送るデータの中に<とかが入ってる場合、 それを受け取り処理してるときに気づいたんですが、 どうやら勝手に<等に変換されてるようなのですが、 そういうものなのでしょうか?
実際にやってみれ。 標準入力をテキストにそのまま出力するだけのCGIを作って、 ブラウザでアクセスして起動させ、 その後FTPでテキストをダウンロードして調べれば、 どの部分でその変換がかかってるのか一撃だろ。
いやテストしてみてそうなったんですが、 google等で検索してみてもそういう記述が見当らなかったので、 それは自分の環境だけじゃなくてどの環境でもそうなることなのかな? って疑問に思ったわけなんですが。
暇なので
>>601 の通りにやってみたら
< は %26lt%3B になって格納されたよ
環境は debian sid + apache 1.3.29 だが
ちなみに
標準入力直接でなく CGI.pm 使って引数を取ってきたら
< が < になって格納されたよ
ごめんなさい。全く一緒のテストしたわけじゃなかったんでおそらく誤解を招きました。
で、結局解りました。
要は<input type="hidden"...>のvalueで&や"などを埋め込み、
そのデータをcgiに渡したときに全てが「&」や「"」に変換されてて困ってたんです。
ソースを見てもちゃんと&や"と書かれているのに何故だろうと・・
その後、<input type="text"...>でブラウザから&や"を打ち込み、
テストしてみた結果、おそらく
>>603 さんと同じような結果になり
ますます意味不明になりました。
で、<input type="text"...>のvalueにあらかじめ&、"を入れてる状態で
ブラウザからアクセスしそのクエリを送信したら、やっとわかりました。
結果はhiddenのときのように&と"に変換?されてたんですが、
つまり&でエスケープ(とは言わないのかな?)した文字はそれをブラウザで表示した時点で
ブラウザ側は&や"と認識するんだと思うんですが、
いくらソースを除いてvalueに&とかかれてても、
ブラウザは認識した&を送信するんだなと・・というかそれが当然なんだろうけど・・
多分言ってること???だと思いますが
なんしか解決しました。すいませんでした。
追加
受け取ったデータはそのままだと
>>603 さんのような状態です。
URIデコードでしたっけ?をしてます。
それと「当たり前だろゴラァ」って言われそうですが、NNでも同じ結果でした。
<input type="hidden" name="p" value="<" /> → '<' # html 的に(゚Д゚)マズー <input type="hidden" name="p" value="<" /> → '<' # オッケー <input type="hidden" name="p" value="<" /> → '<' あとは CGI.pm 使ってるなら autoEscape(0)。
<input type="hidden" name="p" value="<" /> → '<' # html 的に(゚Д゚)マズー <input type="hidden" name="p" value="<" /> → '<' # オッケー <input type="hidden" name="p" value="&lt;" /> → '<' ……の間違い
608 :
nobodyさん :04/01/22 16:56 ID:QiMlWclT
perl でクラスのメソッドから同クラス内のメソッド呼び出したいんですが どうも思った通りに動いてくれません。 例えば下のようなコード sub1はメインからの呼び出しのみ sub2はメインからも、別メソッドからも呼び出される $a = class(); $a->sub2(1, 2); #期待通り $a->sub1(1, 2); #これの表示がうまく行かない package class; sub sub1{ my $self = shift; my $a = shift; $a++; sub2(shift, $a); #sub2に引数を渡して実行したい どうもここが怪しい } sub sub2{ my $self = shift; print shift*shift; }
>>608 sub2(shift, $a); 引数の数が足りないから。
$a->sub2(1, 2)は、class::sub2($a, 1, 2)のシンタックスシュガーと考えると
sub1内から関数として呼び出してるのとメソッドとして呼び出す方法の違いが分かると思う。
それ以前に、Perlでのクラスの使い方が怪しいのだけど。
my $obj = MyClass->new;
$obj->sub1(1, 2);
$obj->sub2(1, 2);
{
package MyClass;
sub new($){
my($class) = @_;
bless({}, $class);
}
sub sub1($$$){
my($self, $num1, $num2)=@_;
$self->sub1($num1+1, $num2);
}
sub sub2($$$){
my($self, $num1, $num2)=@_;
print $num1*$num2;
}
}
610 :
nobodyさん :04/01/22 19:14 ID:cuVJR6Vk
質問なんですが 今、配列へのリファレンスを値にもつハッシュがあるんですが Ex my %arrayRefHash; $arrayRefHash{one} = [ "a", "b", "c"]; $arrayRefHash{two} = [ "d", "e", "f"]; このときに、$arrayRefHash{one}がリファレンスを持つ配列に 要素を追加しようとしたんですが、 push( @$arrayRefHash{one}, "d"); では上手くいきませんでした。 Global symbol "$arrayRefHash" requires explicit package name 多分、$arrayRefHashを変数値としてみてるとおもうんですが どうすれば配列として参照できるんでしょうか
>>610 @{$arrayRefHash{one}}
ラジオボタンで送信ボタンをつくらずにチェックしただけでデータを入力することはできますか?
無理。javascriptあたりでできる・・かな?
>>612 スレ違いじゃないかな?perl/tkか?
Client side のscriptの話だとすれば、
ラジオボタンのonclickイベントに記述すれば出来るよ。
データの入力が何を指してるのか解らないけど、
送信するんだったら、formオブジェクトのsubmitメソッドを呼ぶ。
615 :
608 :04/01/22 21:26 ID:???
>>609 どうもありがとう
$self->メソッドで、一応やりたい事は出来るみたいでした
多少省略した部分もありますが
perlは過去に我流で勉強しただけで、普段は一切使っていないのと
クラスを覚えてみようと、今日はじめて使ってみてたので
怪しいのは確実に間違いないです
ついでに一つ質問なんですが
関数の()内の$と$$$の違いって何ですか?
eval-blockのなかでmy宣言した変数はそのブロック内だけで有効だが eval-blockの直前でmy宣言した変数はevalブロック内でも有効 この認識はあってますでしょうか?
617 :
nobodyさん :04/01/22 23:03 ID:cVoSkmv9
つい最近Perlを始めて動作確認をしようと思ったんですけど、 ---------- #!usr/bin/perl print<<"EOM"; Content-type: text/html Hello!! EOM ---------- と入力した.cgiファイルを何度実行しても500エラーになります。 どこかマズいところありますか?
618 :
617 :04/01/22 23:05 ID:cVoSkmv9
すいません。1行目は #!/usr/bin/perl です。
619 :
616 :04/01/22 23:13 ID:???
>>617 パーミッションは変えた?
perlへのパスはあってる?
その前に何処でテストしてるの?
鯖なら転送モードは?
ローカルならエラーログみてみたら?
#そんなことより私のを・・eval-blockはeval { ... }のことです。。。
>>617 良い機会だから、どのようなエラーが出てるか確認してみよう。
>>616 =619
そんなことより君の方こそテストして確かめたら?
622 :
617 :04/01/22 23:24 ID:cVoSkmv9
>>619 あ、割り込んじゃってすいませんm(_ _)m
一応ローカルでやってます。
パーミッションは755にしました。Perlのパスは確認しました。
エラーログには
Premature end of script headers
と書いてあります。script headerってなんですか?
>>615 Perlの場合、目的によってはそういう使い方する時もあるんだけど。
なるべく、クラスのインスタンスを作成するには blessを使おう。
インスタンスを作成せずクラスメソッドして呼び出すには、 class::sub1(1,2)
この場合の引数は、(1,2)のみ。メソッドとして呼び出された時のように
第一引数にパッケージ名は渡されないので注意。
($) ($$$)は、関数のプロトタイプ宣言だよ。perldoc perlsub
>>616 Yes
>>617 >何度実行しても500エラーになります。
とりあえず、回数は関係ないと思うよ。
>>621 テストして確かめたからこの認識であってるか聞いてるんだろうがヴォケ
print &test1;
sub test1 {
eval {
my $a1 = "hoge";
};
return $a1;
}
-------------
結果 なんもナシ
------------------------------------
print &test1;
sub test1 {
my $a1 = "hoge";
eval {
return $a1;
};
}
-------------
結果 hoge
>>625 ありがd・・・。
取り乱しました。ほんとにすいませんでした。
628 :
nobodyさん :04/01/22 23:40 ID:RMqKCSAk
javaスクリプトでしかできないんですか? 普通のperlでやりたいんですけど。 送信内容は例えば ◎ 新品 ◎中古 とかで value = 0; value = 1; みたいな変数です。
>>628 だからサーバーサイドだけでは無理だっつーの
サーバーサイド+クライアントサイドで実現できんじゃねーの?
631 :
nobodyさん :04/01/22 23:46 ID:nXgdKjbn
こんばんは cgiのデータをテンプレートhtmlに埋め込んで表示とかしてるんですが、サーバを変えたら表示結果が文字化けして困っています。 (エンコードの初期設定が西ヨーロッパ言語になってしまう・エンコード日本語シフトjisに変えれば正しく表示されます。) 良きアドバイスを頂けませんか?非常に困っています。
632 :
631 :04/01/22 23:48 ID:nXgdKjbn
一部訂正です cgiのデータ→cgiでの処理結果のデータ
>>631 >cgiのデータをテンプレートhtmlに埋め込んで
がよーわからんが、htmlファイルにmetaでキャラセットを設定したら?sjisに
634 :
631 :04/01/22 23:53 ID:nXgdKjbn
いままでのサーバで正常だったのが気になります・・・
635 :
612 :04/01/22 23:54 ID:RMqKCSAk
>>630 すみません。具体的にはどのような方法ですか?
CGIでは無理ということですか?
>>612 しつこいぞテメェ。もう答えは出てんだからうせろ。
>>634 サーバ変われば世界が変わる。
>>635 とりあえずCGIとPerlは違うぞ、とお決まりの一言。
まぁJavaScriptでやるのが妥当だと思う。
>>635 具体的か、、んとねぇベルトある?
あれをねぇ、こう何処か高くて丈夫なところに固定するんだわ
でねぇ、椅子を持ってきて椅子に立ってから首にそのベルトかけて
一気に躊躇せず椅子をけり倒すのよ。
要するに氏ねってこった
>>612 みたいに親切に答てくれている人のレスを無視してどうやるの?を繰り返すアホが一番嫌われる。
>>635 うるせーぼけ、CGIが一体どんな仕組みで動いてるのかから勉強しなおしやがれ。
とにかくお前のやりたいことを言葉を尽くして説明してみろ。
そしたら適切なスレに誘導も、無理だと判断するのもできるだろうに。
まあ、普通だったら、
>>612 の回答で充分なんだがな。
そしてWeb製作板のJavaScriptスレにいけ。
もし万が一、「ブラウザで表示している画面は変えずに鯖にデータを送る」とかだったら、
それこそhttpプロトコルのステータスから勉強しないと駄目だろうけどな。
>>628 Client side PerlScript使えば出来るよ。頑張って。
>>631 A.サーバーのhttpd.confや.htaccess で設定。(アクセスされるのがhtmlファイルなら)
AddType "text/html; charset=Shift_JIS" .html
B.CGIでHTTPの応答ヘッダにcharset指定を出力する。
print "Content-type: text/html;charset=Shift_JIS\n\n";
C.HTML内のMETAタグで指定。
<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS" />
>>631 気になるも何も、ただの偶然だろ。
HTMLなら、headの中にmetaタグで文字コード指定するのは作法だし、
CGIでも、ヘッダー吐き出す時に文字コードを指定することもできる。
二重の方法で文字コードを(特に苦労もなく)指定させられるんだから、
できるだけのことをしておくのがいいんだ。そうすれば悩まなくて済むんだから。
643 :
612 :04/01/23 00:03 ID:xQAZE2aU
アイムソリー janeのナンバーずれててわからんかった。
644 :
612 :04/01/23 00:10 ID:???
申し訳ありませんでした。もう消えますけど >>もし万が一、「ブラウザで表示している画面は変えずに鯖にデータを送る」とかだったら、 それこそhttpプロトコルのステータスから勉強しないと駄目だろうけどな。 そのとおりのようです…。 さようなら…。
↓次どうぞ
646 :
631 :04/01/23 00:14 ID:pEpaeS+A
>>642 ありがとうございます。
運用上、現ソースを変えずに対応できたら・・・と考えていましたが変えるのが一番ですね、やってみます。
647 :
617 :04/01/23 00:30 ID:RailRybc
>>623 ありがとうございました。解決しました。
>>631 違う。ソース変える必要は"たぶん"ない
httpd.conf で、 AddDefaultCharset が on になってるだけだろ
>>もし万が一、「ブラウザで表示している画面は変えずに鯖にデータを送る」とかだったら、 それこそhttpプロトコルのステータスから勉強しないと駄目だろうけどな。 元の質問からそこまで読めなかったなぁ。 でも、通常のCGIではステータスコード返せないんじゃなかった? nph scriptの他に、見かけだけの動作でも良いのなら、 HTMLだけでも幅ゼロのフレーム作ってformタグのターゲット属性で指定って方法もあるよ。
metaタグ、ヘッダ(AddDefaultCharset)のほかにYahooみたいな手もあるよ。 今見たらソースの頭に 京 が入ってた。EUCで。
まさか今の世の中に「京」の話題を聞くとは思わなんだな。
ローカルでテストしてるときに apacheを立ち上げ、ブラウザでテストしapacheを終了すると DOS窓が開いて普段は1秒位で終了してくれるんですが、 処理によっては終了までに5秒くらいかかるのがあります。 こういうのはコードが悪くてどこかで処理が残ってると考えてたんですけど、 どういう理由が考えられるんでしょうか それと、そういう場合に虫を見つけ、デバックする方法はないでしょうか?
654 :
nobodyさん :04/01/23 12:51 ID:38BHYMJU
main.txtに、test1.txt、test2.txt・・・・test10.textを 書き込みたいのですが、各ファイルの文字列を配列に入れて、 main.txtに書き込むというやり方しか思いつきません(下記)。 直接ファイルをファイルに書き込む方法は無いのでしょうか? for($x=1; $x<3; $x++){ open (FH,"kare${x}.wrl"); push(@list,<FH>,"\n\n"); close(FH); } open (FH,">>vmain.wrl"); for($i=0; $i<@list; $i++){ print FH "$list[$i]"; } close(FH);
% cat test1.txt test2.txt … test10.txt > main.txt
>>654 open MAIN, ">> main" or die;
for (map {"text".$_.".txt"} (1..3) ) {
my $buff = "";
open F, $_ or die;
print MAIN $buff while (read(F, $buff, 1024));
close F;
}
close MAIN;
657 :
nobodyさん :04/01/23 17:01 ID:ljQVqc4q
print "Location: URL\n\n"; でターゲット指定はできますか?
>> 656
何かそのmapの使い方には違和感を感じるぞぉ。
素直に open F, "text$_.txt" でいいんじゃない?
>>657 フレームのターゲット指定の事なら出来ないよ
660 :
質問者 :04/01/23 22:31 ID:???
チャット作成についてなのですが、perlのweb cgi でリアルタイムチャットと言うのは可能なのでしょうか。 ポートを作ってそこに誘導すると出来るとか何とか聞いたのですが、 1.誘導の仕方 2.ブラウザからサーバにデータを送る方法 3.サーバで処理したデータをクライアントに送信して反映させる方法 がわかりません(ネットワーク関係です) 概念だけでも良いのでどなたかお教えいただけないでしょうか。
>>660 ぱっと考えてCGIだけでは概念的に無理そうに思うが
「ポートを作る」と言っているところを見ると、
まさか、portをlistenするdaemonみたいなプロセスをCGIの子プロセスとしてforkする、
あるいはCGI自身がそういうプロセスになる(普通timeoutがあるから難しそうだが)
てことか?
662 :
nobodyさん :04/01/23 23:31 ID:cIyX/bzQ
現在ログをHTMLファイルとして吐き出す掲示板を作っています。 動作自体は問題ないのですが、HTMLをファイルとして吐き出す性質上、 パーミッションが606にならざるを得ません。 こうしたHTMLファイルをサーバー上に置いた場合、外部から書き換えられる 危険性があるでしょうか。 まあ、普通の掲示板のログファイルが勝手に書き換えられるというのも聞かない ので大丈夫だと思うのですが。 スクリプトでも埋め込まれると目も当てられないので。 ちと板違いな気もするけど、CGI作成上の問題ということでお許しを。
664 :
660 :04/01/23 23:56 ID:hLe3gFVq
>>661 解凍ありがとうございます。
やり方も全くわからないんですよ。前に一度見たことあるような気もしたんですが行方不明。
人からポートが何とかと聞いたので気になりまして。
新しいプロセスで作る…ですか。それかも知れません。(自作のウェブサーバーに置くので)
しかしブラウザとperlでリアルタイムはできるのでしょうか…。
…回答ありがとうございます(訂正)
>>660 HTMLやJavaScriptでは無理なので、比較的多くのブラウザが
対応しているJavaAppletやflashを使う。
JavaAppletやflashが特定のポートに接続することでデータのやり取りを行う。
サーバ側の仕組みは、CGIっていうよりwebサーバとかと同等のサーバ機能だね。
サーバ側は特定のポートを使える言語であれば何で書いても構わない。
もちろんperlでも可能。
「perl ソケット ポート番号」でググればどんな感じか掴めるんじゃないかなぁ。
668 :
nobodyさん :04/01/24 11:40 ID:3XmXG5Te
>>667 ありがとうございます。javaapplet行ってきます。
669 :
nobodyさん :04/01/24 15:46 ID:RywpiCe0
foreach $n (a,b,c,d) { &sub hoge($n); } これを順番どおりにやっていると遅くなるので、 &sub hoge(a)と&sub hoge(b)と&sub hoge(c)と&sub hoge(d)を 同時にやらせたいのですが、どんな方法がありますか?
>>669 そのソースは動かないだろ
671 :
660 :04/01/24 16:24 ID:3XmXG5Te
672 :
660 :04/01/24 16:27 ID:3XmXG5Te
失礼…。「相手のブラウザに送信して反映させることは可能なのでしょうか」 すみません
673 :
nobodyさん :04/01/24 16:29 ID:ShluMD4z
Webプログラミングの初心者なのですが、基本的なことについて教えてください。 ローカルマシンにあるperlプログラムをHTMLから起動するには どのように記述したらよいのでしょうか? 動的にHTMLを生成とかではなくて、 とりあえずCドライブにあるperlを起動したいだけなんですが。 教えてくんですみませんが、ご教示ください。
少なくとも、ローカルマシン上でWWWサーバが起動してないと無理
ローカルに自鯖を立てなさい。
>>671 相手のブラウザをリモートから強制的にリロードさせてるんじゃなくて
JavaScriptで毎秒データを更新してるんでは?
677 :
nobodyさん :04/01/24 16:46 ID:ShluMD4z
>>674 >>675 言葉足らずでした。
ローカルマシン上でwwwサーバ起動してます。
<A NAME="test"
HREF="c:\test\test.pl">テスト</A>
みたいに書けば動くと思っていたのですが
「次のファイルをダウンロードしています」というメッセージが
出てきてしまうんです。
680 :
nobodyさん :04/01/24 17:07 ID:ShluMD4z
>>678 ありがとうございます。
やってみます。
681 :
nobodyさん :04/01/24 17:49 ID:3XmXG5Te
>>676 いえ、どうやらjavascriptは下スクロールだけのようです。
cも少々見たのですが、send関数という物を使って出しているような感じでした。
perlにもsendはありますがsendしても処理してくれるかどうか…。と気になりました。
>>681 それCGIじゃないぞ。
チャット処理専用の簡易WEB鯖をつくってる。
TimeOutさせずに接続を維持して、(HTMLも閉じずに)
メッセージが投稿されたらクライアントに渡してる。
ざっとソースを斜め読みしてみただけなので間違ってるかもしれんが
あんまり上手いもんじゃないなぁ。
683 :
nobodyさん :04/01/24 18:31 ID:3XmXG5Te
>>682 簡易webサーバー…というとポートを開放して接続を維持している点を言っているのでしょうか。
確かにcgiでは畑違いだったかも知れません…。
一つお聞きしたいのですが、「送ってる」と言うのは後半にあるsend関数でしょうか。
送るだけで大丈夫なのでしょうか。
684 :
yuki :04/01/24 18:42 ID:LIGGezky
685 :
nobodyさん :04/01/24 18:49 ID:c5PUM45j
socketで送受信するアプリは明らかにHTMLでやることじゃないな。 先に出てきたようにJavaAppletかFLASHが良いのでは?
686 :
nobodyさん :04/01/24 18:51 ID:c5PUM45j
>>684 その手には乗らない。お小遣い稼ぎはよそでやって。
ス レ 違 い の 話 題 は 他 へ 誘 導 し て 回 答 せ よ
>for( int i=0; i<MAX_CLIENTS; i++ ){ >if( to[i].IsActive() ) to[i].Send(buf); >} の部分。 鯖だって言ってるのは自分でポート開いて待ち受けして HTTPをテキトーではあるけど、解釈してるところ。 試してないから上手くいくかどうか走らんが、HTMLもソケットも閉じてないから 大丈夫なんじゃないの? ブラウザから見れば読み込みの遅いページを読み込んでる感じ。 っつーか、一つ答えたら二つ質問して返すのかオマイは。
688を書いててふと思ったけど WEB鯖のTimeOutを伸ばせば、CGIでPerlでも上手くいくかもね。 最後に無限ループさせて、チャットログに追加が合った場合、そのつどprintさせる。 JavaScriptでTimeout発生したところで再接続させるとか。 誰か書いてみない?
690 :
nobodyさん :04/01/24 19:08 ID:c5PUM45j
原理的にはうまくいくかもしれないがなんか無理やりだよな。
>>690 うん、それが682で書いた上手くないなぁの本音。
683がなんでこんな変態的なやり方に憧れてるのかは
皆目見当がつかん。
692 :
667 :04/01/24 19:23 ID:???
ブラウザがデータ受信の途中でも逐次表示するのでたまたまうまく動くって感じだよね。
目の付け所はいいと思うけど、なんか無理やりっぽくてスッキリしない。。。
つーわけで
>>667 の発言を「HTMLやJavaScriptでは難しい」に訂正しまつ。
まぁサーバ側はperlでもCでもなんでも書けるので
ブラウザ依存の話はそろそろスレ違いかな。
そうだな、 「このC++のソースをperlで書き直すにはどうしたらいいか」という話ならこのスレでもいいんだろうが、 俺はC++がわかんないのでパス
694 :
660 :04/01/24 20:47 ID:3XmXG5Te
>>688 御回答ありがとうございました。少々調子に乗ってしまい、大量に質問してしまいました。申し訳ありません
色々ヒントをいただいたのでここから先はとりあえず自力でやってみたいと思います。ありがとうございました。
>>691 いや、ここ以外にソースを見れる「リアルタイムチャット」が無かったので
皆様有難う御座いました。
695 :
nobodyさん :04/01/24 20:48 ID:WY1eQpTp
# 自分もそんな変態的なchat作ってた内の一人だったりして。
>>689 原理的にはcgiでも可能だけど、(timeoutさえ回避出来ればsocket使わずとも方法は多数有)
Chatの利用者一人一人がhttpdのコネクションをそれぞれ一つずつ占領する事になるので、httpdのパフォーマンス低下に繋がる。
通常、接続できるクライアントの数には制限があるので、運用前にはこの点をしっかり考える事。
後、ブラウザ側のTimeOutを回避するために常に何らかのデータを送り続けていないと
いけなかった(はず)// ブラウザ依存だろうけど、IE3とか4の時代だったから最近のは知らない
696 :
nobodyさん :04/01/25 00:37 ID:g1HBAOuP
JoyfulNoteで禁止ワードの機能を追加するにはどうすれば良いのですか?
作る動機が単にそう言うチャットが欲しいっていうだけなら、 JavaAppletで作ったIRCクライアントがあったような気がするから それ使うのが一番早い。 #とにかく自分で作りたいんだって思ってるなら別
698 :
nobodyさん :04/01/25 04:02 ID:A2CJsmcE
かなり悩んでます。 Perlでユーザーを追加するスクリプトをコーディングしているんですが、 パスワードの作成で躓いています。 シェルの内容は以下の通りです。 #!/usr/bin/perl open(IN, "userlist.txt"); while($user=<IN>){ @user=split(/,/,$user); `useradd $user[0]`; `passwd $user[1]`; } でuserkist.txtの内容は、 user,pass user1,pass2 です。 パスワードの設定がどうしてもうまくいきません。 どなたかご教授お願いします。
( ´,_ゝ`)プッ
bar.cgiで使ってるfoo.pl内で%param=&httpdecode();とやると空が返り、 bar.cgi内で直接%param=&httpdecode();とやると$ENV{'QUERY_STRING'} を渡した結果が返ってきます。 そういうものなんですか?
704 :
nobodyさん :04/01/25 16:45 ID:A2CJsmcE
703は黙って無視しような。
(´‐`).。o(ID…
>>703 普通は違うと思うけど。
# httpdecode()が何か知らないから、なんとも言えないけど。
707 :
703 :04/01/25 18:39 ID:???
>>706 httpdecode()はPOST(GET)データを切り分けてるだけです。
%param=&httpdecode($data)を%param=&httpdecode()としても
bar.cgi?xxx=xx&xxx=xxなデータは普通に処理していたので、はて?と。
>706の言っているように普通は違う。 だからコードに問題がある。 以上。
その前に日本語をマスターしてきてくれ
>>708 普通は空なわけですね
それがわかれば十分です
711 :
669 :04/01/25 19:28 ID:???
>>670 あわわ、失礼しました。
foreach $n (a,b,c,d) {
&hoge($n);
}
こういうのをhoge(a)とhoge(b)とhoge(c)とhoge(d)と
一緒にやらせたいのです。hogeがとても時間の掛かる処理なので。
どうやったらできるでしょうか。
>>711 一緒にやらせたところで、かかる時間は変わらないん
hoge を別プロセスにして fork すれば、一緒にやってくれるかもしれないが
>>712 の言う通りかかる時間は変わらないのが普通だろうな
>>710 何が普通かお前の言ってるだけの状況じゃ全然わからんって。
勝手に一人合点して面白い奴だな。
人の話聞かない奴だって言われないか?
>>711 変わらないね。
コンピュータは本質的にはシングルタスクだ。
マルチタスクに見えてもそれは、
一定時間Aをやって、次の一定時間はBをやって……と高速で切り替えているだけだから、
順番にやった場合に比べても時間は変わらない。
むしろ、切り替えにかかる時間を考えると逆に長くかかる。
考え方がいびつだなあ。
待ち時間がある、例えば外部サーバに問い合わせに行って戻りを待つようなケースだと、
並列化して待ち時間を重ねることによって処理時間が短くなることも場合によってはあるが、
>>711 のはそういうのじゃないんだろうなあ
たちこまですね
>>714 お前も突き放したいのか答えたいのかわからない奴だなw
>>718 態度を改めれば回答してもいいとみんな思ってるんじゃないのか?
CGIとwinアプリケーションでYahoo!メッセンジャーみたいなのを 作りたいのですが、アレの仕組みってどうなってるんですか? 俺の予想だと、 クライアントからのメッセージをサーバーサイドのスクリプトが 受信すると、それを相手側のクライアントへ送信する…ってのだと思うんです。 そうすると双方のIPアドレスに対してサーバーサイドのスクリプトが データを送受信するってことになります。 CGIから特定のwinアプリケーションに対してデータを送信することでできるのでしょうか? とりあえず、今はwinアプリケーションからCGIへのメッセージの送信はできました。 でも、手動でリロードしなきゃいけないんです。 自動でリロードしてもいいのですが、ほぼリアルタイムで会話したい場合、 2・3秒おきにリロードし続けるのって鯖への負荷って大きいですよね。 だからリロードしなくても、 CGIにデータが到着したら相手側に送信できるといいなあと思っています。 色々調べて頑張ってみます。
質問になってない。スレタイ嫁
おまえらCGICGI言ってるけどな、 CGIが何の略か分かってんの? Common Gateway Internet の略だぞ。 それぐらい知っとけよ。 ついでに他のも教えておいてやるよ。 www … World Wide Window HTTP … Hyper Text Tensou Protocol FTP … File Tensou Protocol POP … Professional Office Protocol (POP2とPOP3とあるが、前者は平成2年に定義され、後者は平成3年に定義された。 その簡便さから現在はPOP3が広く利用されている) PFW … Private Fire Wall CSS … Compact Style Sheet document HTML … Hyper Text Multiaccess Language URL … Useful Resource Locator
>>720 サーバ上のCGIからPC上のブラウザにメッセージをプッシュすることは通常できない。
ブラウザというものが、サーバからプッシュされてくるメッセージを
受け取れる作りになってないから。
サーバ上のCGIからPC上のYahooMessengerにメッセージを送ることなら
Net::YahooMessenger とか使えばできんこともない。
YahooMessengerはメッセージを受け取れる作りになっているから。
ついでに言うと、YahooMessengerの動きについての君の予想は完璧に間違っていて、
メッセージのやりとりはサーバを経由しない。
PC1からPC2に直にパケットが飛ぶ。俗に言うP2Pだ。
つまりCGIともWWWとも関係ないのね。
なので、みんな「そういうのは板違いだ」と怒ってるという話。
724 :
nobodyさん :04/01/26 17:24 ID:cjaNnlMT
print "Content-type:text/html\n\n"; CGIレスキューのフォームデコード処理 $FORM{$name} = $value; } @ID = ("aaa","bbb","ccc"); @PW = ("111","222","333"); $ID = $FORM{'id'}; $PW = $FORM{'pw'}; if ($FORM{'pw'} eq $PW[$_] && $FORM{'id'} eq $ID[$_] && $ID[$_] == $PW[$_]) { print <<"EOF"; <html><head></head><body>OK</body></html> EOF } else { print <<"EOF"; <html><head></head><body>NO</body></html> EOF exit; } CGIレスキューのやつなんですが、ちょっと書き換えたらダメになりました $ID[0]と$PW[0]が合ってるときしか、OKになりません $ID[1]"bbb"さんと$PW[1]"222"を関連付けたりってどうやるんですか お願いします
725 :
◆ymwwFPCsCI :04/01/26 17:42 ID:Aup+rhTJ
本当にくだらない質問ですけど怒らないで下さい。 Linuxを使っていて、ユーザーの自動追加スクリプトを 書いています。 useraddコマンドとpasswdコマンドを自動的に発行するスクリプトは どのようにコーディングすればいいのでしょうか?
726 :
FTP :04/01/26 17:55 ID:D6YSJ/rJ
FTP … File Tensou Protocolなのかぁ〜
File Transfer Protocol と思ってたよ。
有賀と
>>722
cgiってファイルの削除できないんですか? 1年ほど自分の作ったcgiでうpロダやってるのですが、いつも手動です。 フォームに"削除"という項目があり、 該当ファイルNOと削除PASSを放り込めばとりあえず そのファイルにアクセスすることはできなくなるんですけど… 実際のところ、renameで別のファイル名に変えてるだけで削除されてないんですよねw 削除したファイルはDL可能なときのファイル名の先頭に「dust」ってついけてrenameしてます。 「img01762.jpg」→「dustimg01762.jpg」みたいな感じです。 それでファイル名の先頭に「dust」ってついたやつがたまってきたらそれを手動で削除してるんですけど。 Win鯖だから大した作業じゃないけどcgiで削除できたら楽なのに・・・と思ってます。 何かよい方法があれば教えてください。
729 :
FTP :04/01/26 18:02 ID:D6YSJ/rJ
あとはわかるだろ!
>>724 $ID[$_] == $PW[$_]
ってあるじゃん。そりゃ$ID[n]と$PW[n]が同じ数値である時しか一緒にならんよ
>>725 怒んないけど呆れることもある。
>>722 この国はITをいんたーねっとてくのろじぃだと思ってるやつが首相になる国ですぜ
>>728 言い忘れた
CGI≠Perl
ここはPerlの質問するとこ
733 :
728 :04/01/26 18:10 ID:???
734 :
724 :04/01/26 18:15 ID:???
>>730 レスありがとうございます
[""]の数字が、両方0のときにしかOKにならないんです
例えば、$ID[1]と$PW[1]のときにはNOになってしまいます
foreach $_(0..2){
if ($FORM{'pw'} eq $PW[$_] && $FORM{'id'} eq $ID[$_]) {
とかやっても$IDも$PWも[0]じゃないとOKになってくれないんです
foreachって配列を0から順番に処理するんですよね?
なのに、[1]と[2]をわかってくれません
どうしたら、わかってもらえるんでしょうか
なんかうぜぇな 答える気が激萎え
>>734 foreachってのは配列の「中身」を参照する。
foreach $pass (@PW){
foreach $id (@ID){
if ($FORM{'pw'} eq $pass && $FORM{'id'} eq $id) {
#なんかの処理
}
}
}
数字で回したいのなら
for(0..$#id){
}
とか?
要は構文ミス
737 :
724 :04/01/26 18:29 ID:???
>>735 すいません…
出直してきます。ありがとうございました
738 :
724 :04/01/26 18:32 ID:???
>>736 ありがとうございます!
多分に勉強不足のようなので、出直してみます
スレ汚しすいませんでした
739 :
711 :04/01/26 18:36 ID:???
>>716 hogeの内容はデータベースへの問い合わせです。
遅いのは1プロセスあたりのリソースが制限されているからのようなのです。
(ほんとのところはわかりませんが…^^;)
試しに、リストを二分割して、2つのスクリプトで動かしたら早くなったので、
1つのスクリプトの中でプロセスを増やせたらいいのかなと。
forkしてそれぞれ別々な引数を渡すのはどうやればいいのでしょう?
>>734 多分foreachを一回しか回ってないんだよ。
>>736 foreach $pass (@PW){
foreach $id (@ID){
if ($FORM{'pw'} eq $pass && $FORM{'id'} eq $id) {
#なんかの処理
}
}
}
そりゃねぇよ
別人のIDとパスで一致することも有り得るじゃん
print "\n \x23 \n"; $aa = 0x23; print "\n \x$aa \n"; sleep(8); 上の出力は#が出ますが、下のは出ませんでした。 変数で数字を指定するにはどのように記述すればよいでしょうか?
>>742 print"\n \x".$aa." \n";
かな?
わかんねーけど。
age
745 :
742 :04/01/26 19:21 ID:???
>>743 ちょっと違うような気がするんですが。。
print >> "hoge" このなかで関数を開くことはできないのでしょうか? 1+5 = &Culc(1, 5);とか。 hoge
>>742 print "\n ". chr($aa) . " \n";
>>746 君は今日のおっちょこちょいさん大賞だ。
sub calc { return $_[0] + $_[1] }
print <<"hoge";
1 + 5 = @{[ calc(1, 5) ]}
hoge
748 :
743 :04/01/26 19:55 ID:???
749 :
742 :04/01/26 21:00 ID:???
>>725 useraddはsystemで呼び出す。
passwdは--stdinオプション付けてパイプで流し込む。
$aa = 0x23; printf qq|\n %c \n|,$aa; こゆのも。。。
752 :
nobodyさん :04/01/26 21:42 ID:KP+mPnoD
スレ違いだったらすいません。 apeboard+を使ってます。 掲示板に書き込んで、そのページのソースを見ると、 <!--res--> とあるんですが、それを出ないようにできませんか? ちなみにcgi本体もスキンも弄ってません。
754 :
:04/01/26 22:37 ID:???
なんでいまどきPerlなんですか?
>>754 なんでいまどきそんなことを聞くんですか?
何言ってんだYO!今はperlがナウいんだYO!ヤングな女子高生も昨日パールってさぁとか言ってるYO!
やつらは「パァル」だろ。
あるCGIから同一フォルダ内にある別のCGIにあるスカラー変数の値を 取得したいときはどうすればいいのでしょうか?
759 :
720 :04/01/27 00:46 ID:???
>>723 なるほど、ありがとうございます。
直に通信してるんですか。
ってアレ?じゃあ非固定IPなのにどうして・・・
って話は他でします。
ありがとうございました。
requireする
>>758 なんでそんなことをする必要があるのかわからんのだが。
762 :
758 :04/01/27 00:58 ID:???
例えば、チャットでの現在の参加者を普通のHTMLにSSIで表示させるとして、 参加者が格納されている変数をSSIで直接呼び出すことが出来ないので、 一旦別の単純なCGIを用意し、それをSSIで呼び出して表示させるということを 考えたわけです。で、その「単純なCGI」からチャットのCGI内にある スカラー変数を呼び出したいわけで・・・ チャットのCGIをrequireすると、チャット本体が実行されてしまいました(汗)
根本的に発想がおかしいぞ
>>762 スカラ変数というのは、スクリプトの中に存在するわけじゃなくて、
実行中のプロセスの中に存在するものだぞ。
チャットCGIがチャットの参加者を変数に格納したとしても
そのCGIプロセスは、100ミリ秒以内に終了して、変数の内容も失われる。
君のやりたいことを実現するには、
参加者一覧をチャットCGIからいったんファイルに書き出して
(そういうファイルは既にチャットCGIが作っていそうな気がするのだが)、
SSIはそのファイルを読み出す、
という形にするのが良さそうだと思うのだが、どうだ。
766 :
758 :04/01/27 01:39 ID:???
>>765 なるほど、一旦変数の内容をファイルに書き出すのも考えたんですが
迂遠かなあと思って・・・
それで一旦やってみます、ありがとうです。
>>766 >迂遠かなあと思って・・・
ほとんどのチャットCGIがこの形式を採用してるんだが……
チャットCGIをよく読んでみなよ。
チャットデーモンでも立ち上げたら? 参加者書き出さなくてもすむよ、高速だし、たぶん。
掲示板を作成しようと思ってるんですが、 1.$actionにwriteが代入されている yes→logファイルに書き込み $actionにnullを代入 ↓ no ↓ 2.展開して表示 3.書き込みがされると$actionにwriteを代入 4.1に戻る でいいんでしょうか?logファイルからの読み出しは出来てるんですけど、 logファイルへの書き込みが成功しないんです。 もしかしたらそもそもの考え方が間違ってるんじゃないか、と不安になったので、どなたがお教えいただけませんでしょうか。
>>770 掲示板てどれもこんな感じだと思ふ
if ($action eq 'write') {
write_log();
} elsif ($action eq 'delete') {
delete_log();
} elsif ($action eq 'edit') {
edit_log();
} elsif (...) {
...
}
show_log();
exit;
ついこの前、探すより自分で掲示板作ったほうが早いかと思って、 自分で作ったら5時間くらいかかった。がびーーーーーーーーん。 しかも、文字コード上の問題が思ったよりウザかった。 ハッシュのキーにスレのタイトルいれてスレの内容まとめたら、大変なコトになった(←アホ
>>771 書き込みをしたときに、送られてきた$actionの中身で判別する、ってことですよね?
今はまだ削除機能とか搭載できるレベルじゃないので(一昨日からperl勉強し始めたばかりなので)、とりあえずwriteだけ与えてます。
>>770 の考え方で進めていっても問題ないんでしょうか?
774 :
770 :04/01/27 02:46 ID:???
ちなみに、 if($action eq 'write'){ &write } でサブルーチンwriteに飛ばすようにしてます。
>>770 どんな掲示板かにもよるかもしれないが、
俺の場合は…
送信されるデータに書き込みかどうかを判別するデータを付加している。
俺の場合は "mode" なんだけども。
一番上に書き込みフォームがあって、下に何件か書き込みが表示されるタイプ。
こんな感じか。
---------------------------------------------------------------------------
&modecheck; #変数$modeに"mode"の値を入れる
if ($mode eq "write"){&write;} #mode=writeであればデコード&書き込み処理
&htmlset; #HTML書き出し
exit;
---------------------------------------------------------------------------
実際はもっとごちゃごちゃしてるが、
まあ簡単に書くとこんなもんだ。
776 :
770 :04/01/27 02:52 ID:???
>>775 有難う御座います。
うちもそういう掲示板にする予定なんですが、
<INPUT type="hidden" value="write" name="mode">
を書き込みフォームにくっ付ければsub writeに行くように出来る、であってますか?
書き込み送信ボタンを押したときに、writeが送られてないようなんです。
試しに
print $mode;
(うちの場合は$actionですが)
とやっても何も表示されてないので、空のような感じです。
俺フィーバー
>>770 自分で作ろうというのはいいけど、そういうことを聞いているようじゃ
どこかの掲示板のソースを見て何をするべきか勉強したら?
セキュリティ面とかも考えてあるのかないのか不安ありありだし
ここでマンツーマンで教わりながらなんてやめてくれよ
779 :
770 :04/01/27 03:10 ID:???
>>778 「考え方があってるのか?この方向性でいいのか?」
が知りたかったのですが、どちらともとれない言い方をなさるので尋ね返す結果になってしまうのですが。
781 :
770 :04/01/27 03:25 ID:???
>>779 誰もが「それでいいよ」と言わないことでわかるよね
783 :
770 :04/01/27 03:29 ID:???
どこが間違ってるかの指摘もなく分岐のさせ方(訊いてない)を繰り返しされても困りますわ。
他の掲示板のソースで勉強しろと言ってるのに愚痴(訊いてない)を繰り返しされても困る
785 :
770 :04/01/27 03:46 ID:???
>>785 >>776 のようにしてCGIにデータを渡したら、CGI側でも受け取る処理が必要。、
例としては、
sub modecheck{
$buffer = $ENV{'QUERY_STRING'};
@query = split(/&/, $buffer);
foreach (@query) {
($name,$value) = split(/=/);
$form{$name} = $value;
}
これで初めて$form{'mode'}からデータを読めることになる。
これの意味が分からないようなら
>>784 が言うとおり
スクリプトを読み漁ってみた方がいいな。
787 :
786 :04/01/27 09:57 ID:???
>>786 これはGET専用だな、スマソ
GETメソッドとPOSTメソッドの処理の違いは他所で詳しく解説されているので検索してください
宿泊予約システムの改良をしております。 具体的には、料金計算を行ったCGIから連絡先を入力させるCGIに 飛ばし、計算した料金をHTMLに表示させています。 今回、これまで外税表記だった物を内税に修正しておるのですが、 ハッシュ配列に保持した料金を、変数に格納、*1.05しHTMLに出力 させております。 #改良前 if ($FORM{'adult_price1'}) { print "($FORM{'adult_price1'}円)<br />\n"; print "<input type=\"hidden\" name=\"adult_price1\" value=\"$FORM{'adult_price1'}\">\n"; $plan1 = $plan1 . "($FORM{'adult_price1'}円)<\|>"; } #改良後 if ($FORM{'adult_price1'}) { $pinctax = $FORM{"adult_price1"}*1.05; print "($pinctax円)<br />\n"; print "<input type=\"hidden\" name=\"adult_price1\" value=\"$FORM{'adult_price1'}\">\n"; $plan1 = $plan1 . "($FORM{'adult_price1'}円)<\|>"; } 単純にこれだけですが、 「Software error: Execution of /home/sites/*****/*****/hoge.cgi aborted due to compilation errors」 と実行時エラーが発生し改良したCGIが実行されません。 調べた結果、 $pinctax = $FORM{"adult_price1"}*1.05; この記述があるとエラーを起こすようです。 ご教授をお願い致します。
何もしなくてもフォームから渡された値が変数に入ってると思ってる香具師結構いるんだよな しかし態度が気に食わんわ
790 :
bull :04/01/27 10:55 ID:8BzI4/OG
CGIを使用した掲示板で、 投稿フォームを投稿されたメッセージ一覧のページとは別のウィンドで開きたいのですが。 よろしくおねがいします。
>>788 そこは問題ないんじゃないかな?
テストしてみたが動いた
aborted due to compilation errors
↑これでググってみれ
>>790 質問が漠然としすぎだ馬鹿。perlの質問じゃない
>786 >787 ありがとうございます。肝心な >CGI側でも受け取る処理が必要。、 に気付かなかったです。これを元に勉強します。
795 :
bull :04/01/27 11:06 ID:8BzI4/OG
>>793 投稿用フォームの方に特別なスクリプトはかかなくてもよいのでしょうか?
>2ちゃんねるのシステムに近くなるなぁ。
でも2ちゃんって同じ画面にでてますよね?
>>789 > 何もしなくてもフォームから渡された値が変数に入ってると思ってる香具師結構いるんだよな
わかってんだったらそこを指摘すりゃいいじゃん。
> しかし態度が気に食わんわ
まあお前に気に入られる必要性は微塵もないわけだが。
>>795 まず最初に聞いておくけど、<a href="./bbs.cgi?mode=putform" target="_blank">の意味は分かるよな?
bbs.cgiのなかに投稿フォーム画面「だけ」を吐き出すサブルーチンでも組んで、
mode=putform と来たらそのサブルーチンを実行してやればいい。要するに
ログの操作や表示をする部分とは分離させるってわけだ。
>>796 それぐらい自分で調べれば解ることだ。用が無いんならキエロ
799 :
bull :04/01/27 11:23 ID:8BzI4/OG
>>797 リンク先にとぶとかってことだと思ってます。
でも今の説明はわかりました。
投稿フォーム画面「だけ」を吐き出すCGI素材ずっと探してんですけどないんです。
素材CGIのなかの投稿フォームぶぶんだけ抜き出しても動作しないみたいですし。
>>798 なあ、ここ初心者スレだよ?
別に答えを強いてるわけでもないし、造語使って質問してるわけでもないし、
状況だって簡潔に書いて、質問内容もまとめてるんだから、
端から、「何もしなくてもフォームから渡された値が変数に入ってるわけじゃない」で終わる話だったわけだよな?
で、
>>786 がそれについて触れるまでは潜んでて、そんで急に初心者叩きかよ。
「回答しねえんなら黙ってろ」とか言ってるわけじゃないんだ。
ただ、なんで、お前に詰られなきゃならんのだ、ってこと。
>>799 <a href="./bbs.cgi?mode=putform" target="_blank">投稿</a>
これをクリックすると、bbs.cgi に「mode=putform」ってのが送られる。
これをbbs.cgi側で受け取ってから↓のように進める。(受け取りの方法については
>>786 で書いた通りでいいと思う)
if($form{'mode'} == "putform"){ &form; exit; } else { 通常の処理 }
sub form{
print<<"FORM"
Content-type: text/html\n
<この部分に表示したいフォームのHTMLを入れてやる>
FORM
}
漏れもいろいろ試してみてるが、多分これが一番単純な方法と思われ。
>>799 なんでもかんでも君の欲しているスクリプトがあるわけじゃないんだよ
投稿フォーム画面「だけ」を吐き出すCGI素材を探しても見つからんよ
いや、見つかるかもしれないが、それを参考にして、
今あるスクリプトに組み込まなきゃいけないわけ。
結局はperlを少しくらい勉強して、今あるスクリプトがどのように動作してるかを
理解し、その上でそれを弄らなきゃいけないわけ。
で、じゃあ一から教えて下さいとか言い出すかもしれないから言っとくけど、
君に「perlってのはだね」と一から手取り足取り説明するわけにはいかないのはわかるよね?
初心者ってのは右も左もわかんなくて、本当に大変なのはわかるけど、
その分自分で調べなきゃいけないのよ。みんな調べてるの。
本当に君がその機能を実装させたいなら、
ここのテンプレにいくつかリンク貼ってあるでしょ?
そこで少し勉強しといで
>>800 君の言ってることが正しいよ大正解。だからもう来なくていいよ
>>802 >
>>800 君の言ってることが正しいよ大正解。だからもう来なくていいよ
ぐうの音も出なくなったか。教えたくないんなら教えてくれなくていいから命令すんな。
お前には「だからもう来なくていいよ」とか言う権利もないし、そんな身分じゃないんだから。
804 :
724 :04/01/27 14:10 ID:???
動いたよ 超うれしい。涙でました 皆さんありがとうございました。 また、今後ともよろしくお願いします
805 :
nobodyさん :04/01/27 14:16 ID:/ioWy3ty
data.csvが存在しない状態で OPEN(FH,> "data.csv"); を行うと自動で"data.csv"だ生成され書き込まれますが、 サーバにアップすると自動で生成されません。 また unlink("test.wrl"); でファイルを消す作業もローカルでは動作しますが、 サーバにアップすると動作しなくなります・・・。 どうしてなんでしょう;;
>>805 環境がよくわからないので、あくまでも俺のカンで回答するが、
ディレクトリやファイルのパーミッションを疑ってみた方がいい。
apache が suExec を使っていなくて、
ディレクトリやファイルの持ち主がユーザ自身で、
そのパーミッションが 644 や 755 の場合は、
そういう症状が起きる。
807 :
805 :04/01/27 16:47 ID:???
>>806 レスありがとうございます。
CGIファイルや書き込み、削除するファイルのパーミッション
ばかりいじっていて、ディレクトリのパーミッションを見落としてました^^;
ディレクトリのパーミッションをいじったら無事解決出来ました、
ありがとうございますm(_ _)m
>>788 「use utf8」とか宣言してない?していれば、
> print "($pinctax円)<br />\n";
のうち、
「$pinctax円)」の部分が「変数名」であると解釈される。
809 :
bull :04/01/27 17:41 ID:vAUQj7Yj
>>801 >>802 本当ありがとうございました。
何とかなりそうな感じです。
全くです。
自分で勉強してから助けを求めることにいます。
お手数かけてすみませんでした。
>>801 >($form{'mode'} == "putform")
ん?
文字列のときは 「==」 じゃなくて 「eq」 じゃなかったっけか?
文字コードを変換するとき、 $buffer=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; としているのですが、 この場合 「jcode.pl」っていらないですよね?
>>811 >$buffer=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
これはエスケープエンコーディングを元のキャラクタに戻す処理。
jcode.plはキャラクタセットの変換ライブラリ。
文字コード変換だけなら、jcode.plのみ使う。 フォームからデータ受け取るなら両方付けておく。
814 :
811 :04/01/27 21:21 ID:???
815 :
811 :04/01/27 21:22 ID:???
ほんまにわかったんかい
817 :
811 :04/01/27 22:29 ID:???
>>816 はい。
$buffer=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
だけだと文字コードが統一されていないので、
requireで"jcode.pl"を呼び出し、
&jcode'convert(*buffer,'sjis');
をすることによって文字コードをsjisにする。
ってことですよね?
>>817 大正解!!!さすがだ。やれば出来る子だとは思ってたよ。
あ、半角カナ入てっと化けるから注意
pack("C", hex($1)) pack("H2", $1) 俺は後者派
821 :
811 :04/01/27 23:51 ID:???
822 :
801 :04/01/28 07:42 ID:???
カウンタ作成中です。 sub counter { if (open COUNT,"+>test.txt"){ $count = <COUNT>; $count++; print COUNT $count; } else { print "Cannot Open File <BR>\n"; } return $count; } とゆうサブルーチンを読み込んでみると 「Cannot Open File」 となってしまいます。 return $count;してほしいんですが・・ どこが間違ってるのか教えてください。
>>823 つまり 「open COUNT,"+>test.txt"」 ができないってことだよな。
test.txtのパーミッションは合ってる?
825 :
746 :04/01/28 13:05 ID:???
>sub calc { return $_[0] + $_[1] } >print <<"hoge"; >1 + 5 = @{[ calc(1, 5) ]} >hoge なるほど、こうやると関数が呼び出されるんですね。 参考までにこれはどのような考え方をすれば良いのでしょう? #配列を出力するようにみせて、配列内で関数を呼ぶ??? 出力方法として決まった方法なのでしょうか。
ルーチンチンから返ってきた値を配列とみなして表示してるんだべさ
>ルーチンチン なんかツボに入ってワロタw
dat.txtに id1:pass1 id2:pass2 と登録された順に追加していくスクリプトを作成したのはいいのですが これを整形して表示するときはどうしたらよいでしょうか? 一つだけタグ作ってあとは行数分同じタグを出力したいのですが どうすればいいでしょうか?何かわかりにくい質問ですがお願いします
なに言ってるのか訳ワカメ タグ???何が?
>>828 print "<table>\n";
open(IN, "< dat.txt");
while(<IN>) {
chomp;
my($id, $pass) = split/:/;
print " <tr><td>$id</td><td>$pass</td></tr>\n";
}
print "</table>\n";
>>823 それと "+>test.txt" だと書込優先 open なので test.txt の
中身が空になると思うのだが。
>>825 calc() の戻り値から成るリストの無名配列を作り、変数展開
コンテキスト内で配列変数として評価する為にデリファレンス
している。
my $list_ref = [ calc(1, 5) ];
my @list = @{$list_ref};
print "1 + 5 = @list\n";
>>828 printf "<dt>%d</dt><dd>%s</dd>\n", /(\d+):(.+)/ while <DAT>;
…という事か?
変数に入っている物が、(型ではなく)数字か文字列かを見分けるには どのようにすれば良いんでしょうか? 正規表現以外の方法が思いつかなくて。。。
>>832 数字ってか数値な。数字の文字列もあるから
正規表現以外で実現したい動機は?
一つの変数に数値が入っているのか、文字列が入っているのか 分からない状況ってどんな状況だ?
>>833 型は関係ないので数字でも数値でもいいでふ。
正規表現を使うとなんか重いから。
いろんなプログラムで使いまわすための関数(インポート式のモジュール)作ってて、あんま重くしたくないんすよ
>>834 コマンドライン打ち間違えの致命的エラー回避、外部入力からの文字列検査、いろいろあると思いますが…
837 :
823 :04/01/29 00:37 ID:???
>>823 です。ご報告遅くなり、もうしわけありません。
>>824 さん。ありがとうございます!
まさにそのとおりで、test.txtのセキュリティfで
「IUSR_**」にフルコントロール権限をあたえたらできました!
まさかこんなことだったとわあああああ!!
って感じです!Perlに自信がなく、「+>」とかあやっしいいいいー
とか、かなり間違ったところばかり目が行ってしまいました。
さらに
>>831 さん。
えっと・・いろいろ書き換えてやってて、最終的にどうだったか忘れました・・・
ごめんなさい。学校でやっていて、いつのまにか2が読めなくなってて・・・
今、家に帰ってきて書き込んでいます。
みなさまの生暖かい声援のおかげで、どうにかなりました。
本当にありがとうございました。
動機が不明瞭だな。
>>832 'hoge' '123' '44,000' '12foo' bar34'
お前の言う「数字」「文字列」ってのがよくわからん。
上の例をそれぞれ分類してくれ。話はそれからだ。
つか、正規表現で重いって言ってるが、他の処理で軽くなる可能性があるとは思いにくい。
全くの想像だけど一般にいう数字じゃないのかね? 123とか10.5とか 40,000とかの,が入るのは微妙だな
数字と数値を混同するのはよくないと思う
「重い」と言ってる奴はベンチも取らずにイメージだけで言ってるのが多い。
Perl使いならそこまで細かなところに軽さを求めるものじゃないと思う。俺哲学
試しに perl 5.8.2 でベンチマーク取ってみたところ、 if($a == $a+0) よりも if($a =~ /^\d+$/) の方が速かった。 またひとつ勉強になった。
>>839 123これを数字と思って話してました。
44,000は今、数値用の単行演算子と通常の数字演算子でtestしてみたら、44と認識されてるみたいっすね。
と言うか今気付いたんですが、数値用の単行演算子(randとintを実験使用)に 'あああ' とか文字列しても実行エラーにならないんですね!
騒がせておいてあれですが、解決したので引き取らせてもらいます。すみません。
>>842 ちょっと他の処理と実行時間を比べようと思ったんですが、正規表現しか思いつかなかったので。。
確かにながーい文字列を正規表現すると速度に影響は出るけど、 数値チェック程度じゃ影響は出ないよ。 影響が出るとすれば事前の文字列長チェックが甘い。
>>834 数値か文字列のどっちかが欲しいだけなら
$var += 0
$var = "$var"
>>839 みたいなことしたいなら、素直に正規表現使え
my ($agent) = ($ENV{'HTTP_USER_AGENT'}); if ($agent =~ /J-PHONE/){ $method = 'get'; } else { $method = 'post'; } とやってみたんですが、J-PHONEのUAでアクセスしても $methodの中身がpostになっちゃうんですが、どうしたらいいですか?
知らんけど、とりあえず print $agent; とかしてみろよ。デバッグの基本。
>>849 Operaで試してみたら(peraを含む文字の場合、に変更して)、出来ました。
Operaだと、$agent;は出るんですが、IEだと出なかったんです。
他のブラウザでも試すべきでした。
ただ、なぜIEで出ないかは依然不明です。
851 :
850 :04/01/29 04:31 ID:???
言葉足らず print $agent; とやったらUAがOperaでは出たんですが、IEでは何も表示されませんでした。 です
まあUAは自己申告制だから。少なくとも携帯ならUA吐くだろう。
携帯用は作った事ないんで、良く分からないんだけど /J-PHONE/i とかしてみれば。
>853 エラーになりました。
とりあえず、すべての環境変数を表示してなにが取得できているかチェックするのがよろし。 print %ENV;
プログラム板の方でも聞いたのですが、 ほとんど答えがいただけなかったので、こちらでもお願いしてみます。 while(<>) { if (/errorが発生/i) { print; } } を、jperl5005→perl582用に書き換えようとして、 use encoding "sjis"; use open ":encoding(sjis)"; binmode STDERR, ":encoding(sjis)"; while(<>) { if (/errorが発生/i) { print; } } とやったら、実行時間が10倍以上かかるようになってしまいました。 何か対処方法とか、勘違いとかありますでしょうか? 582でも if (/errorが発生/) { print; } や if (/[Ee][Rr][Rr][Oo][Rr]が発生/) { print; } は 10倍時間とかにならないので、/i に何らかの問題(相性?)がありそう、 というところまでは自力でわかったのですが。
857 :
825 :04/01/29 10:48 ID:???
リファレンスについて質問です。 @foo = (0..2, 0..2); $bar{"foobar"}= \(0..2, 0..2); print << "END_OF_PRINT"; @foo @{$bar{"foobar"}} END_OF_PRINT とすると、@fooは012012となるのですが $bar{"foobar"}の方は012だけになります。 簡単に@fooと同じように表現できないでしょうか?
>>858 そのコード実行すると
Not an ARRAY reference at hash.pl line 4.
になるよ。
$VAR1 = { 'foobar' => \2 };
$bar{"foobar"}= [0..2, 0..2];
863 :
nobodyさん :04/01/29 13:30 ID:XNrQ/XgQ
こんにちは、質問ですが、別のサーバーのログに書き込むのってどうやってするんですか? 目的はチャットのログを2つのサイトで共有したいのです。 ちなみに書き込み&読み込みをフルパスでしましたができませんでした。 セーブするファイル形式はtxtでもなんでもいいのでご返事の方よろしくおねがいします。
無理だろ socketでややこしいことしたらできるかな
nfs とか ロックをどうかけるかは知らない
>>863 そうですね・・・
socket使えばできないこともないでしょう。
WinOSならある程度簡単なのを一つ二つ思いついたが…
実用的ではないな。
a鯖のログをb鯖にソケットで送って、 それを受ける側でロック何なんなりもした上で追加すれば出来るので和? ソケット詳しくないんで憶測。
socket を受けるには プロセスが daemon みたくずっと常駐してないといかんような気がするが そういうことってそのサーバ上でできるの?
httpd はじょーちゅーしてるけどなにか?
LWP で POST して、相手も CGI で受けるのなら、OK だな
いっそログをファイルじゃなくPostgreSQLみたいなRDBで管理しる 両方のサーバからDBまで接続しにくれば宜しい ロックもDBのトランザクションで管理すれば勝ち
>>856 理由はよく解らんが、以下は私の想像ということで....
・Perl5.8 では sjis にも対応しているが、内部処理は全て utf-8 で実行
される。
・utf-8 に対応したとき、マルチバイト文字にも大文字・小文字があるため、
照合・置換関数のオプションに"i"を付けたとき、それに対応しようとする。
その処理が非効率的であるために時間を取られていると思われる。
以上の想像が正しいとすると、
while(<>) { if (/error(.*)/i && $1 =~/^が発生/) { print; } }
にすると、かなり速くなると思われるが、どんなもんでしょうか。
873 :
nobodyさん :04/01/29 17:13 ID:3F2OSt0J
$aaa = "aiueo aaa "; $aaa =~ s/\s$//; print "$aaa"; 文字列の最後にスペースが付いたらそれを除きたいのですが、 これだと1個しか取れません。
・・・ ・・・ ・・・ ・・・で?
875 :
nobodyさん :04/01/29 17:29 ID:3F2OSt0J
複数取れる方法を教えて下さい。
$aaa =~ s/\s\s$//;
いいよいいよ、いい空気だw
>>874 ,876
オマエ、いいヤツだな。正直見直した。
880 :
874 :04/01/29 18:47 ID:???
$aaa =~ s/\s$//; $aaa =~ s/\s\s$//; $aaa =~ s/\s\s\s$//; (略 $aaa =~ s/\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s$//; これで 16個まで取れるようになりますた
みんな不親切だな $aaa=~ s/\s{20}$//; これで冗長にならなくて済むよ。20の末尾スペースを一気に取り除く技
$aaa =~ s/\s$//$; $aaa =~ s/\s\s$//$; (略 $aaa =~ s/\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s$//$; $aaa =~ s/\s{17}$//; $aaa =~ s/\s{18}$//; (略 $aaa =~ s/\s{32}$//; 32個まで対応しましすた
みんな素直じゃないなぁ。ちゃんと教えてあげようよ、 その方法だと、スペースが4つの時とかにスペースが一つ残ってしまうよ。 $aaa =~ s/ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? $//; これでスペース40個まで対応だ。
みんなわかってないなぁ $aaa =~ s/.*//; これで何も考えないで済むよ
教えて下さい。 アスキーアートを出力したり、改変する Perl スクリプトを 組もうとしています。使用するフォントは「MS Pゴシック 中 (12ポイント)」(IE標準) です。 この条件下で、各文字の幅を取得する必要があるので、文字が与え られると、その幅(ドット数)を返す関数が必要です。 以下のような関数を作成しようとしたのですが、正直言って疲れます。 もっと「まし」な方法は無いでしょうか? 環境はWin2000 + ActivePerl 5.8 です。 sub get_char_width{ shift @_; return 3 if /.,:;'il/; return 4 if /|!{}jjiI.,:;'il゙/; return 5 if /()[] _f/; : (以下略)
>>887 お前、Pゴシックの「P」はプロポーショナルだって事知ってて質問してるんだろうな。
それなら、HDC取得してGetTextExtentPoint32で取れ。
知らないならあきらめろ。
P-chan
>>889 なんでうちのハムスターの名前しってんだ?
891 :
887 :04/01/30 00:59 ID:???
>>888 とほほ...。
やっぱりそれしか無いですか。
Win API のことはよく解らないので、頑張って
get_char_width を完成させるようにしましょう。
>>891 正直、WinAPI の勉強した方が「マシ」な方法だよ。
ドカタみたいなことすんな。
893 :
nobodyさん :04/01/30 10:21 ID:YQ5dcM/M
perlでtelnetすることって出来ますか? とりあえず、ログインして、ps -aux だけしてその結果を取得できると いいのですが。
894 :
nobodyさん :04/01/30 10:28 ID:r6WYD04X
hoge.shtmlとfoo.cgiがあり、 hoge.shtmlのなかに上下に2つfoo.cgiをexec cgiで呼び出す記述をし、 foo.cgiの方で、UserAgentを見て携帯電話の時とPCの時に処理を分け、 それぞれ表示させてるんですが、 携帯ユーザーの時は、上下2つあるうちの下の方は、 何も表示させないようにしたいんです。 cgiからの戻り値をssiに渡すことができるなら、 cgiから、表示させる文字列に加えて、携帯の時はフラグとして1を返し、 フラグが立ってたら下のexec cgiは実行しないような書き方をすると 出来るのではないかと思うのですが、、 何処を探してもそういうことが出来ると書かれたところを見つけられませんでした。 ssiスレを探しましたが無いようで、こちらに書かせていただきました。 何かいい方法無いでしょうか? #ssi側でUAを判定することで下のexecをさせなくすることはできるのですが、 #cgi内でも表示させる文字列を分けるためUA判定する必要があるので、2度でまなんです
つまりssiとcgiで、変数を共有、若しくは戻り値、引数として値を渡せないかということです。
ここはPerlスレだ
すいませんでした。CGIスレ逝きます
>>742 ,
>>747 に近いと思うんですが、うまくいかないので聞かせて下さい。
POSTで受けた\x82\xb3 とかの文字"列"をSHIFT_JISで
表示させるにはどうすればいいですか?
print "\x82\xb3" とやれば表示できるのですが、
read(STDIN,$str,$ENV{"CONTENT_LENGTH"})で取り出した$strを
printすると、そのまんま表示されてしまいます。
[Fri Jan 30 16:23:59 2004] [error] [client 127.0.0.1] malformed header from script. Bad header=<br><br><br><br><br>: test.cgi, このエラーの原因は何でしょうか? 調べたところヘッダーが不正らしいのですが、不正なヘッダーは出力していないのです。 Perl5.6、Apache2.0.43、Windows2000です。
>>899 さんざん既出の話だが、実際にあるホスト名を使うのはイクナイ。
example.comとか使おうな。
>CGIですのでNet::HTTPが使えるかどうか不明。
標準添付のモジュールでネットワーク扱えるのはIO::Socketだけじゃないかな。
しかもHTTPの面倒は自分で面倒見なくちゃいけないし。
諦めて標準添付じゃないモジュールを使うか、IO::Socketでガンガるかのどっちかだな。
必要なモジュールを一緒に添付するって手もあるが。
>>900 意味分からん。
>>901 >調べたところヘッダーが不正らしいのですが、不正なヘッダーは出力していないのです。
君の調べ方が多分間違ってる。
どうやって調べてどういう結果が得られたから、不正なヘッダじゃないと判断したのか教えてくれ。
903 :
900 :04/01/30 16:49 ID:???
すんません。 "\x82\x97" を "w"と表示させたいんですが "\x82\x97"のまま出力されてしまいます。
>>903 俺の環境では unescape しさえすればちゃんと表示されるんだがな
ひょっとして "\x80" と "%80" がごっちゃになってないか?
>>899 自鯖ならモジュール突っ込む
レンタル鯖で突っ込めないなら、使えるの調べるべし
foreach(qw(LWP::Simple Net::HTTP)) {
eval("use $_;");
my($version) = '$'.$_.'::VERSION';
print "$_ : ".eval("$version;")."\n";
}
って感じで何使えるか調べられるぞ
>>900 $a = "\x82\xb3";
で変数に取り込んでからShift_JISにコンバートは?
print "\x82\x97"で w と表示されるなら取り込めると思うが・・・
906 :
901 :04/01/30 16:58 ID:???
>>902 HTMLで出力するのですが、その際には専用の関数を使って出力しています。
&Header;
print "hogehoge";
&Footer;
またエラー前後でヘッダー関連の変更は行っていません。
また<br><br><br><br><br>という出力もありません。
908 :
900 :04/01/30 17:09 ID:???
>>904 いや、間違いなく\x82です。
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
でデコードしてるんですが、もしかするとここがマズいんでしょうか。
909 :
900 :04/01/30 17:14 ID:???
小出しにすると余計わからなくなりそうなんで、 POSTの読み取り部全部書いてみます read(STDIN,$str,$ENV{"CONTENT_LENGTH"}); @src = split('&',$str); foreach(@src){ ($variable,$value) = split("="); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/\r\n/\n/g; $value =~ s/\r/\n/g; $cgi{$variable} = $value; } print $cgi{"hoge"};
>>909 printf ("%s", $cgi{"hoge"});
911 :
900 :04/01/30 18:01 ID:kjxlq4kM
>>900 $test = "\\x82\\xb3";
while ($test =~ s/\\x([\d\w]+)//){
$char .= chr(oct("0x$1"));
}
print "$char \n";
913 :
nobodyさん :04/01/30 18:18 ID:LRfxaIu4
IPアドレスが書かれたファイルから一行ずつ取り出して wget
http://www...[取り出したIPアドレス] と言う風に自動でweget接続したいのですが、「while文」というのを
書けばいいのでしょうか?
なにか必要な制御文?ありましたら教えてほしいのです
====== SPAM.txt =======
61.149.25.4 --> wget
http://www... を順に繰り返す
61.149.26.199
61.149.79.7
61.49.138.183...
=======================
おっと。912 の2行目の \d はいらない。
915 :
900 :04/01/30 18:25 ID:???
>>912 ばっちりです、ありがとうございました。
単純に出るかと思いきや、こんな事になるとは・・・。
>>902 hoge.comってあったんですね(汗
失礼しました。
>>905 ありがとうございます、モジュール使う以外に方法はないってことですね。
それで調べて使えそうならその方法で試してみます。
ありがとうございました。
917 :
nobodyさん :04/01/30 18:48 ID:LLMKM8sm
いろんなソースを見ていると GET : { 〜〜〜 〜〜〜〜 } #END OF GET みたいな事が書かれてあったのですがこれはどういうことなのでしょうか? サブルーチンでもないし、オブジェクト指向とかならパッケージ宣言しなきゃ だめですよね? perl初心者で大体の文法などは把握できるようになってきたのですが これだけがどうしても分かりません。 検索しようにも:[が記号の為引っかけることができなくて・・。 よろしければ教えて頂けないでしょうか?
>>906 content-type:text/html;
を吐いてる?
>899 著作権法違反。
>>891 Win32::GUIパッケージのWin32::GUI::FontにGetTextExtentPoint32があるよ。
# 使い方がサパーリ分からなかった。。
>>900 print eval qq{"$str"};
>>901 以前、ヒアドキュメント使っていたら、何かのエラーで出た記憶が。
答えじゃなくてごめん。
>>918 perldocは読んでませんでした。
ありがとうございました。
紹介して頂いたHPやラベルとブロックと言う単語を頼りに
検索することで理解できました。
これからはperldocを熟読していこうと思います。
924 :
900 :04/01/30 21:22 ID:???
>>922 まだ理解できていませんが、表示が一発なのは確認できました
ありがとうございます。
925 :
899 :04/01/30 21:41 ID:???
>>921 どこがどう著作権法違反なのでしょうか。
CGIの想定動作としては、サーバA上のページからサーバB上のCGIを呼び出したときに、
サーバA上の画像ファイルを表示させるといったものなのですがどこかまずかったでしょ
うか?
そして
>>899 の問題はuse Socket使うことで解決しました。
アドバイスをくれた方、改めてありがとうございました。
>925 自分の画像なら問題ないよ。 自分の画像なら別鯖に置く必要性をあまり感じないけどね。 負荷と転送量を増やすだけだし。
927 :
899 :04/01/30 22:08 ID:???
>>926 それは大丈夫…だと思いますが利用者のモラルに任せるしかないですね。
ありがとうございました。
928 :
912 :
04/01/30 22:58 ID:??? >>922 > print eval qq{"$str"};
素晴らしい!目が覚めるようです。