【Perl】初心者コーナーPart11

このエントリーをはてなブックマークに追加
1nobodyさん
 
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。

参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけどなんか質問ある Pert 5.01 】
http://pc.2ch.net/test/read.cgi/php/1015127347/l50
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/

過去ログ、その他の役立ち情報は>>2-10を見よう。
2nobodyさん:02/03/27 12:54 ID:wAXxxOxP
3nobodyさん:02/03/27 12:54 ID:wAXxxOxP
[総合]
 ・Perl Com: http://www.perl.com/pub/
 ・CPAN.com: http://search.cpan.org/
 ・ActivePerl: http://www.activestate.com/
 ・CGI-ML:http://forest.ne.jp/cgi-ml/
[お薦め]
 ・Perl Recipes: http://www.effectiveperl.com/recipes/
 ・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
 ・Randal's WebTechniques columns: http://www.stonehenge.com/merlyn/WebTechniques/
 ・Perlの部屋: http://www.cc.rim.or.jp/~midorin/mad-p/perl/index.html
 ・Perl初心者の部屋:http://www.harukaze.net/~mishima/perl/
 ・Perlリファレンス:http://www.big.or.jp/~mio/ga/pl/plref/pl_ref.htm
 ・Perlのページ:http://homepage1.nifty.com/nomenclator/perl/
[Document&Tutorial]
 ・Perl News: http://www.news.perl.org/
 ・Perl Monks: http://www.perlmonks.org/
 ・PerlMonth - Online Perl Magazine - : http://www.perlmonth.com/index.html 接続不能
 ・use Perl All The Perl: http://use.perl.org/
 ・Learn Perl - Perl Education: http://www.devdaily.com/perl/edu/index.shtml
 ・Perldoc.com: http://www.perldoc.com/
 ・Using Perl5 in Web: http://docs.rinet.ru/Using_Perl5_in_Web/
 ・Rex Swain's Home Page: http://www.rexswain.com/
 ・Robert's Perl Tutorial: http://www.netcat.co.uk/rob/perl/win32perltut.html
 ・Perl Tuts: http://savage.net.au/Perl-tutorials.html
 ・Beginning Perl Tutorials: http://www.pageresource.com/cgirec/index2.htm
 ・jcode.pl の私的な解説書: http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
 ・Logical Choice Software, Home Page: http://www.logsoft.com/perltips/
 ・Perlfect Solutions: http://perlfect.com/
 ・The Perl Archive : http://www.perlarchive.com/
 ・Perl6 & Parrot VM についての情報: http://dev.perl.org/perl6/
4nobodyさん:02/03/27 12:54 ID:wAXxxOxP
[Module]
 ・Perl Module Reference: http://www.bekknet.ad.jp/~bero/docj/module_/
 ・PPMPackages: http://www.activestate.com/PPMPackages/
 ・河馬屋二千年堂's Page: http://member.nifty.ne.jp/hippo2000/index.htm
[Security]
 ・安全なプログラミングのためのガイドライン:http://www.FreeBSD.org/ja/security/#spg
 ・Perl security:http://www.perldoc.com/perl5.6/pod/perlsec.html
 ・Perl security和訳:http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsec.html
 ・CGI and Security http://www.ansi.co.jp/tech/cgi/security/
 ・The Unofficial Web Hack FAQ:http://www.nmrc.org/faqs/www/
 ・How to Write Secure Code:http://www.shmoo.com/securecode/
 ・Safe CGI Programming :http://www.improving.org/paulp/cgi-security/safe-cgi.txt
[OS]
 ・Linux日本語マニュアル:http://www.linux.or.jp/JM/
 ・FreeBSD日本語マニュアル:http://www.jp.freebsd.org/man-jp/
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スレ
6nobodyさん:02/03/27 13:02 ID:???
>5
とりあえず、変数に入れずに試してみろ。
自分でも原因究明する努力は忘れずに。

>1:自分はこう言う事がしたい。
>2:それでこんな風にやってみたが・・・
>3:それだとこんなエラーが出て上手く行かなかった。
これ重要。
7nobodyさん:02/03/27 13:08 ID:???
octで8進から10進にしたらとアドバイスしようと思ったが、
頭に0を付ければ8進数として解釈するんでないかい?
8帝国  ◆JXzsccCc :02/03/27 13:32 ID:BFIdDUdC
試したけどダメでした。
9nobodyさん:02/03/27 13:36 ID:???
>8
umask(0);
じゃあ、これをファイル作成の前においてみて。
10nobodyさん: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

このようにしたいのですが
11nobodyさん:02/03/27 15:59 ID:???
>10
最初の要素で@aaaの要素数を渡しておけば?
12 :02/03/27 16:05 ID:lRPZasZ4
すいません今日Perlをはじめたばかりの者です。
今練習でCHATを本のサンプルから作っているのですが、

&ReadPars(*in)

という入力があるのですが、この「*in」とはどのような意味なのでしょう?
もし宜しければご教授ください。
13nobodyさん:02/03/27 16:06 ID:???
普通はリファレンス使うと思う。
ってかなぜmyじゃなくてlocal?
14こちらも初心者:02/03/27 16:14 ID:???
>>12
フォームから渡されるデータを格納するハッシュの名前
&ReadParse(*in);
とするとフォームから渡されたデータが
%inというハッシュに格納される

で良いですよね?>諸先輩方
1513:02/03/27 16:25 ID:lRPZasZ4
>>14
ありがとうございます。
ReadParseというサブクラス(?)に定義されているハッシュに格納するコードを
呼び出してそこに「in」の値を渡し、結果として%inとなるという事ですよね?

では「*」とはどういう意味なのだろう・・・

すいません、せっかく教えていただいているのに・・・
もし宜しければそのあたりが詳しく書いてあるサイトを教えていただけないでしょうか?
検索をかけてもヒットする単語が多すぎて検索できないのです。
1613:02/03/27 16:35 ID:???
何度もすいませんでした。
inが関係ないという事で検索する事ができました。
*とはいろいろな変数の型を纏めて扱えるようになるものだったのですね(語弊あり?)

お邪魔いたしました。
17nobodyさん:02/03/27 16:40 ID:???
&ReadPars(*in)
こんな時代遅れのことをやると恥ずかしいので、忘れた方がいいですよ。
1810:02/03/27 16:42 ID:yW5j0qTy
>>13

>普通はリファレンス使うと思う。
>ってかなぜmyじゃなくてlocal?

myでのパラメータ渡しの記述例
お教えいただけませんか、よろしくお願いします。
19nobodyさん:02/03/27 16:52 ID:???
>>18
localをmyに変えれば?
そして本屋に行ってPerlの本でも買えば?
2010: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冊購入いたしました。
2110: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
こちらのページが大変参考になりました。
22nobodyさん:02/03/27 19:03 ID:???
>>21
レスキューやKENTのようなヘボの模倣しないで、プロトタイプ使えって。

sub manco(\@$)
{
print "$_[0]->[0]\n";
print "$_[1]\n";
}

@a = qw(1 2 3 4 5);
manco(@a, 10);
2310:02/03/27 21:15 ID:???
>>22

ようきけや、22よ、
君いつもいるね。

いつもそんなことばかりやっているね。気付いてるかい?
はっきり言って誰も君のこと相手にしてないよ?わかってるの?
それって、自分ではおもしろいと思ってやっいているんだろうね。
きっと、薄ら笑い浮かべてやっているんだろうね。

でもさぁ、君以外の人には全然おもしろくないんだよ。
もしかして自分でもおもしろくないのにやっているんじゃないの?
自分でも何してるのかわからなくなってるんじゃないの?

家族からも近所からも煙たがられているんだね。
友達も彼女もいないんだね。会社でも浮いているんだね。
どこに行っても相手にされないんだね。

ネットでも無視されてここに流れ着いて来たんだね。
ここでさえ相手にされてないじゃん。どうするの?かわいそうに。
もう駄目じゃん。生きていても何もいいことないよ?
どうせ誰からも相手にされないんだから、死んだ方がいいんじゃない?

相手にされないから奇抜な言動で注目を浴びようと必死なんだね。
始めは少し注意を向けてもらったのだろうけど、もう飽きられて完全に 無視されているね。
おもしろくもないのに、意味不明な事を大量に書かれても目障りなんだよね。
それって迷惑なんだよ?気付いてる?

さようなら。この世から消えてくれ。君いるだけで迷惑。
せめて最後ぐらい人里離れた山の中で自殺してね。
2410: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 ][ ? ]だと問題無く参照できるのですが、
どこか間違ってますでしょうか
25nobodyさん:02/03/27 22:30 ID:???
>>24
プロトタイプは呼び出し前に宣言したヤツしか反映されない。

sub foo( prototypes );

foo(args);

