1 :
nobodyさん :
02/03/27 12:53 ID:wAXxxOxP
2 :
nobodyさん :02/03/27 12:54 ID:wAXxxOxP
3 :
nobodyさん :02/03/27 12:54 ID:wAXxxOxP
4 :
nobodyさん :02/03/27 12:54 ID:wAXxxOxP
5 :
帝国 ◆JXzsccCc :02/03/27 12:58 ID:BFIdDUdC
続き 991 名前:製作板で誘導した人 本日の投稿:02/03/27 12:14 ID:??? $permissionの中身は何? てかパーミッション設定するのに変数使う必要あるんだろうか・・・・ $file="\.\/$folder\/$filename"; chmod 666,$file; とかじゃダメ? 992 名前:nobodyさん 本日の投稿:02/03/27 12:26 ID:??? nobodyに0700にされる罠。 993 名前:帝国 ◆9qoWuqvA 本日の投稿:02/03/27 12:39 ID:BFIdDUdC パーミッションはフォームにいれた値。 だから変数に格納する必要が。。 994 名前:nobodyさん 本日の投稿:02/03/27 12:44 ID:??? パーミッションは8進数で設定するのは別に罠ではないという罠。 立たぬなら 立つまでまとう Perlスレ
>5 とりあえず、変数に入れずに試してみろ。 自分でも原因究明する努力は忘れずに。 >1:自分はこう言う事がしたい。 >2:それでこんな風にやってみたが・・・ >3:それだとこんなエラーが出て上手く行かなかった。 これ重要。
octで8進から10進にしたらとアドバイスしようと思ったが、 頭に0を付ければ8進数として解釈するんでないかい?
8 :
帝国 ◆JXzsccCc :02/03/27 13:32 ID:BFIdDUdC
試したけどダメでした。
>8 umask(0); じゃあ、これをファイル作成の前においてみて。
10 :
nobodyさん :02/03/27 15:56 ID:yW5j0qTy
サブルーチンのパラメータなのですが、 配列を送ろうとすると、パラメータが混ざってしまいます。 回避方法はありませんでしょうか local ( @aaa , $bbb ) ; @aaa = ( 0 , 1 , 2 , 3 ) ; $bbb = "4567" ; &test( @aaa , $bbb ) ; exit ; sub test { local ( @aaa , $bbb ) = @_ ; print "\@aaa=@aaa\n" ; print "\$bbb=$bbb\n" ; } このソースを実行しますと。 @aaa=0 1 2 3 4567 $bbb= となります。 これを。 @aaa=0 1 2 3 $bbb=4567 このようにしたいのですが
>10 最初の要素で@aaaの要素数を渡しておけば?
12 :
:02/03/27 16:05 ID:lRPZasZ4
すいません今日Perlをはじめたばかりの者です。 今練習でCHATを本のサンプルから作っているのですが、 &ReadPars(*in) という入力があるのですが、この「*in」とはどのような意味なのでしょう? もし宜しければご教授ください。
普通はリファレンス使うと思う。 ってかなぜmyじゃなくてlocal?
>>12 フォームから渡されるデータを格納するハッシュの名前
&ReadParse(*in);
とするとフォームから渡されたデータが
%inというハッシュに格納される
で良いですよね?>諸先輩方
15 :
13 :02/03/27 16:25 ID:lRPZasZ4
>>14 ありがとうございます。
ReadParseというサブクラス(?)に定義されているハッシュに格納するコードを
呼び出してそこに「in」の値を渡し、結果として%inとなるという事ですよね?
では「*」とはどういう意味なのだろう・・・
すいません、せっかく教えていただいているのに・・・
もし宜しければそのあたりが詳しく書いてあるサイトを教えていただけないでしょうか?
検索をかけてもヒットする単語が多すぎて検索できないのです。
16 :
13 :02/03/27 16:35 ID:???
何度もすいませんでした。 inが関係ないという事で検索する事ができました。 *とはいろいろな変数の型を纏めて扱えるようになるものだったのですね(語弊あり?) お邪魔いたしました。
&ReadPars(*in) こんな時代遅れのことをやると恥ずかしいので、忘れた方がいいですよ。
18 :
10 :02/03/27 16:42 ID:yW5j0qTy
>>13 >普通はリファレンス使うと思う。
>ってかなぜmyじゃなくてlocal?
myでのパラメータ渡しの記述例
お教えいただけませんか、よろしくお願いします。
>>18 localをmyに変えれば?
そして本屋に行ってPerlの本でも買えば?
20 :
10 :02/03/27 17:23 ID:yW5j0qTy
>>19 レスありがとう御座います。
早速試してみました。
>localをmyに変えれば?
my ( @aaa , $bbb ) ;
@aaa = ( 0 , 1 , 2 , 3 ) ;
$bbb = "4567" ;
&test( @aaa , $bbb ) ;
exit ;
sub test
{
my ( @aaa , $bbb ) = @_ ;
print "\@aaa=@aaa\n" ;
print "\$bbb=$bbb\n" ;
}
実行結果:
@aaa=0 1 2 3 4567
$bbb=
残念ながら結果は、変わりませんでした。
>そして本屋に行ってPerlの本でも買えば?
ご指摘ありがとう御座います。
先程、www.amazon.co.jpにて
プログラミング Perl (オライリー社)
Effective Perl (ASCII 社)
の2冊購入いたしました。
21 :
10 :02/03/27 17:41 ID:yW5j0qTy
先程の、配列のパラメータ渡し解決いたしました。
my ( @aaa , $bbb ) ;
@aaa = ( 0 , 1 , 2 , 3 ) ;
$bbb = "4567" ;
&test( \@aaa , \$bbb ) ;
exit ;
sub test
{
my ( $aaa , $bbb ) = @_ ;
print "\@aaa=$$aaa[ 0 ] $$aaa[ 1 ] $$aaa[ 2 ] $$aaa[ 3 ] \n" ;
print "\$bbb=$$bbb\n" ;
}
実行結果:
@aaa=0 1 2 3
$bbb=4567
http://www13.cds.ne.jp/~ohsaru/perl/perlref.html こちらのページが大変参考になりました。
>>21 レスキューやKENTのようなヘボの模倣しないで、プロトタイプ使えって。
sub manco(\@$)
{
print "$_[0]->[0]\n";
print "$_[1]\n";
}
@a = qw(1 2 3 4 5);
manco(@a, 10);
23 :
10 :02/03/27 21:15 ID:???
>>22 ようきけや、22よ、
君いつもいるね。
いつもそんなことばかりやっているね。気付いてるかい?
はっきり言って誰も君のこと相手にしてないよ?わかってるの?
それって、自分ではおもしろいと思ってやっいているんだろうね。
きっと、薄ら笑い浮かべてやっているんだろうね。
でもさぁ、君以外の人には全然おもしろくないんだよ。
もしかして自分でもおもしろくないのにやっているんじゃないの?
自分でも何してるのかわからなくなってるんじゃないの?
家族からも近所からも煙たがられているんだね。
友達も彼女もいないんだね。会社でも浮いているんだね。
どこに行っても相手にされないんだね。
ネットでも無視されてここに流れ着いて来たんだね。
ここでさえ相手にされてないじゃん。どうするの?かわいそうに。
もう駄目じゃん。生きていても何もいいことないよ?
どうせ誰からも相手にされないんだから、死んだ方がいいんじゃない?
相手にされないから奇抜な言動で注目を浴びようと必死なんだね。
始めは少し注意を向けてもらったのだろうけど、もう飽きられて完全に 無視されているね。
おもしろくもないのに、意味不明な事を大量に書かれても目障りなんだよね。
それって迷惑なんだよ?気付いてる?
さようなら。この世から消えてくれ。君いるだけで迷惑。
せめて最後ぐらい人里離れた山の中で自殺してね。
24 :
10 :02/03/27 22:18 ID:yW5j0qTy
>>22 プロトタイプ宣言についてですが、
@array = ( 'a' , 'b' , 'c' , 'd' ) ;
$str = "4567" ;
test( \@array , $str ) ;
exit ;
sub test(\@$)
{
my @aaa = $_[ 0 ] ;
my $bbb = $_[ 1 ] ;
print "$aaa[ 0 ]:$aaa[ 1 ]:$aaa[ 2 ]:$aaa[ 3 ]\n" ;
print "$bbb\n" ;
}
実行結果:
a:::
4567
こんな感じに変更してみたのですが、
testへの最初の引数の配列が正しく
@aaaに渡りません。
$_[ 0 ][ ? ]だと問題無く参照できるのですが、
どこか間違ってますでしょうか
>>24 プロトタイプは呼び出し前に宣言したヤツしか反映されない。
sub foo( prototypes );
foo(args);
sub foo( prototypes ){
...
}
なんのためにプロトタイプをつかうか説明しろよこのカスどもが!! まともに説明もできないのかこのガラクタが!!
>>27 のようなヘボこそ使うことをお勧めする。
君も後10年もすれば必要性がわかるかもね。(プ
>>27 自分より上で自分を呼ばれた場合非常に困る。
>>29 よって、自分より下に自分のプロトタイプ置くアフォはいない。だね。
>28 どうやらオマエは説明もできないのに使ってるようだナ! 知ったかぶりがバレてしまって顔が青ざめて必死になって今調べている姿が 目に浮かぶな! 実にこっけいなピエロ君だなオマエは! 無力なオマエは周りの人たちから陰であざ笑われていることさえも気づかずに 一生を過ごしていく、そんなちっぽけな存在のまま残り少ない人生をひっそりと 過ごしていかなければならないオマエの存在価値は小さ過ぎてどうでもいいことだ。 ただ、いまおれに相手してもらえたことだけでもありがたく思って寝ろ!
プロトタイプ宣言をしたサブルーチンで再帰させる場合には&をつけないとだめですか? sub foo ($) { $_[0] == 0 or &foo($_[0] - 1); print $_[0]; } foo 10; sub bar ($) { $_[0] == 0 or bar $_[0] - 1; # error print $_[0]; } bar 10;
>>34 >>25 のようにかける。
sub bar($);
sub bar ($) {
$_[0] == 0 or bar $_[0] - 1;
print $_[0];
}
>35 あ、なるほど。勉強になります。
37 :
nobodyさん :02/03/28 05:37 ID:Zku7n2yk
質問があります。 Perlのスクリプトって、いったん全部をコンパイルしてから処理をするのでしょうか? それとも、そのルーチンで必要な部分だけピックアップしてコンパイルするのでしょうか? なんでこんな質問をするかといいますと、 if ($hoge) { require "hoge.pl"; &hoge(); } といったソース書いたとします。 $hogeがtrueにならなかったときには、hoge.plの中にエラーがあっても、 警告されないような気がするんです。 だとするのなら、ケースによって全く異なる処理になるようなルーチンは、別のファイルで 作成した方が、スクリプト自体が小さくなり、より高速に処理が終了するのかな? という風に想像しているのですが。 「むしろrequireで呼び出すファイル分ディスクアクセスが発生したりいろいろで、 その場合は遅くなる」 という風な想像もあったりするのですが、その辺みなさんはどうお考えなのか、 ぜひお教え下さい。
>>37 man SelfLoaderが参考になると思う。
39 :
ノバ :02/03/28 15:03 ID:B1izX7ck
「data」というフォルダに入っている画像を一覧表示したいんですが どうすればいいのでしょうか?? フォルダに格納されている画像が6つの時は ★★★ ★★★ 画像が8つの時は ★★★★ ★★★★ このように表示したいです。
>>39 その★は、画像のサムネイルって意味?それとも
<a href=hoge.jpg>★</a>
っていみ?
42 :
ノバ :02/03/28 15:16 ID:B1izX7ck
(open|read|close)dir とか glob('path/to/images/*.*')とか `ls path/to/images` とか。
>>39 2段にしたいんだよね
だったらファイル数2で割って、そこで改行すれば良い
って俺は3ヶ月ぶりに触ってるからアホ丸出しなんだけど (笑
えーと、コード書けない(笑 けどこんな感じかなあ・・・ sub openDir() { #ディレクトリを開けてファイルを数えて2で割って$linefeedをフラグにする &dispImage($dir,$file,$linefeed); # $dirディレクトリのパス # $ファイル名 # 改行表示用のフラグ } こんな感じで行けると思う (遅いかな dispImageを頑張って書いてちょ
ああ、変になった $dir ディレクトリのパス $file ファイル名 $linefeed 改行表示用のフラグ #名無しさん@お腹いっぱい じゃ無くなってる!
「**というディレクトリの中に**というファイルがあれば」 という意味のif文を教えてください。
50 :
nobodyさん :02/03/28 19:01 ID:ZEbZLPiw
4 名前:名無しさん@お腹いっぱい。 投稿日:2001/04/24(火) 13:25 >2 私は在日韓国人ですが、日本生命側が怒る気持ちも理解できます。 私も西村氏の掲示板運営に抗議するため、敢えてここで西村氏を誹謗中傷し、 「文句があれば訴状を送って来い」 と、連絡先をメールで伝えましたが、訴状は届きませんで、代わりに イタズラ電話が毎日かかってくるようになりました。 本当に陰湿で卑劣な男です。 21 名前:名無しさん@お腹いっぱい。 投稿日:2001/04/27(金) 22:01 ひろゆきの彼女へ 今回の件、知ってるだろ? 悪い事はいわない。 ひろゆきとは別れたほうがいいぞ。 こんなイタ電しかできない男と一緒にいてどうする。 イタ電でパクられるなんてのは、大抵は女だぞ。 ひろゆきの脳は女性ホルモンが支配している。 女と女がくっついてたってしょうがないだろ? 24 名前:名無しさん@お腹いっぱい。 投稿日:2001/04/27(金) 22:26 いたずら電話とはひろゆきらしいな ひろゆきの陰険さはメルマガ読んでればわかるし、驚きもしないが それよりも自分への中傷だけには異常に反応するところが愉快だな
>50 チョン公ウゼえよ
52 :
nobodyさん :02/03/28 23:17 ID:Pnsb/wgV
IO::Scalar を使わずに標準出力を変数に貯える方法はないでしょうか? いちいちファイルを作っていたら大変なので困ってます
>>52 sub printx
{
my($data) = @_;
push(@buffer,$data);
print $data;
}
>>52 IO::Scalarのどこが気に入らないかはっきりしないと助言のしようがない。
塚、変数に入れて、その後どうしたい?
55 :
52 :02/03/28 23:30 ID:???
>53 うにゅ? STDOUTに出力される奴を変数に送りたいんです my $stdout; tie *STDOUT, 'IO::Scalar', \$stdout; こんな感じです。ActivePerl だと IO::Scalar がなくて…
56 :
52 :02/03/28 23:37 ID:???
>54 ActivePerlの標準インストールベースで動かないといけないので 困ってます 再帰処理で標準出力に吐いているデータを加工するためにバッファ に貯め込みたいんですが、再帰部分に手を入れたくないんですよ
57 :
nobodyさん :02/03/28 23:43 ID:7pPJ3EHV
@a = (1, 2, 3, 4, 5); @b = (5, 4, 3, 2, 1); @c = reverse @b; if ( @a == @c ) { print "equal\n"; } else { print "not equal\n"; } if ( @a == (reverse @b)) { print "equal\n"; } else { print "not equal\n"; } の実行結果が equal not equal になるのはなぜですか?
>>55 IO::Scslarハックして、標準インストールでも動くようにする。
ppmでIO-stringyをインストールする事すら出来ないのか。
>>56 1 ppmでインストールさせる。
1.5 IO::Scalarは一緒に配る。
2 perltie見ながらFILEHANDLEにtie出来るクラス作る。
3 再帰部分に手を入れる。
パッケージが限られるのならオーバーライドするって手も無くはないな。
62 :
52 :02/03/29 00:17 ID:???
>58-61 うーん、やっぱそうですか 相手が素人さんなのでインストールさせられないんです 中見てみます(ショボーン ・・・作るか
>>57 実際に評価されているのはスカラーだよ.
my @a = (1, 2, 3, 4, 5);
my @b = (5, 4, 3, 2, 1);
my @c = reverse @b;
my $a = @a;
my $b = @b;
my $c1 = @c;
my $c2 = reverse @b;
print join "\n", $a, $b, $c1, $c2;
64 :
57 :02/03/29 01:22 ID:???
>>63 ああ、そうなんですか。
じゃあ、
@a == reverse @b
の部分でリストコンテキストでreverse @bを評価するってのは
できないということですか?
無理やりスカラーにするintってのがあるかと思いますが
その逆とか・・。
65 :
始めて約一ヶ月 :02/03/29 01:44 ID:XyE2iK+m
for($i=1;$i<=$5;$i++){ <input type=text name=$i size=10 value=$value$i> } この「value」の所の書き方がわかんないです。 教えてくんさい。
57のコード equal not equal にはならねぇだよ?
for($i=1;$i<=$5;$i++){ print "<input type=text name=$i size=10 value=$value$i>"; } こういう意味か?
68 :
52 :02/03/29 02:16 ID:???
結局、IO::Scalarを送って解決しました うう、ヘタレじゃぁ
69 :
始めて約一ヶ月 :02/03/29 02:27 ID:XyE2iK+m
>67 ごめんなさい書き方が悪かったっす、 $value = tsukue; for($i=1;$i<=$5;$i++){ print "<input type=text name=$i size=10 value=$value$i>";} のなかで「$value$i」を使った時に「$value$i」が「tsukue1」と認識されないで 「tsukue」と「1」に認識されちゃうんです。 なにか良い書き方はありますか?
>>69 どういう出力結果を得たいのか、例を実際書いてくれ。
>64 できないと思う.そもそも==でリストコンテキストはあり得ないんじゃないかと. とりあえずperlfaq4にも書いてあるけど,配列の比較は面倒な方法を取らないとだめだよ. あと,無理やりスカラーにするのはscalar.intは整数化. my @a = qw(1 2 3 4 5); my @b = qw(5 4 3 2 1); sub arycmp (\@@) { my ($a, @b) = @_; @$a == @b or return; my $n = @b; $a->[$n] eq $b[$n] or return while $n--; return 1; } print (arycmp(@a, reverse @b) ? "equal\n" : "not equal\n");
72 :
始めて約一ヶ月 :02/03/29 04:20 ID:XyE2iK+m
>70 ごめんなさいさらに書き方が悪かったっす、 $value1 = いちばん; $value2 = にばん; $value3 = さんばん; $value4 = よんばん; $value5 = ごばん; print "<form action=XXX.cgi>"; for($i=1;$i<=$5;$i++){ print "項目$i<input type=text name=$i size=10 value=$value$i>";} print "<input type=submit value=更新>"; のなかの「$value$i」を「$value1」〜「$value5」と認識させて、 フォームの「項目1〜5」のテキストスペースにそれぞれ 「いちばん、にばん、さんばん、よんばん、ごばん」と表示させたいのです。 すいません説明の仕方が下手で。 よろしくお願いします。
74 :
M :02/03/29 06:31 ID:xslHK9Si
リンク先をフォルダに指定して,そのフォルダ内の特定のファイルを開く ようにするには,ファイル名を何にすればよいのでしょうか。
>>74 読めば読むほど味わいの増す、素晴らしい質問だと思います。
1:自分はこう言う事がしたい。 2:それでこんな風にやってみたが・・・ 3:それだとこんなエラーが出て上手く行かなかった。 1と3が無いと誰も答えられないよ、良い回答は良い質問から。 一緒に勉強しましょう。
$value1 = いちばん; $value2 = にばん; $value3 = さんばん; $value4 = よんばん; $value5 = ごばん; print "<form action=XXX.cgi>"; for($i=1;$i<=$5;$i++){ cgiに書かれている言語なんていうのですか?教えてください
スプリクトとCGIと意味が違うのですか?
78は神!
>72 ${"value$i"} これでいいか? わかったら帰って宿題やれ。 >73の言うように配列使った方が利口だと思うけどな。
>>76 はここで、質問するレベルに達していないと思われ。
本読む、初心者向けのサイト見るなどして、レベルアップしてから来い。
ここは一から手取り足取り教えてくれる無料教室じゃないって事だ。
82 :
81 :02/03/29 10:31 ID:???
>>72 $value1 = いちばん;
↑ これは ↓ こうしてみる。
$value1 = 'いちばん';
for($i=1;$i<=$5;$i++){
↑ これは ↓ こうしてみる。
for($i=1;$i<=5;$i++){
print "項目$i<input type=text name=$i size=10 value=$value$i>";
↑ これは ↓ こうしてみる。
print qq|項目$i<input type="text" name="$i" size="10" value="|, ${'value'.$i}, '">';
たぶんね。
84 :
nobodyさん :02/03/29 13:51 ID:GD6wTrbP
いっぺんに複数行コメントするとき どうすんだ? Cの /* */ みたいのないの?
>84 全ての行に#を付けて書く。
>>84 こんなのもある。
=foo
いっぺんに複数行コメントするとき
どうすんだ?
Cの
/* */
みたいのないの?
=cut
=英字
から
=cut
まで
>84 要するに、ない。 どうしてもと言うのなら、使わない変数にヒアドキュメント代入する手もあるけど、メモリの無駄だな。
>86 知らなかった。 スマソ。
89 :
86 :02/03/29 14:04 ID:???
>>85 =87
いや、でもこれは厳密にはコメントじゃないから。
#をつかうとコンパイル時に完全に無視するけど
=は違う、みたいな話があったようななかったような…
90 :
nobodyさん :02/03/29 14:13 ID:GD6wTrbP
ありがと、勉強なたぁ〜
$aaa->{'x'}->{'y'}='z' ; これを foreach( %aaa ) { print "$_" ; } みたいなかんじで、次々に引っ張ってきたいんですけど、 可能ですか?、出来れば簡単な例など教えて下さい。
foreach my $p (keys %{$aaa}){ foreach my $q (keys %{ $aaa->{$p} }){ print "\$aaa->{$p}->{$q} = " . $aaa->{$p}->{$q} ."\n"; } } これでいい?
93 :
91 :02/03/29 16:50 ID:???
Data::Dumper使えよ…。
95 :
nobodyさん :02/03/30 12:03 ID:1Ui3rht3
2次元配列の初期化するのに、例えば三列二行の二次元配列を 全て0にするには、 $var = 0 ; @array = ( [ $var , $var , $var ] , [ $var , $var , $var ] ) ; は分かるのですが、列数と行数を与えて初期化 するのはどのようにしたらいいのでしょうか? $retsu = 5 ; $gyou = 3 ; $var = 0 ; ・・・ここから行き詰まってます。 ヒントでもお教え下さいませ。
いまいちなにしたいのかわからんけど。こういうことがしたいの? $retsu = 5; $gyou = 3; $var = 0; foreach $row (0 .. $gyou - 1) { foreach $col (0 .. $retsu - 1) { $array[$row][$col] = $var; } } 0にするだけなら@array = ();でもいい気がするけど。
アプローダで*.jpgをそのままアプするんじゃなくて アンカタグでリンクにするのってどうすれば良いですか?
>97 画像を表示する部分のタグ変更。
99 :
sato :02/04/01 12:58 ID:???
CGI内にフォームを書いているんですが、 送信ボタンを押した時に、あるサブルーチンへ飛ばしたい場合は <form action=>の部分にどのように記述すればいいんでしょうか?
スクリプト内ではどのようにサブルーチンに飛ばしてますか? 条件があるなら条件を指定して呼び出せば良い。
101 :
初心者 :02/04/01 13:07 ID:???
100get
>>99 <input type="hidden" name="mode" value="submit">
あとは、$modeとかに値を入れてsubmitなら
フォーム送信された場合のサブルーチンへ飛ばす。
とか。。
でいいんですよね?
102 :
初心者 :02/04/01 13:08 ID:???
あぅ。100が。。。
やーいやーい
>>101 フォームが送信された場合のサブルーチン、
ってどうやるんですか??
satoのレベルに合わせて解説できる人はすごいと思う。 みんな頑張ってsatoの難題に挑戦してくれ!
で、satoはどんなことをやりたいの?
108 :
nobodyさん :02/04/01 13:45 ID:2cwLH473
余所のサイトのHTMLをperlで読み込むにはどうやれば良いのですか?
Aというサブルーチンの処理をさせたいんすけど それをボタンが押された時に行いたいんです すなわちtest.cgiの中に [追加] [削除] ボタンがこのようにあるとして、 [追加]を押した時には、サブルーチン sub plus へ。 [削除]を押した時には サブルーチン sub delete へ。 この時<form action=test.cgi method=post>をCGI内に埋め込むと 複数ボタンと複数サブルーチンをどのように処理するのか・・
サブルーチンという言葉を知ってるくらいだからプログラム経験者だろう。
条件分岐はわかるね。CGI内では条件分岐して処理を場合わけする。
htmlのボタンごとにcgiの処理を分岐するには呼び出す時点で条件を指定する。
具体的には環境変数というのを使って引数を持たせる。
>>101 の方法。
mode=plusという引数を持ってたら追加モードへ..ってやる。
あとは「環境変数」で検索してくれ。
<form action=test.cgi method=post> <input type=hidden name=mode value=plus> <input type=submit value="追加"> </form> <form action=test.cgi method=post> <input type=hidden name=mode value=delete> <input type=submit value="削除"> </form>
112 :
108 :02/04/01 15:19 ID:wV1XGpKY
HTMLじゃなくても良いんですけど 他のサイトのデータを読むにはどうすれば良いんでしょうか? i-modeでソースを見たいんですけど。。。
113 :
108 :02/04/01 15:38 ID:???
socket使うのか。。。 勉強しなおしてきまふ。
質問! perlってマインスイーパーとかペイントみたいな アプリケーションって作れるの? どうなの?おせーて★
>114 ・・・・・。ネタですか?
>>114 Perlだから○○はつくれない、ってことはないぞ。
得手不得手はあるにしても。
頑張ればマインスイーパーでもなんでも作れるさ。
>>114 できますが、何か?
オライリーの『実用Perlプログラミング』にはテトリスの例があがってるよ。
すいません、ファイル内容を全て $_ に入れた後、一行ずつ スマートに処理をするには、どうすればいいのでしょうか? 一応以下のを考えましたが、m// って遅いしメモリ食うんですよね? local $_ = ''; while (!eof(STDIN)) { $_ .= STDIN } &func($_); sub func { local $_ = shift; while (m/^(.*?\n)(.*)$/) { $_ = $2; print $1; # ここら辺にしたい処理を入れる予定 } return 1; } 他には local @_ = split(/\n/, $_); なども考えましたが、 一瞬だけメモリが二倍要りますし・・・。 あ、サブルーチンには @_ では無く $_ で渡したいのです。
>>120 local $_ = '';
個人的には「例のあれ」をプログラマが制御するのには賛同しかねる。
>>120 ファイル全部読み込んでメモリも何も無いと思う。
敢えてやるならwhileとm//gかなあ。
$/ = '';
func(<STDIN>);
sub func {
local $_ = shift;
print $1 while /(.*\n)/g;
# ↑処理
}
まあ、ネタなんだろうけど。
>120 ネタかな?とも思ったが、一応「初心者スレ」なんで... どうして変数$_ にファイル内容をすべていれた後に改まって1行ずつ処理をするのかわかりませんが、 結局、メモリをくわないようにファイル処理したいのならば以下のように正攻法でいくのがベターかと。 open(READ, 'filepath'); while (<READ>){ やりたい処理 if /pattern/; } あと、「m// って遅いしメモリ食うんですよね?」とありますが、そんなことはありません。 特に先頭マッチ(m/^pattern/)や後方マッチ(m/pattern$/)は高速だし、1バイト文字に マッチさせたいのならindex関数を使うほうが高速です。これは結局、処理内容に応じて 最適の処理を模索していくしかないと思いますが、それでもより高速化をもとめるのならば C的な言語にシフトせざるを得ません。
124 :
nobodyさん :02/04/02 13:32 ID:YZpqqRq/
ファイルを何度もopenしていて、 何回かに一回openに失敗してしまうなんて事はあるのですか?
125 :
nobodyさん :02/04/02 13:38 ID:vQkiGH9y
どっかで閉じ忘れてるとか? openとcloseの数は合ってますか?
126 :
124 :02/04/02 13:52 ID:PEBO6o/o
>>125 すいません。open失敗したわけではないのですが
そういう場合てあるのかな〜?と思ったので。
>>124 特殊な場合にはあるよ。
ファイルハンドルに使われるメモリが足りなくなったときとか。
128 :
124 :02/04/02 14:08 ID:PEBO6o/o
>>127 >ファイルハンドルに使われるメモリが足りなくなったときとか。
こういう場合があるんですね。なるほど。
けど、こんなサーバ使ってられん!てレベルの話ですよね?
レスありがとございます。
129 :
nobodyさん :02/04/02 14:09 ID:aIwf9lEF
dumperで出力したファイルを、取り込みたいですけど、 ソース中に、 my $ref = { 'a' => 1, 'b' => 2 }; こんな感じで初期できますけど、これを、 ファイルにして、そのファイルから open ( FILE , "<ファイル" ) ; my $ref = <FILE> ; close ( FILE ) ; こんな感じで取り込みたいんです。 (このソースじゃ駄目でしたけど・・・) どなたか、ご存知でしたら、ご教授ください。
>129 require "ファイル"; じゃダメなのか?
131 :
129 :02/04/02 14:24 ID:aIwf9lEF
>>130 なるほど!
盲点でした。
ありがとう御座います。
132 :
129 :02/04/02 14:27 ID:aIwf9lEF
すいません、またお願いします。 無名リストのに名前を付けれたと、記憶しているのですが、 その記述方法を忘れてしまいました。 $VAR1 = { 'x' => 1, 'y' => 2 }; dumperの結果ですが、変数が$VAR1になってしまうのですが、 これを変えたいのです。 以上よろしくお願いいたします。
133 :
nobodyさん :02/04/02 15:26 ID:YZpqqRq/
大量の分をprintで出力する場合 print <<"EOF"; 〜〜大量〜〜 EOF で出力すると〜〜大量〜〜の分をまとめてメモリに格納しちゃうんですか? それとも一行づつ処理して print "〜〜〜"; print "〜〜〜"; print "〜〜〜"; と同じになるのですか?
>>133 メモリに格納する。メモリが不安なら、
$|=1;
とか使えばいいんじゃなかったかな?
135 :
☆ :02/04/02 16:15 ID:???
バナーを表示した回数とクリックした回数を テキストに書き出したいんですが、 バナー複数ある場合テキストの中に $banner, $bannertitle, $url, $hyoujikaisu, $clickkaisu という風に書き出したいです。 バナー表示回数とクリック回数を どのように記述すればいいか是非教えて下さい。
>>135 そのまんまでいいんじゃない?
まさか、ルーチン書いてくれって事?
>>132 =129
ドキュメントに書いてあることいちいち聞くなよ。Dumper.pm読んでくれんと、コロ助
138 :
☆ :02/04/02 16:39 ID:???
>.>136 表示回数カウントの方法と、 クリック回数カウントの方法です。
139 :
nobodyさん :02/04/02 17:40 ID:BrKRPiRd
>>134 レスありがとうです。
出力をバッファリングしなくなるのでprint文の
実行と同時に出力してくれるようになる。というやつですね。
これでいちいちメモリに格納しないで直接?出力する。イコール
print <<"EOF";
〜〜大量〜〜
EOF
でも
print "〜〜〜";
print "〜〜〜";
でも同じになるのでしょうか?
sub new { my $class = shift ; my ( $filename ) = @_ ; print "##### $ARGV[ 0 ]\n" ; my $self = {} ; bless $self ; } クラスのメソッドから、グローバル?の変数参照すんのどうすんの?
>>139 効率よく入出力するためのバッファリングなので、あまり気にしすぎない方がいいよ。
手元にある環境で試したけど、標準出力に対し、cygwin版Perlは行バッファリングされていたけど、
ActivePerlはバッファリングされていなかった。
いずれにせよ、STDOUTに対しては完全バッファリングはしてないんちゃうかな?
よくわかんらんけど。
>140 main::でアクセスすれば? 行儀悪いと言われるだろうがね。
143 :
140 :02/04/02 18:56 ID:???
>>142 すまんけど、その時の記述例をちょろと、お願い。
$package::var
145 :
140 :02/04/02 18:58 ID:???
>>143 すまそん。
main::$ARGV[ 0 ]
で、できた。
146 :
129 :02/04/02 19:24 ID:aIwf9lEF
無名リストに名前を付ける方法を何方か、ご存知ありませんでしょうか、 記述例など、頂けると助かります。 よろしくお願いします。
>>146 無名なんだから名前なんてあるわけねーだろ。
148 :
129 :02/04/02 19:37 ID:aIwf9lEF
そうでしたか、
では、Dumperで、無名リストを表示する場合、
名前を付ける方法ご存知の型は、居られませんでしょうか、
よろしくお願いします。
>>147 レスありがとう御座います。
ただ、申し訳ありませんが、今後、私の発言に干渉なさらないよう、
お願い申し上げます。
>>139 $|=1するしないにかかわらず、
その両者は同じです。
Dumper.pmの中に書いてあるっていってんだろ、ボケ。 氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね 氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
151 :
147 :02/04/02 20:44 ID:???
>>148 的外れで意味不明な質問をしておきながらそのデカい態度。
見上げたもんだな。
その厨っぷりに感心したから教えてやろう。
Data::Dumper->new([ ref-list ], [ name-list ]);
e.g.
print Data::Dumper->Dump([ \%HASH ], [ 'HASH' ]);
print Data::Dumper->Dump([ \%HASH ], [ '*HASH' ]);
152 :
129 :02/04/02 21:19 ID:aIwf9lEF
>>150 >>151 レスありがとう御座います。
ただ、申し訳ありませんが、今後、私の発言に干渉なさらないよう、
お願い申し上げます。
引き続き、ご存知の方宜しくお願いします。
154 :
139 :02/04/02 21:58 ID:wv3Og9zk
>>141 >>149 ご丁寧にどうもありがとです。
けど、なんか混乱状態に陥ってます。。。
>>139 の両者ともサーバへの負担はかわらずという事ですかね?
コンパイル時にその辺は最適化してるんとちゃうかなぁ。
156 :
120 :02/04/02 22:36 ID:???
こういうのはネタと言われる程常識外れなのですね。
ソース公開したりして無くて・・・というか、ずっと以前に
公開してた事ありましたが、直ぐに中止してよかった (笑
>>121 m// や s/// 等が続いて switch 分作る時に良くやります。
が、玄人さんは使いたがらないらしいですね。
私は初心者ですのであまり理由がわかりませんが。
>>122-123 自分はまだ「どうにかプログラムを書ける」位のレベルですので、
やっと関数・処理の切り分け、流用・設計を考慮し出したトコなのです。
main ではデータの流れだけを担当し、細かい処理は各関数に
任せた結果が例の処理でした。
で、各関数には @ で渡さず $ で統一したかった、という感じ。
やっぱり
>>123 のようなのがやり方が一般的ですよね。
そうすると、便利な関数にはなるのですが、酷いと main 一個だけの
プログラムにもなりかねないので・・・もっと精進します。
有難う御座いました。
157 :
129 :02/04/02 23:35 ID:???
>>153 レスありがとう御座います。助かりました。
URLも参考になりました。
とりあえず、このような形で解決できました。
ありがとうございました。
$aa->{ 'aa' } = 'aa' ;
$Data::Dumper::Terse = 1 ;
print '$aaa = ' . Dumper( $aa ) ;
結果:
$aaa = {
aa => "aa"
}
package manco ; $manco='manco'; こんなふうにして、staitc?な変数置きたいんだけど、 駄目?
159 :
158 :02/04/03 00:18 ID:???
>>158 use strict ;
してたからだた
でも、どして?
161 :
158 :02/04/03 00:56 ID:???
use strict ; package manco ; my $manco='manco'; だったぁ〜
use strict; package system; $system::logfile = 'bbs.log'; package main; my $filename = $system::logfile; こういう事じゃなくて?
>161 わざわざそんなことしてなんになるのか? ただのアホだな! アホのくせに書き込むんじゃねーよ!
164 :
nobodyさん :02/04/03 02:53 ID:Hn4nUBfc
cgiファイルの中にアクセス解析のCGIを組み込みたいんですが そういうのって可能ですか? 例えば、htmlの場合 <html> <!--#exec cgi="cgi-bin/accesskaiseki/accesskaiseki.cgi"--> </html> みたいに記述すればOKですが、同じ文章を CGIファイルの中に付け足しても無理ですよね。 アホな質問かもしれませんがわかる方いたら教えてください。
>>156 >やっと関数・処理の切り分け、流用・設計を考慮し出したトコなのです。
>main ではデータの流れだけを担当し、細かい処理は各関数に
>任せた結果が例の処理でした。
>で、各関数には @ で渡さず $ で統一したかった、という感じ。
なるほど、意図が判った。
そういうときは、私はファイル名、もしくはファイルハンドルを関数に渡します。
>>164 CGIの中から、LWPでアクセス解析CGIをGETするのがいいかな。
>>164 動いてるそのCGIで解析するべきだと思うが。。。
>>164 具体的に何のCGIに入れるのか分からないが、
掲示板みたいのなら上の方の設定部分に
$honyarara='<!--#exec cgi="cgi-bin/accesskaiseki/accesskaiseki.cgi"-->\n';
とやっておいてhtml表示部分に
print "$honyarara";
を足す。多分だけどな。
うまく行ったら私の幸せでも祈ってください。
169 :
166 :02/04/03 04:28 ID:???
>>168 少なくとも以前apacheで試した時は、CGI出力に対してSSIは
適用されなかったなり。
170 :
168 :02/04/03 04:41 ID:???
そうでしたか。 しかも間違えてたよ。 $honyarara='<!--#exec cgi="cgi-bin/accesskaiseki/accesskaiseki.cgi"-->'; print "$honyarara\n"; だよ。(鬱 逝ってきます。 164は166の方法が難しいときはSSIでなくCGIのアクセス解析にしてimgタグを上記方法で埋め込んで下さい。
print $file{ 'fh' } $str ; こんな感じで、ファイルハンドルをハッシュの中にいれて使おうと思ったんだけど、 うまくいかんかったのだけど、どして?
最近、煽ってるやついっけど、 そういう奴は、すっこんでろよ。 ここは、【Perl】初心者コーナーだ。 質問する訳でもなく、答える気も無い奴は、 しゃべるなってこった。わかったか?
>172 初心者に質問の仕方を教えてますがなにか? まずは質問の仕方を覚えるのが大事。 質問の仕方がわかるようになれば、問題の解決法を調べる方法もわかるようになってくる。 そうすれば他人に聞かずとも自分で調べる事もできるようになるしな。 回答を教えるだけが親切ではない。
>>173 漏れが、いいたいのはさ、
「そんな事もしらねぇ〜書き込むんじゃねぇ〜よ」
みたいな事いってるのよ、
あんたの、その上から人を見るような、口調は、正直気に入らないが、
教えて欲しい人には、利益になるから、いんじゃねか
あまり素直に答えて居座られても困ります。 129みたいなのに常駐されると特に厄介だし。 「2:それでこんな風にやってみたが・・・ 」を書いてあると、 間違いを指摘するのが容易で答えやすいのではないでしょうか。 なんの努力もなしに、教えてくれと助けを求める人の中には、 初心者というより、ただ単に頭が悪い人という場合があるので、 適当にあしらってしまうのも理解できます。 FAQのような事はgoogleや適当なWebサイトに誘導するのはアリだと思うし、 調べ方を教えるのが、質問者に対してもっとも利益になると思います。 過度の煽りには賛同しかねますが、 Perlに関する初心者向けの本で解決することを質問されていてはきりがないので、 適度に追い返して欲しいというのが本音です。 と172の煽りに乗ってしまう俺がいる。 ほとんどの方は、努力する姿勢をみせている質問者には、 煽らずに答えてあげていると思います。一部の方は・・・(省略) 172さんのような口調の方がおられると余計に荒れてしまうので、 自身も多少の自粛をお願いします。(気持ちは理解してますけど。)
176 :
春虫 :02/04/03 13:18 ID:???
@args = split(/&/, $query); foreach $i (@args) { ($name, $val) = split(/=/, $i); #$val =~ tr/+/ /; #$val =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack('C', hex($1))/eg; #$cgi{$name} = $val; if ( $name eq 'data1' ){ $data1 = $val; } elsif ( $name eq 'data2' ){ $data2 = $val; } } これだとフォームが増えるとif〜のがズラズラ増えちゃうよね? なんかスマ〜トにやるにはどー書いたらいいでしょか?w
>>176 > どー書いたらいいでしょか?w
幸せそうですね。何か愉快な事でもあったのですか?
>>176 >$cgi{$name} = $val;
素直に↑を使ったらいいと思うけどダメな理由でもあるの?
180 :
179 :02/04/03 13:27 ID:???
ネタだったのか。まじめに答えてしまった。鬱だ氏脳。さようなら。
>>177 とりあえず、
print $file{ 'fh' } $str ;
を
$fh = $file{ 'fh' } ;
print $fh $str ;
って対処してはいるんだけど、
なんかスマートじゃないなーって思って質問したんやけど、
これで、あってるのかしら?
use strict ; use warnings ; 皆さん使ってます?
183 :
:02/04/03 15:35 ID:7cQZbwjH
Perlはじめたばかりの初心者なのですが フォームで取得した情報を、テーブル内に表示しようとすると 並び順がめちゃくちゃになってこまっています。これを順番に表示するにはどうしたら よいでしょうか? 名前 → 本文 メールアドレス → 名前 本文 → メールアドレス #フォームデータの復元 foreach $pair (split(/&/, $query)) { ($key, $value) = split(/=/, $pair); # 文字のデコード $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; $FORM{$key} = $value;
>>181 >>1から引用
> 1:自分はこう言う事がしたい。
> 2:それでこんな風にやってみたが・・・
> 3:それだとこんなエラーが出て上手く行かなかった。
肝心の「何がしたいか」を書かないでまともな返事を期待するなよ。
アンタのやりたいことは多分これだと思うが。
-- begin code --
print { $file{fh} } $str
-- end code --
>>183 Hashってのはそういう仕様なんだよ。
順番に表示したきゃsort keys %hashやTie::IxHash、DB_FileのDB_BTREEでも使えや。
186 :
183 :02/04/03 16:18 ID:7cQZbwjH
>>185 どうも有難うございました。そういう仕様なのですね。納得です。
勉強してまた、出直してきます。
>183 sortを使ってハッシュの中身を整列してから表示するという手もある。
188 :
183 :02/04/03 16:38 ID:???
なるほど〜。sortを使う方法ならできそうですね。 ところで、hash は順番めちゃくちゃに表示っていうのは 毎回ランダムに順番が代わるのでしょうか?それとも何か規則性あるんですか?
189 :
181 :02/04/03 16:42 ID:???
>>184 >肝心の「何がしたいか」を書かないでまともな返事を期待するなよ。
そうだね、申し訳ない。
ありがと
>>188 順番は変化します。
基本的には恐らくハッシュ値の順とかだろうけど、同じハッシュ値の場合は
格納した順によって変化するはずなので、同じ順番に並ぶことを
期待しない方がいいと思う。
以上適当な解答なので、どうしても気になるならPerlのソースコードでも
見て確かめてください。
ハッシュについてはC言語のアルゴリズムの本をみればよく分かると思う。
>188 モジュールで整列できる物がある。 ・・・以前JAPUさんに教えてもらったのにログが見つからない。(涙
192 :
:02/04/03 18:02 ID:???
掲示板とかで入力された内容を確認画面を1ページはさんで 次のページにデータを渡すには、どうすればいいのでしょうか・・・。
>192 <input type=hidden〜〜〜> で渡す。
確認画面に書き出すリンクのurlを 〜〜.cgi?comment=sage ってするか、フォームボタン作って <input type="hidden" name="comment" value="sage"> ってする。もしくはjavascript使って併用することもできる。 あとはクッキー使う方法もある。削除パスワードとか。
195 :
192 :02/04/03 18:44 ID:???
どうも有難うございました!!!!!!! <input type="hidden" 〜 で解決しました。皆様方に感謝です。
メソッドから、メンバーのメソッドを呼ぶときの引数について なんですけど package test ; sub new {改行多すぎて省略} sub a { my ( $self ) = shift ; my ( $str ) = @_ ; print "$self->{test} ### $str\n" ; } sub b { my ( $self ) = shift ; my ( $str ) = @_ ; # a( $str ) ; a( $self , $str ) ; #ここの引数の数と } package main ; my $test = new test() ; $test->a( "call a" ) ; #ここの引数の数 $test->b( "call b" ) ; exit ; メインから呼ぶとき、 $test->a( "call a" ) ; だけど、メソッドbから、呼ぶときは、 a( $self , "call a" ) ; と、なっちゃったんだけど、できれば引数の数が変わるのは、避けたいいんだけど、 これは、言語仕様すか? それとも、記述の仕方間違ってます?
>>196 何が言いたいのかよくわからんな。
もう少し纏めてから再度質問されたし。
メソッドBから呼ぶときは $self→a("call a"); ってやりなされ。
>>198 なるほどぉ〜〜〜〜〜〜〜〜!!!
そっかぁ〜、
ありがとう!!!!!!
>>183 漏れは、
$FORM{$key} = $value;
push(@FORM_ORDER,$key);
てな感じでキーの順序を覚えておいて、
foreach(@FORM_ORDER) {...}
で回すだす。
フォームのキーの並び順に依存するのは止めた方が…。
202 :
春虫 :02/04/04 15:04 ID:???
open(TMP, ">$tmp") || &error("$tmpが変!"); print TMP "$no<>$data1<>$data2<>$date\n"; open(DATA,"$file") || &error("$fileが変!"); while (<DATA>) { print TMP $_; 記事に$noを振りたいんだけど$noを1づつ増やして いきたいのですが・・・どうも上手くいきません。 Perlの先輩方々よいアドバイスをください・・・ 感じとしては$fileの1行目を読み込んで $noに+1をする感じでいいのでしょうか。。。
>202 もう少しわかりやすく。 何をやりたいかよくわからない。
204 :
202 :02/04/04 15:22 ID:???
えと・・・ 書き込みにNoをつけたいんです;−; 1番目記事,2番目の記事って感じに。
>>202 どのみちそれじゃ上書きになってるから1個しか表示されないよ。
>204 ログにナンバーを振るのでなく、表示の際にナンバーを振っていく方がいいと思うが それじゃダメなのかな?
207 :
202 :02/04/04 15:35 ID:???
LogにNoが欲しいかも・・・
open(DATA,"$file") || &error("$fileが変!"); open(TMP, ">$tmp") || &error("$tmpが変!"); $tmp = <DATA>; $tmp =~ /^(\d+)<>/; print TMP ($1+1) . "<>$data1<>$data2<>$date\n$tmp"; while (<DATA>) { print TMP $_;
210 :
202 :02/04/04 16:04 ID:???
>>209 了解!第一級教えてクンになれるように頑張ります。
では逝って来ます。
211 :
fdg :02/04/04 19:45 ID:ggon4ynD
■■ 出会いサイト開業システムレンタル ■■
儲かる出会い系ビジネス
月収100万円オーバー!!
HP作成できない初心者でも安心して運営
出会いサイトシステムをサーバーごとレンタルします
運営者様には無料で宣伝ソフトもお付けします
1.携帯メール自動生成一括送信ソフト
2.高性能メールアドレス収集ソフト
3.サーチエンジン・掲示板一括自動ソフト
http://www.voo.to/2ch/
212 :
◆Ihiuc0j. :02/04/04 23:14 ID:zyOMuMfg
サブルーチンへの引数で「配列と普通の変数」を渡したいのですがどうも上手くいきません。 例えば -------------------------------------------------------- test(@DATA1,$data,@DATA2); sub test{ local(@DATA,$data,@DATA2) = @_; } -------------------------------------------------------- のようなソースの場合local(@DATA)に全てのデータが入ってしまいます。 色々試行錯誤したのですが、なかなか望む結果は得られませんでした。 で、ポインタ(リファレンス)渡しでやったみたのですが ポインタ自体は受け渡せたのですが、そこから配列を丸ごと参照する方法がわかりません。 ($data->[x]のように一個一個要素を取り出せば上手くいきました) 何かスマートな方法はないでしょうか?
@$array_ref
まだかなまだかな・・・(いつものプロトタイプさんが来るのを待っている)
216 :
◆Ihiuc0j. :02/04/04 23:37 ID:zyOMuMfg
>>213 うお、あっさり出来たΣ(゜っ゜
サンクス!
あっさりできちゃったのか。プロトタイプ漫才見たかったのにー!
>>212 sub test(\@\$\@);
test(@data, $data, @data2);
sub test(\@\$\@){
local(*ary, *scl, *ary2) = @_;
# ...
}
219 :
nobodyさん :02/04/05 01:24 ID:zs6TJzXI
Perlのサブルーチンの引数はPerl内部では参照渡しされてるらしいのですが returnで値を返すときも内部では参照を返しているのでしょうか?
220 :
nobodyさん :02/04/05 01:30 ID:9ypevpef
だれかまたプロトタイプがらみの質問して。 プロトタイプ野郎を見たいので。
>219 サブルーチン内でmy宣言した変数をreturnできることを考えればわかるだろ! このうすらハゲが!
>このうすらハゲが! バレタ!?(;゚д゚|||
223 :
:02/04/05 03:00 ID:don7TGy+
ヒアドキュメントの終わりの文をインデントすると違う文字列として認識されてしまいますよね? ヒアドキュメントを含む部分をサブルーチンにしたい場合、どうしてますか?
>>223 意味がよくわからないけど,こういう事?
&foo(<<" HERE-DOC");
here-document
HERE-DOC
インデントに使用した文字(タブとか)も判定に使われる.
perldataのScalar value constructorsを読むと参考になると思う.
225 :
:02/04/05 04:11 ID:don7TGy+
ありがとうございますー。 英文は読みませんでしたけど、コードの例見たらわかりました。 英文って読む気がしないんですけど、 やっぱり読むほうが普通なんでしょうかね。
>>221 おまえ、いつも一言よけいだよ、
部外者だが、見るとムカツク
>>225 英語が読めると(Perlに限らず)世界は確実に広がる.
読もうとしなければいつまでも読めないまま.
読むスピードはそのうち速くなるから,頑張り過ぎない程度に気軽に読むのが良いかと.
知っている内容が多いperldocは読み易かったよ,おれの場合.
>227 お前に能書き垂れられる筋合いじゃネーヨ 何様だオマエ???(゚Д゚)
>>227 わかっていてもなかなかね。
英語の読解力付けたいんじゃなくて、Perlで目的の
処理が出来たらいいわけなんで、ついつい。。。
>>229 漏れの場合、UNIXのmanを読むうち、いつのまにか
マニュアル英語だけは読めるようになってたよ。
構文が単純だからかねぇ。
もちろん日本語訳があれば、そっちを先に見ます。
232 :
nobodyさん :02/04/05 15:16 ID:cQRjW2rJ
Perl cookbookはどうですか? effective perlはなかなか評判は良いようですが、こちらのほうはどうでしょう? 近くの本屋に売っていないもので、具体的内容が確かめられません。
参考書籍スレと間違えた、、、
234 :
727 :02/04/05 16:11 ID:Oqnvheag
参考書籍の727ですが、呼びました? けっこう高額だそうですね。
235 :
nobodyさん :02/04/05 16:38 ID:7CGZnUtF
Apr 5 16:33:08 router 544364: 17w5d: %SEC-6-IPACCESSLOGP: list 101 denied udp xxx.xxx.xxx.xxx(139) -> xxx.xxx.xxx.xxx(139), 1 packet このようなログがtail -fで流しているのですが Apr 5 16:33:08 udp xxx.xxx.xxx.xxx(139) -> xxx.xxx.xxx.xxx(139) だけ表示させるperlスクリプトを作りたいと思っています。 初めてperlでスクリプトを作るのでヒントいただけたら助かります。 何かヒントになるスクリプトないでしょうか? 拡張としてはxxx.xxx.xxx.xxxのIPアドレスをgethostbyaddrつかって ホスト名に出来るようにしていきたいと思っています。
>>235 Perlじゃなくてもawkで事足りる気もするけどね。
>>235 とりあえず、どこまで分かってて、どこでつまずいてるの?
238 :
235 :02/04/05 16:53 ID:7CGZnUtF
#!/usr/bin/perl while(<STDIN>){ print; } まずなにからやっていけばいいのかが解ってないレベルです。 もうしわけないです。 配列にデータを入れていかないといけないのか?とか 基本的な所から解ってないです。 発想ができてない状況なのでとりあえずこういうのをやってみろとか ありましたら是非ともよろしくお願いします。
>238 #!/usr/bin/perl print "Content-type: text/html\n\n"; print "Hello world!!"; まずここから。
>239 なんでCGIになってるんだ?
すみません、ついクセで・・・
use strict; open(TAIL, "tail -f tmp.log |") or die; while(<TAIL>) { if (/^(\w+ \d+ \d+:\d+:\d+ ).+(udp )(\d+\.\d+\.\d+\.\d+)(\(\d+\)) -> (\d+\.\d+\.\d+\.\d+)(\(\d+\))/) { print "$1$2$3@{[host($3)]}$4 -> $5@{[host($5)]}$6\n"; } else { print $_; } } sub host { my $host = gethostbyaddr(pack("C4", split(/\./, $_[0])), 2); return $host ? "[$host]" : ''; }
243 :
235 :02/04/05 18:11 ID:7CGZnUtF
>>242 様
ありがとうございます。
ゆっくり勉強していくつもりだったんですがいきなり答えが。
でもこのままだと少し問題があったので多少いじりました。
#!/usr/bin/perl
use strict;
open(TAIL, "tail -f /var/log/filter.log |");
while(<TAIL>) {
if (/^(\w+ \d+ \d+:\d+:\d+ ).+(denied )(\w+ )(\d+\.\d+\.\d+\.\d+)(\(\d+\)) -> (\d+\.\d+\.\d+\.\d+)(\(\d+\))/) {
print "$1$2$3$4@{[host($4)]}$5 -> $6@{[host($6)]}$7\n";
# print $3;
}
else {
print $_;
# print $3;
}
}
sub host {
my $host = gethostbyaddr(pack("C4", split(/\./, $_[0])), 2);
return $host ? "[$host]" : '';
}
正直use strict や (pack("C4", split(/\./, $_[0])), 2);のあたりが
まったくわからないのですが勉強させていただきます。
本当にありがとうございました。
244 :
235 :02/04/05 18:15 ID:7CGZnUtF
うわ。print $3とかめちゃはずかし。
日本語文字列から日本語を検索したいんですが、 /$keyword/ のようにすると、$keyword の内容が2バイト文字で、その中の一文字に 「\」とか「|」が混じってると普通に検索できません。 なにかいい方法ありませんか?
/\Q$keyword\E/
>>246 245です。うまくいきました。ありがとう
248 :
:02/04/06 21:23 ID:???
DBMの仕組みを覚えようと思って、練習ということで無理やり アクセスカウンタをDBMつくろうとしているのですが、↓みたいな方法にしたら うまく表示されませんでした、どの部分に問題があるのかもしわかりましたら 教えて頂けると助かります。宜しくお願いします。 $dat = './dat/dbm_counter'; #ファイルを開いて変数に代入 if (!tie %COUNT, SDBM_File, $COUNT, O_CREAT|O_RDWR, 0666) {&error('File Not Open');} $COUNT('now') = ++$COUNT('now'); $now = $COUNT('now'); untie %COUNT;
>248 DBMなんぞよりPerlの勉強をしたほうがいいね。
ヽ(`Д´)ノ perl -c [programfile] -c check syntax only (runs BEGIN and CHECK blocks) syntax error at - line 5, near "$COUNT(" syntax error at - line 6, near "$COUNT(" - had compilation errors.
>>248 $COUNT['now'}に変えてみそ?
つーか、CGI::Carp使えYO…
254 :
248 :02/04/06 22:03 ID:???
修正したんですが、これで大丈夫ですか?
if (!tie %COUNT, SDBM_File, $dat ,$COUNT, O_CREAT|O_RDWR, 0666) {&error('File Not Open');}
$COUNT{'now'} = ++$COUNT{'now'};
$now = $COUNT{'now'};
untie %COUNT;
>>250 そのsyntax error っていうのが、今使っているサーバだとでてくれないので
間違いを見つけるのが大変なのですが、何をすれば表示されるのですか?
>>254 use CGI::Carp qw(fatalsToBrowser);
つか、大丈夫ですか、と質問する前に試したらどうだよ。
だがもちろん共用サーバではやるなよ。
256 :
248 :02/04/06 22:07 ID:???
>>255 実は全然動いてくれませんでした・・・(泣
>>256 自分の情報を出し惜しみするな。
で、CGI::Carpを使った結果はどうなんだ?
248さん、自分のパソコンにPerlは入ってないの?いくじなし。
259 :
nobodyさん :02/04/06 22:45 ID:b9SW2YHj
ファイルを読み込んで、各行の空白で区切った個数を調べたいと思っています。 ----test.txt----- ABC DEF GHI ABCDEFGHI JKL AB CD EF GH ----------------- だと 3 2 4 と表示したいのです。 私が作ってみたのが open(IN,"test.txt"); @data = <IN>; my @kazu = split(/\s/,$_); print scalar @kazu close(IN); なのですが上手く動きません。 上記動作をするにはどうすればよろしいでしょうか? お教え願えないでしょうか。
260 :
259 :02/04/06 22:46 ID:b9SW2YHj
>>259 print scalar @kazu;
でした。; が抜けてました。
でも 考えているようには動きません。
>>259 オマエ$_とか<IO>の意味わかってないだろ。
今回は教えてやるから、何か一つマトモな本を読む(そして理解する)ことをおすすめするぞ。
open IN, "test.txt";
print scalar(split), "\n" while <IN>
close IN;
263 :
259 :02/04/06 22:52 ID:b9SW2YHj
>>259 事故レすですみません。
出来てしまいました。
open(IN,"test.txt");
@data = <IN>;
foreach(@data){
my @kazu = split(/\s/,$_);
print scalar @kazu;
}
close(IN);
でしたね。すみません。
264 :
261 :02/04/06 22:54 ID:???
ごめんなさい。偉そうなこといって置きならが<IN>の後ろに";"が抜けてました。鬱だし脳。
>>262 仰るとおり。 逝って来ます。
265 :
259 :02/04/06 22:54 ID:b9SW2YHj
>>261 ありがとうございます。
ただいま勉強中です。
>>259 open(IN,"test.txt");
while(<IN>){
split(/ /,$_);
print "$#_\n";
}
close(IN);
これでどうかしら?
267 :
266 :02/04/06 22:58 ID:???
あ、すげー進みが速い
268 :
261 :02/04/06 23:00 ID:???
>>266 それは本来望む値より1少ない上に@_を破壊してしまうのであまりよろしくないのでは。
アイタタタタ…名前消し忘れた(鬱
270 :
259 :02/04/06 23:01 ID:b9SW2YHj
>>261 <IO>とは何の事でしょうか?
Input,Outputでしょうか。
$_ は STDINファイルハンドルから読み取ったものを、
変数で指定しなかった場合に、戻り値を自動的に代入する変数という事でOKでしょうか?
良かったらお教え下さい。
271 :
266 :02/04/06 23:01 ID:???
>>268 あ。
ごもっとも。
全然ダメでした(笑
>>270 IOがInput/Outputってのはよしだが、
ここでは"IO"ってのは"X"と同じく、「何らかのファイルハンドル」って意味で使った。
で、俺が言いたかったのは<>(ヤマカッコ演算子)のこと。
<IO>でファイルハンドル"IO"から一行または全行読み込み、
whileなどの中ではデフォルトの代入先として$_が使われる、と。
試しに
<IO>;
とだけしても$_にはなにも読み込まれない。
で、$_ってのは幾つかの演算子/関数においてのデフォルトの使用変数。
>>261 で示した"scalar(split)"のsplitの第二引数も$_なのでこんなこともできる。
(ちなみにデフォルトの第一引数は' 'だ。)
つーようなことが
>>259 のコードを見て理解しているとは思えなかったわけだ。
そんだけ。もう寝る。
そうか、ヤマカッコって読めば良かったのか。 今まで、「不等号の記号」とか言ってて、わずらわしかったんだよな・・・
> 不等号の記号 それくらいなら「小なり大なり」と家YO!
275 :
259 :02/04/06 23:34 ID:b9SW2YHj
>>272 おっしゃるとおりで、理解できていません。
これから勉強します。
丁寧なご説明有り難う御座いました。
276 :
nobodyさん :02/04/06 23:48 ID:cii4pUwI
SSIの呼び出しって、相対パスじゃないと動かないんでしょうか? 絶対パスで書くとエラーが出ます。 例えば <!--#exec cgi="../a.cgi"--> ならOKですけど絶対パスで <!--#exec cgi="www/usr/a.cgi"--> だとエラー出ます。(↑の絶対パスは例) 絶対パスは間違ってないはずなんですが。 それとも間違ってるからエラーなんでしょうか。
>>276 例に間違い。
www/usr/a.cgi
死ぬほど相対パスです。これ。
素朴な疑問ですが、 $new = time(); ($sec, $min, $hour, $day, $mon, $year) = localtime($new); とした、$monは+1しないといけないのに、 $dayはそのままでもいいんですか。 そういう仕様にした理由ってなんでしょ。
279 :
nobodyさん :02/04/06 23:58 ID:cii4pUwI
280 :
nobodyさん :02/04/06 23:59 ID:rWktCpba
/home/aaa/public_html/a.cgi 相対パス
知ったかぶりも常駐するようになったか。このスレ。
284 :
nobodyさん :02/04/07 00:04 ID:D+FXhcqD
知ったかマンセー
>>278 ('Jan','Feb','Mar')[$mon]
みたいに使え
>>278 それは日が1から始るなら月も1からにせんかい!
ってことなんだろうけど、月の表記は日本のように数的でなく
Januaryなどのように文字で表すのが一般的だからじゃない?
日は1st, 2ndって数での記述が普通だからそれに合わせたんでしょ、おそらく。
>286 違う、知ったかカコワルイ
289 :
278 :02/04/07 05:18 ID:???
>>286 氏のレスに納得!・・・・したかったけど、違うのか・・・。
>>287 氏、教えてください。どして?
モジュールについてなんだけど、 Perlのモジュールって、ネイティブコードで動くの? ようするに、早いの? なんか/usr/lib/perl5/に ごちゃっといっぱい入ってるんだけど、 皆、?,pmとか、?.plなんだよね、これって普通のソースだよね、 単に、requireでファイルをインクルード してるのと、変わらないのかしら? どうなの?
291 :
k :02/04/07 07:48 ID:1Y8RzvgS
joyful noteって画像掲示板使ってるんですが、 「返信」とか「次の1件」とかのボタンをボタンじゃなくて 画像にしたい場合はどうすればいいですか?
第一に、その掲示板を知らないと誰も答えられない。 第二に、それを知らなくてもできる方法はあるがperlは関係ない。 掲示板の作者に聞くか、ウェブ制作板のjavascript関係のスレで質問しましょう。
>>290 useとrequireの違いから勉強してください。
294 :
nobodyさん :02/04/07 10:02 ID:l6zqVn0k
>>278 287じゃないが。
答えはstruct tmの中。
tm_monが例外なのではなく、tm_mdayが例外。
297 :
292 :02/04/07 12:36 ID:???
>294
再帰ックなレスだな。
なるほど..画像といったらアンカータグかと..。
まあ「ボタンじゃなくて..」っていう
>>291 は画像貼り付けたボタンもNGかもね。
298 :
nobodyさん :02/04/07 12:50 ID:KHtC3gVA
掲示板で、Proxy規制機能をつけようと思っています。 今は正規表現でホストにproxy ns cacheを含むリモートホストを弾くようにしているのですが 他に追加すべき単語はあるでしょうか? 海外の匿名串は弾けなさそう・・・
>>298 2ch式にプロキシサーバにアクセスしてみるって方がいいかもね。
300 :
298 :02/04/07 13:55 ID:KHtC3gVA
>>299 それも考えたんだけどポートスキャンしないとダメだから
大掛かりなスクリプトを組まないとだめだろうなぁ。
cookieを併用してみるのも考えてみます。
ありがとうございます。
301 :
:02/04/07 15:23 ID:V4vspG98
正規表現で ある変数のなかのメッセージから改行コードをマッチングさせて 改行が特定の数になったらそれ以降を切り捨てるやりかたをおしえてください
$n = 特定の数; $message =~ s/\n{$n,}//g;
$str =~ s/((?:[^\n]*\n){3})[\w\W]*/$1/; 改行3個目以降切り捨て。 多分最適化の余地あり。
>>301 $str = ($str =~ /^((?:.*\n){$limit})/ ? $1 : $str);
303氏のよりも少しだけ速い
305 :
:02/04/07 19:04 ID:V4vspG98
<>←→<>の変換をしたいのですが、 $value =~ s/</</g; $value =~ s/>/>/g; $value =~ s/</</g; $value =~ s/>/>/g; これだと全部<>になってしまいますよね? なんかいい方法はないでしょうか? 具体的には <<<<>><を <<<<>>< みたいな感じにしたいのですけれど。。 いろいろ探したのですが見つかりませんでした。。
>306 &は&と書くか全角で&と書くかしてくれ
スカラー値で扱える最大値しりたいんだけど、 Cのlimit.hの $_ = INT_MAX - 1 ; みたいな事したいのだ!
多分LONG_MAX あたりじゃないの?
310 :
:02/04/07 20:59 ID:V4vspG98
>>303 の方に教えていただいたのはうまくいったんですが
>>304 の方のほうがうまくいきません。
私のせいかもしれませんがどこがわるいのかわからないです・・・
311 :
nobodyさん :02/04/07 21:00 ID:mbQ4bo4F
こんばんは。 データファイル内のあるデータと一致する行だけを消す方法で 定番のやり方はあるのでしょうか? ファイルを全部読み込んで、リストにして一致する行以外を 別のリストに作成して、書き込む方法では力づくっぽい気がしまして・・ ご教授よろしくお願いします。
>310 改行数の設定はちゃんとしてる? my $limit = 3;
>311 ファイルを1行ずつ読み、あるデータと一致しない行を 適当なファイルに書き出していく。 そのファイルを元ファイルと置き換える。 ってのが定番でないかな。最適かどうかは知らんけど。
314 :
:02/04/07 21:42 ID:V4vspG98
>>312 はい、というか直接数字いれました・・・
>314 じゃあヽ( ´ー`)ノワガンネース。漏れのところではきっちり動くんだけどなあ。 perl -w とか use strict; とかしたらエラーは出る?
>314 どうやらこの板は初心者ばかりのようだからわたしがこたえておきましょう。 一応、複数環境(OS)対応版をつくってみました。まちがってたらツッコメや! my( $nl )= "\x0d?\x0a|\x0d"; # 複数環境用改行パターンテンプレート my( @lim )= (0, 3); # 繰り返し回数設定 my( $set ); # 取り出し文字列セット用 ;# パターンをセットする ($set)= /^((?:(?:(?!$nl).)*(?:$nl)?){$lim[$[],$lim[$[+1]})/o;
>311, 313 痛々しくてみてなれないネー! なぜハッシュをつかわないのか? こういうときのためのハッシュだと必ず本には書いてある はずだが、まだ理解できてないようだな!
>>316 一応煽ってあげよう。
この板は初心者ばかりとか言っておきながら間違ってたらツッコメってどーゆーことだ。
この板の連中よりも上級者なら自分で考えろ。
で、
>>314 は303方式で出来てるならそれでいいmでは?
304の方が確かにちょっと速いだろうけど、316は303よりも遅そうだし。
こんなところで引っかかるよりも、作りたいものを完成させるのが先だと思う。
>>317 >こういうときのためのハッシュだ
こんなアグレッシブな文体の本はクソに決まっています。
中々面白い奴が来たな。
>318 わたしが書いたほうが、約1.5倍速でした。318君は、目測でわたしが書いたほうが遅そうだと 書きましたが、どう見てもわたしが書いたほうがはやそうだったからベンチとってやったよ! わたしが書いたほうは先頭からのマッチ部分までのみの取り出しなのに対し、303君のは先頭から 末尾までのパターンを確認する処理と括弧内にマッチした部分への置換というまわりくどい処理を していることから考えて、どう見てもわたしが書いたほうが速いし、それに付け加えて複数OSにも 対応しているということだ。 Benchmark: timing 10000 iterations of 303, 316... 303: 0 wallclock secs ( 0.66 usr + 0.00 sys = 0.66 CPU) 316: 1 wallclock secs ( 0.38 usr + 0.00 sys = 0.38 CPU)
>>308 perlのスカラーはintじゃないという罠を踏まえたうえで、
とりあえず概算でいいなら、こんなんで。
$i = 1;
print $i*=10,"\n" while $i ne Inf;
春本番の時は寂しかったけど、今になってたくさん出てきましたね。 とかく月曜日は閑散となりがちなので、明日も気合いを入れてがんがろう!
326 :
nobodyさん :02/04/08 01:20 ID:6SHXOq5L
>>323 たまに
Benchmark: timing 10000 iterations of 303, 316...
303: 0 wallclock secs ( 0.66 usr + 0.00 sys = 0.66 CPU)
316: 1 wallclock secs ( 0.38 usr + 0.00 sys = 0.38 CPU)
って見るんだけど、これってどうやって取るの?
方法知りたいです。
>>314 あ、文字列の最後が改行じゃなかった場合にマッチしなかったのね。これでいいかな?
($str) = $str =~ /^((?:.*(?:\n|\z)){0,$limit})/;
Perl神の
>>316 氏にもプレゼント。
($str) = $str =~ /^((?:[^\x0D\x0A]*(?:\x0D\x0A|[\x0D\x0A]|\z)){0,$limit})/;
Benchmark: timing 100000 iterations of 316, ore...
316: 3 wallclock secs ( 3.96 usr + 0.00 sys = 3.96 CPU) @ 25278.06/s (n=100000)
ore: 2 wallclock secs ( 1.65 usr + 0.00 sys = 1.65 CPU) @ 60532.69/s (n=100000)
>326
ストップウォッチ
330 :
:02/04/08 15:23 ID:cplvHQS4
>>328 ありがとうございます。
もう正規表現わけわからんので正規表現だけの本購入しました。
PERLリファレンス系だと細かく書いてないので
正規表現奥が深いですね
>>330 人が書いた正規表現は、まさに「魔法の呪文」みたいなもんで、
使ってみれば確かに効果は出るんだけど、それがどういう理屈で
そうなるのか解読するのは骨が折れるんだよね。
332 :
nobodyさん :02/04/08 21:40 ID:dY0mSfL0
やっと、カーネル・サンダースの呪いの期限が切れた。 阪神は本来、神のチーム。 これくらいのゲームができて当たり前。 1938年に開幕7連勝した時に阪神は優勝した。 今年も9割方優勝する。 阪神電鉄の株価もウナギ昇りだ。 優勝すれば経済効果も核爆弾級だろう。 現在、阪神ファンの脳内モルヒネ分泌量は最高だ。 仕事にも遊びにもハリが出る。 阪神ファンが勝ち味に飢えていたが故に。 カーネル・サンダースは俺たち阪神ファンに17年間の試練を与えた。 今はそのことに感謝したい。 昼食時には是非ともKFCを利用したいと思っている。
333 :
nobodyさん :02/04/08 23:00 ID:9Gr66QZ9
tu-ka,板違い。 Web製作板でスタイルシートのスレ探しに行け。
>>334 335
うるせーんだよヴォケが!!!!!!!!!!
>>336 >うるせーんだよヴォケが!!!!!!!!!!
この感嘆符の多さが、いい怒りの表現だね、
338 :
306 :02/04/09 06:08 ID:???
>307 すいません。えっと、 < < < > > < を < < < > > < みたいに<>←→<>の相互変換をしたいのです。。
339 :
nobodyさん :02/04/09 06:49 ID:N8wWg1s7
すいません、リストの取り出しについてなんですが @list = (A,B,C,D,E,F); ってのがあって EとFだけ取り出して別の配列に入れたい 場合ってのはどうやってやればいいんでしょうか
>338 これでどう? %conv= ('<' => '<', '>' => '>', '<' => '<', '>' => '>'); $_= '< < < > > <'; s/<|>|&(?:l|g)t;/$conv{$&}/g; print;
>>340 やさしいお兄さん優しいですね。端から見ていてうっとりしました。
今度デートして下さい。やっぱいいです。
>339 これでどう? @list= qw(A B C D E F); push(@new, splice(@list, $#list- 1, 2));
>340 やっぱりすなおに以下のようにしたほうが速いかな? s/<|>|&[lg]t;/$conv{$&}/g;
344 :
339 :02/04/09 07:21 ID:???
>340 $&は危険 s/([<>]|&[lg]t;)/$conv{$1}/g; >342 負数のほうが簡潔 push @new, splice(@list, -2, 2);
気になって、一応ベンチとってみました。意外な結果が... できるだけループ数を多くして3回とってみたらいずれも340のほうが速かったです。 つまり、[lg] よりも (?:l|g) のほうが速いという結果でした。 Benchmark: timing 100000 iterations of 340, 343... 340: 12 wallclock secs (11.21 usr + 0.00 sys = 11.21 CPU) 343: 12 wallclock secs (11.43 usr + 0.00 sys = 11.43 CPU)
[lg]と(?:l|g)の比較なんかよりも、$&を使う罪に気付けよ。 まだ間に合うから、修行しなさい。
>348 でも以外でしょ?
スライスじゃダメなのか。 @new = @list[ 4, 5 ];
元の配列を 変えたい/変えたくない で決まるね
すみません。いきなりの質問です。 Perlソースのテンプレートが欲しいのです。 ラマとラクダがまだ家に来てくれないので欲しいのです。 第一引数でフォルダを指定して、 そのフォルダ下にある全ファイルを読み込んで処理する テンプレが欲しいのです。 ファイル処理をする関数名はdo_file で、そこは私が作るんで。テンプレおねがいします。
353 :
☆ :02/04/09 10:51 ID:???
バナーをクリックした時に$datatext(テキストファイル)の中の そのバナーのカウントが1プラスされるようにしたいんですが、うまくいきません。 以下の構文でどこか間違っている個所があれば教えて頂きたいのですが、、 ちなみにQUERY_STRINGと$read_data[1]はリンク先URLです。 #バナーをクリックした時 if($ENV{'QUERY_STRING'} eq "$read_data[1]") { open (DATA,$datatext); @data = undef; @read_data =(); @data = <DATA>; close DATA; for($i = 0;$data[$i];$i++) { @read_data = split(/\t/,$data[$i]); $read_data[4]++; #4列目はリンクカウント数 $lastdata[$i] = "$read_data[0]"."\t"."$read_data[1]"."\t"."$read_data[2]"."\n"; } open(WRITE,">$datatext"); print WRITE "@lastdata"; close WRITE; print "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0;URL=$ENV{'QUERY_STRING'}\">\n"; exit; }
>352 キミは最初に質問と言っておきながら、いつの間にかクレクレ君に大変身ですか?
355 :
☆ :02/04/09 10:56 ID:???
353です。 あ、すいません。構文間違えました #4列目はリンクカウント数とかかれている部分、 $read_data[2]++; で、2列目の間違いです。
356 :
352 :02/04/09 11:07 ID:???
>>354 <>とか、きっとそういうのを使うとは思うんですが…
どうかおねがいします。教えてください。
ペコリm(_ _)m o0(いつのまにか…というより、もとよりそのつもりでしたが何か?
)
>355 これでどうでしょうか?動作確認はしておりませんが... if ( $ENV{'QUERY_STRING'} eq $read_data[1] ){ open(DATA, $datatext); while (<DATA>){ @read_data = split(/\t/); $read_data[2]++; push(@lastdata, join("\t", @read_data)."\n"); } close DATA; open(WRITE,">$datatext"); print WRITE @lastdata; close WRITE; print qq(<META HTTP-EQUIV="Refresh" CONTENT="0;URL=$ENV{'QUERY_STRING'}">\n); exit; }
>356 最初に質問というのなら、具体的にどこの記述でいきづまっているのか、 具体的なコードを明示すべきだろ。 それもしないでおきながら調子のいいこと言って自分を正当化すんじゃねーよ!
359 :
☆ :02/04/09 11:30 ID:???
>>357 どうもです。
でもそれで実行して再読み込みすると、データテキストに無限に数字が書き込まれてるんですが・・
それ以前の部分の処理が悪いんでしょうか?
>>353 ifの判定文の@read_dataとifブロック中の@read_dataはバッティングしていないのか?
>352=>356 >いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。 > >1:自分はこう言う事がしたい。 >2:それでこんな風にやってみたが・・・ >3:それだとこんなエラーが出て上手く行かなかった。 > >1と3が無いと誰も答えられないよ、良い回答は良い質問から。 >一緒に勉強しましょう。
>359 そうですよね。処理の内容を考えずに書いてしまいました。チョット データファイル内容がよくわからないのですが、リンク先URLはあらかじめ データファイルに設定されているということならば以下のような感じかなと。 open(DATA, $datatext); while (<DATA>){ chop; @read_data= split("\t"); $read_data++ if $ENV{'QUERY_STRING'} eq $read_data[1]; push(@last_data, @read_data); } close(DATA); open(WRITE,">$datatext"); for ( @last_data ){ print WRITE $_,"\n"; } close WRITE; print qq(<META HTTP-EQUIV="Refresh" CONTENT="0;URL=$ENV{'QUERY_STRING'}">\n); exit;
>362 まちがってしまいました。ごめっ。 $read_data[2]++ if $ENV{'QUERY_STRING'} eq $read_data[1];
>362 またまちがってた。頭冷やしてきまーす。 push(@last_data, join("\t", @read_data));
365 :
☆ :02/04/09 12:42 ID:???
>>364 ありがとうございます。
アクセス数の書き込みはうまく行きました。
でも今度はCGIにアクセスすると自動的に何度も何度もリロードされます。
>365 より速く処理をするために以下の書き方もアリだと思います。 常に以下のメタタグを返す処理ならば何度もリロードになるでしょう。 最終的にどうしたいの? open(DATA, $datatext); while (<DATA>){ @read_data= split("\t"); $ENV{'QUERY_STRING'} eq $read_data[1] ? ($read_data[2]++,push(@last_data, join("\t", @read_data)."\n")) : push(@last_data, $_); } close(DATA); open(WRITE,">$datatext"); print WRITE @last_data; close WRITE; print qq(<META HTTP-EQUIV="Refresh" CONTENT="0;URL=$ENV{'QUERY_STRING'}">\n); exit;
367 :
☆ :02/04/09 12:58 ID:???
>>366 最終的にはバナーの一覧を表示させたいんです。
>366 $ENV{'QUERY_STRING'} にこのCGI自身がしていされていれば、 何度もこれを繰り返すの間違いでした。
369 :
☆ :02/04/09 13:09 ID:???
バナーは
<a href="banner.cgi?
http://www.yahoo.co.jp/ "><IMG SRC="banner.gif"></a>
のようになっていて、
バナーをクリックした時にこのサブルーチンが動くようにしたいんです。
すなわちbanner.cgiに直接アクセスした時には
バナー一覧だけが表示される、という形です。
370 :
nobodyさん :02/04/09 13:11 ID:B5CaElBB
open (SET,"+>$PATH"); my @setting = <SET> と書いたんですが、@settingには何も入ってないみたいなんです。 open (SET,"$PATH"); my @setting = <SET> close (SET); open (SET,">$PATH"); ならできるんですが、、、
>368 以下のようにして、メタタグをコメントにしてみては? URL一覧かバナー画像かどちらか必要ないほうもコメントで。 while (<DATA>){ @read_data= split("\t"); print qq(<A href="$read_data[1]">$read_data[1]</A>\n); # URL一覧なら print qq(<img src="$read_data[0]"><BR clear=all>\n); # バナー画像なら $ENV{'QUERY_STRING'} eq $read_data[1] ? ($read_data[2]++,push(@last_data, join("\t", @read_data)."\n")) : push(@last_data, $_); }
>369 @read_data= split("\t");の直後に以下を書くということかな? print qq(<a href="banner.cgi?$read_data[1]"><IMG SRC="$read_data[0]" border=0></a><BR>\n);
373 :
☆ :02/04/09 13:23 ID:???
>>372 いやいやいや、バナー表示のHTMLは別の所にあるんです。
このクリック数カウントの部分だけをsub countというサブルーチンで
呼び出したいんです。
クリック数を得るためリンクが「banner.cgi?〜」となっているんですが、
バナーをクリックするとbanner.cgiに飛んでしまう。
だからbanner.cgi?〜
↑ここの値、すなわち$ENV{'QUERY_STRING'}が存在する時、
このサブルーチン&count; を起動させたいわけです。
>370 +> だと、いきなりファイルが空になってしまいます。 open (SET,"+<$PATH"); my @setting= <SET>;
>373
なんとなくわかってきました。以前の処理を以下のブロックに入れるということかな?
勿論、メタタグは無しということで。スクリプトの最初のほうがいいかな。
if ( $ENV{'QUERY_STRING'}=~ /
http:/ ){
exit;
}
376 :
nobodyさん :02/04/09 13:34 ID:B5CaElBB
>>374 どうもです。
読み込みはできましたが、書き込みが追加になってしまうのを上書きにしたいんですけど、
読み込み&上書きは一度にできないんでしょうか?
>375
チョットまずいかな、いかのようにしたほうがよかった
if ( $ENV{'QUERY_STRING'}=~ /^
http:\/\// ){
exit;
}
>376 seek(SET, 0, 0); # これではじめのほうに巻き戻すナリ!
>378 truncate(SET, 0); # これも必要だね。
380 :
nobodyさん :02/04/09 13:42 ID:B5CaElBB
381 :
☆ :02/04/09 13:44 ID:???
>>377 ありがとうございます!!
これでとりあえずバナーをクリックした時にURLにジャンプするようになりました。
しかしbanner.cgi自体をリロードすると、
datatextの中のデータとかバナーの数がどんどん増えていってしまいます。
>381 たしか、サブルーチンにして呼び出すということなので、 @last_data をさいしょのほうで初期化するのをわすれていました。 1どの処理でこのルーチンを複数回呼び出すとどんどん増えていきますね。 @last_data= (); または @last_data= -1; または @last_data= undef; または undef @last_data;
>382 うそを書いてしまいました。 @last_data= (); または $#last_data= -1; または undef @last_data;
385 :
☆ :02/04/09 15:05 ID:???
>>383 3つバナーがあったとすると、1つクリックした時に
全ての数値が上がるんですが・・
386 :
邪魔 :02/04/09 15:17 ID:???
全部解決してもらおうと思うなよ。 自分で努力しろよ。
>385 うーん。いまひとつ全体がぼやけてしまったので。できればどこかにテキスト ファイルとしてアップしてURLを書いてもらえれば、全体の動きがつかめやすい のですが、そのCGIではバナーの表示やカウントアップ、そのほかどんな処理を しているのか?? チョット混乱してきました。
388 :
306 :02/04/09 15:34 ID:???
>340,345 うまくできました。ありがとう御座いました。
389 :
☆ :02/04/09 16:19 ID:???
386=389 ジサクジエン カコワルイ
391 :
:02/04/09 17:41 ID:h5pnnRRd
ども パッケージについてお聞きします いままでサブルーチンしかつかったことがないのですが パッケージのほうがよい処理がありましてパッケージにサブルーチンを移そうとしてるんです でもそのまんまコピペだとうまく動いてくれません。 本とか見ても最初の宣言の仕方だけで やってはいけないこととかでてなくて困っています。 特にお聞きしたいのはパッケージ中でjcode.plなどを呼び出していいのか 変数の定義をパッケージ内でしていいのか、ファイル読み込んでいいのかなどです。 もしかしてそういうことするためにパッケージってあるんじゃないのかもしれませんが 教えてください。 本には package PacTest ; use Exporter ; @P_TEST::ISA = ('Exporter'); @P_TEST::EXPORT = ('subtest'); sub subtest(){} 1; ここまでしかでてなくて・・・
>パッケージ中でjcode.plなどを呼び出していいのか ok >変数の定義をパッケージ内でしていいのか ok >ファイル読み込んでいいのか ok 他に何か。
393 :
:02/04/09 18:10 ID:h5pnnRRd
>>392 ありがとうございます。
う〜む、そしたらなぜコピペで動いてくれないんだろう・・・
パッケージを使うときのタブーみたいなものありますか?
P_TEST::って何? @ISA = ('Exporter'); @EXPORT = ('subtest');
395 :
:02/04/09 19:17 ID:h5pnnRRd
@PacTest::ISAのまちがいです。 ここに書くためにかきなおしたんですがそのまちがいです
>>395 タブーがないのがPerlって気もするが…
「コピペで動いてくれない」ってコピペしたコードがuse PacTest;でエラーが出るって事か?
ところで話はずれるが@ISAとかにパッケージ名書くより
use vars qw(@ISA @EXPORT);
@ISA = qw(Exporter);
@EXPORT = qw(subtest);
の方が一般的な気がする。ourとuse baseでもいいけど。
397 :
:02/04/09 20:00 ID:h5pnnRRd
>>396 本にでてたやり方なんですけどね
秀和だめですね
398 :
396 :02/04/09 21:03 ID:???
スタイルの違いだからそこはまあいいんだけど、 それより俺が聞きたいのはどうやったらエラーが出たのかという状況説明なんだが
399 :
:02/04/09 21:31 ID:h5pnnRRd
ローカルでやれよ
>>399 やれやれ・・・
「秀和だめですね」かよ・・・
402 :
:02/04/09 22:42 ID:h5pnnRRd
>>401 技術評論社は(゚∀゚)イイ
ソフトバンクは(´・ω・`)ショボーン
403 :
貴様ら教えて下さい :02/04/09 22:45 ID:sR6b9WNM
仕事でPerl使ってメールマガジン配信することになったんですが、 最終的には数万人規模のものにするらしいんです。(無理くせーけど。 普通にsendmailで送るのは無理っぽいですし、 どうしていいものかサッパリわかりません。 皆様ならどうやるでしょう?
406 :
貴様ら教えて下さい :02/04/10 00:47 ID:RNZ++qE3
マジ?sendmail数千回呼び出すの?
あ、それともBccで数万件指定するのか?
いけるのか?
どうなのか?
>>405 お、使えるかも。
ちょっと見てみる。
Net::SMTP
408 :
nobodyさん :02/04/11 02:06 ID:8LiumuzI
ちょっと教えてください。 単純にファイルから数字を読んで、1足して書き込むようなプログラム (アクセスカウンタみたいな感じ)を作りたいのですがうまくいきません。 どうやら読み書き両用オープンがうまくいってないみたいなんです。 open(FILE,"+> data.txt"); $x=<FILE>; print $x; exit; 試しに上のようにすると、なぜか何も標準出力に出力されません。 open(FILE,"data.txt"); $x=<FILE>; print $x; exit; これだと、ちゃんとファイルの中身が標準出力に出力されます。 どうしてなんでしょう? 環境は WINDOWS XP + Active Perl です。 よろしくお願いしますm(_ _)m
>>408 >open(FILE,"+> data.txt");
この瞬間、データが消えていることに気付いてください。
>408 この前もまったく同じ質問があったが、過去レスとか見てる? +> だといきなりファイルが空になるゾ! +< で読み込んで seek(FILE, 0, 0); で巻き戻して truncate(FILE, 0); でファイルを空にした上で書きこむ
412 :
nobodyさん :02/04/11 08:32 ID:8LiumuzI
激しく既出にも関わらず、ご親切に教えてくださってありがとうございます☆ 本などで「+>」は「読み書き両用オープン」って説明されていますが 実際には「書き」しかできないってことですか?(オープンした瞬間データ消えるから)
>>412 んなこたぁない。ちゃんと読める。
「書いた直後に読みたい」場合に使える。
414 :
nobodyさん :02/04/11 11:06 ID:QakPtgEu
412ではないが、 実際には「書き」しかできないってことですか? これ前から気になってた。 413の答えで納得した。 でも「書いた直後に読みたい」なんて思った事ないな、、
>>415 だから実際に'+>'や'+>>'がつかわれることはほとんどない。
すいません、ファイルハンドルをハッシュに入れたまま
使用したいのですが、STDIN が思うように動きません。
STDOUT は
>>171 ,
>>181 ,
>>184 を参考にしてできたのですが、
<> を使う時はルールが違うのですかね。
わかる方教えて頂けませんでしょうか?
#!/usr/local/bin/perl -w
my %hash = ( in => \*STDIN, out => \*STDOUT );
while (< {$hash{in}} >) { # <= ココが STDIN の置き換えにならない
print {$hash{out}} $_;
}
exit 1;
出力結果は GLOB(0x8103460) のみです。
>>417 グローバルなものをなぜハッシュに入れるのかは敢えて聞かないとして・・・
$tmp = $hash{in};
<$tmp>
とスカラーに格納すれば大丈夫みたい。
ハッシュや配列の形ではだめだった。
$tmpは間接ファイルハンドルと解釈するが、$hash{in}はファイル名グロブに
解釈される仕様のようです。試しに次のような使い方は正常に機能した。
$t{a} = "*.txt";
@txt = <$t{a}>;
ということで、スカラー変数を使いましょう。
419 :
417 :02/04/12 02:54 ID:???
>>418 わざわざ試して頂いて有難う御座います。
実はサブルーチンへ値を渡すのにハッシュを使っていたのですよ。
個人的に STDIN と STDOUT は同じルールで使って行きたい
ですので、実際にはこういう感じで使いましょうかねぇ。
#!/usr/local/bin/perl -w
package main;
exit &main;
sub main {
$ARGV[0] && open(STDIN, $ARGV[0]);
$ARGV[1] && open(STDOUT, "> $ARGV[1]");
return &func(in=>\*STDIN, out=>\*STDOUT);
}
sub func {
my %init = (in => \*STDIN, out => \*STDOUT, @_);
my ($in, $out) = ($init{in}, $init{out}); # <= ●
while (<$in>) { print $out $_; }
return 1;
}
貰った値の正当性を、関数側でチェックしてから使うルールなら
そんなに無駄な処理でもない・・・あ、でも結局ファイルハンドルか。
exit(1)か・・・ハァ・・・
421 :
417 :02/04/12 03:47 ID:???
>>420 unix の ping コマンドとかは正常終了が 0 ですよね。
他のも一律で 0 に決まってるモンなんでしょうか。
web で 1 を見かけたので真似しだしたんですよ。最近。
スレ違いすみません。
真似すんなよ。 #define EXIT_SUCCESS 0 #define EXIT_FAILURE 1
423 :
417 :02/04/12 04:44 ID:???
>>422 ありがとうございます。そうか、ライブラリのヘッダか (汗
まだ、解らない事があっても、それを調べる方法さえ解らない
程度の知識ですので、つい真似というか見習ってしまうのですよ。
反省。ちなみに ping の戻り値も知ったのは jman からですしねぇ。
>423 perldocの使い方・読み方覚えるがキチ。
425 :
417 :02/04/12 06:30 ID:???
最近この板でバカな奴みるとDream★じゃないかと疑ってしまう。
おい、<$h{in}>で困ってたやつ。下のコード試してみろ: readline($h{in)
429 :
nobodyさん :02/04/12 15:57 ID:XFr3wilJ
うるせんだよヴぉけ!!!!!!!!!!!!!!!!!!!!!!!
430 :
417 :02/04/12 19:35 ID:???
>>428 ホントだ、できましたよ。有難う御座います。
しかし perldoc では説明でましたが、web 上に散乱するサイトの
日本語マニュアルには全然載っていない関数みたいですね。なんでだろ。
すいません、こういう事ってどうすればよいのでしょうか。。 ダウンロード用のCGIを作っているのですが、ログ形式が 日付<>ファイル名<>総DL数<>LZHのDL数<>ZIPのDL数 となっているログのファイル名が同じの総DL数、LZHのDL数、ZIPのDL数 をそれぞれ足したものを表示されるにはどうすればよいのでしょうか。 総DL数だけならハッシュ使えば出来ると思うのですが。 具体的には 20020423<>test<>5<>2<>3 20020423<>test1<>5<>2<>3 20020424<>test<>6<>3<>3 20020424<>test1<>8<>5<>3 を test,11,5,6 test1,13,7,6 みたいな感じで出力したいのですが。
>>431 my %count;
while (<DATA>) {
chomp;
my ($date,$name,$all,$lzh,$zip) = split /<>/;
$count{$name}{all} += $all;
$count{$name}{lzh} += $lzh;
$count{$name}{zip} += $zip;
}
foreach (keys %count) {
print join ',',$_,$count{$_}{all},$count{$_}{lzh},$count{$_}{zip},"\n"
}
<>;
__END__
20020423<>test<>5<>2<>3
20020423<>test1<>5<>2<>3
20020424<>test<>6<>3<>3
20020424<>test1<>8<>5<>3
訂正 },"\n" ↓ } ."\n"
434 :
nobodyさん :02/04/12 21:46 ID:4zjuzdoC
数千行あるログファイルから 特定の位置だけを表示したい場合のスマートな方法ってどんなですか? 自分の場合は 単純に1行目から順に読み出して行って、指定行になったらループを抜ける もしくは、配列に全部読み込んでから指定範囲だけ取り出す ってやりかたしてるんですが、いまいちよろしくないです。 ファイルサイズによりますがカナリきついです。 また新着ログはファイルの先頭行に挿入したいのですが、この場合は いったん全部読み込んで、先頭行にログ追加して、全行書き出す するしかないのでしょか、、、、
新着ログだけ書き込んだファイルに 他のファイルを追記で書き込んでリネーム
436 :
nobodyさん :02/04/12 22:31 ID:4zjuzdoC
>>435 ほうほう、その方法でためしてみます
やはり最終的には全行を書き出す事になるんですね、がくり。
挿入とかできたら便利なのになぁとか思った
>>436 それは太古の昔から無理。
なので、ログは先頭に追加せず、おけつに追加していき、
表示する時とかに逆順にしたほうが吉。
もしくは、先頭に追加できるファイルシステムを考案しる。
といいつつDB_File::DB_RECNOはそこそこ使える。(たまにコケるが)
教えていただきたいことがあります。 以下の2次元配列において、列部分($data[行][列])の最大インデックスを求める 効率的な方法を何卒、ご教授ください。よろしくお願いします。 一応、以下のようにループで回して比較する方法を考えましたがもっとスマートな やりかたがありそうな気がしていますがどうしても思いつきません。 $MAX= $#{$data[$_]}> $MAX ? $#{$data[$_]} : $MAX for ($[ .. $#data);
>432 ありがとうごさいました。うまくできました。
441 :
ゲーム房 :02/04/13 10:19 ID:jvfE2/Zt
iswebにはFFA設置してもいいんですよね? でも、「ゲームCGIは禁止」って書いてるんですが・・・。
>441 誤爆だろうけどスレ違い。
>>441 ゲームCGIが禁止ならFFAも禁止に決まってるだろゴルァ!
445 :
nobodyさん :02/04/13 13:07 ID:VMPYMAwG
アメリカのCGIの日本語化に挑戦しています。 が、できません。 1週間、ずーといろいろやったのですが、 どうしても、うまく行きません。 cgi-lib.plというのが悪いような気がするのですが…。 これって、定番のライブラリですが、 うまく日本語化する方法はないのでしょうか?
446 :
nobodyさん :02/04/13 13:28 ID:sQBkSIs9
>>444 うるせえんだよボケが!!!!!!!!!!!
447 :
nobodyさん :02/04/13 13:28 ID:sQBkSIs9
>>445 perlで日本語化ちゅーと、メッセージを日本語に置き換えたいってこと?
449 :
nobodyさん :02/04/13 13:35 ID:PKxqXxUL
教えてください。 ボタンをひとつだけ押して、複数のスクリプトにデータを渡すことは可能ですか? ひとつはメールでもらって、その中のmailアドレスから自動でメルマガに登録させたい。 検索しようにもどんな語句で調べたらよいかわかりません。一応いろいろ検索したんですけど。
450 :
nobodyさん :02/04/13 14:06 ID:VMPYMAwG
>>448 フォームで入力された日本語が、
ちゃんと表示されないので、
それをちゃんと表示されるようにしたい。
jcode.plをreqireして、
&jcode…でコンバートしようとしても
うまくいかないのですが。
452 :
nobodyさん :02/04/13 16:24 ID:x6G/BIRo
正規表現で置換後の文字列を他の変数に入れる簡単な方法ありますか? $moto = 'a1b2c3d4e5'; $kekka = $moto ; $kekka =~ s/[\d]//g ; これ面倒なので、 $kekka = $motoの[\d]を削除した結果 みたいに1行で書けると嬉しいんですが。
>452 ($kekka)= $moto=~ /\d/;
>>449 ひとつはメールでもらって、ってのはわかるけど、
もう一つはどんなスクリプトを起動したいの?
455 :
nobodyさん :02/04/13 17:44 ID:PKxqXxUL
>>454 メルマガ登録スクリプトにアドレスを渡したいんです。
どうせならアドレス一回入力で、「登録しますか」の是非をチェックしてもらい、そのアドレスを渡せたらいいなと思って。
引数にアドレスも付けてをつけてポップウィンドウを開くってのもありかなあ?
でもjsにたよらないとならなそうだし。
>>449 厨的な考え方だけどLocation使ってGETでデータ渡すとか。
457 :
454 :02/04/13 17:55 ID:???
>>455 メールを受け取ったら、自動でスクリプトを起動するってのはだめ?
メールを受ける鯖の/etc/aliasesに
melmaga-touroku: "| /path/to/script/regist.pl"
って書いて newaliases ってコマンド実行しておけば、
メールが来た時に、スクリプト起動できるので、
漏れいつもそうやってる。
>>457 パイプを禁止しているサーバもあるから軽めに注意。
>>452 ($kekka = $moto) =~ s/foo/bar/g;
>うるせえんだよボケが!!!!!!!!!!! これ、はやってんだ、漏れも使お、 へへへ、まんこ
461 :
nobodyさん :02/04/14 10:17 ID:V1/8ijC1
こんにちは、 さっそく質問なのですが、 スカラーに入れた(入った)文字列をスカラー名にする方法ってあるのでしょうか? $a = "test"; $b = "value"; として $test = "value"; というようなことなのですが よろしくお願いいたします。
>>461 せめてこのスレくらい最初から読んでくれ。
463 :
nobodyさん :02/04/14 10:40 ID:V1/8ijC1
ひぃーごめんなさい。
464 :
461 :02/04/14 10:42 ID:V1/8ijC1
でも本当に助かりました。 ありがとうございました。
465 :
TOM ◆98SA9XcM :02/04/14 12:23 ID:Gksq2mQe
open(LOAD,"mona.dat"); @mona1 = <LOAD>; close(LOAD); foreach (@mona1) { ($yakin,$hiroyuki) = split(/<>/); if($yakin eq $FORM{'yakin'}) { (?) next; } } え〜と、(?)の部分で、現在処理中の配列を、削除したいわけです。 ようは、配列をforeachで読んでいって、$yakinと、 送信されてきた(フォームから投稿されてきた) $FORM{'yakin'}が一致した場合、現在処理している配列を削除したいわけです。 (?)の部分に、なんと入れたらいいのか、よろしくです
>>465 undef $array{$yakin};
とか?
foreach (@mona1) { ($yakin,$hiroyuki) = split(/<>/); if($yakin eq $FORM{'yakin'}) { $_ = ''; next; } } @mona1 = grep /\S/, @mona1; でいいかな? なんか無駄が多そうだが。
468 :
TOM ◆98SA9XcM :02/04/14 12:53 ID:Gksq2mQe
thank!っす。 これで、海へ行けるぞー!
配列を二つ受け取り、その各要素ごとの和を格納した配列を返す サブルーチンはどのように書けばいいのでしょうか?
470 :
初心者 :02/04/14 12:58 ID:GNKyG6Nl
こちとら超初心者です。質問させてください。 Apacheっていうソフトを入れて、Webサーバっつーの立てて そこでPerlをデバッグしてみてるんですが、簡単なSSIのアクセスカウンタが動いてくれません。 HTMLで「あなたは人目のお客様です」とだけ表示されます。 エラーログには何も書いてないし、DOSプロンプトでチェックしてもSyntax OKって出るだけっす。 カウンタの数字を保存するファイルのパーミッションの問題なのかな〜とか思ってるのですが、 Apache上のファイルのパーミッションを変える方法がわからんです。 昨日はじめたばっかしなので質問の意味がさっぱりかもしれませんが、よろしくです。
>>470 カウンタを格納するファイルのパーミッションを、nobodyさんでも
書き込めるように汁。
473 :
470 :02/04/14 13:32 ID:S6NECtrZ
>>472 c:\public_htmlにファイルを置いてやっているのですが、
いろいろ調べてみてもFTP転送時のパーミッション変更方法しか載ってなかったです。
格納ファイルのプロパティでアーカイブやら読み取り専用やら(Win98SE)、いろいろ変えてみたんですが
結果は変わらず。自分のPCなのにFTP転送とか出来るんでしょうか?
説明下手でごめんなさい。
474 :
TOM ◆98SA9XcM :02/04/14 13:45 ID:Gt4aB1lk
>>469 こんなかんじ
#!/usr/bin/perl -w
use strict;
our($a, $b);
sub mapup (& \@ \@)
#(code_ref $code, array_ref $_a, array_ref $_b)
{
my($code, $_a, $_b) = @_;
my @retval;
my $max_index = (@$_a < @$_b) ? @$_a : @$_b;
for (my $i = 0; $i < $max_index; $i++) {
local($a, $b) = ($_a->[$i], $_b->[$i]);
push @retval, $code->();
}
return @retval;
}
my @a = (1, 2, 3);
my @b = (0, 8, 7);
my @c = qw[ G C A T ];
my @d = qw[ C G T A ];
my @sum = mapup { $a + $b } @a, @b; # (1, 10, 10)
my @pro = mapup { $a * $b } @a, @b; # (0, 16, 21)
my @bigger = mapup { $a > $b ? $a : $b } @a, @b; # (1, 8, 7)
my @concat = mapup { $a . "-" . $b } @c, @d; # (G-C,C-G,A-T,T-A)
476 :
nobodyさん :02/04/14 13:53 ID:IPbdNQdj
imgboard v1.22 R6ってIP隠せないんですか? 丸見えなんですが。
>>476 > いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
>
> 1:自分はこう言う事がしたい。
> 2:それでこんな風にやってみたが・・・
> 3:それだとこんなエラーが出て上手く行かなかった。
>
> 1と3が無いと誰も答えられないよ、良い回答は良い質問から。
> 一緒に勉強しましょう。
479 :
472 :02/04/14 14:11 ID:???
>>473 あぁぁ、Windowsならパーミッションは関係なさそう。
SSIの場合は、
1.apacheの設定ファイル(httpd.conf)でSSI(Server-parsed HTML)が
有効になってるか確認。
AddType text/html .shtml
AddHandler server-parsed .shtml
こんなかんじ。
2.SSIを使うhtmlファイルの拡張子が .shtml になってるか確認。
あとは、
>>474 に従うのもありかと。
480 :
470 :02/04/14 14:13 ID:S6NECtrZ
>>474 ありがとうございました。本を買って入ってたのがApacheだったので、それを使ってました。
さっそくAnHTTPdを入れて勉強してみようと思います。
481 :
470 :02/04/14 14:15 ID:7rjAl4Ry
>>479 丁寧にありがとうございます!
shtmlにはしてあるんですが、httpd.confをも一回チェックしてきます。
みなさん、親切で泣けてきました。(今回2Ch初書きこみ)
482 :
470 :02/04/14 17:23 ID:???
結局いろいろやってみた結果、ソースのflockという関数をコメントアウトしたら カウンタが動作しました。HTTPdソフトのせいじゃなかったみたいです。 いろいろありがとうございました。
483 :
nobodyさん :02/04/14 18:32 ID:lEj2Ud3E
$line =~ s/田中雅夫/田中さん/g; $line =~ s/椎名林檎/林 檎/g; $line =~ s/志村けん/バカ殿/g; 上のようなのをハッシュにしてまとめて処理させることできませんか? %xx = ( "田中雅夫", "田中さん", "椎名林檎", "林 檎" ,"志村けん", "バカ殿"); $nkeys = keys %xx; $value = values %xx; $line =~ s/$nkeys/$value/g; 自分ではこんな感じかな?とか思ったんですが…無理でした。 ご教授お願いします。。既出だったらすいません(^^;
>483 $nkeysと$valueをprintしてみてなにが入ってるか見てみるとダメな理由はわかると思う。 どうするのが正しいのか俺にはわからないけど。 $line =~ s/(.+)/$xx{"$_"}/g;だとkeysの一致がされないしなぁ・・・。
$hoge = join "|", keys %xx; $line =~ s/($hoge)/$xx{$1}/g; こんなんでいいか?
>475 _gunzipタンひさしぶり〜
487 :
469 :02/04/14 19:40 ID:???
>>475 スクリプトが意味不明です。初心者ですか?
>488 ネタじゃないと思うよ。 理解できない負け惜しみ厨だとおもう。 そういう漏れも全然理解できてないので逝ってくる...
490 :
469 :02/04/14 20:04 ID:???
まっぷっぷ意味不明age
open(IN, "datafile.txt"); while($line = <IN>) { chomp($line); %xx = ( "田中雅夫", "田中さん", "椎名林檎", "林 檎" ,"志村けん", "バカ殿"); #$nkeys = keys %xx; #$value = values %xx; #$line =~ s/$nkeys/$value/g; $hoge = join "|", keys %xx; $line =~ s/($hoge)/$xx{$1}/g; print <<EOL; $line EOL } これで試してみたんですが無理でした(^^;
>491 俺のところではそれでいけるけど、datafileの中身はどうなってるの? あとPerlのバージョンは?
493 :
TOM ◆98SA9XcM :02/04/14 20:36 ID:CWCI/F1H
もーいっこ質問、お願いです。 変数$nanashiに、 あ<>い<>う<>え<>お<> と入ってるのですが、 この$nanashiを、 @giko = ("あ","い","う","え","お"); のように、配列に出来ますか?
@giko = split(/<>/, $nanashi);
495 :
TOM ◆98SA9XcM :02/04/14 20:44 ID:CWCI/F1H
ほ〜 ありがとん
とりあえず
>>469 は帰って良いよ。
プロトタイプでも勉強してきな。
datafileは <table> <tr> <td>田中雅夫</td> <td>田中さん</td> </tr> <tr> <td>椎名林檎</td> <td>林 檎</td> </tr> <tr> <td>志村けん</td> <td>バカ殿</td> </tr> </table> 環境はWINにactiveperl522e入れてます。 flockとか使うとエラー出たりするし、 そういう違いなんかなぁ…
498 :
469 :02/04/14 20:50 ID:???
496 = gunzip = 初心者 決定!ばーか
(´-`).。oO(ちょっと遅れた春だねぇ…)
>497 やっぱり俺のところでは普通に変換される。 Win2kにanhttpd+ActivePerl-5.6.0.616。 flockはWin95やWin98じゃ使えないんじゃなかったっけ?
522でも行くとは思うが・・・・・ 630あたり入れない?
502 :
497 :02/04/14 21:02 ID:???
>500 はい、そうみたいです。 他の違いとかは全く分からない状態で… 勉強不足ですいません(^^; ActivePerlもけっこう前に入れたものだし、 新しいのinstallしてみよっかな。 とりあえず、ありがとうございました〜
あー、データファイルとperlスクリプトで文字コードが違うとかやってない? 両方EUCで書くこと。
504 :
497 :02/04/14 21:08 ID:???
あーほんとんにごめん(^^; きちんと実行しました!! 申し訳ない…鬱だ。。 ほんとにありがとう…4日くらいハマってました(汁
505 :
497 :02/04/14 21:17 ID:???
原因はなぜか分からないんですが、 ハッシュの中に "太宰啓介", "太 宰" を入れてて、 これを抜いたら動きました。。
啓の2バイト目が“[”だから動かない。 $hoge = "\Q". join("\E|\Q", keys %xx) . "\E";
$hoge = join "|", map{ quotemeta } keys %fuga;
の方が見栄えは良いな。
いや、
>>506 の方が多分効率良いけど。
508 :
469 :02/04/14 22:26 ID:???
469>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>475
509 :
506 :02/04/14 22:34 ID:???
スマソ
>>507 の方法じゃないと駄目だ。
"\Q" . "[\E" と "\Q[\E"は等価じゃない。
510 :
rain :02/04/14 22:37 ID:sltXes8x
えっと、プログラム板では板違いという事でこっち来ました。 PERLのCGIを実行させようとすると何故かダウンロードを始めてしまいます。 どうなってるのでしょう?
>510 99% Content-typeの問題。
512 :
rain :02/04/14 22:46 ID:sltXes8x
print "Content-type: text/plain\n\n"; に何か問題があるのでしょうか?
513 :
497 :02/04/14 22:49 ID:???
>>507 おー!動いた!ありがと〜
>啓の2バイト目が“[”だから動かない。
ふむふむ…もうついていけないレベルです(^^;
$hoge = "\Q". join("\E|\Q", keys %xx) . "\E";
$hoge = join "|", map{ quotemeta } keys %fuga;
これがどんなことしてるのか、
じっくり勉強してみます。
>512 1:\nを\r\nにしてみる。 2:それをスクリプトの3行目に置いてみる。
515 :
rain :02/04/14 23:00 ID:sltXes8x
駄目みたいです・・・。 やっぱり変わらずダウンロードを開始します・・・。 何が原因なんでしょう?
>515 環境を明記した上でスクリプトの拡張子を.txtにしてアプして。
517 :
rain :02/04/14 23:06 ID:sltXes8x
アプるほど大きくないんで乗せますね。 環境はapacheの1.3です。他に必要な環境情報ありますか? ------ #!D:/program/perl/bin/perl print "Content-type: text/plain\r\n\n"; print "Hello Perl !"; ------
>>515 httpdがApacheなら、httpd.confに
AddHandler cgi-script .cgi .pl
って書いてあるかどうかかくに〜ん。
519 :
rain :02/04/14 23:15 ID:sltXes8x
書いてありますねぇ・・・。
>517 \r\n\nとはどういう了見だ?
521 :
rain :02/04/14 23:23 ID:sltXes8x
あれ?こうしろって事じゃなかったんですか?はっ!もしかしてとんでもない勘違い!?
ふつー、 \n\n だね。
523 :
rain :02/04/14 23:26 ID:sltXes8x
あ、でもそれでもやったんですよ。 はぁ・・今日は諦めようかな・・・。
\r\n\r\nだろ、やるなら。 それと、Apacheって適当に入れただけだとExecCGIが効いてなかったような。
525 :
rain :02/04/14 23:30 ID:sltXes8x
そうなんですか?まだ勉強不足で・・・。 それと、ExecCGIもちゃんと修正しました。
>>524 そなの?
それってDOSだとCRCRLFCRCRLFにならない?
もしかしてActivePerlなら、ならないのか・・・
「ソースがダウンロードされる」のか「実行結果がダウンロードされる」のか。
528 :
rain :02/04/14 23:34 ID:sltXes8x
.cgiがダウンロードされてしまいます。
>>525 ちなみに、ダウンロードされるファイルの中身は、どんなんなの?
Hello Perl!
だけが書いてあるのなら、httpdはOKで、Contenet-type があやしい。
cgiスクリプトがまるまる入っているのなら、httpdの設定があやしい。
530 :
nobodyさん :02/04/14 23:35 ID:rKBAHNDF
つまらん質問でスマソ 123456byteをメガ単位にするときって 何で割るの?1000?・・・
2**10 * 2**10で割りなされ。
> perl -e "print 1024^2" 1026 >
535 :
nobodyさん :02/04/14 23:47 ID:rKBAHNDF
つまり、1Mbyteは1024^2 = 1048576byteという事なのか! スマソ。
>>510 じぶんもずっとそれ。完璧に諦めている。
UA側の問題と理解しているが、理由に納得はしていない。
>521 >514を見て「片方だけ変えればいい」という発想できるのは驚き。 その発想力は俺の予想を越えてた。
>517 UnixかWinか。 あと>529の問いにも答えれ。
539 :
rain :02/04/15 00:09 ID:8o4u1f33
ほーい。WINで、CGIがダウンロードされます。
541 :
536 :02/04/15 00:17 ID:???
自分直ってた。原因がよく分からんままだ。
【もう】【だめぽ】
>539 悪いがここはPerlの初心者スレなんだ。 人生の初心者は幼稚園にでも行ってくれ。
545 :
469 :02/04/15 00:32 ID:???
答えろ。厨房ばっかりだなここは。
もちろん来年高校受験ですが、何か?
厨房ばっかりなのがわかったのにまだ聞くの? それって自分が厨房以下って言ってるのと同じだと思うんだがなぁ。 次回は是非もう少し頭のよさそうな煽りをお願いいたします。
548 :
469 :02/04/15 01:06 ID:???
こたえろおろろろろろろろろろろろろろろろろろろろろろろろろr
どうか教えてください。 2次元配列で、列の最大インデックス値を求める効率的な方法がわかりません。 自分でなんとか書いてみて、もっとよい方法がありそうな気がしていますが どうしても思いつきません。よろしくお願いします。 ;# $data[行][列] の例 for ($[ .. $#data){ $#{$data[$_]}> $MAX_COL and $MAX_COL= $#{$data[$_]}; }
>>549 それで十分使えるやろ。Perlってことを忘れるなよ。
数値計算等の効率を重視するならCとかにしろって。
>>548 >>476 の何が不満なんだ?
#our($a, $b);
てして、最後のほうに
print join(",",@sum),"\n";
とか書けば、動くと思うけど。
552 :
551 :02/04/15 01:39 ID:???
553 :
549 :02/04/15 01:53 ID:???
>550 了解しまっ!
554 :
469 :02/04/15 02:03 ID:???
475みたいなコード書く奴は死んでください。理解できません。
>554 理解したいなら他人に聞いてもしょうがない。 自分で勉強するしか。 >2-4のサイトの中には親切に色々教えてくれる所もあるだろう。 理解するよりも利用したいなら>475のソースをそのまま使えばいい。
556 :
549 :02/04/15 02:13 ID:???
>554 確かに、プロトタイプや複数処理に対応しているところは一見、知ってそうだが 効率の悪い書き方が目立つね。でも、これを理解できないの? どこがわからないの?
558 :
549 :02/04/15 02:30 ID:???
>557 ループカウンタ $i なんか使う必要ないし、return も遅くなるし、 ループ内で local 宣言を逐一行なってるようなとこかな?
559 :
557 :02/04/15 04:08 ID:???
>>558 なるへそ。localはループの外に出して、returnは省略するとして、
$iを使わないようにするには、どうしよう。うーん。
foreach( 0 .. $max_index - 1 ) とかかかな?
561 :
ほほ :02/04/15 09:08 ID:lbZrq7VB
>560 それなら$iを使った方がいい。 その手法だと一度$max_index個の配列を一時的に作ることになってメモリを喰う。
564 :
ほほ :02/04/15 09:52 ID:7Ngfgl5F
>561さん そちらの方が適切でしたか、誘導ありがとうございます。
今どきreturnが遅いとかforeach(1 .. 10000)が巨大なリストを作られるとか言ってるやつ。
書き込む前にベンチマークはしたのかと問いたい。問い詰めたい。小一時間問い詰めたい。
お前等、そんなものは今や時代遅れとちゃうんかと。
俺が見たところ、
>>475 での問題点は
・ループ内でlocalを使っている
・$a$bはパッケージ変数なので違うパッケージの時動かない
くらいなもんだ。
perlで常駐ソフトは作れないんですか?
>>567 Win, UNIX等マルチタスクOSなら作れる。 DOSのTSRは無理。
569 :
nobodyさん :02/04/15 13:48 ID:waGQdYYq
>>456 >>457 遅レスですがありがとうございました。参考になりました。
とりあえずjsのwindow.open()で?にて渡すことにしました。
Locationの使い方がサッパリ。
>>568 回答どうも。
よく分からん単語があったので調べます。
571 :
nobodyさん :02/04/15 14:51 ID:WmWR88F9
問い合わせフォームを使っているのですが、以下の内容で <FORM name="form1" action="form.cgi" method="POST" enctype="text/plain"> <INPUT type="hidden" name="c_copy" value="on" checked> <INPUT type="hidden" name="no_check" value="off"> <INPUT type="hidden" name="subject" value="問い合わせ"> <TABLE border=0 > <TR> <TD>*お名前:</TD> <TD><INPUT name="お名前" size="16" type="text"></TD> </TR> <TR> <TD>*e-mail:</TD> <TD><INPUT name="email" size="40" type="text"></TD> </TR> </TABLE> <INPUT type="submit" value=" 送信 " style="HEIGHT: 24px; WIDTH: 70px"> <INPUT name=reset1 type=reset value="クリア" style="HEIGHT: 24px; WIDTH: 70px"> </></FORM> 全ての項目に入力した上で送信ボタンを押すと、次の画面で −−−−−−−−−−−−−−−−−−−−− 内容確認 項目 内容 c_copy on no_check メールアドレスを入力しないと送信できません −−−−−−−−−−−−−−−−−−−−− とメッセージが表示されてしまいます。 何が悪いのか教えていただけませんでしょうか。 よろしくお願いします。
>571 どこがPerlのコーディングの話なんだ? Perlのコーディングの話をするスレだから、Perlのコードを出してくれ。
つーか、まずHTMLの勉強してこい。 そのHTMLソースもグチャグチャじゃないか。
>>571 form.cgiの中身がおかしいと思います。
575 :
nobodyさん :02/04/15 15:18 ID:WmWR88F9
>572&573さん、ご指摘ありがとうございます。 前任者が作成したソースをメンテナンスする事になり、苦労している次第です。 抜粋してPerlのコードを載せます。 #■内容確認 print "Content-type: text/html\n\n"; print "<html><head><title>$title</title></head>\n"; print "$body\n"; print "<h1>内容確認</h1>\n"; print "<form method=\"post\" action=\"form.cgi\">\n"; print "<blockquote><table border=1 cellpadding=3 cellspacing=3>\n"; print "<tr><td bgcolor=\"#ffcccc\"><b><font size=+1>項目</font></b></td><td bgcolor=\"#ffcccc\"><b><font size=+1>内容</font></b></td></tr>\n"; print "<tr><td></td><td></td></tr>\n"; $count = @DATA_NS; foreach (0..$count-1) { print "<input type=hidden name=\"$DATA_NS[($_)]\" value=\"$DATA_VS[($_)]\">\n"; print "<tr><td bgcolor=\"#ffeedd\">$DATA_NS[($_)] <br></td>"; if ($DATA_VS[($_)] =~ /\n/) { print "<td bgcolor=\"#ffffff\"><pre>$DATA_VS[($_)]</pre></td></tr>\n"; } else { print "<td bgcolor=\"#ffffff\">$DATA_VS[($_)]</td></tr>\n"; } print "</td></tr>\n"; } print "</table></blockquote><p>\n";
576 :
nobodyさん :02/04/15 15:18 ID:WmWR88F9
if ($lct ne "") { print "<input type=hidden name=\"location\" value=\"$lct\">\n"; } print "<input type=hidden name=\"mailto\" value=\"$mailto\">\n"; print "<input type=hidden name=\"no_check\" value=\"on\">\n"; print "<input type=hidden name=\"ref_page\" value=\"$ref\">\n"; if ($receipt eq "on") { print "<input type=hidden name=\"receipt\" value=\"on\">\n"; } if ($cc eq "on") { print "<input type=hidden name=\"c_copy\" value=\"on\">\n"; } if ($ref_url ne "") { print "<input type=hidden name=\"ref_url\" value=\"$ref_url\">\n"; } if ($ref_name ne "") { print "<input type=hidden name=\"ref_name\" value=\"$ref_name\">\n"; } if ($subject ne "") { print "<input type=hidden name=\"subject\" value=\"$subject\">\n"; } if ($password ne "") { print "<input type=hidden name=\"password\" value=\"$password\">\n"; } if ($email eq '' || !($email =~ /(.*)\@(.*)\.(.*)/)) { print "<font size=+2><b>メールアドレスを入力しないと送信できません</b></font><p>\n"; } else { print "<input type=submit value=\" 送信(submit) \"><p>\n"; } print "</form><p><hr>\n"; 以上、よろしくお願いします。
>575-576
なんともまぁ酷いコードだな・・・。
ともあれ>571のエラーが出るならメールアドレスが入力されてないんだよ。
[email protected] って入力して試してみ。
@と.が入ってないとエラーを吐くだけだから。
つーか、前任者には聞けないのか?
>>571 よ悪いことはいわん。上司に「僕には無理です」と泣き付け。
579 :
nobodyさん :02/04/15 16:07 ID:WmWR88F9
>574さん、私もcgiとHTMLソースがうまくかみ合っていないのが原因では?と
考えています。
>577さん、それがメールアドレスを入力しているのに関わらず、エラーが
出ているから困っています。
ちなみに「hoge」「hoge@hage」「
[email protected] 」の何れを入力しても
同一のエラーが出ます。
>578さん、泣き付ける上司がいればいいのですが、あいにくおりません。
580 :
nobodyさん :02/04/15 16:31 ID:YGeSanjU
だって現に無理じゃん、しょうがないよ。
>>578 はいいこと言ったよ?
581 :
577 :02/04/15 16:55 ID:???
>579 俺も>580に同意。 前任者がPerlもHTMLもロクに理解していない。 後任のあんたも全然理解していない。 そのスクリプトがエラーになる原因が「思い当たりすぎて」どうしようもない。 そしてアンタ自身にそれを試験しその経過を正確に報告するスキルが無い。 そんな状態でここから指示を出してたら1ヶ月経っても2ヶ月経っても無理だ。 はっきり言って、ケントでもレスキューでも行って多少でもまともなCGIを 拾ってきた方がよっぽどいいと思うぞ。 はっきり言う。 無理だ。 正直、俺から見ると、そのスクリプトを修正するより、自分で1から 作った方が楽にすら思える。
582 :
580 :02/04/15 17:22 ID:YGeSanjU
とりあえず、やめろとは言わん。 どっかで似たもののCGI探して、 そのCGIとにらめっこして、原因を追究すべし。 2ちゃん寝るの上級者が答えてくれればいいってもんだけど、正直、わかり難い。
583 :
469 :02/04/15 17:34 ID:???
>>556 もっといいのを書いてください!
それだけ知った口を叩けるのだから!!!
475もいい迷惑だな(w
585 :
nobodyさん :02/04/15 18:05 ID:8YI2JjdJ
こんにちは、 これってどうしてちゃんとコード変換しないのでしょう? ヒアがいけないような気もするのですが... みなさんはメールのフォーマットってどうやっていますか? $hoge = "こんにちは"; &jcode'convert(*hoge,'sjis'); $mail_tex = <<HERE; フォームの内容は$hogeです。 フォームの内容は$hogeです。 フォームの内容は$hogeです。 HERE &jcode'convert(*mail_tex,'jis'); print $mail_tex; ちなみにこれはEUCで書いたソースだとします。 sjis変換はログ保存用だと思ってください。 どうかよろしくお願いします。
586 :
469 :02/04/15 18:25 ID:???
糞ばっかりだなここは 意味不明コード厨房に知ったか厨房かよ ぼけ
587 :
585 :02/04/15 18:56 ID:8YI2JjdJ
本当、意味不明ですいません。 自分でもなにをしてるのか分からなくなってきています。 ちなみに、sjisの所をeucにしても一緒でした。 そろそろ動けばいいって作り方から卒業したいです。(泣
>>587 &jcode'convert(*hoge,'sjis');
を消せば、いんでないかと。
>>575 デバッグの基本はプリントだ!
$emailをチェックしている行の直前に、
print "[$email]<BR>";
って入れて、確認しよう。
とりあえず関係なさそうだが &jcode'convert(*hoge, 'sjis') これを &jcode::convert(\$hoge, 'sjis'); にしておけ。
591 :
nobodyさん :02/04/15 20:38 ID:YGeSanjU
とりあえず意味なさそうだが &jcode'convert(*hoge, 'sjis') これを exit; にしておけ。
>>584 禿同。
_gunzipのコードは参考になるところが多いから常駐してホスィんだけど、
エライのに目をつけられたもんだ(w
なんかあんまり技術的な質問じゃないんですが 掲示板とチャットの違いってスクリプト的に どのあたりで線引きされるもんですかね? これとこれみたいな事ができればチャット、もしくは掲示板みたいな 定義があれば教えてください。
594 :
nobodyさん :02/04/15 22:52 ID:G09favcm
>580さん、そうですか。無理ですか・・・。(残念です) >582さん、これを作った人とはもう連絡が取れない状況で自営業をしている 友人が困って私に調べて欲しいと依頼が来た次第です。(なので、仕事とは 全く無関係です) 指摘される通り、私にはあまり知識はありません。 別のCGIを拾ってきて、一から作ってみたいと思います。 >582さん、他の似たようなCGIと比較して原因を調査してみます。 ありがとうございました!!
あてはまればチャット ・リロードの回数が多い(リアルタイムで返事がくる) ・コメント欄がおそらく一行 ・「入室」する
596 :
593 :02/04/15 23:08 ID:???
>>595 39
やっぱログインがポイントだよね。
>>594 デバッグプリントも試してみてくれーーー
粘着低脳ぶりが.htaccessの偉い人荒らしてた奴そっくりだな。
>595 自動リロードがあったら間違いなくチャットだな。 >593 一部勘違いされがちだが、無料鯖で禁止されるのは「チャット」じゃなくて 「チャットのような負荷の高いCGI」だからな。 「HTML吐出しなどで負荷の少ないチャット」よりも「リロードを繰り返されるBBS」 の方がよっぽど厄介だ。 そういう意図で聞いたんじゃなかったらすまない。
600 :
600 :02/04/15 23:47 ID:???
601 :
nobodyさん :02/04/16 00:04 ID:3Tlg2ssN
>601 LWPを使えば結構簡単にできるが、Web上に置くのは勧められないな。
>>599 チャットだとHTML吐き出しだと負荷少ないのか?
>603 チャットに限らず、HTML保存させればCGIの呼び出し回数が減るから、相対的に負荷は減る。
チャットはHTML保存で付加は減らないと思われ…。 むしろ、共用メモリを使って全てメモリ上でやるのが吉と見た。
>>603 ,
>>605 確かにチャットはHTMLでやってもあんまり意味無いよね。
その他にもHTML吐き出しだと運営上デメリットが多すぎる。
書き出し方によるかな。 保存したログ読んでそっから別のHTMLに書きだすって真似やってたら HTML吐き出しの方がきついんじゃない。 チャットってリロード以前にその性質上ROMより 書き込むことのほうが多いから。
>>607 リロード時の話じゃないけれど。HTML化すると投稿時の動作が
「データをPOST → レスポンス取得」から
「データをPOST → 302 Found取得 → ブラウザがhtmlをリクエスト → 結果取得」
になるので、投稿時の体感速度は確実に遅くなる。低速回線だと少し厳しい。
それにHTML化は参加者:ROMの比がROMに偏っていない限り余り意味が無いと思われ。
610 :
604 :02/04/16 01:17 ID:???
>609 それは確かにその通りだ。 ごもっとも。 オートリロード先をHTMLにしておけば多少は軽減になるかな? メタタグとかでnocacheにしておいて。
611 :
607 :02/04/16 01:56 ID:???
>>609 たしかに、チャットなら、書き込み:ROMの比は書き込みのほうが高いか。
612 :
nobodyさん :02/04/16 03:38 ID:Z11bRvgC
以下にソースを貼り付けました。これは
http://dream.lib.net/room/ で配布されて
いるLightChat のログを表示するためのCGIの一部です。
#管理人の私がコソーリROMるため(w
1. foreach $chatlog (@chatlog) {
2. ($name,$dmy1,$dmy2,$mail,$actime,$cont,$ip1,$ip2) = split(/<>/,$chatlog);
3. if ($cont =~/<b>\[/i){
4. $cont =~ s/<b>\[/<>/g;
5. $cont =~ s/]<\/b>/<>/g;
6. ($dmy,$personal,$cont2) = split(/<>/,$cont);
7. $name = "$personal";
8. }
9. print "<a href=\"$mail\">$name</a>> $cont2($actime)<br>\n";
10. # print "<a href=\"$mail\">$name</a>> $cont($actime)<br>\n";
11. print "<hr>\n";
12. }
これで、チャットのログを表示しようと思ったのですが、9行目の $cont2 に他の行
の内容が入ってしまうようです。 なお、3〜8行目を削除して10行目を生かすと
この障害は無くなります。
なにとぞ、よろしくお願いしますm(_ _)m
書き込んだ人<>2<><>
[email protected] <>日時<><b>[個人 書き込んだ人>受取人]</b> 内緒の話<>書いた人のIP<>受け手のIP<>
ログの形式は上記の通りです。
>>612 ログ中に <b>[ っつー文字列が無い行では3行目から8行目までの処理がすっ飛ばされて
前に読み込んであった$cont2が表示されているだけじゃないの?
と適当に答えてみるテスト。
ワラタ・・・
618 :
612 :02/04/16 13:59 ID:???
>612 あ、本当だ(汗) こんな単純なことに気が付かない私が愚かでした。 鬱だ、書き直そう… >614-615サンクスコ
619 :
1622 :02/04/16 16:52 ID:Q1JSTWAi
sample
<form action="
http://127.0.0.1/cgi-bin/input/input2.cgi " method="GET">
<input type="text" name="name">
<input type="submit" value="実行">
<input type="reset" value="クリア">
</form>
上記のHTMLフォームからデータを入力して、受け取ったデータをファイルに書きこむ処理をしたいのですがうまくいきません。
$query = $ENV{ 'QUERY_STRING' };
open IN, "$send";
@all = <IN>;
close IN;
@all = $query;
open OUT,">$send";
foreach (@all){
print OUT $_;
}
close OUT;
これではエラーが出ます。教えてください。
>>619 なんていうエラーがでるんだね?
とりあえず、ぱっと見、あやしそうなところとして、
@all = $query;
を
push(@all,$query);
に直そう。
621 :
1622 :02/04/16 17:58 ID:UyNwZUnG
500Internal Server Errorとでます。push(@all,$query); に変更しましたが同じでした。 $query = $ENV{ 'QUERY_STRING' }; open IN, "$send"; @all = <IN>; close IN; push(@all,$query); open OUT,">$send"; foreach (@all){ print OUT $_; } close OUT; この方法以外でもいいので、教えてください。
622 :
:02/04/16 18:03 ID:???
テキストファイルに記述したHEX数値から、 バイナリファイルを作成したいのですが上手くいきません。 動作イメージとしては テキストで「31323334」とあったら、これを変換し、バイナリダンプしたときに、 「31323334」となるようにしたいのです(この例だとテキスト表示すると1234になります)。 試行錯誤しながら、以下のように作成したのですが、 テキストに「0A」があった場合に、その部分が「0D0A」になってしまうようです。 改行コードだと思うのですが、どのように対処すればいいでしょうか? while ($_ =<F1>) { $_ =~ s/ //g; #スペース削除 chop; #行末改行削除 $bin = pack("H*", $_); print OUTPUT $bin; } 使用しているのは、jperlのWIN32版です。 jperl5.005_03-990403
623 :
620 :02/04/16 18:12 ID:???
>>621 エラーログにはなんて出てる?
Premature end of script headers
とか出てない?
>>622 うーんと、Win32版でバイナリオープンてどーやんだっけ。
binmode(OUTPUT);
か。
625 :
469 :02/04/16 18:26 ID:???
626 :
:02/04/16 18:28 ID:???
>624 おかげさまで解決しました。 ありがとうございました。
627 :
nobodyさん :02/04/16 19:27 ID:r+rfWQLJ
WinXP上でActivePerl 5.6を使っています。 スクリプトのあるフォルダのパスを得るにはどうすればいいのでしょうか。 open OUT, '>./hoge'; などというようにすると、現在の作業フォルダにhogeが作成されて、 必ずしもスクリプトのあるフォルダには作成されません。 そこで、必ずスクリプトのあるフォルダにhogeが作成されるように、 スクリプトのあるフォルダのパスを得たいんです。
628 :
627 :02/04/16 19:36 ID:???
ごめんなさい、$0ってのがありました。 この変数の値を元に取り出すことにします。
629 :
hanamogera ◆kkkKkkko :02/04/16 19:44 ID:QVh0tmfS
@hage = split(/<>/, "hoge<>hogehoge<>"); としたとき、@hageの要素数は2ですか? つまり、$#hageは1になるんですか?
>>629 やってみりゃわかると思うけど2だ。perlfuncのsplitを読むべし。
splitはデフォルトで末尾の空文字列を省略する。
3にしたい場合は
@hage = split /<>/, "hoge<>hogehoge<>", -1;
ちなみに、最近このスレによく出てくる <> をデリミタにしたCGIって何なのかな?
>632 タグの<>を$amp;lt;>に変換すると絶対に文中に<>が出てくることはないから、 CGIでは使い勝手ががいい。
>633 タイプミススマソ。 &と$を打ち間違える漏れって一体…(鬱
635 :
627 :02/04/16 21:39 ID:???
ActivePerl v5.6.1 build 631をWinXPで動かしています。 map使ってて気づいたんですが、 map { "$_", } (0..5); を実行すると syntax error at D:\プログ~1\hoge.pl line 1, near "} (" Execution of D:\プログ~1\hoge.pl aborted due to compilation errors. と言われます。 map { "$_" } (0..5); map { $_, } (0..5); では問題ありません。 syntax errorになる理由は何なんでしょうか。
>>634 心配するな俺もよくある。
それより\とyを打ち間違う漏れって一体・・・(鬱
map { "$_", } (0..5); が文法的に間違ってるからエラーになるんだってば。 なんで最後に , を付けたいの?
638 :
632 :02/04/16 22:34 ID:???
>>633 なるほど。特定のCGIがそうしてるとか、どっかのページで
推奨してるのかと思ったよん。
639 :
635 :02/04/16 22:38 ID:???
map { "$_", } (0..5);のどの辺りが間違ってるんでしょうか。
map { $_, } (0..5);ではエラーでないのに、
$_を"$_"に書き換えるとエラーになるのが納得いかないんです。
最後に,をつけてるのは
use Getopt::Long;
our %config = (base_uri => '
http://www.2ch.net ');
GetOptions map { "$_:s" => \$config{$_} } keys %config;
print $config{base_uri};
みたいに使いたいからです。
今はmap { "$_:s" => ...をmap { $_ . ":s" => ...にして逃げています。
640 :
635 :02/04/16 22:42 ID:???
もちろんmap { "$_", } (0..5);の,を=>に書き換え(639であげた例のように)ても、 同じようにエラーになります。
641 :
637 :02/04/16 22:59 ID:???
あれ、ほんとだ。よく読んでなくてごめん。 とりあえず動くだけなら GetOptions map { ("$_:s" => \$config{$_}) } keys %config; にしたら動いたけど・・・・・・演算順序の関係かな?
map { +"$_", }(0..5); perldoc -f map
643 :
635 :02/04/16 23:15 ID:???
>>641 さん
いえ、読みにくい文書ですみませんでした。
perldocによると、
%hash = map { "\L$_", 1 } @array # perl guesses EXPR. wrong
%hash = map { +"\L$_", 1 } @array # perl guesses BLOCK. right
%hash = map { ("\L$_", 1) } @array # this also works
とのことです。
>>641 さんの解決策は三番目にある方法ですね。
有り難うございました。
>>642 さん、有り難うございました。
perldoc読むの忘れてました。申し訳ないです。
644 :
1622 :02/04/17 14:48 ID:v8Tp5NVP
500Internal Server Errorとでます。push(@all,$query); に変更しましたが同じでした。 $query = $ENV{ 'QUERY_STRING' }; open IN, "$send"; @all = <IN>; close IN; push(@all,$query); open OUT,">$send"; foreach (@all){ print OUT $_; } close OUT; この方法以外でもいいので、教えてください。 エラーログにPremature end of script headersと出ています。どうしたらいいのですか?
645 :
nobodyさん :02/04/17 15:29 ID:79RKjLpb
モジュールのBenchmarkについて解説しているサイトありませんか? googleでいろいろ調べましたけどありませんでした。
>>645 perldoc Benchmarkで十分だろ。
>>644 >どうしたらいいのですか?
回線切って首吊って(以下略
>648 なんで回線切ってなんだ? 自サーバでCGIやってるかもわからんだろうに。オマエは頭の弱いヤツだろ!
650 :
645 :02/04/17 16:48 ID:PRS3jaLV
英語でわけ分かりません。 Jperlを入れるとドキュメントも日本語になるんでしょうか?
651 :
645 :02/04/17 16:51 ID:???
ageてるし。 鬱だ詩嚢。
>>644 スクリプト1行目のperlパスが間違ってるとか
653 :
645 :02/04/17 17:09 ID:PRS3jaLV
>>650 自己レス
よく見てみたらあまりにも馬鹿な質問してる。
逝ってくる。
>>649 >>622 でjperlのWIN32版とあるから間違い無く自サーバだろう。 そんな事も分からない馬鹿は首吊って死ね。
655 :
hanamogera ◆kkkKkkko :02/04/17 17:23 ID:7mM3jrq9
>>649 へぇ。回線繋がってないのに2chに繋がるんだすげーナ。
カスは黙ってろよ。
Dream 黒星=469
658 :
632 :02/04/17 18:59 ID:???
>>644 1.まず、そのスクリプトをCGI経由じゃなく、単体で起動したときに、
syntax error等くだらないエラーがでて無いか確認。
2.スクリプト自体がOKなら、スクリプトの最初に
print "Content-type: text/html\n\n";
と入れる。
これでOK。
Premature end of script headers
てーのは、必要なヘッダ(Content-type)が書き込まれてないってエラー。
>656 2chで書きこんだマシンとCGIやってるマシンが同一である根拠はまだ どこにもしめされてないだろ! 決め付けでしか考えられないオマエは もう、ダメポだな!
>656 2chに書き込んだマシンとCGIやってるマシンが同一だという根拠は? 決め付けで判断するようじゃ、オマエはもうダメポだな! はなしにならんな、このうすらハゲがっ!
なにおぅ!!! やるかっ このっっっ!!!!
おまえなんかしんでしまえばいい!
>>660 誰も鯖がどうとか何もいってねぇだろ。馬鹿丸出し。
無理して日本語使うなよボケが。
Dream 黒星 = 469 は無視の方向で。
オマエはもうダメポだな! っつうフレーズもおれの中ではヒットだ(w
667 :
ADSLにしたんですが :02/04/17 21:44 ID:BaxakOe1
FTP接続に不具合が。。でまして。 [症状] ログインはできてファイル受信状態でフリーズまたはタイムアウト。。 なんでしょうかね?
>>667 スレ違いだが、クライアントをPASVモードに設定にしる。
669 :
469 :02/04/17 21:53 ID:???
>>669 −操作説明−
_
_|\\_ 。 【 死 】
|\_ _\→ (
>>669 )_ | ̄ ̄ ̄|
\| \ \__| 三 (*゜▽゜) | |
 ̄\| ̄| 三 (∪∪) | |
 ̄ ∪∪ | |
※右キー以外は使用しません。
671 :
469 :02/04/17 22:00 ID:???
672 :
ADSLにしたんですが逝きました! :02/04/17 22:04 ID:BaxakOe1
>665 なんで 469 のような無知な野郎といっしょにするのか、オマエの推論の のまずさは後々ダメポに匹敵するほどのミスをやらかしそうで心配なのは わたしだけならいいのだが...
674 :
nobodyさん :02/04/18 12:08 ID:CQh2avKk
すいません。hashで $dic{"apple"} = "りんご"; としたときに、valueである"りんご"からkey"apple"を検索するには どうすればいいんでしょか?
>>674 key全部なめる。同一valueが複数あるかも。
>>674 foreach $keys (keys(%dic)){
if($dic{$keys} eq 'りんご'){ print "ハッケソ $keys\n"; last; }
}
とか。
>>675 あ、いけね。複数の場合もあるのね。lastは無しってことで。
状況次第だが %rh = reverse %h; ってのも使える。
679 :
674 :02/04/18 17:19 ID:pC0blCKC
あ、結局そういう一発な関数は無いのですね。
>>678 の reverse が一番近いかも。どうもでした。
680 :
nobodyさん :02/04/18 19:13 ID:BWtEryOi
>680 正規表現を使う。
>>680 Perlメモにきちんとしたやつがあるよ。
>>3 のリンク先くらい巡回してから質問しる。
>>685 正規表現の[tr]って使いにくいと思った初心者でした。
>>686 tr///のどこがどう使いにくいのかなあと思ったおれでした。
>>685 きみのカキコは冗長でスマートじゃないな。
正規表現の[tr]って使いにくいと思った。
で十分伝わる。
688 :
685 :02/04/19 01:12 ID:???
>>687 そうですね。
[tr]が使いににくい==初心者
ですもんねw
689 :
nobodyさん :02/04/19 01:19 ID:qPOTdo2b
$a = "a(.*?)a"; $d = "aaabbb"; $d =~ s/$a/b/; とやったら、 s/a\(\.\*\)a/b/; か、 s/a(.*?)a/b/; のどちらになるんでしょうか?
[tr]が使いにくいというのは、使い方がわからないのではなくて、 使い方はわかるがもっとよりよい記述法なりがあるということだろ。 そのよりよい(使い勝手のよい)のを教えてくれよ。
691 :
nobodyさん :02/04/19 01:47 ID:Z7cLdJRB
>>690 うるさいっ!ばか!
sでいいじゃないかっ!
>>690 「使いにくい」って言った本人が「[tr]が使いににくい==初心者」
つってんのに何妄想してんだ、この馬鹿は。
>692 688が、先のことを言った本人だという根拠は? わたしには685および688のIDが???である以上、両者が同一人物である という根拠のない決め付けはできないのだが、オマエは決め付けで判断する ダメポにも匹敵するダメダメプログラマーだろ!
黒 星 先 生 ダ メ ポ っ て な ん で す か ?
>695 金融機関コードの違いさえも認識できずにろくなテストデータも作れずに 金融不安を巻き起こすナンチャッテプログラマー集団のことだ!
金融機関コードって何ですか?
>>696 (゚Д゚)ハァ?
おれは 黒 星 先 生 に訊いたんだよ。なんでお前が答えるんだよ。
おれはいつかお前がDream 黒星と 黒 星 先 生 とを妄想気味に同一人物と取り違えて
ダメポにも匹敵する根拠の無い思い上がりをやらかすんじゃないかと心配だったのだが
まさかこうも簡単に事が運ぶとは・・・(w
思ったとおりの展開になったので笑わせてもらったよ。 寂しいんだね。こっちは見てて寒かったよ。今夜はあったまって寝るよ。
(´-`).。oO(引っ掛けるほうも引っ掛かるほうもダメポだなあ…)
WebProg板の名無しをDream☆にしよう。
>>700 >思ったとおりの展開
思ったとおりの展開に引っかかる馬鹿が居るんだね。
Dream 黒星=469
706 :
687 :02/04/19 08:09 ID:???
>>685 >>688 ごめん。
きみのカキコは冗長ではなく、適切、いや言葉が足りないくらいだった。
>>690 には
「正規表現の[tr]って使いにくいと思った初心者でした。 」
という表現でさえ、初心者であることが伝わらなかったのだから・・・
>>689 展開はまず"..."で囲った時に一回起こる => "a(.*?)a"
これは普通の文字列展開ね。だからみてわかるように何も展開
するところがないのでそのまんま。
次に正規表現として使用した時に おこる => s/$a/b/;
この場合$aを展開してるわけで、$aの中身は関係ない。すなわち s/a(.*?)a/b/;となる。
というわけでもしマッチしたらそのマッチした文字列が$1に入る事になる。
>>706 はじめのほうから読ませてもらったけど、論理的にはキミの負けだと思う。
朝早くから...よほど悔しかったんだね。
ダメポって、ツボにはまりそー。
正規表現の[tr] → 't'又は'r'を表す文字クラス
>>709 うむ。正規表現とtr///は全く関係ないから、それが正解だろう。
tr演算子は正規表現を使えない・・・
パスワード付きサイトの内容(検索結果のページ)を取得したいと思っています。 ログインページはGETもPOSTも使えるため、 ・・・index.asp?name=AAA&pass=BBB でログインできました。 検索結果のページもGETもPOSTも使えるため、 一度ログインしていれば、・・・result.asp?word=XXXXX を開けばページ内容が保存されます。 これをperlでやろうとしました。 use LWP::Simple $x = get("・・・index.asp?name=AAA&pass=BBB"); print $x; $y = get("・・・result.asp?word=XXXXX"); print $y; ところがこれだと、$xはログイン後のページが正しく表示されるのですが、 $yは、ログインしていないとみなされて、ログインページに飛ばされた内容が 表示されてしまいます。 解決策のヒントをよろしくお願いします。
713 :
nobodyさん :02/04/19 13:12 ID:1w9waxQZ
>>712 何故一度ログインすればその後はName/Pass無しでもログインしているとみなされるのか。
それを考えろ。
まぁHTTP-Headersでも見てみなさいってこった。
715 :
712 :02/04/19 14:56 ID:???
>>714 レスありがとうございます。
HTTP-Headersですか・・・探してみます。
716 :
712 :02/04/19 18:51 ID:???
>>714 すみません・・・・
HTTP-Headers自体がよくわかりませんでした・・・
もう1つヒントが欲しいです。お願いします。
718 :
712 :02/04/19 19:52 ID:???
719 :
nobodyさん :02/04/19 20:05 ID:sPCEXxH7
前回は、適切な助言をありがとうございました。 さて、今回はCGI RESCUEにてダウンロードした「マルチパート対応 フォームメール」(form2mail.cgi)を使っています。 その中の機能でファイルをアップロードしてメールに添付する事が できるのですが、画像ファイルを添付した所、メールで受信して 画像を見ると画像が一部壊れてしまっています。(上部は大丈夫 だけど、下部にいくにつれて緑色になってたりノイズが入ったり して化けてしまいます) どうしたら、画像が壊れずに送れるのでしょうか?
>>718 HTTPのヘッダが関係あるかどうかは分からんよ。
>何故一度ログインすればその後はName/Pass無しでもログインしているとみなされるのか。
察するに、これがCookieで実現されている可能性があると俺は考えたわけだ。
これが正解なら、取得したヘッダを調べりゃ分かる。
721 :
689 :02/04/19 20:41 ID:???
>>707 よく分からない漏れって逝ってよしでしょうか。
722 :
689 :02/04/19 20:44 ID:???
724 :
712 :02/04/20 00:02 ID:???
>>720 なるほど。
たしかにヘッダ(これがヘッダなのかな、と自分が想像するもの)
の一番下の行に、クッキーな文字列がありました。
数字の羅列ではありましたが。
>>724 その数字の羅列を解析する必要はない。少なくとも、自ら解析コードを書く必要は無い。
要は自作のUserAgentが「Cookieを理解するUserAgentが行って然るべき返信」をすればいいのだから。
726 :
nobodyさん :02/04/20 01:42 ID:gkcEnfWM
print "今日からperlの勉強をはじめました。よろしく";
delete $_1017201229{'726:nobodyさん'};
>>708 あう?オレの負け?
オレが負けたレスってどれ〜〜〜!?
cgi-lib.plやjcode.plって旧バージョンだと 何か不具合でもあるのでしょうか? 古い方がバイト数少ないので その分サーバ負荷が軽減されるのでは?と思い 質問しました。
>729 バージョンアップというのは機能を追加、強化したりバグを修正したりするものだから 最新バージョンのほうがよいと思う。 そっちのほうで負荷軽減するならスクリプトのほうで軽減する努力した方がいいとおもう
数十、数百バイトの違いでクリティカルに負荷が変化するようなシステム 使ってるのか?それならPerlが起動しただけでヤバイな。 C言語の経験がないような人ってのは、変な事に気を遣うね。 そんなこと気にする暇があったら自分のコードを見直した方がいいと思うよ。
732 :
729 :02/04/20 06:14 ID:???
print <<SEX; cgi-lib.plやjcode.plって使う必要無いような気がするんだが SEX
timeファンクションで秒の部分を出力しないようになんて 可能ですか? 可能であればどうやればいいですか?
>>734 time()って秒数を返してくるんだから秒の部分を出力しないって
なんのこっちゃ・・・
それともこういうこと?
use Time::Local;
## 本当の時間が12時0分52秒だったら12時0分0秒に変換
my $secs = timelocal( 0, (localtime( time() )[1..5] );
>>734 もしくは、分単位で出したいなら
int(time/60)
>>736 を秒単位にするなら
60 * int time / 60
738 :
734 :02/04/20 11:22 ID:???
>735-736 ネタニ マジレス オバカサン
>>737 int(time)に60をかけて60で割る。
CPUがかわいそうだぞ。そんな非生産的な計算。
740 :
nobodyさん719 :02/04/20 11:44 ID:f9E3OCx3
>>723 さん、ありがとうございます。
はい。binmodeを3ヶ所に入れてみたのですが変りませんでした。
---------------------1
sub sendmail {
if (!open(OUT,"| $nkf -j | $sendmail -t")) { &error('Error'); }
#ADD--->start
binmode(BIN);
#ADD--->end
$host = $ENV{'REMOTE_HOST'};
---------------------2
sub send_mix {
・
・
if (open(UU,"$UUENCODE $tmp$filenum $filename |")) {
#ADD--->start
binmode(BIN);
#ADD--->end
@UUFILE = <UU>;
---------------------3
sub writebin {
・
・
if (!open(BIN,"> $tmp$filenum")) { &error('Error','アップロードファイルの一時ファイルが作成できません.<br>','テンポラリーフォルダのパーミッションを確認してください.'); }
#ADD--->start
binmode(BIN);
#ADD--->end
print BIN $FILEDATA[$file];
---------------------
741 :
nobodyさん719 :02/04/20 11:45 ID:f9E3OCx3
また、サーバー上にアップロードした一時ファイルを消さない様に 残すようにしてその画像を確認した所、 ---------------------1 sub send_mix { ・ ・ print OUT @UUFILE; } #DEL--->start #if (-e "$tmp$filenum") { unlink("$tmp$filenum"); } #DEL--->end } print OUT "--$bound\-\-\n"; --------------------- サーバーにアップされた時点では画像は崩れていませんでした。 なので、メール送信した時に崩れてしまっているのかな?と 考えています。 ※ちなみに、サーバーOSはUNIXです。
742 :
736 :02/04/20 12:00 ID:???
>>741 テキストモードで転送したんじゃないの?
>739は優先順位を理解していないアフォ
あるCGIで確認キーを発行しようとしたら、こう出た。 原因わかる? Unrecognized character \202 at ./fmail.cgi line 7. Content-type:text/html Unrecognized character \202 at ./fmail.cgi line 7. Content-type:text/html Unrecognized character \202 at ./fmail.cgi line 7.
> binmode(BIN) ナンデスカコレハ
>>745 ソースのエラーごときでよばんでくれるか?
しかもソース隠匿。
ソース sub obtiby{local($mailhost,$mailhostip);&sbfzwj(0);if(&mxomee == 1){&hzyfwg('SEND MAIL',<<_F);<p>すでに指定したメールアドレスにメールを送っています。</p> <p>メールの中に書いてある確認キーを入力してから、もう一度送信してください。</p> <p>誤って紛失してしまった場合は次の日まで待っていただき、もう一度再発行を受けて下さい。 $fd _F exit(0);} eval{$SIG{ALRM}=sub{die"(Time Out)\n"};alarm 20 if($^O!~/Win/i);&tpkfcs($mail, $sysopmail);alarm 0 if($^O!~/Win/i);}; if($@ ne '' || $?){&hzyfwg('SEND MAIL',"<p>メールサーバエラー $@</p>");}else{&hzyfwg('SEND MAIL',<<_F);<p>確認キー発行申\請を受け付けました。</p>
>>745 原因はエラー表示そのままで、
「fmail.cgiの7行目にへんな文字(8進で202=16進で82)が混じってる」
からなんだけど、fmail.cgiの1〜7行めまでを見せてくれないとわからない。
>>748 の一行目って、fmail.cgiの1行目なの?
↑ すげーソースだな。正直、こんなに電波がゆんゆん逝ってるソースは久しぶりに見た。
>Unrecognized character \202 at ./fmail.cgi line 7. 7行目に日本語混ざってんだろ、どうせ。ヴォケ。糞。
752 :
712 :02/04/20 14:38 ID:???
>>725 わかったような、わからないような・・・・・です。
「LWP::UserAgentを使えばよい」ということですね。やってみます!
>その数字の羅列を解析する必要はない。
>少なくとも、自ら解析コードを書く必要は無い。
>要は自作のUserAgentが
>「Cookieを理解するUserAgentが行って然るべき返信」をすればいいのだから。
>電波がゆんゆん逝ってる 電波の擬音語って「ゆんゆん」なのか。 いやどーでも良いんだけど
>alarm 綴り変
755 :
nobodyさん :02/04/20 14:54 ID:FTp8XsfB
Perl の勉強スタイルってどうしてますか? 漏れはActive Perl をWindows2000にインストールして、メモ帳とかの普通のテキストエディタでソース書いて、a.plとかで保存して、DOSプロンプト立ち上げて perl a.pl とかやってますけど、CPad みたいに効率のいい勉強環境ないですか?
>>755 漏れはmuleをパッケージでFreeBSDに入れて、mule -nwで起動してから
セーブ、サスペンド、.M-p[RET],fg
ってやってる。
>効率のいい勉強環境ないですか? こういう人は、何を与えても効率よく使えない人。
>>755 漏れはCPadてものを知らないのだが
MacPerl(自前コンソールとエディタ内蔵
winならCopal
簡単な構文チェックにいいよ
759 :
nobodyさん :02/04/20 16:26 ID:sMz1eiXo
@array = qw[1 1 1]; @array1 = qw[2 2 2]; @array2 = qw[3 3 3]; 出力 1 2 3 1 2 3 1 2 3 の様に各配列の要素を順番に一つずつ表示させる上手い方法は無いでしょうか?
760羽虫して
762 :
nobodyさん :02/04/20 16:40 ID:FTp8XsfB
Copal インストして使ってみました。 すごくいいです。ありがとうございます。
763 :
nobodyさん :02/04/20 18:03 ID:sMz1eiXo
foreach(0..3){ #←これ foreach(a..c){ print $_; } } この場合1度目の0..3は2度目のforeach文中では何て言う変数に 格納されてるんですか?
for(0..3){ print 'LOOP1 = ' . $_ . "\n"; for(a..c){ print 'LOOP2 = ' . $_ . "\n"; } print 'LOOP1 = ' . $_ . " (゚Д゚;)\n\n"; }
>>763 漏れの知識では、外側の$_は内側のループから参照でけない。
766 :
nobodyさん :02/04/20 19:21 ID:FTp8XsfB
chompってどういう意味なの? chopにmが増えただけなの? なんでmが付け加えられたの?
改行だけchop
768 :
nobodyさん :02/04/20 19:41 ID:FTp8XsfB
それだったらchopnとかになりそうだけど、なぜmが選ばれたのか、そしてなぜoとpの間に挿入されたのかがわかりません。
そういうことに疑問を持たない方が賢くなれますよ
ちょむぷ
何故nなのか小一時間(以下略 \nのnだとか言ったらアホとしか思えない。
>>766 chomp
[動詞]. (むしゃむしゃ)かむ.
774 :
nobodyさん :02/04/20 21:04 ID:FTp8XsfB
775 :
nobodyさん719 :02/04/21 00:56 ID:86gzo8Ag
>743さん、私もそう考えてネットで調べてみた結果、binmodeを使って バイナリモードにしてみると良いというのを見かけましたので、これを 追加してみたのですが上手くいきませんでした。 >746さん、もしかして「binmode(BIN)」のパラメータの指定が間違って いますか?ネットで調べて「binmode(STDOUT)」や「binmode($filenum)」 に変更してみたのですが状況は変りませんでした。 しかもよく調べてみると、binmodeはサーバーOSがWindows系の場合の 対応でUNIXでは必要ないとの事らしいので、この対応は意味が無いのかな? と考えています。 そこで、はじめは自分のHTMLに組み込んで使っていたので、サンプルの HTMLとCGIをほぼそのまま(変更したのは、環境パスと送信先メールアドレス と戻り先URLぐらい)の状態でサーバーにアップロードしてから実行しても あいかわらず画像が崩れてしまい、状況は変りませんでした。 何か他に疑う所はありますでしょうか?
>>775 まずbinmode()についての理解を深めなさい。
動作の解らない関数をコードに入れるなんてナンセンス。
予備知識としてUNIXとDOSのテキストファイル形式の違いも勉強するとなお良し。
スリーセブンオメ>俺
>>775 どっかのUp板にそのIスクリプトUpしてくれると、なにかわかるかも。
>778 おせっかい野郎登場ってか?
780 :
778 :02/04/21 02:36 ID:???
782 :
nobodyさん :02/04/21 04:34 ID:5EokjXuO
>781 煽りにマジフォローしなくても…。
(´-`).。oO(煽り厨の
>>779 =
>>782 [ID:5EokjXuO] はCGIスレでも大活躍だね・・・・)
784 :
nobodyさん :02/04/21 08:39 ID:1/Tdsylw
質問です。 配列@a=("hoge1","hoge2","hoge3"〜)で@aの要素として存在する文字列に関して 連想配列%flagを$flag{'hoge1'}=1 というふうにしたいのです。 foreach $_ (@a) {$flag[$_] = 1;} とするとflagは全部1になってしまいます。 どのようにすればうまく行きますか?
785 :
nobodyさん :02/04/21 09:02 ID:zdYHTsmZ
>>784 ちょっと変えて
$n=1;
for ( @a ) { $flag[$_] = $n; $n++; }
とかどうでしょう。
>>785 ありがとうございます。$flag[$_]=1の間違いですか?
どちらにしても上手くいかないようです。
>784 おまえがどうしたいのかわからないよ。 hoge2の時は?hoge3の時は?
>>784 全部1でOKなんじゃないの?
それとも出現回数をカウントしたいわけ?
789 :
784 :02/04/21 10:19 ID:???
@aに文字列があるかどうかを調べたいんです。 hoge2がなければ$flag['hoge2']が1になって欲しくないんです。 よろしくお願いします。
790 :
784 :02/04/21 10:20 ID:???
ああ、そうか。書き方が悪かったです。 @aが可変なんです。
%flag = ();
for (@a) {$flag[$_] = 1;}
こうしたいのか? これじゃ無ければ手に負えん、後は任せたぞ
>>793 。
for $_ (@a){ $flag{$_} = 1 } じゃダメなの ? あるかないかは、if defined $flag{...} でわかると思うけど...。 # 何故、連想配列なのに $flag['hoge2'] とか書くの ?
そりゃ1かどうかの問題じゃなくてハッシュにキーが 存在するかを調べればいいことだろ。 で、おまえがなぜこの程度のことを出来ないのかがわからない。
794 :
784 :02/04/21 11:18 ID:???
すみません。単純に連想配列の表現に{}とするところを []としていたせいだったっぽいです。792さんに指摘されて気づきました。 大変お騒がせしました。 ところでみなさんforeachって書かないんですね。
>794 人の自由さ。foreachとforはほぼ同じだし
ほぼ、どころか全く同じだったり。
>784 こういうことでは? @a=("hoge1","hoge2","hoge3"); @flag{@a}= (1) x @a; for ( keys %flag ){ print $_,": ",$flag{$_},"\n"; }
弐編=神 >>>>>>>>>> Dream★=上級者 >>>>>>>> やさしいお兄さん=中級者 >>>>> 初心者 >>>>>>> japu=異常性愛車 >> _gunzip=厨房
>>798 激しく同意
800げt
変数内のダブルクオーテーションは、どやって置換すればいいでしょうか? 前のページでテキストボックスから送られてきたデータの中に、 " が入ってると 処理がうまくいかないです。んで、置換しようと思ったのですが $test =~ /"/\"/g; とかやっても置換してくれません。お助けくだされ。
>801 具体的に問題となった処理を提示してください。
>801 何がどううまくいかないのか、さっぱりわかりません。 ついでに、 $test =~ /"/\"/g; これはコンパイルエラーになります。
>>801 $test =~ s/"/\\"/g;
でしょ?
弐編=神 >>>>>>>>>> Dream★=上級者 >>>>>>>> やさしいお兄さん=中級者 >>>>> 初心者 >>>>>>> japu=異常性愛車 >> _gunzip=厨房
弐編=神 >>>>>>>>>> Dream★=上級者 >>>>>>>> やさしいお兄さん=中級者 >>>>> 初心者 >>>>>>> japu=異常性愛車 >> _gunzip=厨房
弐編=神 >>>>>>>>>> Dream★=上級者 >>>>>>>> やさしいお兄さん=中級者 >>>>> 初心者 >>>>>>> japu=異常性愛車 >> _gunzip=厨房 .
808 :
定型文 :02/04/21 16:41 ID:???
Dream★必死だな。
------------------------終了------------------------ ------------------仕切りなおして再開-----------------
弐編=神 >>>>>> Dream★=上級者 >>>>>> やさしいお兄さん=中級者 >>>> 初心者 >>>>>>> japu=異常性愛車 > _gunzip=厨房
みんな死ねよ!
Dream★くん、荒らすなよ。
Dream ★ = 469 うざい。
Dream ★ って臭うな。 糞したれケツぐらい拭けよ。
嵐は無視ということでお願いします。
弐編=神 >>>>>> Dream★=上級者 >>>>>> やさしいお兄さん=中級者 >>>> 初心者 >>>>>>> japu=異常性愛車 > _gunzip=厨房 認めろよ(藁)
>>798 >>805-807 >>811 >>813 >>818 等はこう書きたかったと思われ。
_gunzip=神 >>>>>> japu=上級者 >>>>>> やさしいお兄さん=中級者 >>>> 初心者 >>>>>>> Dream★=異常性愛車 > 弐編=厨房
Dream★は自覚してるんだねw
PerlTkに詳しい人はいませんか?
821 :
469 :02/04/21 18:13 ID:???
_gunzip=厨房 これだけは認めろよな。
>821 仮にそれを認めたとしたって _gunzip氏>>>(以下略)821 こうなるのは明白。
>>826 Tk部分は_gunzipさんがほとんど作ってたじゃん
829 :
469 :02/04/21 18:48 ID:???
ギコタク作者 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> _gunzip
830 :
469 :02/04/21 18:49 ID:???
とにかく、中傷できれば誰でもいい。
しつもーん 1. if ($string eq "hoge") { 2. if($string eq "hoge"){ 3. if ( $string eq "hoge" ) { 4. if( $string eq "hoge" ){ どれが好きですか?細かいけど
>>565 いろいろ指摘ありがとうございます。
素直に$_[0], $_[1]を利用して
--------------------------
#!/usr/bin/perl -w
use strict;
sub mapup (& \@ \@)
#(code_ref $code, array_ref $_a, array_ref $_b)
{
my($code, $_a, $_b) = @_;
my @retval;
my $max_index = (@$_a < @$_b) ? @$_a : @$_b;
for my $i (0 .. $max_index - 1) {
push @retval, $code->($_a->[$i], $_b->[$i]);
}
return @retval;
}
my @a = (1, 2, 3);
my @b = (0, 8, 7);
my @c = qw[ G C A T ];
my @d = qw[ C G T A ];
my @sum = mapup { $_[0] + $_[1] } @a, @b; # (1, 10, 10)
my @pro = mapup { $_[0] * $_[1] } @a, @b; # (0, 16, 21)
my @bigger = mapup { $_[0] > $_[1] ? $_[0] : $_[1] } @a, @b; # (1, 8, 7)
my @concat = mapup { $_[0] . "-" . $_[1] } @c, @d; # (G-C,C-G,A-T,T-A)
-----------------
とした方が良かったですね。
(わざわざsortに似せて$a, $bを使おうとして、かえって不便に)
>>831 細かいが
if ($string eq 'hoge') {
「"」より「'」の方が変数置換無い分だけ早そうな気がするが、嘘かも。
コンパイル時に判別できるので変わらない。
そのコンパイルがちびっと早いかな...と
838 :
nobodyさん :02/04/21 23:35 ID:IQt5Pbmu
>>835-837 CGI 用にコンパイル無し、インタプリタとして動かしてるなら効果ある?
>>838 それはちょっと勘違いしている。
通常のインタプリタとして実行する時も、中間コードにコンパイル
され、実行されるんだけど、その「コンパイル」を指してるんだよ。
>>839 あぁ…そう言う事か。混乱してた
とうい事は、変数置換があり得ない文字列はリテラルにした方がいいのか…
841 :
837 :02/04/22 00:04 ID:???
>>840 自分で書いといてなんだが、おそらく効果は無い(測定不可能なレベル)。
気分の問題。(w
842 :
nobodyさん :02/04/22 04:49 ID:5JDbu1pP
金額を3ケタごとに「,」で区切りたいんですが、 どのようにすればいいのでしょう。 sprintf(); で簡単に記述できたと思ったのですが どうしても見つかりません。 ご存じの方いましたら教えてください。
sprintf以外の方法なら知っていますが、 sprintfを使った方法が見つからないのでごめんなさい。
ごめんちゃい
>842 $_ = reverse join ',', grep !/^$/, split /(\d\d\d)/, reverse $_;
>>845 クライアント様のご要望で、どこかにsprintfを噛まさないといけないようです。
$d = reverse sprintf "%s", join ',', reverse($d) =~ /\d{1,3}/g;
つーかメモ。
>>842 perldoc perlop によると、
# put commas in the right places in an integer
1 while s/(.*\d)(\d\d\d)/$1,$2/g; # perl4
1 while s/(\d)(\d\d\d)(?!\d)/$1,$2/g; # perl5
だそうです。
ちなみに、オレ自身、コレがどういう理屈(仕組み)でうまくいくのか
理解してません。でも、ちゃんと動いてる。うーむ。
848 :
712 :02/04/22 21:42 ID:bQF56S81
平方根はsqrt()だが、そんな事が聞きたいわけじゃないよな…。
852 :
nobodyさん :02/04/22 23:39 ID:NaATCEmQ
coreファイルの自動削除をperlで行うにはどうすればいいのでしょうか? この質問、FAQだと思うんですが、FAQをまとめた所が無いし 過去スレにも載ってないようなので、質問しました。
>847 g オプションは意味がないから外せ! でも、もっと速い方法があるが... オマエ等にはそれで十分だ。
>852 if(coreファイルがあるか?){ unlink(coreファイル); }
855 :
847 :02/04/23 03:35 ID:???
>>853 オレに言わないでくれ・・・
「/gだけじゃうまくいかないこともあるんだよ」っつー例として
に載ってたので、仕方なくついてんだろうよ。
あんたが本当にもっと速い方法を知ってるのかどうかわからんが、
もうこのスレでオナニーカキコはやめてくれ。頼むよ。
856 :
842 :02/04/23 04:34 ID:???
金額の「,」付け色々方法あるのですね。 勉強になりました。ありがとうございます。
. /.-―ー-.ヽ、 /☆" ̄ ゙̄ヽ/ __ Y´ノノノ"ヽヽヽ / ̄ ̄ ̄ ̄ . ヾcヽ.l(| ∩ ∩|)| < Dream は天然ばか♪ \ \、 ▽ ノjl| | `く ヾ=oノ_ブ゙i \___ i (;) ,___| |___| .| | i| (,,ノ | 7 ノ |_l\ノ,> . | | |_ノ . (_)
while (1) は分かるんですが、 1 while はどういう意味なんでしょうか? 低レベルな質問ですいません。
while(expr){ f() } f() while expr; if(expr){ f() } f() if expr; foreach (expr){ f() } f() foreach expr;
while /pattern/g って無限ループにならないのはなぜですか?
>860 マッチングのチェックをするポイントが移動するから。 gオプションは「何度も繰り返す」じゃなくて「最初の一回で終了をしない」というものだから。
862 :
nobodyさん :02/04/23 22:03 ID:trg6QFfS
$temp{aaa}[0] = 'aaa'; $temp{aaa}[1] = 'bbb'; foreach(0..1){ print; } ↑の変数は何なのですか? @temp{aaa} = ('aaa','bbb'); だとダメだし。。。
>>862 (´-`).。oO(何をしたいのか書いてない…こういうバカばっかりで教える気にもならん…)
>862 ハッシュに配列リファレンスが入ってるのではないでしょうか。
$temp{aaa} = ['aaa', 'bbb']; print "$temp{aaa}[$_]\n" foreach (0..$#{$temp{aaa}});
>>864-865 こんなの出来ないのか?と思ってやったらずばりできたので
質問させてもらいました。
ありがとうございました。
>>865 (・∀・)<バカっていったやつが〜〜の起源はこんな感じか?
まさに何をしたいわけでも無いです。
反射的にバカバカいう、かつ自分も〜な人に教えを請うつもりはありません。
>866 とりあえずレス番間違いを修正しとけ。 そんな間違いして気付かずに入るとバカと言われても否定できなくなるぞ。
>867 =~ s/気付かずに入ると/気付かずにいると/; 漏れがバカでした、逝ってきます。
869 :
866 :02/04/23 23:59 ID:???
アホばっかりですねこのスレ やだやだ
アホばっかりです。ねこのスレ。 やだやだ
873 :
nobodyさん :02/04/24 17:40 ID:QCOQFZww
板違いにより、レンタルサーバー板より移動してきました。m(__)m windows2000にてAn httpd(1.39f)を使ってCGIの動作実験を行っているのですが、 Cookieを受け入れてもらうためにPerlで print "Set-Cookie: data=Yes; expires=Sat,05-Mar-2005 00:00:00 GMT\n"; print "Content-type:text/html\n\n"; (以下html文書が続く) のように記述したのですが、IE5.0、IE5.5に無視されてしまいます。 (NC6.xでは問題なく受信してくれます) 原因のわかる方はいらっしゃいますでしょうか?
875 :
反抗期 :02/04/24 18:40 ID:/vYDcPy6
お母さん質問です $backupFile = ">C:\\Inetpub\\wwwroot\\backup\\backup.txt"; sub backupmake { (open OUT,$backupFile); print OUT "$nowtime $name $email \n"; close( OUT ); } このように記述すると backup.txtにデータ自体はきちんとが入るのですが 前のデータが消えてしまいます。 上書きせずにデータを入れて行くにはどうすれば良いですか? ちなみに sub backupmake { (open OUT,">>$backupFile"); print OUT "$nowtime $name $email \n"; close( OUT ); } とやってみたのですが、これではbackup.txtに記述されませんでした
>>875 おしいね。追記したいなら
open(OUT,">$backupFile");
じゃない?($backupFileの1文字目が「>」なので)
877 :
反抗期 :02/04/24 18:52 ID:/vYDcPy6
キタ━━━━━━(゚∀゚)━━━━━━ !!!
>>876 お母さんありがとう!
878 :
:02/04/24 18:54 ID:ST7JH4TO
はじめまして。 質問させてください。 よく、掲示板の機能で、出身地をリストから選んで 入力できたり、アイコンをリストから選んで入力できたり するけど、ああいうのをカスタマイズ(例えば、 出身地じゃなくて、血液型を入力できたり) したいのですがそういう説明のあるサイトとかありますか? それとも簡単なことですか?
<option>出身地A</option> <option>出身地B</option> ・ ・ ↓ <option>A型</option> <option>B型</option> ・ ・
881 :
878 :02/04/24 19:29 ID:ST7JH4TO
>>879 もし、あなたに頼むならいくらでやってくれますか?
一箇所だけです。
出身地を血液型に入れ替えるだけです。
882 :
873です。 :02/04/24 19:50 ID:47ftV//x
うんこが漏れました。くすん。
884 :
878 :02/04/24 21:56 ID:???
885 :
844 :02/04/24 21:57 ID:???
886 :
nobodyさん :02/04/25 17:07 ID:eszjGBC/
perlをいれてないんだけど、スクリプト作れるよね?メモちょーだけで
作れるよ。でもperl入れなきゃテストする環境がないんじゃない?
888 :
pear ◆PeArra/s :02/04/25 19:54 ID:Va/Pba3y
>888 なにをどう改造したか説明しる。 そして>883に逝く。
>>888 重要なのはエラーコード(500)ではなく、エラーログだ!
エラーログよこせ。
891 :
nobodyさん :02/04/25 20:05 ID:UbehO4w6
もしスレ違いだったらごめんなさい。 HPの掲示板が荒らされまくって困っています。 書き込んでいる人間のIPアドレスを知る方法がわかる方がいらっしゃったら 教えていただけないでしょうか? もしくは書き込み不能にできる手段はありますでしょうか? されるがままで困ってます。 よろしくお願いします。
>891 明らかにスレ違いだが。 IPを取るのは簡単。 書き込み不能にするのも簡単。 だがしかしIPアドレスなんてのはいくらでも変えられるからあまり意味がない可能性が高い。 その掲示板は閉鎖して、身内にはメールを送り隠れ掲示板を置くのが建設的。
893 :
rootvg :02/04/25 22:13 ID:J89k1oOV
もういいから帰ってください
895 :
891 :02/04/25 22:28 ID:UbehO4w6
>892 御親切な書き込みありがとうございました。 当方、本当に初心者で別の板でこちらを紹介していただいたのですが、 ここもスレ違いだったんですね、すいません。 >IPを取るのは簡単。 >書き込み不能にするのも簡単。 もし、お手間でなければ教えていただけないでしょうか? もしくは詳しいサイト(板?)を教えていただけると助かります。 よろしくお願いいたします。
>>895 $remote_ip = $ENV{'REMOTE_ADDR'};
$remote_hostname = $ENV{'REMOTE_HOST'}
if ($remote_ip =~ /^10\.1/ || $remote_hostname =~ /hoge\.com$/) {
print "Fuck So Reena!<BR>\n";
exit;
}
897 :
nobodyさん :02/04/25 23:02 ID:T2XLP+gT
こんにちは。 先日、CGI検索エンジン(ヤフーのようなタイプで管理者のみ登録可能)と、一般的にごくごく普通の掲示板の制作を依頼しようとしたら、合わせて20万円と見積もりがきました。 条件としては、「著作権表示なし」ということで、この値段はどうなのでしょうか? みなさんのご意見をお聞かせください。 また、上記のような物であれば、いくら位が妥当なのでしょうか? 宜しくお願いします。
>>896 スレと関係ないけど、Fuck So Reena!ってナニ?
はくそりーなへと関係アリ?
901 :
900 :02/04/26 01:04 ID:???
ちなみに、「サーバーが見つかりません」になり、エラーログには何も出力されません
902 :
896 :02/04/26 02:14 ID:???
903 :
nobodyさん :02/04/26 05:34 ID:Q56RTaUT
GnuPGを、perlスクリプトから動かそうと思い、system関数を使えば いけそうなのはわかったのんですが、どうにもうまく動きません。 /usr/local/bin/gpg -ea -r D44EC5AA aaaa -o bbbb telnetでログインし、上記コマンドを打って、 bbbbファイルが暗号化されるのは確認しました。 単にこのコマンドをperlスクリプトから打ちたいだけなのですが、 これをsystem関数でやるには、どのような書き方をすればいいのでしょうか? 初歩的な事ですみません、検索してもよくわからなかったのでお願いいたします。
>>889-90 ごめんなさい、改造中に誤って1行消してしまったみたいで…
今は正常に動作しています、迷惑かけてしまってすいません。
>>897 業者に依頼するなら妥当だと思う
ディレクトリの中の特定のファイル名を持つものを 削除したいんですが例えば april1.html april2.html april3.html april4.html と言うファイルがある場合 aprilの後3以下の数字ならそのhtmlファイルを削除する場合 ってのはどうすればよろしいんでしょうか?検索してもわかりませんでした。 教えてください。
試してないので注意。 使用する前にまずunlinkをコメントアウトしてprint文で正しい ファイルが選ばれてるかどうかテストしておいたほうがよろしいかと。 use IO::Dir; my $dh = IO::Dir->new( "/path/to/dir" ) || die $!; while( $dh->read ) { next if !/^april(\d+)\.html$/; next if $1 >= 3; ## print "deleting $_\n"; unlink($_); }
>>905 system('rm april*.html');
unlink('april1.html'); unlink('april2.html'); unlink('april3.html');
909 :
nobodyさん :02/04/26 10:53 ID:qDk2ux2I
@_ ってなんですか?
>907 それだとapril4.htmlまで消さないか?
File::Copy を利用しようか検討しているのですが サーバ側でこの標準モジュールが許可されているか確認する為に 管理者へ連絡する以外に、perlを利用して確認する方法は存在しませんでしょうか?
使えば良いじゃん?
モジュールがインストールされてるかどうか、ってこと? telnetとかできるんだったら /path/to/perl -MFile::Copy -e 'print "yes\n"' でエラーが出なければOK。
914 :
911 :02/04/26 13:40 ID:???
追記です
因みに、Web 用の CGI として試行錯誤しております
>>912 実際試してみたところ、ブラウザにてエラーが発生しました
しかし、文法チェックを行っても OK で戻ってきているので
考えられる原因が、モジュールが未組み込みの為に発生しているのかと
疑問に思った次第なのです。
利用すれば判明すると言う事は
ブラウザ上のエラーメッセージにて
何らかの確認が行えると言うことでしょうか?
>>913 どうもありがとうございます!
しかしながら、当方一般のユーザ扱いになりますので
サーバへ telnet する事ができません...
スカポンタンなお話で恐縮なのですが
port 21 へ telnet する権限しかない場合でも
先のコマンドを実行することは可能なのでしょうか?
>>909 配列名が省略されている形式だと思います。
>>906 ありがとうございます。でも500エラーになってしまいます。
918 :
nobodyさん :02/04/26 17:05 ID:TLJObIwR
>>918 $FORM{$1} = $2 if $ENV{'QUERY_STRING'} =~ /(.+)=(.+)/;
>>918 cgi-lib.pl を使えば実現出来ると思います。
次のような感じでスクリプトに書き込めばいいかな?
もしかしたら違うかも…(汗
require './cgi-lib.pl';
&ReadParse(*FORM);
■ The cgi-lib.pl Home Page
http://cgi-lib.berkeley.edu/
921 :
912 :02/04/26 18:13 ID:???
>>914 500吐いて確認出来ないんなら、シンプルにモジュールだけincludeして
それで判断する位が一番簡単じゃ無いの?
後はtelnet.cgiとか拾って来て、サーチパス(@INCだっけ)見てみるとか
それかshで簡単なスクリプト書いて、エラーをファイルにでもリダイレクト
して(>&2だったか)ログ取るか。
つーかCopyってカレントに突っ込めば動くんじゃネーノ?
最近全然コード書いてないんでね すまんね
もうだめです。ツリー掲示板のツリー表示ができません。 氏にます。
>>922 ソースがないと誰も何も言えませんよ…
俺は詳しくないのでもともとアドバイスできるとは思いませんが…
924 :
GEN ◆O4y3A80k :02/04/26 18:53 ID:wC8cY983
>>File::Copyで困ってるやつ 一つ言っとくと、モジュールがインストールされていなければsyntax checkも失敗するから。 以下のコード試して見れ。 #!/usr/bin/perl -w print "Content-Type: text/plain\n\n"; print eval{ require File::Copy; } ? "ok" : $@;
>>922 "└"と"│"と"├"を組み合わせてツリー表示したいのですが、
上手く表示されません。
1: 直面する危機[cccc] 04/18 17:10
|
| 日本企業が直面している、新事業開発と新市場創造の壁とは何か。
|
├2:Re直面する危機 [つんく] 04/19 10:07
│
│ つんくつんく大儲け
│
│├3:Re直面する危機 [いいいい] 04/21 15:43
││
││ いいいい
││
│└4:Re直面する危機 [うううう] 04/21 15:44
│ │
│ │ うううう
│ │
└5:Re直面する危機 [おおおお] 04/21 15:42
│
│ おおおお
│
ここまで
みたいになってしまい、きれいに表示されないんです..
HTMLの勉強した方がいい。
>>926 3%ぐらいの確率でわかるかも…
とりあえずテキストでソースうpしてみて。
>>925 さんのコードを対象のサーバにて試してみたところ
"ok" が表示されました...、ということはモジュールは導入
されているという事で良いでしょうか?
であれば、エラーの原因は自分のコードミスにある模様ですので
激しく逝ってきます!
930 :
926 :02/04/26 19:48 ID:???
sub treelist { $c .= $n eq "└" ? " " : "│" if($n); while(@{$restree{$log}}){ @data=split(/\t/,$list{$log == 0 ? shift(@{$restree{$log}}) : pop(@{$restree{$log}})}); if($data[1] != 0){$n= @{$restree{$log}} ? "├" : "└";} if($n eq "├"){$o = $data[1] == $log ? "│" : "";} elsif($n eq "└"){$o = $data[1] == $log ? " │" : " ";} print "$data[0]:$data[3] [$data[4]] $data[6]"; if($data[1] == "0" && $data[1] != $log){$sen = "<br>| ";} else{$sen = "<br>$c$o"." ";} print"$sen$sen"; $data[7] =~ s/<br>/$sen/g; print "$sen<nobr>$data[7]</nobr>$sen"; &treelist($data[0],$c,$n,$o,$size - 2); } } へぼなコードでほんとにすいません。おねがいします。
よくそんな汚いコードで頼みに来るねえ・・・
>>932 初心者スレなんだしそんなこといっちゃ身もふたもないと思われ
@dataのまま判りやすい名前をつけようともせず、 人に理解してもらおうという気がないようだと思っただけだよ。 @{$restree{$log}}が何かも書かずにさ。
935 :
903 :02/04/26 23:24 ID:???
すみません、聞き方が悪かったみたいです。
system("/usr/local/bin/gpg -r D44EC5AA -o bbbb -ea aaaa");
とやると、エラーはでてきませんが、bbbbファイルが作成されません、
GnuPGはサーバーの/usr/local/bin/gpgにインストールされてますので、
telnet上の操作では、暗号化ファイルbbbbは問題なく作成されます。
問題は違うとこにあるのでしょうか?
元々やりたかったことは、フォームメールに入力されたデータを
暗号化されたメールとして受け取りたいということです。
解説ページなんてたくさんあるだろうと思って、暗号、PGP、GPG、GnuPG、フォーム、
他にもいろいろ検索ワードを試しましたが、それらしいページが見つかりません。
ひとつだけみつけましたがPHPでした。
http://www.hotwired.co.jp/webmonkey/2000/20/index3a.html もし対処法や解説ページがありましたら、よろしくお願いいたします。
>>930 @{$restree{$log}}がなんだかはシランが、ツリー掲示板なら
ログがあるはずだから、そのログを精査して子記事のあるものに
フラッグつけろ。
で、whileかかってる記事番号の処理の中でフラッグがあれば
そいつの下に線をたらせばいんじゃないかい?
>>935 system()後の $? はどうなってる?
>>932 汚いだなんだ言う前に手本の一つでも見せろや?暇なのか?
939 :
nobodyさん :02/04/27 01:15 ID:pZywQtFX
perlでDOMを扱えるんでしょうか? ともかく分からないので、質問自体が間違ってるかもしれませんが。
perlでZAKUを扱えるんでしょうか? ともかく分からないので、質問自体が間違ってるかもしれませんが。
とりあえず
>>930 は変数の意味を教えてくれ。(まだ見ているなら)
でないとさすがにわからんと思うぞ。
>>939 XML::DOM、XML::LibXML、XML::GDOMEなどなど。XML関係は腐るほどあるけど。
思うに一般のプロバイダーのサーバーではインストールされていないかと。
>>940 おもろい。
943 :
903 :02/04/27 02:09 ID:???
>937 $?の中は512となってますが。 できあいのCGIを設置したり、ちょびっと変えるぐらいしか やったことない身には、さっぱりわかんないです。
>>943 CGIからファイル作れるように、ディレクトリのパーミッションちゃんと開けてる?
>>939 だうんろーど おんりー めんばー?
Perlで人を扱うことはできません
>>942 モジュールも鯖にあげてパス通す、というのは出来ない?知らんけど。
#/usr/bin/perl -I~/cgi-bin/
みたいのを1行目にするとか。
947 :
903 :02/04/27 02:59 ID:???
>944 パーミッションは問題ないはずなんですが、、、 全開放で試してもダメでした。 海外のページを探してみたら、GPG対応のフォームメールが いくつか見つかりました。これを改造して使えないかなと中を見てるとこです。 日本語の解説ページもたくさんありそうなもんですがねぇ、 関連ワードで国内を検索しても、ショッピングサイトしかでてこないです。
948 :
944 :02/04/27 03:22 ID:???
>>947 スクリプトが、そのsystem()の行まで辿りつく前にエラーになってる可能性は
ないかな?
実行パーミッションがついてないとか、perlのpathが間違ってるとか。
あと、telnetでログインしたときと、CGIで叩いた時の $PATH が
違うという可能性か、入力ファイルが実は無かったとか。うーむ。
推測だらけですまん。
949 :
903 :02/04/27 03:43 ID:???
>948 親切なレスありがとうございます。 pathは間違ってないですねぇ、、、ファイルも存在してます。 実行パーミッションもついてます。う〜ん?? 簡単なテストで、こんなのやってみました。 #!/usr/local/bin/perl system("/usr/local/bin/gpg -r D44ECAAA -o bbbb -ea aaaa"); print "Content-type: text/html\n\n"; print "<HTML><BODY>\n"; print "暗号化終了<BR>"; print "</BODY></HTML>\n"; exit; エラーはでないですが、bbbbファイルが作られません、 絶対パスでファイルを指定してもダメ。 すごい初歩的な思い違いをしてるような気もしますが、、、。
950 :
944 :02/04/27 03:59 ID:???
>>949 つーことは、なんとなーくgpgの実行時にエラーが出てる予感。
print "Content-type: text/html\n\n";
print `/usr/local/bin/gpg -r D44ECAAA -o bbbb -ea aaaa`;
てな感じで、エラー表示されないかなぁ
951 :
903 :02/04/27 04:39 ID:???
>944 こんな時間までお付き合いいただいて恐縮です。 やってみましたが空白ページでした、は〜ぁ。 試しに自分のPCにGPG、AN HTTP、ActivePerlを入れてテストしたら 無事に暗号化ファイルが作られました。 う〜ん、何なんでしょ? 関係のあるファイル、ディレクトリを 777にしちゃいましたが動かないし。
>>946 でもXML::DOMもXML::LibXMLもXML::GDOMEもCライブラリが必要でしょ
(expat,libxml2)?なんかそこまでするのもなぁ、と。できないことは
なかろうが。
953 :
nobodyさん :02/04/27 04:48 ID:o5qoi2dC
例えば5*1.3を実行すると6.5になりますよね? この少数点以下を切り捨てにしたい場合はどうすればいいんでしょうか?
perldoc -f int perldoc -f sprintf my $foo = sprintf( '%d', 5 * 1.3 );
>>953 >954とかuse integer;とか
956 :
903 :02/04/27 08:02 ID:???
>944 問題はGPGの環境変数の設定にあったようです、 $ENVで設定すればOKでした。 お付き合いいただいて、本当にありがとうございました。
957 :
Atsuhi ◆UvChluUE :02/04/27 10:08 ID:vZVa5O3I
<FORM action="test.cgi" method=POST> <input type=text name=2ch></form> GETorPOSTフォームから送信された内容を、CGI側の変数$in{'2ch'}に格納するにはどうしたらいいんでしょう。
959 :
Atsuhi :02/04/27 15:38 ID:2uDiaJDy
>>958 その方法試しましたが、
なぜか、フォームから送信された内容を処理できません。
cgi-lib.plも使いたくないです
>>959 配布されてる掲示板スクリプトのフォームから受け取ったデータを
処理してるとこみてみ。
%in = map{ tr/+/ /; s/%(..)/pack"H2",$1/eg; s/</</g; s/>/>/g; s/"/"/g; $_ } split/[&=]/, do{ uc $ENV{REQUEST_METHOD} eq 'POST' ? do{ read STDIN, $_, $ENV{CONTENT_LENGTH}; $_} : $ENV{QUERY_STRING};
>>961 おっと、中閉じカッコを一個忘れちまったい。
963 :
nobodyさん :02/04/27 16:23 ID:AgrfpFbJ
フォームでurlを受け取って、そのurlにredirectしようと考えたのですが、 その際にrefererを空にしたいと考えてます。なぜだか。 何かよい方法ありませんか?
>>963 metaタグのRefresh使え
つか過去ログ嫁
965 :
nobodyさん :02/04/27 16:38 ID:AgrfpFbJ
Dream★ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ぐんじp
967 :
nobodyさん :02/04/27 21:53 ID:sDcizlcB
どっかのサイトのhtmlファイル等を保存するスクリプトを作りたいのですが。 どーやりますか?
969 :
nobodyさん :02/04/27 22:22 ID:sDcizlcB
>>968 マジカヨ!!ソケットって何??逝ってきます
>969 LWP::Simple
971 :
nobodyさん :02/04/27 22:40 ID:sDcizlcB
自分で調べる気がない人には無理です。
973 :
nobodyさん :02/04/27 22:50 ID:sDcizlcB
>971 #ゴルァ!ちったぁ自分で調べんかい! #/usr/bin/perl use LWP::Simple; $url='www.somewhere.com/index.html' $file='local.html' LWP::Simple::mirror( $url, $file );
975 :
nobodyさん :02/04/27 23:04 ID:M0a39fTI
掲示板に書き込んだとき、投稿者のHPへ自動的にリンクする事が出来ますよね。 あの事でお聞きしたい事があるんですが、このスレで聞いても良いんでしょうか? htmlだけじゃなく、cgiなどの方も関係してるのでこのスレが妥当だと思うんですが、 一応確認したくて。
>>975 質問の内容によるかと。
っていうか最初から質問かけYO!スレが無駄に消費される。
そろそろ誰か次スレ立てて。
979 :
975 :02/04/27 23:17 ID:M0a39fTI
>>976 すみません、無駄にしてしまいました。
どうせなので、私が次スレ立てさせて頂きますね。
983 :
975 :02/04/27 23:21 ID:M0a39fTI
ごめん、Perl関係なかったデス。CGIダタ。
984 :
975 :
02/04/27 23:22 ID:??? sage忘れるし・・・。鬱。