初めて来た方、初心者はまずこのスレッドから始めよう。
尋ねる前に同じ質問がないかこのスレや旧スレ、及び
>>2 のリンクを一通り見てみよう。
案外答えはもう書かれているかもしれない。
3 :
ちょこら :2001/07/26(木) 00:44 ID:IoXCn0Pg
↑しまた。名前消し忘れた。。。
>>1 ご苦労様。
ところで、前スレの956さん
TAB区切りとか言いながら$dataは半角スペース区切りになってるよ。
などと無駄なツッコミを入れてみたり。
6 :
名無しさん@お腹いっぱい。 :2001/07/26(木) 04:33 ID:34foWq2Y
ハイマ(バーチャ)から、他鯖のファイルを読み込むCGI書いたんだけど、
「〜が見つかりません」となってしまう。
これって、ダメなの?
$htmlfile = "
http:// 〜〜〜/temp.html"; # 他鯖のアドレス
if(!open(HTML,"$htmlfile")){
print "<html>$htmlfileが見つかりません</html>\n";
exit(0);
}
>>6 ダメに決まってる。
つーか初級ネット逝け。もう戻って来るな。
8 :
名無しさん@お腹いっぱい。 :2001/07/26(木) 06:47 ID:JG2uz2mw
配列の中に幾つかの要素が入っています(数は不明)、 この@hairetsuの中の要素を全て変数に入れたいのですが 方法が解らないです。 $yousosuu = @hairetsu ってして不明な要素数を得たのですが、そこからが解らないです。 初心者以前の問題でしょうか。
9 :
8 :2001/07/26(木) 06:53 ID:JG2uz2mw
変な日本語でゴメンナサイ、 @hairetsuの中身が、、1<>2<>3<>4<>5<>6<>7<>8<>9<>10 ってなっている時に $youso1 = 1 $youso2 = 2 と言う風に代入したいのです、数が不明だとどうすれば良いのかが 解らないのです。
>>8 my @array = qw(aa bb cc);
my $str = '';
map { $str .= $_ } @array;
print $str; # aabbcc
こういうことじゃなくて?
>>8 =9
別に取り出さないで$hairetsu[0]って使うのではダメなの?
12 :
ちょこら :2001/07/26(木) 07:16 ID:pAced2Jk
$yousosuu = @hairetsu; が前提なら for($i=0;$i<$yousosuu;$i++){ $varname = 'youso' . $i; $$varname = $hairetsu[$i] } でどうだ。まあこの例だと$youso0から始まるがいやならいじってくれ。
13 :
初心者名無しさん :2001/07/26(木) 08:07 ID:D05Jcn/w
>>8 これでも……たぶん
foreach (@hairetsu) {
$num++;
${youso.$num} = $_;
}
14 :
8 :2001/07/26(木) 08:25 ID:JG2uz2mw
ヤター!!(^ ^ ) 皆さんありがとうございますぅ ちょこらさんと初心者名無しさんの方法で上手く行きました。 未知の数値の扱い方がわからなかったんです。 と言うよりfor文の使い方が解って無いのか (汗) 皆さんカコイイです! ありがとうございました あげっ!! (^ ^ )
15 :
ちょこら :2001/07/26(木) 09:15 ID:???
ああ。
>>13 の方が断然スマート。
勉強になります。精進します。
16 :
名無しさん@お腹いっぱい。 :2001/07/26(木) 10:16 ID:fwGjG1C6
自作CGIの配布を考えているのですが、 実行時、鯖にどれくらい負担がかかるのかチェックしたく思ってます。 なにかいい方法ありますか?
use Benchmark; 使い方は perldoc Benchmark 負荷チェックはローカルで。
18 :
ほげ :2001/07/26(木) 11:33 ID:???
>>9 で、代入したあとどうやって使うの?
>>11 も書いてるけど、
また $i に数字をいれて print ${youso.$i} ってやるだけなら、
配列のまま $hairetsu[$i] を使う方が分かりやすいと思うよ。
19 :
名無しさん@お腹いっぱい。 :2001/07/26(木) 12:19 ID:OUMdOt/2
時間<>タイトル<>名前<>コメント という構成のログがあって、それをハッシュ%INに入れたいんですが、 qw($IN{'TIME'} $IN{'TITLE'} $IN{'NAME'} $IN{'COMMENT'}) = split /<>/; 今こんな感じにやってるんですが、 もっと上手い方法はありませんでしょうか?
>>19 @IN{ qw[ TIME TITLE NAME COMMENT ] } = split /<>/;
21 :
名無しさん@お腹いっぱい。 :2001/07/26(木) 12:31 ID:OUMdOt/2
>>_gunzipさん はーなるほど、@INを使うのか… ありがとうございました!
22 :
8 :2001/07/26(木) 12:34 ID:???
えっと、${youso.$i}の中身が実はCSVファイル(と言うより初めに読み込んだファイル)なんです。 今ずっと過去ログを読んでいたんですが、偶然にも前スレの952さん と同じ目的のような気がするです。 .csvの中身を並べ替えて区切り文字を","から"<>"に変更したいのです。 それで、今度は${youso.$i}(中身はa,b,c,d,eとかの5つの要素が入ってる) をもう一回配列に入れようとして芯でるです (^ ^;) 基本的に考え方が間違えてるのかなぁ、、、、 今リンクを一杯開けて勉強中 (^ ^ )
23 :
8 :2001/07/26(木) 12:37 ID:???
アア、、やっぱり電波な日本語だぁ (^ ^ ) もっと精進して出直して来るっす。 失礼します
24 :
名無しさん@お腹いっぱい。 :2001/07/26(木) 13:11 ID:20lkItDU
jcodeを使用せずに、 文字コードがshift_jisかどうかを判断するにはどうしたらいいですか?
>>21 >20 のは、ハッシュのスライスです。スライスについては、
http://www.effectiveperl.com/EP.02.pdf のItem2辺りを参照するといいと思います。
>>22 -23
無理して言葉で表現しようとせずに、元のデータと、自分が期待する結果を両方示して、
「このような事を実現するには、どんなデータ構造にして、どのように処理すべきか」
って聞いた方がいいと思う。
例えば、(こーゆー事じゃないかと勝手に想像)
「
Aoki,54,Nagano
Terui,95,Hokkaido
Maeda,23,Osaka
(続く)
というデータがあり、これを二番目の項目の数値で昇順に並び替え、","を <> に変換して
Maeda<>23<>Osaka
Aoki<>54<>Nagano
Terui<>95<>Hokkaido
のように書き出したいが、この場合どんなデータ構造でデータを格納し、
どんな手法でそれらをソートすればいいのか?
環境: 自分でコンパイルしたPerl5.7.2+VineLinux
」
・・・のような感じ。(ん....なんか変だが)
26 :
16 :2001/07/26(木) 14:22 ID:???
27 :
8 :2001/07/26(木) 14:27 ID:???
_gunzipさんありがとうございます。 ハイっ、その通りです。全部聞いちゃうと凄い量になるのかなと 思ってしまって... (^ ^;) 1,2,3,4,5 aoki,M,1985_01_08,220,157 egawa,F,1984_09_11,170,142 saitou,M,1983_11_22,247,167 yokomori,M,1986_07_15,195,150 . . 続く(行数は分からないです) と言うファイルの内容を... 1<>2<>3<>4 aoki<>M<>Highscore---220<>Average---157 egawa<>F<>Highscore---170<>Average---142 saitou<>M<>Highscore---247<>Average---167 yokomori<>M<>Highscore---195<>Average---150 . . 続く... こんな風に並べ替えて少しの文字列を加えたいのです。 それで、Vine2.15+perl5.005_03な環境でWEBのフォームにtextを 貼り付けて、変換結果を再びtextareaに表示しようとしたのですが 受け取りと出力は出来たものの、肝心の処理が上手くいかない のです。
28 :
21 :2001/07/26(木) 16:45 ID:rFKr7cVw
わざわざ参照サイトまでありがとうございます。 今日偶然にもEffectivePerl買ってきたので合わせて勉強したいと思います。 スライス慣れれば便利そうですね。
>>8 ベタに処理しただけだが、参考にでも。
open FILE, "< $file" or die;
my $cut = <FILE>;
print join('<>', 1,2,3,4)."\n";
while (<FILE>) {
chomp;
my @data = split /,/;
$data[3] = 'Highscore---' . $data[3];
$data[4] = 'Average---' . $data[4];
print join('<>', $data[0],$data[1],$data[3],$data[4])."\n";
}
close FILE;
30 :
undefさん :2001/07/26(木) 21:13 ID:20lkItDU
初めまして。 テキストファイルのリストをソートしてはき出したいのですが、 いい方法が思いつきません。 とりあえず、私が考えた物、、 ファイルが大きくなると問題あるです。。。 open(IN,"list.txt") || die; my @list = <IN>; close IN; open(OUT,"sort_list.txt") || die; foreach(sort @list){ print OUT; } close OUT;
31 :
30 :2001/07/26(木) 21:15 ID:???
あ、修正。 open(IN,"list.txt") || die; my @list = <IN>; close IN; open(OUT,">sort_list.txt") || die; foreach(sort @list){ print OUT; } close OUT;
ネタだとは思うが… 俺なら my @list = sort <IN>; と読み込むな(ファイルがメモリに収まるくらい小さいのであれば) もしくは、書き込むときに print OUT sort @list; とかね(まぁ、やり方は何通りもあるから)。 ちなみにファイルがでかい場合は、DB使うからそもそもこんな問題考えない(藁
34 :
32 :2001/07/27(金) 06:15 ID:???
>>33 何の解決にもならんけど。
↑書き方はいろいろできるけど、結局この辺の理由で(藁
あと、最近夏休みに入ったせいか、宿題っぽい質問が多いからね
>>31 へ蛇足
|| → or,foreach → forに慣れた方が良いと思われ
35 :
名無しさん@お腹いっぱい。 :2001/07/27(金) 09:17 ID:Q5S7zu8k
|| -> or はともかく、for と foreach は等価だからどっちでもかまわんと思うが...
好き嫌いの問題と思われ。
37 :
名無しさん@お腹いっぱい。 :2001/07/27(金) 09:48 ID:PIHalO2g
くだらない質問ですいません。 スクリプト言語は理論的に空行はつめたほうが 実行が速くなるのでしょうか。
少なくとも人間が体感できるほどの差はありません。
理論的には速くなりますでしょうか?
40 :
JAPU :2001/07/27(金) 10:35 ID:Q5S7zu8k
まぁ、気になるなら試してみぃ。
41 :
34 :2001/07/27(金) 10:40 ID:???
>35,37 forの方がforeachより字数が少ない(藁
字下げしねえとperlタンも読みにくいんじゃねえか ヲ
こらまた、厨房臭いCGIだな。 片方が弾けば次が動作するわけねーじゃん。 つか2つ使う意味あんの?
>>44 44ですが、下の奴を主に使ってたんですが、Proxy制限が使えないんですよ。(機能はあるのに)
だから、上のProxy制限に優れてる奴と二つ使えれば問題ないかなと思ったんですが、
どうやらうまく行かないらしいみたいなので、もういいです。ありがとうございました。
ところで、
http://dream.lib.net/room/cgi/e_acsdeny.html このスクリプトが、きちんとProxy制限できれば良いんですが、
どうしたらいいんでしょうか?どなたかご教授ください。
46 :
30 :2001/07/27(金) 19:01 ID:OFQPU1uA
>>32 さん、
>>33 さんサンクスです。
まとめるとこんな感じですか?
でも、サイズがでかくなると問題です。
open(IN,"list.txt") or die;
open(OUT,">sort_list.txt") or die;
print OUT sort <IN>;
close IN;
close OUT;
何かいい方法ないですかね?
(DBを使用しないで、、)
system 'sort list.txt > sort.txt';
とかやっても無駄ですか?
> || -> or
この違いって何ですか?
調べたら、優先順位が低くなるってありました。
ただ打ちやすいから、|| をつかってたのですが、、、
>46 自分でマージ・ソートでも自分で作ってみたら? 昔からあるソート法だよ。
48 :
8 :2001/07/27(金) 23:31 ID:???
>>29 さん、レス遅れました。
カコイイやり方有難う御座いますぅ (^ ^ )
何とか上手くいったのでご報告ですぅ、結局最初に読み込まれたcsvファイル
を\nをデリミタにして配列に入れて、その要素をもう一回配列に入れてから
からヘコヘコと加工してpushしました。 50行くらいになっちゃった ^ ^ )
今
>>13 さんや
>>29 さんの カコヨイやり方で挑戦中
結構過去のログまで読んだのですが見つからなかったので質問いたします。 プログラムが大きくなったのでソースファイルを分割して、 main.pl require 'sub1.pl'; require 'sub2.pl'; のようにしたとき、 1.use strict;をmain.plで宣言すると、requireで呼び出した sub1.pl sub2.plにもその宣言が適用されるのでしょうか? 2.main.plで宣言したグローバル変数はsub1.pl sub2.plでも 適用されるのでしょうか?
米鳥にカウンター設置したいんですけど 誰かご教授してもらえませんか? <img src="/bin/counter">これをHTML にくみこむだけでなんとかなると思ってたのですが・・・
>>49 結構過去の過去ログを読むのはいい心がけだけどさ、なんで過去ログにないのか考えること。
そのくらい自分でちっちゃいプログラムを書けば簡単に試せるから誰も質問しないんだよ。
>>46 典型的な例:
1. open MOE, "misuzu.txt" || die;
2. open MOE, "misuzu.txt" or die;
ここで、
1. は open MOE, ("misuzu.txt" || die);
2. は (open MOE, "misuzu.txt") or die;
と解釈されるので、おそらく 1. は期待した動作じゃないだろう...
みたいな話。
もちろん、括弧で括れば全く問題ないので、|| で全て書いても良いです。
個人的には or を使うのが好きです。
# The Perl motto is "There's more than one way to do it."
ZZ
>>52 個人的には or を使うのが好きです。
同意。
Perlの上級者は極力()や&、$_を書かないでコーディングするから、
Perl初心者からみると訳のわからないスクリプトに見えることがありますよね。
でも、それを自分で考えて解くのも楽しいし勉強になります。
よく、メールの署名欄に簡単なスクリプトが書いてあって、それを実行すると
結構驚くスクリプトが沢山あります。自分でも書いてみたいけど、スマートな
ものが書けないので未だ署名欄は名前だけ(w
54 :
49 :2001/07/28(土) 11:53 ID:???
>>51 なるほど。
私が試したところによれば、
1.適用されない
2.適用される
と言う結果が得られたような気がするのですが、あっているのでしょうか?
randで乱数を作成できますよね? 非常に偏りが大きいのですが、回避方法はありますか?
56 :
名無しさん@お腹いっぱい。 :2001/07/28(土) 16:45 ID:zGTvO/Jw
文字列の囲みのクオートってダブルとシングルがありますが、 理論的にはどちらを使ったほうが高速ですか? 自分のところで試してみたところ、1/10〜1/20程度の差が出、 どちらかが常に速いということはありませんでした。
58 :
名無しさん@お腹いっぱい。 :2001/07/28(土) 17:06 ID:m51BRqkY
俺の種を使ってくれ。
>>56 変数の判定をやらない分シングルの方が早そうだけど、知らん。
死ぬほど巨大なスクリプトじゃないと差は出ないんじゃないの?
60 :
55 :2001/07/29(日) 02:15 ID:???
プログラムの初めの方で srand(); としてから使ってます<rand 後はsrandは宣言していません。 種は指定無しでtimeになるようなので指定無しにしています。
種を省略した場合、最近のバージョンではもっと良い値が使われるよん。 詳しい話は perldoc 読んでね。
あと、最近のバージョンではsrand()自体を省略して構いません。
どうして偏りが大きいと思ったんだろうか。 調べ方に偏りがあるとは思わないのかね。
65 :
55 :2001/07/29(日) 16:21 ID:???
私の調べ方はrand(100)をfor文で10000繰り返し、 エクセルにてその値の分布を表にしました。 その結果、0〜10と90〜100の範囲が他の範囲に比べて2割ほど 大きな値となりました。 ・・・・偏り大きい調べ方ですか・・ね?
>>65 20,000 回では?50,000 回では?100,000 回では?1,000,000 回では?
という具合に調べればわかると思うんだけど….
67 :
:2001/07/30(月) 01:43 ID:???
perlでエラーが出て、エラーメッセージで何行目に エラーが出てるよ!と教えてくれる時は間違いが探しやすいんですが、 最終行のみにエラーが出てるよ!と出た時に途方にくれます。 そういう時は文法的には間違ってないけど、処理の流れが おかしいと言うことなのでしょうか? また、こういう時にエラーを判断するコツがあれば、アドバイス いただけないでしょうか?
Linxu上でのsystem()についてです。 $status = system("$command", "$str"); とすると、$statusに数字が入りますが、 この数字の意味するところがよく分かりません、というか知りません。 成功か失敗かは0と1(256)なので分かりますが、他の値、 2とか9等にはどういう意味があるのか知りたいです。 調べようにも何をきっかけに調べればいいのか思いつかないので 知ってる方、おねげぇします。
>>69 は
system("$command $str");
のミスです。。。
71 :
名無しさん@お腹いっぱい。 :2001/07/30(月) 06:05 ID:GER1kc7.
>>71 > use DB_File::Lockの記述で即エラー
DB_File::Lockがインストールされていないからでしょう。
別のロック機構を試すべきかと。
73 :
1 :2001/07/30(月) 09:43 ID:Aj8f98qc
>>72 レスありがとうです。
根本的な認識ミスってことですか?(恥)
DB_File::Lockって、DB_Fileモジュールさえあれば使えるのかと思っていました・・
リファレンスに書いてあったのと上記のLock機構が
同じものを指してるのかは不明ですが、
DB_Fileを使うなら、これがおすすめ!っていう方法があったらよろしくお願いします〜
やっぱり普通にflockとか・・なオチになりそうですが(泣)
74 :
71 :2001/07/30(月) 09:45 ID:Aj8f98qc
名前入力ミスりました〜!^^; 71==73です、よろしくです。
75 :
72 :2001/07/30(月) 09:47 ID:???
>>71 DB_Fileのドキュメントを見ると、flockを使用しているようですね。
DB_Fileを使ったことがないので、オススメとかはないのですが、
自分はファイルロックの必要がある時は、renameを使った方法を用いてます。
これだと環境に依存しないので。
> Linxu上でのsystem()についてです。 惜しい。 > $status = system("$command", "$str"); > とすると、$statusに数字が入りますが、 > この数字の意味するところがよく分かりません、というか知りません。 system の返り値、すなわち $? の値は wait(2) が返す値なので、 $? >> 8 が exit value $? & 127 がどのシグナルで殺されたか、 $? & 128 がコアダンプしたかどうか を表す。 perldoc -f system perldoc perlvar man 2 wait って感じ?
$i = 3; という風に、変数に数字が入っていて、 この数字が奇数か偶数かを判断するには、 どうしたらいいでしょうか?
$i % 2
79 :
hage :2001/07/30(月) 14:49 ID:???
if($i & 1) { print "odd\n" } else { print "even\n"; }
80 :
名無しさん@お腹いっぱい。 :2001/07/30(月) 17:09 ID:312.Yf8o
rmdirでやるとどんな感じ?<DBファイルロック機構
81 :
名無しさん@お腹いっぱい。 :2001/07/30(月) 19:26 ID:t7BVDL/M
前スレ見ましたが載ってないみたいなので質問します。 "ー"が入ってる文字列をgrepかけるとエラーが表示されます。 対処法はありますか? @a=("あ","あー","あーー"); @b=grep('ー',@a);
82 :
81 :2001/07/30(月) 19:28 ID:t7BVDL/M
@b=grep(/'ー'/,@a);
83 :
71 :2001/07/30(月) 20:55 ID:Ydf2hNHw
■DB_Fileのロックについて
>>75 renameですか!使った事ないです〜。
・・・flockが使える環境だとしたら、実際どちらがおすすめでしょうか?
>>80 おお、rmdirもはじめて聞きました(恥)
ちょっと調べてきますね。もっかい質問するかもしれません。。
84 :
T女の竹田 :2001/07/30(月) 21:00 ID:???
>>81 うーん、ログ見てもわかりにくいけど、やっぱりFAQ。
「正規表現の中でシフトJISを使うときは、m/\Qマッチさせたい文字列\E/
のように\Qと\Eではさむ」
シフトJISは2バイト目にメタ文字(正規表現で特別な意味を持つ文字、
この場合は'[')が含まれることがあるので\Qでエスケープするわけ。
(\Eはその終わり)
ちなみに似たような問題で、'―'とかは'―\'にしないとダメ(この場合は
2バイト目が'\')。
自分は昔二つともつまずきました^^;
FAQスレとかあったほうがいいかな?
85 :
T女の竹田 :2001/07/30(月) 21:07 ID:???
余談だけど、昔書いたスクリプトを見ると s/\+|\\|\(|\)|\[|\]|\{|\}|\^|\$|\*|\?|\./\\$&/g; みたいなのがあったり(恥)
86 :
69 :2001/07/30(月) 21:33 ID:CEolkqW6
>>76 なるほどです。
$? だったんですね。
perldoc perlvar 初めて使いました。てへ。
でも"$? & 127"のANDしてる値自体の
一覧みたいのはあるんしょうか?
例えばPerlがuseやrequireで
外部ファイルを取り込めなかった場合(等?)は512とか。
87 :
72 :2001/07/30(月) 22:27 ID:???
>>71 flockが良いかどうかという話は、今までにもいろんなところで議論されていて、
結局は本人の好みの問題になると思います。
が、あえて自分の意見を述べさせていただくと、
自分の場合flockだと失敗することが多かったと思うので、rename使ってます。
その辺の話はPerlメモがオススメです。
88 :
71 :2001/07/31(火) 01:38 ID:???
>>80 調べました〜!・・テストはまだです。
せっかくなので、いろいろ試しにやってみようと思います^^
>>72 なるほど。しっかり動作確認してから運用した方がいいですね。
Perlメモみてきます!
うう、いろいろ見てまわってるうちに、どんどん分らない事が増えてます。
そもそも、DB_FileとバークレーDBの関係がよくわかっていません。
DB_FileさえあればバークレーDBも使えちゃうってことなんでしょうか。
それとも、またそれ専用のモジュール等が必要とか・・?
ttp://member.nifty.ne.jp/hippo2000/perltips/db_file.htm [$X =] tie %hash, 'DB_File', [$filename, $flags, $mode, $DB_HASH] ;
この先頭の [$X =] もあるとどういう利点があるのか不明なのです。
こんなわたしに丁度いいリファレンスサイトとか解説書がありましたら
どうか教えてくださいませ。。
> でも"$? & 127"のANDしてる値自体の > 一覧みたいのはあるんしょうか? use POSIX; すると、この辺の定数使えるようになるみたいだ。 SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK SA_RESETHAND SA_RESTART SA_SIGINFO SIGABRT SIGALRM SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN SIGTTOU SIGUSR1 SIGUSR2 SIG_BLOCK SIG_DFL SIG_ERR SIG_IGN SIG_SETMASK SIG_UNBLOCK あとは、man 2 signal とか、/usr/include/sys/signal.h とか参照? > 例えばPerlがuseやrequireで > 外部ファイルを取り込めなかった場合(等?)は512とか。 なにか勘違いしている?
90 :
69 :2001/07/31(火) 04:52 ID:zN5/REcM
>>89 またしてもありがとうございます。
ここら辺あたれば何か分かりそうな気配・・・
>なにか勘違いしている?
いえ、勘違いではないです。
やってることが簡易shellみたいなもので
実行後、エラーの返値を見ても実際は何が起きたのか
さっぱり分からないので何とかしたいなぁ、と。
故に返値一覧があったら楽でいいなぁと思った次第です。
91 :
81 :2001/07/31(火) 05:48 ID:q2wDcpy6
>>84 竹田様
お手数おかけしました。お忙しい所ありがとうございます。
本当に嬉しいです。ありがとうございました。
何をやりたいのかさっぱり理解できん... もうちょっと整理して質問しよう。
Perl では EUC を使おうよ ヽ( ´ー`)ノ
>>69 絶対勘違いしていると思われ。
JAPUたんに一票。
95 :
69 :2001/07/31(火) 23:11 ID:???
そう言われると勘違いしているのかもしれないに一票。
あはは、、もうちょっと出来たら書き込んでね ^_^
97 :
名無しさん@お腹いっぱい。 :2001/08/01(水) 07:50 ID:kOCX6RGE
FTPで削除できないファイルが生成されてしまったのですが、(人様のCGI使用) unlinkで削除出来ますでしょjか?
別に69たんを責めているわけじゃないので、勘違い無きよう... とりあえず質問するときは、「具体的な目的」も併記すると吉かもしれない。 「○○をしたときに、云々...」という質問の仕方でも悪くはないけど、 実はそれよりもうまい方法を教えてもらえるかもしれないぞ。
100 :
名無しさん@お腹いっぱい。 :2001/08/02(木) 00:28 ID:DguDE1y6
キャストのやり方おしえろやゴルァ!
101 :
:2001/08/02(木) 00:46 ID:8xHqzTcA
/usr/libディレクトリと/usr/site/libは何を基準に分かれてるんですか?
/usr/binと/usr/local/binが分かれてるようなもの
103 :
名無しさん@お腹いっぱい。 :2001/08/02(木) 03:43 ID:GB8M4TIE
2つの同じフォーマットのファイルAからBへのバックアップを考えています。 ファイルA,B共 postday#sing#cast#part#add postday#sing#cast#part#add と言った形式なのですが、無差別に追記して行くと内容が重複してしまうので postdayをキーにして、ファイルBの最後の要素のpostdayとファイルA のpostdayを比較、一致しなければそのままファイルBに追記、 一致する要素が有ればそこまでをpopして、ファイルBに追記したいのです。 バックアップの参考になりそうなスクリプトを見てみたのですが、 アレンジする事が出来ないでいます。
>>103 単純にバックアップを取るのであれば、File::Copyでも使えばいいかと思いますが。
105 :
103 :2001/08/02(木) 03:58 ID:GB8M4TIE
>>104 さん
レス有難う御座います。掲示板のログのような(実際は少し異なります)
小さなログファイルAを大きなファイルBにバックアップしたいのです。
ファイルAは保存期間や容量が小さい為に効率的にファイルBに保存したい
と考えています。
106 :
103 :2001/08/02(木) 04:06 ID:GB8M4TIE
やっぱり自分で考えなきゃ駄目ですね、 ファイルBを読み出して最後のエントリの日付"postday"を"$saisyuu"で得る。 ファイルAを読み出す。 $saisyuuとファイルAの"postday"を比較 重複しなければそのままファイルBに追記。 $saisyuuと一致する行がファイルAにあればそこまでを削除して、ファイルBに追記。 これで上手く行かないか挑戦してみます。 有難うございます
107 :
104 :2001/08/02(木) 04:34 ID:???
>>103 一例として。
statでファイル更新時間を取って、異なれば書き込み、とか。
my @file = qw(A B);
if ((stat $file[0])[9] != (stat $file[1])[9]) {
#...
}
109 :
>>103 :2001/08/02(木) 04:40 ID:P5Z/J3iM
効率悪いけどこれじゃダメ?何MBもあるわけじゃないんでしょ? # A を読み込み open A,"a"; @aaa=<A>; close A; # B を読み込み open B,"b"; @bbb=<B>; close B; # @aaa と @bbb の非共通部分を @ccc へ for(@bbb){ @ccc=grep(!/$_/,@aaa); } # @bbb と @ccc の共通部分を @ddd へ for(@bbb){ @ddd=grep(/$_/,@ccc); } # @aaa と @ddd を書き込み open C,">a"; print C @aaa , @ddd; close C;
110 :
名無しさん@お腹いっぱい。 :2001/08/02(木) 14:11 ID:RSuVRy4c
えー、ちょっと訊きたいんですが、 サブルーチンの中でサブルーチンを実行し、 そのサブルーチンの中でも別のサブルーチンを呼んで… という風にサブルーチンを入れ子にしていくと内側の階層の深いサブルーチンの 挙動がおかしくなっていくというか、時には動かないなんてことはあるんでしょうか? ためしにある処理をそのまま書いてちゃんと動いたものを サブルーチンとして{}で囲んで書いただけでおかしくなりました。 環境はWin+ANHTTPDなのですが、もしやWinPerlだけの症状なのでしょうか? どなたかご存知の方いらっしゃいましたらお願いします。
>>110 多分サブルーチンの書き方に問題があると思われ。
>>110 そのスクリプトを出してくれ。
ありがちなものとしては、同じ名前のサブルーチンが他に存在してるとかかな?
w2k+ANHTTPDだけど、普通に動いてるよ。
113 :
110 :2001/08/02(木) 14:23 ID:VO0DTrjQ
すばやいレス感謝です。
>>111 各サブルーチン単体では全て期待通りに動作します。
入れ子にしていった場合にのみおかしくなるんです。
>>112 全部出すと相当長いのでちょっとここに出すのは勘弁です。
改めて確認してみたらおかしくなってるところは3重くらいになっているだけでした。
簡略化した形で書けたらあとで貼ります。
ありがとうございます。
>>113 myのせいでサブルーチンの結果が外に出てないというオチもないよね?
115 :
110 :2001/08/02(木) 14:36 ID:VO0DTrjQ
>>114 いや、全部returnで明に結果を返してます。
#そういうことですよね?
116 :
110 :2001/08/02(木) 14:53 ID:???
んー。いろいろ削ってみたんですが、 関係するサブルーチンは6個ほど、200行くらいになってしまいます。 ここに晒すのはちとためらわれます。。。。 うーむ。。
>>110 推測でしかないが。
引数渡しに失敗している可能性。
119 :
110 :2001/08/02(木) 15:11 ID:VCBoAI72
皆さんレスいただいて本当にありがとうございます。 例えばですね。 print $hoge; print &Foo; これで正常の出力が得られるのですが、これを &Hoge; sub Hoge{ print $hoge; print &Foo; } と書くと何も出力されないのです。 こんなのってありなんでしょうか? &Foo;の中でも複数のサブルーチンを呼んでます。
>>119 それで挙動がおかしくなるなんて聞いた事無いが。
121 :
名無しさん@お腹いっぱい。 :2001/08/02(木) 16:01 ID:IfHUjzJo
あまりにも初心者すぎて書き込むのに気が引けるのですが・・・ カタカナの語尾の長音を取るように置換したいのですが (「コンピューター」→「コンピュータ」) どのようにしたら良いでしょうか?
122 :
:2001/08/02(木) 16:02 ID:8xHqzTcA
多分、死にたくなるような単純なミスでは?
123 :
110 :2001/08/02(木) 16:23 ID:???
>>120 だから困っているのでつ。
実は最初の状態でも
内側で呼んでいるサブルーチンの挙動が微妙に変なのだが…
>>122 そうなのかなあ…。
おれ、この間もそれやったんだよな…
そうだとしたらつくづくヴォケ野郎だな、、俺…。
124 :
名無しさん@お腹いっぱい。 :2001/08/02(木) 16:45 ID:mjquR9Og
ラージオブジェクトの説明が詳しくのってる ところありますかね。 実際の使用例とか・・・。 PHPとPostgresqlで・・。
>110 出来ればサブルーチンを見せて欲しいが。 というかuse strictで引数渡しもちゃんとして書こうよ。
126 :
ちんちんの長さ12.5cm :2001/08/02(木) 23:08 ID:8xHqzTcA
------ use strict; my $key; foreach $key (keys(%ENV)) { #処理... } ------ と --- use strict; foreach my $key (keys(%ENV)) { #処理... } ------ では、体感できない範囲でも速度違いますか?
127 :
名無しさん@お腹いっぱい。 :2001/08/02(木) 23:09 ID:SuLp4aV6
jcode.plの使い方で分からないことがあり、投稿することにします。 #!/usr/bin/perl -w require 'jcode.pl'; $text = "あいうえお"; $code = &jcode::getcode(*text); print "$code\n"; こういうスクリプトを作って実行すると、以下のようなエラーが出てしまいます。 [madjack@cluster /home/madjack]% ./perltest.pl Can't locate jcode.pl in @INC (@INC contains: /usr/lib/perl5/5.00503/ppc-linux /usr/lib/perl5/5.00503 /usr/lib/perl5/site_perl/5.005/ppc-linux /usr/lib/perl5/site_perl/5.005) at ./perltest.pl line 3. 何がおかしいのでしょうか?
128 :
名無しさん@お腹いっぱい。 :2001/08/02(木) 23:37 ID:I9vB6MGk
110ではないです。 use strictってどういった使い方をするんですか? シェルでやってみたら、今まで動いてたスクリプトにエラーチェック(?) が沢山でてきてしまいました。 125さんの引数渡しって言葉にも混乱してるんです。 すみません、余裕のある方教えて下さい。
129 :
名無しさん@お腹いっぱい。 :2001/08/03(金) 00:14 ID:eb2ym/zs
POP3サーバから「ウィークリーまぐまぐ」の重たいメールだけを削除 したいですが、何か簡単なスクリプトありませんか?
130 :
名無しさん@お腹いっぱい。 :2001/08/03(金) 00:15 ID:eb2ym/zs
>>129 サブジェクトにWeekly Mag2が入ってるのを削除
>>126 違うよ。上のほうが速い。
>>127 @INCにjcode.plが無いと言われてる。
エラーメッセージは英語だから読まないというのは止めましょう。
これくらい調べれば読める範囲なので。
で、requireに問題が。
パス無しで指定すると@INCを探しに行くので、
'./jcode.pl'等と実際に置かれている場所を指定しましょう。
>>128 use strictと宣言することによって、
コンパイル時にレキシカル宣言されていない変数があると、エラーになります。
グローバル変数が使えなくなるというわけで。
引数渡しってのは、&sub_routine($hoge, $fuga);
みたいにサブルーチンに引数を明示的に渡すのです。
これで、サブルーチンには2つの引数しか行かないことになります。
# 日本語的におかしいかもしれないが、ご容赦。
133 :
128 :2001/08/03(金) 01:05 ID:ldQ3DQJ.
>>132 ありがとうございます!
>グローバル変数が使えなくなる
だ・・だからあんなにエラーが出たのか・・・
それでもきちんと動作することがいいスクリプトってことですかね
なんでこんなやっかいなものを皆さんお使いに・・・?
素朴な疑問でした。^ ^;
134 :
132 :2001/08/03(金) 01:37 ID:???
>>128 「自分しかそのスクリプトを見ない」
「どこかでエラーが起こっても、自分はすぐわかる」
「自分は絶対typoしない」
このあたりの条件を兼ね備えているのなら、全部グローバルでもいいのかもね。
私はいつもuse strictしてます。
# ちなみに、my宣言した変数のほうが、グローバルより若干速い。
グローバル変数が使えなくなる訳では無いですよ。 Perl5.6以降ならmy($var)同様の使い方でour($var)が、 それ以前のVersionならuse vars qw/$foo @bar/;とし、 宣言したグローバル変数を使用可能に出来ます。 私も初心者の頃はuse strictなど煩わしいだけ、と思っていましたが、 今では反射的にuse strictを書くようになりました。 慣れるまで色々面倒でしょうが、 黙って使っていると後々幸せになれるはずです。
136 :
132 :2001/08/03(金) 01:57 ID:???
137 :
128 :2001/08/03(金) 03:04 ID:ldQ3DQJ.
>>134 ,135
詳しい説明ありがとうございました!
むぅ。凄く勉強になります。
わたしの持っている本にはこんな事全く書いていなかったので・・
今後少しずつ規模の大きいスクリプトを組んでいくのなら、
今のうちに慣れてきちんと書けるようにした方がいいですよね。
しかし組み方を1から考えなおさなくちゃ難しそうですが(泣)
がんばってみます!
win98のHTTPDでチョコチョコプログラム組んでるんですが、 丁度良いネタがでたので質問します。 ローカルで for(my $i=1;$i<100;++$i){ ##処理## } というプログラムを走らせると$iが0から始まってしまいます。 if文などでも同様です。 サーバにアップロードするときちんと動作するんですが、 やはり使用環境がいけないのでしょうか? ちなみに my $i; for($i=1;$i<100;++$i) だとローカルでもきちんと1から動いてくれます。
>>138 for (my $i = 1; $i < 100; ++$i) { print $i,"\n" }
# 1
# 2
# ..
# 99
きちんと出ましたよん。
ちなみに当方ローカル環境、Win2k + Apache1.3.20 + ActivePerl623
>やはり使用環境がいけないのでしょうか? 君の使用環境がわからなくては誰にも判断しようがないと思うが。 ネタですか?
141 :
うん :2001/08/03(金) 06:21 ID:wwW.OFoE
うん
143 :
103 :2001/08/03(金) 07:53 ID:aOu/LdE6
>>107 >>109 レスが遅れてしまいました。お二方のアドバイスが参考になって色々なアプローチ
が有るのが分かりました。
一応、一日格闘した挙句(^^) ファイルAのサイズは比較的小さくファイルBはなるべく
大きなサイズを確保したかったので、perlメモさんで
http://www.din.or.jp/~ohzaki/perl.htm#File_Tail を頂いて来まして、これでファイルBの最後の一行を得る→
$saisyuuとファイルAのpostdayを比較→一致する行が出現すればそれ以降を破棄
→ファイルBに追記モードで書き込み、と言う感じになりました。
今ローカルでとろとろと動いています(^^)
grepとか回した事が無かったので新鮮でした、色んな考えかたが有るんですね。
ありがとう御座いました。
144 :
127 :2001/08/03(金) 11:50 ID:dhEi2JqU
145 :
名無しさん@お腹いっぱい。 :2001/08/03(金) 14:24 ID:02P8SgLY
以下のcgiファイルと、htmlファイルを使って入力したものをファイルに書き込 み、ブラウザにも表示させるというプログラムを作っています。しかしながらブ ラウザに表示することはできるのに、それをファイルに書き込むことができませ ん。スクリプトをどう見直しても分からないので、ここの方に頼ることにしまし た。 ちなみに『print <<"HERE";』以下を削って実行するとInternal Server Error となってしまいます。 cgiファイル #!/usr/bin/perl -w $file = "log.txt"; read(STDIN, $in, $ENV{'CONTENT_LENGTH'}); open(OUT, ">$file"); print OUT $in; close OUT; print <<"HERE"; Content-Type: text/html <html><body> $in </body></html> HERE __END__ htmlファイル <form method="POST" action="cgi-bin/prot3.cgi"> <html><head><title> テスト </title></head><body bgcolor="#000000"> <font color="#ffffff"> 名前:<input type="text" name="name"><br> パス: <input type="password" name="pass"><br> <input type="submit" value="OK"><input type="reset" value="reset"> </font> </body></html>
>>145 ソースは見てないが
scriptじゃなくて、実行ユーザーとディレクトリのパーミッションだろ
147 :
146 :2001/08/03(金) 15:13 ID:???
>>145 ためしに 0バイトのログファイルをftpで送って 666 にするとどうなる?
滅茶苦茶なHTMLだな
system("/usr/bin/compress -e datafile.txt");
my宣言についてですが、 my($hoge); $hoge = hoge; $hoge = hoge; $hoge = hoge; と、 my $hoge = hoge; $hoge = hoge; $hoge = hoge; は同じ効果が出ているのでしょうか。
151 :
145 :2001/08/03(金) 22:37 ID:???
>>147 いけました。
まさかパーミッションが絡んでいたとは思いませんでした。
cgiではなく、ファイルをオープンして書き込む部分を
普通のスクリプトとして実行すると666でなくても書き込めるのに・・・。
うーん。
ありがとうございました。
普通のスクリプトとして実行したときは実行したユーザー cgiだとnobodyとかwwwとかになるんよ。(サーバーの設定によるが) で、そのログファイルのあるディレクトリの属性w(作成・削除)が ついてないから新規作成ができなかったのね ディレクトリを707にすれば作成もできると思うけど cgiと同じディレクトリはさけたほうがいいよん
サーバ上でファイルをアーカイブ化・圧縮するためにはどうすれば良いですか?
154 :
名無しさん@お腹いっぱい。 :2001/08/04(土) 04:55 ID:eUp0QEZw
ふと思ったけど「初心者」ってどの程度のもの? どこまで知ってれば中級者っていえるのかなー。 上級者の方に聞きたいです。 奥が深すぎて判断つかない。
155 :
名無しさん@お腹いっぱい。 :2001/08/04(土) 05:37 ID:vq//mZ8w
print "hello world"\n: ↑初心者
>>155 はまった(w < n:
で、ここのスレで質問してる人は初心者だと思ってるんでしょ?
自分も思ってるし。
こんなCGI探してますスレッド
http://corn.2ch.net/test/read.cgi?bbs=php&key=988777987&ls=50 ↑で見つけた自動更新cgi(?)なのですが、
どういう処理をしているのか、お暇な方、解説して欲しいのでありまする。
#!/usr/local/bin/perl
%html = ('0802' => 'index.html',
'0803' => 'nya.html',
'0804' => 'zzz.html',
);
@time = localtime();
$html = $html{ sprintf "%02d%02d", $time[4]+1, $time[3] };
printf "Location: $html\n\n";
158 :
名無しさん@お腹いっぱい。 :2001/08/04(土) 07:56 ID:DYf6StlI
適当な文から特定の文字だけ抜き出すにはどうすればよいのでしょうか? たとえば、 てきとう6なぶん なんて文があったとき(変な文だけど。。)数字の6を抜き出すにはどうすればよいのでしょうか? いろいろ試行錯誤しましたがどうしてもできません。お願いします。
159 :
名無しさん@お腹いっぱい。 :2001/08/04(土) 07:57 ID:eUp0QEZw
0802だったらindex.html 0803だったらnya.html ・・・(続く) っていう定義リストを作っておいて。 @time = localtime(); で現在の日付けを取得 $html = $html{ s・・・のところで、日付けを”0802”とかの数字の並びにする すると、$html{'0802'}となるので、最初の定義で0802だったらindex.htmlとなる。 最後に、printf "Location: $html\n\n"; で、自動的にindex.htmlにジャンプ。
>>159 さん
どうもありがとうございます。
助かりました。
161 :
名無しさん@お腹いっぱい。 :2001/08/04(土) 08:49 ID:eUp0QEZw
>>159 $meta='てきとうな6文字';
if($meta=~/\d/){print "$& \n";}
数字だったらこれでいけるけど、抜き出したい特定の文字がなんなのかによる。
163 :
158 :2001/08/04(土) 09:16 ID:DYf6StlI
>>161 この場合はどうやればよいのでしょう?
適当な文字56<!--tekito6-->適当な文字65
とかいう文の場合<!--tekito6-->の6(数字)だけを抜き出して、他の変数に代入するには
どうすればよいのでしょうか?161さんの方法ではうまくできませんでした。
お願いします。
164 :
JAPU :2001/08/04(土) 10:30 ID:???
if(/<!--tekito(6)-->/) { $hoe = $1; }
165 :
JAPU :2001/08/04(土) 10:31 ID:???
あ、こうか。 if(/<!--tekito(\d)-->/) { $hoe = $1; }
166 :
158 :2001/08/04(土) 12:36 ID:DYf6StlI
JAPUさんありがとうございます!うまくできました!
167 :
名無しさん@お腹いっぱい。 :2001/08/04(土) 12:37 ID:DQ4jThjY
クッキーに関しての質問です。 クッキーに配列を保存できますかね? 例えば、 $data=array( "a" => "hoge1", "b" => "hoge2" ); SetCookie("hogehoge", $data); こんな感じで$data配列を作成しクッキーに保存して、 $c_data=$HTTP_COOKIE_VARS["hogehoge"]; で、データを呼び出して echo"$c_data[a]"; で出力できるようにしたいのですが、 なかなかうまくいかないです。
168 :
JAPU :2001/08/04(土) 13:41 ID:???
169 :
名無しさん@お腹いっぱい。 :2001/08/04(土) 13:44 ID:DQ4jThjY
>>168 すいません。
PHPでした。スレッド間違い(汗
170 :
名無しさん@お腹いっぱい。 :2001/08/04(土) 16:54 ID:PSOASf6I
まったくの初心者です。 WEBサイトを作りたいのですが技術的なアドバイスをお願いします。 ・IDの作り方は? ユーザーIDとメールアドレスを登録すると自動的にパスワード付の メールが送られますよね?で、クッキーをオンにしてログインする。 そ〜いった技術です。ヤフーとかもそうですよね。 専門のスレがあれば教えてください。 まったくの初心者の教えて君で本当にすいません。
>>170 >IDの作り方は?
登録順でいいんじゃない?
172 :
名無しさん@お腹いっぱい。 :2001/08/04(土) 18:49 ID:8Ac4eVMA
CGIファイルの中にHTMLを組み込んでる最中なんですけど スタイルシートは使えませんか? それと、HTMLファイルで このように入力すると 半角スペースになりますが、CGIファイルの中ではこの 特殊文字をどのように置けば半角スペースになるでしょうか?
>>172 当然使える。
適当なところに CSS ファイルを置いて、link タグの href 属性で呼び出せば良い。
このようにって、見えん。
&nbsp;って居れてるのかな?
&と;は¥でエスケープしないとならないはず。
174 :
名無しさん@お腹いっぱい。 :2001/08/04(土) 21:41 ID:QrWijtIY
>>173 レスありがとうございます。
早速試してみます。
# 2chでもまともにレス返ってくるんですね。
# うれしいです(^^
175 :
IY :2001/08/04(土) 21:53 ID:???
そこにあるでしょ?
176 :
153 :2001/08/04(土) 23:34 ID:???
どうすれば・・・・。
178 :
名無しさん@お腹いっぱい。 :2001/08/05(日) 00:53 ID:Y9qpbhzk
本当に初心者で申し訳ないのですが、セッションって 何でしょうか? よくTCPでセッションを張る?という 表現(この表現も正しいかわからないんどえすが)が ありますが、通信経路を確保するということでしょうか?
179 :
153 :2001/08/05(日) 05:43 ID:???
モジュールはどうやったら使えますか?
>>153 useすればいいだけですが。
use Compress::Zlib;
アーカイブ作るんならこれか?
181 :
170 :2001/08/05(日) 15:23 ID:.gPxxl9o
>>171 説明の仕方が悪かったようですね。
お聞きしたいのは、‘どうやったらそ〜いうことができますか?’です。
親切な方教えてください。
182 :
JAPU :2001/08/05(日) 17:45 ID:???
Compress::Zlib はアーカイブは作れないんじゃない? Compress::Zlib を入れたら、 perldoc Compress::Zlib しましょう。
>>181 登録順のIDなら
現在のID取得して変数に突っ込んでそれに+1するだけでOKでは?
パスワードは、適当な文字ランダムで作ってcryptでもすればできるんじゃん?
# 永遠の初心者なのであんまり信用しない方がいいかも
>>181 データベース使ってるなら「自動加算型」みたいなのがあるからそれ使う
使ってないなら、最新のIDをファイルに書いといて、登録のたびにそいつを
増やしていく。
185 :
153 :2001/08/06(月) 04:28 ID:???
やはりWIN98+HTTPDっていう夏厨装備ではモジュールは使えませんか? ちなみにF2S使ってるんですが、一般の無料サーバでも試せませんよね?
186 :
名無しさん@お腹いっぱい。 :2001/08/06(月) 04:57 ID:QmPH6qXg
$ENV{"HTTP_REFERER"}と$ENV{'HTTP_REFERER'}という2種類の書き方を見かけるんですが、 "と'はどう使い分ければ良いんでしょうか?
>>186 使い分けなくても良いです。
お好みに合わせて使いましょう。
$ENV{HTTP_REFERER}
もありです。
>>185 f2sは鯖のコマンドでgzipが使えるね、と密かに選択肢を増やしてみたりする。
ものすごく初心者で恐縮なんですが、perlに処理させている 数値演算をそのままSTDINから入力して電卓にする と言う訳には行かないのでしょうか? $n = <STDIN>; print "$n\n"; ってして 1+1 と入力すると、当然 1+1 と表示されるだけです。 変数が展開されて、ついでに中の数式も計算してくれたりは出来ないですよね。 ちゃんと演算子と数値に分けて数値を変数に代入して、内部? で 計算した後表示するしかないのかなぁ、、
use strict; $_ = <STDIN>; @_ = split/\+/; print $_[0] + $_[1]; あとは適当にやってね
有難う御座います。
>>190 、えっと、すいません、そんな感じで
色々作ってみてるのですが、ふと最後の式が入力した式そのまま(あたり前ですが)
なので、perlの演算式をそのまま与えれば3行位で電卓が出来ちゃうかな
と考えてしまったんです。
>>191 、
うわ、有難う御座います。4文字で解決です (笑)
馬鹿はevalを使っちゃ駄目と何処かで見たんで、、、
文字列をプログラムとして評価してくれるんですね。
なるほどー、危ない訳も良く分かりました。 感謝です。
こう言う事か・・・・ $n =<STDIN>; print eval("$n"); 何か感動した ^ ^ )
194 :
名無しさん@お腹いっぱい。 :2001/08/06(月) 13:57 ID:c9LAtMIM
ある処理に要した時間をミリ秒単位で計測する方法はありませんか? 具体的には、webでGETに要した時間を計測したいのですが・・・
196 :
194 :2001/08/06(月) 15:01 ID:???
>>195 何とか実現できました。ヽ(´ー`)ノ
情報ありがとうございました。
>>193 電卓なら、
$n =~ m/[^\d\+\*\/\.\s]/ && ...;
な感じで、入力値チェックもしたほうがいいかもね。
何もチェックしないと任意のコードを実行できちゃうからね。 馬鹿はevalを使うなってのもそういうことだろうね。
199 :
189 :2001/08/06(月) 17:22 ID:???
詳しい説明ありがとッス。なるほど、JAPUさんがサイトで書かれてる 汚染チェックってやつですね、確か僕が見た所でもそう言ったニュアンス で書かれてました。 それにしても、、+-だけで演算子と数値は5個まで、とか言うダサイ 電卓をif ($_ =~ /\d/).... とかズラズラ並べて書いてたんで 目から鱗落ちまくりです。 了解しました、cgiでは当分使わないです (笑)
すでに解決済みかも知れないが、俺ならこうするかな。 $n = <STDIN>; $n =~ tr{0-9\+\-\*\/\(\)\.}{}cd; print eval($n);
201 :
729 :2001/08/06(月) 23:51 ID:Mx2WAaZU
Perlの書き方について質問させて。 「メモリの浪費」を抑えたいんだけど、いったい具体的にどういうことを すればいい?そもそも「無駄に食う」ってのはどういう書き方をしたものなの? 初心者でスマソ。
202 :
153 :2001/08/07(火) 00:00 ID:???
はわわ・・gzip・・頑張ります・・。
>>201 悪: @lines = <IN>;foreach (@lines){ ... }
良: while(<IN>){ ... }
204 :
名無しさん@お腹いっぱい。 :2001/08/07(火) 01:48 ID:bTCo0M5g
>>203 で、<IN>のx行目を操作したいとき、@linesにセットしないで
なんとかすることは可能でしょうか?
206 :
名無しさん@お腹いっぱい。 :2001/08/07(火) 02:06 ID:bTCo0M5g
>>205 そうなんですか。。。
今まで、とりあえず配列にセットして、popやらspliceやらの関数使ってました。
勉強しに逝ってきます。
207 :
729 :2001/08/07(火) 08:58 ID:swpPnFjU
>>203 すっきり書けるものを、余計なプロセスを経てるということ?
他にはないっすかねぇ。気持ち的にforeach〜よりもuntilとかの
制御を使うほうが重い気がするんだけど、どう?
ちょっと質問したいんですが、 てきとー <!--a--> てきと あああ <!--b--> と言う文があったとして<!--a-->と<!--b-->とその間の文を消したいんだけどどうすればいい? s/<!--a-->.*<!--b-->//;だとできなかったんだけど。
>>729 根本的に違う気がする。
@line = <IN> ってのは全てに配列に読むことによって、メモリを非常に使う。
それに対してwhile (<IN>) {} は一行づつ読み込むことによって、
メモリの消費が大きくならない。スピードは殺しているだろうが。
>>208 s修飾子をつけて単一行として処理。
s/<!--a-->.*<!--b-->//s;
場違いとは思いますが、あえて聞かせてください。 ton.2ch.net/test/read.cgi?bbs=sec&key=996966367&st=40&to=40&nofirst=true これがperlプログラムのコーディング上のチェックミスらしいんですが 本当のperlhackerさんに掛かれば掲示板のタグチェックなんて意味を なさないと言う事でしょうか? どうしても興味が有ったので可能性と言う事で、お聞きしました。 方法を知りたいのでは無いんです。 場を乱したらごめんなさい。放置してくださいませ。
メモリ消費==変数の数 と考えればわかりやすいんでは? 配列だってa[0]で一つの変数分のメモリを消費します、これが100個 あれば変数100個分のメモリを消費します。 処理速度!=メモリ消費 です、メモリ消費を抑えるために例えば 配列に入れるんではなく1行づつファイルに書き出したりしてたら 速度は遅くなります。 当たり前のことを長々と書いてしまって恥ずかしい。。。
配列が滅茶苦茶大きくなれば1行づつの方が早くなるけどな。 # そこまで大きいデータをTEXTで保存はせんだろうが
213 :
名無しさん@お腹いっぱい。 :2001/08/07(火) 13:07 ID:t8arwgAY
case sensitiveのサーチエンジンのスクリプトを case insensitiveにしたいのですが 良い記述方法等ありますでしょうか?
>>210 フィーネはcgiの問題とは言ってるがbbs.cgiの問題とは言っていないところ
がポイント
>>210 ドキュソの俺にはどうやってるのかサッパリ分からん…。
しかもCGIのバグって…?
フィーネが前言ってたとおりログに直接書いてんだよ。 CGIのバグを利用して「書き込んでる」とは言っていない点にも注目。
217 :
729 :2001/08/07(火) 15:25 ID:m8P3Xhl6
ありがとう、みんなレベル高いな・・・。 「処理速度!=メモリ消費」は目から鱗だったよ。 「箱庭」「FFなんたら」が敬遠されてるけど、サーバ側は何が不満なの? どこかのサーバでは“メモリ消費が激しいCGI”と説明してたけど、 サーバにとって問題のあるCGIってのは「メモリ消費>速度」なのかな。
リロードの回数がチャットの比じゃないとか? よく知らないけど。
メモリの話なので便乗質問です。 なるべくメモリ消費を少なくする為にundefで変数を初期化するのは 良い事なのでしょうか? undefが入る分、処理は遅くなると思います。 よっぽどメモリを喰うようなスクリプトでなければ気にする必要は ないのでしょうか? いつも悩んでるんです・・・。
220 :
215 :2001/08/07(火) 17:43 ID:???
undefしてもメモリが開放されるとは限らん…よな、確か。
>>221 まじで?じゃあundefの存在意義は?
ソースが分かったら教えてちょうだい。
223 :
222 :2001/08/07(火) 18:31 ID:???
よく考えたらメモリ開放する意味以外でもundef使ってるや。 存在意義はあるね。 けどソースが分かったら教えてちょうだい。
224 :
221 :2001/08/07(火) 19:41 ID:???
たしかプログラミングPerlで見た気がするが…よく覚えておらん。スマソ Perlのソース見れば分かるんだろうが…(;´Д`)
メモリの開放ってどうやるんだい? そして同じ名前の変数を何度も使いまわせば浪費にならないのかい?
メモリの解放まで気にするならPerlを使ってはいけませんとか
詳しい人出て来て教えて欲しいage
数百KB程度のことなら
>>226 の言うことが正しいのかもしれぬ。
ハッシュ一要素につき1KBくらい消費するとか聞いたことあるし。
undefしたオブジェクトに関連する領域はすべて回収して再利用される。
しかし殆どのバージョンのUNIXでは、領域をシステムに返却されない。
青らくだにあるな。
>>219 結局、メモリリークをおさえるか、処理速度を優先させるか。
これはケースバイケースだったりするわけで。
どちらか問われない、又は問題無い状況であれば、好みで使えばいいかと。
$var = "ABC"; コレってメモリをいくらぐらい食いますか?
>>230 気になるのならどうにかして試して調べろ。
>>231 出来ないくせに大きな口叩くなよ(大爆笑)
やっぱり青らくだは一冊買っておくべきかな?初心者は。 箱庭風ゲームを作るつもりだが、メモリ消費と処理速度、どっちを 優先した方が良いと思う?箱庭みたいにご指名で「使用不可」 されたくはないからな…。
234 :
231 :2001/08/07(火) 23:43 ID:???
235 :
:2001/08/07(火) 23:45 ID:iLCparaY
せめてPerlも整数型、文字列型、オブジェクト型くらいには分けるべきだ
236 :
Crow :2001/08/07(火) 23:47 ID:???
print <<test; #この中でサブルーチンを直接読み込んだり、 #計算したりする事出来る? $kotae=$tmp*$check;#こんな感じで test
>>236 print <<test;
test
$kotae=$tmp*$check;#こんな感じで
print <<test
test
print <<test; ${ \do{ $katae = $tmp * $check; } } test
240 :
名無しさん@お腹いっぱい。 :2001/08/08(水) 01:17 ID:rNhUL.Uw
print <<test; @{[ $katae=$tmp*$check;]} test
メモリか… $hogege = 1024kb_str;#1Mぶんくらいの文字列 hoge; sub hoge{ my $hoge = $hogege; $hoge = s/sage//g; $hoge = s/age//g; $hoge = s/hage//g; $hoge = s/uge//g; $hogege = $hoge; $hoge = 0; } 最後に0でクリアするのって意味あるのだろうか…
>>241 無い。
プライベート変数はスコープ抜けると自動的に破棄されます。
というか、プライベート変数にコピーする理由も無いような。
243 :
名無しさん@お腹いっぱい。 :2001/08/08(水) 13:01 ID:79X/nc36
CGIで日本語ドメインを検索できるようにしたいんだけど、 PerlでSJISをUNICODEに変換するには、どのように記述すれば良いのですか?
>>243 モジュール使いましょう。
検索すればいくらでも出てくるかと。
245 :
243 :2001/08/08(水) 14:54 ID:2OjC6AHM
モジュールって jcode.pl みたいなやつですよね?
#!/usr/local/bin/perl use strict; print "Content-type: text/html; charset=EUC-JP\n\n"; print <<"EOM"; テキストを出力 EOM exit; use strict; を宣言すると上のようなスクリプトが動かなくなります。 こう言う場合は宣言してはならないものなのでしょうか。
時々居るんだよな、 コーディングミスをuse strictの所為にする厨房が。
やはり動きますよねぇ…なんで動かないのだろう。 ちなみにテキストの内容に $ とか @ とかは入って無いです。 んー…
エラーメッセージよめや。
ニフティはエラーメッセージ出ないので分かりません。 というかローカルでは動くんですが…
動くね、うーん結構深かったりして 違うか 多分これからもエラー出まくるから出来ればコマンドラインでwcした方が 良いよ。cgiでやるならKcache入れるとか。 探せばごろごろ出てくる。
>>252 サーバで実験すんな。ローカルでやれや。
>>254 ローカルでは動いてると書いてるようだが。
>>252 shebang行が違うというのは無しの方向で。
>>258 ウチもニフだが合ってる。
ってかマジで動かないねぇ。
サーバのせいにして終わりにしておけ。
niftyは@INCにパスが通って無いんじゃない?
perlのバージョンを調べてみるとか。 strict.pmが無いならアウト。
明記されてるな。 perlのバージョンは5です。 (ただし、perl5での標準的なモジュールは使用できません) ということで、strict.pmすら無いというオチかと。
相当なボンクラだけどかなり口は立つと見た。 いいな ベシャリ出来るって いや ある意味不幸か ヽ(´ー`)ノ
265 :
264 :2001/08/08(水) 16:45 ID:???
間違えた、ゴメンネ>>皆さん 許して 30時間寝てないの。。。。。。
>>264 今一番勢いの良いスレに書こうとしたと見たが(w
ニフはモジュール用意してないんですね… 分かりました、みなさんレスどうもでした。
ニフにモジュールが無いってのは結構有名な話だと思ったが…
知らなかったよ、標準モジュールも無いってちょっとヒドイね
お前ら、いつまでsageてるんだよ
すみません、xxx.datのなかにある内容を消すにはどうしたらいいんですか? xxx.datの中身が 127.0.0.1 127.0.0.1 127.0.0.1 127.0.0.1 だとしたら、これを消したいんです。
open FILE, ">xxxx.dat"; close FILE; もっとスマートな方法ありそうだけど。
273 :
272 :2001/08/08(水) 21:26 ID:???
xが1つ多かった。逝ってくる。
274 :
271 :2001/08/08(水) 21:32 ID:???
ま、まだ逝かないでくださいよっ。 その線で、datに何かを書き込む形で消すことはできませんか?
275 :
271 :2001/08/08(水) 21:35 ID:???
open( FILE , "+<xxx.dat" ); while( <FILE> ){ push ( @IP , $_ )}; #ここでなにかやって print FILE @IP; close FILE; って感じに。
print FILE "nanika\n"; とほほとか見ると結構わかるよ
ん? それで良いじゃん??
278 :
271 :2001/08/08(水) 21:48 ID:???
いえ、これだと@IPにxxx.datのIPが入っているからそのまま書き込んじゃいます。 で、途中で@IPをどうにかしてから書き込みして消したいんです。
>>271 =
>>275 open( FILE , "+<xxx.dat" );
while( <FILE> ){ if($_ ne "127.0.0.1\n";){push ( @IP , $_ )}};
print FILE @IP;
close FILE;
こんな感じ?
280 :
271 :2001/08/08(水) 21:54 ID:???
全部の配列 foreach $IP (@IP){ $IP = ();} ってやっても消えないんですよね…。 foreach $IP (@IP){ $IP = "\n";} も4行だけもとIPが改行されるだけで消えるわけじゃないし。
どうしたいのか全然わからねぇ。例えばでいいから
>>271 の状態から何をどういう状態に持っていきたいのか
具体的に書いてみ。
282 :
271 :2001/08/08(水) 22:04 ID:???
>>281 すみません。
xxx.datに他人のいろいろなIPを「1日だけ」保存しておきたいんです。
これは1日に1度しかCGIを利用できないようにするためです。
で翌日、保存しておいたIPを全て除去したいんです。
283 :
271 :2001/08/08(水) 22:09 ID:???
具体的に書くと、 ( $sec , $min , $hour , $day , $mon , $year ) = localtime( time ); open( FILE , "+<xxx.dat" ); while( <FILE> ){ if($_ ne "127.0.0.1\n";){push ( @IP , $_ )}}; #$IP[0]に日付が書いてある。 #$dayと同じ日ならIPを後ろに追加して、 #$dayと違う日ならxxx.datの中身は$IP[0]=$day;だけにしたい。 print FILE @IP; close FILE;
んで、
>>272 じゃダメなの?
ファイルごと消したいなら、
unlink('xxx.dat');
だし。
>>274 はどういうことよ?
>>282 一日一度(23:59と0:00はOK)か、24時間おきかにもよらない?
細かいことだけど。
286 :
285 :2001/08/08(水) 22:11 ID:???
先に書かれたか。 一つの手段として、xxx.datを${day}.datにしてしまう手もある。 そして、古いログを自動削除するように書き加える。
287 :
271 :2001/08/08(水) 22:15 ID:???
>>286 そういう手もあるんですか。
open FILE, ">xxxx.dat";
↑これはdatの中身をいったん消去するんですか?
>>287 一旦消去するよ。
てかそれくらいは試せばわかるだろ。
289 :
284 :2001/08/08(水) 22:22 ID:???
あ、かぶった。 なるほど。 $IP = 新しいIPアドレス として、 open( FILE , "+<xxx.dat" ); $oldday = <FILE> if ($day eq $oldday) { seek(FILE, 0, 2); print "$IP\n"; } else { seek(FILE, 0, 0); trucate(FILE, 0); print "$DATE\n"; } close FILE; じゃだめ?
290 :
271 :2001/08/08(水) 22:40 ID:???
かっこ良すぎです
>>289 ,
>>285 .
おかげで無事難問を突破できました。もうどっちの方法でログを消そうか迷ってます。
truncateがスマートで美しいだけど、${day}.datもファイル生成あたりが上級者っぽいし。
#これでまたKENT氏に1歩近づいた…。
291 :
三下 :2001/08/08(水) 23:32 ID:???
先生、ちょっとイイですか!? 変数を$_このていどに省略する理由ってのは 見た目だけですかい!?
>>252 use strict くらいの効果なら,直接コードに書いてしまったら?
strict.pm を見れば一目瞭然だけど一応.
BEGIN { $| = 0x00000002|0x00000200|0x00000400 } # 左からrefs,subs,vars
%INC を見ればそのスクリプトがどのファイルを使っているか分かるから,
これを使って,Nifty 用スクリプト(モジュールを全て展開する)を生成する
トランスレータを作るという手もあるかも.
一緒にstrict.pm(とその他いくつか)をあぷするという手もある
>>292 $|じゃなくて$^Hな
わざわざ展開トランスレータを書くくらいなら
アプしたほうがいろんな意味でいいと思うがね。
ローカルでuse strict;環境で動くって確認されたなら、 その行を削ってアップすりゃいいじゃん。
296 :
名無しさん@お腹いっぱい。 :2001/08/09(木) 02:08 ID:1PgCYU2A
上のほうで出てるのとは状況が違うんですが、ローカルで動いてたスクリプトが サーバー上で動かない理由って何がありますかね? Winで作っててサーバーはUNIXです。スクリプトはEUCで保存して、改行はLFにしました。 別のファイルをrequireしてますが、それはSJISです。 どうか教えてください。
>>296 1:user/bin/perlの違い
2:絶対パスと相対パスの違い
3:Perlのバージョンの違い
4:使用できるモジュールの違い
5:パーミッションの違い
続きよろ。
>>298
298 :
名無しさん@お腹いっぱい。 :2001/08/09(木) 02:21 ID:1PgCYU2A
>>297 レスありがとうございます。
言われた点をチェックしてみます。
また後できます。
モジュールの話が出ているので便乗して質問です。 ウチもニフティなんですが、 モジュールを使うときはインストールしなければならないと聞いたことがあります。 インストールには特別な作業が必要なんでしょうか。 それとも、ただアップして requier か何かで呼び出せば良いんでしょうか。
300 :
名無しさん@お腹いっぱい。 :2001/08/09(木) 02:44 ID:1PgCYU2A
>>297 言われた点をチェックしてみました。
1: Perlのパスはあってます。
2: それはrequireするファイルのパスの事でしょうか?もともと相対パスで書いてあり、合っています。
3: Perlのバージョンは5です。特に問題ないはずです。
4: モジュールは使用していません。
5: パーミッションは755です。これで他のスクリプトは動いています。
この状態で考えられるほかの原因の心当たりがありましたら教えてください。
よろしくお願いします。お手数かけます。
perlのバージョンは5でも、細かい違いによって(以下略 みたいな事は無いかな?
「Perlのバージョンは5です」 この回答かなり困るやね。
>特に問題ないはずです。 どうもバージョン関係がぁゃιぃな
perl5.005_64じゃないとbase.pmが使えないという罠。 私はこれでモジュールの設計変更を余儀なくされた。
305 :
名無しさん@お腹いっぱい。 :2001/08/09(木) 02:57 ID:1PgCYU2A
んー。やはりそこをつっこまれたか…。 いやね、鯖の解説ページにそれだけしか書いてないんですよ。 僕も見た瞬間「げ!」と思ったんですが…。 ちなみに今まで10個くらいスクリプト書いてこの鯖で動かしましたが他のは大丈夫です。 それらの中では今回のスクリプトはかなり単純な方なのに…。 ちなみにただのフォームメールです。っていうかまだsendmailには送ってなくて、 フォームからの入力内容を画面に表示させてるだけです。 あ、レスくれた方ありがとうございました。 と言っても引き続きお願いします。 バージョン以外でなんかないですかね。
306 :
304 :2001/08/09(木) 03:00 ID:???
あ、私の借りてるレンタルサーバの話ね、これ(w
スマソ。
>>305 バージョン見たいなら、
$command = `perl -v`;
print $command;
みたいな感じで見れませんか?
307 :
名無しさん@お腹いっぱい。 :2001/08/09(木) 03:06 ID:1PgCYU2A
308 :
307 :2001/08/09(木) 03:11 ID:1PgCYU2A
>>306 むむ。なんかその方法だとうまくいかないッス。
ちなみにtelnetはつかえません。
Perlの5と5.6ってどの辺が違うんでしょうか?
正規表現の拡張くらいしか知らないんです。
309 :
名無しさん@お腹いっぱい。 :2001/08/09(木) 03:13 ID:bI3E6lI.
310 :
名無しさん@お腹いっぱい。 :2001/08/09(木) 03:19 ID:bI3E6lI.
311 :
304 :2001/08/09(木) 03:26 ID:???
>>309 それが何故か@ISAに入れても継承しなかったという。
まぁ私のコーディングミスだったんでしょうけど。はずかちい。
fields.pmを使うモジュールとか<base.pm必須 とはいえXSを使ってるわけじゃないから設計変更するまでのことはないと思うが…。
313 :
304 :2001/08/09(木) 03:44 ID:???
当時を思い出しながら逝って来ます
314 :
307 :2001/08/09(木) 03:53 ID:KTDhsApQ
>>310 さん
ありがとうございます。バージョン分りました。
5.00503…。あやしい…。
教えていただいたサイト行ってみましたが
今はちょっと時間がないのでこんなに読んでいられないです。
今度じっくり読みます。
とういうわけでできればバージョン5と5.6の違いで注意すべき点などありましたら
教えていただけると助かります。ほんと教えて君ですいません。
315 :
307 :2001/08/09(木) 04:11 ID:???
んがーー!みなさん。ありがとうございました。 いろいろ調べてみて、全部コメントアウトして、 print "ok"; だけにしてもエラーがでたのでちょっ根本的に違うだろ。 と思ってその前で呼んでるrequireを疑ってみました。 で、その呼んでるファイルの中でダブルクォートの内側に @マークをそのまま書いていたのがいけなかったようです。 \@にしたら動きました! ホント皆さんありがとうございました。 勉強になりました。
, -―- 、 , l[》《]| ヽ / i/ i ノノノ ))))〉 . / i i |(リ ( | | | ! / ̄ ̄ ̄ ̄ ̄ 〈ヘ|_|l| l ゝ~ lフ/| < 質問に答えてくれるみなさん ありがとう / | | |( ヽwliヽ | \_____ / /! | l ヘ《~ヘii~▲▲ / /ノノ! ノ|リ〉 \/( ゚ω゚) / , ./-‐- 、/V\ハ_ヲUU !/ ./ / / | ゝ つつ ヽ_/ ./ ! jj \ / i 〈 / | |' ゝ / l | !/ `〜‐-L__」〜'^
gmtimeとlocaltimeの違いって何かおしえて
>>317 gmtimeはグリニッジ天文台(跡地)の時刻を返す
localtimeはそのサーバーで設定されているタイムエリアの時刻を返す
320 :
名無しさん@お腹いっぱい。 :2001/08/09(木) 18:00 ID:4s0a7Yec
本物の初心者です(汗 以下の通りにしたいのですが、 ↓の部分にxhtmlをはさんで表示させることってできますか? 例えば<link />なんかが入ると、500エラーになってしまいました。 print <<"__HTML_START__"; Content-Type: text/html 【ここ】 __HTML_START__
>>320 xhtmlだろうがxmlだろうが関係ない。入れられる。
なにか他の原因があるはず。
最低限エラーが出るスクリプトを出してみ。
>>321 最低限に絞っていくと分かりました!
<head></head>の中の、
<link rev="made" href="mailto:
[email protected] " />
これを無くすと、500にならなくなりました。
しかし、これの何が原因なのか・・・
# 他の<link />は大丈夫でした。
<link rel="made"href="
[email protected] " />
とかって書いてるんでしょ。
<link rel="made"href="hoge\@hoge.jp" />
にしてみ。
あと、関係ないけど __HTML_START__ よりも __HTML_END__ の方がいいと思う。
324 :
323 :2001/08/09(木) 18:20 ID:???
あー先に出された。鬱。 @ が悪さしてるから \@ にしてね。
なるほど。 @が原因でしたか。直してみます。 ありがとうございました<(_ _)>
326 :
微笑 :2001/08/09(木) 19:08 ID:???
__
〃 _`__
,,-=-、、l{,_'´..._ `ヽ、、
〃. ',.´二W´- ‐-`\ \ヽ、___
_{l,'.'´ 、 ヽ ヽ ヽ彡k、ヽ\
.//`/ i l. \ 、ヽ `、 i彡}ヽ`' ´ ▲女優,アイドル、脱がしました▲
. /| / i { |l {\ {ヽ、_!..ヽ」_/} .}./ |__〉、
\l.{. l.ヾ _.ゝ_土. ゝ -'fT;;ヽ,| lテ}| ||__〉
/iヽゝヽ/{~);;:l {:..''ノ'ノノ|{ノ |_!!女優,女子高生のエッチ画像ばかりを厳選収集!スクール水着,女優,画像ばかり。
.|_|l」ヽ. ヽ ゞ‐' 、  ̄`ノレヽソ|
(.ソ.ゝ -- /' {=}ノ ◆アイドル画像秘宝館◆
(=| l へ、 /ノノ((.)).
http://www.futomomo.com/netidol/idolhappy/maki/ ((!)ヾヽヽ` ;.- ' ´ |'' ''"'´◆アイドラー◆
`~^``/'l ゜>\_
http://www.futomomo.com/netidol/idoler/megu/ , -‐〃"´ |___/ >- 、 ◆セーラー服◆
/ ./〃 |=/ 〃/ \
http://www.futomomo.com/netidol/sailor/miku/ / | ||, ‐-、_,...!、/_ ,..、 .〃/ ヽ ◆人妻◆
〈 / -ー.{ { {.= ヽ、|| l |
http://www.futomomo.com/netidol/waif/mai/ | ヽ /| |\ / i 〉 | ◆スイート倶楽部◆
〈 ∧ l_/./ | | \ _/ / /
http://www.futomomo.com/netidol/sweetclub/miyuki/ desghgyj
>>320 もう終わってる話だけど。
here docは、識別子の引用型によって中の文字列型が決まるよ。
例えば今回だったら、
<<"__HTML_START__"; (ダブルクォート文字列)
<<'__HTML_START__'; (シングルクォート文字列)
<<`__HTML_START__`; (バッククォート文字列)
というわけですな。参考までに。
328 :
名無しさん@お腹いっぱい。 :2001/08/09(木) 20:10 ID:MDUdBd8.
たとえば、Word123 とい単語があったとして、これを1文字ずつにばらして、 配列にセットしたいのですが、どうしたらいいでしょうか?
my @array = split //, $str;
<link rel="made"href="hoge\@hoge.jp" /> の最後の /> は何ですか? <link rel="made"href="hoge\@hoge.jp"> これじゃ駄目なのでしょうか?
>>330 XHTML では全てのタグに終了タグが存在し、且つ終了タグの省略が禁止。
んで、省略は出来ないけどその代わりに省略形が存在し、
<link rel (中略)></link>
の省略形が
<link rel (中略) />
というわけ。
大方こんな感じ。
333 :
名無し募集中。。。 :2001/08/09(木) 22:53 ID:.n9qBKK2
334 :
un :2001/08/09(木) 23:18 ID:???
un
335 :
名無しさん@お腹いっぱい。 :2001/08/09(木) 23:32 ID:qC8qL/U.
あるスクリプトで最後(exit;があるべき場所)に「1;」が書かれていました。 これはどういう意味なのでしょうか? 「1; Perl」のキーワードで検索してみましたが、出てきませんでした。
>>333 ざっと見てみたけど、まず並びに関しては、273,275,277行目の"push"を
"unshift"にするか、277行目と278行目の間に
@new = reverse @new;
を加えるかすればいいと思う。
それからエラーは、234行目のifのカッコの中を、たとえば
$in{'url'} !~ m{
http://[a-zA-Z0-9\-/.~?%#=&:;+@]+} とかに変えればいいんじゃないかな。
338 :
335 :2001/08/09(木) 23:43 ID:???
339 :
336 :2001/08/09(木) 23:43 ID:???
340 :
336 :2001/08/09(木) 23:51 ID:???
俺、なんか寝ぼけて馬鹿なこと書いたかも(w 並びの方は忘れてくれ。
341 :
333 :2001/08/10(金) 00:02 ID:???
>>336 氏
ありがとうございました。
しかし、並びの方ができませんでした。苦笑
登録した順に上から必ず
3124
41235
512346
このように表示されます。
目が冴えてるときにでも、またお願いします(ノД`、)
343 :
337 :2001/08/10(金) 00:09 ID:???
344 :
名無し :2001/08/10(金) 01:00 ID:???
文章が無いときにリロードできるようにするにはどうすればいいでしょうか? &reload if(!$comment)じゃだめですよね?
>>344 if ($comment eq "") { &reload; }
>>344 if ($comment eq "") { &reload; }
length($comment) or &reload;
length($comment) or &reload;
349 :
344 :2001/08/10(金) 01:22 ID:???
>>345 >>347 両方ともだめでした。
htmlファイルを作るタイプだからだめなのかな
public_html/cgi-bin/bbs.cgi
に投稿して、普段は
pubglic_html/index.html
をアクセスするタイプです
350 :
名無しさん@お腹いっぱい。 :2001/08/10(金) 02:17 ID:uDrjeUNE
if ($comment eq "") { print "Location: $path\n\n"; }
ls-lRって何ですか?
コマンドです
354 :
名無しさん@お腹いっぱい。 :2001/08/10(金) 14:49 ID:ed6w6DP2
perl test.pl > test.txt のように出力先をtest.txtに設定した状態で、 例外的にプロンプトの方に出力させるには どのように書けばよいのでしょうか。
356 :
337 :2001/08/10(金) 15:08 ID:???
名前残ってた。 逝って来ます。
>>354 print "1";
print STDERR "2";
359 :
名無しさん@お腹いっぱい。 :2001/08/10(金) 17:37 ID:ed6w6DP2
正規表現に変数って使用できないんですか? $a="abc"; $b="abcdef"; if($b=~ /$a/) { イメージとしてはこんな感じです。
360 :
名無しさん@お腹いっぱい。 :2001/08/10(金) 17:38 ID:ed6w6DP2
>>355 ls -lRなら知ってる、"ls"はディレクトリを表示するUNIX系OSのコマンド
DOSの"DIR"みたいな奴だ。
"-lR" はオプションで、まぁその根こそぎ表示すると思ってくれればいい。
systemが投げるコマンドが解らない時はこんな所を探して調べればいい
http://www.linux.or.jp/JM/
myってなんで使わなくてはいけないのですか? 処理速度が速くなったりするのですか?
365 :
. :2001/08/10(金) 20:10 ID:qy20tGgA
>>364 君の能力ではその程度に認識なのかも知れないが、世の中には自分以上の
人間や物事を深く掘り下げて認知しようとする人間
が沢山居ると言う事を忘れてはいけない
>>365 今度はこっちに来たの? やれやれ……。
>>365 勘弁してよ。
君のためのスレはちゃんとあるんだから。
もうこっち来ないでね。
質問なんですが、Perl板っていうのはこのスレのことですか? それとも他にPerl板っていう板があるんですか?
370 :
368 :2001/08/10(金) 23:11 ID:???
>>369 すいません、そのプログラム?の意味がわかりません。
質問させてもらいます。今、トリップスレに書いてあった
#!/usr/local/bin/perl
$counter = 'aaaaa'; # マジックインクリメント用
$seed = 'Q!<'; # ランダムな文字列
$str = 'nofx'; # 探す文字列の正規表現
while(1){
$_ = substr(crypt("$counter$seed", 86), -8);
print "$counter$seed - $_\n" if /$str/oi;
last if ++$counter eq 'aaaaaa';
}
っていうのでやってみて実際動作したんですが、
これの結果を自動でテキストで保存できるようには
できませんか?
トリップスレの方は解析で忙しそうなので…
リダイレクトしろよ そんなのPerlの質問ですらないぞ
よく解らないのにforとかwhileの中適当にいじりながら 実験するのはやめておくれよぅ・・・・・
へぇ。トリップなんてはじめて知ったYO!
うわスマソ >>みなさん、
>>365 はKENTクンじゃない
家の弟です。 迷惑かけて申し訳無い
んにゃろ、、ぶっ頃してやる
375 :
pp :2001/08/11(土) 00:22 ID:???
なんか荒れてきたカナー
>>375 実際出来てる所見ると可能なんでしょう、もう対策されたみたいですけども
PG板で おしえて!!! とかスレ立てちゃだめだよ。
377 :
333 :2001/08/11(土) 02:01 ID:V2ESYaRc
誰か
>>333 をどうやればいいか教えていただけませんか?お願いします。
>>377 うーん、スクリプト見るのが面倒だ。
Perlの話というより、CGIの改造でないかと、コレ。
というか、336で決着ついてないのかな?
# ネタだったりして(w
指定ディレクトリ以下すべてのテキストファイル内の特定の文字列を 一気に置換するのに一番効率のよい方法あるでしょうか? ログファイルのコンバートに使いたいのですが・・・ よろしくです。。。
380 :
333 :2001/08/11(土) 02:23 ID:V2ESYaRc
>>378 >>336 の通りにすると
>>341 のような現象が起こるので解決してません。
自分でも@new=sort(@new);とか考えられる限りの事は尽くしてみたんですができませんでした。
このスレで、初心者です、と自己紹介してから質問してる人よりも激しく初心者な俺・・・・・・ こんなんでやっていけるのだろうか
しかも、sageようとしてageちゃったし・・・・
384 :
名無しさん@お腹いっぱい。 :2001/08/11(土) 06:29 ID:j13TLi42
>379 perl -pi.bak -e 's/foo/bar/g' *.logとか? .logの拡張子のファイル中のfooをbarに変換し、 元のファイルはhogehoge.log.bakみたいに保存される サブディレクトリ以下も対象ならuse File::Find等使えばok! でも一番効率の良い方法ってどういう意味?こんなの、 効率も糞もないと思うのだけど…
385 :
名無しさん@お腹いっぱい。 :2001/08/11(土) 11:58 ID:X8Jv3YYU
>384 環境によっては動かない(特にWindows系は*の処理がイマイチ) >379 環境も書いとけ。systemコマンドでシェル使ったほうが早い場合も あるからな。
ord関数の逆の動作を行う関数ありませんか?
387 :
386 :2001/08/11(土) 20:53 ID:???
失礼。 事故解決しました。
>>384 さん、
>>385 さん、どうもありがとうです。
>でも一番効率の良い方法ってどういう意味?
ええと、効率がよいじゃなくてperlのみでできて環境に依存しない
方法でした・・・スマソ
サーバー上に変換スクリプトをおいて(シェルはつかえないので)したいなと
思ってますです。
ローカルのWinの環境でも出来ればそれでいいんですが。。。
・#!行 ・改行コード ・全角文字が混じっていないか
ありがとうございます。 利用するにおいての注意事項はありますか? ・倉庫としてのご利用(音楽・画像等のデータを置いておくだけ)は出来ません。 ・「index.html」もしくは「index.htm」の設置は絶対に必要です。 ・「index.html」もしくは「index.htm」に<TITLE>タグでタイトルを記入しておいて下さい。 記入されていない場合、アクセスランキングに参加出来ません。 ・CGIのみの使用は禁止しております。 ↑こいつのせいでした。
>>388 「教えて君」の臭いが…
まずは自分で作ってみたの?そんなの数行で出来るぞ。
初心者だからといってなんでも人に頼ってはPerlの上達も
見込めないよ。
「こう作ったんですけど動かない」ならともかく、何も
ものがなくて、教えてと言われてもね。特にPerlは、
やり方は何通りもあるんだから。
すみません、教えていただけませんか。 テキストファイルを読み込んで、'ポニーテール'のはいった行を抽出しようとしました。 push(@out, $_) if($_ =~ m/ポニーテール/); とすると、最初の「ー」がまずいというエラーが出たので、 push(@out, $_) if($_ =~ m/ポニ/); とすると、ほとんどの行が当てはまってしまいました。 後半のまずいのはたぶん、windows98 + ActivePerlで「ポ」の文字コードの後半が 0x7cで|ですから、part1の「鉄鋼」が化けるのとおなじじゃないかなと思いましたけど 読んでも対策ができませんでした。よろしくお願いします。
>>393 push(@out, $_) if($_ =~ m/\Qポニーテール\E/);
>349 ありがとうございます。できました。 \Qは、\Eがでるまでのメタキャラクタを打ち消すんですね。勉強になりました。
396 :
395 :2001/08/12(日) 21:59 ID:???
すみません、395は349さんじゃなくて、394さんへの感謝です。
>初めて来た方、初心者はまずこのスレッドから始めよう。
>尋ねる前に同じ質問がないかこのスレや旧スレ、及び
>>2 のリンクを一通り見てみよう。
>案外答えはもう書かれているかもしれない。
1にこう書いてある。 どうして過去ログ読まないんだろう。
せめて初心者スレッドの過去ログくらいは…。
本当に役に立つ事が書いてあるよ。もちろん改行コードとか\Qとかも。
398 :
名無しさん@お腹いっぱい。 :2001/08/13(月) 04:54 ID:a9/FXvbY
g-zip圧縮転送ってどうやるの? ACCEPT確認してエンコートヘッダにg-zip指定するだけじゃだめなんでしょ?
399 :
名無しさん@お腹いっぱい。 :2001/08/13(月) 15:45 ID:JzeNXb.k
Active perlでロングネームの方のファイル名取得方法 教えて〜ん。
>399 普通に取得できますが何か?
Active Perl をローカルで使ってテキストを処理したとき 改行コードを \n にしても \r にしても、同じ結果になるんだけど、(0D 0A だったかな) 回避方法あります? わざわざ、サーバにアップロードするのは面倒なんで…
403 :
399 :2001/08/13(月) 17:16 ID:JzeNXb.k
>>400 失礼。説明が足りませんでした。
SOSヘッダ付けたperlスクリプトにD&Dでファイル渡すとショートファイルネームで引数に渡されるのです。
で、渡されたファイル名を出力したいんですが、その時にロングファイルネームで出力したいんです。
なのでショートファイルネームをロングファイルネームに変換する方法教えて〜ん。
Win32::GetLongPathName()
405 :
401 :2001/08/13(月) 21:57 ID:???
406 :
399 :2001/08/13(月) 22:24 ID:???
407 :
名無しさん@お腹いっぱい。 :2001/08/13(月) 22:41 ID:7FPat022
PERL5.6のバグ? my($str) = q{1 2 3 4 5 6}; if ($str =~ m/^(?:[^\t]*\t){4}5/) { print 'OK'; } else { print 'NG'; } print "\n"; 下記のコードですが、 perl5.005はOK perl5.6はNG になります。 ※タブは全角スペースに変換してます。 分かる方いますか? ちなみに、 m/^(?:[^\t]*\t){3}[^\t]*\t5/ はとおります。。謎
1〜6の間もタブなんだよな? qq{1\t2\t3\t4\t5\t6}; なら"OK"になるが。 当方ActivePerl5.6.1… ってアレ?5.6.0だとNGだな…何故だろう。
409 :
UUDH :2001/08/13(月) 23:42 ID:???
@test2 = ("miyata<>21<>men<>","yokoi<>39<>women","nagata<>26<>men","yanase<>26<>men",); foreach (@test2){ @temp = split (/<>/ ,$_); if ($temp[0] eq yokoi){ next; }else{ push (@out,"$temp[0]<>$temp[1]<>$temp[2]<>\n"); } } print "@out\n"; とすると、何故か2行目の頭から空白が入ってしまいます。 もう正規表現とかで何でもかんでも取り払っても入ってしまいます。 3日たって何が何かわからなくなってきました。、、、、
>>409 俺も良くわからないけど改行コードの問題な気がする・・・。
411 :
◆2O1OO1O2 :2001/08/13(月) 23:56 ID:9/vbk82Q
>>409 > print "@out\n";
配列をダブルクオートの中に入れると、要素の間にスペースが入る。
print @out;
でいいんじゃない?
>>409 #最終行
print @out, "\n";
#or
local $" = "";
print "@out\n";
#yokoiはクォートしろ
414 :
UUDH :2001/08/14(火) 04:30 ID:???
あぁ〜 神です!!、このスレには神が居るです!
>>410 僕もそう思いましてあちこちで\wと\d以外は全部捨てたりしてみたんですが
解決できなくて、、まさか一番最後だったとわ
>>411 今まで " は有っても無くてもほぼ良し、位に思い込んでました。
ダメだなぁ、、今KENTさんのチャット見るとやっぱり裸のまま
printしていました。
まだコンテキストが良く理解出来てない様で度々こう言うトラブル
に見舞われています
>>412 これはどちらも絶対解らなかったです。
. じゃ無くて , なんですね。 初心者本には載ってないなぁ
方法2の方は局所的に " を意味の無いものにすると言う感じでしょうか
localも使うこと有るんですね、ふかいッス
>#yokoiはクォートしろ
YES SIR!!!、ゴチャゴチャしていて段々無茶苦茶になっていました
一人だと絶対自己解決出来なかったです。 大感謝です!!>>みなさん
きっと良書を沢山読んでいるから、こう言う事で躓かないんですよね
まだ結城さんの本と、WEBだけで粘ってるのですが、ちょっと限界かなぁ。。
書籍スレを読み直してみます。
プログラミングPerlとか買っちゃっても大丈夫かな、、 (^^;)
もう一回PART1から読み直してみよう、有難うッス>>みなみなさま
415 :
UUDH :2001/08/14(火) 05:00 ID:???
@test = ('hokkaidou','aomori','yamanashi','iwate','tokyo','kyoto'); $scalar1 = @test; $scalar2 = "@test"; print '配列が裸で評価されると・・・'."\n"; print "$scalar1\n".'↑要素数が返る'."\n\n"; print ' " で括って評価されると・・・'."\n"; print "$scalar2\n".'↑要素を空白で区切ったものが返る'."\n"; うれしかたので、カキカキ、、、 配列の中? がカンマデリミタになってると思い込んでたのが気付かなかた 原因でした それ位カンマが出力されない時点で気付けよ=>漏れ (;´Д`)
>>414 > 方法2の方は局所的に " を意味の無いものにすると言う感じでしょうか
これって、local $" = ""; のほうって事?
これは配列をダブルクォートの中に入れたときに要素間に入る文字列を定義してる。
デフォルトはスペースになってる。ためしに$" = ":" とかやってみると良いよ。
こういう特殊変数はラクダ本に全部載ってるし、やっぱラクダ本買うべし。
417 :
名無しさん@お腹いっぱい。 :2001/08/14(火) 08:23 ID:GO0JN5uY
/を クエリーストリングで扱う方法ってないですか? /もクエリーストリングとして扱いたいのです
418 :
417 :2001/08/14(火) 11:24 ID:GO0JN5uY
すんまンソ できた。っていうか勘違い
クエリーストリングという表現を初めて見た。 いや別に間違っちゃいないけどね…。
/  ̄ \ / イヤー笑った笑った KENT-WEBのギャグは素晴らしい 簡単なスクリプトを複雑に記述し 一見難しいスクリプトに見せかけている\ / ⌒ ⌒ | | (・)(・) | | 三 ○ 三 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ___ | < hello world!からやりなおせ。 |\ \_/ / | サイトのパーミッション777にしろ。 \ \___// \_________ \_/ \/ |==| \Ω/ 死ね・くたばれ・消えろ・失せろ・潰れろ・馬鹿・あほ・間抜け。ドジ・ 無能。
誤爆かよぅ・・・・ -_-
422 :
名無しさん@お腹いっぱい。 :2001/08/14(火) 17:38 ID:xRewybvc
424 :
名無しさん@お腹いっぱい。 :2001/08/14(火) 18:09 ID:xRewybvc
>>423 ありがとうございます。
使い方が分かりません。書いてある通り
アップロードしてタイトルの「$ownhost」というようなのを
CGIファイルの「$Host」に設定し再アップロードしましたが、
そこからがわかりません。手順を簡単にで結構ですので、
説明していただけませんか。
gethostbyしてないから$ownhostにhostが入ったりipaddressが 入ったりする、F2sは使ったこと無いからわからんから 論理行の13行目を $Host = $ENV{'REMOTE_HOST'}; にしちゃえ 後は上の方の設定をちゃんとして、作業が終わったら *****速攻で*****削除する事だ ccが使えないとか言うなよ
426 :
UUDH :2001/08/14(火) 20:38 ID:???
>>416 はぅっ、まだ間違えてる、、、思いっきり特殊変数じゃん、、、
いつも @aray = ('1','2'); とかしてるんで 勝手にデフォルトのバウンダリは
コンマだと思い込んでたのがいけなかったみたいです。
>やっぱラクダ本買うべし。
了解!! まだ持って無いけど他の皆さんにも推奨 (わ
サンキューです。
今、掲示板のデータファイルから、 画像URLを読み込んで画像を表示させてるのです。 決まった縦横サイズの画像だけを表示させたいのですが、 何か画像情報を取得する方法はありますでしょうか?
そのものズバリImage::Sizeがある
>>416 >>426 特殊変数なら perlvar に全て書いてあるし、
邦訳青ラクダ本って内容が5.003の頃のだから古い。
ラクダ本に書かれている事は同じ内容でドキュメントにも書かれてる。
そのドキュメントの邦訳も存在する。
これでも推奨?
>>430 > そのドキュメントの邦訳も存在する。
どこの事ですか?
432 :
名無しさん@お腹いっぱい。 :2001/08/15(水) 01:30 ID:avupzYrQ
Perl5.6.0ベースのドキュメントの邦訳があれば折れは要らんかな。 でも紙とWebページじゃ読みやすさが全然違うので初心者には奨励する。
434 :
427 :2001/08/15(水) 02:31 ID:???
>>428 >>429 ありがとうございました。
getImageSize() を試してるのですが、pngの情報だけ読めず・・・.
どうしてなのか? うう。
>>432 御免なさい。一応確認したかったもので。
436 :
名無しさん@お腹いっぱい。 :2001/08/16(木) 11:13 ID:Z9iCsVz2
ご教授お願いいたしたく。 open関数で取得できるファイルリストの件数に上限はあるのでしょうか? ファイル数が4000ちょっとまでなら取得できるのですが、それ以上存在する場合、 ファイルハンドルには空が返ってくる模様… もし上限があるとするならば、どのように対処するのが吉でしょか? よろしくお願いいたします。
437 :
名無しさん@お腹いっぱい。 :2001/08/16(木) 11:15 ID:Dm7Pm6YQ
すみません。初心者質問です。 無名配列ってなんなのかいまいち掴めません。。 それにどんな事に使ったら有効か教えてください。。 お願いします。
438 :
名無しさん@お腹いっぱい。 :2001/08/16(木) 13:08 ID:Z1NIPYXE
$abc_ref = ["a", "b", "c"]; とすれば、スカラー変数に無名配列のリファレンスが保存でけるでそ? でさ、普通配列ってさ、(("a", "b", "c"), ("d", "e", "f"))みたく単純には階層化できません。 厳密に言うとスカラー値しか入れられないからね。 さっきの $abc_ref を使えばそれが出来るようになるってわけさ。 無名配列や無名ハッシュを使えば多重構造の変数が出来上がります。
439 :
名無しさん@お腹いっぱい :2001/08/16(木) 15:43 ID:.lon33X.
任意日付から曜日を求めるにはどうしたらいいですか?
>>439 「日付 曜日 公式」とかで検索したらわらわら出てくるぞ。聞く前に自分で調べようね。
>>439 timelocal(Time::Local)とlocaltimeにかけるといいよ。
443 :
名無しさん@お腹いっぱい。 :2001/08/16(木) 23:01 ID:/rmEQXZ6
分岐して文章返す関数で、いちいち$ret .= 'ABC'; return $ret;ってやるのがめんどうなので、
print 'age'; print 'sage';
とやって
$buffer eq 'agesage';
にすることはできますか? できるならやりかた教えてください。
やりたいことは、printとか短い文での変数への書き込みです。
>>436 当方初心者ですが、システム依存のような気がします。
何やろうとしてそんなにファイル開くんですか?
>>443 全然意味ワカンナイですけど。
print $buffer .= "age";
とか云うことじゃないよね?
IO::Scalarというモジュールで $foo = new IO::Scalar; $foo->print("bar"); $foo->print("baz"); print $foo;# output "barbaz" という書き方が出来る。
>>443 #!/usr/bin/perl
package ScalarHandle;
use base 'Tie::Handle';
sub TIEHANDLE {
my $self = bless {}, shift;
$self->{_ref} = shift;
$self;
}
sub WRITE {
my ($self, $scalar, $len, $ofs) = @_;
my $_ref = $self->{_ref};
$$_ref = join '', $$_ref, $scalar;
$len;
}
package main;
my $buffer = '';
{
tie local(*H), ScalarHandle => \$buffer;
use SelectSaver;
my $saved_h = SelectSaver->new(\*H);
print 'hoge', 'foo';
}
print $buffer;
__END__
余談だがIO::Scalarも tie *Handle, 'IO::Scalar'; という使い方が可能だ。
448 :
443 :2001/08/17(金) 03:13 ID:???
モジュールを試してみたのですがエラーが出てしまいます。 use CGI qw/:standard/;; これを書いてやって、同じディレクトリにCGI.plを入れてみたんですが・・。 ちなみにWin98のHttpdです。
CGI.plってはじめて聞いたけど、どこから入手したの? あと、.plだからrequireじゃないかなぁと思われ(w
451 :
名無しさん@お腹いっぱい。 :2001/08/17(金) 18:13 ID:f5KMH1QY
IISのサーバーでのトラブルなのですが、 自社IISサーバーで動いたCGIをクライアントのIISサーバーに移したら 書き込み処理だけができなくなってしまいました。 サーバーはエラーメッセージをださないので、サーバー側の設定で書き込み制限が かかっているということは考えにくい状況です。 原因はどのようなものが考えられるでしょうか? クライアントのサーバーを直接いじらせてもらえなくて、原因を特定しないと 解決できない状況で困っちゃってます。 よろしくお願いします。
452 :
名無しさん@お腹いっぱい。 :2001/08/17(金) 18:43 ID:Oy6kpATQ
<input type=file name="upfile"> でローカル側からテキストファイルをサーバへアップロードさせるようなスクリプトは どうしたら宜しいのでしょうか…?
>>451 -452 Perlの話ではないと思われ。スレ違い
まぁまぁ
>>451 よく解らないけど Kcatchとかで解らないの?
ああ。。アンタッチャブルなのね (;´Д`) 逝ってくる
456 :
名無しさん@お腹いっぱい。 :2001/08/17(金) 19:25 ID:f5KMH1QY
>>
すみません。
他の適切なスレはどれでしょうか?
>>454 文法にはとくに問題ないようです。
457 :
名無しさん@お腹いっぱい。 :2001/08/17(金) 19:28 ID:k3HSgI6s
PerlそのものではないがWebプログラムには関係するだろうってことで。
>>452 まあこんな感じで送れるはず
<FORM ACTION="CGIPATH" METHOD="POST" ENCTYPE="multipart/form-data">
<INPUT TYPE="file" NAME="upfile" SIZE="80">
</FORM>
458 :
名無しさん@お腹いっぱい。 :2001/08/17(金) 20:42 ID:HfJszqSo
Linuxを使っているのですが、自分のマシンでの CGIの動かし方がわかりません。 Apacheを使うのですか?
459 :
JAPU :2001/08/17(金) 20:51 ID:???
>>458 まずは、その辺で入門書を買ってくるのが吉かと。
460 :
458 :2001/08/17(金) 20:53 ID:HfJszqSo
あってもWindowsばっかでしょ。簡単なことなんだから もったいぶらないで教えてください
CGIを動かすのにApacheを使います。 確かにYes/Noを答えるのは簡単だね。 あと、Perl != CGI なのでスレ違い。
462 :
名無しさん@お腹いっぱい。 :2001/08/17(金) 21:23 ID:oQcz5Ykw
sfioでperlコンパイルした人感想をお願いします。
>あってもWindowsばっかでしょ。簡単なことなんだから 簡単なことなら質問しない。 あっごめんネタか(藁
464 :
452 :2001/08/17(金) 21:56 ID:Oy6kpATQ
そうですね。PerlでCGIスクリプト組んでいるものですから... スレ違いすいません。
465 :
JAPU :2001/08/17(金) 22:14 ID:???
少し大きな本屋にでも行けばUNIX/Linuxの本くらいいくらでも売ってます。 yes/no で答えるのは簡単だけど、どうせ次は「Apache の設定が分かりません。」とかいう質問が来るだろうからね。だから、入門書を1冊買って、ある程度 (完全にとは言わない) 理解してくださいってこと。
466 :
名無しさん@お腹いっぱい。 :2001/08/17(金) 23:40 ID:HfJszqSo
Apacheについては勿論Linux系サイトで調べます。 ここはスクリプトでプログラマ気取りのが多いですから(^^;
467 :
さげ :2001/08/17(金) 23:58 ID:???
>>458 1.回線を切ります。
2.ロープを用意します。
3.ロープの片端で30cm程度の輪っかをつくります。
4.ロープの逆端を適当な高さにつるします。
5.輪っかに首を引っ掛けてください。
>>
漏れもそれが一番手っ取り早いと思う。
精進しろよ
>>468
470 :
469 :2001/08/18(土) 00:12 ID:???
>466 Perl=CGIと思ってる厨房は逝ってよし! 「CGIだけど、なんか質問ある?」ならきちんと答えたよ。
つーか Perl も C++ も似たようなもんだ。 文法や仕組みが少し違うくらいで。 言語に差があるとか思ってるヤツの方が痛い、と思うぜ (´ー`)y−~
473 :
名無しさん@お腹いっぱい。 :2001/08/18(土) 01:53 ID:FWE7cxsw
win2k+activeperl+apacheの環境でCGI作ってるんですが、 作成中、無限ループしちゃった場合、どうやって止めるんですか? タスクマネージャーで、perlのプロセスを終了させようとしますが、 「権限がない」とかなんとかで、終了が出来ません。 結局再起動するはめになってしまいます。 何か、強制終了させる方法はないんでしょうか?
>472 と思っているならプログラム板のC++のところにいってPerlもしくはCGIの 質問して下さい。ここには二度と来なくていいよ。 C++のスレにWindowsの環境のことなんか聞かないよね?それと同じ事。 専用のスレがきちんとあるのに、それが解からないのが厨房だって言ってるの。
酷いな・・・・・
議論すんなよ
皆さんは全ての変数を宣言しますか? #!/usr/local/bin/perl $hoge = 0; &hogege; sub hogege{ print "hoge"; exit; } って感じの時、ちゃんと my hoge = 0; って風にするかどうか。
ああっ、$ が抜けてる…ミス。
480 :
名無しさん@お腹いっぱい。 :2001/08/18(土) 16:02 ID:DQB0LabM
>>478 初期値は 0 か 空文字列だから、
>>478 のような宣言はしないよ。
変更する必要があったら適宜初期化すればいいことだと思う。
では、他の言語の様に初期化忘れで嵌るシーンとは どういった局面でしょうか。 まだそんな事気にする事ないのかな。。
482 :
:2001/08/18(土) 16:51 ID:58tnIP9Q
そもそもグローバル変数使う事はほとんどない。
483 :
JAPU :2001/08/18(土) 16:53 ID:???
変数名 typo したときはまるねぇ。 使い捨て以外は use strict; なのできちんと宣言する。
んーとねぇ、use strict; で動かしたい時以外は特に宣言しない。 #!/usr/local/bin/perl $hoge = 0; &hogeho; &hogege; sub hogege{ print "$hoge"; exit; } sub hogeho{ $hoge++; } って時はそのまま。 でもラクダ本ではきちんと全部宣言してたような気がする。
あ、サブルーチン内でしか使わないことが解ってる変数はちゃんと宣言するよ。 れきしかるマンセー
486 :
:2001/08/18(土) 18:55 ID:58tnIP9Q
整数入れるときは our $hoge = 0; か our $iHoge; 文字列のときは our $hoge = ""; か our $sHoge; にしてる。
素材屋(って言って良いのかは知らんが)とかで配布してる掲示板とか、 上の方に設定項目がずらーっと並んでるじゃない。 $script = "./script.cgi"; #このスクリプトのパス $backcolor = "#ffffff"; #背景色 $textcolor = "#000000"; #文字色 って感じで。 そういうスクリプトを組む時はどうする?
488 :
奈々資産 :2001/08/18(土) 19:13 ID:58tnIP9Q
全部スクリプトと分けて設定ファイルを別にしてる。 ----- P_SCRIPT=./script.cgi C_BACK=#ffffff C_TEXT=#000000 ----- のようなKey=Value形式のWindowsのINI形式に似たような設定ファイル の処理するクラスを作っておいて my $obj_conf = new CIni(FILE => $file_conf); my %USR_CONF = $obj_conf->ReadAll(); みたいにしてる。
489 :
486 :2001/08/18(土) 19:15 ID:???
他のHN入ってた
単純に pl ファイル作って require で読み込んでも良い気はするな。
うーん、俺もそんな感じ。 でももっと適当かな。 my %conf = ReadCofigureFile($filename); だね。 $conf{BGCOLOR} とかでアクセス。
#init.pl %CONFIG = ( foo => "bar", ); #EOF としてrequireするな。 %CONFIGはvarsなりourなりで宣言しておく。 とりあえず何か理由が無い限り必ず宣言するよ。
なるほどー、勉強になりますー、 サブルーチンとかクラスを使いこなせる様に なればその辺の悩みとは無縁になるのかな。 悪い癖が付くと後で大変かなとおもったんで でもstrict とか -wcすると五月蝿いからなぁ サササッ(((((^ ^ )
494 :
名無しさん :2001/08/19(日) 12:38 ID:FfPXw2rY
過去ログ検索しましたが、該当する内容がなさそうだったので質問させて頂きます。 フリーのCGIをアップして利用しようとしていたところ、どうしてもサーバーエラー になります。 telnetで実行すると、正常に返ってくるのですが…。 今までこのような現象に遭遇したことがなかったので、どうしたらいいか困ってます。 よろしくお願いします。
>>494 CGIスクリプトの名前くらい書いたらどうだ。
とりあえずKCatch.pmでも使っとけ
496 :
名無しさん@お腹いっぱい。 :2001/08/19(日) 13:48 ID:qKl.cEXQ
日付のデータをyyyymmddの形式で持ってるとして (例20010101)これの翌日とか前日を簡単に 求める方法ってないですか? いろいろやってみたんですが、なかなか すっきりしたスクリプトにならなくて悩んでます。
497 :
名無しさん@お腹いっぱい。 :2001/08/19(日) 14:08 ID:Mz6GQnDY
Date::Calc を使えばラク。 use Date::Calc qw(Add_Delta_Days); $date = 20010101; $delta = -1; # 一日前を求める。 @date = ($date =~/(\d{4})(\d{2}(\d{2}/); @newdate = Add_Delta_Days(@date, delta); $newdate = join '', @newdate;
498 :
497 :2001/08/19(日) 14:09 ID:???
あ、間違えてる。 @date = ($date =~/(\d{4})(\d{2})(\d{2})/);
499 :
496 :2001/08/19(日) 22:38 ID:Oo9DGM7o
467さんありがとうございます。 自分でも調べてみたらTime::Local っていうのもありました。 (こっちは手順がちょっと複雑になりそうですが) Date::Calcが標準モジュールだったら、 こっちの方が楽そうですね。助かりました。
500 :
名無しさん@お腹いっぱい。 :2001/08/20(月) 10:04 ID:..QkqNpI
sendmailを使って一括送信する時に負担を分配するように 数回に分けて送信するようにしたいのですがどのようにしたら良いのでしょうか?
>>500 そのようにしたら良いんじゃないでしょうか。
CGIで[最大100件の送信者リスト]*nを作成→cronで送信
cronじゃなくatのほうがベターでしょ?
ネタですか?
504 :
500 :2001/08/20(月) 23:50 ID:..QkqNpI
>>501 cronが使えないサーバーでやる方法は無いでしょうか?
やっぱり手動で数回に分けて送信するしかないのかな〜
>>504 手法はいくらでもあるけどね。
CGIの話なんですか?
それなら、一定時間ごとにCGIが走れば良いわけだから....(略)
506 :
500 :2001/08/21(火) 00:40 ID:6E4T9QSc
>>505 どのような方法ですか?初心者向けの簡単な方法の仕組みを教えてください
私が思いつく限りでは
データファイルか何かに起動する時間を書いておく
その時間を過ぎていたら起動させるようにするスクリプトを組む
それをカウンターか何かのアクセスが多いCGIに組み込む
とりあえずこんなのしか思いつかないんですけど
これだとあまりにも中途半端すぎるんで 良い方法を教えてください
>>506 それでも良いし、常時接続な環境なら自動リロードさせても
良いんじゃない?
というか、CGIでやるの止める方向でいきませんか?
# CGI-MLの過去ログで検索すると腐るほど情報あるよ
508 :
500 :2001/08/21(火) 03:05 ID:6E4T9QSc
あともう一つ質問なんですけど 1000人分くらいのメンバー情報を扱う時 一つのデータファイルにまとめて入れるのと 一人づつデータファイルを1000個つくるのではどちらが負担は少ないのでしょうか? なおデータへの書き込みは頻繁に行われます できれば一覧表示も行いたいと思います
>>508 Benchmarkモジュール使って自分で計ってみたら?
510 :
名無しさん@お腹いっぱい。 :2001/08/22(水) 01:09 ID:GFNp99PM
自己解凍する日本語パール(w32)ってあります?
512 :
名無しさん@お腹いっぱい。 :2001/08/22(水) 03:37 ID:AkElayo6
perlをインストールしました、cgiの拡張子をplに に替えファイルをクリックしたところdos画面がでて 直ぐにdos画面が消えました、まだ調整が必要でしょうか それとも他にインストールするソフトでもあるのでしょうか?
513 :
512 :2001/08/22(水) 03:40 ID:AkElayo6
IISはインストール済みです。 やっぱApacheをインストールしないと駄目なのかなぁ?
>>512 CGIはWebサーバーから起動するからCGIなのです。
perl(スクリプト)だけを利用するときには、DOS窓から使ってください。
515 :
名無しさん@お腹いっぱい。 :2001/08/22(水) 05:06 ID:pmuXIvEY
またまたなんか問題が、、 アパッチインストールしらC:\*****\*****.***になって機能しない から注意書き見たらこんな事書いてるのです。でも意味が分りません。。 (注意)以下のテストで、ファイルのダウンロードになってしまう場合は、 エクスプローラのファイルタイプの設定で、MSDOSバッチファイルの MIMEタイプを text/plain にしてください。 バッチファイルってこれの事かなぁ C:\PROGRA~1\NETWOR~1\MCAFEE~1\SCANPM.EXE C:\ /boot @IF ERRORLEVEL 1 PAUSE @ECHO OFF PATH=C:\NECUTILS\HDPREP loadhigh c:\windows\COMMAND\nlsfunc.exe c:\windows\country.sys PATH=%PATH%;"d:\Program Files\Mts" SET PATH=c:\PERL\BIN;"%PATH%"
516 :
出来た :2001/08/22(水) 05:54 ID:29hOJqFs
Windows2000では、「ファイルタイプ」のデフォルトの状態ではBATファイルは表示されないし、またMIMEの設定がここからはできなくなっている。 BATを表示するには、「ファイルタイプ」の「新規」で「ファイルの拡張子」にbatと入力し、「詳細」をクリックすると、一時的にbatの内容がリストに追加され、内容の確認ができるようになる。しかしbatを絶対に編集してはいけない。終了は「キャンセル」を使う。 batのMIMEをtext/plainに変更するにはレジストリを編集する。レジストリの編集はかなりの危険が伴うので、よく理解していない限り、編集してはいけない。 1.「スタート」「ファイル名を指定して実行」で「regedit」と入力。 2.\HKEY_CLASS_ROOT\*\.bat を選択。 3.右クリックで「新規」「文字列」、Content Type と大文字小文字を一時一句たがえずに入力。ContentとTypeの間は半角スペース。OK。 4.画面の右側で、今新しく作成されたContent Typeを選択し、text/plain と入力。(他のWindowsのように、引用符は付けないこと。"text/plain"と書くのは駄目)
517 :
名無しさん@お腹いっぱい。 :2001/08/22(水) 06:17 ID:LG5r0RZM
>>516 やっぱ駄目
ファイルクリックすると***.plファイルが一瞬開いて閉じるだけ
perlは大丈夫だと思うけど、apacheの設定がおかしいのかなぁ
前スレの187以降を読むがよろし。
519 :
517 :2001/08/22(水) 06:52 ID:YOZd9AOc
読みました、全く同じです。 perl ***.plはしたけど結局どうしたら クリックでhttpサーバになるのですか?
521 :
名無しさん@お腹いっぱい。 :2001/08/22(水) 08:02 ID:IsndpGHs
パール・スクリプトを実行する際、 DOSを非表示にする、方法はないでしょうか。 パールで、ツールを作って、ファイラーから、実行 したいのですが、一瞬、表示される、DOS窓が、邪魔で・・・。
>>522 それは、ちょっと・・・です。
補足ですが、実行する際は、
jperl (スクリプトのフルパス) file1 file2
あるいは、
command.com /c jperl (スクリプトのフルパス) file1 file2
と設定に書いて、キーに割り当てて、使ってるんですけど・・・。
>>521 Perlのソースといじって再コンパイルするとか。
具体的にどうすればいいかは全く知らん。
525 :
名無しさん@お腹いっぱい。 :2001/08/22(水) 12:05 ID:tFrHOLK6
527 :
521 :2001/08/22(水) 12:37 ID:???
>>521 ・・・私にも、難しいです。
>>525 それができるだけの金と部屋のスペースが欲しいです。
>>526 違うようです。
今、現在動いてるDOSに対して、そのプログラムを、
起動させて、表示、非表示を選択できますが、
新しく開いて、すぐ閉じるDOS窓に対しては、
できないようです。
528 :
521 :2001/08/22(水) 12:41 ID:???
文節ごとにカンマ入れてるのは喧嘩売ってるのか? 見ててムカつくんだが。
530 :
525 :2001/08/22(水) 12:55 ID:tFrHOLK6
>>521 AN HTTPなんてただだし、Win9*、Win2kどっちにも入れれる。
かつすげー簡単に入れれる。CGIの勉強にもなるし適当じゃない?
531 :
521 :2001/08/22(水) 13:34 ID:???
>>525 ごめん。自分は、パール・スクリプトを
ファイラーの機能追加に使ってみたい。
あるボタンを押したら、マークしたファイルの文字コードを
いっきに変えるとかです。
525でおしえてもらった方法だと、
それには、少なくともサーバーソフト起動させて、
さらに、プラウザを起動させなくてはならないいんじゃ?
だから、それは、ちょっとです。
CGIに興味はありますが・・・。
528のレスは、
>>522 じゃなくて
>>524 です。
なんだか久しぶりに来たらあっちこっちがDOS窓スレになってる w 良く解らんけど、pl2batみたいのでpl2exeみたいのがあったんじゃ無い かな。初心者スレとかに色んなツールがあるよ
533 :
名無しさん@お腹いっぱい。 :2001/08/22(水) 23:45 ID:lHmfRQBo
>>521 スクリプト自体をbatファイルにしてpifで最小化に設定すれば良いのでは?
ただしwin9Xの場合だけどね・・・
534 :
533 :2001/08/22(水) 23:57 ID:UjaPBszM
set F1=%1 perl -x %0 goto end #!/usr/local/bin/perl $f1 = $ENV{'F1'}; print "$f1 が指定されました。"; __END__ :end
536 :
521 :2001/08/23(木) 00:33 ID:???
>>534 pl2batでスクリプトをbatファイル化して、
プロパティで最小化設定したあと、関連づけ実行して
みましたが、だめでした。プロパティ変更した際、
自動生成されたpifファイルにも、試しましたが同じでした。
>>533 どうもです。
pl2exe気になります。
いろいろ、関連サイト探しまわってみます。
>>535 やりたいのは、文字コードの変換だけではないんです。
htmlファイルにマークしてリンクの抜き出しとか、
いろいろです。
レスしてくれたひと、ありがとうございました。
539 :
532 :2001/08/23(木) 01:39 ID:fZO15JoQ
ドメイン持ってたのか (^^
試しに僕も使ってみます。
ありがとう、
>>537 -538
540 :
名無しさん@お腹いっぱい。 :2001/08/23(木) 02:16 ID:Kp4CzHHk
>>519 >読みました、全く同じです。
>perl ***.plはしたけど結局どうしたら
>クリックでhttpサーバになるのですか?
誰か教えてもらえませんか?
541 :
540 :2001/08/23(木) 02:18 ID:Kp4CzHHk
パーソナルwebマネージャでの設定は何もしていません
>>540 何故誰も答えないかというと、あまりに基本が分かっていないから。
せめてHello worldくらいは出来るようになってから出なおしな。
543 :
540 :2001/08/23(木) 02:33 ID:04DpFLUM
hello world ってなんですか?ftpでcgiファイルをサーバにアップ して表示はしました。
544 :
540 :2001/08/23(木) 02:44 ID:04DpFLUM
アプリケーションマッピングが如何のこのって事かしら。。 でもperlインストールの時するにしてないのかなぁ 基本ってなんでしょうか
途中からHTTPD動かないスレになってねえか? ワラ
>>543 何が解らないの?、HTTPD入れて普通のHTML表示してみた?
CGIなんてHTTPヘッダ吐くだけなんだから、取り合えず
コマンドラインで簡単なコード書いてみれ
その聞き方じゃ何処まで行っても上手く行かないと思うぞ
546 :
521 :2001/08/23(木) 02:48 ID:???
-guiオプションつけても、 評価版(?)らしく、ちっこいダイアログが、 表示されるけど、すっごい役に立ちます。 テキストにスクリプトで処理させると、高速で、 実行してくれます。 DOSで使っても、リダイレクションできるし。 ありがとうがざいました。
>>545 同感
質問一つでそいつの天井みえるよな。
548 :
521 :2001/08/23(木) 02:55 ID:???
546のレスは、
>>537 -538にたいしてです。
番号、ミスってばかり・・・。
549 :
540 :2001/08/23(木) 02:58 ID:04DpFLUM
ドス窓でperl *.plでも、 ウインドウズ上から*.plをダブルクリックでもHTMLを吐き出すだけ なのです。。
550 :
540 :2001/08/23(木) 03:02 ID:04DpFLUM
ローカルのhtmlもファイル読みこみだから、httpdの設定かなぁ
551 :
540 :2001/08/23(木) 03:07 ID:04DpFLUM
まずブラウザのアドレスに
http://loopback/index.html って入れて表示出来る所まで設定すれ
ここ行って書いてる事全部よんでみ
んで出来たら
http://loopback/hoge.cgi ##超簡単なコード
これを動かす。
あと質問するなら環境書けてば、OSもhttpdもperl実行環境も解らん
のに答えられないって
一応言っとくと普通cgiファイルをダブルクリックして勝手にブラウザが
起動して実行結果が出てくるような設定にはならない、つかWINでは出来ない
WINのファイルタイプ2つ設定出来るなら別だけど
>>540 闇雲に試行錯誤するより、それなりのドキュメントを一読してくださいよ。
とりあえずhttpdはまともに動いてるの?
*.plの中身はどんなよ?
>>514 >>542 >>545 のレス読んだ?
cgiて何の略か知ってる?
WINはファイルタイプ2つ以上設定できるけど無理だと思うなぁ それはともかく、540さんよ sage進行でいかんか? 結構邪魔だよ。
556 :
540 :2001/08/23(木) 03:25 ID:04DpFLUM
>>554 一応そこでhttpの設定はしました。
それ以外はさっぱり分りませんが適当にいじって思考錯誤する
しかないのかな
>>553 *plはウェブサーバー上で機能しています。
>
>>553 >*plはウェブサーバー上で機能しています。
・・・キミって何歳?
興味あります。
558 :
540 :2001/08/23(木) 03:33 ID:04DpFLUM
というかあなたの言ってる忌みも他の人と比べて、、
>>558 つーかsageで行ってくれよ。頼むから。
漏れもさげきぼんぬ
だから質問する時字をケチるなってば、色々やってないからそう言う
一行カキコになるんじゃ?
http://127.0.0.*/index.htmlと C:\apache\index.html
は表示してる内容は同じでもそのプロセスは全然違う、
悪い事言わないからHTMLからやれって、絶対パスでリンク貼って
飛べる様になってからにしろ
www.parkcity.ne.jp/~chaichan/bin/qanda.cgi?modefg=9 ここはやさしいよ。 なれあってるけど。 レベルもいまいちだけどやさしいよ。 やさしいよ。
563 :
あああ :2001/08/23(木) 03:53 ID:???
/top/ +---/cgi-bin./ | |---counter.cgi | +---/aaa/ |---index.shtml この場合index.shtmlからSSIでcounter.cgiを動かすには どう記述すればいいの? ディレクトリって戻れるの?
ここも十分やさしいだろ(藁
>>563 ../cgi-bin/counter.cgi で良い?
ああー PERLの質問が〜〜
565 :
あああ :2001/08/23(木) 04:02 ID:???
>>564 <!--#exec cmd="./cgi-bin/counter.cgi" -->
こんな風に書くみたいなんだけど最初の
ドットは2個連続でいいの?出来なかったんだけど…
566 :
521 :2001/08/23(木) 04:02 ID:???
試用のほうは、常に、出力になんか、コメントがつくんですね。 でも、役立ちそうだし製品版かってみようかな。 でも、クレジットカードか・・・。 なんか、ながれ、邪魔してすみません。
>>565 じゃ絶対パスで、
>ドットは2個連続でいいの?出来なかったんだけど…
この辺でPC初心者板気味の話になりつつあるね
何か大変だねえ・・・ これで誰かが切れちゃうと不毛な争いになるんだよなあ 頑張れ>答えてる人 ヽ(´ー`)ノ
569 :
ANT :2001/08/23(木) 04:18 ID:???
>>あああ 2個連続でいいよ。↓こんな感じ <!--#exec cmd="../cgi-bin/counter.cgi"--> ドット2個で「一つ戻る」ってノリです
570 :
あああ :2001/08/23(木) 04:29 ID:???
>>569 ドット2個で出来ませんでした。
これ以上聞くと初心者すぎてどっか逝けとか
googleで検索しろって言われるので自力で頑張ります。
>>567 >>569 ヒントありがとう
この終わり方・・・どうYo?!
掲示板で半角カナを使用できるようにするには、 どうしたらよいのでしょう?
SJIS以外は受け付けないとかどう?
574 :
572 :2001/08/23(木) 05:45 ID:???
>>573 レス早くてびっくりしました。
CGIでSJIS以外受け付けないようにすればいいんですね。
調べてみます。
ありがとうございます。
いや待て、SJISにコンバートする方法にしろよ。 俺はEUC-JPの方がお勧めだけど。 jcode sjis 変換 ってキーワードで検索してみてくれ。
576 :
540 :2001/08/23(木) 06:45 ID:???
しつこいようですが、、色々AN HTTP Server のFAQ 検索してしらべましたし、その通りやったのですが 未だに表示しません、こんなに大変なんですか? っていうか殆どの人は直ぐに問題なく表示されているようですが。。 これって初級ネット向きの質問かな何処に投稿すればいいんだろ、、 それに普通一回設定したら気にも留めなくなるんだろうけど。。
>>576 ちょっと、質問したいんですけど、結局どのhttpdをお使いなんですか?
578 :
540 :2001/08/23(木) 07:07 ID:???
中田さん作です。。 >悪い事言わないからHTMLからやれって、絶対パスでリンク貼って >飛べる様になってからにしろ 少し真面目に調べたのですが此れと如何関係があるのかなぁ 3年前にHP立ち上げたのですが、なんか重要なことが記憶から飛んだのかなぁ
2chもSJIS以外ハネテルでしょ? これって結構割り切った良い仕様だと思うんだけど。 まぁ、それが嫌なら要はログで複数のコードを混ぜ込ませず一つに統一すればEUCでもSJISでもいいわけだから。 jcode.plのjcode::h2z系を使わない。 jcode::trで全角と半角を置換しない。 jcode::convertの第三引数にzを指定しない。 EUCとSJIS半角カナの区別がつかないほど短い場合もあるので、 getcodeで区別がつかなかったらSJISと決め付けて第二引数に明示的に指定する。 (convertが内部で読んでるgetcodeで区別がつかないと変換しないから) これぐらいでどうでしょう? あと、基本だけどJISにはしないこと。
結局パスとかなんだよね、こう言うのって。 404とか言ってくれれば説明も出来るのにねー
まぁ、PCを買いなおす必要は無いな。
何で/がWINだと\になるの? ややこしい・・
気にする必要なしと思われ
ある種Part6始まって以来の難問と思われ
586 :
580 :2001/08/23(木) 08:05 ID:???
>>583 多分仮想ディレクトリとか、ループバック辺りが解ってないと思ったんだ。
だから2台繋いでやれば後の方の問題は関係無くなると思った。
>>583 そんなことココで聞くなー!!(;´Д`)
DOSはCPMってOSのパクリでCPMでは/はコマンドと引数の区切り文字だった
それが途中からディレクトリサポートする様になって仕方なくアホなMSは
バックスラッシュをスラッシュの代わりにした
ところが事もあろうかJISコード策定したオッサン達はバックスラッシュを
消してここに\を入れちゃった訳 その後バックスラッシュはどんどん
エスケープキャラクタになっちゃったりしたから、こんな事になった
ふーんそうなんだ まぁまぁんなに熱くなんなよ
>>586 :-)
588 :
540 :2001/08/23(木) 09:18 ID:???
>環境書いてって言ってるのに・・・・(;´Д`)
>以下WINにAN入れてPERLは入ってるとして勝手に書く
>ANを解凍して実行
>
http://127.0.0.1/readme.html >が表示出来たら(これが出なかったらおかしい、PC壊れてます)
>ANのオプション→一般 でCGIとか全部チェック w
>print "Content-type: text/html\n\ntest";
>これをroot直下のcgi-binフォルダにtest.cgiとかで保存
>
http://127.0.0.1/cgi-bin/test.cgi にアクセス
何度もやりました、ちょっとした勘違いかとも思い
設定も替えながら幾つか試しました。でも結果は同じ404エラーです。
しつこく訊いたのは自分のPCだけの問題かと認識したかったのです
しかし、みなさんにはご迷惑かけました
ここで自分の固有の問題だと確信しました、っていうかしか
しかありません。
で一つ固有の環境として糞ザクソンネットレコーダーをいれている
のですが、以前物凄い使い勝手の悪さにアンインストールをした
のですがファイルが壊れているらしくアンインストール出来なかった
のでそのままにしているので、主犯はこいつと睨みました。
同じ境遇の人いますか?って居ないよね。
今から強引にアンインストールを実行します、それでAN(HTTPD)
動いたらザクソンのソフトは2度と買いません!
結局404かいな (笑 もしかしてその何タラネットがローカルプロクシとか後omitronとか 入っててトンでも無い所探しに行ってんじゃないだろね IEの接続オプションの詳細で「このアドレスにはプロクシを使わない」 とか有るからそこに127ほにゃ って入れてみ
ていうか今ログ読んでみたけど、FTPでアップしたって何だ???? もしかしてLAN組んで、127ほにゃ でアクセスしてるのか!??
わはは、 大変な事になって参りました (・∀・) ここの住民は何だかんだ文句言いながらすげえ親切だと思うよ俺は、うん
先ず、ディレクトリ構成から行こう。
C:\www にインストールしているとして、オプションのドキュメントルートは C:\www 。
これは何も変えてなければデフォルトで大丈夫だ。
次に、
オプション/一般 → バーチャルホスト → バーチャルホストを使う、
オプション/一般 → 一般 → HTTPサーバ機能、
オプション/一般 → 一般 → バーチャルホスト、
これらにチェックを入れる。
んで、とりあえず
http://127.0.0.1/readme.html にアクセス。
…これで何も表示されなかったら俺には何もアドバイス出来ない。
あぁ、そういえば
http://127.0.0.1/ にアクセスした時はどうなる?
404なら出て行け(w 結局ANのファイル全部見えてないんじゃんか (呆 それでcgiが動かないってreadmeもFAQも読んで無いからだって もう一回一から見直しなよ
594 :
名無しさん@お腹いっぱい。 :2001/08/23(木) 15:05 ID:R1XxEp52
kentwebのスクリプトを参考に独学でCGIを学んだものです。 よくここではkentのスクリプトは糞とか重いとか書かれていますが どこらへんが糞で重いのでしょうか? 1つここで学んだことはログから出力するときは open (IN,"$logfile"); @log = <IN>; foreach (@log) { } ではなく open (IN,"$logfile"); foreach (<IN>) { } の方がサーバーへの負荷が少ないということです。 他にもkentのここは駄目だ。こうした方が軽くなるということがあったら教えてください。 kentの真似ごとから一皮むけたいのです。
> open (IN,"$logfile"); > foreach (<IN>) { > } Afo? まぁ前者より僅かながら早いかもしれんが…。 とりあえず貴方はまだKENTに真似事でもしていてください。
596 :
sage :2001/08/23(木) 15:29 ID:5IP6et1k
0001〜1000ぐらいまでの4桁の数字があって、 これを表示するときには頭の0を削除したいのです。 例) 0001 -> 1 0053 -> 53 $value = '0001'; $value =~ s/^(000|00|0)//; もっとエレガントな方法ないですか?
597 :
名無しさん@お腹いっぱい。 :2001/08/23(木) 15:35 ID:lw4Nr9lI
>>595 あんたアホか?
万単位になったときははるかに前者より効率良いぞ。
たいした知識も無いくせに煽るな。糞が。だったら実例出してみな。
599 :
596 :2001/08/23(木) 15:53 ID:5IP6et1k
>>598 おお!なるほど。
こういうときに*つかうんですね。+でもいけそうですね。
どうもです。
600 :
:2001/08/23(木) 15:56 ID:???
・巨大な配列はつくらない。
602 :
奈々資産 :2001/08/23(木) 16:00 ID:???
603 :
596 :2001/08/23(木) 16:04 ID:5IP6et1k
>>601 そんなこともできるんですね!確かになります。
これは演算することで文字列から数値にキャストされる
ようなことと考えていいんでしょうか?
>>603 そうです。
演算することで、パールのほうで、数値型にかえてくれます。
ただ、暗示的やりかたは、横にコメントも入れたほうがいいような気がする。
605 :
596 :2001/08/23(木) 16:28 ID:5IP6et1k
>>604 なるほど、勉強になりました。エレガントさでいくと
602さんのが簡潔ですね。コメントも入れるようにします。
どうもありがとうございました。
>597 open (IN,"$logfile"); while (<IN>) { } じゃない?
>>598 何故かウチのローカル環境だとエラー出るから一々
$v =~ s/^(0*)//;
とか括弧付けてるよ…
今パッケージを作ろうとしてるのですけど いろんな解説書によるとパッケージ名::関数 で呼ぶようになってますよね でも公開されてるスクリプトなどが&jcode'convertみたいにそのまま関数名で 呼んでるのは何故ですか?
609 :
572 :2001/08/23(木) 17:42 ID:???
>>575 >>579 ありがとうございます!
な、なんか難しそうですね…。
方法としては、
・SJIS以外受け付けないようにする
・SJIS(EUC-JP)にコンバートする
・ログでコードを一つに統一する
のどれかということでしょうか?
頑張ってみます。
610 :
奈々資産 :2001/08/23(木) 17:58 ID:h9wrQ49Q
>>608 &jcode'convertなどは普通のサブルーチンとして呼び出しているからです。
パッケージ名::関数の方はその"パッケージ名::関数"クラスの
インスタンスを生成して、生成されたオブジェクトに属するメンバ
関数(メソッド)として呼び出すからです。
>>610 オイオイそれは違うゾ。
どっちもただの関数呼び出しだよ。まったく一緒。
ただPerl4のパッケージデリミタがシングルクォートなだけ。
612 :
名無しさん@お腹いっぱい。 :2001/08/23(木) 18:12 ID:pz5WVy56
>>610 ありがとうございます
でも普通のサブルーチンとして呼ぶ方法と
パッケージの関数として呼ぶ方法の違いはなんでしょう?
test.pl 内に
package test;
sub test1{〜略〜}
return 1;
としてて呼ぶほうのスクリプトで
$test = 'test.pl';
require $test;
test::test1($a);
というようなことをしててもエラーがでて困ってます
613 :
612 :2001/08/23(木) 18:17 ID:???
ええ?混乱してきた・・・
>>612 それで問題ないはずだけど。
perlのバージョンは?
615 :
名無しさん@お腹いっぱい。 :2001/08/23(木) 18:20 ID:h08Ccr32
多分610さんはpackageでクラスを作成してオブジェクトメソッド として呼び出す方法として説明したんじゃないんだろうか。
616 :
612 :2001/08/23(木) 18:26 ID:???
>>614 5です
jcodeやmimewなどはそのまま関数名で呼んでるんですよね(他の人が配付してるのを見ると)
で、612の方法でやってみても&で呼んでみてもエラーなんですよね・・・
関数自体は今まで同じファイル内にあったもので問題なく動いてたんですけど
もう少しいろいろ試してみます
617 :
611 :2001/08/23(木) 18:34 ID:???
>>615 どう贔屓目にみてもそうは取れないでしょ。
オブジェクトメソッドなら、
convert jcode () か、 jcode->convert()
だけど、jcode.pl はオブジェクト指向じゃないしね。
単に、関数呼び出しとメソッド呼び出しの区別がついてないだけと思う。
>>616 エラーがなくなるまでスクリプト削ってみれ。
とりあえずこれでもエラー出るの?
#test.pl
package test;
sub test1{ print 'This is test::test1()';}
1;
#main.pl
require 'test.pl';
test::test1();
_END__
618 :
612 :2001/08/23(木) 18:37 ID:???
ホント申しわけない・・・ パッケージ名とファイル名は同じでないといけなかったですか? 同じにしたら::で呼ぶ方法で動きました 御迷惑かけました (でも&関数名で呼んでる奴との違いがなんなのかさっぱりです)
619 :
612 :2001/08/23(木) 18:46 ID:???
>>617 私のパッケージは単純に関数が一つあるだけです
jcode.plの関数のように&で呼ぶには何か他に必要なのでしょうか?
(エラーの原因はパッケージ名が部分的に大文字でファイル名が
全部小文字というのが原因だったようです お手数かけました)
620 :
611 :2001/08/23(木) 18:52 ID:???
>>618 > パッケージ名とファイル名は同じでないといけなかったですか?
それも関係ない。たぶんどこかに間違いがあったはず。
ファイル名::関数名()とかにしちゃってたんでは?
>(でも&関数名で呼んでる奴との違いがなんなのかさっぱりです)
&test::test1(); でもOKだよ。
&test'test1(); でもまったく一緒。
直後に( があって、その関数名がすでに宣言されていると
perlが関数呼び出しと判断してくれるだけ。
& の有無と、 :: と ' の話は関係ないよ。
621 :
612 :2001/08/23(木) 19:00 ID:???
>>620 何度もありがとうございます
昔とほほで拾ったものなんですけど
mimew.plにあるmimeencodeって関数を&mimeencodeだけで読んでるんですよね
'も::も無しで
これが何故可能なのかがきになって・・・
622 :
611 :2001/08/23(木) 19:06 ID:???
>>621 あ、そういうことですか。
これはmimew.plの関数宣言が、
sub main'mimeencode {
とかになってて、mainパッケージの関数を宣言してるから。
Perl5なら、
sub main::mimeencode {
とか書く。
横から失礼します、凄く良く理解出来ました、ありがとう(・∀・)
624 :
612 :2001/08/23(木) 19:10 ID:???
>>622 mainパッケージですか 探りを入れてみます
何度もありがとうこざいました
(チャット化してすいませんでした)
いい勉強になった
ヒューレットパッカードをヒューマンパッカードと言った、タコは誰ですか?(w
>>596 my $value = 0001;
$value = abs($value);
print $value;
これでどうよ?
「表示」って文字が「侮ヲ」に化けるんですけど sift-jisに変換してブラウザに出力してますがこの部分だけ化けます
HTTP-User-Agent 以外でブラウザを識別する方法ありますか?
>>630 627のほうが効率よいうえ速いと思われ
>>631 何故そのような事をお望みで?
それがわからないと答えにくいっす
>>633 ええとですね
正確に言うとブラウザ名とOS名を別々に取得したいんです
HTTP-User-AgentだとOS名とかもくっついて来ますよね
このテキストが規則性があれば抽出できるんですけど、俺の頭じゃなんか無理で、、、
何故そんなことをしたいかというと
ブラウザやOSごとに吐き出すHTMLを微妙に代えたかったんです
追加 何故微妙に変えたいかというとINPUT TYPE="text"などのサイズが 同じ数字でもブラウザによりばらばらですよね で、最初はブラウザだけ解れば何とかなると思ったですけど Macのブラウザで見ると更にサイズが変わるらしく、OSも と思ったわけです
636 :
ちょこら :2001/08/24(金) 03:24 ID:???
>>635 そんなもん、すたいるシートを使うのです。
ちょこらだYO!!
NN4.xはスタイルシート対応してたっけ? 結構ユーザーいるんだよな 6は評判悪くて乗りかえてない見たいだし
今思いついたんですけど Mozilla/4.7 [ja] (Win98; I) Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Mozilla/4.01a [ja] (Macintosh; I; PPC) Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC) 以外にも組み合わせによりたくさんあるけど win Macって言う文字列が含まれてるかどうかチェックすれば OSは判別できるかな?
それじゃHotJavaユーザがかわいそうだ
4.7は対応してたと思うけど4.0xあたりは微妙。
643 :
名無しさん@お腹いっぱい。 :2001/08/24(金) 04:02 ID:h7Yg7pIw
環境変数の一覧とかどっかありますか?
たまに3.01 Goldが飛んできて萎える(藁
>>643 print sort keys %ENV
つか、スタイルシートだってブラウザにより表示が狂うじゃん
鬱だ。朝起きて見たらCGIの話ばっかだ… やはりCGIとPerlの区別がつかないドキュソが多いのか
夏だし。
冬から春になると冬眠してた馬鹿が出てくるし 夏になると暑さで頭やられた馬鹿が出てくるし 秋になると食欲の秋で腹壊す馬鹿が出てくるし 冬になると脳みそ凍りついてる馬鹿が出てくる 年がら年中馬鹿ばっかだね。
651 :
307 :2001/08/24(金) 16:09 ID:???
マァマァ、ちゃんと環境書いて質問すれば後から誘導しやすいし 再利用出来るんだけどねー、 ここは流れゆっくりそうだから、DAT落ちしてないし ちょっと見たけど、上の方のHTTPDのとか最悪じゃん :-D
あ、名前消し忘れた 逝って来る・・・
何っつか ひでえな ローカルプロクシがport80でlistenしてたってオチか? もうcgiでも無いし
Webprog板だからCGIの話でいいじゃん
656 :
540 :2001/08/24(金) 17:46 ID:???
>>592 ザクソンネットレコーダーアンインストール終了して
幾つかの調整してIEがやっと復旧しました、その
>C:\www にインストールしているとして、オプションのドキュメントルートは C:\www 。
>これは何も変えてなければデフォルトで大丈夫だ。
>次に、
>オプション/一般 → バーチャルホスト → バーチャルホストを使う、
>オプション/一般 → 一般 → HTTPサーバ機能、
>オプション/一般 → 一般 → バーチャルホスト、
>これらにチェックを入れる。
はやってます、でもやはり404でした。。今日思ったのですが
インターネットwebマネージャがIISの機能を満足していない
からではないんでしょうか?
やっぱネット初級あたりに質問したほうがいいですか?
その聞き方だと何処に言っても解決出来ないでしょう。 IIS??AN入れてるんじゃ無いの? 404って事はserverは見えてるの? エラーコード位勉強してくれないかな あきらめた良いと思いますよ。
PC初心者板にでも行って 「ホームページが動きません!!助けて!!!!!!」 と言うスレを立てて下さい、すると当然ボコボコに叩かれるますので そしたら部屋の窓を一杯に開けて「アチョーーー!!」と叫びながら パソコンを外に投げて下さい。 ちょっと難しいけど、、、、がんばって!!
659 :
653 :2001/08/24(金) 18:23 ID:???
660 :
初心者A :2001/08/24(金) 18:26 ID:???
ぁぅ荒れてるよぅ〜 勘弁してよぅ (;_;
何処でもいいが >やっぱネット初級あたりに質問したほうがいいですか? 取り合えずここは出て行った方がいいと思われ。。。。
何で荒れるかっつったら質問する側が必要な情報を提供しないからだ。 状況がわからないのに正確な答えが出てくると思うか? もし、こんな情報は必要無いな、とか思って情報を出さないのであればそれは間違いだ。 何もわからないテメェが必要な情報と不必要な情報を分別できると言うのか?
しかも 別に 2ch だから荒れてるワケじゃない 同じ質問の仕方じゃどの ML でも掲示板でも荒れるよ 君には技術の前に正しい質問の仕方と論理的な物事の説明の仕方を 学ぶことをお勧めする
664 :
540 :2001/08/24(金) 18:59 ID:???
とりあえず出て行きます、osはウィンドウズ98です、 別に切れたりはしませんが、多分だれも分らないんだと思う。 でもパソコンは会社のLan環境で使っていたやつなので 設定が普通と違うせいかもしれません。
これだけ聞いて未だに鯖が見えてるのかどうかも解らない 聞き方って一体・・・・・ ログ読むと何人かは真面目に答えようとしていた筈だが
666 :
540 :2001/08/24(金) 19:21 ID:???
鯖ってhttp/122.0.0.1/の事ですか見えていないと 思うのですが。。
667 :
:2001/08/24(金) 19:22 ID:???
迷惑なのでネット初級板にはこないで下さい。 ネット初級板はレベルはどうであれ日本語が正しく使える人が利用する場所です。
見えていないからお前は困ってんだろ
669 :
540 :2001/08/24(金) 19:24 ID:???
間違い122→127です、でもこれは過去に見えていない と何度も言ってるから違うのでしょうが。
もう回線切って消えろ。
671 :
540 :2001/08/24(金) 19:36 ID:???
..ストレス発散に煽られていますが。 lan環境の事だとすれば 必要な情報と不必要な情報を選別する事は 出来ないし何がlanかもわからないので 恐ろしく不必要な情報ばかりになるでしょう。。 ただ通常ある程度のレベルべ起こる不具合であれば 普通の人にも説明できると思ったからこのように 訊いたのです、でも現在自分のpcはおよそ想像出切る範囲の 通常設定とはかけ離れているので説明のしようがにないのだと 思います。 それは専門家の想像にもかけ離れているので 私はこれを正業としていないので、何を記述してよいか分りません。
> 多分だれも分らないんだと思う。 すげぇ、こいつは大物だ。 初級ネットより電波板のほうがよくないか?
673 :
:2001/08/24(金) 19:46 ID:???
>>671 おそらくあなたは気づいてないかもしれませんが、
あなたは質問の仕方が恐ろしいほど下手で誰も理解できません。
日本語勉強しなおすか、OS再インストールしてもう一度試すか、
回線切って首吊ってください。
なぁ、もう誰かネタでもいいから Perl の初心者的質問をしてくれ
はは、もう何言っても無駄な様なので諦めるよ。 ネットワークについて、基礎的な知識をもって欲しい。 何も難しい事を言ってるんじゃ無くて、http〜〜〜 と ブラウザに入力したアドレスの内容が何故表示出来るのかと言う事です。 pingやport,listenをキーワードに検索すればある程度 導通検査の仕方が出てくるからその辺りから見ていけば時間は掛からない。 それと、 >多分だれも分らないんだと思う。 こんな事を言ってるけど、それは違う。 貴方が自分なりに試行錯誤した結果をここに書き込まないから 誰も答える事が出来ないんだ。 具体的に言うと、エラーメッセージ、ブラウザに〜〜〜と書かれています とか、4**、5**といったエラーが出ていますとか。 それを前の方の人も何度も聞いているね。 貴方はそれに答えずに、自分なりに考えた事だけを一方的に書き込んでいる だけだから、両者の間にコミュニュケーションは存在していないんです。 つまり、今までだらだらと続けて来た事は、たった一人でトラブルシューティング してるのと何ら変わらない結果しかもたらしていないと言う事です。 アプローチは沢山あるんだから、あせらず廻り道するのも手ですよ。
うん、かなり良い事言った。 質問する時は環境とエラーメッセージ位は書くようにしような。 それと回答者が聞いてる事に答える事。 そうすれば再利用する事も出来る訳だし。 問題解決までのプロセスが明確なら、ちょっとしたFAQサイト位の情報量 は十分有ると思う。 という訳で、、 ============ 質問 再開 =============
678 :
540 :2001/08/24(金) 20:16 ID:???
>>675 そのあたりの基本的部分からやってみます。。
540は日経ITの編集者で『匿名掲示板で有意義な情報は得られるのか』 という記事を書くための取材をしていると推測してみる。
複数行にわたるコメントを書くことはできますか? 毎行 # を付けるのが面倒で…
正規表現 [^\.-z] これの意味がいまいちわからないのですが...
684 :
NeTa :2001/08/25(土) 00:55 ID:???
>>682 sub comment{ undef }
comment <<EOD;
foo
bar
hoge
EOD
ってのはどうでしょ
>>684 (゚Д゚)ハァ?
Podくらい知っとけよ
=comment
foo
bar
hoge
=cut
=komento
>>682 こんな感じでいけるよ
でも実はこれではオプティマイザにとって
完全に無視される存在にはならないらしい(過去ログ参照)
komentoは何でも良いです
=cut
>>687 レスありがとうございます.
[^\.-z]で対象となるのは、
0x20 から 0x2d と 0x7b から 0x7e ですか?
(夕方実際にやってみてそういった感じでした)
どの文字が実際にマッチするかは
実際に実験してみればわかるのですが...
>>688 そそ、でも正確には制御文字(CRやLF)も含めてだから
[^\.-z]だと改行コードなんかもマッチする(\nとか付けてやってみて)
実験したと言う事はもっと深い所でトラブってるの?
だったら俺はわかんないや :-)
お前ら答えた奴らに何か言う事ねえのかよ っとどうしようもねえ糞餓鬼ばっかだな
691 :
あげてみる :2001/08/25(土) 14:33 ID:fEbHiUCs
>>685 -686
匿名掲示板で有益な情報を得たぜ日経IT記者よあげ
693 :
名無しさん@お腹いっぱい。 :01/08/26 16:41 ID:s0cllzR.
returnを使わずに最後に評価していない値を 戻り値とすることはできるのでしょうか? 遅くなると聞いたので、あまりreturnは使いたくないんです・・・。 グローバル変数使うしかないんでしょうか・・・?
>>639 りたーんすると遅くなるなんて聞いたことがないが、たぶん関数内ででかい(連想)配列を作って、それを返す時にコピーするのが時間がかかるということかな?
全体的に言ってることがおいらには理解できないが・・・。
一応おいらは呼び出し側で配列作って、関数にはリファレンスで渡してる。
それが有効かどうかは知らない。意味無かったら誰か煽ってくれ。
あと、所詮perlで書くスクリプトなんてたかがしれているから、グローバルでも平気で使ってる(わらぃ
696 :
名無しさん@お腹いっぱい。 :01/08/27 10:30 ID:5EwuC8Dg
えと、myの変数のリファレンスってとれないんでしょうか? 例: require 'jcode.pl'; my $hoge="アホ"; &jcode::sjis2euc(\$hoge); どうもeucになってないんですわ、、、
>>674 $a=1; $b=2;
print "一致したよ" if ($a = $b);
# なぜ「一致したよ」とプリントされるのでしょうか?
==
>>696 -697
何故と聞かれたら、答えになってないか。
$aに$bが代入され、$aの値(2)が評価された結果真になるから。
>>698 -699
ありがとうございました。
とてもよく解りました。
>>696 ネタですか?スコープ、局所化、my、localって言葉について
全部調べた後だったら、僕も一緒に考えてもイイ。
>>696 $hogeがアスキーオンリーだったというオチは無しな
703 :
名無しさん@お腹いっぱい。 :01/08/28 04:34 ID:Y9HJU1Vk
readonlyなファイルについても、排他処理をしておくべきでしょうか? 読み書きが同時に起こることはないから、いらないのかなという気も するのですが、どうなのでしょうか。
>703 りーどおんりーなら必要なし。 追加おんりーも必要なし。
>>704 > 追加おんりーも必要なし。
嘘教えるのはやめてください。
追加がほぼ同時に起こったら両方の追加分が混ざってしまいます。
たとえ追加がprint文一個だけだったしても、内部的には
一回じゃない可能性があります。
最低限ちゃんとsyswrite使えと書いとくべきだよな
707 :
名無しさん@お腹いっぱい。 :01/08/28 16:16 ID:83R3Dqbo
めちゃくちゃ初心者なのですが・・・ perlの場合は、 main: my($hensu, @hensu ); 見たく一々指定しなくてはならないのでしょうか? PHPみたくそのままいきなり変数を指定できないのでしょうか?
指定するのが好ましいです。
709 :
名無しさん@お腹いっぱい。 :01/08/28 16:50 ID:83R3Dqbo
>>708 そうなんですか?
そうなると、サブルーチンで使う変数も一々グローバル変数として
指定しなきゃいけないことになりますよね?
たくさん、変数を使う時かなりソースが長くなっちゃいますね(^^;;
なんでグローバル変数として宣言するんだよ。 my $hoge; でローカル変数になるだろが。
711 :
名無しさん@お腹いっぱい。 :01/08/28 17:21 ID:83R3Dqbo
>>710 いやいや・・ちょっと文章おかしかったです(^^;
同じ変数がローカルとサブルーチンに1つずつあると
エラーが起こるから、一々、ローカルでサブルーチンで使う変数を
変数指定するのもおかしいかなと思ってみただけです。
自分は、サブルーチン時に「@_」を使ってないのでそのまま引数を
ローカルの変数として呼び出してるやり方をしているもので・・・(−−;;
712 :
名無しさん@お腹いっぱい。 :01/08/28 17:41 ID:83R3Dqbo
あっ!あとあと、 type="HIDDEN" NAME="hoge"で次のページにわたる時 一々 &ReadParse(\%cgi_data);で呼んで $hoge = $cgi_data{'hoge'}; って記入しないといけないのでしょうか?
んなこたぁない
714 :
名無しさん@お腹いっぱい。 :01/08/28 18:00 ID:83R3Dqbo
>>713 &ReadParse(\%cgi_data)以外の
やり方教えてください!!m(_ _;)m
test
結局何がしたいんだよ
717 :
名無しさん@お腹いっぱい。 :01/08/28 18:15 ID:83R3Dqbo
>>716 sageの練習だったんです。
すみません。
718 :
716 :01/08/28 18:24 ID:ucUrq.A6
714 について聞いているんだが
719 :
名無しさん@お腹いっぱい。 :01/08/28 18:36 ID:83R3Dqbo
>>718 >>712 を読んでいただければ意味がわかると思います。
ようするに、PHPみたく次のページで即変数として扱えないのか?
と言う質問を問い掛けたのです。宜しくお願いします。
cgi-lib.pl 以外でって事? 他は CGI.pmかCGI_Lite.pmを使うぐらいしか知らん。 使い方は perldoc CGI perldoc CGI_Lite で 特別な記述せずに<input ... name="hoge" ... > からのデータを $hoge に 入れるのは不可能。(たぶん)
721 :
名無しさん@お腹いっぱい。 :01/08/28 19:22 ID:83R3Dqbo
>>720 やっぱり、cgi-lib以外でやる人は少ないって事なのですね(^^;
無難に、クエリーが渡ってきたら、素直に、ReadParseした方宜しいって事ですね
そうなると、perlはPHPと違って多少面倒なんですね。
>>721 cgi-lib.plなんて使ってる人のほうが少ない。
普通はCGI.pmですが何か。
配布CGIは自前でデコードが殆ど。
724 :
703 :01/08/29 01:50 ID:1LK7qRnY
>>704 -706
ありがとうございます。syswriteについても調べてみることにします。
ところで、readonlyの場合でも、そのファイルをFTPでアップロード中に、
読み込みとかが起こったりすると、大変なことになったりするのでしょうか?
725 :
725 :01/08/29 02:28 ID:nriXNhX6
あのぅ、厨な質問で恐縮なんですが、 連想配列を使うときもmyで、「俺のもの宣言」 しなくちゃならないのでしょうか? そのときは my %SAMPLE; で一括で指定できるのでしょうか? それとも、要素ごとに my $SAMPLE{'title'} = 'コニーチワ'; みたいにしてやんなくちゃならないのでしょうか?
726 :
>725 :01/08/29 02:33 ID:TrXIg0dU
>連想配列を使うときもmyで、「俺のもの宣言」しなくちゃならないのでしょうか? できる状況ならそうした方がいいかもっす。 >my %SAMPLE; >で一括で指定できるのでしょうか? それでOKっす。個別にmyをくっつける必要はないっす。
727 :
:01/08/29 06:56 ID:LMKe3GJU
my %SAMP = (title => 'コニーチワ', name => 'チンチン', tel => '03-110' );
ハッシュの要素一つだけをローカル宣言する時はlocal()な
トリップにperlと出るパス ◆FhPerLNE : #336764 ◆peRlrNR6 : #585435 ◆YITpeRLI : #716717 ◆1pERlT4I : #937918 ◆2PerLxhc : #1339723 ◆PerLxUgU : #2083790 ◆p2RPERLo : #2906193 ◆pErlw4Uo : #3303125
730 :
725(ID違うけど...) :01/08/29 09:39 ID:7qWdlnWQ
みなさん、ありがとうっす。 それでやってみるっす。
731 :
名無しさん@お腹いっぱい。 :01/08/29 10:14 ID:ZDWORICM
すみません。今UNIXのマシンでディレクトリの内容を見てみよう!みたいな プログラムを書いてるんですけど #!/usr/bin/perl $basedir = "/home/hoge"; opendir(RD,"$basedir") or die; @dircontent = readdir(RD); foreach $file_or_dir(@dircontent){ if(-d $file_or_dir){ push(@dirs,$file_or_dir); }else{ push(@files,$file_or_dir); } } に書いて中身がディレクトリかファイルかを分けてるんですが、 '.'と'..'が@dirsに入ってその他のディレクトリとかファイルは@filesの 方に入ってしまうんですがどうしてかわからないので教えていただけますか? よろしくおねがいします。
perlっていろんなバージョンがあるんですか? WinとLinux両方でやりたいのですが これから始めるとしたらどのバージョンがおすすめですか?
>>731 > '.'と'..'が@dirsに入ってその他のディレクトリとかファイルは@filesの
> 方に入ってしまうんですがどうしてかわからないので教えていただけますか?
if(-d "$basedir/$file_or_dir"){
...
ね。みんなよくやる失敗だYO!
んなこたぁ無い ってのは無しの方向ですか? (^^;
はぅ スラッシュか。。。 ^^
736 :
731 :01/08/29 11:01 ID:qLYLxYkc
>733さん ありがとうございます。できました。。 そかぁ〜絶対パス(?)指定してあげないといけないんですね。。 初歩的ミスでした。。また何かありましたらよろしくおねがいします。
737 :
725 :01/08/29 11:43 ID:7qWdlnWQ
スミマセン、お礼したばかりなのですが、 もう一つご教授ください。 プリントをするとき、 print << "_END_"; コニーチワ コバーンワ オハーヨ _END_ てな具合で書くことができますよね? そこでなんですが、変数に代入するときも 同じ様な技が使えるのでしょうか? $aisatsu << "_EOF_"; コニーチワ コバーンワ オハーヨ _EOF_ てな感じでOKなのでしょうか?
$aisatsu =<< "_EOF_"; . . . _EOF_ イコールが要る
739 :
725 :01/08/29 11:54 ID:7qWdlnWQ
即レスありがとうございます。さすが2ちゃん...早い。 なるほど、なるほど。イコールがいるのですね。 うむ、勉強になります。 イコールがいるってことは演算子が使えるってことですよね? そしたら、 $aisatsu .=<< "_EOF_"; アローハ _EOF_ って書けば$aisatsuっていう変数に追記されるって ことなのでしょうか。
されます
つーか << の後にスペース入れちゃいけない、って思い込んでた 鬱だしのう
743 :
725 :01/08/29 13:28 ID:7qWdlnWQ
>>740 -742
うまくいきました。
ありがとうございました!
$_ = <<; WEBプログラム #↑が空行である点に注意。 これでもOK。(推奨されない) << を使わなくても、 $_ = " WEBプログラム "; これでもOK。
CGIを良く書く我としては $mona = qq{<FONT size="-1" color="#ff0000"> 逝ってよし </FONT> }; print $mona; なんてよくやる。
746 :
教えてさん :01/08/29 21:04 ID:xjxFODrs
会社のホームページに日誌を載せているんですけど 出先から会社のホームページを書き換えたり出来るんでしょうか?
748 :
教えてさん :01/08/29 21:14 ID:ASEY3DfQ
ごめんなさい!
749 :
725 :01/08/30 00:39 ID:1xnqMYr2
>>744 -745
目からうろっこっす!
そんな方法もあるのですね。
750 :
725 :01/08/30 02:34 ID:1xnqMYr2
スミマセン、度々。 local(@pairs) = split(/;/,$cookies); てな感じでクッキーを分割しようとすると perl -w でチェックしたとき Use of uninitialized value in split at toarubbs.cgi line 411. という警告が出ます。調べてみたのですが、どこが狂っているの か皆目分かりません。一応通ってはいるみたいなのですが... ご教授くださいまし。 # これだけの情報では分からないでしょうか?
$cookies が undef (未定義) じゃないの? 事前に $cookies = "" if not defined $cookies; とかしておけば OK かも。:) # undef と "" は異なります。
752 :
名無しさん :01/08/30 04:54 ID:zTjKOAyE
こういう事を実現する方法は無いでしょうか…。 $log ? print LOG <<EOF : print <<EOF; ヒアドキュメントで… EOF
>>752 $log ? print LOG <<EOF : print <<EOF;
ログあり
EOF
ログなし
EOF
# ↓個人的推奨
print length $log ? <<EX : <<NEX;
ログあり
EX
ログなし
NEX
754 :
752 :01/08/30 05:48 ID:zTjKOAyE
>>753 回答の通りやってみたら出来ました。そこまで思い付きませんでした…。
推奨の方を頭に入れます。ありがとうございました。
755 :
>752 :01/08/30 06:20 ID:vlPtsTzA
どちらの場合も同じ内容を出力するというのであれば、 select LOG if $log; print <<EOF; .... EOF select STDOUT if $log; なんてのもアリですね。
756 :
725 :01/08/30 11:02 ID:pcbOuQ4U
>>751 うわ、JAPUさんだ、こんにちは。
すみません、前の行で
local($cookies) = $ENV{'HTTP_COOKIE'};
として、環境変数からクッキーを呼び出しています。
これでは$cookiesを定義したことにならないのでしょうか。
JAPUさんの教えてくださった方法でちと試してみます。
ありがとうございました。m(_ _)m
757 :
名無しさん@お腹いっぱい。 :01/08/30 11:08 ID:vj7AVUwU
758 :
名無しさん@お腹いっぱい。 :01/08/30 11:28 ID:zG.eoWl.
すみません。とあるプログラムを見ていてわからない部分があるので 教えてください。ファイルテストしているところで opendir(D,$dir)or dir; $path=readdir(D); if(-f $path){ 処理 }elseif(-d _){ 処理 } の「_」の部分なんですが意味がわからないで教えてください。 本には最後のstatないしlstatの結果を参照って書いてあるんですけど これってどんな意味なんでしょうか?直前(最後)ファイルテストをした物 と同じって意味でいいんでしょうか?(この場合$pathと同じってこと) よくわからないので教えてください
>>758 $pathと同じです。
直前に実行したファイルテスト演算子の結果はキャッシュされるので、
もう一度 (-d $path) とするより効率がよくなります。
>759さん ありがとうございます。モヤモヤが解決しました!!
761 :
名無しさん@お腹いっぱい。 :01/08/30 13:00 ID:5rfMNbvM
質問です 『現在の日付』と『入力した日付 例)2000-8-30』を比較し今現在の時間より未来だったら エラーと表示したいのですが、ソースが全然わかりません。 今日の日付を取得するのはわかるのですが・・・ my ($sec, $min, $hour, $day, $mon, $year, $wdy, $yday, $isdst) = localtime(time); $year += 1900; $mon++; print "ただいま$year年$mon月$day日 $hour時$min分$sec秒\n"; exit; それと比較する方法がわかりません・・ 誰かおしえてよ
>>761 sub is_future {
my ($b_year, $b_month, $b_day) = split /-/, shift;
require Time::Local;
return time < Time::Local::timelocal(0, 0, 0, $b_day, --$b_month, $b_year -= 1900);
}
foreach my $test_data (qw(
2000-8-30
2001-8-29
2001-8-30
2001-8-31
2001-9-1
)) { print $test_data; print ": エラー" if is_future($test_data); print "\n" }
763 :
JAPU :01/08/30 13:51 ID:c4jBSiHQ
>>756 変数は
・任意の文字列 (数字としても扱うことができる)
・リファレンス
・未定義 (undef)
のどれかをとる (他にあったっけ? 識者の補足をきぼーん) ので、
local($cookies) = $ENV{'HTTP_COOKIE'};
としても、$ENV{HTTP_COOKIE} が undef なら何もしない限り $cookies も undef なのです。
この場合は、
my $cookies = $ENV{HTTP_COOKIE} || "";
とするのがよいかな。
# 既に指摘がある通り、変数は可能な限り my で宣言するのが吉なりよ。
----
($iyear, $imon, $imday) = split /-/, $input_date;
$input_date = sprintf "%04d-%04d-%04d", $iyear, $imon, $imday;
$system_date = sprintf "%04d-%04d-%04d", $year, $mon, $day;
if($system_date lt $input_date) {
print "はにゃーん エラー\n";
}
764 :
T女の竹田 :01/08/30 15:03 ID:UDHJh.zA
HTMLから実体参照形式Unicodeとふつうのアスキーテキストが混ざったのを 抜き出して、それからぜんぶUnicode(BE)に変換しようとしたんだけど、いい方法ないかなぁ? $text =~ s/?(\d+);/pack('n',$1);/seg; $text =~ s/[\x20-\x7e]/\0$&/sg; 最初↑みたいにしてやったら化けまくって、で中を見て「あ〜ばかじゃん」 と思って上下の文を逆にしてみると…さらに大惨事に…(当たり前) 工夫すればできるとは思うけど、「この正規表現で一発!」みたいなの ないですか?
765 :
T女の竹田 :01/08/30 15:10 ID:UDHJh.zA
↑あ。。 ?(\d+) は &#(\d+) です。。
766 :
752 :01/08/30 16:56 ID:FHx3lziU
>>755 わあ…。
selectの使い方、とても参考になりました。
嬉しい。遅くなりましたけど、ありがとうございます。
767 :
名無しさん@お腹いっぱい。 :01/08/30 18:02 ID:KPteR7z.
質問! 掲示板を作ってるんですけど、ログファイル(bbslog.datとかuser.datとか)のファイルに ブラウザから直接アクセス出来ないようにしたいんですけど、 みなさんどういう方法をとっていらっしゃいますか? 自分の貧困な発想で思いついたのは、ログファイルの拡張子を『cgi』にして、 Permission Deniedさせてしまうぐらいしか思いつかなかったんです(;_;)
それが簡単で1番良いと思う。ほとんどの環境で使えるし。
あ、T女たんだ。。でも漏れは分かんないよ ゴメソ
>>767 それで良いと思うよ。でもそれはスクリプト側でする事じゃ無いんで
考えなくてOK、public_htmlの外に置くとかhtaccess置くとか
デフォルトの名前を変える様にユーザーに呼びかけましょう。
それがやり易い様に変数の中に入れておくと親切かも。。。
770 :
名無しさん@お腹いっぱい。 :01/08/30 19:08 ID:U7WzvMDs
771 :
767 :01/08/30 19:41 ID:KPteR7z.
768さん、769さん、御教授ありがとうございます。 自分でも、他のディレクトリにシンボリックリンク 貼って そこにデータ置いたりとかいろいろ四苦八苦してたんですけど、 そのやり方だと他の人に渡したときに、動かせないかもしれないので、 ここで質問させて戴いたしだいです。 やっぱり、拡張子をcgiにする方式でやってみます。 ただ、この方式だと下の問題点の方が残ってしまうんですよね。 改善される問題:ログファイル(パスワードを含む物など)を読まれる危険性がなくなる。 残っている問題:ブラウザからログファイルに直接に何度もアクセスをかけられると、 ファイルロックされていないので、書き込みがミスってしまう。 ログファイルの名前がユーザーにばれる事は掲示板の弱点として、割り切るしか無いんでしょうか(;_;) うぅ、長くなってごめんなさい。別に粘着レスでは無いんですー(;_;)
条件によって出力FHを変えるなら print { $foo ? *STDOUT : *STDERR } "HOGE\n"; っても使えるよ。 >>T女たん perldoc -f packを見れば良いのでわ(折れは英語ダメだけど pack 'u'とか(?)
いや、だからそれはユーザ側の問題なんだってばさ 後はアクセス制限掛けるなりしてもらうしかないよ cgi-bin以下の.cgi以外はwww権限で読めないサーバーとかも有るけど。。 .hthogehogeとかやっとくと結構色んなサーバーで行けそう
774 :
725(=756) :01/08/30 21:24 ID:ytEa/Jb2
なるほど、この場合、未定義になるのですね。 いやぁ、勉強になります。 みなさんおっしゃっているように、local -> myにかえてみようと 思います。いろいろありがとうございました。
自己レスですが、結局あきらめて、ループで回して前の方から切り出して、別の変数に 追加していって普通に?やりました。 最初からこうしてたらよかったかも。。こういうのって「正規表現でできるはず!!」って 思いこんでたけど、結局正規表現じゃ無理なのかな?
776 :
名無しさん@お腹いっぱい。 :01/08/31 01:18 ID:0YV4ebqc
LWP::UserAgent をつかって、クッキーを受け取って、
次のリクエストでそのクッキーをちゃんと返してやるってのをやってるんですが、
受け取るまでは、出来たのですが、ちゃんと返すことが出来ません。
どうすればいいでしょうか?
cookie.txtには、ちゃんと情報は保存されています。
#!/usr/bin/perl
use LWP::UserAgent;
require
HTTP::Cookies; my $ua = LWP::UserAgent->new(cookie_jar => 1,);
$ua->agent('Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
$ua->cookie_jar(
HTTP::Cookies- >new(file => "./cookie.txt",AutoSave => 1,));
$target = '
http://www.foo.ne.jp/ ';
my $req =
HTTP::Request- >new(GET => "$target");
$res = $ua->request($req);
if ($res->is_success) {
print $res->content;
} else {
print $res->status_line;
}
777 :
名無しさん@お腹いっぱい。 :01/08/31 02:22 ID:15D5/wj6
デリミタで質問。 みなさん、ログファイルに記録するのにデリミタは何にしてますか? おいらは、\376で区切ってます。
778 :
名無しさん@お腹いっぱい。 :01/08/31 02:43 ID:f1g.yh7k
いきなりですが、CGI設置者のftpソフトのお勧めを教えてください
779 :
名無しさん@お腹いっぱい。 :01/08/31 02:47 ID:15D5/wj6
こんな感じで処理するのはどうでしょう? Unicode は良く分からないので具体的な変換処理は書きませんが。 s{(?:\&\#(\d+);|([\x20-\x7e])|(.))}{ if(defined $1) { "[$1]"; } elsif(defined $2) { "<$2>"; } else { "($3)"; } }seg; ---- 私は less などで見やすいように、コンマかタブで区切っています。
781 :
名無しさん@お腹いっぱい。 :01/08/31 11:23 ID:NujA9c4g
初心者プログラマーなんですが、プログラムを書いていてこんなプログラムを 書いたんですが意味がこんがらがって分からなくなってしまいました。 if($host !=~ /$basename/)の!=の部分なんですがこの場合 「$hostに$basenameがなければ真を返す」って意味ですよね? そしたらif($host !~ /$basename/)も同じ意味ですよね? でもプログラムを走らせると「!=~」は真を返して[!~]は偽を 返してくれるんですが・・・・頭が混乱してきた。。教えてください。
>>781 まず、!=~ という演算子はありません。
$host !=~ /$basename/ がどう解釈されるかというと、
$host != ( ~/$basename/ )
という感じです。
で( ~/$basename/ )では、まず /$basename/ を、
$_にマッチさせる正規表現と解釈します。
たぶんそれで0が帰ってそれが ~ 演算子に渡されます。
~0 は 4294967295 ですので、この時点で、
($host != 4294967295) という感じになります。
もちろん、$host は 4294967295 じゃないでしょうから
全体として真が返ってきます。
ちなみに、
$host !~ /$basename/ と同義なのは、
!($host =~ /$basename/) です。
こういう間違いは -w オプションで perl を実行することで
簡単に見つけられますよ。
783 :
782 :01/08/31 12:04 ID:pfDOYTd.
日本語変なのは気にしないで。
784 :
781 :01/08/31 13:30 ID:gxfm2mi2
>782さん ありがとうございます。わかりました。。「-w」つけたら一発でエラーが でてきてわかりました。。説明ありがとうございました。
>>JAPUさん うまくいきました!ありがとうございます。 ↓こんな感じです。 $text =~ s{(\&\#(\d+);)|([\x0-\x7e])|(.)}{ if(defined $1) { pack('n',$2); } elsif(defined $3) { "\0$3"; } else { ''; } }seg;
786 :
725 :01/09/01 00:51 ID:u.d.epnc
皆さんに教えていただいたように、my で書き換えました。 そしたら、jcode.plで、 &jcode'convert(*send_msg_body,'jis'); #$send_msg_bodyはローカル変数として、my で宣言しています。 のようなコンバートができなくなってしまいました....。 どうすれば、ちゃんと変換できるようになるのでしょう。 ホントに厨な質問でスミマセン。
787 :
725 :01/09/01 01:02 ID:u.d.epnc
調べてみたのですが、 jcode::convert(\$send_msg_body,'jis'); でOKなのでしょうか...
jcode::convert(\$send_msg_body, 'jis');
遅かったか(w それでOKです。
790 :
725 :01/09/01 01:31 ID:u.d.epnc
>>788 -789
ありがとうございました。
今使っているjcode.plのドキュメントには載っていなかった
のですが、最新版のjcode.plに使い方が書いてありました。
791 :
、 :01/09/02 05:33 ID:4hoKlkq6
parlじゃないのですがhtmlでクリックした際サイトが 飛び出すようにするには如何したらいいのでしょうか?
793 :
はじめたばかり :01/09/02 09:01 ID:T1M6nn4M
いつも楽しく拝見してます。 いまテキストカウンターを作っていて、なんとか作ることができたの ですが、ファイルを2つに分けて1つのファイルがロックされているときは もう1つのファイルに書き込みという形にして、同時アクセスでファイルの破損を 防ぐと同時にカウント漏れを防ぐようなカウンターをつくりたいのですが 1つのファイルがロックされているときにもう1つのファイルの方にカウントを 増やすようにするにはどの関数をつかえばよいのでしょうか? まだはじめたばかりであまりよくわかりません。自分的にはfor文かと思ったのですが どうも違うような気がします。 もしよろしければ皆さんの知恵を借りられればと思います。 お願いします。
>>793 基本がなってない。
ここでコードを書くのは簡単だが理解せずに使っても意味がなかろう。
とりあえず参考書籍スレで評判の良い本を買うのをすすめる。
>>793 ファイルの数を好きに設定できるようにすると耐久度が増しますね。
がんばってください。 うまくいけば絶対に破損しないロック方式になります。
お前 のら だろ! (ワラ
はは、monaloveさん??のflock講は勉強になったなぁ (^^
799 :
名無しさん@お腹いっぱい。 :01/09/02 18:04 ID:YqVc4g/k
print "〜"; でHTMLを書き出し、HTML中で外部のjavascriptや、CSSファイルを使いたいのですが、 読んでくれません。 print "<STYLE TYPE=\"text/css\">\n<!--\n"; open(IN, "***.css"); print while (<IN>); close(IN); print "\n//-->\n</style>\n"; こうするしかありませんか? とほほのperl入門はよく読んだのですが、特にこれに関係しそうなことは 書いてありませんでした。 よろしくお願いします。
800 :
名無しさん@お腹いっぱい。 :01/09/02 18:14 ID:79Ih1PPk
>>799 print "<LINK rel=\"stylesheet\" href=\"./base.css\" type=\"text/css\" media=\"screen\">";
これでいいじゃん
801 :
名無しさん@お腹いっぱい。 :01/09/02 18:23 ID:YqVc4g/k
>>800 ありがとうございました。
CSSのほうは読んでくれました。
でもまだjavascriptのほうが動きません。
<script language=\"JavaScript\" src=\"***.js\">
</script>\n"
これではまずいでしょうか?
803 :
名無しさん@お腹いっぱい。 :01/09/02 18:37 ID:YqVc4g/k
>>802 language=\"javascript\"が悪かったみたいですね。
これが書いてあっても、CGIで書いたのではないHTMLでは
ちゃんと参照してくれるんですよ。
帰れといいつつ、javascript質問スレではなく、目的のページにリンク
してくれていて、親切ですね。ありがとう。
804 :
名無しさん@XEmacs :01/09/02 23:20 ID:.hTQgQWM
#!/usr/bin/perl use DBI; use strict; use CGI; use Date::Calc qw(Today Add_Delta_Days); #パスの設定 my $nkf = '/usr/local/bin/nkf'; #オブジェクトの生成 my $q = new CGI; #出力文字コードの設定 open HTML, "|$nkf -s"; select(HTML); $|=1; #html表示 print $q->header(-expire=>'now'); print $q->start_html(-title=>'bbs',-bgcolor=>'#DDDDDD'); print "掲示版"; print $q->hr; print $q->start_form(-method=>'POST',-action=>'./bbs2.cgi'); print $q->textarea(-name=>'msg', -rows=>3, -column=>16); print "<br>\n"; print $q->submit(-name=>'submit',-value=>'submit'); print $q->end_form; print $q->end_html; close(HTML);
805 :
名無しさん@XEmacs :01/09/02 23:24 ID:.hTQgQWM
804みたいに書いて掲示版作ろうとしたんだけど、 日本語で掲示版とブラウザ表示しようとすると internal server erorがおきます。 perl -c bbs2.cgi では、 Global symbol "$B7G" requires explicit package name at bbs2.cgi line 22. bbs2.cgi had compilation errors. といわれるので、文字コードがおかしいみたいなんですが、 どうしたらなおりますか?
806 :
名無しさん@XEmacs :01/09/02 23:25 ID:.hTQgQWM
ちなみにこれはi-mode用の掲示版をつくってみてるんですが、 パソコンのブラウザで表示しようとするときに起こるエラーです。 i-modeはためしてません。
807 :
名無しさん@XEmacs :01/09/02 23:33 ID:.hTQgQWM
さらに open HTML, "|$nkf -e"; としても結果は同じです。
>>806 @@ -19,7 +19,7 @@
#html表示
print $q->header(-expire=>'now');
print $q->start_html(-title=>'bbs',-bgcolor=>'#DDDDDD');
-print "掲示版";
+print '掲示版';
print $q->hr;
print $q->start_form(-method=>'POST',-action=>'./bbs2.cgi');
print $q->textarea(-name=>'msg',
809 :
名無しさん@XEmacs :01/09/02 23:37 ID:.hTQgQWM
本当だ。できました。なぜですか?
810 :
初心者2号 :01/09/02 23:40 ID:rbOW5x.6
皆さんこんにちは。 がいしゅつかもしれませんが、教えてください 入力フォームで電話番号など半角数字の入力のみに限定させたいのですが、 どうしたらいいでしょうか?
>>810 if($tel =~ /\D/){&error('半角数字のみです');}
>>809 多分元のスクリプトは JIS Code で書いているかと思うのですが
問題なのは「掲示板」という文字列がバイト列としてどう表現
されているかという事です
> echo '掲示版' | nkf -j | hd
とかすれば分るかもしれませんが, 「掲示板」をバイト列レベルで見ると
$B7G と見なせる部分が含まれるので " で囲まれてると変数を展開しようとして
エラーになります
別解として元のスクリプトを EUC に変換しても大丈夫だと思います
813 :
名無しさん@お腹いっぱい。 :01/09/03 01:42 ID:3oz.BmnQ
かちゅしゃログ→dat変換スクリプトを作りたいのですが、
$line =~ s/,/<>;/g;
$line =~ s/<b>//g;
$line =~ s/</b>//g;
をして、外部へのリンクは<a>タグを外して
自スレリンクの<a href="
http://saki.2ch.net/test/read.cgi?bbs= ana&key=988911584&st=7&to=7&nofirst=true" target="_blank">
を<a href="../test/read.cgi?bbs=
ana&key=988911584&st=7&to=7&nofirst=true" target="_blank">
という風にしたいです
どのように書けばよいでしょうか
815 :
814 :01/09/03 02:02 ID:W9dhAgAc
816 :
pp :01/09/03 05:49 ID:LMjVYZAM
h
817 :
test :01/09/03 06:55 ID:EfBvrGB.
test
818 :
813 :01/09/03 22:38 ID:XIk6iDJI
$lines[$i] =~ /<a href="(
http:.*? )"/;
$url=$1;
$lines[$i] =~ s/<a href="http.*?<\/a>/$url/g;
解決しました
819 :
名無しさん@お腹いっぱい。 :01/09/04 01:34 ID:jaQVJtkg
htmlファイルを取得するスクリプトを書いているのですが。。。 ファイル取得部分は人様のものやこちらのスレッドなどを参考にしてなんとか出来たのですが、 もし(たとえば hoge.html)をすでに取得していた場合 旧hoge.html→hoge.html.1 とりネームする、しかし hoge.html.1 がすでにある場合は hoge.html.2 にする その後どんどん、.3 , .4 , .5 と増やしていく という処理をしたいのですが書き方がわかりません やりたいことはもし更新されていても消さずに残しておきたい、ということです 教えていただけるとうれしいです
>>819 #!/usr/bin/perl
use strict;
use constant BACKUP_LIMIT => 5;
use constant FILE_NO_SEPARATOR => '.';
my $html_file = 'hoge.html';
my $received_htmlstr = '<!DOCTYPE html ...';
if (-e $html_file) {
my $oldest = join(FILE_NO_SEPARATOR, $html_file => BACKUP_LIMIT);
unlink $oldest if -e $oldest;
for (my $i = BACKUP_LIMIT-1; $i>0; --$i) {
my ($before, $after) = map join(FILE_NO_SEPARATOR, $html_file => $_), $i, $i+1;
next if not -e $before;
rename $before => $after;
}
rename $html_file => "$html_file.1";
}
use IO::File;
IO::File->new($html_file, 'w')->print($received_htmlstr);
__END__
>>819 #!/usr/bin/perl
use strict;
use constant FILE_NO_SEPARATOR => '.';
my $html_file = 'hoge.html';
my $received_htmlstr = '<!DOCTYPE html ...';
sub max { my $max = shift;
foreach (@_) {
$max = $_ if $max < $_;
}
return $max;
}
if (-e $html_file) {
my $file_format = qr/^\Q$html_file\E\.([1-9]\d*)$/;
require IO::Dir;
my $max_idx = max map { /$file_format/o; $1 } grep /$file_format/o, IO::Dir->new('.')->read;
for (my $i = $max_idx; $i>0; --$i) {
my ($before, $after) = map join(FILE_NO_SEPARATOR, $html_file => $_), $i, $i+1;
next if not -e $before;
rename $before => $after;
}
rename $html_file => "$html_file.1";
}
use IO::File;
IO::File->new($html_file, 'w')->print($received_htmlstr);
__END__
名前欄に #1, #2 と入れたら妙な文字が出てしまった。なんだろ?
823 :
819 :01/09/04 03:41 ID:jaQVJtkg
>>822 (820,821)
さっそくレスいただいて恐縮です
わかりやすく教えていただいてうれしいです ありがとうございました
>名前欄に #1, #2 と入れたら妙な文字が出てしまった。なんだろ?
----------------
1 名前:ひろゆき ◆NdKrQ0UM 投稿日:2001/08/09(木) 16:26 ID:OLqDn5LQ
というわけで、名前欄に#をいれて適当な文字列を入れると、
ひとりキャップが使える機能を足してみました。
ほえほえ#password
って感じです。
4 名前:ひろゆき ◆NdKrQ0UM 投稿日:2001/08/09(木) 16:32 ID:OLqDn5LQ
キャップがなくても、本人であるという証明になりますです。
----------------
という機能らしいです
ひとりキャップ 略して 「トリップ」と呼ばれているようです
824 :
pp :01/09/04 04:11 ID:BE/ASauk
すいません。 今、Active Perlをインストールして 早速拡張子.plにして、いろいろやろうかと 思っていたのですが、.plをダブルクリックすると コマンド画面が出てきて、すぐに消えてしまいます。 これはなぜでしょうか? 問題無くインストールしたのですが・・・
>824 MS-DOSプロンプト開いて、コマンドラインで perl hoge.pl とか打つべし
826 :
pp :01/09/04 05:08 ID:BE/ASauk
>>825 わざわざレスどうもです。
コマンドまたはファイル名が違います
と、なってしまいます。
827 :
825 :01/09/04 05:17 ID:oDOAY7oI
>826 それperl.exeにパスが通ってないと思うんだけど もしかしてpathの設定方法とか知らなかったりする? だとすると説明が面倒なんで俺はパス(←笑うところ)
828 :
pp :01/09/04 05:21 ID:BE/ASauk
>>827 pathの設定方法知らなかったりします。
取り敢えず、検索してみます。
わざわざ有難う御座います。
829 :
結城杏奈 :01/09/04 08:43 ID:WtCIi7QQ
ちょっと聞いてもよいかしら ファイルをおコピーしたいんですけど出来るだけシステム依存 したくないのですわ。 `cp hoge hoe`なんてやるとゲイシなPCだとおキック喰らっちゃって 大変ですわよ システムコールせずにファイルコピーする関数なんていうのは ありませんかしら? open (IN,"<hoge"); open (OUT,">hoe"); while (<IN>){ print OUT $_; } これってなんだか田舎娘みたいでとってもアンニュイですの。。。。
お前コード書くのかよっ! と言っておく w
いちお、File::Copyてなモジュールがありますがね。。。 use File::Copy; copy("hoge", "hoe"); そのソース見ると、最初にシステム見分けてから、 それぞれ最適な関数(もちシステム依存ばりばり)を 呼び出してるつうしろものでっせ。 都会派のネカマちゃんにはお気に召さんかもな。
833 :
pp :01/09/04 09:04 ID:BE/ASauk
Windowsで普通にActivePerlをインストールすると hello.pl をダブルクリックで DOS窓起動→hoge.plが起動→hoge.pl終了→DOS窓終了→一瞬で窓閉じる ってのはどうやったら、直るのでしょうか? MS-DOSプロンプトのプロパティの プログラム終了時にウィンドウを閉じる のチェックは外しているのですが・・・
834 :
結城杏奈 :01/09/04 09:58 ID:WtCIi7QQ
>>830 まー!
>>831 (ぽっ
>>832 ありがとうですの、なるべくシステムコールしない
&&標準モジュールをつかうなら田舎娘の出番になるのね
なんて中途半端なのかしら! やですわ
病的折衷主義のガラクタ出力機ですわ
でもそんなperlちゃんが楽しいですの。
かさねがさね感謝ですわ。
>>833 その問題はわたくしが通うバッキンガム高校のBBSでも
いつも書き込まれてますのよ。
わたくしは NTりすと ですけどDOSでの移動が面倒でしたら
さぎょうフォルダのうえで
explorerから右クリックでコマンドプロンプトを開く
と言うのはいかがかしら? 窓の手なんかにそう言う設定
があったとおもいますのよ。
あとはDOSのヒストリ機能なんてのを使うとちょっと便利ですわ
一度dirとかにゅうりょくした後にF1を押していくとよいですの
doskeyなんて検索すると、もうちょと便利かもですわ
835 :
名無しさん@お腹いっぱい。 :01/09/04 17:52 ID:cTMkgC.w
板違いかもしれませんが 現在LinuxMLD5でperlをやっているのですが 最初の行にちゃんとした#!/usr/bin/perlといれているのですが うまく実行されません。 which perlとかでやってもちゃんとあってるし、perl -vとかでも インストールされていることが確認できます。 今はしかたなく実行前にプログラムの前にperlといれてやっていますが 面倒で仕方ありません。 これってどうやったら動作するのでしょうか?動かない原因が特定できません。 どなたか助けてください。
実行権限がないんだろ。
chmod +x script_name.pl ./script_name.pl ^^
ねかまにちょっとワロタ 。。 病的折衷主義って何だっけか
>>835 同じく chmod 755 ./scriput_name.pl
_gunzipたんおひさっ Rubbish Lister か。。。 sage
840 :
835 :01/09/04 21:50 ID:2Iq0qb32
>chmod 755 ./scriput_name.pl だめでした。 777でもだめでした。 何が原因なのでしょうか?
何か変な文字コードなんじゃないの? #!/usr/local/bin/perl -- ↑ 一行目こうしたらどうなる?
っていうか、どんなエラーでてるんよ?
843 :
p :01/09/05 04:33 ID:sTSRf1BY
Missing braces on \N{} at C:\PERL\COPAL186\copal.tmp line 342, within string ↑すいませんがどう言う意味か教えて下さい。
>843 「"\N"の後にあるべきブレース記号が書いてねーぞ」と言われておる。 \N{hoge}はギリシャ文字なんかを出すためのエスケープシーケンスらしい。 詳しくはperldoc charnameを参照。 ていうかそんなもん使ってんの?"\n"のタイプミス?
845 :
p :01/09/05 06:07 ID:sTSRf1BY
>>844 申し訳ないです。解決しました。
わざわざレスどうもです。
846 :
名無しさん@お腹いっぱい。 :01/09/05 10:21 ID:.KHO7txo
>>845 どう解決したか書かんかい(*゚Д゚)ゴルァ!
たぶんうまくギリシャ文字が出せたんだろう
聞き捨て君ばっかだな、何だコイツら???
あー礼言えとか逝ってんじゃねえよ、結果を書けっつてんの 同じような奴見てるかもとかは考えね訳?? それとも自分が分かった事は重要機密にしてえのか? w まーどうでもいいや
850 :
名無しさん@お腹いっぱい。 :01/09/05 13:38 ID:JJ49xIDw
ロックファイルを作るスクリプトを色々と書いているのですが、 以下のスクリプトだと『タイムアウト』が出力されません。 for文内のelse以下に別のif文として書くときちんと出力されるのですが・・・。 なぜなんでしょう? この文だと『$lockfileがあって、なおかつ$maxが0なら』ということになるのか な?うーん。混乱してきた。 $lockdir = "./lock"; $lockfile = "$lockdir/lockfile.txt"; $min = "0"; for ($max = "5"; $max >= $min; --$max) { if ( -e $lockfile ) { sleep(1); print "$max\n"; } elsif ($max == "0") { print "タイムアウト\n"; exit; } else { open(FILELOCK, ">$lockfile"); close(FILELOCK); exit; } }
>>850 >} elsif ($max == "0") {
ここじゃないかな?
$lockdir = "./lock"; $lockfile = "$lockdir/lockfile.txt"; $min = "0"; for ($max = "5"; $max >= $min; --$max) { if ( -e $lockfile ) { sleep(1); print "$max\n"; if($max == "0"){ print "タイムアウト\n"; exit; } } else { open(FILELOCK, ">$lockfile"); close(FILELOCK); exit; } }
853 :
851 :01/09/05 14:52 ID:ORFkPfok
>852 うわ、ちゃんと見てなかった。 すんまそん。
854 :
名無しさん@お腹いっぱい。 :01/09/05 15:13 ID:jJXUOw7Y
>>850 if-elseは、条件一致したらそれ以下のブロックを飛ばすでしょ。
今のif-else文だと、$lockfileがあって$maxが0の時(タイムアウトと出力したい時)は
一番はじめのifブロックで終わってしまってる。
855 :
725 :01/09/05 16:17 ID:r9VXJuCk
WebProg板の方々のおかげでだいぶんPerlの 謎が解けました。ありがとうございます。 そこで、また教えていただきたいことがあります。 たとえば、 -- a.pl $val1 = 'イッテヨシ'; $val2 = 'オマエモナー'; -- b.pl #!/usr/bin/perl require './a.pl'; print "$val1\n$val2"; exit 0; とすると イッテヨシ オマエモナー という出力結果が得られます。ところが、use strict;を使って、 -- a.pl my $val1 = 'イッテヨシ'; my $val2 = 'オマエモナー'; -- b.pl #!/usr/bin/perl use strict; require './a.pl'; print "$val1\n$val2"; exit; とするとエラーになってしまいます。どこが間違っているのでしょうか? 多分 my で局所変数宣言しているので、a.pl内で定義した変数が外に 出られないのだとはおもうのです。 他にやり方がある、または無いのでしょうか? ご教授お願いします。
-- a.pl sub itteyosi { my $val1 = 'イッテヨシ'; my $val2 = 'オマエモナー'; return ($val1,$val2); } 1; -- b.pl #!/usr/bin/perl use strict; require './a.pl'; my @val = itteyosi(); print "$val[0]\n$val[1]"; exit;
a.plの方ではmyを使わず、b.plの方で use vars qw($val1 $val2); ぢゃだめですか・・・? 今のperlなら our ($val1,$val2); かな。。 my使えないけど、myはそういうものだとあきらめておいらは深追いしていません。
858 :
835 :01/09/05 22:11 ID:MH.oUUAs
>#!/usr/local/bin/perl -- >↑ 一行目こうしたらどうなる? bash : ファイル名 : command not found と出ます。
859 :
名無しさん@お腹いっぱい。 :01/09/05 22:43 ID:sW4ruaF.
>>857 外部ファイルから取り込むのは定数なんだろうから、
-- a.pl
use constant VAL1 => 'イッテヨシ';
use constant VAL2 => 'オマエモナー';
1;
--b.pl
use strict;
BEGIN { require './a.pl'; }
print VAL1."\n".VAL2;
って感じがいいと思うよ。
単純にダブルクォートに入れられないのは不便かもしれないけど。
ん? そりゃパス間違えてるよ、つか -- を付けろって言ってるんだろ 後、出来たように見えて本当は7**になってないとか -rwxr-xr-x こうなってるか? 実は/usr/bin/perl5 だったとか とりあえずcatでもviでも良いからLinuxで書いてみ プロンプトで cat >hoe.pl ってやって、 #!/usr/bin/perl print "test"; これだけ入れる、終わったら Ctrl+z で終了。 chmod 755 ./hoe.pl ./hoe.pl これで動かなきゃしらない。
861 :
名無しさん@お腹いっぱい。 :01/09/05 23:35 ID:ZkxQdk2c
862 :
835 :01/09/05 23:41 ID:O0y3PBhM
>860 やっぱりダメでした。 お手上げです。何が原因かすら不明…
とりあえず、
>>835 によると合ってるらしいが
$ which perl
の結果を書いてみ。念のため。
>>835 それより、どんなエラーメッセージなのかを・・・・
Linuxつかえんなら大人しくWin使えよ。
866 :
名無しさん@お腹いっぱい。 :01/09/06 00:17 ID:4627I8LA
if ($ENV{'REQUEST_METHOD'} eq "POST"){ read(STDIN, $commandline, $ENV{'CONTENT_LENGTH'}); } else { $commandline = $ENV{'QUERY_STRING'}; } どうみても普通のアレなんですけど。。。 method="GET"だと$commandline は取れるのに、 method="POST" にすると$commandline に文字列が入りません。 なんでGETだと取れて、なぜPOSTだと取れないのでしょうか? 同じところでずっとはまっています。 何か悪いところがないでしょうか?よろしくお願いします。
867 :
850 :01/09/06 00:43 ID:ESQY.pDM
>>854 なるほど!
if文は評価式が真なら実行文を実行して終了し、偽なら実行文は実行せずに
elsif文を評価するということですね。逆に言えばif文が偽にならないとelsifは
評価されない・・・。
ありがとうございました。
868 :
名無しさん@お腹いっぱい。 :01/09/06 00:58 ID:lkkYIUpY
use strictが使えないです・・。なんで?アパッチ入れないとやっぱだめ? win98/ActivePerl/Httpd
>>868 そもそも「use strict;」が何なのかを学ぶと良いと思われ。
>>855 通常、そういうことをしようとするときは、Exporter を使う。
# a.pm
package a; use base Exporter; @EXPORT = qw($val1 $val2);
$val1 = 'イッテヨシ'; $val2 = 'オマエモナー'; 1;
# b.pl
use a; print "$val1\n$val2";
>>855 >>857 my を使った変数をエクスポートする時は
*global = \$private;
とすると、実質 $private はレキシカルでなくなることを利用してimport を自分で書けば一応可能…かも?
というのも、??? の行を消すとなぜかうまくうごかなかったから。
# a.pm
package a; @EXPORT = qw($val1 $val2);
my $val1 = 'イッテヨシ'; my $val2 = 'オマエモナー';
sub import {
my $c = caller;
my @tmp = ($val1, $val2); # ???
foreach my $e (@EXPORT) {
my ($prefix, $e_sym) = ($e =~ /^([\$\@%*&]?)(.*)/); $prefix = '&' unless $prefix;
*{$c.'::'.$e_sym} = eval "\\$prefix$e_sym"; die $@ if $@;
}
}
1;
(改行が多すぎるらしいため、つめて書いてます)
871 :
名無しさん@お腹いっぱい。 :01/09/06 01:35 ID:lkkYIUpY
>>868 なんなのかは知ってるけど、仕様の依存性とかのデータが見当たらないんですよぅ。
872 :
名無しさん@お腹いっぱい。 :01/09/06 04:57 ID:ugAsC9SM
>>871 いやね、「Apacheがないせいでuse strictが使えない?」みたいなことを
書かれた時点で、こいつわかってんのかと思っちゃったりするわけですよ。
ま、そんなのはどうでもいいんだけど、
use strictが使えないって具体的に何がだめなん?
873 :
835 :01/09/06 09:51 ID:0KMUTKPI
原因が判明しました。 スクリプトを/usr/binにもっていってperlのあるところで実行すると大丈夫でした。 perlのあるところでしか実行できないところをみると perlのパスが通ってないみたいです。 こんなこと初めてです。一応検索してはいるのですがそれらしきものにヒットしません。 どうすれば解決するんでしょうか?
>>873 多分違わないか?
835 で which perl や perl -v が期待した動作をしたと書いているの
だから perl が PATH の通ったところに無いとは思えないのだが
単純にスクリプトの起動のさせ方が間違ってると思うのだが
shell 上からスクリプトをどうやって実行させてる?
スクリプト名を hoge.pl (command prompt を >) として
> hoge.pl
で実行させようとして無いか?
./hoge.pl
876 :
857 :01/09/06 11:01 ID:uCOK.3Ds
>>870 そーゆーふーにやるんだ。今度から使うよ。ありがと〜ヽ(´ー`)ノ
後半のは、良く分からないし、やっぱプライベートな変数を外に出すのは不自然ってことで、気にしないで置きます。
多分
>>855 も想定しているのは定数だけを記述したファイルを用意したいのだろうし。
それでも外に出したい時は、Getほげほげ関数作ったほうが楽そうですからね(;´∀`)
>>859 も、やりかたとしては勉強になりました。
が、""の中に入れられないのは痛い。。。
877 :
725(=855) :01/09/06 11:15 ID:rIfbk0F2
878 :
名無しさん@お腹いっぱい。 :01/09/06 12:00 ID:WXMJq9Po
>>858 #! /usr/bin/env perl
でも同じでしょうか
879 :
名無しさん@お腹いっぱい。 :01/09/06 12:35 ID:I8HVXYHg
要素数が同じ配列が2つあって、その内容が同じかどうか調べたいんですけど、 今は if ((join "\t", @a) eq (join "\t", @b)){ なんか処理 } ってやってます。 各要素にタブ文字を使っていなければこれで十分ですか? if ($a[0] eq $b[0] && $a[1] eq $b[1] && ... は見にくいからあんまりやりたくない・・・・
880 :
名無しさん@お腹いっぱい。 :01/09/06 13:35 ID:cGMUUJcs
>>879 十分と思われます。ただ、配列のサイズがでかいと巨大な文字列が
生成されることになるので、一個一個調べたほうがいいかもね。
for ($i=0; $i<=$#a; $i++) {
unless($a[$i] eq $b[$i]) { 違ってた場合のなんか処理; }
}
>>879 順番も一緒か調べたければ
if ("@a" eq "@b") {
hogehoge;
}
が一番簡単かも…。ちなみに要素が同じかどうか調べるなら、
joinする前にsortする必要あり!
それじゃ ('aaa', 'bbb') と ('aa', 'abbb') が 一緒になっちゃう
join($;, @a) eq join($;, @b) が少なくともスペースやタブよりはましかと。
>>882 要素にタブが含まれない配列のタブで結合するんだから大丈夫だべ。
885 :
882 :01/09/06 14:43 ID:8PdBtivg
882は嘘だった。知ったかぶりスマソ。
886 :
725(=855) :01/09/06 15:20 ID:rIfbk0F2
>>876 >多分
>>855 も想定しているのは定数だけを記述したファイルを用意したいのだろうし。
そうです、その通りです。
a.plの変数をb.plとc.plで共有したいなぁと考えていたのです。
教えの通り、hoge.pm作って、use hoge;で上手く行きました。
ありがとうございました。
887 :
879 :01/09/06 15:51 ID:I8HVXYHg
みなさんありがとうございます。
ちょっと調べたら、
>>883 の通りに join $; , @a; の方がいいみたいですね。
文字列は結合後でも500bytesくらいだから大きすぎってことはないと思いますが
joinよりいい案ってあんまりないですか?
888 :
名無しさん@お腹いっぱい。 :01/09/06 19:00 ID:lOmO3j1c
fork で生成出来る子プロセスの最大数はいくつでしょうか? ウチの環境(Windows2000 + Active Perl v5.6.1)ではデフォルトで64なのですが、 これはOSまたはperl処理系の仕様上の上限なのですか? それとも、再定義でもすれば増やせるのでしょうか?
↑ あ、同時に、という意味です。
890 :
core :01/09/06 19:36 ID:n.BZs/nc
今Linuxでperlやってますが実行するときに必ず ./hogehoge.plというように./をつけないとうまく機能しません。 ./をつけなくても機能するようにはできないでしょうか? 使っているのはRedHatLinuxでperlは5.6です。
>>890 このスレでPerlスクリプトがうごかねぇって騒いでた人?
892 :
ひまぢん :01/09/06 19:59 ID:ji/LQ9h6
DOS窓じゃないんだから諦めな
Slackwareだとデフォルトで「.」が$PATHに入ってた。
(root以外の場合ね。)最近インストールしてビクーリ
したよ。というわけで
>>890 はSlackwareに乗り換え
を推奨。
895 :
名無しさん@お腹いっぱい。 :01/09/06 20:49 ID:hH7VhveI
>>888 ActivePerlでperldoc perlforkを見たら、forkの最大数は
システムのいろいろな制限で上限が決まる、とかなんとか書いてあったよ。
WinNTだとスレッドの最大数が64て制限があったかもしれない。
# vi ~/.bashrc PATH="$PATH":. # source ~/.bashrc
897 :
888 :01/09/06 22:12 ID:lOmO3j1c
>>895 ドキュメント見ました。
perlのみでの変更は出来そうも無いですね。
ありがとうございました。
>>892 過去ログアップ乙カレー。
新スレ立てるときに参考リンクに入れましょー。
899 :
超超初心者 :01/09/07 10:08 ID:24e7eVxc
Perlの超超初心者です。 今やりたいことはUNIX環境上にあるファイルを開いて半角カタカナを 全角カタカナにしようとすることです。 そういう質問はこちらで聞いても構わないでしょうか? またもし過去ログに同質問があったらごめんなさい。 過去ログ見たのですが、なかったように見えましたので.....。 レスお待ちしてます。
901 :
初心者 :01/09/07 12:25 ID:pn62mP8w
Perl初心者です。 ある変数に入っている文字列が「全角カタカナ」のみという 正規表現の書式を教えてください。 「全角ひらがな」はいろいろと検索してでてきました。 $hoge =~ /(?:\x82[\x9F-\xF1])/ でした。
>>901 1に「
>>2 のリンクを一通り見てみよう。」と書いてるのが見えませんか?
サブルーチンへ引数を渡すところで困ってます。 配列とハッシュの混在したものを渡して、 それぞれを使うということはできないのでしょうか? グローバル変数にしてしまえば、、とも思ったのですが。どうしてもローカル変数でやりたくて。 リファレンスや型グロブのあたりを調べたのですが、正直わかりませんでした。 解決の手ほどきをお願いします。 ↓こんなことをしたいです。 @list = &getList; %hash = &getHash; $str = &routine(@list, %hash); # これがやりたい sub routine { my(@list, %hash) = @_; # これも希望 my(@keys) = keys(%hash); my ($a, $b, $s, $str); foreach $a (@list){ # こんな感じで使いたい foreach $b (@keys){ $s = $a + $b; } $str .= $s; } return $str; }
904 :
わからず :01/09/07 18:03 ID:3Gw2HsKo
再送 @list = &getList; %hash = &getHash; $str = &routine(@list, %hash); # これがやりたい sub routine { my(@list, %hash) = @_; # これも希望 my(@keys) = keys(%hash); my ($a, $b, $s, $str); foreach $a (@list){ # こんな感じで使いたい foreach $b (@keys){ $s = $a + $b; } $str .= $s; } return $str; }
>>904 routineを呼ぶとき、リファレンスを渡す形でいい?
それでよければこんな感じで。
$str = &routine(\@list, \%hash);
sub routine {
my($list_ref, $hash_ref)=@_;
my @keys=keys(%$hash_ref);
foreach my $a (@$list_ref) {
:
以下略
>>905 仰せの通りでした!できました!!
サンプル見てがんばってたとき、「@$hash_ref」とやっていました。(サンプルがそうだったので・・・)WebProgしかやったことないので、リファレンスとかポインタとか微妙にわかってません・・・。
勉強します!!
ありがとうございました!
今、入れようとしているCGIなんですけど > これは、いくつかのperlモジュールを利用して動きます。 > それらは全てフリーで配布されているものです。 > > Mail::POP3Client; > Mail::Sendmail; > MIME::QuotedPrint; > MIME::Base64; > CGI; > 'jcode.pl'; って書いてあります。 共有サーバーなんですけど、どのフォルダに入れればいいんですかね? パーミッションはいくつに…? もろ、初心者質問でスマソ。
908 :
なー :01/09/07 21:08 ID:LmWrXSYQ
てすと。
909 :
maji?:res :01/09/07 21:21 ID:jyahklrM
>907 どこでも突っ込んでパスを叩いてください。 パーミッションはそれぞれの指定に従って。 この感じだとメールフォームだと思うけど そもそもsendmailは使用可能かどうかも調べてね。
2chのリンク貼り方みたいな正規表現
>>2 -3
というようなのURLみたいに変換するのどーやればスマートに書けますか?
初心者なんで解説付だと嬉し。
s/(http[^\s]*)(.*)/<a href=\"$1\">$1<\/a>$2/; これでいいだろ (ワラヒ
914 :
910 :01/09/08 17:39 ID:???
>>911 -913
ありがとうございます。
911のリンク先には人間が書いたとは思えない
正規表現とかもありますね…(汗
if (index($str, $keyword) > -1) {正規表現 }とindex使うとスピードUPするなど勉強になりました。
URLのリンクではなくてスレッド内レスへのリンクで
>>911 と
>>911 -913
というような2種類をひとつの正規表現で書けるのかな?
僕はどうしても
>>911 マッチ後-913がついているヤツをマッチと2つ書かないと
うまく出来ません。
質問させてください。 @INCに付いてなのですが、任意のディレクトリを追加したいと考え push (@INC,"./module/") などとしても全くダメな様です。 これはPerl自身が叩かれた時にセットしなければならないのでしょうか それともう一つ、strictモジュールなのですが何故か、Perl5.6 on Cygwin な環境では一切機能しない様です。'vars'としても何事もなく危険な構文が 通ってしまいます。 5.0 FreeBSD では問題無く動いているのです。 一応ソースを見てみたものの、短いけれど理解出来ませんでした。。 他の標準モジュール(Cwdなど)は全く問題無く動いています。 ヒントを頂けたらとても嬉しいです。
>>914 |
>>911 と
>>911 -913
| というような2種類をひとつの正規表現で書けるのかな?
うー。俺もかけません。正規表現の中で条件判断とかするのかな。
正規表現道場スレに移って偉い人に聞いてみるか?
>>915 前半
@INCはperl起動時に設定しないといけないので、そういうのは
BEGINブロックに入れるんだと思った。
BEGIN { push (@INC,"./module/"); }
>>915 BEGIN{ unshift(@INC, "$ENV{HOME}/perl5lib") }
#or
use lib "$ENV{HOME}/perl5lib";
cygwinのPerlでもstrictは普通に動くが?
$ perl -Mstrict -e 'print $var'
Global symbol "$var" requires explicit package name at -e line 1.
Execution of -e aborted due to compilation errors.
$
>
>>911 と
>>911 -913
>というような2種類をひとつの正規表現で書けるのかな?
たとえば、
$subject =~ s|>>(\d+)(-(\d+))?|qq(<a href="$this_script?bbs=$board&key=$key&st=$1&to=).($3 or $1).qq(&nofirst=true" target="_blank">>>$1$2</a>)|eg;
とか・・・。
919 :
918 :01/09/08 19:42 ID:???
ありゃ、&gt;とかが潰された(w
>>916 >>917 さん
どうも、即レス感謝です。勉強になります。なるほど!
BEGINブロックとENDブロックは特殊な読まれ方をするんですね。
>>BEGIN ブロックは即座に実行されるため、
>>サブルーティンなどの定義を他のファイルから読み込んで、ファイ
>>ルの残りの部分から見えるようにすることができます
と書いてるので、これは他にも便利そうです ^^
>$ perl -Mstrict -e 'print $var'
あれ??? 僕も今やり直したらちゃんと動いています。 おかしいな。。
確かに同じソースを、Freeにアップして両方catして確かめた筈なのですが、、
ごめんなさいです、今はちゃんと怒られています。
一々FTPで上げてるから分からなくなったのかな、、環境を考えないと。。。
勉強になります、ありがとう御座います。
>>914 えっと、僕も2ch型のソースを見てみました。
2段階に分けてる様です。
ログに吐き出す操作では。。。
bbs.cgiで ('>>\d' 形式は変換、http〜はそのまま)→ログに書き込み→
→読み出し時に (read.cgiでhttp〜を自動リンク)
index2.htmlの生成では。。。
bbs.cgiで、まず('>>\d')形式を変換、次に(http〜)形式を変換→print
としてる様です。2回正規表現くぐってるんですね。
何故 '>>\d' を変換してログに書くのかが謎ですが、、
多分後から追加された機能だから、read通す時にまずい事になるのかな。。。
922 :
920 :01/09/08 22:02 ID:???
>>917 さん、
何だかマヌケですが原因が分かりました (-_-
perl -Mstrict -e 'print "$a";'
だとダメで、、
perl -Mstrict -e 'print "$hoge";'
だとちゃんと動いてます。
Cygwinの方はコマンドを叩いて($aを良く使ってしまうんです)、
BSDの時はスクリプトを実行してたのが原因でした。(あほだ、、
aって何なんだろう。。特殊変数じゃない筈だし、、、、
勉強します。 strictのソースかなぁ
しかし、aとfooなんて一緒と思うから理解するのに1時間位かかった(鬱
>>920 $aと$bはsortの時に使う特殊変数になっているはず。
924 :
920 :01/09/08 22:06 ID:???
ああ、bも予約されてるぅ。。cからが空家なのか 段々恥かしくなって来た、ROMに戻るです。
925 :
920 :01/09/08 22:10 ID:???
>>923 う、sortだたですか。 はずかしっ
ありがとう御座います。 アルファベットは空だと思ってた
消えますぅ 。。。。(^ ^ )サササッ
926 :
use Net::SMTPについて :01/09/09 02:43 ID:he2Uykuk
教えて下さい。 NTサーバで動いているプログラムで、use Net::SMTPを使って サイト上のメールフォームからメールを送信させています。 最近、ファイヤーフォールを変えたらしいのですがその直後から フォームからのメール送信ができなくなってしまいました。 use Net::SMTPはファイヤーウォールの設定によっては使えなくなったり するのですか?またその場合、どの部分の設定をどう変更すればいいのでしょうか。 何もわからない哀れなカエルに知恵を授けて下さい
927 :
体育祭の名無しさん ◆B6fYuXhU :01/09/09 19:15 ID:PuCsmJ7M
どうも、初めまして。
perlをつかって、cookie認証が必要なページを取得しようとしているのですが、
どうすれば用でしょうか?
普通のページの場合LWP::Simple を使用して、
get("
http:// 〜");
などして取得できるのですが、cookieを使用する場合どうすればいいのでしょうか?
具体的には、Aページで、cookieAを取得し、
次に、Bページで、そのcookieを使用して、認証したいのです。
自分なりに書いてみたのですが、
どうすればいいのでしょうか?
http://blue.ribbon.to/~atu/TestScript.txt よろしくお願いします。
929 :
名無しさん@お腹いっぱい。 :01/09/10 19:02 ID:mDibE0X6
色んな配布スクリプトなんかを改造したりしてるんですが 良く上の方にある $script... #-- スクリプトの名前 こんな感じの大域変数の扱いに困ってます、酷いのになると50個位あったり して、こんな正確なので出来れば閉じ込めたいんですが、自分で考えたのは 全体を sub SETTING とかで囲んで、参照したい時は &SETTING(script) で使うという感じです。 もっと他に良いやり方はありますか?
・%Configに入れる。名前で参照[$Config{hoge}] ・@Configに入れ、enumを使って定数列を作成。名前で参照[$Config[HOGE()]] ・use constantまたはsub name(){ value }で定数を作成し参照[HOGE()] ・変数を全て大文字にするだけで済ませる[$HOGE]
・パッケージに入れてour宣言つーのは? package Setting; our $script = "hoge.cgi"; package main; print "$Setting::script\n";
933 :
名無しさん@お腹いっぱい。 :01/09/11 18:45 ID:.epadQJg
初心者です。
TwnLounge Faith editionというスクリプトにクッキーを発行させたくて
悪戦苦闘しています。KENTさんのスクリプトのクッキー発行・取得の部分をとってやって見たのですが
うまくいきません。どなたか教えていただけるとありがたいです。
http://www.hpfree.com/giants/lng.txt ↑実際使っているサーバーはCGI可です。
全体を見てないけど、クッキーのフォーマットは多分あってる (つーか解らなかったらAskaのをそのまま使いなよ) ~~~~~~~ んで何故ダメかと言うと多分 printする場所が間違えている(Content-typeを指定した後で吐いている) 不幸にも Set-Cookie させてくれないServerを使っている ブラウザのクッキーがOFFになっている(・∀・) この辺かな、確認用のスクリプト書いてみる事をおすすめする
936 :
名無しさん@お腹いっぱい。 :01/09/11 22:13 ID:dnQFE/9w
他の掲示板等ではクッキーがきくし・・・ やっぱりスレ違いなのかな・・・
もうちょっと細かく書けよ、SET出来てないのかGET出来ないのか 渡した奴が化けるのかって感じで それ書いたらソース見る事にするわ
>↑実際使っているサーバーはCGI可です。 ドコ?トクトクだったらブトバスー
939 :
名無しさん@お腹いっぱい。 :01/09/11 22:39 ID:dnQFE/9w
GETできてません。 SETはできてるのかわかりません・・・ サーバーはトクトクじゃないです。(無料じゃありません。)
940 :
名無しさん@お腹いっぱい。 :01/09/11 22:55 ID:dnQFE/9w
すいません逆でした。 SETできてません。 GETはできてるのかわかりません・・・
941 :
名無しさん@お腹いっぱい。 :01/09/11 23:31 ID:lMfDpcz2
ビルが無くなったYo
942 :
941 :01/09/11 23:35 ID:???
誤爆。貿易センターねらったつもりが 両国国技館につっこんでしまったようなモンだな
>>942 意味がよく分からんけど、俺も興奮してるから激しく同意!!
そろそろ新スレッドの時期。 950を踏んだやつが新スレを立てる、ってことでいいっすか?
>944 初心者が書き込みしづらい状況になりうると思うから反対。 もしくは何も知らない初心者が踏んでも困るだろ。 逆に950を踏みたくないが為に初心者に対するレスが出なくなるのも困る。 これ以降の人で誰か有志が立ててくれ。
立てようか?・・
, -―- 、
, l[》《]| ヽ
/ i/ i ノノノ ))))〉 / ̄ ̄ ̄ ̄ ̄
. / i i |(リ ( | | | ! / 質問答えてくれたみなさん
〈ヘ|_|l| l ゝ~ lフ/| <. .ありがとうっ
/ | | |( ヽwliヽ | \ このスレはおしまいだよ。
/ /! | l ヘ《~ヘii~∧ ∧ \_____
/ /ノノ! ノ|リ〉 \/( ゚ω゚)
/ , ./-‐- 、/V\ハ_ヲUU
!/ ./ / / | ゝ つつ
ヽ_/ ./ ! jj \
/ i
〈 / | |'
ゝ / l | !/
`〜‐-L__」〜'^
・新スレッドはこちら:
http://corn.2ch.net/test/read.cgi?bbs=php&key=1000267444
ごくろうさま
ごくろうさま ...って950踏んだりして。
1000狙ってみたりして
まもなくここは 乂1000取り合戦場乂 となります。 \∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!! ,,、,、,,, /三√ ゚Д゚) / \____________ ,,、,、,,, /三/| ゚U゚|\ ,,、,、,,, ,,、,、,,, ,,、,、,,, U (:::::::::::) ,,、,、,,, \オーーーーーーーッ!!/ //三/|三|\ ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧ ∪ ∪ ( ) ( ) ( ) ) ,,、,、,,, ,,、,、,,, ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧ ,,、,、,,, ( ) ( ) ( ) ( )
埋め
954 :
埋め :02/02/22 04:46 ID:???
ume
2重書き込みエラーってなにで判断してるのかな
内容かな
内容みたい
何発言記録してるのかな
あれ?IPでもはじいてるかな
まもなくここは 乂1000取り合戦場乂 となります。 \∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!! ,,、,、,,, /三√ ゚Д゚) / \____________ ,,、,、,,, /三/| ゚U゚|\ ,,、,、,,, ,,、,、,,, ,,、,、,,, U (:::::::::::) ,,、,、,,, \オーーーーーーーッ!!/ //三/|三|\ ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧ ∪ ∪ ( ) ( ) ( ) ) ,,、,、,,, ,,、,、,,, ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧ ,,、,、,,, ( ) ( ) ( ) ( )
+ + + + + . / ̄\ +. ∧_∧アハハハ + ノリカエセヨー( ´∀`) (´∀` ) (つ つ (つ つ■ . + ( ヽノ ( ヽノ + し(_) し(_)
アハハハ
海苔返してやれよ。
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ピュ.ー ( ・∀・)<1000ゲット!! =〔~∪ ̄ ̄〕 \________ = ◎――◎
∧,,∧ フササ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ミ*^ー゚彡 < 1000ゲットデス ミつ''''つミ \__________ ミ∩,,∩ミ ゞミミミミ
すげぇマターリした1000争いだな(w
970
971
あと28
後何ヶ月かかるんだろうな?
今月中にDAT行きにしたい。
あと6でDAT行きかな。
埋め
Perl好き。
女好き
こども好き
981 :
こぴぺ :
02/02/25 10:19 ID:??? , -―- 、
, l[》《]| ヽ
/ i/ i ノノノ ))))〉 / ̄ ̄ ̄ ̄ ̄
. / i i |(リ ( | | | ! / 質問答えてくれたみなさん
〈ヘ|_|l| l ゝ~ lフ/| <. .ありがとうっ
/ | | |( ヽwliヽ | \ このスレはおしまいだよ。
/ /! | l ヘ《~ヘii~∧ ∧ \_____
/ /ノノ! ノ|リ〉 \/( ゚ω゚)
/ , ./-‐- 、/V\ハ_ヲUU
!/ ./ / / | ゝ つつ
ヽ_/ ./ ! jj \
/ i
〈 / | |'
ゝ / l | !/
`〜‐-L__」〜'^
・新スレッドはこちら:
http://corn.2ch.net/test/read.cgi?bbs=php&key=1000267444