sub foo( prototypes ){
...
}
26nobodyさん:02/03/27 22:42 ID:???
>>23
分かったからとっとと死ね。
27nobodyさん:02/03/27 23:28 ID:???
なんのためにプロトタイプをつかうか説明しろよこのカスどもが!!
まともに説明もできないのかこのガラクタが!!
28nobodyさん:02/03/27 23:50 ID:???
>>27のようなヘボこそ使うことをお勧めする。
君も後10年もすれば必要性がわかるかもね。(プ
29nobodyさん:02/03/27 23:57 ID:???
>>27
自分より上で自分を呼ばれた場合非常に困る。
30nobodyさん:02/03/27 23:58 ID:???
>>29
よって、自分より下に自分のプロトタイプ置くアフォはいない。だね。
31nobodyさん:02/03/28 00:08 ID:???
>28
どうやらオマエは説明もできないのに使ってるようだナ!
知ったかぶりがバレてしまって顔が青ざめて必死になって今調べている姿が
目に浮かぶな! 実にこっけいなピエロ君だなオマエは!
無力なオマエは周りの人たちから陰であざ笑われていることさえも気づかずに
一生を過ごしていく、そんなちっぽけな存在のまま残り少ない人生をひっそりと
過ごしていかなければならないオマエの存在価値は小さ過ぎてどうでもいいことだ。
ただ、いまおれに相手してもらえたことだけでもありがたく思って寝ろ!
32nobodyさん:02/03/28 00:10 ID:???
>>31
>>29-30を理解してからほざけ。な。
33nobodyさん:02/03/28 00:13 ID:???
>>32
馬鹿相手に無茶言うなよw
34nobodyさん:02/03/28 00:25 ID:???
プロトタイプ宣言をしたサブルーチンで再帰させる場合には&をつけないとだめですか?

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;
35nobodyさん:02/03/28 00:30 ID:???
>>34 >>25のようにかける。
sub bar($);
sub bar ($) {
$_[0] == 0 or bar $_[0] - 1;
print $_[0];
}
36nobodyさん:02/03/28 00:34 ID:???
>35
あ、なるほど。勉強になります。
37nobodyさん:02/03/28 05:37 ID:Zku7n2yk
質問があります。
Perlのスクリプトって、いったん全部をコンパイルしてから処理をするのでしょうか?
それとも、そのルーチンで必要な部分だけピックアップしてコンパイルするのでしょうか?

なんでこんな質問をするかといいますと、

if ($hoge) { require "hoge.pl"; &hoge(); }
といったソース書いたとします。
$hogeがtrueにならなかったときには、hoge.plの中にエラーがあっても、
警告されないような気がするんです。

だとするのなら、ケースによって全く異なる処理になるようなルーチンは、別のファイルで
作成した方が、スクリプト自体が小さくなり、より高速に処理が終了するのかな?
という風に想像しているのですが。

「むしろrequireで呼び出すファイル分ディスクアクセスが発生したりいろいろで、
 その場合は遅くなる」
という風な想像もあったりするのですが、その辺みなさんはどうお考えなのか、
ぜひお教え下さい。
38nobodyさん:02/03/28 08:53 ID:???
>>37
man SelfLoaderが参考になると思う。
39ノバ:02/03/28 15:03 ID:B1izX7ck
「data」というフォルダに入っている画像を一覧表示したいんですが
どうすればいいのでしょうか??

フォルダに格納されている画像が6つの時は
★★★
★★★
画像が8つの時は
★★★★
★★★★
このように表示したいです。
40nobodyさん:02/03/28 15:11 ID:???
>>39
してよ。
41nobodyさん:02/03/28 15:12 ID:???
>>39
その★は、画像のサムネイルって意味?それとも
<a href=hoge.jpg>★</a>
っていみ?
42ノバ:02/03/28 15:16 ID:B1izX7ck
>>41
★はサムネイルじゃなくて、生画像です。
43nobodyさん:02/03/28 15:38 ID:???
(open|read|close)dir とか
glob('path/to/images/*.*')とか
`ls path/to/images` とか。
44nobodyさん:02/03/28 17:09 ID:???
>>39
2段にしたいんだよね
だったらファイル数2で割って、そこで改行すれば良い
って俺は3ヶ月ぶりに触ってるからアホ丸出しなんだけど (笑

45nobodyさん:02/03/28 17:14 ID:???
えーと、コード書けない(笑  けどこんな感じかなあ・・・

sub openDir()
 {
   #ディレクトリを開けてファイルを数えて2で割って$linefeedをフラグにする 
   &dispImage($dir,$file,$linefeed);      
   # $dirディレクトリのパス
   # $ファイル名
   # 改行表示用のフラグ
 }

こんな感じで行けると思う  (遅いかな
dispImageを頑張って書いてちょ
46nobodyさん:02/03/28 17:16 ID:???
ああ、変になった

$dir ディレクトリのパス
$file ファイル名
$linefeed 改行表示用のフラグ

#名無しさん@お腹いっぱい じゃ無くなってる!
47nobodyさん:02/03/28 18:00 ID:???
「**というディレクトリの中に**というファイルがあれば」
という意味のif文を教えてください。
48nobodyさん:02/03/28 18:07 ID:???
>>47
if(-e "**/**")
49nobodyさん:02/03/28 18:21 ID:???
>>48
サンクス!
50nobodyさん: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
いたずら電話とはひろゆきらしいな
ひろゆきの陰険さはメルマガ読んでればわかるし、驚きもしないが
それよりも自分への中傷だけには異常に反応するところが愉快だな
51nobodyさん:02/03/28 21:23 ID:???
>50
チョン公ウゼえよ
52nobodyさん:02/03/28 23:17 ID:Pnsb/wgV
IO::Scalar を使わずに標準出力を変数に貯える方法はないでしょうか?
いちいちファイルを作っていたら大変なので困ってます
53nobodyさん:02/03/28 23:23 ID:???
>>52

sub printx
{
my($data) = @_;
push(@buffer,$data);
print $data;
}
54nobodyさん:02/03/28 23:28 ID:???
>>52
IO::Scalarのどこが気に入らないかはっきりしないと助言のしようがない。
塚、変数に入れて、その後どうしたい?
5552:02/03/28 23:30 ID:???
>53
うにゅ? STDOUTに出力される奴を変数に送りたいんです

my $stdout;
tie *STDOUT, 'IO::Scalar', \$stdout;

こんな感じです。ActivePerl だと IO::Scalar がなくて…
5652:02/03/28 23:37 ID:???
>54
ActivePerlの標準インストールベースで動かないといけないので
困ってます
再帰処理で標準出力に吐いているデータを加工するためにバッファ
に貯め込みたいんですが、再帰部分に手を入れたくないんですよ
57nobodyさん: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

になるのはなぜですか?
58nobodyさん:02/03/28 23:58 ID:???
>>55
IO::Scslarハックして、標準インストールでも動くようにする。
59nobodyさん:02/03/29 00:01 ID:???
ppmでIO-stringyをインストールする事すら出来ないのか。
60nobodyさん:02/03/29 00:03 ID:???
>>56
1 ppmでインストールさせる。
1.5 IO::Scalarは一緒に配る。
2 perltie見ながらFILEHANDLEにtie出来るクラス作る。
3 再帰部分に手を入れる。
61nobodyさん:02/03/29 00:14 ID:???
パッケージが限られるのならオーバーライドするって手も無くはないな。
6252:02/03/29 00:17 ID:???
>58-61
うーん、やっぱそうですか
相手が素人さんなのでインストールさせられないんです
中見てみます(ショボーン
・・・作るか
63nobodyさん:02/03/29 00:41 ID:???
>>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;
6457: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」の所の書き方がわかんないです。
教えてくんさい。
66nobodyさん:02/03/29 01:47 ID:???
57のコード
equal
not equal
にはならねぇだよ?
67nobodyさん:02/03/29 02:10 ID:???
for($i=1;$i<=$5;$i++){
print "<input type=text name=$i size=10 value=$value$i>";
}
こういう意味か?
6852: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」に認識されちゃうんです。
なにか良い書き方はありますか?
70nobodyさん:02/03/29 02:54 ID:???
>>69
どういう出力結果を得たいのか、例を実際書いてくれ。
71nobodyさん:02/03/29 03:38 ID:???
>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」のテキストスペースにそれぞれ
「いちばん、にばん、さんばん、よんばん、ごばん」と表示させたいのです。
すいません説明の仕方が下手で。
よろしくお願いします。
73自動ツッコミプログラムV0.01:02/03/29 04:29 ID:???
>>72
配列使えば?
74M:02/03/29 06:31 ID:xslHK9Si
リンク先をフォルダに指定して,そのフォルダ内の特定のファイルを開く
ようにするには,ファイル名を何にすればよいのでしょうか。
75nobodyさん:02/03/29 07:49 ID:???
>>74
読めば読むほど味わいの増す、素晴らしい質問だと思います。
76nobodyさん:02/03/29 07:53 ID:???
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
77nobodyさん:02/03/29 09:37 ID:???
$value1 = いちばん;
$value2 = にばん;
$value3 = さんばん;
$value4 = よんばん;
$value5 = ごばん;
print "<form action=XXX.cgi>";
for($i=1;$i<=$5;$i++){

cgiに書かれている言語なんていうのですか?教えてください
78nobodyさん:02/03/29 09:38 ID:???
スプリクトとCGIと意味が違うのですか?
79nobodyさん:02/03/29 09:46 ID:???
78は神!
80nobodyさん:02/03/29 09:50 ID:???
>72
${"value$i"}
これでいいか?
わかったら帰って宿題やれ。
>73の言うように配列使った方が利口だと思うけどな。
81nobodyさん:02/03/29 10:29 ID:???
>>76はここで、質問するレベルに達していないと思われ。
本読む、初心者向けのサイト見るなどして、レベルアップしてから来い。
ここは一から手取り足取り教えてくれる無料教室じゃないって事だ。
8281:02/03/29 10:31 ID:???
誤爆スマソ >>77
83nobodyさん:02/03/29 10:42 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}, '">';

たぶんね。
84nobodyさん:02/03/29 13:51 ID:GD6wTrbP
いっぺんに複数行コメントするとき
どうすんだ?
Cの
/* */
みたいのないの?
85nobodyさん:02/03/29 13:58 ID:???
>84
全ての行に#を付けて書く。
86nobodyさん:02/03/29 13:58 ID:???
>>84
こんなのもある。

=foo
いっぺんに複数行コメントするとき
どうすんだ?
Cの
/* */
みたいのないの?
=cut

=英字
から
=cut
まで
87nobodyさん:02/03/29 13:59 ID:???
>84
要するに、ない。
どうしてもと言うのなら、使わない変数にヒアドキュメント代入する手もあるけど、メモリの無駄だな。
8885=87:02/03/29 14:00 ID:???
>86
知らなかった。
スマソ。
8986:02/03/29 14:04 ID:???
>>85=87
いや、でもこれは厳密にはコメントじゃないから。

#をつかうとコンパイル時に完全に無視するけど
=は違う、みたいな話があったようななかったような…
90nobodyさん:02/03/29 14:13 ID:GD6wTrbP
ありがと、勉強なたぁ〜
91nobodyさん:02/03/29 16:22 ID:???
$aaa->{'x'}->{'y'}='z' ;
これを
foreach( %aaa )
{
print "$_" ;
}
みたいなかんじで、次々に引っ張ってきたいんですけど、
可能ですか?、出来れば簡単な例など教えて下さい。
92nobodyさん:02/03/29 16:39 ID:???
foreach my $p (keys %{$aaa}){
foreach my $q (keys %{ $aaa->{$p} }){
print "\$aaa->{$p}->{$q} = " . $aaa->{$p}->{$q} ."\n";
}
}
これでいい?
9391:02/03/29 16:50 ID:???
>>92
すごく、ありがとう〜〜〜
惚れました。
94nobodyさん:02/03/29 18:22 ID:???
Data::Dumper使えよ…。
95nobodyさん:02/03/30 12:03 ID:1Ui3rht3
2次元配列の初期化するのに、例えば三列二行の二次元配列を
全て0にするには、
$var = 0 ;
@array = (
[ $var , $var , $var ] ,
[ $var , $var , $var ]
) ;
は分かるのですが、列数と行数を与えて初期化
するのはどのようにしたらいいのでしょうか?
$retsu = 5 ;
$gyou = 3 ;
$var = 0 ;
・・・ここから行き詰まってます。
ヒントでもお教え下さいませ。
96nobodyさん:02/03/30 13:19 ID:???
いまいちなにしたいのかわからんけど。こういうことがしたいの?
$retsu = 5;
$gyou = 3;
$var = 0;

foreach $row (0 .. $gyou - 1) {
    foreach $col (0 .. $retsu - 1) {
        $array[$row][$col] = $var;
    }
}


0にするだけなら@array = ();でもいい気がするけど。
97nobodyさん:02/04/01 04:59 ID:???
アプローダで*.jpgをそのままアプするんじゃなくて
アンカタグでリンクにするのってどうすれば良いですか?
98nobodyさん:02/04/01 06:49 ID:???
>97
画像を表示する部分のタグ変更。
99sato:02/04/01 12:58 ID:???
CGI内にフォームを書いているんですが、
送信ボタンを押した時に、あるサブルーチンへ飛ばしたい場合は
<form action=>の部分にどのように記述すればいいんでしょうか?
100nobodyさん:02/04/01 13:07 ID:???
スクリプト内ではどのようにサブルーチンに飛ばしてますか?
条件があるなら条件を指定して呼び出せば良い。
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が。。。
103100!:02/04/01 13:10 ID:???
やーいやーい
104sato:02/04/01 13:18 ID:???
>>101
フォームが送信された場合のサブルーチン、
ってどうやるんですか??
105nobodyさん:02/04/01 13:26 ID:???
satoのレベルに合わせて解説できる人はすごいと思う。
みんな頑張ってsatoの難題に挑戦してくれ!
106sato:02/04/01 13:27 ID:???
>>105
お願いします。
107nobodyさん:02/04/01 13:36 ID:???
で、satoはどんなことをやりたいの?
108nobodyさん:02/04/01 13:45 ID:2cwLH473
余所のサイトのHTMLをperlで読み込むにはどうやれば良いのですか?
109sato:02/04/01 13:48 ID:???
Aというサブルーチンの処理をさせたいんすけど
それをボタンが押された時に行いたいんです

すなわちtest.cgiの中に

   [追加] [削除]

ボタンがこのようにあるとして、
[追加]を押した時には、サブルーチン sub plus へ。
[削除]を押した時には サブルーチン sub delete へ。

この時<form action=test.cgi method=post>をCGI内に埋め込むと
複数ボタンと複数サブルーチンをどのように処理するのか・・
110nobodyさん:02/04/01 13:55 ID:???
サブルーチンという言葉を知ってるくらいだからプログラム経験者だろう。
条件分岐はわかるね。CGI内では条件分岐して処理を場合わけする。
htmlのボタンごとにcgiの処理を分岐するには呼び出す時点で条件を指定する。
具体的には環境変数というのを使って引数を持たせる。>>101の方法。
mode=plusという引数を持ってたら追加モードへ..ってやる。
あとは「環境変数」で検索してくれ。
111nobodyさん:02/04/01 13:55 ID:???
<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>

112108:02/04/01 15:19 ID:wV1XGpKY
HTMLじゃなくても良いんですけど
他のサイトのデータを読むにはどうすれば良いんでしょうか?
i-modeでソースを見たいんですけど。。。
113108:02/04/01 15:38 ID:???
socket使うのか。。。
勉強しなおしてきまふ。
114nobodyさん:02/04/01 16:46 ID:???
質問!
perlってマインスイーパーとかペイントみたいな
アプリケーションって作れるの?
どうなの?おせーて★
115 ◆Googlexo :02/04/01 16:52 ID:???
>114
・・・・・。ネタですか?
116sato:02/04/01 17:01 ID:???
>>114
それはJavaの仕事。
117nobodyさん:02/04/01 17:05 ID:???
>>114
Perlだから○○はつくれない、ってことはないぞ。
得手不得手はあるにしても。
頑張ればマインスイーパーでもなんでも作れるさ。
118nobodyさん:02/04/01 17:06 ID:???
>>114
できますが、何か?
オライリーの『実用Perlプログラミング』にはテトリスの例があがってるよ。
119nobodyさん:02/04/01 17:48 ID:???
>>116
Javaなんて大がかりなもの持ち出すまでもない。

http://turedure.s8.xrea.com/yourmine/index.html
120nobodyさん:02/04/02 05:14 ID:???
すいません、ファイル内容を全て $_ に入れた後、一行ずつ
スマートに処理をするには、どうすればいいのでしょうか?
一応以下のを考えましたが、m// って遅いしメモリ食うんですよね?

local $_ = '';
while (!eof(STDIN)) { $_ .= STDIN }
&func($_);

sub func {
 local $_ = shift;
 while (m/^(.*?\n)(.*)$/) {
  $_ = $2;
  print $1; # ここら辺にしたい処理を入れる予定
 }
 return 1;
}

他には local @_ = split(/\n/, $_); なども考えましたが、
一瞬だけメモリが二倍要りますし・・・。
あ、サブルーチンには @_ では無く $_ で渡したいのです。
121nobodyさん:02/04/02 06:15 ID:???
>>120
local $_ = '';

個人的には「例のあれ」をプログラマが制御するのには賛同しかねる。

122nobodyさん:02/04/02 07:35 ID:???
>>120
ファイル全部読み込んでメモリも何も無いと思う。
敢えてやるならwhileとm//gかなあ。

$/ = '';
func(<STDIN>);

sub func {
    local $_ = shift;
    print $1 while /(.*\n)/g;
    # ↑処理
}

まあ、ネタなんだろうけど。
123nobodyさん:02/04/02 10:03 ID:???
>120
ネタかな?とも思ったが、一応「初心者スレ」なんで...
どうして変数$_ にファイル内容をすべていれた後に改まって1行ずつ処理をするのかわかりませんが、
結局、メモリをくわないようにファイル処理したいのならば以下のように正攻法でいくのがベターかと。
open(READ, 'filepath');
while (<READ>){
    やりたい処理 if /pattern/;
}

あと、「m// って遅いしメモリ食うんですよね?」とありますが、そんなことはありません。
特に先頭マッチ(m/^pattern/)や後方マッチ(m/pattern$/)は高速だし、1バイト文字に
マッチさせたいのならindex関数を使うほうが高速です。これは結局、処理内容に応じて
最適の処理を模索していくしかないと思いますが、それでもより高速化をもとめるのならば
C的な言語にシフトせざるを得ません。

124nobodyさん:02/04/02 13:32 ID:YZpqqRq/
ファイルを何度もopenしていて、
何回かに一回openに失敗してしまうなんて事はあるのですか?
125nobodyさん:02/04/02 13:38 ID:vQkiGH9y
どっかで閉じ忘れてるとか?
openとcloseの数は合ってますか?
126124:02/04/02 13:52 ID:PEBO6o/o
>>125
すいません。open失敗したわけではないのですが
そういう場合てあるのかな〜?と思ったので。
127Dream ★:02/04/02 13:54 ID:???
>>124
特殊な場合にはあるよ。
ファイルハンドルに使われるメモリが足りなくなったときとか。
128124:02/04/02 14:08 ID:PEBO6o/o
>>127
>ファイルハンドルに使われるメモリが足りなくなったときとか。
こういう場合があるんですね。なるほど。
けど、こんなサーバ使ってられん!てレベルの話ですよね?
レスありがとございます。
129nobodyさん:02/04/02 14:09 ID:aIwf9lEF
dumperで出力したファイルを、取り込みたいですけど、

ソース中に、
my $ref = {
'a' => 1,
'b' => 2
};

こんな感じで初期できますけど、これを、
ファイルにして、そのファイルから

open ( FILE , "<ファイル" ) ;
my $ref = <FILE> ;
close ( FILE ) ;

こんな感じで取り込みたいんです。
(このソースじゃ駄目でしたけど・・・)

どなたか、ご存知でしたら、ご教授ください。
130nobodyさん:02/04/02 14:11 ID:???
>129
require "ファイル";
じゃダメなのか?
131129:02/04/02 14:24 ID:aIwf9lEF
>>130
なるほど!
盲点でした。
ありがとう御座います。
132129:02/04/02 14:27 ID:aIwf9lEF
すいません、またお願いします。
無名リストのに名前を付けれたと、記憶しているのですが、
その記述方法を忘れてしまいました。

$VAR1 = {
'x' => 1,
'y' => 2
};
dumperの結果ですが、変数が$VAR1になってしまうのですが、
これを変えたいのです。
以上よろしくお願いいたします。
133nobodyさん:02/04/02 15:26 ID:YZpqqRq/
大量の分をprintで出力する場合
print <<"EOF";
〜〜大量〜〜
EOF
で出力すると〜〜大量〜〜の分をまとめてメモリに格納しちゃうんですか?
それとも一行づつ処理して
print "〜〜〜";
print "〜〜〜";
print "〜〜〜";
と同じになるのですか?
134Dream ★:02/04/02 16:05 ID:???
>>133
メモリに格納する。メモリが不安なら、
$|=1;
とか使えばいいんじゃなかったかな?
135:02/04/02 16:15 ID:???
バナーを表示した回数とクリックした回数を
テキストに書き出したいんですが、
バナー複数ある場合テキストの中に
$banner, $bannertitle, $url, $hyoujikaisu, $clickkaisu
という風に書き出したいです。

バナー表示回数とクリック回数を
どのように記述すればいいか是非教えて下さい。
136nobodyさん:02/04/02 16:24 ID:???
>>135
そのまんまでいいんじゃない?
まさか、ルーチン書いてくれって事?
137nobodyさん:02/04/02 16:39 ID:???
>>132=129
ドキュメントに書いてあることいちいち聞くなよ。Dumper.pm読んでくれんと、コロ助
138:02/04/02 16:39 ID:???
>.>136
表示回数カウントの方法と、
クリック回数カウントの方法です。
139nobodyさん:02/04/02 17:40 ID:BrKRPiRd
>>134
レスありがとうです。
出力をバッファリングしなくなるのでprint文の
実行と同時に出力してくれるようになる。というやつですね。

これでいちいちメモリに格納しないで直接?出力する。イコール

print <<"EOF";
〜〜大量〜〜
EOF

でも

print "〜〜〜";
print "〜〜〜";

でも同じになるのでしょうか?

140nobodyさん:02/04/02 18:24 ID:???
sub new
{
my $class = shift ;
my ( $filename ) = @_ ;

print "##### $ARGV[ 0 ]\n" ;

my $self = {} ;
bless $self ;
}

クラスのメソッドから、グローバル?の変数参照すんのどうすんの?
141nobodyさん:02/04/02 18:25 ID:???
>>139
効率よく入出力するためのバッファリングなので、あまり気にしすぎない方がいいよ。

手元にある環境で試したけど、標準出力に対し、cygwin版Perlは行バッファリングされていたけど、
ActivePerlはバッファリングされていなかった。
いずれにせよ、STDOUTに対しては完全バッファリングはしてないんちゃうかな?
よくわかんらんけど。
142nobodyさん:02/04/02 18:36 ID:???
>140
main::でアクセスすれば? 行儀悪いと言われるだろうがね。
143140:02/04/02 18:56 ID:???
>>142
すまんけど、その時の記述例をちょろと、お願い。
144nobodyさん:02/04/02 18:57 ID:???
$package::var
145140:02/04/02 18:58 ID:???
>>143
すまそん。
main::$ARGV[ 0 ]
で、できた。
146129:02/04/02 19:24 ID:aIwf9lEF
無名リストに名前を付ける方法を何方か、ご存知ありませんでしょうか、
記述例など、頂けると助かります。
よろしくお願いします。
147nobodyさん:02/04/02 19:27 ID:???
>>146
無名なんだから名前なんてあるわけねーだろ。
148129:02/04/02 19:37 ID:aIwf9lEF
そうでしたか、

では、Dumperで、無名リストを表示する場合、
名前を付ける方法ご存知の型は、居られませんでしょうか、
よろしくお願いします。

>>147
レスありがとう御座います。
ただ、申し訳ありませんが、今後、私の発言に干渉なさらないよう、
お願い申し上げます。
149nobodyさん:02/04/02 19:43 ID:???
>>139
$|=1するしないにかかわらず、
その両者は同じです。
150nobodyさん:02/04/02 19:51 ID:???
Dumper.pmの中に書いてあるっていってんだろ、ボケ。
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
151147: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' ]);
152129:02/04/02 21:19 ID:aIwf9lEF
>>150
>>151
レスありがとう御座います。
ただ、申し訳ありませんが、今後、私の発言に干渉なさらないよう、
お願い申し上げます。

引き続き、ご存知の方宜しくお願いします。
153nobodyさん:02/04/02 21:56 ID:???
>>152

$Data::Dumper::Varname="manco";
print Dumper($manco) ;
これじゃだめ?

ttp://www.xav.com/perl/lib/Data/Dumper.html
このあたり参考になるかも
154139:02/04/02 21:58 ID:wv3Og9zk
>>141>>149
ご丁寧にどうもありがとです。
けど、なんか混乱状態に陥ってます。。。
>>139の両者ともサーバへの負担はかわらずという事ですかね?
155nobodyさん:02/04/02 22:20 ID:???
コンパイル時にその辺は最適化してるんとちゃうかなぁ。
156120:02/04/02 22:36 ID:???
こういうのはネタと言われる程常識外れなのですね。
ソース公開したりして無くて・・・というか、ずっと以前に
公開してた事ありましたが、直ぐに中止してよかった (笑

>>121
m// や s/// 等が続いて switch 分作る時に良くやります。
が、玄人さんは使いたがらないらしいですね。
私は初心者ですのであまり理由がわかりませんが。

>>122-123
自分はまだ「どうにかプログラムを書ける」位のレベルですので、
やっと関数・処理の切り分け、流用・設計を考慮し出したトコなのです。
main ではデータの流れだけを担当し、細かい処理は各関数に
任せた結果が例の処理でした。
で、各関数には @ で渡さず $ で統一したかった、という感じ。

やっぱり >>123 のようなのがやり方が一般的ですよね。
そうすると、便利な関数にはなるのですが、酷いと main 一個だけの
プログラムにもなりかねないので・・・もっと精進します。
有難う御座いました。
157129:02/04/02 23:35 ID:???
>>153
レスありがとう御座います。助かりました。
URLも参考になりました。
とりあえず、このような形で解決できました。
ありがとうございました。

$aa->{ 'aa' } = 'aa' ;
$Data::Dumper::Terse = 1 ;
print '$aaa = ' . Dumper( $aa ) ;

結果:
$aaa = {
aa => "aa"
}
158nobodyさん:02/04/03 00:09 ID:???
package manco ;
$manco='manco';

こんなふうにして、staitc?な変数置きたいんだけど、
駄目?
159158:02/04/03 00:18 ID:???
>>158
use strict ;
してたからだた
でも、どして?
160nobodyさん:02/04/03 00:24 ID:???
>>159
ourしる
161158:02/04/03 00:56 ID:???
use strict ;
package manco ;
my $manco='manco';
だったぁ〜
162nobodyさん:02/04/03 01:03 ID:???
use strict;
package system;
$system::logfile = 'bbs.log';
package main;
my $filename = $system::logfile;

こういう事じゃなくて?
163nobodyさん:02/04/03 01:23 ID:???
>161
わざわざそんなことしてなんになるのか?
ただのアホだな! アホのくせに書き込むんじゃねーよ!

164nobodyさん:02/04/03 02:53 ID:Hn4nUBfc
cgiファイルの中にアクセス解析のCGIを組み込みたいんですが
そういうのって可能ですか?

例えば、htmlの場合
<html>
<!--#exec cgi="cgi-bin/accesskaiseki/accesskaiseki.cgi"-->
</html>
みたいに記述すればOKですが、同じ文章を
CGIファイルの中に付け足しても無理ですよね。
アホな質問かもしれませんがわかる方いたら教えてください。
165nobodyさん:02/04/03 02:59 ID:???
>>156
>やっと関数・処理の切り分け、流用・設計を考慮し出したトコなのです。
>main ではデータの流れだけを担当し、細かい処理は各関数に
>任せた結果が例の処理でした。
>で、各関数には @ で渡さず $ で統一したかった、という感じ。
なるほど、意図が判った。
そういうときは、私はファイル名、もしくはファイルハンドルを関数に渡します。
166nobodyさん:02/04/03 03:19 ID:???
>>164
CGIの中から、LWPでアクセス解析CGIをGETするのがいいかな。
167nobodyさん:02/04/03 03:47 ID:???
>>164
動いてるそのCGIで解析するべきだと思うが。。。
168nobody:02/04/03 04:15 ID:???
>>164
具体的に何のCGIに入れるのか分からないが、
掲示板みたいのなら上の方の設定部分に
$honyarara='<!--#exec cgi="cgi-bin/accesskaiseki/accesskaiseki.cgi"-->\n';
とやっておいてhtml表示部分に
print "$honyarara";
を足す。多分だけどな。
うまく行ったら私の幸せでも祈ってください。
169166:02/04/03 04:28 ID:???
>>168
少なくとも以前apacheで試した時は、CGI出力に対してSSIは
適用されなかったなり。
170168:02/04/03 04:41 ID:???
そうでしたか。

しかも間違えてたよ。
$honyarara='<!--#exec cgi="cgi-bin/accesskaiseki/accesskaiseki.cgi"-->';
print "$honyarara\n";
だよ。(鬱
逝ってきます。

164は166の方法が難しいときはSSIでなくCGIのアクセス解析にしてimgタグを上記方法で埋め込んで下さい。
171nobodyさん:02/04/03 11:21 ID:???
print $file{ 'fh' } $str ;
こんな感じで、ファイルハンドルをハッシュの中にいれて使おうと思ったんだけど、
うまくいかんかったのだけど、どして?
172nobodyさん:02/04/03 11:28 ID:???
最近、煽ってるやついっけど、
そういう奴は、すっこんでろよ。
ここは、【Perl】初心者コーナーだ。
質問する訳でもなく、答える気も無い奴は、
しゃべるなってこった。わかったか?
173nobodyさん:02/04/03 11:41 ID:???
>172
初心者に質問の仕方を教えてますがなにか?
まずは質問の仕方を覚えるのが大事。
質問の仕方がわかるようになれば、問題の解決法を調べる方法もわかるようになってくる。
そうすれば他人に聞かずとも自分で調べる事もできるようになるしな。
回答を教えるだけが親切ではない。
174nobodyさん:02/04/03 12:00 ID:???
>>173
漏れが、いいたいのはさ、
「そんな事もしらねぇ〜書き込むんじゃねぇ〜よ」
みたいな事いってるのよ、

あんたの、その上から人を見るような、口調は、正直気に入らないが、
教えて欲しい人には、利益になるから、いんじゃねか
175nobodyさん:02/04/03 12:58 ID:???
あまり素直に答えて居座られても困ります。
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
177nobodyさん:02/04/03 13:18 ID:???
>>171
そういう構文が許されていないから。
178nobodyさん:02/04/03 13:19 ID:???
>>176
> どー書いたらいいでしょか?w
幸せそうですね。何か愉快な事でもあったのですか?

179nobodyさん:02/04/03 13:23 ID:???
>>176
>$cgi{$name} = $val;
素直に↑を使ったらいいと思うけどダメな理由でもあるの?
180179:02/04/03 13:27 ID:???
ネタだったのか。まじめに答えてしまった。鬱だ氏脳。さようなら。
181nobodyさん:02/04/03 13:48 ID:???
>>177
とりあえず、
print $file{ 'fh' } $str ;

$fh = $file{ 'fh' } ;
print $fh $str ;
って対処してはいるんだけど、
なんかスマートじゃないなーって思って質問したんやけど、
これで、あってるのかしら?
182nobodyさん:02/04/03 13:59 ID:???
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;
184nobodyさん:02/04/03 16:05 ID:???
>>181
>>1から引用
> 1:自分はこう言う事がしたい。
> 2:それでこんな風にやってみたが・・・
> 3:それだとこんなエラーが出て上手く行かなかった。

肝心の「何がしたいか」を書かないでまともな返事を期待するなよ。

アンタのやりたいことは多分これだと思うが。
-- begin code --
print { $file{fh} } $str
-- end code --
185nobodyさん:02/04/03 16:06 ID:???
>>183
Hashってのはそういう仕様なんだよ。
順番に表示したきゃsort keys %hashやTie::IxHash、DB_FileのDB_BTREEでも使えや。
186183:02/04/03 16:18 ID:7cQZbwjH
>>185
どうも有難うございました。そういう仕様なのですね。納得です。
勉強してまた、出直してきます。
187nobodyさん:02/04/03 16:29 ID:???
>183
sortを使ってハッシュの中身を整列してから表示するという手もある。
188183:02/04/03 16:38 ID:???
なるほど〜。sortを使う方法ならできそうですね。
ところで、hash は順番めちゃくちゃに表示っていうのは
毎回ランダムに順番が代わるのでしょうか?それとも何か規則性あるんですか?
189181:02/04/03 16:42 ID:???
>>184
>肝心の「何がしたいか」を書かないでまともな返事を期待するなよ。
そうだね、申し訳ない。
ありがと
190nobodyさん:02/04/03 16:54 ID:???
>>188
順番は変化します。
基本的には恐らくハッシュ値の順とかだろうけど、同じハッシュ値の場合は
格納した順によって変化するはずなので、同じ順番に並ぶことを
期待しない方がいいと思う。
以上適当な解答なので、どうしても気になるならPerlのソースコードでも
見て確かめてください。
ハッシュについてはC言語のアルゴリズムの本をみればよく分かると思う。
191nobodyさん:02/04/03 17:09 ID:???
>188
モジュールで整列できる物がある。
・・・以前JAPUさんに教えてもらったのにログが見つからない。(涙
192 :02/04/03 18:02 ID:???
掲示板とかで入力された内容を確認画面を1ページはさんで
次のページにデータを渡すには、どうすればいいのでしょうか・・・。

193nobodyさん:02/04/03 18:34 ID:???
>192
<input type=hidden〜〜〜>
で渡す。
194nobodyさん:02/04/03 18:39 ID:???
確認画面に書き出すリンクのurlを
〜〜.cgi?comment=sage
ってするか、フォームボタン作って
<input type="hidden" name="comment" value="sage">
ってする。もしくはjavascript使って併用することもできる。
あとはクッキー使う方法もある。削除パスワードとか。
195192:02/04/03 18:44 ID:???
どうも有難うございました!!!!!!!
<input type="hidden" 〜
で解決しました。皆様方に感謝です。
196nobodyさん:02/04/03 21:56 ID:???
メソッドから、メンバーのメソッドを呼ぶときの引数について
なんですけど

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" ) ;
と、なっちゃったんだけど、できれば引数の数が変わるのは、避けたいいんだけど、
これは、言語仕様すか?
それとも、記述の仕方間違ってます?
197nobodyさん:02/04/03 22:05 ID:???
>>196
何が言いたいのかよくわからんな。
もう少し纏めてから再度質問されたし。
198nobodyさん:02/04/03 22:16 ID:???
メソッドBから呼ぶときは
$self→a("call a");
ってやりなされ。
199nobodyさん:02/04/04 00:06 ID:???
>>198
なるほどぉ〜〜〜〜〜〜〜〜!!!
そっかぁ〜、
ありがとう!!!!!!
200nobodyさん:02/04/04 01:44 ID:???
>>183
漏れは、
$FORM{$key} = $value;
push(@FORM_ORDER,$key);
てな感じでキーの順序を覚えておいて、
foreach(@FORM_ORDER) {...}
で回すだす。
201nobodyさん:02/04/04 10:04 ID:???
フォームのキーの並び順に依存するのは止めた方が…。
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をする感じでいいのでしょうか。。。
203nobodyさん:02/04/04 15:16 ID:???
>202
もう少しわかりやすく。
何をやりたいかよくわからない。
204202:02/04/04 15:22 ID:???
えと・・・

書き込みにNoをつけたいんです;−;
1番目記事,2番目の記事って感じに。
205nobodyさん:02/04/04 15:23 ID:???
>>202
どのみちそれじゃ上書きになってるから1個しか表示されないよ。
206nobodyさん:02/04/04 15:25 ID:???
>204
ログにナンバーを振るのでなく、表示の際にナンバーを振っていく方がいいと思うが
それじゃダメなのかな?
207202: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 $_;
209nobodyさん:02/04/04 16:00 ID:???
>>202
http://www.nn.iij4u.or.jp/~nabe/osietekunn.html
君はなかなかの教えてクンだ。
だが今一歩足りないな。

もっと無意味な情報をこれ見よがしに提示し、
自分の考えを捻じ曲げて喚き散らし、
狂ったように答えを催促すれば誰しも認める第一級教えてクンになれるゾ!
210202:02/04/04 16:04 ID:???
>>209

了解!第一級教えてクンになれるように頑張ります。

では逝って来ます。
211fdg: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]のように一個一個要素を取り出せば上手くいきました)

何かスマートな方法はないでしょうか?
213nobodyさん:02/04/04 23:19 ID:???
>>212
参照使うのがトレンドのようです。
214nobodyさん:02/04/04 23:19 ID:???
@$array_ref
215nobodyさん:02/04/04 23:35 ID:???
まだかなまだかな・・・(いつものプロトタイプさんが来るのを待っている)
216 ◆Ihiuc0j. :02/04/04 23:37 ID:zyOMuMfg
>>213
うお、あっさり出来たΣ(゜っ゜
サンクス!
217nobodyさん:02/04/04 23:49 ID:???
あっさりできちゃったのか。プロトタイプ漫才見たかったのにー!
218nobodyさん:02/04/05 00:24 ID:???
>>212

sub test(\@\$\@);

test(@data, $data, @data2);

sub test(\@\$\@){
local(*ary, *scl, *ary2) = @_;
# ...
}
219nobodyさん:02/04/05 01:24 ID:zs6TJzXI
Perlのサブルーチンの引数はPerl内部では参照渡しされてるらしいのですが
returnで値を返すときも内部では参照を返しているのでしょうか?
220nobodyさん:02/04/05 01:30 ID:9ypevpef
だれかまたプロトタイプがらみの質問して。
プロトタイプ野郎を見たいので。
221nobodyさん:02/04/05 01:39 ID:???
>219
サブルーチン内でmy宣言した変数をreturnできることを考えればわかるだろ!
このうすらハゲが!
222nobodyさん:02/04/05 01:54 ID:???
>このうすらハゲが!
バレタ!?(;゚д゚|||
223 :02/04/05 03:00 ID:don7TGy+
ヒアドキュメントの終わりの文をインデントすると違う文字列として認識されてしまいますよね?
ヒアドキュメントを含む部分をサブルーチンにしたい場合、どうしてますか?
224nobodyさん:02/04/05 03:37 ID:???
>>223
意味がよくわからないけど,こういう事?

&foo(<<"    HERE-DOC");
        here-document
    HERE-DOC

インデントに使用した文字(タブとか)も判定に使われる.
perldataのScalar value constructorsを読むと参考になると思う.
225 :02/04/05 04:11 ID:don7TGy+
ありがとうございますー。
英文は読みませんでしたけど、コードの例見たらわかりました。
英文って読む気がしないんですけど、
やっぱり読むほうが普通なんでしょうかね。
226nobodyさん:02/04/05 04:22 ID:???
>>221
おまえ、いつも一言よけいだよ、
部外者だが、見るとムカツク
227nobodyさん:02/04/05 04:24 ID:???
>>225
英語が読めると(Perlに限らず)世界は確実に広がる.
読もうとしなければいつまでも読めないまま.
読むスピードはそのうち速くなるから,頑張り過ぎない程度に気軽に読むのが良いかと.

知っている内容が多いperldocは読み易かったよ,おれの場合.
228nobodyさん:02/04/05 07:21 ID:???
>227
お前に能書き垂れられる筋合いじゃネーヨ
何様だオマエ???(゚Д゚)
229Dream ★:02/04/05 07:27 ID:???
>>227
わかっていてもなかなかね。
英語の読解力付けたいんじゃなくて、Perlで目的の
処理が出来たらいいわけなんで、ついつい。。。
230nobodyさん:02/04/05 07:52 ID:???
>>229
漏れの場合、UNIXのmanを読むうち、いつのまにか
マニュアル英語だけは読めるようになってたよ。
構文が単純だからかねぇ。
もちろん日本語訳があれば、そっちを先に見ます。
231nobodyさん:02/04/05 08:07 ID:???
http://learn.perl.org/で英語のメーリングリストにでも入れば
少しは英語に慣れるんじゃない?
たまにRandal L. Schwartzが答えるね。
232nobodyさん:02/04/05 15:16 ID:cQRjW2rJ
Perl cookbookはどうですか?
effective perlはなかなか評判は良いようですが、こちらのほうはどうでしょう?
近くの本屋に売っていないもので、具体的内容が確かめられません。
233nobodyさん:02/04/05 15:18 ID:???
参考書籍スレと間違えた、、、
234727:02/04/05 16:11 ID:Oqnvheag
参考書籍の727ですが、呼びました?

けっこう高額だそうですね。
235nobodyさん: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つかって
ホスト名に出来るようにしていきたいと思っています。
236nobodyさん:02/04/05 16:39 ID:???
>>235
Perlじゃなくてもawkで事足りる気もするけどね。
237nobodyさん:02/04/05 16:44 ID:???
>>235
とりあえず、どこまで分かってて、どこでつまずいてるの?
238235:02/04/05 16:53 ID:7CGZnUtF
#!/usr/bin/perl
while(<STDIN>){
print;
}

まずなにからやっていけばいいのかが解ってないレベルです。
もうしわけないです。
配列にデータを入れていかないといけないのか?とか
基本的な所から解ってないです。
発想ができてない状況なのでとりあえずこういうのをやってみろとか
ありましたら是非ともよろしくお願いします。
239nobodyさん:02/04/05 17:09 ID:???
>238
#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "Hello world!!";

まずここから。
240nobodyさん:02/04/05 17:13 ID:???
>239
なんでCGIになってるんだ?
241nobodyさん:02/04/05 17:14 ID:???
すみません、ついクセで・・・
242nobodyさん:02/04/05 17:30 ID:???
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]" : '';
}
243235: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);のあたりが
まったくわからないのですが勉強させていただきます。

本当にありがとうございました。
244235:02/04/05 18:15 ID:7CGZnUtF
うわ。print $3とかめちゃはずかし。
245nobodyさん:02/04/05 20:32 ID:???
日本語文字列から日本語を検索したいんですが、
/$keyword/
のようにすると、$keyword の内容が2バイト文字で、その中の一文字に
「\」とか「|」が混じってると普通に検索できません。
なにかいい方法ありませんか?
246nobodyさん:02/04/05 20:42 ID:???
/\Q$keyword\E/
247nobodyさん:02/04/05 21:53 ID:???
>>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;
249nobodyさん:02/04/06 21:30 ID:???
>248
DBMなんぞよりPerlの勉強をしたほうがいいね。
250nobodyさん:02/04/06 21:39 ID:???
ヽ(`Д´)ノ 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.
251Dream ★:02/04/06 21:48 ID:???
>>248
$COUNT['now'}に変えてみそ?
252nobodyさん:02/04/06 21:54 ID:???
>>251
あんたもどうかと思うよ。

>>248
そもそも$datはどこいった。
253nobodyさん:02/04/06 21:58 ID:???
つーか、CGI::Carp使えYO…
254248: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 っていうのが、今使っているサーバだとでてくれないので
間違いを見つけるのが大変なのですが、何をすれば表示されるのですか?
255nobodyさん:02/04/06 22:06 ID:???
>>254
use CGI::Carp qw(fatalsToBrowser);

つか、大丈夫ですか、と質問する前に試したらどうだよ。
だがもちろん共用サーバではやるなよ。
256248:02/04/06 22:07 ID:???
>>255
実は全然動いてくれませんでした・・・(泣
257nobodyさん:02/04/06 22:17 ID:???
>>256
自分の情報を出し惜しみするな。

で、CGI::Carpを使った結果はどうなんだ?
258nobodyさん:02/04/06 22:25 ID:???
248さん、自分のパソコンにPerlは入ってないの?いくじなし。
259nobodyさん: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);
なのですが上手く動きません。

上記動作をするにはどうすればよろしいでしょうか?
お教え願えないでしょうか。
260259:02/04/06 22:46 ID:b9SW2YHj
>>259
print scalar @kazu;
でした。; が抜けてました。
でも 考えているようには動きません。
261nobodyさん:02/04/06 22:51 ID:???
>>259
オマエ$_とか<IO>の意味わかってないだろ。
今回は教えてやるから、何か一つマトモな本を読む(そして理解する)ことをおすすめするぞ。


open IN, "test.txt";
print scalar(split), "\n" while <IN>
close IN;
262nobodyさん:02/04/06 22:52 ID:???
>>261
イタイソースですね。
263259: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);
でしたね。すみません。

264261:02/04/06 22:54 ID:???
ごめんなさい。偉そうなこといって置きならが<IN>の後ろに";"が抜けてました。鬱だし脳。
>>262 仰るとおり。 逝って来ます。
265259:02/04/06 22:54 ID:b9SW2YHj
>>261
ありがとうございます。
ただいま勉強中です。
266nobodyさん:02/04/06 22:56 ID:???
>>259
open(IN,"test.txt");
while(<IN>){
  split(/ /,$_);
  print "$#_\n";
}
close(IN);

これでどうかしら?
267266:02/04/06 22:58 ID:???
あ、すげー進みが速い
268261:02/04/06 23:00 ID:???
>>266
それは本来望む値より1少ない上に@_を破壊してしまうのであまりよろしくないのでは。
269nobodyさん:02/04/06 23:00 ID:???
アイタタタタ…名前消し忘れた(鬱
270259:02/04/06 23:01 ID:b9SW2YHj
>>261
<IO>とは何の事でしょうか?
Input,Outputでしょうか。

$_ は STDINファイルハンドルから読み取ったものを、
変数で指定しなかった場合に、戻り値を自動的に代入する変数という事でOKでしょうか?

良かったらお教え下さい。
271266:02/04/06 23:01 ID:???
>>268
あ。
ごもっとも。
全然ダメでした(笑
272nobodyさん:02/04/06 23:19 ID:???
>>270
IOがInput/Outputってのはよしだが、
ここでは"IO"ってのは"X"と同じく、「何らかのファイルハンドル」って意味で使った。
で、俺が言いたかったのは<>(ヤマカッコ演算子)のこと。
<IO>でファイルハンドル"IO"から一行または全行読み込み、
whileなどの中ではデフォルトの代入先として$_が使われる、と。
試しに
<IO>;
とだけしても$_にはなにも読み込まれない。

で、$_ってのは幾つかの演算子/関数においてのデフォルトの使用変数。
>>261で示した"scalar(split)"のsplitの第二引数も$_なのでこんなこともできる。
(ちなみにデフォルトの第一引数は' 'だ。)

つーようなことが>>259のコードを見て理解しているとは思えなかったわけだ。
そんだけ。もう寝る。
273nobodyさん:02/04/06 23:28 ID:???
そうか、ヤマカッコって読めば良かったのか。
今まで、「不等号の記号」とか言ってて、わずらわしかったんだよな・・・
274nobodyさん:02/04/06 23:30 ID:???
> 不等号の記号
それくらいなら「小なり大なり」と家YO!
275259:02/04/06 23:34 ID:b9SW2YHj
>>272
おっしゃるとおりで、理解できていません。
これから勉強します。
丁寧なご説明有り難う御座いました。

276nobodyさん:02/04/06 23:48 ID:cii4pUwI
SSIの呼び出しって、相対パスじゃないと動かないんでしょうか?
絶対パスで書くとエラーが出ます。

例えば
<!--#exec cgi="../a.cgi"-->
ならOKですけど絶対パスで
<!--#exec cgi="www/usr/a.cgi"-->
だとエラー出ます。(↑の絶対パスは例)

絶対パスは間違ってないはずなんですが。
それとも間違ってるからエラーなんでしょうか。
277nobodyさん:02/04/06 23:52 ID:???
>>276
例に間違い。

www/usr/a.cgi

死ぬほど相対パスです。これ。
278nobodyさん:02/04/06 23:58 ID:???
素朴な疑問ですが、

$new = time();
($sec, $min, $hour, $day, $mon, $year) = localtime($new);

とした、$monは+1しないといけないのに、
$dayはそのままでもいいんですか。
そういう仕様にした理由ってなんでしょ。
279nobodyさん:02/04/06 23:58 ID:cii4pUwI
>>277
いや、だから例、って念を押してるじゃん・・
例が思いつかなかったからそう書いたんだけど
/home/aaa/public_html/a.cgi
これって絶対パスですよね?こういう指定をやってもエラー出る。
http://www.aaa.com/a.cgiでもエラー
280nobodyさん:02/04/06 23:59 ID:rWktCpba
/home/aaa/public_html/a.cgi

相対パス
281nobodyさん:02/04/07 00:00 ID:???
>>280
(゚Д゚)ハァ?
知ったかやめれ。
282nobodyさん:02/04/07 00:01 ID:???
知ったかぶりも常駐するようになったか。このスレ。
283nobodyさん:02/04/07 00:03 ID:???
>>276
絶対パスは使えないことがある。詳しくはここ参照。
http://tohoho.wakusei.ne.jp/wwwssi.htm

>>277>>280
真性か?
284nobodyさん:02/04/07 00:04 ID:D+FXhcqD
知ったかマンセー
285nobodyさん:02/04/07 00:57 ID:???
>>278
('Jan','Feb','Mar')[$mon]
みたいに使え
286nobodyさん:02/04/07 00:58 ID:???
>>278
それは日が1から始るなら月も1からにせんかい!
ってことなんだろうけど、月の表記は日本のように数的でなく
Januaryなどのように文字で表すのが一般的だからじゃない?
日は1st, 2ndって数での記述が普通だからそれに合わせたんでしょ、おそらく。
287nobodyさん:02/04/07 03:14 ID:???
>286
違う、知ったかカコワルイ
288nobodyさん:02/04/07 03:29 ID:???
>>287
なら理由かけよ。うぜえ。
289278:02/04/07 05:18 ID:???
>>286氏のレスに納得!・・・・したかったけど、違うのか・・・。
>>287氏、教えてください。どして?
290nobodyさん:02/04/07 07:03 ID:???
モジュールについてなんだけど、
Perlのモジュールって、ネイティブコードで動くの?
ようするに、早いの?

なんか/usr/lib/perl5/に
ごちゃっといっぱい入ってるんだけど、
皆、?,pmとか、?.plなんだよね、これって普通のソースだよね、
単に、requireでファイルをインクルード
してるのと、変わらないのかしら?
どうなの?
291k:02/04/07 07:48 ID:1Y8RzvgS
joyful noteって画像掲示板使ってるんですが、
「返信」とか「次の1件」とかのボタンをボタンじゃなくて
画像にしたい場合はどうすればいいですか?
292nobodyさん:02/04/07 08:10 ID:???
第一に、その掲示板を知らないと誰も答えられない。
第二に、それを知らなくてもできる方法はあるがperlは関係ない。
掲示板の作者に聞くか、ウェブ制作板のjavascript関係のスレで質問しましょう。
293nobodyさん:02/04/07 08:46 ID:???
>>290 useとrequireの違いから勉強してください。
294nobodyさん:02/04/07 10:02 ID:l6zqVn0k
295nobodyさん:02/04/07 10:12 ID:???
>>294
噂の再帰処理ですか。
296nobodyさん:02/04/07 12:15 ID:???
>>278 287じゃないが。
答えはstruct tmの中。
tm_monが例外なのではなく、tm_mdayが例外。
297292:02/04/07 12:36 ID:???
>294
再帰ックなレスだな。
なるほど..画像といったらアンカータグかと..。
まあ「ボタンじゃなくて..」っていう>>291は画像貼り付けたボタンもNGかもね。
298nobodyさん:02/04/07 12:50 ID:KHtC3gVA
掲示板で、Proxy規制機能をつけようと思っています。
今は正規表現でホストにproxy ns cacheを含むリモートホストを弾くようにしているのですが
他に追加すべき単語はあるでしょうか?

海外の匿名串は弾けなさそう・・・
299nobodyさん:02/04/07 12:52 ID:???
>>298
2ch式にプロキシサーバにアクセスしてみるって方がいいかもね。
300298:02/04/07 13:55 ID:KHtC3gVA
>>299
それも考えたんだけどポートスキャンしないとダメだから
大掛かりなスクリプトを組まないとだめだろうなぁ。
cookieを併用してみるのも考えてみます。

ありがとうございます。
301 :02/04/07 15:23 ID:V4vspG98
正規表現で
ある変数のなかのメッセージから改行コードをマッチングさせて
改行が特定の数になったらそれ以降を切り捨てるやりかたをおしえてください
302nobodyさん:02/04/07 15:53 ID:???
$n = 特定の数;

$message =~ s/\n{$n,}//g;
303nobodyさん:02/04/07 15:55 ID:???
$str =~ s/((?:[^\n]*\n){3})[\w\W]*/$1/;
改行3個目以降切り捨て。
多分最適化の余地あり。
304nobodyさん:02/04/07 17:54 ID:???
>>301
$str = ($str =~ /^((?:.*\n){$limit})/ ? $1 : $str);
303氏のよりも少しだけ速い
305 :02/04/07 19:04 ID:V4vspG98
>>302-304
ありがとうございます
306nobodyさん:02/04/07 19:08 ID:???
<>←→<>の変換をしたいのですが、
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
これだと全部<>になってしまいますよね?
なんかいい方法はないでしょうか?

具体的には <<<<>><を <<<<>>< みたいな感じにしたいのですけれど。。
いろいろ探したのですが見つかりませんでした。。
307nobodyさん:02/04/07 19:20 ID:???
>306
&は&amp;と書くか全角で&と書くかしてくれ
308nobodyさん:02/04/07 19:53 ID:???
スカラー値で扱える最大値しりたいんだけど、
Cのlimit.hの
$_ = INT_MAX - 1 ;
みたいな事したいのだ!
309nobodyさん:02/04/07 20:46 ID:???
多分LONG_MAX あたりじゃないの?

310 :02/04/07 20:59 ID:V4vspG98
>>303の方に教えていただいたのはうまくいったんですが
>>304の方のほうがうまくいきません。
私のせいかもしれませんがどこがわるいのかわからないです・・・
311nobodyさん:02/04/07 21:00 ID:mbQ4bo4F
こんばんは。
データファイル内のあるデータと一致する行だけを消す方法で
定番のやり方はあるのでしょうか?
ファイルを全部読み込んで、リストにして一致する行以外を
別のリストに作成して、書き込む方法では力づくっぽい気がしまして・・
ご教授よろしくお願いします。

312nobodyさん:02/04/07 21:18 ID:???
>310
改行数の設定はちゃんとしてる?
my $limit = 3;
313nobodyさん:02/04/07 21:39 ID:???
>311
ファイルを1行ずつ読み、あるデータと一致しない行を
適当なファイルに書き出していく。
そのファイルを元ファイルと置き換える。

ってのが定番でないかな。最適かどうかは知らんけど。
314 :02/04/07 21:42 ID:V4vspG98
>>312
はい、というか直接数字いれました・・・
315nobodyさん:02/04/07 22:04 ID:???
>314
じゃあヽ( ´ー`)ノワガンネース。漏れのところではきっちり動くんだけどなあ。
perl -w とか use strict; とかしたらエラーは出る?
316やさしいお兄さん:02/04/07 22:53 ID:???
>314
どうやらこの板は初心者ばかりのようだからわたしがこたえておきましょう。
一応、複数環境(OS)対応版をつくってみました。まちがってたらツッコメや!

my( $nl      )= "\x0d?\x0a|\x0d"; # 複数環境用改行パターンテンプレート
my( @lim    )= (0, 3);  # 繰り返し回数設定
my( $set    );           # 取り出し文字列セット用

;# パターンをセットする
($set)= /^((?:(?:(?!$nl).)*(?:$nl)?){$lim[$[],$lim[$[+1]})/o;
317やさしいお兄さん:02/04/07 23:06 ID:???
>311, 313
痛々しくてみてなれないネー!
なぜハッシュをつかわないのか? こういうときのためのハッシュだと必ず本には書いてある
はずだが、まだ理解できてないようだな!
318nobodyさん:02/04/07 23:09 ID:???
>>316
一応煽ってあげよう。
この板は初心者ばかりとか言っておきながら間違ってたらツッコメってどーゆーことだ。
この板の連中よりも上級者なら自分で考えろ。

で、 >>314は303方式で出来てるならそれでいいmでは?
304の方が確かにちょっと速いだろうけど、316は303よりも遅そうだし。
こんなところで引っかかるよりも、作りたいものを完成させるのが先だと思う。
319nobodyさん:02/04/07 23:09 ID:???
>>317
本来の使い方ではないがな。
320nobodyさん:02/04/07 23:10 ID:???
>>317
>こういうときのためのハッシュだ

こんなアグレッシブな文体の本はクソに決まっています。
321nobodyさん:02/04/07 23:35 ID:???
>>317
ハァ?
322nobodyさん:02/04/07 23:41 ID:???
中々面白い奴が来たな。
323やさしいお兄さん:02/04/07 23:49 ID:???
>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)
324nobodyさん:02/04/07 23:49 ID:???
>>308
perlのスカラーはintじゃないという罠を踏まえたうえで、
とりあえず概算でいいなら、こんなんで。
$i = 1;
print $i*=10,"\n" while $i ne Inf;
325(・∀・)イイ!:02/04/07 23:49 ID:???
春本番の時は寂しかったけど、今になってたくさん出てきましたね。
とかく月曜日は閑散となりがちなので、明日も気合いを入れてがんがろう!
326nobodyさん: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)
って見るんだけど、これってどうやって取るの?
方法知りたいです。
327nobodyさん:02/04/08 01:46 ID:???
>>326
ストップウォッチ
328nobodyさん:02/04/08 01:49 ID:???
>>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
ストップウォッチ
329nobodyさん:02/04/08 01:50 ID:???
・゚・(ノД`)・゚・。ストプヲチ コワレタヨー
http://www.perldoc.com/perl5.6.1/lib/Benchmark.html
330 :02/04/08 15:23 ID:cplvHQS4
>>328
ありがとうございます。
もう正規表現わけわからんので正規表現だけの本購入しました。
PERLリファレンス系だと細かく書いてないので
正規表現奥が深いですね
331nobodyさん:02/04/08 18:22 ID:???
>>330
人が書いた正規表現は、まさに「魔法の呪文」みたいなもんで、
使ってみれば確かに効果は出るんだけど、それがどういう理屈で
そうなるのか解読するのは骨が折れるんだよね。
332nobodyさん:02/04/08 21:40 ID:dY0mSfL0
やっと、カーネル・サンダースの呪いの期限が切れた。
阪神は本来、神のチーム。
これくらいのゲームができて当たり前。
1938年に開幕7連勝した時に阪神は優勝した。
今年も9割方優勝する。
阪神電鉄の株価もウナギ昇りだ。
優勝すれば経済効果も核爆弾級だろう。
現在、阪神ファンの脳内モルヒネ分泌量は最高だ。
仕事にも遊びにもハリが出る。
阪神ファンが勝ち味に飢えていたが故に。
カーネル・サンダースは俺たち阪神ファンに17年間の試練を与えた。
今はそのことに感謝したい。
昼食時には是非ともKFCを利用したいと思っている。
333nobodyさん:02/04/08 23:00 ID:9Gr66QZ9
KENTのYYBBSについてなんですが、
表を細く平面的にしたいんですけど、
(こんな感じ→ttp://www2.pure.cc/~cle/yy-bbs/yybbs.cgi
どこをどういじれば良いかさっぱりです。
誰かお願い。
334nobodyさん:02/04/08 23:09 ID:???
>>333
消えろ。スレ違いだ。
335nobodyさん:02/04/09 00:44 ID:???
tu-ka,板違い。
Web製作板でスタイルシートのスレ探しに行け。
336nobodyさん:02/04/09 03:59 ID:???
>>334 335
うるせーんだよヴォケが!!!!!!!!!!
337nobodyさん:02/04/09 05:56 ID:???
>>336

>うるせーんだよヴォケが!!!!!!!!!!

この感嘆符の多さが、いい怒りの表現だね、
338306:02/04/09 06:08 ID:???
>307
すいません。えっと、
< &lt; < > &gt; < を &lt; < &lt; &gt; > &lt;
みたいに&lt;&gt;←→<>の相互変換をしたいのです。。
339nobodyさん:02/04/09 06:49 ID:N8wWg1s7
すいません、リストの取り出しについてなんですが
@list = (A,B,C,D,E,F);
ってのがあって
EとFだけ取り出して別の配列に入れたい
場合ってのはどうやってやればいいんでしょうか
340やさしいお兄さん:02/04/09 06:50 ID:???
>338
これでどう?

%conv= ('<' => '&lt;',
        '>' => '&gt;',
        '&lt;' => '<',
        '&gt;' => '>');
$_= '< &lt; < > &gt; <';

s/<|>|&(?:l|g)t;/$conv{$&}/g;
print;
341nobodyさん:02/04/09 06:55 ID:???
>>340
やさしいお兄さん優しいですね。端から見ていてうっとりしました。
今度デートして下さい。やっぱいいです。
342やさしいお兄さん:02/04/09 06:58 ID:???
>339
これでどう?

@list= qw(A B C D E F);
push(@new, splice(@list, $#list- 1, 2));
343やさしいお兄さん:02/04/09 07:16 ID:???
>340
やっぱりすなおに以下のようにしたほうが速いかな?

s/<|>|&[lg]t;/$conv{$&}/g;
344339:02/04/09 07:21 ID:???
>>342
ありがとう
345nobodyさん:02/04/09 07:34 ID:???
>340
$&は危険
s/([<>]|&[lg]t;)/$conv{$1}/g;

>342
負数のほうが簡潔
push @new, splice(@list, -2, 2);
346やさしいお兄さん:02/04/09 07:37 ID:???
気になって、一応ベンチとってみました。意外な結果が...
できるだけループ数を多くして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)
347nobodyさん:02/04/09 07:48 ID:???
[lg]と(?:l|g)の比較なんかよりも、$&を使う罪に気付けよ。
まだ間に合うから、修行しなさい。
348nobodyさん:02/04/09 07:59 ID:???
>>346
そのベンチ結果だと誤差の範囲だな。
349やさしいお兄さん:02/04/09 08:10 ID:???
>348
でも以外でしょ?
350nobodyさん:02/04/09 09:46 ID:???
スライスじゃダメなのか。
@new = @list[ 4, 5 ];
351nobodyさん:02/04/09 10:34 ID:???
元の配列を 変えたい/変えたくない で決まるね
352nobodyさん:02/04/09 10:44 ID:???
すみません。いきなりの質問です。

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;
}
354nobodyさん:02/04/09 10:52 ID:???
>352
キミは最初に質問と言っておきながら、いつの間にかクレクレ君に大変身ですか?
355:02/04/09 10:56 ID:???
353です。

あ、すいません。構文間違えました
#4列目はリンクカウント数とかかれている部分、

$read_data[2]++;

で、2列目の間違いです。
356352:02/04/09 11:07 ID:???
>>354
<>とか、きっとそういうのを使うとは思うんですが…
どうかおねがいします。教えてください。
ペコリm(_ _)m o0(いつのまにか…というより、もとよりそのつもりでしたが何か?
)
357やさしいお兄さん:02/04/09 11:19 ID:???
>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;
}
358nobodyさん:02/04/09 11:27 ID:???
>356
最初に質問というのなら、具体的にどこの記述でいきづまっているのか、
具体的なコードを明示すべきだろ。
それもしないでおきながら調子のいいこと言って自分を正当化すんじゃねーよ!
359:02/04/09 11:30 ID:???
>>357
どうもです。
でもそれで実行して再読み込みすると、データテキストに無限に数字が書き込まれてるんですが・・

それ以前の部分の処理が悪いんでしょうか?
360nobodyさん:02/04/09 11:59 ID:???
>>353 ifの判定文の@read_dataとifブロック中の@read_dataはバッティングしていないのか?
361nobodyさん:02/04/09 12:06 ID:???
>352=>356

>いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
>
>1:自分はこう言う事がしたい。
>2:それでこんな風にやってみたが・・・
>3:それだとこんなエラーが出て上手く行かなかった。
>
>1と3が無いと誰も答えられないよ、良い回答は良い質問から。
>一緒に勉強しましょう。
362やさしいお兄さん:02/04/09 12:09 ID:???
>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;
363やさしいお兄さん:02/04/09 12:20 ID:???
>362
まちがってしまいました。ごめっ。

$read_data[2]++ if $ENV{'QUERY_STRING'} eq $read_data[1];
364やさしいお兄さん:02/04/09 12:31 ID:???
>362
またまちがってた。頭冷やしてきまーす。

push(@last_data, join("\t", @read_data));
365:02/04/09 12:42 ID:???
>>364
ありがとうございます。
アクセス数の書き込みはうまく行きました。

でも今度はCGIにアクセスすると自動的に何度も何度もリロードされます。
366やさしいお兄さん:02/04/09 12:54 ID:???
>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
最終的にはバナーの一覧を表示させたいんです。
368やさしいお兄さん:02/04/09 13:01 ID:???
>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に直接アクセスした時には
バナー一覧だけが表示される、という形です。
370nobodyさん: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");

ならできるんですが、、、
371やさしいお兄さん:02/04/09 13:12 ID:???
>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, $_);
}
372やさしいお兄さん:02/04/09 13:17 ID:???
>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; を起動させたいわけです。
374やさしいお兄さん:02/04/09 13:27 ID:???
>370
+> だと、いきなりファイルが空になってしまいます。

open (SET,"+<$PATH");
my @setting= <SET>;
375やさしいお兄さん:02/04/09 13:33 ID:???
>373
なんとなくわかってきました。以前の処理を以下のブロックに入れるということかな?
勿論、メタタグは無しということで。スクリプトの最初のほうがいいかな。

if ( $ENV{'QUERY_STRING'}=~ /http:/ ){

exit;
}
376nobodyさん:02/04/09 13:34 ID:B5CaElBB
>>374
どうもです。
読み込みはできましたが、書き込みが追加になってしまうのを上書きにしたいんですけど、
読み込み&上書きは一度にできないんでしょうか?
377やさしいお兄さん:02/04/09 13:35 ID:???
>375
チョットまずいかな、いかのようにしたほうがよかった

if ( $ENV{'QUERY_STRING'}=~ /^http:\/\// ){

exit;
}
378やさしいお兄さん:02/04/09 13:37 ID:???
>376
seek(SET, 0, 0); # これではじめのほうに巻き戻すナリ!
379やさしいお兄さん:02/04/09 13:39 ID:???
>378
truncate(SET, 0); # これも必要だね。
380nobodyさん:02/04/09 13:42 ID:B5CaElBB
>>378-379
できました!
お付き合いどうもありがとうございました。
381:02/04/09 13:44 ID:???
>>377
ありがとうございます!!
これでとりあえずバナーをクリックした時にURLにジャンプするようになりました。

しかしbanner.cgi自体をリロードすると、
datatextの中のデータとかバナーの数がどんどん増えていってしまいます。
382やさしいお兄さん:02/04/09 13:58 ID:???
>381
たしか、サブルーチンにして呼び出すということなので、
@last_data をさいしょのほうで初期化するのをわすれていました。
1どの処理でこのルーチンを複数回呼び出すとどんどん増えていきますね。

@last_data= ();
または
@last_data= -1;
または
@last_data= undef;
または
undef @last_data;

383やさしいお兄さん:02/04/09 14:12 ID:???
>382
うそを書いてしまいました。

@last_data= ();
または
$#last_data= -1;
または
undef @last_data;

384nobodyさん:02/04/09 14:41 ID:???
>>383 CSSもケアしたれや。
385:02/04/09 15:05 ID:???
>>383
3つバナーがあったとすると、1つクリックした時に
全ての数値が上がるんですが・・
386邪魔:02/04/09 15:17 ID:???
全部解決してもらおうと思うなよ。
自分で努力しろよ。
387やさしいお兄さん:02/04/09 15:33 ID:???
>385
うーん。いまひとつ全体がぼやけてしまったので。できればどこかにテキスト
ファイルとしてアップしてURLを書いてもらえれば、全体の動きがつかめやすい
のですが、そのCGIではバナーの表示やカウントアップ、そのほかどんな処理を
しているのか?? チョット混乱してきました。
388306:02/04/09 15:34 ID:???
>340,345
うまくできました。ありがとう御座いました。
389:02/04/09 16:19 ID:???
>>386
くたばれボケ!!
390nobodyさん:02/04/09 16:22 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;
ここまでしかでてなくて・・・
392nobodyさん:02/04/09 18:01 ID:???
>パッケージ中でjcode.plなどを呼び出していいのか
ok
>変数の定義をパッケージ内でしていいのか
ok
>ファイル読み込んでいいのか
ok

他に何か。
393 :02/04/09 18:10 ID:h5pnnRRd
>>392
ありがとうございます。
う〜む、そしたらなぜコピペで動いてくれないんだろう・・・
パッケージを使うときのタブーみたいなものありますか?
394nobodyさん:02/04/09 18:18 ID:???
P_TEST::って何?
@ISA = ('Exporter');
@EXPORT = ('subtest');
395 :02/04/09 19:17 ID:h5pnnRRd
@PacTest::ISAのまちがいです。
ここに書くためにかきなおしたんですがそのまちがいです
396nobodyさん:02/04/09 19:54 ID:???
>>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
本にでてたやり方なんですけどね
秀和だめですね
398396:02/04/09 21:03 ID:???
スタイルの違いだからそこはまあいいんだけど、
それより俺が聞きたいのはどうやったらエラーが出たのかという状況説明なんだが
399 :02/04/09 21:31 ID:h5pnnRRd
>>398
ウェブマスターに聞けエラーです
400nobodyさん:02/04/09 21:45 ID:???
ローカルでやれよ
401nobodyさん:02/04/09 22:12 ID:???
>>399
やれやれ・・・
「秀和だめですね」かよ・・・
402 :02/04/09 22:42 ID:h5pnnRRd
>>401
技術評論社は(゚∀゚)イイ
ソフトバンクは(´・ω・`)ショボーン
403貴様ら教えて下さい:02/04/09 22:45 ID:sR6b9WNM
仕事でPerl使ってメールマガジン配信することになったんですが、
最終的には数万人規模のものにするらしいんです。(無理くせーけど。
普通にsendmailで送るのは無理っぽいですし、
どうしていいものかサッパリわかりません。

皆様ならどうやるでしょう?
404nobodyさん:02/04/09 22:47 ID:???
>>403
普通にsendmailで送れ。以上。
405nobodyさん:02/04/09 23:56 ID:???
406貴様ら教えて下さい:02/04/10 00:47 ID:RNZ++qE3
マジ?sendmail数千回呼び出すの?
あ、それともBccで数万件指定するのか?
いけるのか?
どうなのか?

>>405
お、使えるかも。
ちょっと見てみる。
407nobodyさん:02/04/10 00:54 ID:???
Net::SMTP
408nobodyさん: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
409nobodyさん:02/04/11 02:31 ID:???
>>408
>open(FILE,"+> data.txt");
この瞬間、データが消えていることに気付いてください。
410nobodyさん:02/04/11 02:49 ID:???
>408
この前もまったく同じ質問があったが、過去レスとか見てる?
+> だといきなりファイルが空になるゾ!

+< で読み込んで
seek(FILE, 0, 0); で巻き戻して
truncate(FILE, 0); でファイルを空にした上で書きこむ
411nobodyさん:02/04/11 07:32 ID:???
>>408
ちなみに、>>370ね。
(あまりに質問が似ているので、ネタかと思った・・・)
412nobodyさん:02/04/11 08:32 ID:8LiumuzI
激しく既出にも関わらず、ご親切に教えてくださってありがとうございます☆

本などで「+>」は「読み書き両用オープン」って説明されていますが
実際には「書き」しかできないってことですか?(オープンした瞬間データ消えるから)
413nobodyさん:02/04/11 09:27 ID:???
>>412
んなこたぁない。ちゃんと読める。
「書いた直後に読みたい」場合に使える。
414nobodyさん:02/04/11 11:06 ID:QakPtgEu
415nobodyさん:02/04/11 12:56 ID:???
412ではないが、
実際には「書き」しかできないってことですか?
これ前から気になってた。
413の答えで納得した。
でも「書いた直後に読みたい」なんて思った事ないな、、
416nobodyさん:02/04/11 14:27 ID:???
>>415
だから実際に'+>'や'+>>'がつかわれることはほとんどない。
417nobodyさん:02/04/12 01:00 ID:???
すいません、ファイルハンドルをハッシュに入れたまま
使用したいのですが、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) のみです。
418nobodyさん:02/04/12 02:10 ID:???
>>417
グローバルなものをなぜハッシュに入れるのかは敢えて聞かないとして・・・
$tmp = $hash{in};
<$tmp>
とスカラーに格納すれば大丈夫みたい。
ハッシュや配列の形ではだめだった。
$tmpは間接ファイルハンドルと解釈するが、$hash{in}はファイル名グロブに
解釈される仕様のようです。試しに次のような使い方は正常に機能した。
$t{a} = "*.txt";
@txt = <$t{a}>;

ということで、スカラー変数を使いましょう。
419417: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;
}

貰った値の正当性を、関数側でチェックしてから使うルールなら
そんなに無駄な処理でもない・・・あ、でも結局ファイルハンドルか。
420nobodyさん:02/04/12 03:07 ID:???
exit(1)か・・・ハァ・・・
421417:02/04/12 03:47 ID:???
>>420
unix の ping コマンドとかは正常終了が 0 ですよね。
他のも一律で 0 に決まってるモンなんでしょうか。
web で 1 を見かけたので真似しだしたんですよ。最近。
スレ違いすみません。

422stdlib.h:02/04/12 04:20 ID:???
真似すんなよ。
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
423417:02/04/12 04:44 ID:???
>>422
ありがとうございます。そうか、ライブラリのヘッダか (汗

まだ、解らない事があっても、それを調べる方法さえ解らない
程度の知識ですので、つい真似というか見習ってしまうのですよ。
反省。ちなみに ping の戻り値も知ったのは jman からですしねぇ。
424nobodyさん:02/04/12 05:01 ID:???
>423
perldocの使い方・読み方覚えるがキチ。
425417:02/04/12 06:30 ID:???
>>424
情報有難う御座います。早速やってみました。

% perldoc perlfaq | less
> perlfaq 砌requently asked questions about Perl ($Date:
> 1999/05/23 20:38:02 $)
> Very general, high碎evel information about Perl.
> 瞰hat is Perl?

なんかウチの環境だと文字化けする上、表示に 22sec もかかる・・。
あ、perldoc -f use とかなら化けない。
しかし英語ばかりで頭痛いですねぇ。

Perlドキュメントの読み方
http://member.nifty.ne.jp/hippo2000/perltips/podread.htm
perldoc
http://yuri.sakura.ne.jp/~propella/tips/perldoc.html

今までリスト化されて読みやすい下記サイトを聖書と崇めてましたが
http://www.namazu.org/~tsuchiya/perl/info/perl-ja_toc.html
最新版には perlpod なんて項目があったのですね。
http://www.kt.rim.or.jp/~kbk/perl5.005/index.html
.pm の中身とかを見て、ずっと頭を悩ましていましたよ。
426nobodyさん:02/04/12 07:09 ID:???
最近この板でバカな奴みるとDream★じゃないかと疑ってしまう。
427nobodyさん:02/04/12 07:22 ID:???
.>>426
アハハ
428nobodyさん:02/04/12 09:06 ID:???
おい、<$h{in}>で困ってたやつ。下のコード試してみろ:
readline($h{in)

429nobodyさん:02/04/12 15:57 ID:XFr3wilJ
うるせんだよヴぉけ!!!!!!!!!!!!!!!!!!!!!!!
430417:02/04/12 19:35 ID:???
>>428
ホントだ、できましたよ。有難う御座います。
しかし perldoc では説明でましたが、web 上に散乱するサイトの
日本語マニュアルには全然載っていない関数みたいですね。なんでだろ。
431nobodyさん:02/04/12 20:10 ID:???
すいません、こういう事ってどうすればよいのでしょうか。。
ダウンロード用の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
みたいな感じで出力したいのですが。
432nobodyさん:02/04/12 21:00 ID:???
>>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
433nobodyさん:02/04/12 21:02 ID:???
訂正
},"\n"

} ."\n"
434nobodyさん:02/04/12 21:46 ID:4zjuzdoC
数千行あるログファイルから
特定の位置だけを表示したい場合のスマートな方法ってどんなですか?

自分の場合は
単純に1行目から順に読み出して行って、指定行になったらループを抜ける
もしくは、配列に全部読み込んでから指定範囲だけ取り出す
ってやりかたしてるんですが、いまいちよろしくないです。
ファイルサイズによりますがカナリきついです。

また新着ログはファイルの先頭行に挿入したいのですが、この場合は
いったん全部読み込んで、先頭行にログ追加して、全行書き出す
するしかないのでしょか、、、、
435nobodyさん:02/04/12 21:54 ID:???
新着ログだけ書き込んだファイルに
他のファイルを追記で書き込んでリネーム
436nobodyさん:02/04/12 22:31 ID:4zjuzdoC
>>435
ほうほう、その方法でためしてみます
やはり最終的には全行を書き出す事になるんですね、がくり。
挿入とかできたら便利なのになぁとか思った
437nobodyさん:02/04/12 22:51 ID:???
>>436
それは太古の昔から無理。
なので、ログは先頭に追加せず、おけつに追加していき、
表示する時とかに逆順にしたほうが吉。

もしくは、先頭に追加できるファイルシステムを考案しる。
438nobodyさん:02/04/13 00:09 ID:???
といいつつDB_File::DB_RECNOはそこそこ使える。(たまにコケるが)
439nobodyさん:02/04/13 06:55 ID:???
教えていただきたいことがあります。

以下の2次元配列において、列部分($data[行][列])の最大インデックスを求める
効率的な方法を何卒、ご教授ください。よろしくお願いします。

一応、以下のようにループで回して比較する方法を考えましたがもっとスマートな
やりかたがありそうな気がしていますがどうしても思いつきません。

$MAX= $#{$data[$_]}> $MAX ? $#{$data[$_]} : $MAX for ($[ .. $#data);
440nobodyさん:02/04/13 08:50 ID:???
>432
ありがとうごさいました。うまくできました。
441ゲーム房:02/04/13 10:19 ID:jvfE2/Zt
iswebにはFFA設置してもいいんですよね?
でも、「ゲームCGIは禁止」って書いてるんですが・・・。
442nobodyさん:02/04/13 10:28 ID:???
>441
誤爆だろうけどスレ違い。
443nobodyさん:02/04/13 11:26 ID:???
>>441
しかも日本語が理解できてない。
444nobodyさん:02/04/13 11:28 ID:???
>>441
ゲームCGIが禁止ならFFAも禁止に決まってるだろゴルァ!
445nobodyさん:02/04/13 13:07 ID:VMPYMAwG
アメリカのCGIの日本語化に挑戦しています。
が、できません。
1週間、ずーといろいろやったのですが、
どうしても、うまく行きません。
cgi-lib.plというのが悪いような気がするのですが…。
これって、定番のライブラリですが、
うまく日本語化する方法はないのでしょうか?
446nobodyさん:02/04/13 13:28 ID:sQBkSIs9
>>444
うるせえんだよボケが!!!!!!!!!!!
447nobodyさん:02/04/13 13:28 ID:sQBkSIs9
>>445
意味不明  氏ね!!!!
448nobodyさん:02/04/13 13:32 ID:???
>>445
perlで日本語化ちゅーと、メッセージを日本語に置き換えたいってこと?
449nobodyさん:02/04/13 13:35 ID:PKxqXxUL
教えてください。
ボタンをひとつだけ押して、複数のスクリプトにデータを渡すことは可能ですか?
ひとつはメールでもらって、その中のmailアドレスから自動でメルマガに登録させたい。
検索しようにもどんな語句で調べたらよいかわかりません。一応いろいろ検索したんですけど。
450nobodyさん:02/04/13 14:06 ID:VMPYMAwG
>>448
フォームで入力された日本語が、
ちゃんと表示されないので、
それをちゃんと表示されるようにしたい。
jcode.plをreqireして、
&jcode…でコンバートしようとしても
うまくいかないのですが。
451nobodyさん:02/04/13 14:20 ID:???
>>450
こっちでソース晒せよ。
http://pc.2ch.net/test/read.cgi/php/1012839651/l50
452nobodyさん:02/04/13 16:24 ID:x6G/BIRo
正規表現で置換後の文字列を他の変数に入れる簡単な方法ありますか?

$moto = 'a1b2c3d4e5';
$kekka = $moto ;
$kekka =~ s/[\d]//g ;

これ面倒なので、
$kekka = $motoの[\d]を削除した結果
みたいに1行で書けると嬉しいんですが。
453nobodyさん:02/04/13 16:37 ID:???
>452
($kekka)= $moto=~ /\d/;
454nobodyさん:02/04/13 17:28 ID:???
>>449
ひとつはメールでもらって、ってのはわかるけど、
もう一つはどんなスクリプトを起動したいの?
455nobodyさん:02/04/13 17:44 ID:PKxqXxUL
>>454
メルマガ登録スクリプトにアドレスを渡したいんです。
どうせならアドレス一回入力で、「登録しますか」の是非をチェックしてもらい、そのアドレスを渡せたらいいなと思って。


引数にアドレスも付けてをつけてポップウィンドウを開くってのもありかなあ?
でもjsにたよらないとならなそうだし。
456nobodyさん:02/04/13 17:46 ID:???
>>449
厨的な考え方だけどLocation使ってGETでデータ渡すとか。
457454:02/04/13 17:55 ID:???
>>455
メールを受け取ったら、自動でスクリプトを起動するってのはだめ?

メールを受ける鯖の/etc/aliasesに
melmaga-touroku: "| /path/to/script/regist.pl"
って書いて newaliases ってコマンド実行しておけば、
メールが来た時に、スクリプト起動できるので、
漏れいつもそうやってる。
458nobodyさん:02/04/13 18:39 ID:???
>>457
パイプを禁止しているサーバもあるから軽めに注意。
459nobodyさん:02/04/13 20:19 ID:???
>>452
($kekka = $moto) =~ s/foo/bar/g;
460nobodyさん:02/04/14 03:22 ID:???
>うるせえんだよボケが!!!!!!!!!!!
これ、はやってんだ、漏れも使お、
へへへ、まんこ
461nobodyさん:02/04/14 10:17 ID:V1/8ijC1
こんにちは、
さっそく質問なのですが、
スカラーに入れた(入った)文字列をスカラー名にする方法ってあるのでしょうか?

$a = "test";
$b = "value";

として

$test = "value";

というようなことなのですが
よろしくお願いいたします。
462${$a}:02/04/14 10:38 ID:???
>>461
せめてこのスレくらい最初から読んでくれ。
463nobodyさん:02/04/14 10:40 ID:V1/8ijC1
ひぃーごめんなさい。
464461:02/04/14 10:42 ID:V1/8ijC1
でも本当に助かりました。
ありがとうございました。
465TOM ◆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'}が一致した場合、現在処理している配列を削除したいわけです。
(?)の部分に、なんと入れたらいいのか、よろしくです
466nobodyさん:02/04/14 12:32 ID:???
>>465
undef $array{$yakin};
とか?
467nobodyさん:02/04/14 12:45 ID:???
foreach (@mona1) {
($yakin,$hiroyuki) = split(/<>/);
if($yakin eq $FORM{'yakin'}) {
$_ = '';
next;
}
}
@mona1 = grep /\S/, @mona1;

でいいかな? なんか無駄が多そうだが。
468TOM ◆98SA9XcM :02/04/14 12:53 ID:Gksq2mQe
thank!っす。
これで、海へ行けるぞー!
469nobodyさん:02/04/14 12:55 ID:???
配列を二つ受け取り、その各要素ごとの和を格納した配列を返す
サブルーチンはどのように書けばいいのでしょうか?
470初心者:02/04/14 12:58 ID:GNKyG6Nl
こちとら超初心者です。質問させてください。
Apacheっていうソフトを入れて、Webサーバっつーの立てて
そこでPerlをデバッグしてみてるんですが、簡単なSSIのアクセスカウンタが動いてくれません。
HTMLで「あなたは人目のお客様です」とだけ表示されます。
エラーログには何も書いてないし、DOSプロンプトでチェックしてもSyntax OKって出るだけっす。
カウンタの数字を保存するファイルのパーミッションの問題なのかな〜とか思ってるのですが、
Apache上のファイルのパーミッションを変える方法がわからんです。
昨日はじめたばっかしなので質問の意味がさっぱりかもしれませんが、よろしくです。
471nobodyさん:02/04/14 12:59 ID:???
>>465
splice使え。
472nobodyさん:02/04/14 13:12 ID:???
>>470
カウンタを格納するファイルのパーミッションを、nobodyさんでも
書き込めるように汁。
473470:02/04/14 13:32 ID:S6NECtrZ
>>472
c:\public_htmlにファイルを置いてやっているのですが、
いろいろ調べてみてもFTP転送時のパーミッション変更方法しか載ってなかったです。
格納ファイルのプロパティでアーカイブやら読み取り専用やら(Win98SE)、いろいろ変えてみたんですが
結果は変わらず。自分のPCなのにFTP転送とか出来るんでしょうか?
説明下手でごめんなさい。
474TOM ◆98SA9XcM :02/04/14 13:45 ID:Gt4aB1lk
自分を初心者と認めるなら、ApacheよりAnHTTPdがいいよ。
KEN○さんのページでわかりやすく解説載ってたし。
ttp://www.kent-web.com
475_gunzip:02/04/14 13:47 ID:???
>>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)
476nobodyさん:02/04/14 13:53 ID:IPbdNQdj
imgboard v1.22 R6ってIP隠せないんですか?
丸見えなんですが。
477nobodyさん:02/04/14 14:06 ID:???
>>476

> いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
>
> 1:自分はこう言う事がしたい。
> 2:それでこんな風にやってみたが・・・
> 3:それだとこんなエラーが出て上手く行かなかった。
>
> 1と3が無いと誰も答えられないよ、良い回答は良い質問から。
> 一緒に勉強しましょう。
478nobodyさん:02/04/14 14:07 ID:???
>>476
で、ここ。

スクリプト改造工房 Part4
http://pc.2ch.net/test/read.cgi/php/1012839651/
479472: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に従うのもありかと。
480470:02/04/14 14:13 ID:S6NECtrZ
>>474
ありがとうございました。本を買って入ってたのがApacheだったので、それを使ってました。
さっそくAnHTTPdを入れて勉強してみようと思います。
481470:02/04/14 14:15 ID:7rjAl4Ry
>>479
丁寧にありがとうございます!
shtmlにはしてあるんですが、httpd.confをも一回チェックしてきます。

みなさん、親切で泣けてきました。(今回2Ch初書きこみ)
482470:02/04/14 17:23 ID:???
結局いろいろやってみた結果、ソースのflockという関数をコメントアウトしたら
カウンタが動作しました。HTTPdソフトのせいじゃなかったみたいです。
いろいろありがとうございました。
483nobodyさん: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;
自分ではこんな感じかな?とか思ったんですが…無理でした。
ご教授お願いします。。既出だったらすいません(^^;
484nobodyさん:02/04/14 18:48 ID:???
>483
$nkeysと$valueをprintしてみてなにが入ってるか見てみるとダメな理由はわかると思う。
どうするのが正しいのか俺にはわからないけど。
$line =~ s/(.+)/$xx{"$_"}/g;だとkeysの一致がされないしなぁ・・・。
485nobodyさん:02/04/14 19:02 ID:???
$hoge = join "|", keys %xx;
$line =~ s/($hoge)/$xx{$1}/g;
こんなんでいいか?
486nobodyさん:02/04/14 19:36 ID:???
>475
_gunzipタンひさしぶり〜
487469:02/04/14 19:40 ID:???
>>475
スクリプトが意味不明です。初心者ですか?
488nobodyさん:02/04/14 19:51 ID:???
>>487
ネタはやめれ。
489nobodyさん:02/04/14 20:01 ID:???
>488
ネタじゃないと思うよ。
理解できない負け惜しみ厨だとおもう。
そういう漏れも全然理解できてないので逝ってくる...
490469:02/04/14 20:04 ID:???
まっぷっぷ意味不明age
491nobodyさん:02/04/14 20:06 ID:???
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
}

これで試してみたんですが無理でした(^^;
492nobodyさん:02/04/14 20:32 ID:???
>491
俺のところではそれでいけるけど、datafileの中身はどうなってるの?
あとPerlのバージョンは?
493TOM ◆98SA9XcM :02/04/14 20:36 ID:CWCI/F1H
もーいっこ質問、お願いです。

変数$nanashiに、
あ<>い<>う<>え<>お<>
と入ってるのですが、
この$nanashiを、
@giko = ("あ","い","う","え","お");
のように、配列に出来ますか?
494nobodyさん:02/04/14 20:39 ID:???
@giko = split(/<>/, $nanashi);
495TOM ◆98SA9XcM :02/04/14 20:44 ID:CWCI/F1H
ほ〜
ありがとん
496nobodyさん:02/04/14 20:45 ID:???
とりあえず>>469は帰って良いよ。
プロトタイプでも勉強してきな。
497nobodyさん:02/04/14 20:46 ID:???
datafileは

<table>
<tr>
<td>田中雅夫</td>
<td>田中さん</td>
</tr>
<tr>
<td>椎名林檎</td>
<td>林 檎</td>
</tr>
<tr>
<td>志村けん</td>
<td>バカ殿</td>
</tr>
</table>

環境はWINにactiveperl522e入れてます。
flockとか使うとエラー出たりするし、
そういう違いなんかなぁ…
498469:02/04/14 20:50 ID:???
496 = gunzip = 初心者
決定!ばーか

499nobodyさん:02/04/14 20:52 ID:???
(´-`).。oO(ちょっと遅れた春だねぇ…)
500nobodyさん:02/04/14 20:52 ID:???
>497
やっぱり俺のところでは普通に変換される。
Win2kにanhttpd+ActivePerl-5.6.0.616。

flockはWin95やWin98じゃ使えないんじゃなかったっけ?
501nobodyさん:02/04/14 20:59 ID:???
522でも行くとは思うが・・・・・
630あたり入れない?
502497:02/04/14 21:02 ID:???
>500
はい、そうみたいです。
他の違いとかは全く分からない状態で…
勉強不足ですいません(^^;
ActivePerlもけっこう前に入れたものだし、
新しいのinstallしてみよっかな。
とりあえず、ありがとうございました〜
503nobodyさん:02/04/14 21:06 ID:???
あー、データファイルとperlスクリプトで文字コードが違うとかやってない?
両方EUCで書くこと。
504497:02/04/14 21:08 ID:???
あーほんとんにごめん(^^;
きちんと実行しました!!
申し訳ない…鬱だ。。
ほんとにありがとう…4日くらいハマってました(汁
505497:02/04/14 21:17 ID:???
原因はなぜか分からないんですが、
ハッシュの中に
"太宰啓介", "太 宰"
を入れてて、
これを抜いたら動きました。。
506nobodyさん:02/04/14 22:07 ID:???
啓の2バイト目が“[”だから動かない。
$hoge = "\Q". join("\E|\Q", keys %xx) . "\E";
507nobodyさん:02/04/14 22:15 ID:???
$hoge = join "|", map{ quotemeta } keys %fuga;
の方が見栄えは良いな。
いや、>>506の方が多分効率良いけど。
508469:02/04/14 22:26 ID:???
469>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>475
509506:02/04/14 22:34 ID:???
スマソ>>507の方法じゃないと駄目だ。
"\Q" . "[\E" と "\Q[\E"は等価じゃない。
510rain:02/04/14 22:37 ID:sltXes8x
えっと、プログラム板では板違いという事でこっち来ました。
PERLのCGIを実行させようとすると何故かダウンロードを始めてしまいます。
どうなってるのでしょう?
511nobodyさん:02/04/14 22:40 ID:???
>510
99% Content-typeの問題。
512rain:02/04/14 22:46 ID:sltXes8x
print "Content-type: text/plain\n\n";
に何か問題があるのでしょうか?
513497:02/04/14 22:49 ID:???
>>507
おー!動いた!ありがと〜

>啓の2バイト目が“[”だから動かない。
ふむふむ…もうついていけないレベルです(^^;

$hoge = "\Q". join("\E|\Q", keys %xx) . "\E";
$hoge = join "|", map{ quotemeta } keys %fuga;
これがどんなことしてるのか、
じっくり勉強してみます。
514nobodyさん:02/04/14 22:57 ID:???
>512
1:\nを\r\nにしてみる。
2:それをスクリプトの3行目に置いてみる。
515rain:02/04/14 23:00 ID:sltXes8x
駄目みたいです・・・。
やっぱり変わらずダウンロードを開始します・・・。
何が原因なんでしょう?
516nobodyさん:02/04/14 23:02 ID:???
>515
環境を明記した上でスクリプトの拡張子を.txtにしてアプして。
517rain: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 !";

------
518nobodyさん:02/04/14 23:10 ID:???
>>515
httpdがApacheなら、httpd.confに
AddHandler cgi-script .cgi .pl
って書いてあるかどうかかくに〜ん。
519rain:02/04/14 23:15 ID:sltXes8x
書いてありますねぇ・・・。
520nobodyさん:02/04/14 23:19 ID:???
>517
\r\n\nとはどういう了見だ?
521rain:02/04/14 23:23 ID:sltXes8x
あれ?こうしろって事じゃなかったんですか?はっ!もしかしてとんでもない勘違い!?
522nobodyさん:02/04/14 23:25 ID:???
ふつー、
\n\n
だね。
523rain:02/04/14 23:26 ID:sltXes8x
あ、でもそれでもやったんですよ。
はぁ・・今日は諦めようかな・・・。
524nobodyさん:02/04/14 23:26 ID:???
\r\n\r\nだろ、やるなら。
それと、Apacheって適当に入れただけだとExecCGIが効いてなかったような。
525rain:02/04/14 23:30 ID:sltXes8x
そうなんですか?まだ勉強不足で・・・。
それと、ExecCGIもちゃんと修正しました。
526nobodyさん:02/04/14 23:31 ID:???
>>524
そなの?
それってDOSだとCRCRLFCRCRLFにならない?
もしかしてActivePerlなら、ならないのか・・・
527nobodyさん:02/04/14 23:32 ID:???
「ソースがダウンロードされる」のか「実行結果がダウンロードされる」のか。
528rain:02/04/14 23:34 ID:sltXes8x
.cgiがダウンロードされてしまいます。
529nobodyさん:02/04/14 23:34 ID:???
>>525
ちなみに、ダウンロードされるファイルの中身は、どんなんなの?
Hello Perl!
だけが書いてあるのなら、httpdはOKで、Contenet-type があやしい。

cgiスクリプトがまるまる入っているのなら、httpdの設定があやしい。
530nobodyさん:02/04/14 23:35 ID:rKBAHNDF
つまらん質問でスマソ
123456byteをメガ単位にするときって
何で割るの?1000?・・・
531nobodyさん:02/04/14 23:36 ID:???
>>530
もちろん、1024^2で割る。
532nobodyさん:02/04/14 23:37 ID:???
>>530 1048576
533nobodyさん:02/04/14 23:37 ID:???
2**10 * 2**10で割りなされ。
534nobodyさん:02/04/14 23:41 ID:???
> perl -e "print 1024^2"
1026
>
535nobodyさん:02/04/14 23:47 ID:rKBAHNDF
つまり、1Mbyteは1024^2 = 1048576byteという事なのか!
スマソ。
536nobodyさん:02/04/14 23:53 ID:???
>>510
じぶんもずっとそれ。完璧に諦めている。
UA側の問題と理解しているが、理由に納得はしていない。
537nobodyさん:02/04/14 23:54 ID:???
>521
>514を見て「片方だけ変えればいい」という発想できるのは驚き。
その発想力は俺の予想を越えてた。
538nobodyさん:02/04/14 23:57 ID:???
>517
UnixかWinか。
あと>529の問いにも答えれ。
539rain:02/04/15 00:09 ID:8o4u1f33
ほーい。WINで、CGIがダウンロードされます。
540nobodyさん:02/04/15 00:12 ID:???
>>539
その答えがDQNだっつーの。
541536:02/04/15 00:17 ID:???
自分直ってた。原因がよく分からんままだ。
542nobodyさん:02/04/15 00:18 ID:???
【もう】【だめぽ】
543nobodyさん:02/04/15 00:19 ID:???
>539
悪いがここはPerlの初心者スレなんだ。
人生の初心者は幼稚園にでも行ってくれ。
544nobodyさん:02/04/15 00:22 ID:???
>>539
「ほーい。WINで、CGIスクリプトがそのままダウンロードされます。」
ね。
つーことは、httpd が、そのスクリプトをCGIだと思ってないのよ。
httpdを再起動してだめなら、apache板へ行ったほうがいいかも。

Apacheの設定を教えてください
http://pc.2ch.net/test/read.cgi/php/1003772635/

もちろん、あちらのスレのログをまず見てガイシュツじゃないか確認しよう。
545469:02/04/15 00:32 ID:???
答えろ。厨房ばっかりだなここは。

546nobodyさん:02/04/15 00:42 ID:???
もちろん来年高校受験ですが、何か?
547nobodyさん:02/04/15 00:52 ID:???
厨房ばっかりなのがわかったのにまだ聞くの?
それって自分が厨房以下って言ってるのと同じだと思うんだがなぁ。

次回は是非もう少し頭のよさそうな煽りをお願いいたします。
548469:02/04/15 01:06 ID:???
こたえろおろろろろろろろろろろろろろろろろろろろろろろろろr
549nobodyさん:02/04/15 01:15 ID:???
どうか教えてください。

2次元配列で、列の最大インデックス値を求める効率的な方法がわかりません。
自分でなんとか書いてみて、もっとよい方法がありそうな気がしていますが
どうしても思いつきません。よろしくお願いします。

;# $data[行][列] の例
for ($[ .. $#data){
$#{$data[$_]}> $MAX_COL and $MAX_COL= $#{$data[$_]};
}
550nobodyさん:02/04/15 01:20 ID:???
>>549
それで十分使えるやろ。Perlってことを忘れるなよ。
数値計算等の効率を重視するならCとかにしろって。
551nobodyさん:02/04/15 01:38 ID:???
>>548
>>476の何が不満なんだ?
#our($a, $b);
てして、最後のほうに
print join(",",@sum),"\n";
とか書けば、動くと思うけど。
552551:02/04/15 01:39 ID:???
イタイ。>>475だった。
553549:02/04/15 01:53 ID:???
>550
了解しまっ!
554469:02/04/15 02:03 ID:???
475みたいなコード書く奴は死んでください。理解できません。
555nobodyさん:02/04/15 02:07 ID:???
>554
理解したいなら他人に聞いてもしょうがない。
自分で勉強するしか。
>2-4のサイトの中には親切に色々教えてくれる所もあるだろう。

理解するよりも利用したいなら>475のソースをそのまま使えばいい。
556549:02/04/15 02:13 ID:???
>554
確かに、プロトタイプや複数処理に対応しているところは一見、知ってそうだが
効率の悪い書き方が目立つね。でも、これを理解できないの? どこがわからないの?

557nobodyさん:02/04/15 02:16 ID:???
>>556
>>475の効率の悪いとこって、どのへん?
558549:02/04/15 02:30 ID:???
>557
ループカウンタ $i なんか使う必要ないし、return も遅くなるし、
ループ内で local 宣言を逐一行なってるようなとこかな?
559557:02/04/15 04:08 ID:???
>>558
なるへそ。localはループの外に出して、returnは省略するとして、
$iを使わないようにするには、どうしよう。うーん。
560nobodyさん:02/04/15 04:37 ID:???
foreach( 0 .. $max_index - 1 )
とかかかな?
561ほほ:02/04/15 09:08 ID:lbZrq7VB
http://www.kent-web.com/bbs/sample/light.cgi
このcgiに
http://yassu.no-ip.com/haikyo/cgi-bin/log.cgi?room=001
のようにURL指定すると画像張り付くようなことがしたいです。
どのようなソースをどこに付け足せばよいですか教えてください。
562nobodyさん:02/04/15 09:29 ID:???
>560
それなら$iを使った方がいい。
その手法だと一度$max_index個の配列を一時的に作ることになってメモリを喰う。
563nobodyさん:02/04/15 09:30 ID:???
>561
スクリプト改造工房 Part4
ttp://pc.2ch.net/test/read.cgi/php/1012839651/
564ほほ:02/04/15 09:52 ID:7Ngfgl5F
>561さん
そちらの方が適切でしたか、誘導ありがとうございます。
565nobodyさん:02/04/15 12:22 ID:???
今どきreturnが遅いとかforeach(1 .. 10000)が巨大なリストを作られるとか言ってるやつ。
書き込む前にベンチマークはしたのかと問いたい。問い詰めたい。小一時間問い詰めたい。
お前等、そんなものは今や時代遅れとちゃうんかと。

俺が見たところ、>>475での問題点は
・ループ内でlocalを使っている
・$a$bはパッケージ変数なので違うパッケージの時動かない
くらいなもんだ。
566nobodyさん:02/04/15 12:25 ID:???
どうやらコテハン469はネタみたいなので今後は無視の方法でおながいします。
参考:http://pc.2ch.net/test/read.cgi/php/1018303030/
567nobodyさん:02/04/15 13:36 ID:???
perlで常駐ソフトは作れないんですか?
568nobodyさん:02/04/15 13:40 ID:???
>>567 Win, UNIX等マルチタスクOSなら作れる。 DOSのTSRは無理。
569nobodyさん:02/04/15 13:48 ID:waGQdYYq
>>456
>>457
遅レスですがありがとうございました。参考になりました。
とりあえずjsのwindow.open()で?にて渡すことにしました。
Locationの使い方がサッパリ。
570nobodyさん:02/04/15 14:48 ID:???
>>568
回答どうも。
よく分からん単語があったので調べます。
571nobodyさん :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

メールアドレスを入力しないと送信できません
−−−−−−−−−−−−−−−−−−−−−
とメッセージが表示されてしまいます。

何が悪いのか教えていただけませんでしょうか。
よろしくお願いします。

572nobodyさん:02/04/15 15:00 ID:???
>571
どこがPerlのコーディングの話なんだ?
Perlのコーディングの話をするスレだから、Perlのコードを出してくれ。
573nobodyさん:02/04/15 15:01 ID:???
つーか、まずHTMLの勉強してこい。
そのHTMLソースもグチャグチャじゃないか。
574nobodyさん:02/04/15 15:17 ID:???
>>571
form.cgiの中身がおかしいと思います。
575nobodyさん: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";
576nobodyさん: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";

以上、よろしくお願いします。
577nobodyさん:02/04/15 15:50 ID:???
>575-576
なんともまぁ酷いコードだな・・・。

ともあれ>571のエラーが出るならメールアドレスが入力されてないんだよ。
[email protected]って入力して試してみ。
@と.が入ってないとエラーを吐くだけだから。

つーか、前任者には聞けないのか?
578nobodyさん:02/04/15 15:50 ID:???
>>571よ悪いことはいわん。上司に「僕には無理です」と泣き付け。
579nobodyさん:02/04/15 16:07 ID:WmWR88F9
>574さん、私もcgiとHTMLソースがうまくかみ合っていないのが原因では?と
考えています。
>577さん、それがメールアドレスを入力しているのに関わらず、エラーが
出ているから困っています。
ちなみに「hoge」「hoge@hage」「[email protected]」の何れを入力しても
同一のエラーが出ます。
>578さん、泣き付ける上司がいればいいのですが、あいにくおりません。

580nobodyさん:02/04/15 16:31 ID:YGeSanjU
だって現に無理じゃん、しょうがないよ。
>>578はいいこと言ったよ?
581577:02/04/15 16:55 ID:???
>579
俺も>580に同意。
前任者がPerlもHTMLもロクに理解していない。
後任のあんたも全然理解していない。
そのスクリプトがエラーになる原因が「思い当たりすぎて」どうしようもない。
そしてアンタ自身にそれを試験しその経過を正確に報告するスキルが無い。
そんな状態でここから指示を出してたら1ヶ月経っても2ヶ月経っても無理だ。

はっきり言って、ケントでもレスキューでも行って多少でもまともなCGIを
拾ってきた方がよっぽどいいと思うぞ。
はっきり言う。
無理だ。

正直、俺から見ると、そのスクリプトを修正するより、自分で1から
作った方が楽にすら思える。
582580:02/04/15 17:22 ID:YGeSanjU
とりあえず、やめろとは言わん。
どっかで似たもののCGI探して、
そのCGIとにらめっこして、原因を追究すべし。

2ちゃん寝るの上級者が答えてくれればいいってもんだけど、正直、わかり難い。
583469:02/04/15 17:34 ID:???
>>556
もっといいのを書いてください!
それだけ知った口を叩けるのだから!!!
584nobodyさん:02/04/15 18:00 ID:???
475もいい迷惑だな(w
585nobodyさん: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変換はログ保存用だと思ってください。

どうかよろしくお願いします。
586469:02/04/15 18:25 ID:???
糞ばっかりだなここは
意味不明コード厨房に知ったか厨房かよ
ぼけ
587585:02/04/15 18:56 ID:8YI2JjdJ
本当、意味不明ですいません。
自分でもなにをしてるのか分からなくなってきています。
ちなみに、sjisの所をeucにしても一緒でした。
そろそろ動けばいいって作り方から卒業したいです。(泣
588nobodyさん:02/04/15 20:06 ID:???
>>587
&jcode'convert(*hoge,'sjis');
を消せば、いんでないかと。
589nobodyさん:02/04/15 20:09 ID:???
>>575
デバッグの基本はプリントだ!
$emailをチェックしている行の直前に、
print "[$email]<BR>";
って入れて、確認しよう。
590nobodyさん:02/04/15 20:33 ID:???
とりあえず関係なさそうだが
&jcode'convert(*hoge, 'sjis')
これを
&jcode::convert(\$hoge, 'sjis');
にしておけ。
591nobodyさん:02/04/15 20:38 ID:YGeSanjU
とりあえず意味なさそうだが
&jcode'convert(*hoge, 'sjis')
これを
exit;
にしておけ。
592nobodyさん:02/04/15 20:45 ID:???
>>584
禿同。

_gunzipのコードは参考になるところが多いから常駐してホスィんだけど、
エライのに目をつけられたもんだ(w
593nobodyさん:02/04/15 22:38 ID:???
なんかあんまり技術的な質問じゃないんですが
掲示板とチャットの違いってスクリプト的に
どのあたりで線引きされるもんですかね?
これとこれみたいな事ができればチャット、もしくは掲示板みたいな
定義があれば教えてください。
594nobodyさん:02/04/15 22:52 ID:G09favcm
>580さん、そうですか。無理ですか・・・。(残念です)
>582さん、これを作った人とはもう連絡が取れない状況で自営業をしている
友人が困って私に調べて欲しいと依頼が来た次第です。(なので、仕事とは
全く無関係です)
指摘される通り、私にはあまり知識はありません。
別のCGIを拾ってきて、一から作ってみたいと思います。
>582さん、他の似たようなCGIと比較して原因を調査してみます。
ありがとうございました!!
595nobodyさん:02/04/15 22:53 ID:???
あてはまればチャット
・リロードの回数が多い(リアルタイムで返事がくる)
・コメント欄がおそらく一行
・「入室」する
596593:02/04/15 23:08 ID:???
>>595
39
やっぱログインがポイントだよね。
597589だけど誤爆じゃないよ:02/04/15 23:12 ID:???
>>594
デバッグプリントも試してみてくれーーー
598nobodyさん:02/04/15 23:30 ID:???
粘着低脳ぶりが.htaccessの偉い人荒らしてた奴そっくりだな。
599nobodyさん:02/04/15 23:39 ID:???
>595
自動リロードがあったら間違いなくチャットだな。

>593
一部勘違いされがちだが、無料鯖で禁止されるのは「チャット」じゃなくて
「チャットのような負荷の高いCGI」だからな。
「HTML吐出しなどで負荷の少ないチャット」よりも「リロードを繰り返されるBBS」
の方がよっぽど厄介だ。


そういう意図で聞いたんじゃなかったらすまない。
600600:02/04/15 23:47 ID:???
>>599
勘が良いね。
601nobodyさん:02/04/16 00:04 ID:3Tlg2ssN
ttp://popup2.tok2.com/home/vbokc/moe/
こういうところから画像を一気に拾う方法ってperlだと
間単にできるんですか?
602nobodyさん:02/04/16 00:11 ID:???
>601
LWPを使えば結構簡単にできるが、Web上に置くのは勧められないな。
603nobodyさん:02/04/16 00:14 ID:???
>>599
チャットだとHTML吐き出しだと負荷少ないのか?
604nobodyさん:02/04/16 00:24 ID:???
>603
チャットに限らず、HTML保存させればCGIの呼び出し回数が減るから、相対的に負荷は減る。
605nobodyさん:02/04/16 00:27 ID:???
チャットはHTML保存で付加は減らないと思われ…。
むしろ、共用メモリを使って全てメモリ上でやるのが吉と見た。
606nobodyさん:02/04/16 00:33 ID:???
>>603,>>605
確かにチャットはHTMLでやってもあんまり意味無いよね。
その他にもHTML吐き出しだと運営上デメリットが多すぎる。
607nobodyさん:02/04/16 00:41 ID:???
>>603>>605>>606
>>604の言うとおり、リロード時にCGIではなくHTMLにアクセスさせれば、
負荷減ると思わない?
608nobodyさん:02/04/16 01:07 ID:???
書き出し方によるかな。
保存したログ読んでそっから別のHTMLに書きだすって真似やってたら
HTML吐き出しの方がきついんじゃない。
チャットってリロード以前にその性質上ROMより
書き込むことのほうが多いから。
609nobodyさん:02/04/16 01:11 ID:???
>>607
リロード時の話じゃないけれど。HTML化すると投稿時の動作が
「データをPOST → レスポンス取得」から
「データをPOST → 302 Found取得 → ブラウザがhtmlをリクエスト → 結果取得」
になるので、投稿時の体感速度は確実に遅くなる。低速回線だと少し厳しい。

それにHTML化は参加者:ROMの比がROMに偏っていない限り余り意味が無いと思われ。
610604:02/04/16 01:17 ID:???
>609
それは確かにその通りだ。
ごもっとも。

オートリロード先をHTMLにしておけば多少は軽減になるかな?
メタタグとかでnocacheにしておいて。
611607:02/04/16 01:56 ID:???
>>609
たしかに、チャットなら、書き込み:ROMの比は書き込みのほうが高いか。
612nobodyさん: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
613612 補足:02/04/16 03:43 ID:???
書き込んだ人<>2<><>[email protected]<>日時<><b>[個人 書き込んだ人>受取人]</b> 内緒の話<>書いた人のIP<>受け手のIP<>

ログの形式は上記の通りです。
614nobodyさん:02/04/16 04:07 ID:???
>>612
ログ中に <b>[ っつー文字列が無い行では3行目から8行目までの処理がすっ飛ばされて
前に読み込んであった$cont2が表示されているだけじゃないの?

と適当に答えてみるテスト。
615nobodyさん:02/04/16 04:09 ID:???
>>614
それだな。
616nobodyさん:02/04/16 11:33 ID:???
>>614
馬鹿
>>615
馬鹿
617nobodyさん:02/04/16 13:00 ID:???
ワラタ・・・
618612:02/04/16 13:59 ID:???
>612
あ、本当だ(汗) こんな単純なことに気が付かない私が愚かでした。
鬱だ、書き直そう…

>614-615サンクスコ
6191622: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;
これではエラーが出ます。教えてください。
620名無しさん@edlin :02/04/16 17:30 ID:???
>>619
なんていうエラーがでるんだね?

とりあえず、ぱっと見、あやしそうなところとして、
@all = $query;

push(@all,$query);
に直そう。
6211622: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
623620:02/04/16 18:12 ID:???
>>621
エラーログにはなんて出てる?
Premature end of script headers
とか出てない?
624nobodyさん:02/04/16 18:14 ID:???
>>622
うーんと、Win32版でバイナリオープンてどーやんだっけ。
binmode(OUTPUT);
か。
625469:02/04/16 18:26 ID:???
>>556
早く答えろよゲス野郎
626 :02/04/16 18:28 ID:???
>624
おかげさまで解決しました。
ありがとうございました。
627nobodyさん:02/04/16 19:27 ID:r+rfWQLJ
WinXP上でActivePerl 5.6を使っています。
スクリプトのあるフォルダのパスを得るにはどうすればいいのでしょうか。
open OUT, '>./hoge';
などというようにすると、現在の作業フォルダにhogeが作成されて、
必ずしもスクリプトのあるフォルダには作成されません。
そこで、必ずスクリプトのあるフォルダにhogeが作成されるように、
スクリプトのあるフォルダのパスを得たいんです。
628627:02/04/16 19:36 ID:???
ごめんなさい、$0ってのがありました。
この変数の値を元に取り出すことにします。
629hanamogera ◆kkkKkkko :02/04/16 19:44 ID:QVh0tmfS
@hage = split(/<>/, "hoge<>hogehoge<>");
としたとき、@hageの要素数は2ですか?
つまり、$#hageは1になるんですか?
630nobodyさん:02/04/16 19:50 ID:???
>>629
3
631nobodyさん:02/04/16 19:59 ID:???
>>629
やってみりゃわかると思うけど2だ。perlfuncのsplitを読むべし。
splitはデフォルトで末尾の空文字列を省略する。

3にしたい場合は
@hage = split /<>/, "hoge<>hogehoge<>", -1;
632nobodyさん:02/04/16 20:13 ID:???
ちなみに、最近このスレによく出てくる <> をデリミタにしたCGIって何なのかな?
633nobodyさん:02/04/16 20:23 ID:???
>632
タグの<>を$amp;lt;&gt;に変換すると絶対に文中に<>が出てくることはないから、
CGIでは使い勝手ががいい。
634nobodyさん:02/04/16 20:24 ID:???
>633
タイプミススマソ。
&と$を打ち間違える漏れって一体…(鬱
635627: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になる理由は何なんでしょうか。
636nobodyさん:02/04/16 22:16 ID:???
>>634
心配するな俺もよくある。
それより\とyを打ち間違う漏れって一体・・・(鬱
637nobodyさん:02/04/16 22:21 ID:???
map { "$_", } (0..5); が文法的に間違ってるからエラーになるんだってば。
なんで最後に , を付けたいの?
638632:02/04/16 22:34 ID:???
>>633
なるほど。特定のCGIがそうしてるとか、どっかのページで
推奨してるのかと思ったよん。
639635: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" => ...にして逃げています。
640635:02/04/16 22:42 ID:???
もちろんmap { "$_", } (0..5);の,を=>に書き換え(639であげた例のように)ても、
同じようにエラーになります。
641637:02/04/16 22:59 ID:???
あれ、ほんとだ。よく読んでなくてごめん。
とりあえず動くだけなら
GetOptions map { ("$_:s" => \$config{$_}) } keys %config;
にしたら動いたけど・・・・・・演算順序の関係かな?
642nobodyさん:02/04/16 22:59 ID:???
map { +"$_", }(0..5);

perldoc -f map
643635: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読むの忘れてました。申し訳ないです。
6441622: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と出ています。どうしたらいいのですか?
645nobodyさん:02/04/17 15:29 ID:79RKjLpb
モジュールのBenchmarkについて解説しているサイトありませんか?
googleでいろいろ調べましたけどありませんでした。
646nobodyさん:02/04/17 15:57 ID:???
>>645 perldoc Benchmarkで十分だろ。
647Dream 黒星:02/04/17 16:01 ID:???
>644
CGI の質問ならスレ違いだろ! って、そのエラーログ見て解決できんのか!

>645
以下にアクセスしろ!
ttp://perldoc/-m/Benchmark/
648nobodyさん:02/04/17 16:08 ID:???
>>644
>どうしたらいいのですか?

回線切って首吊って(以下略
649Dream 黒星:02/04/17 16:46 ID:???
>648
なんで回線切ってなんだ?
自サーバでCGIやってるかもわからんだろうに。オマエは頭の弱いヤツだろ!
650645:02/04/17 16:48 ID:PRS3jaLV
英語でわけ分かりません。
Jperlを入れるとドキュメントも日本語になるんでしょうか?
651645:02/04/17 16:51 ID:???
ageてるし。
鬱だ詩嚢。
652nobodyさん:02/04/17 17:00 ID:???
>>644
スクリプト1行目のperlパスが間違ってるとか
653645:02/04/17 17:09 ID:PRS3jaLV
>>650 自己レス
よく見てみたらあまりにも馬鹿な質問してる。
逝ってくる。
654nobodyさん:02/04/17 17:15 ID:???
>>649 >>622でjperlのWIN32版とあるから間違い無く自サーバだろう。 そんな事も分からない馬鹿は首吊って死ね。
655hanamogera ◆kkkKkkko :02/04/17 17:23 ID:7mM3jrq9
>>631
ありがとございやした。
656nobodyさん:02/04/17 17:55 ID:???
>>649 へぇ。回線繋がってないのに2chに繋がるんだすげーナ。
カスは黙ってろよ。
657Dream 黒星:02/04/17 17:57 ID:???
Dream 黒星=469
658632: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)が書き込まれてないってエラー。
659Dream 黒星:02/04/17 19:37 ID:???
>656
2chで書きこんだマシンとCGIやってるマシンが同一である根拠はまだ
どこにもしめされてないだろ! 決め付けでしか考えられないオマエは
もう、ダメポだな!
660Dream 黒星 :02/04/17 19:50 ID:???
>656
2chに書き込んだマシンとCGIやってるマシンが同一だという根拠は?
決め付けで判断するようじゃ、オマエはもうダメポだな!
はなしにならんな、このうすらハゲがっ!

661nobodyさん:02/04/17 20:01 ID:???
なにおぅ!!!
やるかっ このっっっ!!!!
662nobodyさん:02/04/17 20:01 ID:???
おまえなんかしんでしまえばいい!
663nobodyさん:02/04/17 20:08 ID:???
>>660
誰も鯖がどうとか何もいってねぇだろ。馬鹿丸出し。
無理して日本語使うなよボケが。
664nobodyさん:02/04/17 20:10 ID:???
>>662
なんかイイなぁ、そのフレーズ。
665nobodyさん:02/04/17 20:12 ID:???
Dream 黒星 = 469 は無視の方向で。
666nobodyさん:02/04/17 21:40 ID:???
オマエはもうダメポだな! っつうフレーズもおれの中ではヒットだ(w
667ADSLにしたんですが:02/04/17 21:44 ID:BaxakOe1
FTP接続に不具合が。。でまして。
[症状]
ログインはできてファイル受信状態でフリーズまたはタイムアウト。。
なんでしょうかね?
668nobodyさん:02/04/17 21:51 ID:???
>>667
スレ違いだが、クライアントをPASVモードに設定にしる。
669469:02/04/17 21:53 ID:???
>>556
早く答えろよゲス野郎


670nobodyさん:02/04/17 21:59 ID:???
>>669
−操作説明−
   _
 _|\\_            。      【 死 】
 |\_  _\→       (>>669)_   | ̄ ̄ ̄|
 \|  \ \__|     三   (*゜▽゜)   |    |
    ̄\| ̄|      三  (∪∪)    |    |
        ̄          ∪∪     |    |

※右キー以外は使用しません。
671469:02/04/17 22:00 ID:???
>>556
早く答えろよゲス野郎





672ADSLにしたんですが逝きました!:02/04/17 22:04 ID:BaxakOe1
>>668 さすが。。すばらしぃありがとう。
673Dream 黒星:02/04/18 00:38 ID:???
>665
なんで 469 のような無知な野郎といっしょにするのか、オマエの推論の
のまずさは後々ダメポに匹敵するほどのミスをやらかしそうで心配なのは
わたしだけならいいのだが...
674nobodyさん:02/04/18 12:08 ID:CQh2avKk
すいません。hashで
$dic{"apple"} = "りんご";
としたときに、valueである"りんご"からkey"apple"を検索するには
どうすればいいんでしょか?
675nobodyさん:02/04/18 12:52 ID:???
>>674 key全部なめる。同一valueが複数あるかも。
676nobodyさん:02/04/18 12:56 ID:???
>>674
foreach $keys (keys(%dic)){
  if($dic{$keys} eq 'りんご'){ print "ハッケソ $keys\n"; last; }
}
とか。
677nobodyさん:02/04/18 12:57 ID:???
>>675
あ、いけね。複数の場合もあるのね。lastは無しってことで。
678nobodyさん:02/04/18 14:32 ID:???
状況次第だが
%rh = reverse %h;
ってのも使える。
679674:02/04/18 17:19 ID:pC0blCKC
あ、結局そういう一発な関数は無いのですね。
>>678 の reverse が一番近いかも。どうもでした。
680nobodyさん:02/04/18 19:13 ID:BWtEryOi
$text = "URLは、http://www.hogehoge.com です。"
となっている$textの中身を、
"URLは、<a href="http://www.hogehoge.com">http://www.hogehoge.com</a> です。"
という風に、書き換えるにはどうすればいいのでしょうか?
681nobodyさん:02/04/18 19:24 ID:???
>680
正規表現を使う。
682nobodyさん:02/04/18 20:14 ID:???
>>680

$text = "URLは、http://www.hogehoge.com です。";
$text =~ s{URLは、http://www.hogehoge.com です。}{URLは、<a href="http://www.hogehoge.com">http://www.hogehoge.com</a> です。"};

これが不満なら日本語を勉強してから質問しろ。
683nobodyさん:02/04/18 21:10 ID:???
>>680
もちっとスマートにするなら、
$text = "URLは、http://www.hogehoge.com です。";
$text =~ s{URLは、(.+) です。}{URLは、<a href="$1">$1</a> です。"};
かな。
684nobodyさん:02/04/18 21:16 ID:???
>>680
Perlメモにきちんとしたやつがあるよ。>>3のリンク先くらい巡回してから質問しる。
685nobodyさん:02/04/18 22:51 ID:???
>>685
正規表現の[tr]って使いにくいと思った初心者でした。
686nobodyさん:02/04/18 23:19 ID:???
>>686
tr///のどこがどう使いにくいのかなあと思ったおれでした。
687nobodyさん:02/04/18 23:21 ID:???
>>685
きみのカキコは冗長でスマートじゃないな。

正規表現の[tr]って使いにくいと思った。

で十分伝わる。
688685:02/04/19 01:12 ID:???
>>687
そうですね。
[tr]が使いににくい==初心者
ですもんねw
689nobodyさん:02/04/19 01:19 ID:qPOTdo2b
$a = "a(.*?)a";
$d = "aaabbb";
$d =~ s/$a/b/;

とやったら、
s/a\(\.\*\)a/b/;
か、
s/a(.*?)a/b/;
のどちらになるんでしょうか?
690Dream 黒星:02/04/19 01:30 ID:???
[tr]が使いにくいというのは、使い方がわからないのではなくて、
使い方はわかるがもっとよりよい記述法なりがあるということだろ。

そのよりよい(使い勝手のよい)のを教えてくれよ。
691nobodyさん:02/04/19 01:47 ID:Z7cLdJRB
>>690
うるさいっ!ばか!
sでいいじゃないかっ!
692nobodyさん:02/04/19 01:55 ID:???
>>690
「使いにくい」って言った本人が「[tr]が使いににくい==初心者」
つってんのに何妄想してんだ、この馬鹿は。
693nobodyさん:02/04/19 02:10 ID:???
>>689
自分で試せば?
694Dream 黒星:02/04/19 02:19 ID:???
>692
688が、先のことを言った本人だという根拠は?

わたしには685および688のIDが???である以上、両者が同一人物である
という根拠のない決め付けはできないのだが、オマエは決め付けで判断する
ダメポにも匹敵するダメダメプログラマーだろ!

695nobodyさん:02/04/19 02:34 ID:???
黒 星 先 生 ダ メ ポ っ て な ん で す か ?
696Dream 黒星:02/04/19 02:52 ID:???
>695
金融機関コードの違いさえも認識できずにろくなテストデータも作れずに
金融不安を巻き起こすナンチャッテプログラマー集団のことだ!
697nobodyさん:02/04/19 03:06 ID:???
金融機関コードって何ですか?
698nobodyさん:02/04/19 03:14 ID:???
>>696
(゚Д゚)ハァ?
おれは 黒 星 先 生 に訊いたんだよ。なんでお前が答えるんだよ。

おれはいつかお前がDream 黒星と 黒 星 先 生 とを妄想気味に同一人物と取り違えて
ダメポにも匹敵する根拠の無い思い上がりをやらかすんじゃないかと心配だったのだが
まさかこうも簡単に事が運ぶとは・・・(w
699黒 星 先 生:02/04/19 03:35 ID:???
>>695
s/ダメポ/Dream 黒星/g;

Dream 黒星に関する話題は関連スレで。
http://pc.2ch.net/test/read.cgi/php/991102630/
700Dream 黒星:02/04/19 03:45 ID:???
思ったとおりの展開になったので笑わせてもらったよ。

寂しいんだね。こっちは見てて寒かったよ。今夜はあったまって寝るよ。

701nobodyさん:02/04/19 05:14 ID:???
(´-`).。oO(引っ掛けるほうも引っ掛かるほうもダメポだなあ…)
702nobodyさん:02/04/19 05:57 ID:???
WebProg板の名無しをDream☆にしよう。
703Dream 黒星:02/04/19 07:12 ID:???
>>700
>思ったとおりの展開
思ったとおりの展開に引っかかる馬鹿が居るんだね。
704nobodyさん:02/04/19 07:14 ID:???
Dream 黒星=469
705nobodyさん:02/04/19 07:52 ID:???
>>702
それだ!
706687:02/04/19 08:09 ID:???
>>685>>688
ごめん。
きみのカキコは冗長ではなく、適切、いや言葉が足りないくらいだった。

>>690には
「正規表現の[tr]って使いにくいと思った初心者でした。 」
という表現でさえ、初心者であることが伝わらなかったのだから・・・
707nobody:02/04/19 09:23 ID:???
>>689

展開はまず"..."で囲った時に一回起こる => "a(.*?)a"
これは普通の文字列展開ね。だからみてわかるように何も展開
するところがないのでそのまんま。

次に正規表現として使用した時に おこる => s/$a/b/;
この場合$aを展開してるわけで、$aの中身は関係ない。すなわち s/a(.*?)a/b/;となる。

というわけでもしマッチしたらそのマッチした文字列が$1に入る事になる。
708nobodyさん:02/04/19 11:32 ID:???
>>706
はじめのほうから読ませてもらったけど、論理的にはキミの負けだと思う。
朝早くから...よほど悔しかったんだね。

ダメポって、ツボにはまりそー。
709nobodyさん:02/04/19 11:43 ID:???
正規表現の[tr] → 't'又は'r'を表す文字クラス
710nobodyさん:02/04/19 11:47 ID:???
>>709
うむ。正規表現とtr///は全く関係ないから、それが正解だろう。
711nobodyさん:02/04/19 11:48 ID:???
tr演算子は正規表現を使えない・・・
712nobodyさん:02/04/19 13:12 ID:???
パスワード付きサイトの内容(検索結果のページ)を取得したいと思っています。

ログインページは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は、ログインしていないとみなされて、ログインページに飛ばされた内容が
表示されてしまいます。

解決策のヒントをよろしくお願いします。
713nobodyさん:02/04/19 13:12 ID:1w9waxQZ
プロ野球オールスター人気投票!マツリだワショーイ!
http://choco.2ch.net/test/read.cgi/news/1019188835/
714nobodyさん:02/04/19 14:18 ID:???
>>712
何故一度ログインすればその後はName/Pass無しでもログインしているとみなされるのか。
それを考えろ。
まぁHTTP-Headersでも見てみなさいってこった。
715712:02/04/19 14:56 ID:???
>>714
レスありがとうございます。
HTTP-Headersですか・・・探してみます。
716712:02/04/19 18:51 ID:???
>>714
すみません・・・・
HTTP-Headers自体がよくわかりませんでした・・・
もう1つヒントが欲しいです。お願いします。
717nobodyさん:02/04/19 19:37 ID:???
>>716
LWPのドキュメントを調べなされ。
718712:02/04/19 19:52 ID:???
>>717
HTTP::Headersというやつでしょうか
なんとなく調べるべきことがわかりました。
ありがとうございます!

ところで・・・
調べるのは調べるんですが、そもそも私が
やろうとしてることは可能なことなんですかね?(汗
719nobodyさん:02/04/19 20:05 ID:sPCEXxH7
前回は、適切な助言をありがとうございました。

さて、今回はCGI RESCUEにてダウンロードした「マルチパート対応
フォームメール」(form2mail.cgi)を使っています。
その中の機能でファイルをアップロードしてメールに添付する事が
できるのですが、画像ファイルを添付した所、メールで受信して
画像を見ると画像が一部壊れてしまっています。(上部は大丈夫
だけど、下部にいくにつれて緑色になってたりノイズが入ったり
して化けてしまいます)
どうしたら、画像が壊れずに送れるのでしょうか?
720nobodyさん:02/04/19 20:08 ID:???
>>718
HTTPのヘッダが関係あるかどうかは分からんよ。
>何故一度ログインすればその後はName/Pass無しでもログインしているとみなされるのか。
察するに、これがCookieで実現されている可能性があると俺は考えたわけだ。
これが正解なら、取得したヘッダを調べりゃ分かる。
721689:02/04/19 20:41 ID:???
>>707
よく分からない漏れって逝ってよしでしょうか。
722689:02/04/19 20:44 ID:???
>>721
分かった。
723nobodyさん:02/04/19 21:28 ID:???
>>719
binmodeとか
724712:02/04/20 00:02 ID:???
>>720
なるほど。
たしかにヘッダ(これがヘッダなのかな、と自分が想像するもの)
の一番下の行に、クッキーな文字列がありました。
数字の羅列ではありましたが。
725nobodyさん:02/04/20 00:08 ID:???
>>724
その数字の羅列を解析する必要はない。少なくとも、自ら解析コードを書く必要は無い。
要は自作のUserAgentが「Cookieを理解するUserAgentが行って然るべき返信」をすればいいのだから。
726nobodyさん:02/04/20 01:42 ID:gkcEnfWM
print "今日からperlの勉強をはじめました。よろしく";
727nobodyさん:02/04/20 01:47 ID:???
delete $_1017201229{'726:nobodyさん'};
728687,706:02/04/20 05:02 ID:???
>>708
あう?オレの負け?
オレが負けたレスってどれ〜〜〜!?
729nobodyさん:02/04/20 05:25 ID:???
cgi-lib.plやjcode.plって旧バージョンだと
何か不具合でもあるのでしょうか?
古い方がバイト数少ないので
その分サーバ負荷が軽減されるのでは?と思い
質問しました。
730nobodyさん:02/04/20 05:35 ID:???
>729
バージョンアップというのは機能を追加、強化したりバグを修正したりするものだから
最新バージョンのほうがよいと思う。
そっちのほうで負荷軽減するならスクリプトのほうで軽減する努力した方がいいとおもう
731nobodyさん:02/04/20 05:41 ID:???
数十、数百バイトの違いでクリティカルに負荷が変化するようなシステム
使ってるのか?それならPerlが起動しただけでヤバイな。
C言語の経験がないような人ってのは、変な事に気を遣うね。
そんなこと気にする暇があったら自分のコードを見直した方がいいと思うよ。

732729:02/04/20 06:14 ID:???
>>730-731
了解しました。
ありがとうございました。
733nobodyさん:02/04/20 07:28 ID:???
print <<SEX;
cgi-lib.plやjcode.plって使う必要無いような気がするんだが
SEX
734nobodyさん:02/04/20 07:39 ID:???
timeファンクションで秒の部分を出力しないようになんて
可能ですか?
可能であればどうやればいいですか?
735nobodyさん:02/04/20 07:56 ID:???
>>734

time()って秒数を返してくるんだから秒の部分を出力しないって
なんのこっちゃ・・・

それともこういうこと?

use Time::Local;
## 本当の時間が12時0分52秒だったら12時0分0秒に変換
my $secs = timelocal( 0, (localtime( time() )[1..5] );
736nobodyさん:02/04/20 10:23 ID:???
>>734
もしくは、分単位で出したいなら
int(time/60)
737nobodyさん:02/04/20 10:47 ID:???
>>736を秒単位にするなら
60 * int time / 60
738734:02/04/20 11:22 ID:???
>735-736
ネタニ マジレス オバカサン
739nobodyさん:02/04/20 11:28 ID:???
>>737
int(time)に60をかけて60で割る。
CPUがかわいそうだぞ。そんな非生産的な計算。
740nobodyさん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];
---------------------
741nobodyさん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です。
742736:02/04/20 12:00 ID:???
>>738
お前、うんこ。
743nobodyさん:02/04/20 12:14 ID:???
>>741
テキストモードで転送したんじゃないの?
744nobodyさん:02/04/20 12:22 ID:???
>739は優先順位を理解していないアフォ
745preference:02/04/20 13:10 ID:???
ある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.
746nobodyさん:02/04/20 13:19 ID:???
> binmode(BIN)
ナンデスカコレハ
747nobodyさん:02/04/20 13:20 ID:???
>>745
ソースのエラーごときでよばんでくれるか?
しかもソース隠匿。
748preference:02/04/20 13:35 ID:???
ソース
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>
749nobodyさん:02/04/20 13:49 ID:???
>>745
原因はエラー表示そのままで、
「fmail.cgiの7行目にへんな文字(8進で202=16進で82)が混じってる」
からなんだけど、fmail.cgiの1〜7行めまでを見せてくれないとわからない。
>>748の一行目って、fmail.cgiの1行目なの?
750nobodyさん:02/04/20 13:50 ID:???

すげーソースだな。正直、こんなに電波がゆんゆん逝ってるソースは久しぶりに見た。
751nobodyさん:02/04/20 13:50 ID:???
>Unrecognized character \202 at ./fmail.cgi line 7.
7行目に日本語混ざってんだろ、どうせ。ヴォケ。糞。
752712:02/04/20 14:38 ID:???
>>725
わかったような、わからないような・・・・・です。
「LWP::UserAgentを使えばよい」ということですね。やってみます!
>その数字の羅列を解析する必要はない。
>少なくとも、自ら解析コードを書く必要は無い。
>要は自作のUserAgentが
>「Cookieを理解するUserAgentが行って然るべき返信」をすればいいのだから。
753nobodyさん:02/04/20 14:51 ID:???
>電波がゆんゆん逝ってる

電波の擬音語って「ゆんゆん」なのか。

いやどーでも良いんだけど
754nobodyさん:02/04/20 14:54 ID:???
>alarm

綴り変
755nobodyさん:02/04/20 14:54 ID:FTp8XsfB
Perl の勉強スタイルってどうしてますか?
漏れはActive Perl をWindows2000にインストールして、メモ帳とかの普通のテキストエディタでソース書いて、a.plとかで保存して、DOSプロンプト立ち上げて
perl a.pl
とかやってますけど、CPad みたいに効率のいい勉強環境ないですか?
756nobodyさん:02/04/20 15:16 ID:???
>>755
漏れはmuleをパッケージでFreeBSDに入れて、mule -nwで起動してから
セーブ、サスペンド、.M-p[RET],fg
ってやってる。
757nobodyさん:02/04/20 15:32 ID:???
>効率のいい勉強環境ないですか?
こういう人は、何を与えても効率よく使えない人。
758nobodyさん:02/04/20 16:23 ID:???
>>755
漏れはCPadてものを知らないのだが
MacPerl(自前コンソールとエディタ内蔵
winならCopal
簡単な構文チェックにいいよ
759nobodyさん: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
の様に各配列の要素を順番に一つずつ表示させる上手い方法は無いでしょうか?
760nobodyさん:02/04/20 16:36 ID:???
761nobodyさん:02/04/20 16:37 ID:???
760羽虫して
762nobodyさん:02/04/20 16:40 ID:FTp8XsfB
Copal インストして使ってみました。
すごくいいです。ありがとうございます。
763nobodyさん:02/04/20 18:03 ID:sMz1eiXo
foreach(0..3){        #←これ
foreach(a..c){
 print $_;
}
}
この場合1度目の0..3は2度目のforeach文中では何て言う変数に
格納されてるんですか?
764nobodyさん:02/04/20 18:47 ID:???
for(0..3){
print 'LOOP1 = ' . $_ . "\n";
for(a..c){
print 'LOOP2 = ' . $_ . "\n";
}
print 'LOOP1 = ' . $_ . " (゚Д゚;)\n\n";
}
765nobodyさん:02/04/20 18:48 ID:???
>>763
漏れの知識では、外側の$_は内側のループから参照でけない。
766nobodyさん:02/04/20 19:21 ID:FTp8XsfB
chompってどういう意味なの?
chopにmが増えただけなの?
なんでmが付け加えられたの?
767nobodyさん:02/04/20 19:34 ID:???
改行だけchop
768nobodyさん:02/04/20 19:41 ID:FTp8XsfB
それだったらchopnとかになりそうだけど、なぜmが選ばれたのか、そしてなぜoとpの間に挿入されたのかがわかりません。
769nobodyさん:02/04/20 19:47 ID:???
そういうことに疑問を持たない方が賢くなれますよ
770nobodyさん:02/04/20 20:02 ID:???
ちょむぷ
771nobodyさん:02/04/20 20:17 ID:???
>>768 語呂が悪いからだろ。
772nobodyさん:02/04/20 20:19 ID:???
何故nなのか小一時間(以下略

\nのnだとか言ったらアホとしか思えない。
773nobodyさん:02/04/20 20:59 ID:???
>>766
chomp
[動詞]. (むしゃむしゃ)かむ.
774nobodyさん:02/04/20 21:04 ID:FTp8XsfB
>>773
おお、ようやく理解できました。
775nobodyさん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ぐらい)の状態でサーバーにアップロードしてから実行しても
あいかわらず画像が崩れてしまい、状況は変りませんでした。
何か他に疑う所はありますでしょうか?
776nobodyさん:02/04/21 00:58 ID:???
>>775
まずbinmode()についての理解を深めなさい。
動作の解らない関数をコードに入れるなんてナンセンス。
予備知識としてUNIXとDOSのテキストファイル形式の違いも勉強するとなお良し。
777キリ番厨:02/04/21 02:06 ID:???
スリーセブンオメ>俺
778nobodyさん:02/04/21 02:20 ID:???
>>775
どっかのUp板にそのIスクリプトUpしてくれると、なにかわかるかも。
779nobodyさん:02/04/21 02:27 ID:???
>778
おせっかい野郎登場ってか?
780778:02/04/21 02:36 ID:???
>>779
すまん、そのとーりだ。Upしなくていいよ>>775
781nobodyさん:02/04/21 02:55 ID:???
>>780
煽りにマジレスしなくても…。
782nobodyさん:02/04/21 04:34 ID:5EokjXuO
>781
煽りにマジフォローしなくても…。
783nobodyさん:02/04/21 05:35 ID:???
(´-`).。oO(煽り厨の >>779 = >>782 [ID:5EokjXuO] はCGIスレでも大活躍だね・・・・)
784nobodyさん:02/04/21 08:39 ID:1/Tdsylw
質問です。
配列@a=("hoge1","hoge2","hoge3"〜)で@aの要素として存在する文字列に関して
連想配列%flagを$flag{'hoge1'}=1
というふうにしたいのです。
foreach $_ (@a) {$flag[$_] = 1;}
とするとflagは全部1になってしまいます。
どのようにすればうまく行きますか?
785nobodyさん:02/04/21 09:02 ID:zdYHTsmZ
>>784
ちょっと変えて
$n=1;
for ( @a ) { $flag[$_] = $n; $n++; }
とかどうでしょう。
786nobodyさん:02/04/21 09:50 ID:???
>>785
ありがとうございます。$flag[$_]=1の間違いですか?
どちらにしても上手くいかないようです。
787nobodyさん:02/04/21 10:00 ID:???
>784
おまえがどうしたいのかわからないよ。
hoge2の時は?hoge3の時は?
788nobodyさん:02/04/21 10:10 ID:???
>>784
全部1でOKなんじゃないの?
それとも出現回数をカウントしたいわけ?
789784:02/04/21 10:19 ID:???
@aに文字列があるかどうかを調べたいんです。
hoge2がなければ$flag['hoge2']が1になって欲しくないんです。
よろしくお願いします。
790784:02/04/21 10:20 ID:???
ああ、そうか。書き方が悪かったです。
@aが可変なんです。
791nobodyさん:02/04/21 10:33 ID:???
%flag = ();
for (@a) {$flag[$_] = 1;}
こうしたいのか? これじゃ無ければ手に負えん、後は任せたぞ>>793
792nobodyさん:02/04/21 10:38 ID:???
for $_ (@a){ $flag{$_} = 1 } じゃダメなの ?
あるかないかは、if defined $flag{...} でわかると思うけど...。
# 何故、連想配列なのに $flag['hoge2'] とか書くの ?
793nobodyさん:02/04/21 10:39 ID:???
そりゃ1かどうかの問題じゃなくてハッシュにキーが
存在するかを調べればいいことだろ。
で、おまえがなぜこの程度のことを出来ないのかがわからない。
794784:02/04/21 11:18 ID:???
すみません。単純に連想配列の表現に{}とするところを
[]としていたせいだったっぽいです。792さんに指摘されて気づきました。
大変お騒がせしました。
ところでみなさんforeachって書かないんですね。
795nobodyさん:02/04/21 13:11 ID:???
>794
人の自由さ。foreachとforはほぼ同じだし
796nobodyさん:02/04/21 13:20 ID:???
ほぼ、どころか全く同じだったり。
797やさしいお兄さん:02/04/21 13:58 ID:???
>784
こういうことでは?

@a=("hoge1","hoge2","hoge3");
@flag{@a}= (1) x @a;
for ( keys %flag ){
    print $_,": ",$flag{$_},"\n";
}
798nobodyさん:02/04/21 16:03 ID:???
弐編=神 >>>>>>>>>> Dream★=上級者 >>>>>>>> やさしいお兄さん=中級者 >>>>> 初心者 >>>>>>> japu=異常性愛車 >> _gunzip=厨房
799nobodyさん:02/04/21 16:05 ID:???
>>798
激しく同意
800nobodyさん:02/04/21 16:05 ID:???
800げt
801nobodyさん:02/04/21 16:12 ID:???
変数内のダブルクオーテーションは、どやって置換すればいいでしょうか?

前のページでテキストボックスから送られてきたデータの中に、 " が入ってると
処理がうまくいかないです。んで、置換しようと思ったのですが
$test =~ /"/\"/g;
とかやっても置換してくれません。お助けくだされ。
802nobodyさん:02/04/21 16:14 ID:???
>801
具体的に問題となった処理を提示してください。
803nobodyさん:02/04/21 16:21 ID:???
>801
何がどううまくいかないのか、さっぱりわかりません。
ついでに、
$test =~ /"/\"/g;
これはコンパイルエラーになります。
804名無しさん@edlin:02/04/21 16:27 ID:???
>>801
$test =~ s/"/\\"/g;
でしょ?
805nobodyさん:02/04/21 16:30 ID:???
弐編=神 >>>>>>>>>> Dream★=上級者 >>>>>>>> やさしいお兄さん=中級者 >>>>> 初心者 >>>>>>> japu=異常性愛車 >> _gunzip=厨房



806nobodyさん:02/04/21 16:35 ID:???
弐編=神 >>>>>>>>>> Dream★=上級者 >>>>>>>> やさしいお兄さん=中級者 >>>>> 初心者 >>>>>>> japu=異常性愛車 >> _gunzip=厨房






807nobodyさん:02/04/21 16:41 ID:???
弐編=神 >>>>>>>>>> Dream★=上級者 >>>>>>>> やさしいお兄さん=中級者 >>>>> 初心者 >>>>>>> japu=異常性愛車 >> _gunzip=厨房



















.
808定型文:02/04/21 16:41 ID:???
Dream★必死だな。
809nobodyさん:02/04/21 16:44 ID:???
>>805-807
激しく同意。
激しく同意
810nobodyさん:02/04/21 16:45 ID:???
------------------------終了------------------------

------------------仕切りなおして再開-----------------
811コレが真実だ!:02/04/21 16:47 ID:???
弐編=神 >>>>>> Dream★=上級者 >>>>>> やさしいお兄さん=中級者 >>>> 初心者 >>>>>>> japu=異常性愛車 > _gunzip=厨房
812nobodyさん:02/04/21 16:48 ID:???
みんな死ねよ!
813nobodyさん:02/04/21 17:01 ID:???
Dream★くん、荒らすなよ。
814nobodyさん:02/04/21 17:20 ID:???
>>811 全くその通りだな。
815nobodyさん:02/04/21 17:31 ID:???
Dream ★ = 469 うざい。
816nobodyさん:02/04/21 17:37 ID:???
Dream ★ って臭うな。 糞したれケツぐらい拭けよ。
817nobodyさん:02/04/21 17:40 ID:???
嵐は無視ということでお願いします。
818nobodyさん:02/04/21 17:48 ID:???
弐編=神 >>>>>> Dream★=上級者 >>>>>> やさしいお兄さん=中級者 >>>> 初心者 >>>>>>> japu=異常性愛車 > _gunzip=厨房



認めろよ(藁)
819nobodyさん:02/04/21 18:06 ID:???
>>798>>805-807>>811>>813>>818
等はこう書きたかったと思われ。

_gunzip=神 >>>>>> japu=上級者 >>>>>> やさしいお兄さん=中級者 >>>> 初心者 >>>>>>> Dream★=異常性愛車 > 弐編=厨房

Dream★は自覚してるんだねw
820nobodyさん:02/04/21 18:10 ID:???
PerlTkに詳しい人はいませんか?
821469:02/04/21 18:13 ID:???
_gunzip=厨房

これだけは認めろよな。
822nobodyさん:02/04/21 18:17 ID:???
>821
仮にそれを認めたとしたって
_gunzip氏>>>(以下略)821
こうなるのは明白。
823nobodyさん:02/04/21 18:20 ID:???
>>822
ワラタヨ
824nobodyさん:02/04/21 18:23 ID:???
>>820
ギコタク作者は?
825nobodyさん:02/04/21 18:36 ID:???
>>824
全然詳しくないと思う
826nobodyさん:02/04/21 18:38 ID:???
>>825
なんで?
827nobodyさん:02/04/21 18:46 ID:???
>>826
Tk部分は_gunzipさんがほとんど作ってたじゃん
828nobodyさん:02/04/21 18:47 ID:???
Jarlの作者は確実にPerl/Tkに詳しいな。
http://jarl.sourceforge.net/
まぁ825が一番バカなわけだが。
829469:02/04/21 18:48 ID:???
ギコタク作者 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> _gunzip
830469:02/04/21 18:49 ID:???
とにかく、中傷できれば誰でもいい。
831nobodyさん:02/04/21 19:20 ID:???
しつもーん
1. if ($string eq "hoge") {
2. if($string eq "hoge"){
3. if ( $string eq "hoge" ) {
4. if( $string eq "hoge" ){
どれが好きですか?細かいけど
832_gunzip:02/04/21 20:05 ID:???
>>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を使おうとして、かえって不便に)
833名無しさん@edlin:02/04/21 20:25 ID:???
>>831
もちろん1
834nobodyさん:02/04/21 21:29 ID:???
>>831
4、かな。
835nobodyさん:02/04/21 21:44 ID:???
>>831
細かいが
if ($string eq 'hoge') {
「"」より「'」の方が変数置換無い分だけ早そうな気がするが、嘘かも。
836nobodyさん:02/04/21 22:29 ID:???
コンパイル時に判別できるので変わらない。
837nobodyさん:02/04/21 22:51 ID:???
そのコンパイルがちびっと早いかな...と
838nobodyさん:02/04/21 23:35 ID:IQt5Pbmu
>>835-837
CGI 用にコンパイル無し、インタプリタとして動かしてるなら効果ある?
839名無しさん@edlin:02/04/21 23:47 ID:???
>>838
それはちょっと勘違いしている。
通常のインタプリタとして実行する時も、中間コードにコンパイル
され、実行されるんだけど、その「コンパイル」を指してるんだよ。
840nobodyさん:02/04/21 23:49 ID:???
>>839
あぁ…そう言う事か。混乱してた
とうい事は、変数置換があり得ない文字列はリテラルにした方がいいのか…
841837:02/04/22 00:04 ID:???
>>840 自分で書いといてなんだが、おそらく効果は無い(測定不可能なレベル)。
気分の問題。(w
842nobodyさん:02/04/22 04:49 ID:5JDbu1pP
金額を3ケタごとに「,」で区切りたいんですが、
どのようにすればいいのでしょう。

sprintf(); で簡単に記述できたと思ったのですが
どうしても見つかりません。

ご存じの方いましたら教えてください。
843nobodyさん:02/04/22 06:05 ID:???
sprintf以外の方法なら知っていますが、
sprintfを使った方法が見つからないのでごめんなさい。
844nobodyさん:02/04/22 06:44 ID:???
ごめんちゃい
845nobodyさん:02/04/22 09:02 ID:???
>842
$_ = reverse join ',', grep !/^$/, split /(\d\d\d)/, reverse $_;
846nobodyさん:02/04/22 09:40 ID:???
>>845
クライアント様のご要望で、どこかにsprintfを噛まさないといけないようです。
$d = reverse sprintf "%s", join ',', reverse($d) =~ /\d{1,3}/g;


つーかメモ。
847nobodyさん:02/04/22 11:39 ID:???
>>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
だそうです。
ちなみに、オレ自身、コレがどういう理屈(仕組み)でうまくいくのか
理解してません。でも、ちゃんと動いてる。うーむ。
848712:02/04/22 21:42 ID:bQF56S81
>>712の質問に答えてくださった方々、ありがとうございました。
以下の方法でなんとか形にはなりました。

use LWP::UserAgent;
use HTTP::Cookies;
$ua = LWP::UserAgent->new;
$ua->cookie_jar(HTTP::Cookies->new("",autosave => 1));
$request = HTTP::Request->new('GET', "http://XXX.com/YY.asp?ID=ID&PASS=PASS");
$response = $ua->request($request)->as_string;
$request = HTTP::Request->new('GET', "http://XXX.com/ZZZ.asp?・・・・");
$response = $ua->request($request)->as_string;
print $response;
849nobodyさん:02/04/22 22:37 ID:???
http://vldb.gsi.go.jp/sokuchi/surveycalc/algorithm/xy2st/xy2st.htm
これをPerlでやる方法はどうすればよいのでしょうか?
ルートのところがよくわからん・・・。
850nobodyさん:02/04/22 22:41 ID:???
>>848
そうか、そりゃよかった。

851nobodyさん:02/04/22 22:44 ID:???
平方根はsqrt()だが、そんな事が聞きたいわけじゃないよな…。
852nobodyさん:02/04/22 23:39 ID:NaATCEmQ
coreファイルの自動削除をperlで行うにはどうすればいいのでしょうか?

この質問、FAQだと思うんですが、FAQをまとめた所が無いし
過去スレにも載ってないようなので、質問しました。
853Dream 黒星:02/04/23 00:36 ID:???
>847
g オプションは意味がないから外せ!
でも、もっと速い方法があるが... オマエ等にはそれで十分だ。
854nobodyさん:02/04/23 02:52 ID:???
>852
if(coreファイルがあるか?){
unlink(coreファイル);
}

855847:02/04/23 03:35 ID:???
>>853
オレに言わないでくれ・・・
「/gだけじゃうまくいかないこともあるんだよ」っつー例として
に載ってたので、仕方なくついてんだろうよ。

あんたが本当にもっと速い方法を知ってるのかどうかわからんが、
もうこのスレでオナニーカキコはやめてくれ。頼むよ。
856842:02/04/23 04:34 ID:???
金額の「,」付け色々方法あるのですね。
勉強になりました。ありがとうございます。
857nobodyさん:02/04/23 15:37 ID:???
.       /.-―ー-.ヽ、
      /☆" ̄ ゙̄ヽ/
   __ Y´ノノノ"ヽヽヽ    / ̄ ̄ ̄ ̄
.  ヾcヽ.l(| ∩  ∩|)|  < Dream は天然ばか♪
    \ \、 ▽ ノjl|    |
      `く ヾ=oノ_ブ゙i   \___
        i  (;) ,___|
       |___| .|
        |  i|  (,,ノ
        |  7  ノ
        |_l\ノ,>
.        | | |_ノ
.        (_)
858nobodyさん:02/04/23 17:35 ID:???
while (1)
は分かるんですが、
1 while
はどういう意味なんでしょうか?

低レベルな質問ですいません。
859nobodyさん:02/04/23 20:13 ID:???
while(expr){ f() }
f() while expr;

if(expr){ f() }
f() if expr;

foreach (expr){ f() }
f() foreach expr;

860nobodyさん:02/04/23 20:21 ID:???
while /pattern/g って無限ループにならないのはなぜですか?
861nobodyさん:02/04/23 20:39 ID:???
>860
マッチングのチェックをするポイントが移動するから。
gオプションは「何度も繰り返す」じゃなくて「最初の一回で終了をしない」というものだから。
862nobodyさん:02/04/23 22:03 ID:trg6QFfS
$temp{aaa}[0] = 'aaa';
$temp{aaa}[1] = 'bbb';
foreach(0..1){
print;
}
↑の変数は何なのですか?
@temp{aaa} = ('aaa','bbb');
だとダメだし。。。
863nobodyさん:02/04/23 22:08 ID:???
>>862
(´-`).。oO(何をしたいのか書いてない…こういうバカばっかりで教える気にもならん…)
864nobodyさん:02/04/23 23:11 ID:???
>862
ハッシュに配列リファレンスが入ってるのではないでしょうか。
865(´-`).。oO(もれそう…) :02/04/23 23:15 ID:???
$temp{aaa} = ['aaa', 'bbb'];
print "$temp{aaa}[$_]\n" foreach (0..$#{$temp{aaa}});
866nobodyさん:02/04/23 23:51 ID:???
>>864-865
こんなの出来ないのか?と思ってやったらずばりできたので
質問させてもらいました。
ありがとうございました。
>>865
(・∀・)<バカっていったやつが〜〜の起源はこんな感じか?
まさに何をしたいわけでも無いです。
反射的にバカバカいう、かつ自分も〜な人に教えを請うつもりはありません。
867nobodyさん:02/04/23 23:54 ID:???
>866
とりあえずレス番間違いを修正しとけ。
そんな間違いして気付かずに入るとバカと言われても否定できなくなるぞ。
868nobodyさん:02/04/23 23:55 ID:???
>867 =~ s/気付かずに入ると/気付かずにいると/;
漏れがバカでした、逝ってきます。
869866:02/04/23 23:59 ID:???
>>865>>863です。。。
すいません。
漏れもバカでした、逝ってきます。
870nobodyさん:02/04/24 00:04 ID:???
オモロイぞ>>868-869
871nobodyさん:02/04/24 03:02 ID:???
アホばっかりですねこのスレ
やだやだ
872nobodyさん:02/04/24 07:22 ID:???
アホばっかりです。ねこのスレ。
やだやだ
873nobodyさん: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では問題なく受信してくれます)
原因のわかる方はいらっしゃいますでしょうか?
874nobodyさん:02/04/24 17:46 ID:???
>>873

CGIだけど、なんか質問ある? part 6
http://pc.2ch.net/test/read.cgi/php/1019561283/
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に記述されませんでした
876nobodyさん:02/04/24 18:47 ID:???
>>875
おしいね。追記したいなら
open(OUT,">$backupFile");
じゃない?($backupFileの1文字目が「>」なので)
877反抗期:02/04/24 18:52 ID:/vYDcPy6
キタ━━━━━━(゚∀゚)━━━━━━ !!!

>>876
お母さんありがとう!
878 :02/04/24 18:54 ID:ST7JH4TO
はじめまして。
質問させてください。
よく、掲示板の機能で、出身地をリストから選んで
入力できたり、アイコンをリストから選んで入力できたり
するけど、ああいうのをカスタマイズ(例えば、
出身地じゃなくて、血液型を入力できたり)
したいのですがそういう説明のあるサイトとかありますか?
それとも簡単なことですか?
879nobodyさん:02/04/24 19:18 ID:???
>>878
うん。簡単。
880nobodyさん:02/04/24 19:27 ID:???
<option>出身地A</option>
<option>出身地B</option>



<option>A型</option>
<option>B型</option>

881878:02/04/24 19:29 ID:ST7JH4TO
>>879
もし、あなたに頼むならいくらでやってくれますか?
一箇所だけです。
出身地を血液型に入れ替えるだけです。
882873です。:02/04/24 19:50 ID:47ftV//x
うんこが漏れました。くすん。
883nobodyさん:02/04/24 21:20 ID:???
>>881
スクリプト改造工房
http://pc.2ch.net/test/read.cgi/php/1012839651/

既存のスクリプトの改造してほしいんだったらこのスレにどーぞ
改造依頼するときは 1 の注意書きよく読んでね
884878:02/04/24 21:56 ID:???
>>881
税込み105円で。
885844:02/04/24 21:57 ID:???
>>884
878->879
886nobodyさん:02/04/25 17:07 ID:eszjGBC/
perlをいれてないんだけど、スクリプト作れるよね?メモちょーだけで
887nobodyさん:02/04/25 18:46 ID:???
作れるよ。でもperl入れなきゃテストする環境がないんじゃない?
888pear ◆PeArra/s :02/04/25 19:54 ID:Va/Pba3y
KENT-WEBのPETIT BOARDを改造したのですが、動作しません。
症状は、最初の画面は出るんですけど、
ローカルでテスト書き込みをすると、500エラーを吐いてしまいます。
ソースは↓にアップしました。
http://www.geocities.co.jp/Playtown-Knight/7767/petit.txt

よいアドバイスお待ちしています、よろしくお願いします。
889nobodyさん:02/04/25 20:03 ID:???
>888
なにをどう改造したか説明しる。
そして>883に逝く。
890nobodyさん:02/04/25 20:03 ID:???
>>888
重要なのはエラーコード(500)ではなく、エラーログだ!
エラーログよこせ。
891nobodyさん:02/04/25 20:05 ID:UbehO4w6
もしスレ違いだったらごめんなさい。
HPの掲示板が荒らされまくって困っています。
書き込んでいる人間のIPアドレスを知る方法がわかる方がいらっしゃったら
教えていただけないでしょうか?
もしくは書き込み不能にできる手段はありますでしょうか?
されるがままで困ってます。
よろしくお願いします。
892nobodyさん:02/04/25 20:40 ID:???
>891
明らかにスレ違いだが。
IPを取るのは簡単。
書き込み不能にするのも簡単。
だがしかしIPアドレスなんてのはいくらでも変えられるからあまり意味がない可能性が高い。
その掲示板は閉鎖して、身内にはメールを送り隠れ掲示板を置くのが建設的。
893rootvg:02/04/25 22:13 ID:J89k1oOV
http://www.sunseagull.com/join.htm?from=freespace.jp

送信ログを抜きたいのですが。。。。。。。
894nobodyさん:02/04/25 22:15 ID:???
もういいから帰ってください
895891:02/04/25 22:28 ID:UbehO4w6
>892
御親切な書き込みありがとうございました。
当方、本当に初心者で別の板でこちらを紹介していただいたのですが、
ここもスレ違いだったんですね、すいません。

>IPを取るのは簡単。
>書き込み不能にするのも簡単。

もし、お手間でなければ教えていただけないでしょうか?
もしくは詳しいサイト(板?)を教えていただけると助かります。
よろしくお願いいたします。
896nobodyさん:02/04/25 22:59 ID:???
>>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;
}
897nobodyさん:02/04/25 23:02 ID:T2XLP+gT
こんにちは。
先日、CGI検索エンジン(ヤフーのようなタイプで管理者のみ登録可能)と、一般的にごくごく普通の掲示板の制作を依頼しようとしたら、合わせて20万円と見積もりがきました。
条件としては、「著作権表示なし」ということで、この値段はどうなのでしょうか?
みなさんのご意見をお聞かせください。
また、上記のような物であれば、いくら位が妥当なのでしょうか?
宜しくお願いします。
898nobodyさん:02/04/25 23:26 ID:???
>>897
スレ違い
どっか逝け
899nobodyさん:02/04/25 23:27 ID:???
>>896
スレと関係ないけど、Fuck So Reena!ってナニ?
はくそりーなへと関係アリ?
900nobodyさん:02/04/26 00:40 ID:???
WinXP + ApacheWin32 1.3.24 + ActivePerlで
CGIProxy(ttp://business.millto.net/~quadrant/)を使いたいのですが、どうも動きません。
use Socket; を入れてみても動かないのですが、ソケットを使うには如何すればいいのでしょうか?
どなたかご教授お願いします・・・
901900:02/04/26 01:04 ID:???
ちなみに、「サーバーが見つかりません」になり、エラーログには何も出力されません
902896:02/04/26 02:14 ID:???
>>899
そそ。
903nobodyさん:02/04/26 05:34 ID:Q56RTaUT
GnuPGを、perlスクリプトから動かそうと思い、system関数を使えば
いけそうなのはわかったのんですが、どうにもうまく動きません。

/usr/local/bin/gpg -ea -r D44EC5AA aaaa -o bbbb

telnetでログインし、上記コマンドを打って、
bbbbファイルが暗号化されるのは確認しました。

単にこのコマンドをperlスクリプトから打ちたいだけなのですが、
これをsystem関数でやるには、どのような書き方をすればいいのでしょうか?
初歩的な事ですみません、検索してもよくわからなかったのでお願いいたします。
904pear ◆PeArra/s :02/04/26 07:00 ID:???
>>889-90
ごめんなさい、改造中に誤って1行消してしまったみたいで…
今は正常に動作しています、迷惑かけてしまってすいません。
>>897
業者に依頼するなら妥当だと思う
905アリソン:02/04/26 08:13 ID:???
ディレクトリの中の特定のファイル名を持つものを
削除したいんですが例えば
april1.html
april2.html
april3.html
april4.html
と言うファイルがある場合
aprilの後3以下の数字ならそのhtmlファイルを削除する場合
ってのはどうすればよろしいんでしょうか?検索してもわかりませんでした。
教えてください。
906nobodyさん:02/04/26 08:26 ID:???
試してないので注意。
使用する前にまず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($_);
}
907nobodyさん:02/04/26 08:45 ID:???
>>905
system('rm april*.html');
908nobodyさん:02/04/26 10:42 ID:???
unlink('april1.html');
unlink('april2.html');
unlink('april3.html');
909nobodyさん:02/04/26 10:53 ID:qDk2ux2I
@_ ってなんですか?
910nobodyさん:02/04/26 11:04 ID:???
>907
それだとapril4.htmlまで消さないか?
911nobodyさん:02/04/26 12:13 ID:???
File::Copy を利用しようか検討しているのですが
サーバ側でこの標準モジュールが許可されているか確認する為に
管理者へ連絡する以外に、perlを利用して確認する方法は存在しませんでしょうか?
912nobodyさん:02/04/26 12:50 ID:???
使えば良いじゃん?
913nobodyさん:02/04/26 12:52 ID:???
モジュールがインストールされてるかどうか、ってこと?
telnetとかできるんだったら

/path/to/perl -MFile::Copy -e 'print "yes\n"'

でエラーが出なければOK。
914911:02/04/26 13:40 ID:???
追記です
因みに、Web 用の CGI として試行錯誤しております

>>912
実際試してみたところ、ブラウザにてエラーが発生しました
しかし、文法チェックを行っても OK で戻ってきているので
考えられる原因が、モジュールが未組み込みの為に発生しているのかと
疑問に思った次第なのです。

利用すれば判明すると言う事は
ブラウザ上のエラーメッセージにて
何らかの確認が行えると言うことでしょうか?

>>913
どうもありがとうございます!
しかしながら、当方一般のユーザ扱いになりますので
サーバへ telnet する事ができません...

スカポンタンなお話で恐縮なのですが
port 21 へ telnet する権限しかない場合でも
先のコマンドを実行することは可能なのでしょうか?
915pear ◆PeArra/s :02/04/26 13:59 ID:???
>>909
配列名が省略されている形式だと思います。
916nobodyさん:02/04/26 16:38 ID:???
>>909
でんでんむし。 @_;"
917アリソン:02/04/26 16:43 ID:???
>>906
ありがとうございます。でも500エラーになってしまいます。
918nobodyさん:02/04/26 17:05 ID:TLJObIwR
http://xxx.com/bbs/abc.cgi?keyword=nobody
というふうにアクセスすると、
$FORM{'keyword'}に、nobodyが格納されるようにする方法がわかりません。
教えてください
919nobodyさん:02/04/26 17:54 ID:???
>>918
$FORM{$1} = $2 if $ENV{'QUERY_STRING'} =~ /(.+)=(.+)/;
920pear ◆PeArra/s :02/04/26 17:56 ID:???
>>918
cgi-lib.pl を使えば実現出来ると思います。
次のような感じでスクリプトに書き込めばいいかな?
もしかしたら違うかも…(汗

require './cgi-lib.pl';
&ReadParse(*FORM);

■ The cgi-lib.pl Home Page
http://cgi-lib.berkeley.edu/
921912 :02/04/26 18:13 ID:???
>>914
500吐いて確認出来ないんなら、シンプルにモジュールだけincludeして
それで判断する位が一番簡単じゃ無いの?

後はtelnet.cgiとか拾って来て、サーチパス(@INCだっけ)見てみるとか

それかshで簡単なスクリプト書いて、エラーをファイルにでもリダイレクト
して(>&2だったか)ログ取るか。

つーかCopyってカレントに突っ込めば動くんじゃネーノ?
最近全然コード書いてないんでね  すまんね

922ななしさん:02/04/26 18:22 ID:???
もうだめです。ツリー掲示板のツリー表示ができません。
氏にます。
923pear ◆PeArra/s :02/04/26 18:46 ID:???
>>922
ソースがないと誰も何も言えませんよ…
俺は詳しくないのでもともとアドバイスできるとは思いませんが…
924GEN ◆O4y3A80k :02/04/26 18:53 ID:wC8cY983
>>923
922はただの嘆きでしょう。
925nobodyさん:02/04/26 19:02 ID:???
>>File::Copyで困ってるやつ

一つ言っとくと、モジュールがインストールされていなければsyntax checkも失敗するから。
以下のコード試して見れ。

#!/usr/bin/perl -w

print "Content-Type: text/plain\n\n";
print eval{ require File::Copy; } ? "ok" : $@;
926ななしさん:02/04/26 19:10 ID:???
>>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
 │   
 │   おおおお
 │   
ここまで

みたいになってしまい、きれいに表示されないんです..

927nobodyさん:02/04/26 19:27 ID:???
HTMLの勉強した方がいい。
928pear ◆PeArra/s :02/04/26 19:30 ID:???
>>926
3%ぐらいの確率でわかるかも…
とりあえずテキストでソースうpしてみて。
929File::Copyで困ってるやつ:02/04/26 19:47 ID:???
>>925 さんのコードを対象のサーバにて試してみたところ
"ok" が表示されました...、ということはモジュールは導入
されているという事で良いでしょうか?

であれば、エラーの原因は自分のコードミスにある模様ですので
激しく逝ってきます!

930926: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);
}
}

へぼなコードでほんとにすいません。おねがいします。
931pear ◆PeArra/s :02/04/26 20:14 ID:???
>>930
ごめんなさいわかりません。
932nobodyさん:02/04/26 20:41 ID:???
よくそんな汚いコードで頼みに来るねえ・・・
933nobodyさん:02/04/26 21:03 ID:???
>>932
初心者スレなんだしそんなこといっちゃ身もふたもないと思われ
934nobodyさん:02/04/26 21:25 ID:???
@dataのまま判りやすい名前をつけようともせず、
人に理解してもらおうという気がないようだと思っただけだよ。
@{$restree{$log}}が何かも書かずにさ。
935903: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

もし対処法や解説ページがありましたら、よろしくお願いいたします。
936nobodyさん:02/04/27 00:25 ID:???
>>930
@{$restree{$log}}がなんだかはシランが、ツリー掲示板なら
ログがあるはずだから、そのログを精査して子記事のあるものに
フラッグつけろ。
で、whileかかってる記事番号の処理の中でフラッグがあれば
そいつの下に線をたらせばいんじゃないかい?
937nobodyさん:02/04/27 00:30 ID:???
>>935
system()後の $? はどうなってる?
938nobodyさん:02/04/27 00:33 ID:???
>>932
汚いだなんだ言う前に手本の一つでも見せろや?暇なのか?
939nobodyさん:02/04/27 01:15 ID:pZywQtFX
perlでDOMを扱えるんでしょうか?
ともかく分からないので、質問自体が間違ってるかもしれませんが。
940nobodyさん:02/04/27 01:23 ID:???
perlでZAKUを扱えるんでしょうか?
ともかく分からないので、質問自体が間違ってるかもしれませんが。
941nobodyさん:02/04/27 01:42 ID:???
とりあえず>>930は変数の意味を教えてくれ。(まだ見ているなら)
でないとさすがにわからんと思うぞ。
942nobodyさん:02/04/27 02:03 ID:???
>>939
XML::DOM、XML::LibXML、XML::GDOMEなどなど。XML関係は腐るほどあるけど。
思うに一般のプロバイダーのサーバーではインストールされていないかと。

>>940
おもろい。
943903:02/04/27 02:09 ID:???
>937

$?の中は512となってますが。

できあいのCGIを設置したり、ちょびっと変えるぐらいしか
やったことない身には、さっぱりわかんないです。
944nobodyさん:02/04/27 02:31 ID:???
>>943
CGIからファイル作れるように、ディレクトリのパーミッションちゃんと開けてる?
945nobodyさん:02/04/27 02:44 ID:???
>>939
だうんろーど おんりー めんばー?
Perlで人を扱うことはできません
946nobodyさん:02/04/27 02:53 ID:???
>>942
モジュールも鯖にあげてパス通す、というのは出来ない?知らんけど。
#/usr/bin/perl -I~/cgi-bin/
みたいのを1行目にするとか。
947903:02/04/27 02:59 ID:???
>944

パーミッションは問題ないはずなんですが、、、
全開放で試してもダメでした。

海外のページを探してみたら、GPG対応のフォームメールが
いくつか見つかりました。これを改造して使えないかなと中を見てるとこです。
日本語の解説ページもたくさんありそうなもんですがねぇ、
関連ワードで国内を検索しても、ショッピングサイトしかでてこないです。
948944:02/04/27 03:22 ID:???
>>947
スクリプトが、そのsystem()の行まで辿りつく前にエラーになってる可能性は
ないかな?
実行パーミッションがついてないとか、perlのpathが間違ってるとか。
あと、telnetでログインしたときと、CGIで叩いた時の $PATH が
違うという可能性か、入力ファイルが実は無かったとか。うーむ。
推測だらけですまん。
949903: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ファイルが作られません、
絶対パスでファイルを指定してもダメ。
すごい初歩的な思い違いをしてるような気もしますが、、、。
950944: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`;
てな感じで、エラー表示されないかなぁ
951903:02/04/27 04:39 ID:???
>944
こんな時間までお付き合いいただいて恐縮です。

やってみましたが空白ページでした、は〜ぁ。
試しに自分のPCにGPG、AN HTTP、ActivePerlを入れてテストしたら
無事に暗号化ファイルが作られました。

う〜ん、何なんでしょ?
関係のあるファイル、ディレクトリを
777にしちゃいましたが動かないし。
952nobodyさん:02/04/27 04:40 ID:???
>>946
でもXML::DOMもXML::LibXMLもXML::GDOMEもCライブラリが必要でしょ
(expat,libxml2)?なんかそこまでするのもなぁ、と。できないことは
なかろうが。
953nobodyさん:02/04/27 04:48 ID:o5qoi2dC
例えば5*1.3を実行すると6.5になりますよね?
この少数点以下を切り捨てにしたい場合はどうすればいいんでしょうか?
954nobodyさん:02/04/27 04:52 ID:???
perldoc -f int
perldoc -f sprintf

my $foo = sprintf( '%d', 5 * 1.3 );
955nobodyさん:02/04/27 05:27 ID:???
>>953
>954とかuse integer;とか
956903:02/04/27 08:02 ID:???
>944

問題はGPGの環境変数の設定にあったようです、
$ENVで設定すればOKでした。
お付き合いいただいて、本当にありがとうございました。
957Atsuhi ◆UvChluUE :02/04/27 10:08 ID:vZVa5O3I
<FORM action="test.cgi" method=POST>
<input type=text name=2ch></form>

GETorPOSTフォームから送信された内容を、CGI側の変数$in{'2ch'}に格納するにはどうしたらいいんでしょう。
958nobodyさん:02/04/27 10:52 ID:???
959Atsuhi:02/04/27 15:38 ID:2uDiaJDy
>>958
その方法試しましたが、
なぜか、フォームから送信された内容を処理できません。
cgi-lib.plも使いたくないです
960nobodyさん:02/04/27 15:48 ID:???
>>959
配布されてる掲示板スクリプトのフォームから受け取ったデータを
処理してるとこみてみ。
961nobodyさん:02/04/27 16:06 ID:???
%in = map{
    tr/+/ /;
    s/%(..)/pack"H2",$1/eg;
    s/</&lt;/g;
    s/>/&gt;/g;
    s/"/&quot;/g;
    $_
} split/[&=]/, do{
    uc $ENV{REQUEST_METHOD} eq 'POST'
    ? do{ read STDIN, $_, $ENV{CONTENT_LENGTH}; $_}
    : $ENV{QUERY_STRING};
962nobodyさん:02/04/27 16:07 ID:???
>>961
おっと、中閉じカッコを一個忘れちまったい。
963nobodyさん:02/04/27 16:23 ID:AgrfpFbJ
フォームでurlを受け取って、そのurlにredirectしようと考えたのですが、
その際にrefererを空にしたいと考えてます。なぜだか。

何かよい方法ありませんか?
964nobodyさん:02/04/27 16:34 ID:???
>>963
metaタグのRefresh使え

つか過去ログ嫁
965nobodyさん:02/04/27 16:38 ID:AgrfpFbJ
>>964
すみません。反省します。
966nobodyさん:02/04/27 19:52 ID:???
Dream★ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ぐんじp
967nobodyさん:02/04/27 21:53 ID:sDcizlcB
どっかのサイトのhtmlファイル等を保存するスクリプトを作りたいのですが。
どーやりますか?
968nobodyさん:02/04/27 22:18 ID:???
>>967
ソケット使うんじゃないの
969nobodyさん:02/04/27 22:22 ID:sDcizlcB
>>968
マジカヨ!!ソケットって何??逝ってきます
970nobodyさん:02/04/27 22:28 ID:???
>969 LWP::Simple
971nobodyさん:02/04/27 22:40 ID:sDcizlcB
>>970
???
972nobodyさん:02/04/27 22:47 ID:???
自分で調べる気がない人には無理です。
973nobodyさん:02/04/27 22:50 ID:sDcizlcB
>>972
すこし分かりました。
できそうです。
974nobodyさん:02/04/27 22:56 ID:???
>971 #ゴルァ!ちったぁ自分で調べんかい!
#/usr/bin/perl
use LWP::Simple;
$url='www.somewhere.com/index.html'
$file='local.html'
LWP::Simple::mirror( $url, $file );
975nobodyさん:02/04/27 23:04 ID:M0a39fTI
掲示板に書き込んだとき、投稿者のHPへ自動的にリンクする事が出来ますよね。
あの事でお聞きしたい事があるんですが、このスレで聞いても良いんでしょうか?

htmlだけじゃなく、cgiなどの方も関係してるのでこのスレが妥当だと思うんですが、
一応確認したくて。
976nobodyさん:02/04/27 23:08 ID:???
>>975
質問の内容によるかと。
っていうか最初から質問かけYO!スレが無駄に消費される。
977nobodyさん:02/04/27 23:08 ID:???
>>975
何でしょう?
978nobodyさん:02/04/27 23:09 ID:???
そろそろ誰か次スレ立てて。
979975:02/04/27 23:17 ID:M0a39fTI
>>976
すみません、無駄にしてしまいました。
どうせなので、私が次スレ立てさせて頂きますね。
980nobodyさん:02/04/27 23:17 ID:???
テンプレ>>1-4以外に何かつけたすものあるかな
981nobodyさん:02/04/27 23:18 ID:???
982nobodyさん:02/04/27 23:19 ID:???
あ、もう立ったか。

【Perl】初心者コーナー Part12
http://pc.2ch.net/test/read.cgi/php/1019917048/
983975:02/04/27 23:21 ID:M0a39fTI
ごめん、Perl関係なかったデス。CGIダタ。
984975
sage忘れるし・・・。鬱。