6 :
5 :01/10/24 14:20 ID:???
ていうか、これを最初に言うべきでした…。 「お疲れさまです。」
9 :
名無しさん@お腹いっぱい。 :01/10/24 15:52 ID:VLOxIr/R
前スレで CGI.pm の使い方について %FORM = $cgi->Vars; の替わりに %FORM = map{ $_, $cgi->param($_) } $cgi->param(); を教えていただきました。 同じ nameが複数あった場合、前者では @items = split( "\0", $FORM{item} ); で取り出せましたが、後者ではうまくいきません。 $FORM{item}->[0] のようにしてもダメでした。どのように格納されているのでしょう? $cgi->param_fetch('item'); しかないのでしょうか?
10 :
9 :01/10/24 15:56 ID:???
>>9 自己レス
%FORM = map{ $_, join("\0",$cgi->param($_)) } $cgi->param();
とすることで解決しました。
11 :
9 :01/10/24 16:49 ID:VLOxIr/R
またまた CGI.pm絡みで質問です。 ファイルアップローダを作るとき 2.47以降の CGI.pmなら $handle = $cgi->upload('file'); while( <$handle> ) とできますが、プロバイダの CGI.pm が古いため while( <$cg->param('file')> ) という方法になってしまいます。 しかしこれだと「c:\hoehoe.txt」のようなハンドル名になって 受け付けてくれません。 なにか対処方法はないものでしょうか?
前スレ963(
http://ebi.2ch.net/test/read.cgi/php/1000267444/963 )さん
おっしゃる通りです!、例え話も良く解りました (^ ^ )
;他に嵌るパターンて言うと、ループ、再帰、mod_perl環境、undumpした
最後の2つが勉強不足で分からないですが、この辺は他の言語と同じですね
;**もし**宣言の事言ってるんだったら、こっちはちゃんとしよう。
了解しました、strictプラグマを常用してます。
でも、宣言さえしなくても動いてしまうのは凄いですね。
少しのステップで色々出来ちゃうんで、戸惑ってたんです (^ ^ )
何気にソケットを叩けたりと色々楽しそうです。
今からログを漁ろうと思います。
その代わりPerlで一行コード満載コーディングしてると Cに帰った時酷く冗長に見えて鬱になるぞ っと # 頭の切り替えなんだよなあ
14 :
野獣 牛兵衛 ◆n.Nd.2Co :01/10/24 22:45 ID:i9QZ5F40
自己レス >@fff[0..1][2] >のようなスライスをすることは出来ますか? >(スライスとは言わないのかも) 一応下記のような方法を考えてみました @kkk = map { @$_[2] } @fff[0..1];
16 :
名無しさん@お腹いっぱい。 :01/10/25 01:50 ID:k4ugLZV+
perlcc.batが使えません。 一応、vc++6.0 sp5は入れてあるんですが、出来上がったexeが実行できません。 どこかにいいドキュメントは無いでしょうか? #!D:\perl\bin\perl.exe print "Hello perlcc\n"; たったのこれだけをコンパイルしたいんですが。。
my $name = 'tinko pinpin'; 1) if($name eq 'tinko pinpin') { cnt++; } --------と 2) cnt++ if($name eq 'tinko pinpin'); をループさせて速度を測ったら 1)21 wallclock secs (20.95 usr + 0.01 sys = 20.96 CPU) 2)10 wallclock secs (10.23 usr + 0.00 sys = 10.23 CPU) くらい違いますが、内部ではどのような処理の違いがあるんですか? 教えてください!!!!!!!!!!!!!!!1
答えられないなら初めからそう言ってください(ぷぷぷ
後者が遅くなるのは、{}ブロック内のmy変数padlistを作成したり、 脱出時のlocal変数のsavestackからのrestoreなどを処理する クリーンアップコードが必要になるからです。 ...とは言え、気にする程のオーバーへッドではありません。
後者->前者
ぱ、ぱ、ぱ、ぱーるの大爆笑 こりゃこりゃこりゃこりゃこりゃこりゃ
24 :
前スレの911 :01/10/25 09:25 ID:MgH0xJgH
passはそういう渡しかた。 urlもdiary.cgiのままです。
26 :
25 :01/10/25 09:48 ID:???
27 :
今日からPerlさん :01/10/25 10:50 ID:GGoket9P
超初心者のファイル移動に関する質問です ---------- $Old_Dir = './old'; $New_Dir = './new'; $File_Name = 'sample.html'; $Old_File = $Old_Dir + $File_Name; $New_File = $New_Dir + $File_Name; rename($Old_File,$New_File); ---------- これでは./old/sample.htmlが./new/sample.htmlに移動してくれません どうしたらよいのでしょうか
> $Old_File = $Old_Dir + $File_Name; まず、+ では文字列の連結は出来ないよ。 文字列の連結はピリオドなので、やるなら $Old_File = $Old_Dir . $File_Name; でも、これじゃ出来ない。 $Old_File がどういう値になるか考えてみて。
ヤダねったら、ヤダね。
rename($Old_File,$New_File) or die "$Old_File:$New_File:$!";
>27 あと、その場合 $Old_Dir と $New_Dir がそれぞれ './old/' './new/' でなくてはなりませんね。 そのままでは './oldsample.html' みたいになってしまいます。
32 :
28 :01/10/25 11:49 ID:o7msDzki
>>31 萎え。
言わずにちょっとだけ考える余地を残しておいたのに・・・
33 :
31 :01/10/25 12:22 ID:???
>>32 そりゃ失礼。
っていうかそのスタイルいいですね。今後はそういう風にします。
コンパイラによる最適化とかって、無いんですか?
最適化のオバヘッドのが無駄じゃんかよ 漢ならそんな事気にすんなよ な! コンパイラ如きで最適化されてるうちは素人って事よ がはははは!!!! はぁ....
op.cのpeep()を見ろ、と昔誰かが書いてた。
( ´∀`)<おまえもぬー
40 :
名無しさん@お腹いっぱい。 :01/10/25 18:32 ID:o6v/hYdr
DBMの質問です。 DBMってレコードの数が多いと、オープンしたときにそれなりのメモリを消費するのでしょうか?
DBMの場合はハッシュに全てデータを入れてるように見えるけど、 実際はデータが全てメモリに展開されることは無かったかと。 使い方によってはメモリ食うだろうし、データが多くなればなるほど 重くなるのはどんなシステムでも同じですが。
42 :
今日からPerlさん :01/10/25 19:50 ID:YIAkhk5x
結局わかんないので正解ください
(^∀^) オマエニハ ムイテナイカラヤメトケ マウスデコピーシロ アハハハh アホカ
45 = japu
45=46
48 :
27の母 :01/10/25 21:23 ID:???
初心者を指導して気持ちよくなるのは自慰行為 本当に27=42だか知らんが、オナニスト先生は正解も書いてちょんまげ〜
49 :
40 :01/10/25 21:36 ID:o6v/hYdr
>>41 ハッシュに入れてるのでメモリを食ってるのかと思ってました。
ありがとうございました。
50 :
27 :01/10/26 00:07 ID:???
>>48 当然。
ボランティアで質問に答えるのが自慰行為以外の何者であるか。
51 :
名無しさん@お腹いっぱい。 :01/10/26 05:34 ID:yrZd+AXW
掲示板を作ろうとしています。
.htmlファイルにあるフォームに内容を書いて投稿すると.cgiファイルに渡して
処理をし、表示させるというものはどうにか作ることが出来ました。
しかし色々な方が作っている掲示板の中には投稿フォームの表示から書き込まれ
た内容の処理、それらの表示までを.cgiファイルだけでほとんど全ての処理を行
うものがあります。次はこういうスクリプトを作りたいのですが、どうしてもう
まく行きません。
既にログファイルに書き込まれている内容を投稿フォームの下に表示することと
投稿した内容をログファイルに書き込むことはできるのですが、書き込み→処理
→表示ができません。つまり、投稿した内容はリロードしないと読むことが出来
ないのです。
ただ上の動作をさせたいためだけに作ろうとしたスクリプトとはいえ、仕上って
みるとやたらに『</body></html>』の多いものになってしまいました。今までは
どんなに頑張ってもできなかったのに、ここに載せるために書いたものが偶然そ
ういうものになったという棚ボタスクリプトのため、効率も何もあったものでは
なく・・・。
ここに載せるにはあまりにも長いため、別サイトに置くことにしました。
http://www.geocities.co.jp/Outdoors-River/5665/sample.txt よろしくお願いします。
52 :
:01/10/26 07:00 ID:???
http://www.kent-web.com/ ここにある簡単なBBSのスクリプトをダウンロードしてから処理の流れ見て
みましょう。
デバッグの方法がわからないなら、
sub debug_print {
print "Content-Type: text/plain\n\n";
foreach (@_) { print "$_," }
exit;
}
でも使って1行ずつわからない変数があれば目で見て調べましょう
>>51 そのソースのまま順番を変えたら表示出来たよ。
$ENV{"CONTENT_LENGTH"}空なら書き込み処理はいらないよね。
⊤ # 投稿フォームを表示して
&log_viewer; # ログ展開して記事表示
&get_time; # 日時取得して
&decord; # フォームデコードして
&data_write; # ログに書き込み。
>>52 さんの言うように
他の配布スクリプトの処理の流れを見て、
BBSがどういう処理をすれば動くのか考えてみるといいかも。
&decord; # フォームデコードして
&get_time; # 日時取得して
&data_write; # ログに書き込み。
⊤ # 投稿フォームを表示して
&log_viewer; # ログ展開して記事表示
55 :
名無しさん@お腹いっぱい。 :01/10/26 15:10 ID:LxO4xBRI
cronを制御するプログラムを書こうと思っています。 Schedule::Cronを使おうかと考えていますが、実行プログラムをエントリーすることは できても削除することはできません。 (全部削除することはできる) cronを自由自在に操るライブラリもしくはcron likeなプログラムってありませんか?
56 :
名無しさん@お腹いっぱい。 :01/10/26 18:06 ID:YTmtLQJf
はじめまして。 PerlでCGIを書いてるプログラミング初心者です。 いきなりですが、 ローカルで動いたCGIがアップすると動かない場合、 どんなミスが考えられるでしょうか。 パスはあってます。 パーミッションもあってます。 これ意外でなにか思い当たることがあれば教えていただけませんか? よろしくお願いします。
>>56 エラーになる原因はいくらでもあります・・
httpdのエラーログ見ましょう。
58 :
56 :01/10/26 19:14 ID:YTmtLQJf
(^∀^)すみません、アナタバカデスカ?
60 :
名無しさん@お腹いっぱい。 :01/10/26 19:58 ID:DV5PQduC
61 :
56 :01/10/26 20:22 ID:YTmtLQJf
>>59 馬鹿かどうかはともかく、知識がないことは認めます。
質問の仕方が悪かったようなのでまとめます。。
自分用に日記スクリプトを組んで、
ローカルでは正常に動きました。
環境はMacJPerlとWEB共有でした。
MacJPerlでの構文チェックはOKが出ました。
このあと、借りているサーバにアップして
パーミッション設定をして動かしてみました
そしたら、一部の機能は動いたんですが
サーバがエラーを返す時もありました
なぜかわからないので、
もしかしたら・・と思うところがあったら
教えていただけませんか?
詳しくないけどシステムに依存したコマンドがあるんじゃないの?
ふむ、初めからそう書けば良いのに、httpdは検索してくれ、サーバの事
で、残念だけど、自分で書いたコードならその「エラーを返す時」がどんな
コードなのかを書かないと答えられない
これを使ってエラーを捕捉してみてくれ
http://www.kawa.net/works/perl/catch/news.html Unixlike<=>Mac<=>WIN、環境で結構引っ掛かるので俺が知ってるのは
ディレクトリ区切り子 \とか/とか:とか
ディレクトリ相対パスの問題 IIS3とか
スクリプト起動時のカレントディレクトリの問題
OSに依存したシステムコール
OSに依存した関数の使用
多分まだまだネタはあるはず
64 :
名無しさん@お腹いっぱい。 :01/10/26 22:16 ID:e913wNIn
find関数(File::Find)ではファイルがアルファベット順に 出てくるようなのですが、これをタイムスタンプ順にすることは 可能でしょうか?
65 :
51 :01/10/27 00:19 ID:CaJiAhlr
>>52 >>53 >>54 ありがとうございます。
確かに・・・。
流れを読んだ上で組み合わせれば何と言うことのないことでした。
>>52 さんが紹介してくれたサイトのスクリプトをじっくり眺めてみることにします。
ありがとうございました。
66 :
名無しさん@お腹いっぱい。 :01/10/27 01:54 ID:LY0Lfwsp
>>64 ディレクトリ単位でソートするなら可能だよ。
find( {wanted => \&wanted, preprocess => \&preprocess }, $dir );
sub preprocess {
@_に入ってくるファイル名をタイムスタンプでソートした結果を返す
}
67 :
名無しさん@お腹いっぱい。 :01/10/27 08:38 ID:C540eYR0
>>66 わぁ。ありがとうございます。
ディレクトリ単位で良いです。っていうかディレクトリ単位が良いです。
助かりました!
俺ってまだよく理解できてないからフローチャートとか書いて から組んでるんだけど知り合いとかはさくさく組んじゃうんだよね。 フローチャート作ってる俺って厨房ですか?
なんでもそうだろけど使い方による。 グチャグチャと絡まった概念を解く事が出来るから漏れは良く書いてる (覚え書き程度のもんだが・・・) Keyboardばっかり叩いてると、紙に書いた事は結構クッキリと頭に残ったりとかね *死ぬ程忙しい時は、するべき事を紙に書いてみよう、意外と大事な用は一つだったりして
ageageage
$var /= 32; $var >>= 5; ではどっちが速いですか??
くだらん。そんなことを気にするぐらいならPerlで書くな。
74 :
71 :01/10/27 20:34 ID:???
ベンチマークってどう取ればいいのですか? それがわからないのか(^^;;;>俺
Perl上級者は真性、相手すると感嘆符使いまくってウザイので完全無視でお願いします
>>74 perldoc -u Benchmark
これで大体分からないかな、要はかっこでくくるだけだよ
Perl上級者=高卒 プ
Perl上級者=jaプ
この板で一番レベルの高いスレッドはどこだ? こんな程度の低いところは嫌だからな。
車だってさ(w
>車 過疎地うろついてないでマ板いきなよ Perlスレもぽこぽこ建ってるし
ログ移転前に書いてみる。
移転上げ
age
88 :
名無しさん@お腹いっぱい。 :01/10/29 03:25 ID:pi9OrPjF
(aa..zz,aA..zz,Aa..zz,AA..zz) みたいなアルファベット大・小文字全部並べるスライスの,簡単な書き方ってありますか? 関数に文字数指定して,文字列として書かせたのを,evalして使ってるんですが 無駄なことしてるかもと思ったので。
もっと具体的に説明きぼん
90 :
88 :01/10/29 03:50 ID:pi9OrPjF
>>89 普通に手で書くと,文字数増えるごとに書くのもどんどん増えていっちゃうので,
(aa..ZZ)とか(\w{3})みたいな書き方はできないかなぁと。
88の関数はこんなのです。
@arry = eval getArry(1);
sub getArry {
my $nest = shift;
my $word = shift || '';
my $i = 0;
my $ret = '';
foreach (a,A) {
my $word = $word.$_;
if ($nest>0) {
$ret .= getArry($nest-1, $word);
} else {
$i++;
$ret .= "$word..";
$ret .= 'z'x length $word;
$ret .= ',';
}
}
return $ret;
}
それ異常の書き方は無いと思うなあ。 つーかむしろ(a..z)だけにして、文字列長投げるような関数に した方が良いんじゃないの? 呼び出しのコストを嫌ってるのか・・・・ 漏れはデカイ配列の方が嫌いだけどなあ
あ、すまん、そうしてるんだね。 再帰しなくても良さそうだな、、 帰ったら書くわ
>>91 >漏れはデカイ配列の方が嫌いだけどなあ
俺もおなじくです。2文字(aa〜ZZ)ぐらいならいいんですが、
4文字(aaaa〜ZZZZ)なんかはちょっと配列に入れるのがつらい。
用途にもよるけど、呼び出すごとに「次の文字列」を返す関数を
作って、STLのnext_permutationみたいな使い方をするのが
いいと思う。
94 :
名無しさん@お腹いっぱい。 :01/10/29 20:26 ID:gd3uwUNc
あるファイルの行数を調べたいのですが、 一番メモリを使わずに調べる方法は何ですか?
my宣言した変数は出来るだけ早くundefした方が良いのでしょうか?
>>94 nバイトずつreadして"\n"の個数を数える。
>>94 my ($lineNum,$fileName,$buf);
open (FH,"fileName");
while (1){
read(FH,$buf,1);
last if $buf eq '';
$lineNum++ if $buf eq "\n";
}
print "行数は$lineNumです\n";
>>94 open(FH, $file) or die "Can't open $file";
my $count;
$count = $. while (<FH>);
close(FH);
>>95 大量のデータを長期間無駄に保持するのは避けたいけど、
ほとんどの場合、あえて明示的にundefするまでもないと思う。
まあ具体的なコードを見ないと判断つかないっすね。
検索したり本を見ても、書いてなかったり、さっぱり意味不明だったりと自分ではなかなか判断がつかないとき、「内では〜となっているので〜とした方がいい」って明解に断言してくれる人がいると役に立つんだけど、みなさんはどうしてるんですか?
103 :
名無しさん@お腹いっぱい。 :01/10/29 22:21 ID:WYkKLjrw
>>100 perldocの該当個所を4〜5回読み直し、それでも理解できなければ
いまは知る必要がないのだとあきらめて後回しにした。
すくなくとも他人の言葉には頼らなかった。
>>100 始めて数日の人がそんな壁にぶつかる訳がありません。
Googleで検索したりリンク辿ったりすれば、参考になるものが
見つかるはずです。
少なくとも初心者の内は検索などで十分です。
(分不相応な事をしなければ)
そして初心者を抜ければ殆ど自分で判断できるようになる筈です。
とにかく邪魔だから二度と出てこなくていいよ。
ハァ?ココは気持ち悪い馴れ合いスレですか(わら
>>108 馴れ合いの逆は煽りかよ。馬鹿丸出し。
いいからとっとと失せろ。
110 :
:01/10/29 22:34 ID:???
Perl上級者は無視の方向で。
CGI.pmってどうなの?
>>111 「どうなの?」って聞かれても何と答えれば良いのやら。
つーかPerlの上級者って、、、なんかショボイなあ (゚ε゚)
・・・と、初心者以下の素人が言いました、とさ(大爆笑)
これこの板の名無しにどうよ? あとtinkopinpinとか ゲラゲラ〜
shigeより馬鹿っぽい所が悲しいよな、(大爆笑)だって・・・・ この板の哀愁が漂ってくるね もっと勉強しよ・・・
未熟ながら、初心者スレッドと言う事でお許しください。 あるログインCGIを作っていて ログイン(ID/Pass)→ メニューとメイン画面をフレームで表示 と言う処理を行っています。 このときメニューとメイン画面もログイン用のファイルと一緒にしているのですが、 別々の物に分けたほうが良いのでしょうか? //サンプル if{ &ログインパスチェック }elsif{ &左フレーム(メニュー)表示 }else{ &右フレーム(メイン画面)表示 } #それぞれ引数を変更してやって判定 sub ログインパスチェック{ if(パスチェックが成功したら){ print <<EOM; <FRAME SRC=./login.cgi?id=$in{'id'}&passwd=$in{'passwd'}&cmd=01 NAME="menu"> <FRAME SRC=./login.cgi?id=$in{'id'}&passwd=$in{'passwd'}&cmd=02 NAME="main"> EOM }else{ print <<EOM; <FRAME SRC=./login.cgi?id=$in{'id'}&passwd=$in{'passwd'}&cmd=01 NAME="menu"> <FRAME SRC=./login.cgi?id=$in{'id'}&passwd=$in{'passwd'}&cmd=03 NAME="main"> EOM } 瞬間的に3度同じファイルを実行する事になり、そのたびにデータを読み出しているので心配です。 また、他のファイルに分けて処理した方が動作がスムーズになる、とも聞きました。 どうでしょうか。 足りない部分があれば随時補足させて頂きます。 根本的にこんなロジックにした方が良い、と言う意見もあれば是非お聞かせください。
118 :
名無しさん@お腹いっぱい。 :01/10/30 01:27 ID:mgB2/g2W
>>117 この場合、認証をすべてlogin.cgiでまかなうのも、
login.cgi、frame.cgi、main.cgi、menu.cgi等に分割するのも、
さして変わりはないと思う。
どちらにしても認証後に3つのCGIがほぼ同時に起動するわけだし。
なにか改善策があるとすれば、
>根本的にこんなロジックにした方が良い、と言う意見
ここだろうけど、おれには考えつかない。
CGIで認証する限り、「1ページ表示するごとにパスワードファイルの読み書きが必要」と
いう問題は避けられないのでは。
>>118 なるほど、貴重なご意見有難うございます。
やはり逐一パスワードファイルにアクセスしないといけないのは
宿命ですかね。
>>117 &119
どっちかってーとCGIだけどなんか質問ある?向きだけど・・・
とりあえず「セッション」とかって言葉を調べると幸せになれるかもしれません。。。えいめん。
121 :
ぽ :01/10/30 14:05 ID:KnXoAd8A
cron でフルパス起動されるコマンドなんだけど ライブラリの場所は 相対で ../lib にあります。 エレガントな指定方法を教えてください。 今は { my $base; BEGIN{ $libPath = $0; $libPath =~ s|/[^/]+$|/lib|; } use lib ($libPath); }
素直にフルパスで書くのが一番だと思うが。
>>121 フルパス指定がいやならFindBinモジュールを利用。
124 :
121 :01/10/30 17:03 ID:???
>>123 ありがと(^−^)
まだまだ知らないモジュールがいっぱい...
精進せねば...
125 :
名無しさん@お腹いっぱい。 :01/10/30 17:04 ID:HjkR1Pfb
>>121 cronで起動するときにchdirする方法を愛用してます。
スクリプトのほうで小細工する必要なし!
126 :
121 :01/10/30 17:12 ID:???
>>125 あと /etc/aliases から "| /foo/bar/hogehoge" でも起動されるやつも
あるんで FindBin でいくことにします
はっ /etc/aliases のやつも "| (cd /foo/bar ; ./hogehoge)" すると
いけるのかな?
127 :
名無しさん@お腹いっぱい。 :01/10/31 11:19 ID:odi0QzL3
すいません、perl全くの初心者なんですが Mac OS 9.02から、Mac OS 10.1にして勉強を始めようと思っています しかし、Mac OS 10.1に入ってるperlは日本語関連でかなり問題がある、 というのを聞いて驚きました。 ビギナーではMac OS 10.1はやめておいた方がいいのでしょうか? 参考書みてもそもそも正常に動作しなかったら挫折しやすい、というか。 どのような問題があるかはgoogleなどで引っかけても上手くかからなかったので わからないんですが、よろしければアドバイスお願いします。
129 :
名無しさん@お腹いっぱい。 :01/10/31 11:41 ID:bNMt3mta
あの=。jcode.plとcgi-lib.plって再配布して いいんですか?
131 :
あげてみる :01/11/02 13:01 ID:yAhXsts1
seekの説明にある、「行番号をバイトオフセットに変更するインデックス」を作成してくれるモジュールないっすかねえ
132 :
名無しさん@お腹いっぱい。 :01/11/02 19:40 ID:+bAAQDJN
質問なんですが ハッシュをサブルーティンに渡して、サブルーティンの中でも同じように ハッシュとして参照したいのですが、どうもうまくいきません。 下のように書いたのですが、値が表示できません。 どのようにすればうまくいくか教えていただけないでしょうか? my %jjj ; $jjj{'aaa'} = "111"; $jjj{'bbb'} = "222"; $jjj{'ccc'} = "333"; &test( %jjj ) ; sub test { my $jjj_ref = @_ ; print("#### $jjj_ref->{'aaa'}") ; }
133 :
Ks :01/11/02 20:11 ID:???
掲示内容が不適格であったらごめんなさい。 httpヘッダで困っています。 ・httpの拡張ヘッダって編集できるものなの? ・どうやって編集するの? ・拡張ヘッダの設定内容を見て処理をするって可能なの?どうやって するの? 誰か教えて頂けませんか? もしくはわかるサイトを教えて頂けませんか?宜しくお願いします。
&test( \%jjj ) ; sub test { my $jjj_ref = $_[0] ; print("#### "."$jjj_ref->{'aaa'}") ; } ハッシュの前に引数の受け取り方を調べよう :-)
冷たいんだね
プロトタイプって手もある sub test(\%); test(%jjj); sub test(\%){ my $href = shift; print $href->{aaa}; }
138 :
名無しさん@お腹いっぱい。 :01/11/02 20:41 ID:ofsCZTnG
変数に例えば $hoge ='aa,bbb,cc,ddd,nn,nn,yy,zzz'; のように格納されていた場合後ろから2つ目の「,」 の位置を調べたいのですがどうすれば良いのでしょうか? お願いします。
(length join ',,',(split /,/,reverse $test)[0,1])
140 :
名無しさん@お腹いっぱい。 :01/11/02 21:43 ID:29kqQmn/
>139 レスありがとうございます。 早速使わせていただきます。 どうもでしたm(_ _)m
rindexを2回使うという手も。
142 :
名無しさん@お腹いっぱい。 :01/11/02 21:49 ID:29kqQmn/
>141 それはどういうものでしょうか? POSを使うのですか?
143 :
141 :01/11/02 22:01 ID:/ySb/MGF
>142 文字を後ろ向きに検索して,見つかった位置を返す。 perldoc -f rindexあたりで説明見られると思う。
144 :
名無しさん@お腹いっぱい。 :01/11/02 22:03 ID:29kqQmn/
試してみます。 親切にどうもありがとうございますです。
145 :
132 :01/11/02 23:28 ID:+bAAQDJN
>>134 >>137 ありがとうございます。勉強し直します。
&test( \%jjj ) ;こう書いてました。
根本的に勉強不足だったようです。
掲示板を作っています。ベテランには痛い質問かもしれませんが
今ealisという掲示板で奮闘しています。
関連サイト→
http://kano.vis.ne.jp/erial/ そこの設置開設のところでparlパスを書き込むのですが
最初の行に#!/usr/local/bin/perlと書き込めばよろしいのでしょうか?
まだ質問がありますがひとまずお願いいたします。
>>146 何を言いたいのか全く解りません。
普通、CGIを設置する上で"Perlのパス"といった場合は
#!/usr/local/bin/perl
などの1行を指す場合は多いです。
この1行はサーバ上のPerlというプログラムの位置
(WinでいうならC:\Program Files\perl\perl.exeという感じ)
を表します。
そのため、サーバによってインストールされた場所も異なり、
サーバごとに記述するべき内容異なります。
そもそも、ここに書き込む前にしかるべきサイトで
CGIについて勉強してくるべきだと思われます。
149 :
148 :01/11/03 01:19 ID:???
誤字 優しい->易しい
151 :
名無しさん@お腹いっぱい。 :01/11/03 02:42 ID:cMX/dhh7
他のサイトからのアクセスを制限したいのですが、 (チャットのよそからの発言を禁止するような感じです。) referer調べる以外で良い方法は無いものでしょうか?
再帰の深さってどれ位まで許されてるんでしょうか? 処理系依存ですかね スタック食い尽くす前にヲーニングくれたりしないかな・・・
154 :
名無しさん@お腹いっぱい。 :01/11/03 15:58 ID:cu67OhWQ
$_ ってなんですか? 厨房でスイマセン…。
@_ = ($_[0], $_[1], $_[2]);
ハァ(゜Д゜)?
eliasをインストールするDIRのhttpパスを書く
↓
eliasをインストールするディレクトリのアドレスを書く
↓
分からない単語は検索しろ
ディレクトリ、アドレス、パス、
http://www.google.com/
160 :
名無しさん@お腹いっぱい。 :01/11/03 17:37 ID:vwyWsLPj
$_ は省略時に暗黙の内に使われる変数。 たとえば、 while(<>) { print } は while($_ = <>) { print $_ } と等価。 length の引数を省略したときは length $_ を返す、とかいろいろあるので、「プログラミングPerl改訂版」を読みましょう。 (perldoc でもよいが)
$_を介すると、ほんのちょっとだけ処理が早くなる傾向がある(ようだ)。 常時、積極的に使用するほどメリットがあるとは思わないが、 何万回といったループの中で使うと結構でかい差になるかもしれない。
>>157 初心者は使うなって書いてあるやん・・・
>>153 my()で確保しているpadlist内の変数の数/大きさにも依りますから
一概に何回、とは言いきれません。
ただ、-w オプションを付ける、ないしwarningsプラグマで
"recursion"カテゴリの警告を行うよう設定していれば、
サブルーチンの100回以上の再帰呼び出しがなされた時点で警告が出ます。
(中止するわけではないので、あまり意味はありませんが)
各CVは、おのおの自分自身の再帰呼び出し回数をxcv_depth
メンバに保持していますから、内部APIのCvDEPTHマクロを利用して、
規定回数以上になれば強制的にreturnさせるコードを挿入する
ぐらいしか対策がないような気がします。
I32 get_depth(SV *sv)
{
if(SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV)
return CvDEPTH(SvRV(sv));
else
return -1;
}
っていうか、数えた方が早いね。
166 :
名無しさん@お腹いっぱい。 :01/11/04 00:00 ID:oP9d6xQM
>>151 手続きなど無しで制限したいのですがやはり無理でしょうか?
お願いします。
>151 自鯖なら .htaccess。
168 :
名無しさん@お腹いっぱい。 :01/11/04 00:22 ID:oP9d6xQM
>167 .haccessで制限できますか? ↑関連スレで質問した方が良いかな?
>>168 167は.htaccessでユーザ認証しなさいってことじゃないすか。
いちおう.htaccessのRewriteRule/RewriteCondを使うと
リファラを見て外部からのアクセスを拒絶することはできるけど、
151でリファラ以外の方法って書いてあるしね。
170 :
名無しさん@お腹いっぱい。 :01/11/04 03:26 ID:h2smYChV
バイナリコードを含む文字列を特定の長さに切りたいのですが どうすれば良いでしょうか? $str='a壱弐参四五'; # length:11 $str=~s/^(.{10}).*/$1/; 例えばこんな感じで長さを10にする事はできるのですが、 バイナリデータをぶった切ってしまってバイナリの片割れが出てきてしまいます。 切る所がバイナリデータだった場合は回避して、この場合は長さ9にしたいです。 バイナリデータの判別方がわかれば何とかできると思いますがわかりません。 どうすれば実現できるでしょうか?
>>165 無事に掲示板を設置することが出来ました。
どうやらDIR=ディレクトリのことらしいでここら辺がわからなかったのですよ。
色々お手数をおかけしました。今度β版と言う難しいのに挑戦しようと思っているので
そちらの方に質問をさせていただくかもしれません。
とりあえず今はトホホのサイトにて勉強しながらやっていきます。
172 :
名無しさん@お腹いっぱい。 :01/11/04 04:04 ID:cP9onYMm
>>170 いろいろあると思うが、おれはこうしてる。
(1)最初に10バイトで切る。
(2)先頭から「正しいバイナリ」が続く部分だけ残して、その後ろを削除。
たとえば「Shift_JISまたはASCII」を切り出す場合は、
$str = substr($str, 0, 10);
$str =~ s/^((?:[\x81-\x9F\xE0-\xEC][\x40-\x7E\x80-\xFC]|[\xA1-\xDF]|[\x20-\x7E])*).*/$1/;
173 :
名無しさん@お腹いっぱい。 :01/11/04 04:18 ID:h2smYChV
>>172 正しいバイナリというのがそう言う感じで記述できるんですね。
扱おうとしてるのはSjisだし、なんなら文字コード変換もできるので、
そのまま使えそうです。
漠然とわかったので、自分の中でちょっと煮詰めてみます。
ありがとうございましたー。
>>173 >正しいバイナリというのがそう言う感じで記述できるんですね。
いや「Shift_JISまたはASCII」というのは、
正規表現であらわせる素直なデータだからね。
「正しいバイナリ」の定義によっては、1バイトずつ切り出して
逐一判定しなければならない場合もたぶんあるでしょう。
いつでも正規表現が使えるとは思わないほうがいい。
175 :
173 :01/11/04 14:35 ID:???
>>174 メタキャラを含んだ文字列の正規表現でエラーというのは
既に実感を伴って経験済みです。
ともあれ、無事に実現できました。ありがとうございます。
しばらく様子を見てみて、エラーが生じたりするようならまた考えてみます。
176 :
153 :01/11/04 17:36 ID:???
_gunzipたんアリガトー(・∀・)&& お久しぶり ちょっと聞き方がタコでしたね、perlマンセーな処理が有ったんですけど 家では問題無かったのに、会社のプアマシーンだとあぼーんしたんで 少し気になったんです、流石にそこまでは面倒見てくれないですか。。。 取り合えず50回位潜ったら、一旦全部抜けて、 続きからやり直し、って言う風にしてみましたです。
177 :
名無しさん@お腹いっぱい。 :01/11/04 17:57 ID:vlyHsBRz
ちょっとお聞きしたいのですが いま、ちょっとはまってしまっています。 状態は、500文字から1000文字くらいの文字列をいくつか作って print文で表示させたいのですが、文字列を3個作って、3カ所print文を 文字列作成後に表示させようとすると、最後のprint文の途中まで表示して そのまま待ち状態に、一回プログラム止めて今度は5個作って表示させると さっき止まった3個目はきちんと表示されて、今度は5個目の途中で表示が 止まってしまいます。何回か実行させてみても同じところで表示が止まって しまいます。どうも長い文字列のprint文(いくつかある時の)最後のprint 文で起こるようなのですが 出力先はブラウザです。print文の後には文字列を使う処理がありますが そこまで進めません。print文で止まってしまって どなたか同じような状態になったことある方いらっしゃられませんか? どのようにしたら正常に表示できるのでしょうか? わかりにくい説明ですみませんが、どうぞよろしくお願いします
$| = 1;
179 :
ぽ :01/11/04 18:49 ID:iWvZka32
>>170 Jcode.pm に jfold ってのがあるよ
180 :
177 :01/11/04 20:39 ID:vlyHsBRz
もう一つお聞きしたいのですが perlで、C言語とかでいうデバッガみたいなものは、ないのでしょうか? 上で書いたような状態でもう2,3日苦しんでいる状態で できれば、1行ずつとかで、実行して原因がわかればと考えたのですが わかる方、どうかご回答よろしくお願いします
181 :
名無しさん@お腹いっぱい。 :01/11/04 20:51 ID:6q0Jo2MQ
当方,C言語のプログラマです. ある特定の定義を一気にコメント化したりするのに, sed等のコマンドを使って,シェルスクリプトを書いてました. こんどperl を使ってこういう処理を使用と思ってるのですが, あなたの使っているいいソースありませんか?(笑)
182 :
名無しさん@お腹いっぱい。 :01/11/04 21:59 ID:RPCUxOjp
>>181 s2p とか a2p を使うと吉かと。
183 :
177 :01/11/04 22:19 ID:vlyHsBRz
書き忘れたのですが いくつかのcgiを経由して、情報を集めて処理するcgiで現象が起きています 引き継いでいるデータがかなりあるので、困っています 一個のモジュールでのデバックはやったことあるのですが、 画面表示(html)->入力データ処理・検索・画面表示(cgi)->入力データ処理・画面表示(cgi)-> のような感じで、最終的に現象の起こっているcgiに行く頃にはかなりの情報があります こういう場合コマンドラインでのデバックって可能なのでしょうか? htmlもそのまま表示されてボタンとか押せないですよね 何かいい方法ありませんでしょうか? よろしくお願いします
184 :
名無しさん@お腹いっぱい。 :01/11/04 22:46 ID:PfX5esry
CGIほとんど書いたことないんで詳しいことは他の方に譲りますが #っていうか間違ってるかも知れない 180> perl -d script_name 183> use CGI::Carp; HTMLのコメント文としてデバッグ情報を出力 perl -d -MModule -e '1;' してmoduleをテスト スクリプトそのものを少し書き換えてコマンドラインで動くようにする とかいうのを思い付きます。
185 :
177 :01/11/04 22:57 ID:vlyHsBRz
>>184 さん
ありがとうございます。
調べて試してみます
186 :
151 :01/11/05 01:45 ID:J/g4IyEG
>>169 やはりrefererを使ってはじくしか無いのですね。
レスありがとうございました。
>>181 ある特定の定義って何よ?
そこんとこ、もう少し聞かせてくれない? C言語だよね?
sub func() { #... } sub func() { #... } みなさんはどっちが好みですか?
190 :
名無しさん@お腹いっぱい。 :01/11/05 18:41 ID:5Lr/KNWp
>>181 同じく、関数定義の事言ってるのか、だったら呼んでる所も
一緒に殺すって事? どうもperl万歳っぽい気はするが意味が解らん w
俺は関数改造した時とか一気に名前入れ替えるのに使ってる
関数の処理の負荷に関するスレ立てるのってどう? 同じ処理でもこっちの方が良いとか。 あと前誰かだしてたけど、処理の負荷に関するページの紹介とか。 同じ変数使いまわすなら最初に変数の領域を確保しといた方が 良いとかそんなの。
194 :
192 :01/11/05 22:35 ID:???
スレ立てるまでも無いですね。 というかスレ立ててもすぐ下がっちゃうか…。 どこかこんなページあれば教えて欲しいです。
>>181 ちゅうかsedもCも知ってるならそん位1日で出来る様になるよ!
perldocの、「sedの洗練されたPGが〜〜」「Cに洗脳されたPGが〜〜」
辺り読めばバッチシ、正規表現なんかは後方互換性有るから結構そのまま使えるしね
その手のはビックリする位サクサク出来ちゃうぞっと♪
そしてダメな人間になって行くのじゃ ふふふ
>>195 そそ。で、Perlないと仕事する気にもならないと。(w
実際、Unix -> Winに移ってきて、シェルやコマンド群の貧弱さには
閉口したけど、Perlが使えるんで何とか工夫してやってる。
ただ、Winで真っ黒な背景のDOS窓開いて、パイプやリダイレクト組み合わせて
コマンド打ち込んでいると、確実に異端視される。
素人にはお勧めできない。(縛
Macperlの初心者なのですが、もしご存じの方がいらっしゃいましたら 教えてください。webページのフォームからpostメソッドでファイルを cgiにアップロードしようとしているのですが、32KB以上のデータって macperlだと受けとれないんでしょうか。32KB以下のサイズのファイル だとうまくいっているのですが・・・。
>>197 サーバは何使ってるの?
少なくともMacperlにはそんな機能は無いしバグも上がっていない(筈)
>197 cgi-lib.plを利用していますか? >$cgi_lib'maxdata = *****; # maximum bytes to accept via POST - 2^17 この行を確認してみてください。
200 :
名無しさん@お腹いっぱい。 :01/11/06 17:11 ID:TnuiR6XG
自分のいえの鯖にcgiファイル置いてみてみようと思ったんだけど 「Internal Server Error」が出ます。 パーミッションもあってると思うし原因が不明です。 Apacheでcgiの許可のあるディレクトリに置いてます。 test1.cgiって言うファイルです。 perlの場所も確かめました。
>>200 エラーログを見よう、-> $HOME/logs/error_log 辺りに有る
メッセージと適当にGoogleに放り込めばわらわら対策がヒットする
2^17 って128kbじゃん・・・
204 :
200 :01/11/06 17:38 ID:TnuiR6XG
Premature end of script headers 改行コードの問題らしいです。 malformed header from script. もう一個はこれです。
205 :
むぎ茶 :01/11/06 17:40 ID:Zd0wUikG
改行コードを CRLFからLFに変換しよう Meadowとか秀丸で変換しよう Malformed はCGIが途中で終わったんでヘッダが変だよって httpd からのメッセージ
素で叩けば動いてんだろ? だったら改行コードは関係ねーよ、 Premature end of script headers これは適当なHTTPヘッダを吐く前にプログラムが終わったって事 `HTTP``ヘッダ``CGI``Content` 辺りで検索せい
207 :
200 :01/11/06 17:56 ID:TnuiR6XG
普通にマシン上で動かせばprintは表示され動いてくれます。 Contentが抜けてました。
>>200 これ以上はCGIスレね。
ContentっつーかContent-Type。
209 :
名無しさん@お腹いっぱい。 :01/11/07 04:16 ID:w4jQYe5D
package main; use vars qw[$var]; $var = 'MAIN'; print "$var\n"; package sub1; use vars qw[$var]; print "$var\n"; # (1) $var = 'SUB1'; package sub2; use vars qw[$var]; print "$var\n"; # (2) $var = 'SUB2'; __END__ (1)でMAINを(2)でSUB1を表示させたいのですが,$varがグローバルに使えません。 どうすればできますか? Perl5.6ではなく,Perl5のやりかたでお願いします。
$main::var $sub1::var
突然Perlを使う事になって困っています、普段はCを使っています。 Perlの@はCの2次元配列のようなものと考えて良いんでしょうか? 例えば、、、 @ary = ('H','e','l','l','o'); printf ("%s",@ary); だと H しか印字されないのです。。 それと、シングルクウォートとダブルクウォートの使い分けが 今一つ分からないのです。
Perlには2次元配列は無し。 リファレンスを使えばそれらしきことも可能。 print @ary; Single -> 変数展開無し Double -> 変数展開有り my $str = 'hoge'; print "$str"; print '$str';
2次元配列有るよ、詳しくはPerlLOL辺りで 取り合えずCは忘れれ (・∀・) その書き方見てると辛そうだけど・・ 全部の型と**文字列**が、int型に収まるとでも思ってくれ、atoiとか忘れれ そう言う意味で前半の考えはイイ感じ で、コンテキストで@aryの評価がコロコロ変わるんだけど、それは解るしかない 配列@aryの要素は@ary[0]じゃ無くて$ary[0]、慣れれ クオートは、取り合えず全部 " にしる、2バイト文字使わなきゃこれで良い printf ("今%s時です\n",$time); これは全然OK!
214 :
212 :01/11/07 09:47 ID:???
>>213 それは配列リファレンス使って、でしょ。
正確な意味では無いって解釈じゃいかんかな。
上2行はそんな感じだったんだが。
いや、別にどうでもいいんだが。
>>209 package main;
use vars qw[$var];
*sub1::var = \$var;
*sub2::var = \$var;
以下209と同じ
216 :
名無しさん@お腹いっぱい。 :01/11/07 16:11 ID:HKXTSnRB
みなさんファイルの有無ってどうやって調べてます?
-e
218 :
216>217 :01/11/07 16:19 ID:HKXTSnRB
すんまそん。
たしかMacPerlってAppleEventの古い32KB制限の因習を引きずってて、 cgiとしてPOSTデータを受け取るときにもその制限があるんじゃなかったっけか? MacPerlでcgiとして保存したスクリプトを呼び出すと、AppleEventで MacPerl本体にデータが受け渡されてると思うので、32KB以上のデータは あつかえないのかも・・・。AppleEvent自体はとっくにこの制限なくなってる はずなんだけどね。解決策知ってる人いる?
PerlFactoryってどうですか?
高杉、つーか使おうと思ってたらライセンス切れた w タブブラウザみたいなもんじゃ無いの、秀丸多窓、デバッグ用plで やってるのと変わらん。 ステップ実行直接出来るのは便利かな
222 :
始めて数日。。。分不相応かなー :01/11/07 21:00 ID:EjFu+goO
Netモジュールかなんかを使って他のウェブページをゲットし、 perlで処理(文字列置換とか)したいと思っています。 変数名=Net::関数名(URL) みたいな書き方をすれば、ページを1枚まるごとゲットして変数に格納できるような気はするのですが、 具体的にどう書いたらよいかわかりません。 どうしたらよいでしょう??
223 :
:01/11/07 21:18 ID:NBKJ0dYI
LWPモジュールを使いましょう
use LWP::Simple; getprint(URI); print get(URI);
225 :
209 :01/11/07 23:30 ID:???
思いっきりアホだった。 俺はActive perlのつもりでMacperlって書いてた。 今見てビックリした(死 何ていうか、197の書き込み見た瞬間 Macperl -> Active perlに脳内置換しちゃってたみたい 適当な事言ってゴメソ
227 :
初心者 :01/11/08 16:17 ID:???
すいません。教えて下さい。 @file_list = ($file1,$file2,$file3,$file4,$file5,$file6,$file7,$file8,$file9,$file10); $name_length = @file_list; ってあるんですけど、このままだと$name_lengthは10にしかなりません。 $file1〜10が、あるぶんだけの結果が欲しいんですけど、どうすればいい でしょうか。
あるぶん、って言うのは何? $file1に入ってる文字列の長さか $name_length = length $file1;
229 :
名無し~3.EXE :01/11/08 17:38 ID:OCo2EZxt
211 です、亀レスですが、212さん213さんありがとう御座います。 アレから3日ほど触ってなかったから、又C頭に戻ってしまいました・・・(^ ^; 頑張ります。
>>227 仮に「存在するファイルだけ」ということならファイルテスト演算子使え。
-e $file
231 :
初心者 :01/11/08 18:26 ID:07jIFch6
返事おくれてすいません。 例えば、もし$file1の変数に値があれば1を返し、なければ0を 返して、1を合計すれば$file$1〜10で、値が入っているものの 数をカウントできる、とおもうのですが、いかがでしょうか。
232 :
初心者 :01/11/08 18:28 ID:???
$file$1〜10→$file1〜10でした。すいません。
233 :
名無しさん@お腹いっぱい。 :01/11/08 18:37 ID:yS1X4SA3
>>232 これで、あってる?
my @vars = (1,undef,3 ,5, 0);
my $count = 0;
foreach(@vars){ defined $_ and $count++ }
print $count;
234 :
初心者 :01/11/08 19:36 ID:07jIFch6
>>233 さすがです!!ばっちりうまくいきました!!
天才!!ありがとうございます!!
my @vars = (1,undef,3 ,5, 0); my $count = grep{ defined $_ } @vars; print $count; ま、大差ないが。
236 :
名無しさん@お腹いっぱい。 :01/11/10 17:29 ID:a3KNiGz4
メールなんかのヘッダーフィールドについてくる、Date: のフィールドの時刻表示には、 かなりバリエーションがあるのですが、あれを意味のある数値(例えばperlのtime関数が返す値) に変換するにはどうするのが定石なんでしょうか? おそらく決まりきったやり方があるんだと思うんですが。。。
jcode.plやcgi-lib.plは同梱して配布してもいいのでしょうか?
jcode.plはソース中に配布条件が書いてある。 cgi-lib.plは知らない。
241 :
名無しさん@お腹いっぱい。 :01/11/11 06:37 ID:6WcbjBVU
ハッシュの配列をクッキーに保存したり読み出したりしたいのでが、 my %cookie = fetch CGI::Cookie; my @values; if($cookie{'testcookie'}){@values=$cookie{'testcookie'}->value} push @values,{key1=>value1,key2=>value2}; my $cookie = new CGI::Cookie(-name => "testcookie",-value => @values,); このようにすると、一回目はうまくいくのですが、二回目以降 うまくいきません。 なってほしい配列。 $values[0]=HASH(*****) $values[1]=HASH(*****) ・・・・・ なってしまう配列。 $values[0]=key1 $values[1]=value1 $values[2]=key2 $values[3]=value2 $values[4]=HASH(*****) どのようにしたらいいのでしょうか?
・CGI::Cookie使ったことないが, リファレンスだけしか保存しなかったら復元できんのでわ。 ・value1とvalue2は何返す関数? 私なら設計見直す。 どうしても必要なら多分割対応のモジュール使うか, セパレータ使う。
Data::Serializer(だったかな)を使うとか。
アスカネットのTinyBBSを改造してるんですが、 書き込み用にデータファイルをオープンした直後の $SIG{TERM} = $SIG{PIPE} = $SIG{KILL} = $SIG{HUP} = $SIG{USR1} = "IGNORE"; ってコレ何ですか? %SIGの意味はわかったけど、↑があるのとないのとでどう違うのかわかりません。
245 :
名無しさん@お腹いっぱい。 :01/11/11 17:44 ID:dTfyRXHQ
sageちゃった…。age。
IGNORE -> 無視する 上に並べたシグナルハンドラを全部無視するって事、httpdによっては KILLとかがいきなり飛んでくる(らしい) 各シグナルについては省略 (w 'シグナル''プロセス'とかで検索してちょ
247 :
縞栗鼠(シマリス)の親方 :01/11/11 20:36 ID:PguAPO/0
248 :
名無しさん@お腹いっぱい。 :01/11/11 20:43 ID:dTfyRXHQ
>>246 わかりました。後はGoogleと格闘してきます。
もう一つ質問なんですが、
テンプレートを用意して記号を変数で書き換えたいんです。
で、こんなのを書いて見ました(Thanks to 某スレの20さん)。
----------------------------------
$post{hoge} = 'Succeed!'; # 変換するデータのハッシュ(実際にはもっと増やす)
printTemplate('./test.txt', %post);
sub printTemplate{
my($filename, %form) = @_;
open(FILE, "< $filename");
my @lines = <FILE>;
close(FILE);
foreach (@lines) {
s/\${(.*?)}/$form{\1}/g; # ${abc}という書式が見つかったら$form{abc}に変換
print;
}
}
(test.txtの内容は、テストなので「${hoge}」の一行のみ。)
----------------------------------
が、上手く変換できません。
$form{\1} の所を $form{hoge} と直接書くと通ります。何故??
$from{\1} を \$from{\1} と書いて見て、
ちゃんと$form{hoge}と出力されてるのは確認したんですが…。
>248 s/\${(.*?)}/$form{$1}/g; こうでは?
通るってどう言う意味?、\1、は$1なのでは??、良く解らんな・・・ $form{baz} = 'foo'; @lines = qw(${baz}\n); s/\${(.+)}/$form{$1}/g for @lines; print for @lines;
>>249 、
>>250 あっさり成功しました…。
\1と$1をごちゃごちゃにしてました。
\1ってのもありますよね?どう違うんだろう。
>>251 見てみます。ありがとうございました。
\1は検索で使う。 $1は置き換えやその後違うところで使う。
URLリストを比較して、重なっているURLを一方のファイルから 削除するスクリプトでポイントになるのはどのような点なのでしょうか。 全く検討がつかなくて、検索をはずしまくっています。 参考になるページを教えてもらえないでしょうか。
255 :
名無しさん@お腹いっぱい。 :01/11/12 03:33 ID:yjAJ+kh7
>>254 >全く検討がつかなくて、検索をはずしまくっています。
検索キーワードは「集合演算」「差集合」あたりでしょう。
257 :
名無しさん@お腹いっぱい。 :01/11/13 00:34 ID:4DKwnz9F
複数ある送信ボタンのうち、選択したものによって実行内容が変わるスクリプト を作っています。 <input type="submit" value="送信01" name="soushin"> <input type="submit" value="送信02" name="soushin"> 送信ボタンには上の二つがありますが、valueを『01』だけにする(divergenceの 部分も併せて変える)とうまくいくのに、日本語が入るとどうもうまくいきませ ん。 何か良い方法はないですか? スクリプトは次に載せます。
258 :
257 :01/11/13 00:47 ID:4DKwnz9F
259 :
名無しさん@お腹いっぱい。 :01/11/13 02:14 ID:iAaKn9Wv
>>257 sub div {
if ($soushin =~ /01/) { &soushin01; exit; }
elsif ($soushin =~ /02/) {&soushin02; exit; }
}
パターンマッチ演算子にしてるけどさ、普通に eq '送信01'とかじゃダメなの?
コードがEUCだけど、"charset=iso-2022-jp" で出力してるから、ボタンの
文字もiso-2022-jpで拾われちゃうし。
確実にJcode使っていけば、そんな問題は起きないと思うけどな。
260 :
名無しさん@お腹いっぱい。 :01/11/13 18:15 ID:CkfqNGb7
検索のCGI作ってるのですが、複数のファイルから検索する場合は どうすればいいのでしょうか? 例えばファイルが1つだとこのように読み込みますね。 open(IN,"data1.txt"); eval{flock(IN,1)}; @username=split(/\,/,scalar(<IN>)); close(IN); これをdata1.txtだけでなくdata2.txt、data3.txtからも 読み込んで検索したいのです。
opendir DIR,"./poyo"; @files = readdir DIR; foreach (@files){ open IN,"$_" if(-T "$_"); 。 。 }
PERLで構造体みたいなのはあまり使わないんでしょうか? データ型に無いのかな、、、
%struct1 = qw{ name hoge year 20 next }; $struct1{next} = \%struct2; %struct2 = qw{ name foo }; print "$struct1{name}\n"; print "$struct1{year}\n"; print "${$struct1{next}}{name}\n"; こんな感じ w
265 :
名無しさん@お腹いっぱい。 :01/11/13 20:08 ID:g8ogkECZ
CGIの暴走・・・ってよく聞きますが、実際にどういう ことなんでしょうか? 自分の中では「無限ループに陥ってしまうこと」と解釈し てるんですが・・・。 他にも「CGIの暴走というなら、こういうのもそうだ」 というのがあったら教えて欲しいッス。
266 :
名無しさん@お腹いっぱい。 :01/11/13 20:13 ID:oVBsXhBR
最近やってもうた無限ループ&aaa() のスペルミスで無限ループ。 しかも原因がなかなか分からなく、苦戦。 sub aaa{ &aaa($hoge) if($hoge eq "foo"); 処理,,, }
>>265 突然わけのわからん処理を延々続けるとか。
掲示板のログ整理でログ全消しのうえ周辺ファイルまで消したり。
>266 ループと違ってstack overflowやout of memory! にならんか。
>>267 それもまた暴走と言える気がしなくもないが。
269 :
260 :01/11/13 22:22 ID:yD0vdlkp
>>261 が回答なんでしょうか?
すいません、厨房にもわかるよう誰か教えて下さい。
>269 >261さんじゃないですけど。 opendir DIR,"./poyo"; #ログのあるディレクトリを開く @files = readdir DIR; #ディレクトリ内のファイルを配列に入れる foreach (@files){ #配列の中身全てに対して open IN,"./poyo/$_" if(-T "./poyo/$_"); #そのファイルがテキストファイルならファイルを開いて 。 #処理をする 。 #処理をする } ただ、ここまで教えてもらったら、自分でも調べてみた方がいいですよ?
>269 >これをdata1.txtだけでなくdata2.txt、data3.txtからも >読み込んで検索したいのです なら単純に3回コピペを繰り返せばいい。それでも動くし全然問題無い その聞き方じゃ、その分繰り返せとしか答えられないだろ? 多分配列操作が出来ないと仮定して書く for $datafile (("data1.txt","data2.txt","data3.txt")){ print $datafile,"\n"; }
ファイルの一番最後の行だけ読み出すことは出来ませんか? やはり先頭から順に読んでいかなければなりませんかね。
$ tail -1 ってそういう意味じゃない?
275 :
274 :01/11/14 00:58 ID:???
環境で\nやら他の字やらになるか。
素直にDB_RECNO使っとけ。
>>273 「$tail」というのは、Perlの標準の関数なんですか?
今まで存在すら知りませんでした。
>>274 ありがとうございます。そのスレ読んでみます。
278 :
273 :01/11/14 01:17 ID:???
違う違う、シェルです(^^;; > $
s#($uri)#<A href="$1">$1</A>#g; みたいのを s#($uri)#<A href="$cgi?$1">$1</A>#g; とかやるだけと思うが。
281 :
279 :01/11/14 01:51 ID:???
>>280 お答え有り難う御座います。
ですが、何だか巧く行かなかったので、もうチョイ詳しく書いてみようと思います。
ーーーーソースーーーー
sub autolink{
$_[0] =~ s/(https?|ftp|gopher|telnet|whois|news):\/\/([\w|\!\#\$\%\&\'(下の行と繋がってます)
\(\)\=\-\^\`\\\|\@\~\[\{\]\}\;\+\:\*\,\.\?\/]+)/<A HREF=\"$1:\/\/$2\" TARGET=\"_blank\">$1:\/\/$2<\/A>/g;
}
ーーーーソースーーーー
元のスクリプトはこの様に書いてるのですが、
>>280 さんの言う通り(当然、変数とかはちゃんと設定して)
やったのですが、エラーが出てしまいました・・・
どうしたら良いでしょうか?
>>281 出来ないから正解教えてくれっていうのは
改造スレ行った方が良くないかい?
せめて自分で何かしらのヒントをつかむ努力をして
勉強する気があるんだなって思われるようにしないと
教える方々も教え甲斐が無いと思うけど。
283 :
279 :01/11/14 02:15 ID:???
>>282 はい、すみません、未熟者でした。
redirectionのCGI作成から始めて、
今のトコで詰まって数時間調べても余り判らず、聞いてしまいました。
もっと、勉強し直してきます。失礼致しました。
284 :
282 :01/11/14 02:19 ID:???
なんだろう、この後味の悪さ…。
TARGET=\"_blank\">$1:\/\/$2<\/A>/g;
の行を。。
TARGET=\"_blank\">$cgiurl$1:\/\/$2<\/A>/g;
でどう? $cgiurl = '
http://hogehoge/foo.cgi? ';
とかにしとく
エラーが出ますはちょっと勘弁 (w
理解しないまま使うな。絶対後で問題起きる。 正規表現勉強して,自分で書いたほうがいい。
287 :
285 :01/11/14 02:26 ID:???
もう居ないかな、CGIでそんなのするなって、どうやってチャージすんのさ 捨てファイル一枚開けといて、疑問に思ったり解らん事が有ったら そこにちょこっと書いて、コマンドラインから実行してみ PODでコメントにしながら貯めていけば後から見たり出来るから 多分1000行くらい溜まる頃には普通に使える様になるよ
使ってれば理解出来るってのも有るぞ、C++とか馬鹿デカ過ぎて厨な俺は半分位なんで 動いてるのか分かって無いよ :−( ROMってる人に役立つかも知れんからマッタリいこーや エラーが出ます、は困ったもんだが・・・
>>281 281だと1が返るのかな。
sub autolink{
my $url = shift;
$url処理・・・
return $url;
}
>エラーが出てしまいました・・・
エラーの内容書いた方が良いよ。
BBSのREFFER辿られたくないからPERLProxy置いて、そいつにリクエスト 投げたいからBBSを弄ってるんだろ? なんだかなあ。。。。
@_を変えるとオリジナルも変わる。
>>290 なるほど。そういうことか。
ていうか、HTTP_REFERERって
標準化するときの単なるスペルミスなんだってね。w
>>263 >>264 ああ、連装配列で委員っすね ^^;
なるほど、中々慣れないもんで・・・ ありがとっす ^^
294 :
257 :01/11/14 02:51 ID:???
>>259 ありがとうございます。
うまくいきました。
お恥ずかしい限りで・・・。
295 :
279 :01/11/14 03:05 ID:???
>>285 さんの言われたのを
<A HREF=\"$1:\/\/$2\" を
<A HREF=\"$cgiurl $1:\/\/$2\"
に変えたら無事に出来ました、沢山の方に御迷惑お掛けしました。
本当に有り難う御座いました。
>>290 さん
おっしゃる通り、REFFER辿られたくないので弄っていました。
PERLProxyって言うのが良く判りませんでしたが、
最近、私のサイトの掲示板で質の悪い書き込みを沢山する人が居たので
REFFERから来たんじゃない?と言われてやってみたのです。
本当に、有り難う御座いました。
297 :
285 :01/11/14 03:17 ID:???
すまんすまんちょっと間違えた、 まあ正規表現はけっこう便利だからこれに懲りずにてきとーに本でも読んでみて
298 :
名無しさん@お腹いっぱい。 :01/11/14 13:33 ID:nPGI7kkt
Perl5.6で日本語使いたい s/表/票/みたいな置き換えしたい 鈴木さんのjperlって5.005用ですよね? ためしにインストールしたらPerlCRT.dllがないって怒られちゃいました perl5.6用のjperl欲しいっす 使いたいときって限られてるのでperl5.6と5.005用のjperlの共存でも いいです どうしたらいいっすか
unicode使え。
300 :
RA・イール :01/11/14 14:44 ID:h/x7Yxzr
概出でしたら申し訳ありませんが質問です。 初心者なので質問の至らない点はご容赦してください。 Web画面上で文字列を取得し、その文字列を用いてサーバー(UNIX)上で grepをかけてその結果を表示するCGIを作成しているのですが、 半角英数及び"-_."の記号は認識するのですが、2バイト文字や 上記3つの記号以外を入力しても認識してくれません。 入力した文字がgrepの前にどうなっているのかを調べたところ 半角「#」であれば「%23」等のようにどうやら文字コードになっているようです。 "-_."や半角英数はちゃんと表示されるのですが・・・・・・ どうすればよいのかアドバイスしていただけないでしょうか? よろしくお願いします。 長文になって申し訳ありません。
それはブラウザがエンコードしてるからです。 文字コードに戻すには、perlなら、 s/%(.{2})/pack("C", hex($1))/eg; Cなら c = (x[0] >= 'A' ? ((x[0] & 0xdf) - 'A') + 10 : (x[0] - '0')); c *= 16; c += (x[1] >= 'A' ? ((x[1] & 0xdf) - 'A') + 10 : (x[1] - '0')); みたいな感じです、半角スペースは + になってるのでそれも変換して下さい。
Perlスレだった、、 鬱だ
304 :
RA・イール :01/11/14 17:10 ID:h/x7Yxzr
305 :
298 :01/11/14 20:08 ID:???
>>299 スクリプトをunicodeにするだけじゃダメですよね?(ダメでした)
処理したい対象のテキストがシフトJISなんです…
あ。読み込んでunicodeに変換して、それから必要な処理を
すればいいのか…な?
>>262-264 構造体の型?を宣言しておくことはできないんですか?
いちいち新しく宣言しなければならないのでしょうか?
307 :
名無しさん@お腹いっぱい。 :01/11/15 21:41 ID:2NOZWJEm
>306 Class::Structとかは?
308 :
名無しさん@お腹いっぱい。 :01/11/15 23:31 ID:u8RJIxtX
はーい、先生しつもーん! perlってプログラム言語だから、てっきりプログラム板だと思ったのに、なんでWebProgなんですか? WebProg専用って訳じゃないですよね? しかも、あっちでは冷遇されてるみたいだし‥‥ なんでプログラム板ではperlちゃんは虐められるんですか?
>306 どこの星の人か知らないけどPerl使ったこと有る??
何で虐められてるの あなたの発言内容が冷遇されてるのでは? (笑
311 :
名無しさん@お腹いっぱい。 :01/11/16 00:30 ID:ecg87As1
>>310 おいらじゃないけど、あっちでperlの質問スレ立てた人が、「板違いだ」と言われてました。
言語っていうよりCGI作成スクリプトってかんじだからかなぁ。 設置するだけの厨も多いし。
shige虫がウザイからです w
>>308 むかしはCGI/Perl板だったから、こっちでやれってことじゃない?今でも。
>>312 それはただ単に世間が狭いからでは? Autoconfの一部, tmake(Qt), fmlとか幾らでもあるでしょ。
Perlしか出来ないCGI厨も多いのも事実だな(w
Perlしか出来ないCGI厨は氏ね。
Perlすら満足に出来ないCGI厨も居るがな。
どこまで出来れば「満足に出来る」ことになるんだろう・・・(ぼそっ) perl理解して無いより、CGI理解してない方が迷惑だけど、それはまぁいいや。
320 :
名無しさん@お腹いっぱい。 :01/11/16 22:12 ID:eZwp685j
$ENV{'HTTP_HOST'}$ENV{'SERVER_NAME'}$ENV{'SERVER_ADDR'} って全部同じ?
>320 LANを組んだローカルサーバーで試してみそ。
322 :
名無しさん@お腹いっぱい。 :01/11/16 23:49 ID:WbULnsbP
>>321 どんな環境で試すと。。。3つ同じになるのかよく考えてみよう
323 :
321 :01/11/17 00:24 ID:???
>322 俺はこれで違うものが出るからこう言ってるんだけど? >320はそれが全部同じ物と思ってるんでしょ? 反例出せばいいのかと思ったんだけど違ったならスマソ。
324 :
名無しさん@お腹いっぱい。 :01/11/17 10:00 ID:caH7oXws
2つの変数($HOGEと$SAGE)の値を交換する方法を教えてください 今現在、 $TEMP = $HOGE ; $HOGE = $SAGE ; $SAGE = $TEMP ; にしてるわけですが非効率ですよねぇ
($hoge, $sage) = ($sage, $hoge)
326 :
521 :01/11/17 10:10 ID:FtGVdyVD
そのやり方で良いよ、仮に「2つの変数を入れ替える関数」が有ったとしても(無いけど) どちらかをtempの領域にコピーして入れ替えた後復帰してる事に変わりない メモリを使わずに空中で交換なんて出来ないんだから。 もしHOGEとSAGEが大きな変数ならリファレンスを使おう
ぐはっ、HNが
> メモリを使わずに空中で交換なんて出来ないんだから。 xorしてxorしてxorすればテンポラリ領域なしで交換できるよ。 でも、素直にテンポラリ使った方が速い、安全、わかりやすい。
本当だ。数値なら、 $b+=($a=($b+=$a)-$a); で入れ替わる。
$b -= ($a = ($b += $a) - $a); じゃないか?
331 :
329 :01/11/17 19:21 ID:???
>>330 本当だ。どこでコピペをミスったのだろう。。。(鬱
332 :
:01/11/17 21:16 ID:hnjwBqTf
Windows2000、ActivePerlです。 ActiveState Perl Dev Kitをインストールして使っていて、 C:\>perl -d hoge.perl で自動的にGUIベースのデバッガが自動で起動しますが、CUIでデバッグ したいときだけCUIデバッグを開始する方法ありますか?
333 :
名無しさん@お腹いっぱい。 :01/11/17 23:34 ID:JGfA8W5O
スゲー $b ^= $a ^= $b ^= $a; で入れ替わるんだ。 これだと文字列でもできるんですね。
>>333 長いほうにあわせてzerofill(?)されるので問題ありとか。
335 :
333 :01/11/18 00:05 ID:???
本当だ。整数同士、文字列同士なら問題なさそうだけど、 少数が混ざったり、整数と文字列を交換しようとしたらダメなんですね。 確かにリスクが多そうだ。
アクセス解析で訪問者のドメインを取得しようとしたんですが、 下の書き方だとCGIを置いてるサーバーのドメインが取得されて しまいます。どこが間違ってるのでしょうか? $a1 = $ENV{'HTTP_HOST'}; open (ANSWER, ">>data.txt"); flock (ANSWER, 2); print ANSWER "$a1\n"; flock (ANSWER, 8); close (ANSWER);
ファイルを1ビットずつコピーするっていうやつを何処かで見かけて、
使ってみようと探してみたら見つかりません。(Perlメモだったと思ったけど、見つからない・・・)
ご存知の方教えてください。 よろしくお願いします。
>>336 $ENV{REMOTE_ADDR}でいけるはず
HTTPリクエストヘッダについて学んで下さい。
>>336 普通は $ENV{REMOTE_HOST}だとおもう。
340 :
336 :01/11/18 01:29 ID:jf4mdJsf
>>337 $ENV{REMOTE_ADDR}だとIPが取得されてしまいます。
>>339 $ENV{REMOTE_HOST}だと何も取得出来ないのですが・・
341 :
名無しさん@お腹いっぱい。 :01/11/18 01:37 ID:GYkHI9xF
>>339 サーバの設定によってはいちいち逆びきしないのも
あるんじゃなかったけ?
342 :
340 :01/11/18 01:40 ID:GYkHI9xF
おお、かぶった。
>>341 gethostbyaddr を使うことになると思う。
CPAN突っ込めるならもう少し楽になる。
343 :
340!=341=342 :01/11/18 01:48 ID:GYkHI9xF
342>340だった。 CPAN使わんでも標準モジュール(perl-5.6.1では)で Net::hostent というのがあった。
344 :
:01/11/18 07:40 ID:ec8bnEpU
locationやredirectを使わず、CGIから直接ファイルをダウンロードさせる事って出来ますか? print "Content-type: application/download\n"; print "Content-disposition: filename=\"test.lzh\"\n\n"; だと駄目みたいです
345 :
:01/11/18 07:43 ID:???
あれ?これは全然違ったかな やっぱりブラウザからGET送られないと無理ですかね・・・
347 :
336 :01/11/18 14:08 ID:HApvi2Od
349 :
348 :01/11/18 14:26 ID:???
それで分からなきゃ検索しなさい。 検索して分からないようなら 自治体主催のIT講習会でも行って来なさい。
>>349 ここは初心者用スレだというのがわからんのか?
・初心者向け結論・ サーバーの設定によってはリモートホストは取得できない。 IPで我慢すれ。
353 :
344 :01/11/18 18:07 ID:???
>>346 さんので成功したんですが、
Perlを通して吐き出す際、壊れてしまうみたいです。(Windows+ActivePerlで.zipを出力)
foreach $_ (@temp) {
$_ =~ s/\n//g;
print $_;
}
とりあえずこれで\nは消してみたんですが、後ろの方がさっぱり消えてしまいます。
(.rarに関してはRar!としか出ません・・・)
何をどう置き換えればいいんでしょうか?
binmode()
355 :
353 :01/11/18 21:14 ID:???
>354 出来ました! もっと調べるべきでした。すいません
356 :
RA・イール :01/11/19 15:45 ID:jO7Jmwt3
300で質問している者です。度々申し訳ありません。 grepの部分で 1. $command .= '"/usr/bin/grep ' . "\'$string\' " . "$filepath " . "| head -n $linenum \"|"; 1のようにした場合、2バイト文字や記号等も拾ってくれるのですが 2. $command .= '"/usr/bin/grep -h "' . "^$day_string" . '" ' . "$filepath " . "| grep " . "\'$string\' | head -n $linenum \"|"; 上記の場合、2バイト文字や記号等を認識してくれないのですがどうしてでしょうか? どうすればよいのかアドバイスしていただけないでしょうか? よろしくお願いします。
良く解らんけど、2回目のgrepの手前でnkf通すとどうなる? 2バイトはさっぱりだけど&%$とかは2回通ったけどなぁ・・・ Unix板のハッカーに聞けばどしどし答えてくれそう (^^;
あ、違った。パイプから返ってくる時におかしくなってるのか? だったら解んないっす
359 :
名無しさん@お腹いっぱい。 :01/11/19 19:04 ID:pdb1llN8
>>を見つけたら置換したいんですが上手くいきません $test =~ s/>>/aa/g; >>の指定はどのようにしたらいいのでしょうか
んなこたあ無い
361 :
名無しさん@お腹いっぱい。 :01/11/19 20:48 ID:f2JzrPLI
掲示板の改造してたんですが >じゃなくて>に中で変換されていました・・・
362 :
名無しさん@お腹いっぱい。 :01/11/19 20:49 ID:f2JzrPLI
↑&gtに変換されていました (半角で書くと変換されちゃうんですね)
363 :
名無しさん@お腹いっぱい。 :01/11/19 21:32 ID:j7n2AWkf
デザイン的に良くないので、petitboardの著作権表示を修正したら動かなくなったんですけど、何故でしょうか? 冬厨ですみません。
365 :
名無しさん@お腹いっぱい。 :01/11/19 21:53 ID:j7n2AWkf
>>364 flock(OUT, 8);
close (OUT);
を、
exit;
に変えればよろしいのですか?
そのとおりです!! 凄いですね (^v^
367 :
名無しさん@お腹いっぱい。 :01/11/19 22:29 ID:WFMClysi
data.txtに 1・・ 2・・ 3・・ ・ ・ と並んでいるのを読み込み、上から「10件まで」と件数を決めて 別のファイルに書き込みたいのです。 openやprintの使い方はわかるのですが、件数の決め方がわから ないので教えて下さい。
openやprintの前にforの使い方をおぼえよう(w
>370 他人を主人公にして自分の思い出を語るのはやめれ。
鋭いですね、そのとおりです
>>371 さん
あれは小学5年頃の話でしょうか
話について来れなくて気を悪くなされたならごめんなさい。
a.cgiからb.plのサブルーチンを呼び出す事は可能でしょうか?
require または use ってことでしょーか?
>>370 、372
369をどう読めばforで挫折したと解釈出来るんだ?
ぼうやはforより先にひらがなを勉強すべき(w
(w(w
小学校5年生の頃といえば・・・ベーマガに投稿した自作PRGが掲載された頃ゾヌ あの頃はフロッピーディスクなんて高嶺の花・・・
Perlってヌルターミネートして、文字列を分割とかって出来ない? 例えばstring = "hoge#poyo#1000#comment"、みたいなデータが有ってCommentだけが 不定長だとするとCとかならstring[4] = '\0';とかしてmoveせずにガンガン使えるんだけど splitだとCommentの最後までループしちゃうし、値をコピーするから 凄く遅そうですよね。commentが10000バイトとかだと結構差が有るんで 何とかしたいんです。 BBSなんかの行解析は大抵splitを使ってるけど・・・・ indexとか使って上手く出来ないですかね・・・・
s/^(.*?)#/\1/ じゃだめ?
>378 comment以外が固定長なら substr($string,14,length($string)) でできないかな?
>377 30代オヤヂ族かよ(w いいトシして板スレ違いは自粛しようぜ(大爆笑)
ごめんチャイナ(ぐすん)
それってもへんじょだろ?
うむむ。。。本当にそれでインカ?
385 :
名無しさん@お腹いっぱい。 :01/11/23 06:07 ID:rvdfMFcf
Perlの練習に一番いいエディタって何でしょう? 今Vivi使ってますが試用期間過ぎてるのでウザイです。 シェアの定番は秀丸というのは知ってますがフリーで いいのありませんか? あまりいいのなければViviに3000円出そうと思ってるのですが。。
Perlで書かれたCGIスクリプトをコンパイルしたいんですけど、 そのためのツールは何て名前でしたっけ? いくら検索しても見つかりません。 よろしくお願いします。
389 :
名無しさん@XEmacs :01/11/23 07:14 ID:MqJMqOjc
開発には向かないが、Copalってのもある。。。ちょっとしたコードのテストに使ってる。
>385 Tera Padというのが雑誌で評判よかったのでDLしてみたけど マルチウィンド出来ないので使いづらかった。 やはりいいやつはお金出すしかないかも。
>>385 …せっかくだから定番だがXEmacsとかMeadowとかxyzzyとか。
394 :
名無しさん@お腹いっぱい。 :01/11/24 00:08 ID:2uJfuz0i
そうそう、そして秀丸に行くんだよ。 地味な面構えが邪魔にならなくて素敵。 って、お試しで使い始めたばかりの奴が言うのもなんだけど。
395 :
正規表現わけわからん :01/11/24 00:08 ID:ZE9o/Xh4
2ちゃんねるみたく「h
ttp:// ・・・」があったら、アンカーでリンク貼るみたいな
のってどうやればいいんですか?
>>396 まじさんくす!ログ全て読む気になれなかったんで。
398 :
名無しさん@お腹いっぱい。 :01/11/24 02:21 ID:QdQjjDaq
いちごちゃんねるが今移転してますけど、 サイト全体をgzip+tarで圧縮、新サーバーへファイルを転送、解凍 というプロセスでサイトの移転は出来ますか? パーミッションをそのままでできたらいいな、と思うのですが。
質問なんですが。 日付を乱数に変換したいのですがどうすればいいでしょう? たとえば01/11/24 02:30をランダムな英数字に暗号化のやり方が わかりません。 一応自分なりに考えて 日付 = (( 日付 ) + 1 ) * 123; などのように考えてやってみたのですが どの日付も同じ結果になってしまって・・・。 だれかヘルプミー(;;
>>400 $salt = "abcde";
crypt($salt, time());
>>401 ちょっと質問していいですか?
そのcryptとはどういう意味を持つ単語でしょうか…。
$salt = "abcde";
crypt($salt, time());
って、$salt = "abcde";で、$saltはabcdeという意味にしてってところまでは
わかるのですが、下のcrypt($salt, time());がよくわからないので・・・。
time()が上で私がいった日付のことで、
で、ランダムにした日付を表示させたい場所に$saltを書くってとこまで理解したのですけど・・・
crypt($salt, time())=crypt(abcde, 日付); として、 cryptはどういう効果を出すんでしょうか。 あと$saltとtimeの間にいれる,もよくわからなくて・・・。 cryptはシャッフル。 ,は合わせるという意味で、 シャッフル(abcde 合わせる 日付) という感じなんですか?
>>400 「日付を乱数に変換する」という、考え方そのものに抜けがあるんです。
乱数というのは、求める度に違う数になって、別々に出した乱数が同じ数字になることはあり得ないものです。
日付を乱数に変換しても、適当に乱数を求めても、本質的な違いはないはずなんです。
ただ今の普通のコンピューターには本当の乱数を出す機能はありませんので、
「日付を種に、擬似乱数を生成する」ということはあります。(種が日付だけだと、かなり危険ですが。)
でもこれはたぶんおっしゃられていることと違うと思います。
日付から、一見でたらめに見える数を求めるということがしたいのだと思います。
このとき、日付→数 は求められても、 数→日付は求められないようにするのが、
「ハッシュ関数」というものです。
ハッシュ関数の場合、入力が同じである場合、出力は必ず同じものになります。
だから、考えられる全ての日付を入力して再計算をすれば、どの日付から求めたのかは
たちどころにわかってしまいます。
そのような攻撃をちょっとだけ、やりにくくするのが、味付け作業(塩を振る)という作業です。
ただ、saltは4096通りしかあり得ないので、総当たりすればばれてしまうことには代わり有りません。
注意が必要です。
最近は、cryptよりもmd5の方が流行っています。
2chでは、トリップはcryptで、IDはmd5でやっているようです。
数→日付 の再計算ができるようにしておくこともあります。この場合は、
共有鍵暗号や、公開鍵暗号を使うことになります。
ufc-cryptが最強、これホント
2chのID生成ってどうやってんだろ。
408 :
403 :01/11/24 23:00 ID:???
>>405-405 ありがとうございます!
なんとなくわかりました。
あとは私自信の勉強あるのみですね。
ほんとにどうもありがとう
409 :
名無しさん@お腹いっぱい。 :01/11/24 23:28 ID:PCZZBwJC
くだらない質問でしょうがお願いします。 PerlでCGIの勉強をしようと想い、参考書に付属してあった PerlとApacheというWebサーバをインストールしました。 そしてまず基本の文字を出力すると言うコードを書き、 IEのブラウザから、そのCGIファイルがあるディレクトリを指定したのですが、 ブラウザに表示されず、そのCGIファイルをダウンロードしてしまいます。 IEの設定が間違っているのでしょうか? 解決方法お分かりでしたら教えてください
>>409 貴方はとんでもない思い違いをしています。
参考書をもっとよく読みましょう。
411 :
409 :01/11/24 23:58 ID:???
>>410 もう一度読みましたが分かりませんでした。
このApacheというソフトをインストールし、起動していれば
通常のようにネットに繋いでサーバにアクセスしなくてもいいんですよね?
どうか先ほどの説明して頂けないでしょうか
普通は、パーミッションを疑う。
413 :
名無しさん@お腹いっぱい。 :01/11/25 01:09 ID:ytkqM1hX
ファイル読み込みについて質問です。
open(DATA, "<./honbun.dat");
$bundata = <DATA>;
としてhonbun.datというファイルを$bundataに全て読み込めるのですが
下記のようにファイルパスを絶対参照にするとエラーが出てしまいます。
open(DATA, "<
http://www.domain.com/honbun.dat ");
下記のようなエラーメッセージです
[an error occurred while processing this directive]
パスを変更しただけで、他は何も変えてないんですが。
ちなみにSSIのincludeを使ってCGIを呼び出してます。
対処法アドバイスお願いします。
414 :
すみません :01/11/25 01:21 ID:2tsqouHY
Perlの本についているCDからPerl For Win32とJPerl For Win32を インストールしました。 そこから、その本に書いてあるとおりにプログラムを始めたいのですが、 メモ帳で作っても良い、という風に書いてあったのでメモ帳で書いたのですが。 メモ帳で作ったデータをhello.plという名前で保存して、 MS DOS プロンプトでperl hello.plとしても、 Can't open perl script"hello.pl"〜以下と出てしまいます。 確認しましたが、確かにPerlのインストールはされていたのです。(Cドライブに入れました) これにはどのような理由が考えられるでしょうか?
415 :
413 :01/11/25 01:25 ID:???
>>414 perlのパスを通してないとか?または
hello.plを保存したフォルダに移動してないとか?
416 :
名無しさん@お腹いっぱい。 :01/11/25 02:13 ID:zHplANiE
>>409 >IEのブラウザから、そのCGIファイルがあるディレクトリを指定したのですが、
「アドレス」で指定せずに「ファイル」→「開く」にしたんじゃ?
417 :
413 :01/11/25 02:15 ID:ytkqM1hX
何度もすみません、
>>413 の質問内容を補足します。
他のサイトのhtmlファイルを読み込みたいんです(許可はとってあります)
その際、
>>413 のようにopenでアドレス指定でいいかと思ったんですが、
うまくいかないのです。それ以前に自分のサイト内でも絶対参照でopenしようと
してもエラーが出ます。読めていたファイルが絶対参照にしただけで読めなく
なるのでパーミッションではないと思うんですが。
httpとOSのパスは違います
あなたが ./hoge.html とか index.html で読めていたファイルの
絶対パスは C:\www\hoge.html や /home/foo/public_html/index.html
で
http://bar.com/hoge.html では***ありません***
って言うかそんな事出来たら困るでしょ?
httpd 仮想パス で検索しよう
419 :
413 :01/11/25 02:49 ID:ytkqM1hX
>>418 ありがとうございます。検索したらいっぱい出てきました。
ニュース記事のhtmlから見出し記事を自動抽出しようと思ったんですが。
(くどいですが許可はとってます)
見出しをdatにしてないのでhtmlから読み込むしかないよ〜と言われたもので
そのまま出来るのかなぁと。
調べてはみますが、無理って事なんでしょうか?
422 :
414 :01/11/25 06:57 ID:DFU5N1cC
>>413 あ、多分それです。本にもパスがどうとか書いてあったし・・・。
ただ、それについてのやり方が全く具体的に書いてなかったので
分からないのです。。
初歩的すぎて書くまでもないことだったのかもしれませんが、
ちょっと始められなくなってしまってるので・・・
手順を教えていただけないでしょうか?
他のHPのPerlページでも、そこまで基本的なことは載っていないんで・・・
すみません。
423 :
413 :01/11/25 09:56 ID:ytkqM1hX
>>420-421 ありがとうございます!
LWPモジュールというのは聞いたこともなかったですが調べてみます。
420と421さん別人ですよね?タイミングがすごいなぁ(^^;
424 :
413 :01/11/25 10:08 ID:???
>>414 Cドライブのルートにperlがインストールされてると思うので
CドライブルートにあるAutoecec.batファイルにperlのパスを記述して
みるといいです。メモ帳で開いて大丈夫です。
上のほうにpath "%path%;c:\Perl\bin;"としてみて下さい。
書き換える前に、一応batファイルのバックアップとって下さいね。
書き換えたあとにパソコン再起動してから試して下さい。
425 :
414 :01/11/25 10:16 ID:sJfjrujt
>>413 ありがとうございます。
後で挑戦してみますね。
本に
Autoexec.batに以下のような記述をします、
PATH C:\WINDOWS;C:\WINDOWS\COMMAND
SET PATH=%PATH%;E:\USR\PERL5\BIN ←この行を追加する
とかかれていたのですが、
AUTOEXECを開くと
Must Be installed Japanese Mode.
Cannot Install Device Driver.と出てしまいます。
これはどういうことなんでしょう?
日本語版をインストールすることが必要ということなんでしょうか?
426 :
:01/11/25 15:23 ID:???
>>425 pathはおそらく通っている。
>>415 にあるようにカレントにhello.plが存在しない。
perlよりも先に、MS-DOSを勉強することをオススメする。
427 :
414 :01/11/25 19:45 ID:elN1fKSW
>>426 了解です。ありがとうございます。
連続教えてチャンで恐縮なのですが、MS-DOSを勉強するのに何かオススメの
書籍・サイトってありますか?
検索サイトで調べても、ダウンロードとかについてしか
見つからないので・・・。
428 :
名無しさん@お腹いっぱい。 :01/11/26 12:50 ID:z2hJCNpL
429 :
名無しさん@お腹いっぱい。 :01/11/26 19:19 ID:o9/cvZ3V
スレ違いならすいません。 NT3.51ServerでWin32::DDEをuseできるようPerlを導入したいのですが、可能でしょうか。 実はActivePerl5.6.1-630をインストールしようとしてMSVCRT.DLLが足りないといわれ、 何とかインストールしてもPerlCRT.dllが足りないとかいわれてWin32::DDEがuse出来ないのです。
430 :
429です :01/11/26 19:22 ID:o9/cvZ3V
PerlCRT.dllは同じPerlをインストールしたNT4.0WorkStationでも見つかりませんでした。 Win32環境では必要ないのでしょうか?
perlcrt.dllは存在しないよ。当方Win2K+SP2
>429 インストーラはバージョンアップ済み?
433 :
429 :01/11/26 22:37 ID:Owo3tZsO
インストーラはmsiのことでしょうか?ならば使わずにインストールしました。
batchからインストールです。
>>431 perlcrt.dllがなぜ必要になるのか私も不思議です。
>>433 InstMsi.exeを先にインストールしないとだめだよ〜ん
435 :
名無しさん@お腹いっぱい。 :01/11/27 00:49 ID:9VBxm652
>>435 PCからだってReffererを吐かない場合は幾らでもあるよ。
$ENV{HTTP_*}は100%信用出来る情報ではないことを覚えておくとよろし。
msvcrt.dllなんて、標準で入っているような
440 :
名無しさん@お腹いっぱい。 :01/11/27 06:36 ID:LKRP0gaE
別に言語はなんでも良い。
442 :
440 :01/11/27 07:28 ID:???
つーことはPerlでもOKなんすね。 ありがとございます。 ちなみに鯖の条件としては、CGI使えれば問題ないですかね?
鯖って専門用語ですか ??(・∀・)クスクス
認識度の高い俗語です
445 :
440 :01/11/27 08:14 ID:???
>>443 すみません、誤変換されてしまいました。
++ __ ノ ?�
ノ ノ \
です。
>>445 犬か何かに見える。
新キャラクター鯖犬誕生! 何の話だ。
_____________ \ ++ __ ノ ・ 鯖犬です > ノ ノ \ _____________/
つまらん、もっと糞詰まりの話キボンヌ
PerlでCGI組んでて 少しでもメモリの浪費を抑えたいんだけど そういう場合foreachは使わないほうがいいの?
おしえてください。 フォルダ内に二つのHTMLファイルを用意して 例えば a.htm と b.htm としてですね。 条件によってどちらかを表示させたいんですがどのようにすればいいの でしょうか? 簡単なようでなぜかつまってます
>>450 んなこたぁない。
>>451 print "Content-Type: text/html\n\n";
if ($jouken == 1) {
open HTML, './a.html';
while (<HTML>) {
print;
}
close HTML;
} elsif ($jouken == 2) {
open HTML, './b.html';
while (<HTML>) {
print;
}
close HTML;
}
453 :
451 :01/11/27 15:46 ID:???
>>451 んあ?
my $file = undef;
if (条件) {
$file = 'a.html';
} else {
$file = 'b.html';
}
open(F, $file);
print <F>;
455 :
名無しさん@お腹いっぱい。 :01/11/27 15:56 ID:FtCrXKQ9
あ
うにゅ?
457 :
クロスボウとやら :01/11/28 11:10 ID:4pa3crZc
質問です。 掲示板等のCGIで、投稿記事のIDに $id = time . $$; # id = UTC秒数 + Perlプロセス番号 としてるものを見つけました。で、質問は2つ。 Q1:この$idはユニークな値であることが保証されるのでしょうか? Q2:Q1がユニークであると仮定した場合、プロセス番号を付加する メリットはなんでしょうか? 以上、よろしくデス。
A1 1秒の間に同じプロセスIDが使われるような異常な環境でない限り大丈夫だと思います。 A2 1秒間に複数の記事投稿処理が行われた場合被ってしまいます。 常時、処理に1秒以上かかる重いスクリプトの場合は大丈夫な場合もあります。
ふつーのUNIX系OSだと、pid は使い回さない(pid=65535まで使い切って初めて、pid=1から再利用を始める)ので、 短期的に見れば pid だけでも十分ユニークです。 pid に時刻を追加することで、長期的にもユニークであることを保証している、と考えた方がいいと思う。 というか、時刻だけってユニークなIDとして使い物にならない。
日本生命の削除依頼公開スレッド
1 :ひろゆき@暫定管理人 ★ :01/11/01 15:49 ID:???
「削除依頼は公開」の原則に従って削除したものを公開してますー。
ソース。
http://www.dd.iij4u.or.jp/~cap/nissei/ 14 :名無しさん@お腹いっぱい。 :01/11/01 15:59 ID:I8TSGCyI
むしろこのGIFを保存しといてそこらにミラー作りまくるのが
2chねらの使命かと
15 :名無しさん@お腹いっぱい。 :01/11/01 16:00 ID:pX4yzwVD
>>10 つか、それがひろゆきのねらいだろ
16 :名無しさん :01/11/01 16:00 ID:4XQtcOuc
オイラはとりあえず保存しといたよ
17 :ひろゆき@暫定管理人 ★ :01/11/01 16:01 ID:???
いやぁ、削除依頼は公開って原則ですから、、
( ̄ー ̄)ニヤリ
18 :va :01/11/01 16:01 ID:+W2rWnl4
同じこと書き込んだら、速攻で削除されるのかな?
461 :
名無しさん@お腹いっぱい。 :01/11/28 12:34 ID:8tU8XC0g
ブラウザであるページ(A.html)を見たときに、自動的にあるスクリプト (B.pl)が実行される仕組みをSSIを使わずに実現することは可能でしょうか? <IMG SRC="../cgi-bin/B.pl" 〜>とかやってみたのですが、一応B.plは 実行されるものの、「画像無し」の×マークが表示されてまずいです。 どうか知恵をお貸しください。 既出っぽい気がしますが(;´Д`)
B.plで 1 x 1 位の画像出力するようにしとけ。
すいません、おしえてください。 ディレクトリ html にHTMLファイルとロゴなどのgifやjpegを いれておきました。そこに .htaccess を置いて order deny,allow deny from all allow from ***.***.***.*** と書いておいてCGIにてIDとパスで認証できた会員だけHTMLを 見せようとしたんです。 ところが、普通に文字は表示されるのですがgifやjpegが表示されない のです。 普通に表示できないものなのでしょうか?
464 :
461 :01/11/28 13:36 ID:8tU8XC0g
>>462 さん
「CGIで画像を出力する」で検索してやり方を調べ、やってみました。
B.plは
#!perl-path
print "Content-type: image/gif\n\n";
print `cat $imagefile`;
でできました!!!
1x1の画像を作るのはペイントでできたんですね。知らなかったです。
ありがとうございました。
>>163 basic認証使えば?
.htaccess
---
AuthType Basic
AuthName "Password"
AuthUserFile /home/user/.passwd
require valid-user
---
.passwd
---
User1:Password1
User2:Password2
466 :
465 :01/11/28 13:48 ID:???
なんってーか・・・最近スレ違い多いね(汗
468 :
463 :01/11/28 16:04 ID:???
説明しているところが見あたらないしよくわからないので このスレで質問します。 携帯専用のサイトをしているのですが、PCから アクセスできないようにするのにはどうしたらよいのでしょうか?
472 :
名無しさん@お腹いっぱい。 :01/11/28 20:49 ID:eYEjqDt2
関数の呼び出し時間ケチりたい時ってどうします? ちょっと凄いループの中とかで、マクロ使うような局面で inlineに出来ないですよね
おい教えろようんこ野郎!!
>473 うんこ野郎には教えられないと思うんですが。 呼びかけるならうんこ野郎以外に向けて呼びかけないと。
>>472 気持ちは分かるけど、大した差は無いから気にしないが吉
どうしても気になるならC/C++で書くよろし
#!/usr/bin/perl -P
#define SWAP(a,b) (a,b) = (b,a)
use strict;
use Benchmark;
our $a = 0, $b = 1;
sub swap($$)
{
@_[0, 1] = @_[1, 0];
}
timethese(1000000, {
"inline" => sub { ($a, $b) = ($b, $a) },
"using macro" => sub { SWAP($a, $b) },
"function call" => sub { swap($a, $b) }
});
$ ./test.pl Benchmark: timing 1000000 iterations of function call, inline, using macro... function call: 11 wallclock secs (10.72 usr + 0.00 sys = 10.72 CPU) @ 93283.58/s inline: 3 wallclock secs ( 3.69 usr + 0.00 sys = 3.69 CPU) @ 271076.17/s using macro: 4 wallclock secs ( 3.72 usr + 0.00 sys = 3.72 CPU) @ 269179.00/s
うんこうんこうんこうんこうんこうんこうんこうんこうんこ
久しぶりにベンチマーク見た(w
479 :
クロスボウとやら :01/11/29 14:16 ID:WXSThiyo
opendir(DIR,"pic") or die "opendir miss"; @picfile = sort grep {/.jpg/} readdir(DIR); closedir(DIR); とした後でJPEG画像表示ってどうすればいいんでしょう? foreach ( @picfile ) { print $_,"<br>\n"; } だとファイル名を表示しますよね?
481 :
名無しさん@お腹いっぱい。 :01/11/29 16:09 ID:/dTb+5XA
ActivePerlのppm installってローカルファイルにも使えますか? 複数台にインストールしなきゃいけなくって、 アーカイブをダウンロードしておいて、それを使ってインストール したいのですが、猿のようにppm installしていたので ダウンロードの仕方やファイルの指定方法がわかりません
482 :
むぎ茶? :01/11/29 16:56 ID:Fa8sgCik
>>458 time_t が一周して同じ値になるとユニークじゃなくなるよ:D
483 :
むぎ茶! :01/11/29 16:58 ID:Fa8sgCik
>>480 print qq|<img src="$_"><br>\n";
はどう?
クッキーの有効期限が書き込めないんですがどこが悪いか教えてください 普通にクッキーは食ってくれるんですがブラウザ閉じると死にます。 sub set_cookie{ $c_name = "kunni"; $c_mail = "kumanko"; $name = $FORM{'name'}; $n ='10*60*60*24'; ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg) = localtime(time+$n); $ww = (Sun,Mon,Tue,Wed,Thu,Fri,Sat)[$wday]; $mong1 = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)[$mong]; $expires = sprintf("%s,%02d-%s-%02d %02d:%02d:%02d GMT",$wwg,$mdayg,$mong1,$yearg,$hourg,$ming,$secg); print "set-cookie:$c_name=$name;expires=$expires;\n"; }
ふざけた変数名だね どうせKENTのパクるなら全部コピペすれば? Sun, 01-Jan-2000 12:12:12 GMT
>>486 書き込めたから前の質問はいいわ。
じゃあパクッてないクッキーの記述の条件をおせーてくれ。
無論ソースで実例記述はいらんよ。
こことこことここが違えばパクって無いオリジナルであるって条件。
スカラ変えればいいってもんでもないだろうし、一つ頼むわ。
偉そうなヤツが居るな。
つーか
>>485 ってKENTの奴に似てるように見えるかね?
時間取得から寄せ集めprintなんてどこでもやってると思うが。。。
どーでもいいが$C_mail=kumanko;はといあえず書き込んでないから
意味無いね。
$c_mail = "kumanko"; これは何を意味してるんだ?一回しか出てこんけど。
$ydaygなんてダサイ名前付けるのは限られてると思われ・・・ どう言う意味?$ydayg ぷ
変数を局所化してないから、他の変数とかぶらんように、 分かりにくい変数名にしないといかんのだろ。
クッキーはちゃんとデコードしとけ。
494 :
486 :01/11/29 19:40 ID:???
あ、ゴメンネ 怒った(笑 まあパクって無いってんならそうなんでしょう >>時間取得から寄せ集めprintなんてどこでもやってると思うが。。。 んな事しなくても、gmtimeに投げてsplitすりゃ良いんで 普通はそうします(w KENTとは言わんがどっかで拾ったコード使って、変数の中吐き出して 確認も出来ないなら、そのまま使えばよろしいかと・・・
495 :
:01/11/29 19:39 ID:???
滅茶苦茶叩かれとんな・・・
誘導して闇討ちで実力計るつもりでいたが、即座に
実力いっぱいいっぱいの典型例
>>488 みたいなのが
出てくる所を見ると3段階、4段階の質問受けれる程話せそうな奴は
噂の2ちゃんにもいなさそうだな。天秤計測終了。
興味無いから適当に煽って後は放置でいいよ。君に興味無いから(ワラ
>>489 あーそうだよ。すまんね。意味無いからそこ削除するか
printで名前書きの下にもmail用の一行加えといてくれ。
ソッコーで書いたからミスっちまったい。
つーかこんな事一々配列で受けてゴチャゴチャやってる時点で アホだと思うが それを最初にばら撒いたのがKENT氏って事か?
498 :
名無しさん@お腹いっぱい。 :01/11/29 19:49 ID:AMvwJSR+
>んな事しなくても、gmtimeに投げてsplitすりゃ良いんで >普通はそうします(w ちょっと溜息。パクってるって言われるくらいそっちのが メジャーだと思うからシャレきかせたつもりだが。。。 書き方あえて変えてんだから読み取ってネ。じゃ無駄な時間使って 煽ってくれ。バイバーイ低次元。
499 :
486 :01/11/29 19:50 ID:???
>>497 そそ
んで、コンテキストも解らん人達がこのやり方を普及してるんです(笑
その典型じゃ無いかな
$exptime = gmtime(time+10*60*60*24); ($wday,$month,$day,$time,$year) = split(/ /,$exptime); print "$wday, $day-$month-$year $time GMT\n"; ほら、これで満足だろ? GPLだからソース公開しろよ 藁
>誘導して闇討ちで実力計るつもりでいたが、、、 悲惨過ぎる・・・
502 :
486 :01/11/29 20:21 ID:???
素人が噛み付くとエライ目にあう事が実証されました(・∀・) らくだ位読もうね みなさん
ファイルの行数をカウントするエレガントな方法を教えて下さい ぼくは下記のようにやっているのですが,すっごく厨房ぽいです #!/usr/local/bin/perl open FILE, $file or die "can't open $file:$!\n"; $cnt = 0; while(<FILE>) { $cnt++; } close FILE; print "$fileの行数は$cnt行です\n";
>>504 こんなん。
$cnt+= tr/\n// while read FILE, $_, 1024;
>>500 これ役にたったよ、何も+1900とかしてシコシコ計算する事無いんだね
俺もKENT病だったようだ(´Д`;)
月をハッシュに入れて日本語表示も随分すっきりしました
# つくづく>485は悲惨だと思った
507 :
:01/11/30 00:27 ID:JaJKMNFa
.アクセス制限は設定出来ますか?
http://home.big.or.jp/index.html?WWW_MENU=m021002h#003 の説明が良くわかりません。
.htpasswd
AuthUserFile /public/pub?/home?/(UserID)/html/secret/.htpasswd
AuthGroupFile /dev/null
AuthName member
AuthType Basic
<Limit POST GET PUT>
require user (UserName)
</Limit>
の設定をして、IDと、パスワードを要求される画面までいきますが・・
アクセス成功できません。Perlのバージョンによって記述が異なるようですが。
$ perl -v
This is perl, v5.7.0 built for i686-linux
です。
このサイトを利用しているかたのアドバイスをいただけないでしょうか?
508 :
:01/11/30 00:38 ID:???
>>507 基本認証はperlとは関係ないよ。
.htpasswdは正確に記述してある?
AuthUserFileにはパスを正確に記述してある?
509 :
:01/11/30 01:08 ID:JaJKMNFa
>>508 AuthUserFile /public/pub?/home?/hoge/html/cgi-bin/.htpasswd
・・・
こういう感じ
「?」っているのかな。外すと駄目みたい。
Options -Indexes
とした場合、に同ディレクトリにあるファイルに直接アドレス入力すると、
見えてしまうのですが、これを見せない方法ってありますか?
htpasswd作ったのか? Telnet使えるみたいだから その辺の説明サイトみながら作れ。 その/public/pub〜〜 って所はpwdって打って出てきたのを入れろ
あれ? 5.7って出てたんだ。。。
512 :
なにがいけないんだろう?。 :01/11/30 01:41 ID:2jA/moy4
>>510 ありがとうございます。 でも駄目みたいです。
ID:yokohama
Pass:monako
http://www15.big.or.jp/~s-w-/ AuthUserFile /public/pub/home/s-w-/html/cgi-bin/.htpasswd
AuthGroupFile /dev/null
AuthName member
AuthType Basic
<Limit POST GET PUT>
require user yokohama
</Limit>
513 :
?? :01/11/30 01:49 ID:???
pub? の?はどこ行ったの?ここに何か入るんじゃないの? 上に書いてるけどtelnetで入ってpwdしてOSの絶対パス書かなきゃダメだって AuthUserFile はおまじないじゃ無いよ、ISPなんて出鱈目書いてたりするし・・
514 :
472 :01/11/30 01:56 ID:???
あわわ! 何で成りすますんじゃー(゚Д゚)! 473は僕じゃないよ _gunzip さん有難う御座いました。ベンチまで取って頂いて。。 Pオプション、知りませんでした 汗; PERL勉強しないとダメだなぁ。。。 手元のGCCですんなり使えましたけど、何か変な感じです ^^; 取り合えずマクロにする事でちょっぴり安心な結果になりました 今perldoc精読中ですー 感謝!
>>513 ども、pwdは以下なんですけどね。
big15:/public/pub/home/s-w-/html/cgi-bin$ pwd
/public/pub/home/s-w-/html/cgi-bin
516 :
513 :01/11/30 02:21 ID:???
何か情報小出しで良く分かんないよ(このスレに持ってくる事自体謎だし。) パス合ってるなら後はファイル出来てる事とパミ確認する位かな 後、LIMITGETとか要らない、テストは最小構成で、これ基本 AuthName,AuthType,AuthUserFile,require valid-user その辺がOKならサポ板とかで聞いてみれば、Perlは全く関係無いから言わなくてよし
517 :
513 :01/11/30 02:27 ID:???
ああ、これ本物のURIなんだね (^ ^; 401だからファイル見つからないか中身がおかしいっぽい(2.3のUAで確認したよ) これで作れる?(未テスト) #!/usr/local/bin/perl print "Content-type: text/html\n\n<html><body>"; if($ENV{'QUERY_STRING'} eq ''){ $0=~s#.*/([^/]+)$#$1#g; print "<h2>パスワードを入力して下さい。</h2>"; print "<form method=get action=$0><input type=text name=id size=10></form>"; } elsif($ENV{'QUERY_STRING'} =~ s/^id=//){ open(FH,">./.htpasswd")||print "ファイルを作成出来ません!"; my @salt = (a..z,A..Z); $salt .= $salt[int(rand(52))] for(0..1); $crypted = crypt($ENV{'QUERY_STRING'},$salt); print FH "$ENV{'QUERY_STRING'}:$crypted\n"; close FH; print "$ENV{'QUERY_STRING'}を暗号化しました! -> $crypted"; }
518 :
名無しさん@お腹いっぱい。 :01/11/30 03:12 ID:JcBWdq/s
BBSNoteで、絵の投稿者の環境を非表示にするにはどの設定をいじれば良いのでしょうか。
おまえの脳みそ (^∀^)ハハハ
>(^∀^)ハハハ 煽りのはずなんだけど、なんか可愛い。
>>499 なるほど、何で高々現在時刻得る為にこんなに小難しくて解りにくいやり方なんだろう(それも決まりきった様に)
と前から疑問に思っていた。しかも使ってるのはまんまasctimeの返り値だし・・・
クッキーなんて、何故かやたら冗長だし、エスケープもしてないし、
たまにやってると思ったらordとか変な関数使ってて、又ややこしいし
よっぽど強力に推奨してる本でも有るのかと。
クッキーって、セッションIDだけとかみたいに単純なの以外は全部CGIモジュールにやらせてるから、自分でコード書いたことない・・・ エスケープのやりかたなんてしらんけど、知っといたほうがいいのかな(藁
おかしな質問ですみません。 プロバのHPスペースでCGIが使えるので使っているのですが、これがPerl4だったりします。 Perl5との違いなどでここは気を付けた方がいいというところはありますか? とりあえず、「$a ||= 1;」とかやるとエラーが出ました。 いろいろと出来ないことが多いみたいで・・・。 もし、Perl4とPerl5の違いを説明したHPなどがあれば紹介していただけるとたすかります。 ・・・できれば日本語で。 よろしくお願いします。
取り合えずPerldeltaを良く嫁 気をつけるのは動かないのよりfor(0..1000)みたいな爆弾構文だ
とりあえず、最新版入れろと苦情メールを入れとけ。
とりあえず、ルート奪って最新版インストールした挙句、説教しとけ。
528 :
524 :01/11/30 18:37 ID:???
>525 検索してみましたけどちょっとよくわかりませんでした。 もう少し勉強してみます。 for(1..1000)はまずいんですか? 繰り返しが多過ぎるのが理由でしょうか? >526-527 それはさすがに(w; サーバー会社のでなくプロバイダについてきたスペースなので・・・。
>>528 for(1..1000)は1,2,3,4,...,999,1000っていうリストを
あらかじめメモリ上に確保してからループに入るから。
1000程度なら爆弾でもないけど。
プロバイダにバージョンアップの要請しちゃダメなんてことはない。
受け入れられるか知らないけど。
つーか、乗り換えるのが吉。
530 :
名無しさん@お腹グー :01/11/30 19:10 ID:Edtr0BUz
>>481 猿より毛が3本多ければ勿論可能。ppm.batの中身を
解析しろ。難しくないぞ。
お前の能力で出来ないなら、3本毛が少ないんだな、
あきらめろ。 コキ過ぎで逝くなよ。
531 :
524 :01/11/30 19:14 ID:???
>529 地方ローカルのプロバで接続量は安いのでなかなか乗り換えられなくて。 予算ができたらレンタルサーバーを借りようと思っています。 これ以上はスレ違いなのでここまでで。 for(1..1000)はやはりループが多いのが問題なのですね。 さすがに1000ものループはないですが今後も気をつけるようにします。 ありがとうございました。
>>531 だからループの数じゃなくて「リストをあらかじめメモリ上に確保」
が問題なんだってば。
for($i=1; $i<=1000; $i++)なら何の問題もなし。
533 :
524 :01/11/30 19:23 ID:???
>532 すみません、ちょっとよくわからなくなってしまいました。 for(1 .. 1000)とやると1000の変数の分の領域をメモリ上に確保してしまう というような意味でしょうか? だとしたら、$#list = 1000;みたいなのも同様にまずいですよね?
> for(1 .. 1000)とやると1000の変数の分の領域をメモリ上に確保してしまう > というような意味でしょうか? 御意。 > だとしたら、$#list = 1000;みたいなのも同様にまずいですよね? 領域の確保は発生するだろうね。 1000個の値が必要な配列があるのなら使うだろうし、 なければそんなことやる意味がないとおもうけど・・・
535 :
524 :01/11/30 20:20 ID:???
>534 なるほど。 親切な説明ありがとうございます。 今更ですが$#list=1000;みたいなバカなものを作っていた自分がいました。 早速修正しようと思います。 ありがとうございました。
536 :
:01/11/30 23:04 ID:???
>>517 (513)
アクセス成功できました。
ありがとうございます。
537 :
名無しさん@お腹いっぱい。 :01/12/01 04:31 ID:kdHffvH4
>>537 問題ありません。Perlにおいては正しい書き方です。
ただ、俺だったらそのスレの824のようなケースでは省きませんね。
俺が省くのは、{ print $_ } のように、{ } が短い一行になる場合です。
これは単純に美的感覚(?)の問題ですけど。
その辺何でも有りなのがperlのいい所且つ困った所なの :-) インデントとか基本的な所は当然としても 俺みたいに色んな言語をちょろ齧りしてる様な奴のperlのソースはとても汚い 記述に一貫性が無いのに、それでも通ってしまうんだよ。 逆に〜〜言語風の書き方を一貫出来る人のコードは読みやすい だから俺は、例えばCっぽい記述を強制するStrict_cみたいなのが欲しいんだ(w
540 :
名無しさん@お腹いっぱい。 :01/12/01 21:36 ID:Bx/rf8oU
$m = rand(100); 1度のスクリプト動作で一回しか乱数を使用しない場合は 乱数の初期化ってしなくてもいいんでしょうか。
perl5ならそれで良い、4ならsrand要、詳しくはperldeltaで
perldeltaってなんですか? 専門書?
解らん関数有ったら検索しろよ、お前朝鮮人やろ?
最後だけ余計だな。
今、かちゅ〜しゃで朝の巡回したら 他の巡回スレも煽り荒らしばかりで嫌になった…。 朝くらい気持ちよく巡回させてくれよ…。
548 :
名無しさん@お腹いっぱい。 :01/12/02 17:47 ID:6F2mG0wF
ふたつの絶対パスA、Bを与えて、Aから見たBの相対パスを得る。 そんなモジュールを探しているのですが、標準モジュールで ありますでしょうか?
File::findなんかはどう?
$a = "/home/user/public_html/test/bbs.cgi"; $b = "/home/user/public_html/php/index.html"; print relative_path($a, $b); sub relative_path { my @file = @_; my @dirA = split /\//, $file[0]; my @dirB = split /\//, $file[1]; while (1) { last if ($dirA[0] ne $dirB[0]); shift @dirA; shift @dirB; } my $dir = "../" x $#dirA; return $dir . (join "/", @dirB); }
551 :
名無しさん@お腹いっぱい。 :01/12/02 22:48 ID:SEeFh0J9
すいません、perl初めてやってるんですけど、 web上でcgiにアクセスするとダウンロードのダイアログが出てきて しまいます。これは何がいけないのでしょうか。
>551 サーバーによるけど、パーミッションが悪いか、スクリプトにエラーがあるか。 そのスクリプトが動くかどうかは、ローカルでチェックしているよね?
あるいは CGI として動作するように設定されていないか。
アマゾンでプログラミングPerlが品切れになっています。 アマゾン逝ってよしですか?
別にんなことで逝ってよしとは思わん。 一般から見れば、切らさんように随時チェックせないかん程の本じゃないし、 一二週間待っときゃ入荷されるだろ。
556 :
:01/12/03 05:56 ID:???
12週間も待ってられん。 なんてあげ足とりの漏れは逝ってよしですか?
別にんなことで逝ってよしとは思わん。 ただ 84日ぐらい待っとけ・・・とはさすがに思わん。
phpでいう、count($a) みたいな配列の要素の数を数える関数てありますでしょうか。
559 :
縞栗鼠(シマリス)の親方 :01/12/03 13:46 ID:v6vCrfM9
>>558 $count = $#hogehoge + 1; # @hogehoge の 要素数
>>558 $count = @hogehoge;
$count = scalar(@hogehoge);
htmにフォームを作ってそこからcgiに飛ばしてフォームの結果を表示して いるのですが、htmlのフォームにチェック項目が幾つかあって 全部にチェックが入っていないとcgiで変数が空かどうか調べて $hogeがチェック入っていません。 というふうにしてcgiでメッセージを出しています。 それで当然htmlに戻るんですが、ブラウザで戻ると 前にチェックした項目が全部チェックがはずれてしまっています。 項目がたくさんあるのでこれを回避したいのですが。 仕様でinputにcheckedを入れていないのがいけないのですが。
ブラウザの「戻る」なら普通リセットされないでしょ?? HTMLの段階でJavaScriptかなんか使って フォーム入力のチェックしたら? # 厳密にCGIの質問じゃないね
わざわざ no-cache とかやって リセットされると嘆いてるに 1票
566 :
初めてのスクリプト :01/12/03 18:15 ID:4NX8xqaD
#!/usr/bin/perl -w $check_word = $ARGV[0]; $check_file = $ARGV[1]; open(IN, "$check_file"); while ($line = <IN>) { if ($line =~ $check_word) { if ($line =~ /(\d+\.*\d+)\s*Mbps/ ) { $ct++ ; $speed += $1; } elsif ($line =~ /(\d+\.*\d+)\s*[kK]bps/ ) { $ct++ ; $tyousei = $1 / 1000; $speed += $tyousei; } } } $avr = $speed / $ct; print "$ct 回 \n"; print "$avr Mbps\n";
567 :
566 :01/12/03 18:16 ID:4NX8xqaD
改行数が多すぎるといわれたので、2に分けました。
スピードテストのサイトのデータを perlで処理するスクリプトを作ってみました。何とか動いているので、感激しているのですが、brush upするために諸先輩のご意見をお聞かせください。
測定回数と平均スピードを表示するものです。
測定サイトは、
http://speed.on.arena.ne.jp/ http://www.broadland.jp/ の2カ所。データは、2種類です。
TARGET home.att.ne.jp
DATE Sun Dec 2 06:25:37 UTC+0900 2001
TIME 4.627 sec
YOU 5432 Kbps
測定サイト
http://speed.on.arena.ne.jp/ v2.0.7
測定時刻 2001/12/02 10:54:22
回線種類/線路長 ADSL/-km
キャリア/プロバイダ ACCA 8Mbps/so-net
ホスト1 WebArena(NTTPC) 4.52Mbps(2244kB,4.0秒)
ホスト2 at-link(C&W IDC) 5.3Mbps(2244kB,3.5秒)
推定最大スループット 5.3Mbps(665kB/s)
コメント ACCA 8Mbpsとしてはかなり速いです!おめでとうございます。(1/5)
これで、このように表示されます。
26 回
3.61423076923077 Mbps
課題 小数点以下を第2位くらい、あるいは、任意の桁で表示する。
独学の初心者です。よろしくお願いします。
569 :
566 :01/12/03 20:01 ID:???
>568 ありがとうございます。 とりあえず、sprintf を使うことにしました。 後は、時間帯別、日別の平均スピードに挑戦します。
良く読んでないが、それだけの目的なら printf(".2f",$avr); 本持って無いなら `printf` `format` `perl` 辺りで検索してくれ
あ遅かった (死
572 :
バックスペースとのマッチ :01/12/03 20:37 ID:sBy63GlF
当方かなりPerl初心者です。よろしくお願いします。 コマンドライン入出力ファイルから、特定コマンドの出力を取り出そうとしています。 (幸いな事に、ファイルにマルチバイト文字は含まれていません。) コマンド入力の際に、「ミスタッチ→バックスペースで修正」と打たれていた場合に対応しようとし、以下の様に考えました。 1.バックスペースは直前の文字と相殺する。 2.バックスペースがある限り、1.を繰り返す。 以上を実現するため、以下の様なコードを書きました。(デバッグ用のprintも併せて記します。) while($line =~ m/.[\b]/) {$line =~ s/.[\b]//; print "さば$lineさば\n";} print "いわし$lineいわし\n"; 以下、疑問点です。 疑問点1: バックスペースが入っている行をこの処理に入れても、さばprintが出ません。 正規表現は合っているでしょうか?(「らくだ本」を見ても、私の頭ではいまいち解りませんでした。) 疑問点2: いわしprintですが、バックスペースは単なるホワイトスペースとして出力されている様です。 (print出力をファイルへリダイレクトしてみましたが、明らかにホワイトスペースでした。) 私はやろうとしている事が果たしてできるのでしょうか?? 蛇足ですが、当方の作業環境のperlバージョンは This is perl, version 5.005_03 built for sun4-solaris Copyright 1987-1999, Larry Wall でした。
全く意味が分からんが、その「コマンドライン入出力ファイル」なる 物にはユーザのキーログがそのまま入ってるって訳? だったらansiの表でも見ながらパーサ書くのが王道じゃ無いの? →←とか押されたらどうするんでしょ
574 :
572 :01/12/03 23:14 ID:+1gWR50Y
>>573 様
舌足らずな説明、すいませんです。
「コマンドライン入出力ファイル」とは、
telnet somehost | tee /tmp/log.txt
と打った時の/tmp/log.txt内容をご想像下さい。
バックスペース入力がファイルに残るのは見ているのですが、
カーソルキー入力がファイルに残り、それが入った文字列が有効なコマンド名となるのは試していませんです・・・すいません・・・
例えば、
p ^[[A s -a
みたいな感じになるのでしょうか?(でもこの場合、有効な入力にはならない気が・・・)
575 :
名無しさん@お腹いっぱい。 :01/12/03 23:28 ID:wka85RYE
レンタルHTMLって何よ? ソースがおかしいって言ったら突然CGIを語るなら LINUX勉強しろって言われてPHP、SQLの勉強してはどうだろうか? と罵倒され、レンタルHTMLって知らないのかと言われたんだが…
ここ人少ないのか(;´Д`) 他のところで聞いてくるYO!
577 :
548 :01/12/04 20:46 ID:???
>>550 なるなる、やはりこの方法がいいようですね。
あの後いろいろやってみて同じ方法にたどり着きました。
578 :
名無しさん@お腹いっぱい。 :01/12/05 01:13 ID:9ARk5xac
test
579 :
名無しさん@お腹いっぱい。 :01/12/05 17:18 ID:rTg+WPeh
Windows環境の人、Perlスクリプトはどこに保管してます? c:\perlの中? c:\scrとかかな? c:\pl? スタンダードってありますか?
580 :
名無しさん@お腹いっぱい。 :01/12/05 17:58 ID:my6OaWYN
起動用のバッチファイルといっしょにc:\home\bin に放り込んでいる
大体書き捨て以外は用途別に別けて溜め込んでるD:\comp_lang\perl\〜〜って感じ #何でスクリーンセーバだろ? とかちょっと悩んだ w
582 :
名無しさん@お腹いっぱい。 :01/12/05 19:34 ID:Lvfs0GBW
すごーく基本的なことをきいているとおもうのですが、 foreach文で、 foreach(@line){ ($_使って処理) } というようなことをしたいのですが、たとえば、配列@lineのが30個の要素 を持っていたとして、11番目から20番目まで処理したいとかいうとき foreach文でそんなことは可能なのでしょうか?それとももっといい方法 があるのでしょうか? 私の少ない知識では、 for (my $i = 10; $i < 20; $i++){ ($line[$i]を使って処理) } という幼稚な方法しか思いつかないのですが...。 ご教授お願いいたします。
foreach (10 .. 19) { print $line[$_], "\n"; } などなど。
>582 foreach(@line[10 .. 19]){ 処理 }
586 :
572 :01/12/06 02:54 ID:1atXp7qL
すいませんでした。 私の質問に回答をいただけないのは、きっと私の質問そのものに欠陥があったためなのでしょう。 という訳で、消えますが、その前に基本的な質問を発したくございます。 今回の様な極めて初歩的な質問(バックスペースにマッチするサンプルでOKです。)は、どのスレッドで質問すればいいのでしょう? 今回の様な、WebProgramingとは関係ない質問は、どの板で質問すればいいのでしょう? やっぱり私は、シェル操作そのものに関して無知と思われます(カーソル移動で入力コマンド文字列を変更する技に関して、あまりよく知りません。)が、根本的に知識不足ですね。 書けば書く程鬱・・・Perlはおろか、コマンドラインでキーを打つのすら禁じられた気分であります・・・だって私は、愚者ですから・・・ 失礼しました・・・
別に無視してた訳じゃ無いと思うけど、あんまり興味有る人が居ないんじゃない? 上にも書いてるけど、キーログの類なら正直Packetstormとかに行って KEYLOGってすればワラワラ出てくる筈だから、その辺でも見てみれば マッチングだけなら m/\b/ でいいんだけど、個人的には文字列の解釈(コマンドの引き数とかね)は 正規表現でゴチャゴチャするより、 while(substr(***))って感じで1byteづつ切り分ける方が結構簡単だったりする 漠然としてるけどこんなところ。あんまり質問を見てないけど (^^;
「すぐわかるPerl」のサンプル掲示板を作ってみようと そのままのperl文を写して掲示板を作成したのですが まったく機能しません。。(コメントが書き込まれない) たぶん記述は何回も確認したので間違えてないと思うのですが よろしければアドバイス願います。 −−−−−−−−−−−−−−−−−−−−−−−−−−−− #!/usr/bin/perl print "Content-type:text/html\n\n"; read(STDIN, $str, $ENV{"CONTENT_LENGTH"}); @parts=split('&',$str); foreach(@parts){ ($variable,$value)=split("="); $value=~ tr/+/ /; $value=~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg; $value=~ s/\r\n/\n/g; $value=~ s/\r/\n/g; $cgi{$variable}=$value; } $formfile="../chatform.html"; $name = $cgi{"name"}; $memo = $cgi{"memo"};
print <<EOF;
<META HTTP-EQUIV="Refresh" CONTENT="0;URL=
http://************/chatform.html ">
<body bgcolor=silver text=navy>
wait for a second...<P>
EOF
open(FILE, "$formfile");
@oldform = <FILE>;
close(FILE);
$li = undef;
foreach(@oldform){
if(/^<LI>/){
@body=(@body, $_);
$li = 1;
}elsif($li){
@foot = (@foot, $_);
}else{
@head = (@head, $_);
}
}
open(FILE, ">$formfile");
select FILE;
print @head;
print @body;
print <<EOF;
<LI>$name: $memo
EOF
print @foot;
close(FILE);
ネタかと思ったらマジで有りやがんの →すぐわかるPerl 記述に間違いが無くてこれなら、こんな本捨てちまえ (いやマジで つーか全然すぐ分かって無いし 愚痴だけじゃアレだから、openした時は返り値を見れ open(FH,"hoge")||&Error("Can't open $!"); とか if(!open(FH,"hoge")){&Error("Can't open $!");} として sub Error{print "Content-type: text/html\n\n$_[0]"} 後はひたすらprint分並べて変数の中確認しろ なるべく小さく、ファイル操作するなら、まずファイルに一文字書き込み から。
つーか初心者本歌ってるのにバグ鳥の仕方書いてないのかよ (´д`;)
まあねえ、、これがどの辺に書いてるかによるかも(笑
>>589 とりあえず何となく合ってる風味だからHTML間違えてるとかファイル開いてないとかじゃないの
上からどんどんprintして見ていけば?
593 :
説明 :01/12/06 07:39 ID:???
もし「〜〜日で出来る」とかの初歩本買うなら、簡単なデバッグの仕方位 書いてるものを選ぼう。 いきなりCGI書かせてCarpやKcatchの説明も無しと言うのは作者が精神分裂症か サディストかのどちらかです :3=) Byバカボンのパパ
>>588 殆どそのまんま588をコピペしたけど書き込まれたよ。
chatform.htmlが存在しないか、投稿フォームがオカシイんじゃ?
すぐわかるの掲示板は、設計自体がへん。
>>572 ,586
これ(↓)試したらどうなります?
$_ = "a\bb\bc\n";
print;
s/[\b]//g;
print;
597 :
582 :01/12/06 09:02 ID:YsGQWh0f
>>583 >>584 どうもありがとうございました。
なるほど、こんな風に記述できるのですね。
早速やってみます。
僕も半年ほど前に『すぐわかるPerl』買ったんだけど、それを終えたあとすぐにオライリーの 『初めてのPerl』やったら、『すぐわかるPerl』を買ったことをすぐに後悔した。
「すぐわかるPerl」やるよりも、「初めてのPerl」やるほうが 100倍良いのは明らかだとは思う。 ただ、ホントにプログラムくむのが初めての人だったら、 一冊目が「初めてのPerl」というのはキツいかもしれない。 そういう場合のみ意味があると思う>すぐわかるPerl # 大体、「すぐ分かるPerl」の著者は、本の中で「初めてのPerl」 を推薦してるし。
601 :
名無しさん@お腹いっぱい。 :01/12/06 14:32 ID:ixzePiV3
2chネラ用のアプロダ作成中ですが(あやしいのパクリだけど) ファイルを保存するルーチソってこれで問題ないですかね? open(FILE, ">$file_dir\/$_[0]\.$$"); binmode(FILE); binmode(STDIN); while(<STDIN>) { if ( $_ =~ /^$endline/ && $endline =~ /^--/ ){ last; } elsif ( /^--/ ) { $endline = $_; } elsif ( /^Content\-Type\:\s*(.*)/i ) { $file_type = $1; } elsif ( /^\r\n/ ) { next; } elsif ( /^Content-Disposition: form-data/i ) { next; } else { s/\r\n//g; print DB $_; } } close(FILE);
602 :
601 :01/12/06 15:39 ID:???
ダメだ、メッセージが上手く受け取れネーや。。。 cgilib使ったほうがいいのかな
603 :
ウンコー :01/12/06 15:43 ID:8ybpM+Zd
604 :
572 :01/12/06 19:27 ID:wL0DoiFw
>>587 様,596様、ありがとうございます。回線切って首吊って氏ななくて良かった・・・
懲りずに書き込みます。
>>596 様のスクリプトですが、私の環境で実行したところ、
c
abc
と出ました。期待値通りの出力です。
以上から考えますと、バックスペース入力は、ファイル内では
\b以外の文字コードとして存在している、という事になります。
viでファイルを開くと「^H」(カーソル移動はこれで一文字分の移動をし、^とHから成る訳ではありません。)と見えるこの文字が何であるのか、
もう少し調べてみます。
それでは。
みなさん、どうもです。ヤパーリ本がおかしいんですかね..。
当方、初心者なもんで「これでやっと掲示板作成か!」って段階に
来ていたのにできないもんですから、鬱になってました。。
>>594 投稿フォームも全部記述通りに書いたのですが
やっぱり無理でした。。
とりあえず590さんのを見てもう一度考えてみます
606 :
名無しさん@お腹いっぱい。 :01/12/06 23:27 ID:dTMUXoew
@ if(100 <= $total < 200) A if((100 <= $total) and ($total < 200)) こういう条件式は@のようにいっぺんに聞いてはいけないのでしょうか。 SQL文は@のやり方でいけたんですけれど。
htmlからcgiへフォーム送信しています。 htmlでmethodはpostです。 それで渡す値を色々試したいのでurlに?hoge=引数の形で 試すのですがうまく渡りません。 単にurlに引数を渡す場合でもhtmlのmethodをgetに変えなきゃいけないんでしょうか。
やってみればスグに分かる。
cgi-libとかってクエリでキーが複数あった場合 "\0"をセパレートとしてるけど、これって値事態に "\0"があったら意味ないよね? それとも\0ってなにか特殊なの?
610 :
609 :01/12/07 01:37 ID:???
s/値事態/値自体/;
611 :
名無しさん@お腹いっぱい。 :01/12/07 01:42 ID:We0Nr7br
初心者ということで教えてください。 perlで処理をすべて1ファイルで記述して 100KBくらいになったCGIは やっぱり重いですか。 分割したほうがいいですか?
>>611 >初心者ということで教えてください。
これを書いてしまったことにより無視されるに50円。
>609 &で切っても&が有ったら意味ない、=で切っても=が有ったら意味ない 普通は&や=より\0使ったリクエストのが少ないだろ >610 100KBくらいのCGIを書ける頃には分かるから気にすんなw
>>606 >@if(100 <= $total < 200)
>SQL文は@のやり方でいけたんですけれど。
いけないって。DBは何?
SQLなら WHERE $total <= 100 AND $total < 200 って書かないとエラーになるYO!
>>615 WHERE $total >= 100 AND $total < 200
>>604 c
abc
となるなら、端末の設定も問題ないと思います。
また、vi上で^Hと表示され、^とHから成る(カーソルが2カラム分動く)のなら、
その文字はBackSpace(Ascii Code: 0x8)です。
>>596 のみのスクリプトを端末ではなくリダイレクトでファイル出力し、その
結果をviで見たら、
a^Hb^Hc
abc
となりますか? od -cxの出力結果でも確認できます。
もし、^Hや\bが正しく出力されているのであれば、問題はスクリプトの別の部
分にあると疑ったほうがよいでしょう。
ちなみに WinNT + ActivePerl v5.6.1で、
>>572 のコードの先頭に
$line = "a\bb\bc";
を追加した結果をファイルに落として覗くと、
以下の通り期待した結果となります:
さばb^Hcさば
さばcさば
いわしcいわし
618 :
名無しさん@お腹いっぱい。 :01/12/07 10:57 ID:yYR0Ii3K
windows2000で使えるパールソフトはないのでしょうか?
パールソフト
パールライス
622 :
619 :01/12/07 14:43 ID:???
ああ、突っ込みたくてうずうずしていたのに・・・
623 :
611 :01/12/07 15:44 ID:???
>>612 例えば
Perlで書いた掲示板プログラムをみると
管理用.cgiとbbs.cgiというように
分けてあるものと、
管理用も、bbs用も1ファイルで全て記述してある
ものを見かけるので、
実行速度とか関係あるのか、どちらが良いのでしょう?
.cgiは毎回毎回ロードされるのですか?
>>613 >初心者ということで教えてください。
私のような初心者が質問していいスレッドだと
思ったのですよ。無視しないで教えてくれ〜。
もし指定したディレクトリが存在しなければ、そのディレクトリをつくれ! って言う書式を教えてください
>>624 if (ディレクトリが存在しない) {
ディレクトリをつくれ!
}
なるへそさんくす [[解決]]
質問です。 $tensu{'田中'} = 100; $tensu{'鈴木'} = 90; $tensu{'佐藤'} = 100; といったデータをsortした場合、田中と佐藤のどっちが先に来るかというのは 法則があるのでしょうか? いつも同じ結果になるので法則があるのだとは思うのですが、その法則とは どのような法則になっているのでしょうか? もしご存知の方がいたら教えていただけると助かります。 よろしくお願いします。
最初に定義した順だ
本当ですか?
>628 定義した順という事は上の例で言えば田中、鈴木、佐藤の順という事ですか? print "Content-type: text/plain\n\n"; $tensu{'田中'} = 100; $tensu{'鈴木'} = 100; $tensu{'佐藤'} = 100; $tensu{'山本'} = 100; $tensu{'木村'} = 100; foreach(sort{$tensu{$a} <=> $tensu{$b}} keys %tensu){ print $_."\n"; } ↑この例で試した場合、 ↓のような順で表示されたのですが・・・。 木村 鈴木 山本 佐藤 田中
文字列のソートはcmpだよ、<=>だと比較対象がisnumberじゃない時に スルーされる(筈)だからソートは行われない print "$_\n" for sort{$a cmp $b}qw(cat rabit dog monkey mona); 日本語をソートしたいならJperlを使おう
>631 いえ、数字ソートした場合の同値の並び順の法則を聞きたいのですが・・・。
だから行われないっつってんのに :-( print "$_\n" for sort{$a <=> $b}qw(鈴木 山本 田中 木村); 鈴木 山本 田中 木村 で、何でおかしな並べ替えが行われてるかと言うとkeysを通すからですが この時keysが返す値の並びは***不定***なので 何から出てくるかは完全に***予測出来ません***
何故かと言うとハッシュテーブルから一致した物をどんどん引き抜いてるだけなので。 これが気に入らないならハッシュ法を調べて、値を返す前にソートする様に keysを改造して下さい :-)
>633-634 つまりハッシュテーブル内での記録状態に依存されるという事ですね。 こちら側からはその記録状態を把握できないから法則性を見出す事は出来ないと。 その返答で十分です。 ありがとうございました。
>>611 ,623
たいして変わらん。
まず読みやすく書け。
管理がしやすくなるなら分割しろ。
初心者だから〜という考えは捨てろ。
初心者が自分を初心者と思わないほうが怖いぞ(w
640 :
名無しさん@お腹いっぱい。 :01/12/07 23:59 ID:XnpIIJ1Q
ActivePerl 、win2000で使えません
使えていますが何か?
>642 それはシステムの要求項目だ、特に無しって事だから気にすんな nextに進んでmsiかzipを落せ
645 :
名無しさん@お腹いっぱい。 :01/12/08 00:23 ID:9GPXgj8m
馬鹿な質問すいませんでした。親切なレスありがとうございます。
646 :
名無しさん@お腹いっぱい。 :01/12/08 05:13 ID:LmrHjtAG
#!/usr/local/bin/perl sub func (\%); { my %hash = ( key => 'VALUE' ); func(%hash);# <--(先頭に & 記号無しの呼び出し) } sub func (\%) { my $ref = shift; print $ref->{key}, "\n";# VALUE } 誰か、サブルーチンを呼ぶ時に &func(%hash); と した途端、期待通り動かなくなる理由をオシエレ。 一週間悩んだ挙句、このスレの 100-200 あたりを読んで 解決はしたけど、やっぱ理解しないと気持ち悪いのヨ。
647 :
名無しさん@お腹いっぱい。 :01/12/08 05:40 ID:D6XloJOW
プロトタイプは & を使わない呼び出しのみに作用するように 出来てるから、つまり仕様。ってことじゃダメ?
648 :
646 :01/12/08 05:53 ID:LmrHjtAG
>>647 あ、非常によくわかりましたです。
今までは、将来の組み込み関数やファイルハンドルと
重ならないように、全てのサブルーチンにつけてましたが
先頭で宣言しとけば、もし重なった時にはエラーが(多分)
出ますものね。ありがとうございました。
ちなみに文体は変わりましたが本物の 646 です。わらい。
>636 専用のモジュールもあるんですね。 ありがとうございます。
650 :
名無しさん@お腹いっぱい。 :01/12/08 09:44 ID:txIFSrN6
あの、質問です。 本当に初心者なんです。 FFFTPでCGIを転送するときのしくみ でいい参考資料ありませんか?(汗) ログありすぎて探したのですが わかりません。。
653 :
650 :01/12/08 10:40 ID:c8d0pxqG
ああ、スイマセンでした。。 日本語も勉強した方がいいみたいです、私。 CGIのアップロードの仕方がわかんないんですが。
655 :
572 :01/12/08 14:46 ID:4/I3dmD1
>>617 様
ありがとうございます。
全て解決しました。
結論は・・・私がバグっていたからです。
while($line =~ m/.[\b]) {$line =~ s/.[\b]//;}
を行う位置を誤っていて、
自分でバックスペースをスペースへ変換してから
件の処理を行う様になっておりました。
という訳で、今後も精進致します。
%HASHの中身を直接いじる方法無いかな foreach(%HASH{keys %HASH}){ $_をいじる } だと何も変わらないので foreach(keys %HASH){$HASH{$_}= … } ってコピーしてやってるんだけど,普通の配列を foreach(@ARRAY){ … } とやるみたいに直接中身を書き換える方法は無いの?
>656 keyわからなくなるけどforeach (values %hash)とか
each 使えってば
659 :
ほらよ :01/12/08 23:13 ID:???
//www.ultraman.gr.jp/~momiyama/Learning_Perl/reference.htm eachやvaluesはダメよ
和気和歌蘭(^∀^)
>656 >>foreach(%HASH{keys %HASH}){ $_をいじる } 何をやりたいのか分からないです :-) >>foreach(keys %HASH){$HASH{$_}= … } コピーしてるとは? 一時配列を作りたくないって事? だったら for(($key,$value)=each %HASH){if($key eq 'hoge')$HASH{$key}='...';} なら一組のリストしか出来ないけど >659 なんでリファレンス?
>Note that you cannot modify the values of a hash this way, because >the returned list is just a copy. You need to use a hash slice for >that, since it's lvaluable in a way that values() is not. > > for (values %hash) { s/foo/bar/g } # FAILS! > for (@hash{keys %hash}) { s/foo/bar/g } # ok
663 :
名無しさん@お腹いっぱい。 :01/12/09 02:52 ID:CTSZ1Ad/
すいません、>659のURLの「■ 多重ハッシュ(ハッシュのハッシュ)」のところを 見たんですが、 name1, email1, title1, comment1, … name2, email2, title2, comment2, name3, email3, title3, comment3, … という感じで、一度に複数投稿できるようなスクリプトを作りたいんです。 (掲示板じゃないんですが、例として) それで、同ページの「多重ハッシュを動的に作成。」ってあたりをどう 書いたらいいんでしょうか。 %hatugen = ( res1 => { name => "name1の値", email=> "email1の値", title => "title1の値", comment => "comment1の値", }, res2 => { name => "name2の値", email=> "email2の値", title => "title2の値", comment => "comment2の値", ); と全部書いてやるるしか自分には出来なくて…。
$i=1; for (<DATA>){ for(split(/,/,$_)){ ($key,$value)=split(/:/,$_); ${hash{$i}}{$key}=$value; } $i++; } for $num (keys %hash){ print "\%{\$hash{$num}} are ... \n"; while (($key,$value) = each %{$hash{$num}}){ print "$key ----> ${$hash{$num}}{$key} \n"; } } __DATA__ name:name1,mail:email1 name:name2,mail:email2 name:name3,mail:email3 未テスト
665 :
名無しさん@お腹いっぱい。 :01/12/09 04:09 ID:pYGvWQvh
上のカンマ区切りのやつはフォームから入力するんかい?それともファイル?
それによって違うんだけど・・・
あとね、この場合普通はハッシュのハッシュは使わない。
配列の配列の方が無難。つまり、
@hatsugen = (
[ "name1", "email1", "title1", "comment1" ],
[ "name2", "email2", "title2", "comment2" ],
. . .
)
って感じ。理由はメモリの節約。
で、
use constant NAME => 0;
use constant EMAIL => 1;
use constant TITLE => 2;
use constant COMMENT => 3;
ってやっておけば、
$hatsugen[0][EMAIL]で最初の発言のメールを取得できるでしょ。
enum モジュール使えばなお可。
http://search.cpan.org/search?dist=enum #enum標準にしてくれないかな・・・
あ、ちょっと違うか、まぁ適当に直してくり
>663です。回答ありがとうございます。 >665 >上のカンマ区切りのやつはフォームから入力するんかい?それともファイル? フォームです。 >664 >665さんの回答を自分で試してみてから、 またレスします。 (適当に直せる自信ないけど…)
えっと、一応補足すると>665氏の言う通り多重ハッシュは効率悪いよ つか俺も知らなかったけどListofListで列挙型使えるのイイ(・∀・)ね あとシンボリックリンク恐怖症じゃなければ、単純に枝番ふった連装配列 ってのも有りかな・・・
Perl で、 ある画像(GIF,JPEG,PNG 等)の 幅と高さを取得できるようなスクリプツはできますか ?
>>669 Image::Size
まだ、使ったことないけど、たしかこれで。
おまえに教えて損した
名無しさん@Emacsって何処かの板の名無しさんですか?(スレッド違いすまん)
674 :
670 :01/12/09 19:55 ID:???
670 != 672
根拠はあるのか?
「もし条件Aならば処理Aをしなさい、あるいはもし条件Bならば処理Bをしなさい」を if(条件A){処理A;} elsif(条件B){処理B;} と書く場合、 「もし条件Aでなければ処理Aをしなさい、あるいはもし条件Bでなければ処理Bをしなさい」は unless(条件A){処理A;} elsif(条件B){処理B;} でよいのでしょうか? 現在、elsifを使うべきかわからない状態です
>unless(条件A){処理A;} >elsif(条件B){処理B;} これ出来たっけ?(未確認) 否定文並べるか肯定文ならべるかはケース倍ケースdeath if(条件A){処理A;} elsif(条件B){処理B;} は if(条件A){処理A;} if(!条件A 且つ 条件B){処理B;} の略、省略したいから使うだけで悩む事じゃないでふ〜〜
>676 試してみたら一発じゃん・・・。 俺は出来た。
俺はif(!〜の方が可読性いいと思うな
>>現在、elsifを使うべきかわからない状態です elseの意味を調べてくれ
社内で使うアンケート集計フォームを作りました。 記入された内容をCSVファイルに追加書き込みしているのですが、 複数行入力を許しているテキストフィールドの内容を書き込む際、 改行コードが邪魔になってしまいます。 書き込む際に改行コードを強制削除したいのですが、 うまく消えてくれません。 $other=~ s/\n/<br>/g; と他の文字列に置換してみたところ、 改行タグの後ろに結局改行コードが残ってしまいました。 ($otherには入力内容が入ってます。) サーバはNTで、perlのバージョンは5です。 何か良い方法はないでしょうか?
682 :
生厨房 :01/12/11 14:44 ID:???
>>681 $other =~ s/\r?\n/<br>/g;
その処理の前に & < > も変換しとかないとね
>>682 ありがとう。
きれいなデータになりました。
ちなみに
\r?
にはどういう意味があるのですか?
684 :
生厨房 :01/12/11 15:17 ID:???
>>683 Windows,Unix,Macの改行コードの違いを調べるといいよ
あとエスケープシーケンスも
>>684 了解しました。
世の中のPerlの本はUNIX前提になっているものが多いんですね。
次はLINUX+PHP+Postgresqlを勉強する予定なので、
またまた文字コードに悩まされそう。
CGIってNULLってあるの? それと文字数を数えるのってどうやるの? aだと1、aaaだと3を返すやりかた。
ちゃうよ。 abcでも3を返したいの。そこのリンクは1が帰ってくるでしょ。
length()
690 :
688 :01/12/11 17:03 ID:???
それそれ。ども、ども。
691 :
名無しさん@お腹いっぱい。 :01/12/11 17:20 ID:P2qcRNJ8
print <<"HTML"; <script language="javascript"> <!-- function javascript { 〜 } // --> </script> <form name="form1" onsubmit="return javascript()" action=""> <input type="text" name="abc"><input type="submit" name="button1" value="CHECK!"> </form><form name="form2" action="$scriptname"> <input type="submit" name="button2" value="XXXXX"> </form> HTML わけあってこうしなければならなくなった。 ようするに、form1で、入力された文字列を、javascriptで処理し、その処理結果を、perlで処理したい、という事。 もしかすると、HTML以前の問題かも。 心の広い方、教えてください。
>691 マルチポストウザイ。
693 :
名無しさん@お腹いっぱい。 :01/12/11 17:26 ID:P2qcRNJ8
ごめんなさい…
>692 放置するか回答するの二者択一でお願いしまちゅ
(放置|回答)
放置か回答か? マルチ野郎の思う壺じゃないか。
697 :
名無しさん@お腹いっぱい。 :01/12/12 00:04 ID:1mlMOGo3
IPアドレスからホスト名への変換処理をしようとしています。 $addr = $ENV{"REMOTE_ADDR"}; $host = gethostbyaddr (pack ("C4", split (/\./, $addr)), 2); この処理で、gethostbyaddr以下が良く分かりません。 $addrに格納されたIPアドレスの『.』を取り去った四つの数字をバイナリ化(?) したものを・・・? 最後の2が何を表すのか、また他に使える数字にはどんな ものがあるのか知りたいです。 それとgethostbyaddr関数ってpackとペアに使わなくちゃいけないものなんですか?
>>697 use Socket;
$x = gethostbyaddr(inet_aton("61.194.226.203"), AF_INET);
が吉。(inet_aton 使わないで、自分でpackしてもよいけど。)
AF_INET は環境によって異なる定数なので、数字で与えるのは移植性を低下さ
せます。(多分) 何でこんな面倒なことをしているかというと、ソケットって
のはIPv4に限らず、様々なプロトコルを使えるように出来ているからなんです。
アドレスファミリとしては、これ以外にも AF_INET6 などがあります。(環境
によっては無いけど。)
use Socket;
use Socket6;
$x = gethostbyaddr(inet_pton(AF_INET6, "3ffe:501:4819:2000:280:adff:fe71:81fc"), AF_INET6);
print "$x\n";
=> apple.kame.net と表示される。
# Socket6 は標準モジュールではありません。
700 :
名無しさん@お腹いっぱい。 :01/12/12 16:10 ID:Mrx6ZMte
>>698 >>699 ここで質問しておきながら自分でも色々なサイトを捜してみて、なんとなくうす
ぼんやりと分かってきました。
あとは自分で色々試すだけ。
ありがとうございました。
701 :
名無しさん@お腹いっぱい。 :01/12/12 18:31 ID:BvKUxJBs
libwww-perl-5.6.1のインストールについて質問
URI,MIME-Base64,HTML-Parser,libnet,MD5をインストールし,
make testでokが出たのですが,libwww-perlのmake testで
エラーが出ます../TEST -vすると以下の通り
, ./TEST -v live/validator.t
live/validator......No such field 'uploaded_file' at live/validator.t line 31
1..2
dubious
live/validator.tを見ると,
my $uri = "
http://validator.w3.org/file-upload.html ";
のフォームに書き込んでチェックをしている? みたいなんですが,
w3cの同ページが変更されて,みんなエラーが出ているんでしょうか?
702 :
名無しさん@お腹いっぱい。 :01/12/12 20:46 ID:KPDzNand
*.htmをぜんぶ*.htmlに変えたのですが、a href=の指定がhtmの ままになっちゃってます フィルタプログラムではなく、ファイルを直接書き換えたいのですが どうしたら良いのでしょう???
>>701 うちは All tests successful. だけどなぁ。
libwww-perl-5.62 + Perl 5.005_03 on FreeBSD
>>702 perl -i -npe 's/href="(.+?\.htm)"/href="$1l"/g' *.html
とか? 文章中に href="puni.html" とかあったらそれまで置換しちゃうけど、
その辺は手作業で何とかして下さい。-i.bak とすれば .bak の拡張子がつい
たバックアップファイルがつくられます。
term上でstdoutに出力した文字列を削除したい場合どうするんでしょうか? なんかTerm::CapのTputs('dl'...)でやるみたいなんですが、どうやっても うまくいきません。 print 'aiueo.' と出力して、出力されたaiueoを削除する方法を誰か御存じないでしょうか。
どういう環境で、どう上手く行かないのか書かれていないので何とも言えない けど、単に文字が消えるだけでカーソルがそのままなので困っているのなら print $terminal->Tputs("dl", 1, undef); print $terminal->Tputs("cr", 1, undef); という感じ? man termcap: delete_line dl delete line (P*) carriage_return cr carriage return (P*)
707 :
名無しさん@お腹いっぱい。 :01/12/14 17:56 ID:eZS0n+wo
perlって変数使うとき 0とかでわざわざ初期化してますか? それともいきなり値代入しちゃいますか?
>>707 In article <
[email protected] >, 名無しさん@お腹いっぱい。/707 wrote:
> perlって変数使うとき
> 0とかでわざわざ初期化してますか?
> それともいきなり値代入しちゃいますか?
i = 0;
i = 135;
って書いた方がいきなり入れるより綺麗にはいりますね (うそ)。
709 :
名無しさん@お腹いっぱい。 :01/12/14 20:01 ID:UVoMYWWJ
%aa = ('a11'=>'aa'); $bb=10; print $aa{"a($bb+1)"}; こんな感じでハッシュを参照させたいんですけど 表示されません。 うまい方法無いでしょうか?
意味が分からない、aって何なの?
ああ、そりゃ無理だ、 $foo = $bb+1; $baz = "a".$foo; $aa{$baz} で良いじゃん
>709 %aa = ('a11'=>'aa'); $bb=10; print $aa{"a".($bb+1)}; これでどうかな?
こう言うの見てると、型無し言語逝ってよしに 賛成せざるを得ないね
714 :
:01/12/14 20:43 ID:???
>>713 訳分からなくなるよな
俺はなるべく、$hoge+=0; を書くようにしてる
Perl初心者のくせにCを勉強しはじめましたが、ややこしくて死にそうです。
716 :
名無しさんに接続中… :01/12/14 20:59 ID:lmAPrLZ5
CGI(perl)で、他のプログラムを呼び出したり操ったりすることはできますか? また、シリアルポートなどに信号を出力することはできるんですか?
717 :
ウンコー :01/12/14 20:59 ID:Uhp3YWba
>>713 型無しだから悪いんじゃないよ、これはこれで便利だし
「Perlに問題は無い、Perlが生み出すプログラマが問題なのだ」って感じ ヽ(´ー`)ノ
>CGI(perl)で、他のプログラムを呼び出したり操ったりすることはできますか? 出来ます >また、シリアルポートなどに信号を出力することはできるんですか? 出来ます
720 :
名無しさんに接続中… :01/12/14 21:21 ID:lmAPrLZ5
>>719 よかったら、そのやりかたのヒントを教えてください。
教えて君でスマソ
721 :
デフォルトの名無しさん :01/12/14 21:51 ID:euO3A1/1
>720 他のプログラムはexecと("hoge")かsystem("hoge")とか`hoge`とか シリアル通信は、WINならopen(COM,">COM1"); Unixならopen(COM,"/dev/tty0");とか 俺はNewtonlink使ってたけど、 と言うか、処理系も書かずに何が知りたいのかと問い詰めたい
>>715 > Perl初心者のくせにCを勉強しはじめましたが、ややこしくて死にそうです。
Perlの方がよほどややこしいと思うが。
無秩序に仕様を拡大してしまったからね。
723 :
名無しさん@お腹いっぱい。 :01/12/14 21:59 ID:wyNE/AKi
>712 それでできました。即レス感謝です! >711 なんか公開されてるスクリプトみると1行にまとめてあったりして なんかうまく見えるのでそれを見習おうかと思いまして。。
>722 その割にswicthとかtryANDcatch構文は拒んでるんだよなあ・・・ どうせなら全部突っ込んじゃえばいいのに(笑
726 :
名無しさんに接続中… :01/12/15 00:22 ID:q1op3191
>>721 ひとまずはWindows用のPerl処理系でやってみて
できたらLinuxでもやってみたいです。
ありがとうです!
>>725 おお〜、ラリーも遂に押し切られたって訳か(^-^;
Perl4時代から要望あったんだよね>switch
しかし cpan重いなあ、、、
と思ったらモジュールなのか、 自分はそんなに使わないけど >switch文
729 :
名無しさん@お腹いっぱい。 :01/12/16 23:29 ID:RrZ9jdoL
パスワードの暗号化で分からないことがあるので質問します。 以下のスクリプトは暗号化処理のサブルーチンです。 $saltに入るのはランダムに選出された文字/数字二桁ということは分かりました。 しかしなぜint関数が必要なのかよく分かりません。 あと配列のブラケットには数字だけしか入れられないと解釈しているのですが、 $salt = $SALT[int(rand(@SALT))] . $SALT[int(rand(@SALT))]; この処理だとブラケット内にはローマ字も入ってしまうのではないかと・・・。 違いますかね? 宜しくお願いします。 sub encrypt { local($inpw) = $_[0]; local(@SALT, $salt, $encrypt); @SALT = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/'); srand; $salt = $SALT[int(rand(@SALT))] . $SALT[int(rand(@SALT))]; $encrypt = crypt($inpw, $salt) || crypt ($inpw, '$1$' . $salt); return $encrypt; }
もうちょっとまともな本を読もう。 ローマ字って何処にあるんだろ??
731 :
名無しさん@お腹いっぱい。 :01/12/17 00:02 ID:FsLSfXJ8
>>730 すみません。
本はないんです。
@SALT = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/');
の処理で@SALTには小文字/大文字、0から9までの数字、『.』、『/』が入ります
よね?で、rand(@SALT)にすると小文字/大文字まで入ってしまう可能性があり、
$salt = $SALT[int(rand(@SALT))] . $SALT[int(rand(@SALT))];
の処理で
$SALT[a]などでは具合が悪いんではないかと・・・。
で、int関数はそれを適当な数字に変えてくれるものなのかなぁと思ったのでした。
ちょっと混乱気味。
732 :
名無しさん@お腹いっぱい。 :01/12/17 00:03 ID:1/pypqLH
>>729 まず、
rand(@SALT)
ですけど
rand(64)
ってことです。
rand('a'..'z', 'A'..'Z', '0'..'9', '.', '/')
ではありませんよ。
この場合は要素の数、64を返します。
それで、rand(64)は0から64までの数をランダムに返します。
必ず整数を返すなら良いのですが、小数も含めて返しますので
int()関数で整数にしてやるんです。
>729 $salt_all = @SALT; $salt = $SALT[int(rand($salt_all))] . $SALT[int(rand($salt_all))]; と考えるとわかりやすいと思う。 >732 一応補足的ツッコミだけど、 >それで、rand(64)は0から64までの数をランダムに返します。 64は出ないんじゃなかったっけ? 言いたい事はわかるんだけど伝わりにくいかなと。 0 <= rand(64) < 64 ってことだよね? だから、 0 <= int(rand(64)) <= 63 って事で。
>>732 >>733 ありがとうございます。
一気に氷解しました!
>>733 >> $salt_all = @SALT;
>> $salt = $SALT[int(rand($salt_all))] . $SALT[int(rand($salt_all))];
この式、
>>732 と併せて読むとすごくよく分かります。
ありがとうございました。
735 :
名無しさん@お腹いっぱい。 :01/12/17 06:36 ID:BJnjirbB
OO童貞ですがPerlから始めようと思います。 PerlOOに特化した為になる書籍やサイトは有りますか?(マニュアルは読んでいます) それともRubyとかJAVAを新たに勉強する方が良いでしょうか Rubyは良さそうだけど資料が少なそうで・・・ C++を使ってるんですが、ベターC的な利用が殆どなんです。 それで、巨大なC++の前にperlで学習しようと言う目論みです ^^
737 :
735 :01/12/17 07:44 ID:BJnjirbB
有難う御座います
>>736 さん
参考になります。
なるほど、憂鬱な〜〜は一度立ち読みして「ふーん」と思ってたんですが。
手続き型が染み付いてしまって(実はオヤジなのです・・)
良くperlのOOは不完全?と言われていますが、自分には使い慣れた言語なので
入門には良いかなと思いまして。。
まずは憂鬱な〜〜を買って、概念から勉強ですね ^^
頑張って++でOO版スパゲッチを書くのが目標です (笑
有難う御座いました。
738 :
735 :01/12/17 08:44 ID:???
use objectって良いですね ^^ 全然知らなかったよ。
739 :
名無しさん@お腹いっぱい。 :01/12/17 14:53 ID:eOxPZi/I
%xxx = ('a','あ','i','い'); というのを aiueo.txtというファイルのなかに 'a','あ','i','い'と入力し %xxx = (ここをaoueo.txtから出す); という事は可能なのでしょうか?
eval
gzipのやり方を教えて下さい タグの何処にいれてやればいいの?
>739 そう言うのはあまり感心しない、 tie使えばDBにそのまま保存できるぞ >740 何言ってるのか和歌蘭、5.7の新しい関数か?
冬休みに勉強たあ見上げたもんだけど
>>2 〜に乗ってるリンクで関数位検索しろよ
745 :
名無しさん@お腹いっぱい。 :01/12/17 22:54 ID:HHw/58GZ
linuxのpasswdコマンドを実行するPerlプログラムを作りたいんだけど、 passwd って対話式でパスワードを二回入力しないとダメでしょ。 system "/usr/bin/passwd $username"; この後にどうやればパスワードを渡せるのでしょうか?
>>745 その手の処理は/usr/bin/expectの仕事かなぁ。
Perlでやるなら、
(/usr/bin/passwdコマンドのメッセージの細かい相違は自分で修正してくれ)
#!/usr/bin/perl
use strict;
use Expect;
use constant true => 1 == 1;
use constant false => !true;
use constant passwd => "/usr/bin/passwd";
use constant timeout => 10;
change_password("account", "old_password", "new_password");
sub change_password
{
my($account, $current, $new) = @_;
my $ret = true;
my $pty = new Expect(passwd, $account) or return false;
$pty->expect(timeout,
[ eof => sub { $ret = false } ],
[ timeout => sub { $ret = false } ],
[ qr/Only root can specify/i, sub { $ret = false }],
[ qr/changing/i, sub { exp_continue; } ],
[ qr/new/i, sub { shift->send("$new\r"); exp_continue; } ],
[ qr/retype/i, sub { shift->send("$new\r"); } ],
[ qr/current/i, sub { shift->send("$current\r"); exp_continue; } ],
);
$pty->soft_close();
return $ret;
}
747 :
名無しさん@お腹いっぱい。 :01/12/18 01:10 ID:rl0gNi9C
コマンドラインから標準入力を一行読み込んで処理、また一行読み込んで処理を 繰り返して、対話的に処理を進めるプログラムを作りたいのですが、皆さんなら どのようにコードを書きますか? 私はこんな感じにしたのですが、こうやれゴルァみたいなのをお願いします。 until (\n != <>) { print(); //何か処理する。 } until (\n != <>) { print(); //何か処理する。 }
そゆ時はループするのが吉かも。。 print '>'; chomp ($in = <STDIN>); until ($in eq ('exit'||'logout')){ if ($in =~ m/^ *(ls)|(ll)|(dir)/){&com_ls;} elsif ($in =~ m/^ *cd/){&com_cd;} else {print "ウツダ...(-_- )\n";} print '>'; chomp ($in = <STDIN>); } sub com_ls { print "Listコマンドにゃん\n"; } sub com_cd { print "Cwdコマンドだわん\n"; }
FAQっぽいんだけど、答え見つからなかったから質問。。 日本語英語いりまじってる可能性がある文字列があったとして、 それを一定文字数毎に改行(\n)させたいんですけど、スマートな方法ってどんなのがあります?
スマートの定義は?
EUC-JP 限定。 1... 一定バイト数ごと、つまり、 ASCII = 1文字 JIS X 0208 = 2文字 JIS X 0201 Katakana = 2文字 JIS X 0212 = 3文字 という扱いで、複数バイト文字にかからないように改行をつけたい場合。 s/(.{1,$len})(?=(?:[\x00-\x7f\x8e\x8f] | (?:(?:[\xa1-\xfe]{2})*([\x00-\x7f\x8e\x8f]|\z))))/$1\n/gx; 2... ASCII でも X0208 でも1文字として扱う場合は s{((?:[\x00-\x7f] | # ASCII \x8e[\xa0-\xdf] | # JIS X 0201 Katakana \x8f[\xa1-\xfe]{2} | # JIS X 0212 [\xa1-\xfe]{2}){$len}) # JIS X 0208 }{$1\n}gxo; スマートかどうかは分かりませんが。 $len にバイト数入れてください。 高速化するためには o modifier つけるか、直接数字入れること。 なお、perl 5.005 以降限定です。(多分) 5.004 ってそろそろ捨ててもいいよね? # Shift_JIS は知りません。:-p
752 :
749 :01/12/18 13:51 ID:???
出来ましたありがとうございました〜 スマートは、別にどうとって貰ってもよかったんですけど、 場合正規表現で一発で・・・ってのを期待していました。
753 :
ウンコー :01/12/18 13:52 ID:vbilp2l6
754 :
名無しさん@お腹いっぱい。 :01/12/18 14:08 ID:PeGpklQN
perlとはあまり関係ないのですが、 SMTPサーバーがメールを受信した時に、perlのスクリプトを起動できると聞きました。 方法を教えてください。 関連するページでもかまいません。
756 :
名無しさん@お腹いっぱい。 :01/12/18 16:15 ID:v8gJCqyU
>>756 gifcatの使い方はあってる、でも今時hoge'func(@files)なんてのはダサいから
やめとけhoge::func(@files)を推奨
後は@filesの中に画像のパスが入ってれば良いわけだ。
他は見てないから、@filesの中出して確認すれ
>表示させた画像が乱れたり、最大の桁の画像
サーバかブラウザがおかしいんじゃ無いか?
758 :
756 :01/12/18 16:51 ID:v8gJCqyU
>>757 >サーバかブラウザがおかしいんじゃ無いか?
インターネットオプションのアニメーションを再生する、を
切っていたから全部表示されなかったようです。
推奨されたように書き直してみます、ありがとうございました。
759 :
名無しさん@お腹いっぱい。 :01/12/19 01:48 ID:z3SgcvN9
モジュールの作り方を詳しく紹介しておられるサイトなどご存知無いですか? google では個々のインストール方法や、その和訳くらいしか見当たりませんでした。 (あと、本の紹介とかしか・・・・。)
760 :
名無しさん@お腹いっぱい。 :01/12/19 17:15 ID:nkOSD3l2
>>752 Jcodeで一発
@multiLine = jcode($target)->jfold();
761 :
名無しさん@お腹いっぱい。 :01/12/19 21:46 ID:ywNgsz3G
NTサーバの特定のディレクトリの特定のバイナリファイルを コピーして、LINUXサーバ上のCGI実行により同サーバ内にコピーするって事は 可能ですか? できればモジュールとか入れたくないんですけども。
762 :
名無しさん@お腹いっぱい。 :01/12/19 21:49 ID:mF3sDjp1
729です。 暗号化する方法が分かった後はそれを照合する作業。 というわけでまたやってきてしまいました。 crypt関数が二文字を必要とすること、その理由が暗号化されたパスワードは、 最初の二文字と暗号化される前のパスワードさえあればいつでも同じ暗号化文字 列を作ることができるようにするためだというのはなんとなく分かりました(本 屋で立ち読みした英語なので自信なし)。でも暗号化したパスワードを照合する 時の以下の処理が良く分かりません。 $salt = $logpw =~ /^\$1\$(.*)\$/ && $1 || substr($logpw, 0, 2); substr関数は$logpwの最初の二文字(?)を取り出し、$saltに代入する・・・。 でも『/^\$1\$(.*)\$/ && $1』この部分が何をしているのか良く分からないんで す。substr以後と同じことをしているということはなんとなく分かるのですが、 詳しく分かっていません。最初のキャレットは『最初の』という意味ですよね。 $1は後方参照の・・・?そうすると参照すべき対象がないのでは・・・。 『&&』のあとの$1も意味が分かりません。 ・・・すみません。 ホントの消防なので本を買えるほどお金、ありません。 長いですが宜しくお願いします。
764 :
747 :01/12/20 01:06 ID:ThNsIH0G
>>748-san
どもありがとう。
勉強になりました。
関係ないけど、
>>755 も勉強になった。ありがとう!
crypt した後のデータからわざわざ salt 部分を抜き出す必要はありません。
crypt されたデータをそのまま第2引数に渡せば良い。
たとえば、パスワードを照合するときは、以下のように書きます。
if(crypt($input_passwd, $crypted_passwd) eq $crypted_passwd) {
...;
}
わざわざ salt 部分を抜き出すのは移植性を低下させます。
百害あって一利無し。
# なんか、有名どころがわざわざ salt を抜き出す処理をしているから、
# それが流行しているみたい。
既にある程度 Perl 分かっているなら、「プログラミングPerl」買いましょう。
トータルのコストとしてみれば本1冊買っておく方が良いです。
(この本は少し高いけど、専門書はそういうものなのであきらめよう。)
# そろそろお正月だし。:-)
英語が分かるなら、
http://www.perldoc.com/ を見ても良いです。
>なんか、有名どころがわざわざ salt を抜き出す処理をしているから、 勿論KENTたんです。( ・ ∀ ・ )
最初は、 > crypt されたデータをそのまま第2引数に渡せば良い。 これがどうしても理解できなかったっけ…。 最初の2文字だけを使って後は無視するようになってるのね…。
768 :
名無しさん@お腹いっぱい。 :01/12/20 01:39 ID:EUQmf+X1
Perldocを読めば、プログラミング Perlは用無しですか?
>761 鯖缶使う。
770 :
:01/12/20 02:00 ID:G+RXTczj
あのーーー CGIでSSIをつかいたいんですけど どうすればいいですか? .shtmlに書き出したりしないで そのままの状態で繁栄させたいんです できないのかな?
えとねえとね。。。 無理!
>>770 CGI実行→HTML吐き出し→SSIってことか?
>>768 無くても問題はない。
ただ、最初に一通り読むときは本の方が読みやすいと思う。
>>765 >わざわざ salt 部分を抜き出すのは移植性を低下させます。
それとまったく逆の主張したページを見たよ
本には「抜き出すのはムダ」とあるがそれじゃ移植性を低下するって
>>774 それは太古のperl(つーかcrypt関数)の話だな
>>775 v7(まだperlができる前のはず)のcrypt()ですら、saltにpw_passwdつっこんでも
大丈夫なんだが。
よっぽど変なOS使わない限り大丈夫なはずだし、最近のOSだと切ると
かえって一致しなくなったりする。
777 :
:01/12/20 09:48 ID:78lYN6vv
778 :
名無しさん@お腹いっぱい。 :01/12/20 10:54 ID:P+3lQOD1
今までライコスのwebメール使用していたのですが そろそろサービスが中止になるので思いついたのですが、 プロバイダがCGIを許可していたら、プロバイダのメールを web上で読み書きしたり出来るCGIってあるんでしょうか? あったとしても、サーバー側で何か許可が必要でしょうか?
>>778 最低限必要なモノ
1. プロバイダが自分トコのアクセスポイント以外からのPOPの利用を許可している。
2. CGIを設置するサーバで Socket が利用できる。
3. こんなこと聞かんでも解るくらいのスキル。
1.可能です。LANからもOKです。 2.use Socket; 自体は動作しますが、Socketで 通信を許しているのは localhostへのsmtp/tcpのみとなります。 と書いてありました。これはひょっとしてローカルの送受信 のみって事ですか? 3.先に何をしたいとか思いついてから調べるというのは いけないという事ですか?
>いけないという事ですか? いけなく無いしそんな法律も条令も有りませんよ。 ただ >localhostへのsmtp/tcpのみとなります。 こう言うの調べるのにスキルとか技術とか必要無いんですよね。 ただ若干の検索をするだけ、少し自分の時間を潰すだけで済みます
782 :
トランスB :01/12/20 14:55 ID:pb4PV4KL
臭いから消えてね v(^ー^)v
784 :
780 :01/12/20 15:15 ID:???
>781 >localhostへのsmtp/tcpのみとなります。 でもこれは779で「Socketが利用出来るかどうか」って 指示があったからようやく調べる検討がついたからです。 この書き込みがなければ気がつかなかったところです。 ある程度わかっていれば調べる方向も検討がつきますが、 自分はわからない。だからプログラムとかどこにあるとか 作成の方法をいきなり聞くんじゃなくて 使用しているサーバーで制限とかないかまずは聞いたわけです。 そういうのが聞けるから初心者のスレッドだと思ったんですが 違うんでしょうか?
In article
>>784 , デフォルトの名無しさん/784 wrote:
>でもこれは779で「Socketが利用出来るかどうか」って
>指示があったからようやく調べる検討がついたからです。
そこから更に
>これはひょっとしてローカルの送受信 のみって事ですか?
と言う質問につながる訳ですね、
次は「で、それはどうやって書けば言いのでしょうか?」あたりかなあ
>使用しているサーバーで制限とかないかまずは聞いたわけです。
あなたの財布に幾ら入っているか私には分かりません、
あなたが使ってるサーバの事は私には分かりません。
>そういうのが聞けるから初心者のスレッドだと思ったんですが
>違うんでしょうか?
そう思いたいのですね :)
それは利用者全員が決める事であなた個人が決める事では無いですね
786 :
sage :01/12/20 15:42 ID:sKSPgKeT
>>784 論理的に反論しているつもりみたいだけど、意味不明。
先ず、あんたのやろうとしていること自体が初心じゃねーって事気付けよ。
少なくても、779のレスで気付くべき。
787 :
780 :01/12/20 16:08 ID:???
私はひょっとしてとんでもないことを聞いていたのでしょうか? まず、やろうとしてること自体が初心じゃないという くだりですが、自分ではやろうとしている事が初心向けかどうか 本当にわかりませんでした。779を読んだ時点でも初心向けじゃないから やめたほうがいいというサインに気が付きませんでした。 これは申し訳ありません。はっきり言われて無謀だという事が ようやくわかりましたので諦めます。 >785 >>使用しているサーバーで制限とかないかまずは聞いたわけです。 >あなたの財布に幾ら入っているか私には分かりません、 >あなたが使ってるサーバの事は私には分かりません。 これですが、778で書きましたが、「私の」サーバの制限を ここで聞いたのではないです。(784だけ読むとそれっぽいんですが)
788 :
名無しさん@お腹いっぱい。 :01/12/20 16:10 ID:e9pvO+JY
>>763 ありがとうございます。
『/^\$1\$(.*)\$/』の部分はやっぱり正規表現なんですね。
苦手意識があるかも・・・。
もっと勉強します。
>>765 あ!
『crypt関数が二文字を必要とする』と自分で書いていて・・・。
765さんの方法があったんだ・・・。
まったく気付かなかったです。応用力ゼロ<私
紹介してもらったURL、活用します。
私が前回質問した、int関数、rand関数のことも載っているし。
うち、お年玉という習慣がないんです(私自身少し前までドイツにいたのでいま
いち分かっていません)。
だから紹介してもらってすごくありがたいです。
そうです。KENTさんのところのプログラムを参考にしています。
実は
>>51 が私で、その下の方に教えてもらったのがきっかけでした。
でもこうして質問してみると765さんの方が分かりやすいですね。
ありがとうございます。
789 :
779 :01/12/20 16:38 ID:???
とんだ電波少年だったようだ・・・。
KENTも良いけど、他のにしろー ^-^;
ドイツに居たって、英語も読めるんでしょ? だったらperldocとか
texinfoとか読みまくれー。
>>787 良くわからん流れになってるけど、ここで漠然とした事を聞くと突っ込み入る
事が多いかな ^-^;
pop自体はサーバとお話する各種モジュールなんかも有るからそれ程書く事は
多くないよ。ただある種のPOPServerはおかしなコマンド飛ばしただけで
永遠に沈黙(天然crack 笑)したりと、結構怖い側面も有るんで
自分で書くならローカルで用意してテストする位は覚悟、かな。
POPって配布スクリプトがそれ程多くないのは、やっぱりHOST制限が 有るからかな。。。 kent氏とか配ってても良さそうだよね LWP::とかより正しい?サーバーの使い方と思うんだけどなあ。 LinuxMagazineの連載見ながらモジュール漁ったのがなつかしひ。。
792 :
415 :01/12/20 23:53 ID:wN6aMomP
幾つか質問して良いですか? "\n" を chop した変数や "" を正規表現や文字列比較の際に上手くハンドルする 方法を教えてください。 1)改行だけの変数を chop したらどうなるのでしょうか? $kaigyou = "\n"; chop $kaigyou; if ("" == $kaigyou){ # $kaigyou の中身はどうなっているのでしょう? } 2)1 を数字列を表わした正規表現に入れるとおかしな反応をします。 $kaigyou = "\n"; chop $kaigyou; $length = length($suuji); if ($suuji =~/\d{$length}/){ # false にならない。 } 3)2 の逆(数字列以外)はどうすれば良いのでしょう? $nSuuji = ""; $length = length($nSuuji); if ($nSuuji =~ /\D{$len}/){ # true にならない。 } 今作成している perl スクリプトで困っているのですが、どなたか助けてください。
>792 とりあえず、もう一度見直せ。 間違いだらけ。
794 :
名無しさん@お腹いっぱい。 :01/12/21 00:46 ID:3wtz2sHT
>>792 1) == と eq の違いを調べてください。このようなミスを防ぐには -w を付けます。
2) length($suuji) は 0 です。{n} は直前の正規表現の n 回分の繰り返しを表わします。\d{2} なら "25" とか "22" がマッチします。
3) 変数のスペルミスです。これも -w で防げます。
「プログラミングPerl 改訂版」
「Programming Perl 3rd Edition」
perldoc
を一通り読んでおくと吉。
JAPUは優しいなぁ・・・
797 :
794 :01/12/21 01:11 ID:???
スマソ。
一応書き直してみましたが、汚い似非コードは忘れてください。
知りたかったのは "\n" を chop したら何になるのか、
数字だけの文字列を正規表現で表わすのはどうやるのかというです。
~= /\d/ は数字の一つにマッチするだけですよね。
"abc000" とかでもマッチしてしまいます。
>>793 さん、795さん
ご指摘どうもありがとうございます。
1)改行だけの変数を chop したらどうなるのでしょうか?
$linefeed = "\n";
chop $linefeed;
if ("" eq $linefeed){
# $linefeed の中身はどうなっているのでしょう?
}
2)1 を数字列を表わした正規表現に入れるとおかしな反応をします。
$linefeed = "\n";
chop $linefeed;
$length = length($linefeed);
if ($linefeed =~/\d{$length}/){
# false にならない。
}
3)2 の逆(数字列以外)はどうすれば良いのでしょう?
$null = "";
$length = length($null);
if ($null =~ /\D{$length}/){
# true にならない。
}
本持って無いのか? 取り合えずここ逝ってこい(他にいい所なかったか・・・)
http://www.kt.rim.or.jp/~kbk/regex/regex.html >~= /\d/ は数字の一つにマッチするだけですよね。
これは =~ m/\d/ な、つまり文字列中に一つでも数字が有れば真
=~ m/^\d+$/ だろ?
>chop〜〜〜
空文字列、つまり何にもマッチしなくなる、つーかchomp使え
他にもつっこみどころは有るが、取り合えず↑のURI行ってこいって。
799 :
794 :01/12/21 01:52 ID:???
>>798 イライラさせてしまって申し訳ない。
URL 見て来ました。
空文字列とは $ = ""; とするのと同じですか?
chomp してもあまり変わりがないような気がするのですが。
\d+$ というのはどういう意味なのでしょうか?
下のコードでは上手く行きませんでした(英字が入っているのにマッチしてしまう)。
$foo = abc012;
if ($foo =~m/\d+$/){
print "so bad!";
}
else {
print "oh! yeah!";
}
>>799 「改行」と明示したからだと思うよ → chomp
ちゃんと
>>798 を読んでから質問した方が良いと思うなあ…。
眠いからこれが最後な -w ←ワラスイッチ >空文字列とは $ = ""; とするのと同じですか? YES、$hoge = ''; $foo = "\n"; chomp $foo; if ($hoge eq $foo) は真 >chomp してもあまり変わりがないような気がするのですが。 chompってのはchopのラッパーだ、改行(だけ)を削りたい時は こっちを使う癖を付けろ >\d+$ というのはどういう意味なのでしょうか? $は文字列のバッファの最後 ^ は文字列の先頭にマッチする if ($foo =~m/^\d+$/){ に変えれ つーか全部聞いちゃつまらんだろ -wcT
803 :
794 :01/12/21 02:37 ID:???
-w 付けたらエラー出まくりで鬱になりました。 標準入力を受け取って、それが数字のみで構成されているか判定したかったのですが、 上手く行きませんでした。 もう少し回り道をして、基本から勉強しなおした方が良さそうです。 皆さん、どうもありがとう。
804 :
794 :01/12/21 02:52 ID:???
ヲヲ! 出来たよ! グレートなあんたに乾杯! こんな夜中に付き合ってくれた皆さんありがとう! #! /usr/bin/perl -w $foo = <>; chomp $foo; if ($foo =~m/^\d+$/){ print "oh yeah!"; } else { print "so bad!"; } + と $ は別々なのね。+$ というパターンがあるのかと思ってしまいました。 一から勉強し直します。
>804 どうしてそれでエラーが出ないのか聞きたいよ・・・。 俺もJAPUさんみたいに優しい人になりたいな。
一応補足しておこう。
>>795 で言ってる
> {n} は直前の正規表現の n 回分の繰り返し
「正規表現」には「x」のような単なる文字も含みます。(言い換えれば、単な
る文字もそれ自体で正規表現。) たとえば、/x{3}/ は "xxx" を受理します。
807 :
名無しさん@お腹いっぱい。 :01/12/21 10:23 ID:cRnuhycD
808 :
:01/12/21 10:40 ID:???
809 :
名無しさん@お腹いっぱい。 :01/12/21 17:32 ID:woby9OMk
暗号化&復号化する良い方法はありませんか?
810 :
名無しさん@お腹いっぱい。 :01/12/21 18:31 ID:f6xZfwM2
blowfish etc...
811 :
名無しさん@お腹いっぱい。 :01/12/21 19:35 ID:woby9OMk
Crypt::Blowfish使ってみたけど、 8文字以外は暗号化&復号化できないんですか?
813 :
名無しさん@お腹いっぱい。 :01/12/21 22:00 ID:woby9OMk
>>812 ありがとうございます。
use Crypt::CBC;
my $cipher = new Crypt::CBC("nantara",'Blowfish');
my $ciphertext = $cipher->encrypt_hex('秘密');
print q|暗号化:|,$ciphertext ,qq|\n|;
print q|復号化:|,$cipher->decrypt_hex($ciphertext);
この使い方であっていますか?
>>813 良いんでない?
pack外すのは用途に寄りけりご自由に。
というか、2.01までVERSIONあがってたのね…
815 :
名無しさん@お腹いっぱい。 :01/12/21 23:21 ID:woby9OMk
>pack外すのは用途に寄りけりご自由に。 どういう意味ですか?
816 :
794 :01/12/22 01:31 ID:???
>>805 どこがまずいのでしょうか?
済みませんが教えてください。お願いします。
^ は先頭にマッチ、$ は末尾にマッチしますよね。
+ は一回以上の繰り返し。
ならば、
=~ m/^\d$/
は 0a123b0 にマッチしても良いように思っていました。
817 :
794 :01/12/22 01:39 ID:???
>>816 間違い。
=~ m/^\d$/
じゃなく、
=~ m/^\d+$/
"a" とか "b" を数字と見なす文化圏があるの? 0a123b0 にマッチさせたかったら、普通は /^[ab\d]+$/ とでもしてください。 # 専用のロカールを用意すれば、\d にマッチするのかも。(?)
819 :
:01/12/22 02:48 ID:???
>>816 語頭・語尾が数字なら
/^\d(.*\d)?$/
820 :
794 :01/12/22 03:07 ID:???
>>819 あ、成る程。
=~m/^\d+$/ は /^\d/ と /\d+/ と /\d$/ の組み合わせで、
最初が数字、それに続く文字列も数字、引き続いて末尾も数字ということですか。
/\d+/ は文字列の途中に一回以上数字の繰り返しがある事で、a123b もマッチする
というのが引っかかっていました。
スレ違い済みません。
Socket.pm に付いてです。 コードを見ると冒頭に load the C socket.h defines and structure manipulators と書かれていて、Cのsocket.hをマニュピレートしているらしいのですが コードは殆どが定数の定義で、関数定義はsockaddr_inとsockaddr_unの 2つだけなんです。 それで、sockaddr_inを追ってみるとpack_sockaddr_inと言うのを呼んでいる のですがその実体が何処にあるのかが分かりません。 それらしきモジュールもインポートして無いしで行き詰まってしまいました。 この辺りにPERLからCのライブラリを呼んだりするコツが有ると思ってるんですが・・・ Socket.pmの謎が書かれたサイトなんかは無いでしょうか
>>815 encrypt vs encrypt_hex
decrypt vs decrypt_hex
の違い、ってこってす。
825 :
名無しさん@お腹いっぱい。 :01/12/22 12:02 ID:COKK+YU4
PERLのスクリプトを掲示板に押し込みたいのです。 初心者なので、パーミッションの仕方などを丁寧に教えていただきたくて・・ とっぴな事を言っているのは解っています。 どうしてもひつようなんです。 教えていただけるでしょうか? スクリプトをはりますが・
826 :
825 :01/12/22 12:05 ID:COKK+YU4
宜しくお願いします・・。 どうしても設置したいのです・・。 FTPを使ったIP抜きなのですが・・・。 スクリプトはあるので 詳しい設置の仕方を1から教えていただけますと幸いです・・。 恐縮な質問ではありますが、お願いします。
828 :
825 :01/12/22 12:17 ID:COKK+YU4
レスありがとうございます。 助けて下さい・・お願いします。 Perlの本を3冊買ったのですが パールの使い方がよくわからなくて・・。 JPERLもインストールしました。 なんとかよろしくお願いします・・。
じゃあその本を読めよ、設置位その辺のWEB見てやれや その場をわきまえない態度がBBSを荒らされる一因だと気付け
冬休みか、、 嵐なんか放っておけば?>828
831 :
825 :01/12/22 12:24 ID:COKK+YU4
>829様 そのとおりなのですが・・ ひどい荒らしで一年以上もあらされているのです・・。 同じ奴にです・・。 難しくてよく設置できないのです・・。 できるかぎり努力いたしますのでお力をお貸ししていただけないでしょうか・・。お願いします
>>831 >いらっしゃーい、perlのコーディングで困ってる人のスレです。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
設置相談はスレ違いです。
833 :
825 :01/12/22 12:37 ID:COKK+YU4
>832さま ありがとうございます! 今自分でちょっと色々やっているので(本当に初心者なのですが・・) もう少し経ったら整理して質問させていただきます! どうもありがとうございます。 感謝です!
834 :
825 :01/12/22 13:11 ID:oibAhbUr
どうもです。 1、自分は 一年間あらされて困っているので FTPでIPを抜きたい。既にスクリプトは持っている・・。 2、3やってみようとしたのですが、掲示板のソースに どうやってサブルーチンとして(?)付け足すのかなどが解らないのです・・。 従って、アップロードというかしてみても全く反映されません・・。 パーミッションを666にする などの事は解るのですが、 具体的にどうやったらよいのか解らなくて・・。 一生懸命頑張りますので どなたか少しでも教えてくださいますと幸いです・・・。 宜しくお願いします。
835 :
:01/12/22 13:22 ID:???
あのなあ、ここはスレ違いって書いてるだろ。 そう言うの慇懃無礼っつんだぞ。 それに、、 ::少なくとも1年以上PCを触っていて ::Perlの本を3冊持っていて ::自分でも一生懸命頑張っている のに、設置も出来ないってのはどう言うこった(呆 本当に困ってるなら警察に相談してその旨掲示しておけよ これは俺だけかも知れないけど、IP抜きだの生IPだのって 厨房臭くて鼻が曲がりそうになるよ。 解法を間違えてると思わないか?
全くだね と言うかこれって前にもどこかで見たんだけど、誰かばら撒いてるの?IP抜き FTPって事はFakeのサーバみたいなのでacceptしてフレームとかで キックさせるのかな。。 くだらないけどちょっと興味有る(笑
837 :
825 :01/12/22 13:34 ID:rCfJnn6T
>835さま パールの本は買ったのですが難しくて内容が・・・。 警察にはとりあってもらえませんでした。 IP抜きは、プロクシを何回も新しいのを身に付けてくるのでどうしようもないのです・・・。 宜しくお願いします・・。 >836様 スクリプトを知り合いに頂きました・・。
838 :
825 :01/12/22 13:41 ID:OuqMrQhg
・・・。 では、 既にレンタルの掲示板がある場合、 それに機能をつけたすには、 そのレンタル掲示板のソース(PERL)に、 サブルーチンとして文字を付け加えれば そのような効果を持つようになるのでしょうか? お答え願えますと幸いです・・よろしくおねがいします。
839 :
名無しさん@お腹いっぱい。 :01/12/22 13:52 ID:IddObTYJ
Perl で 64bit 整数をファイルに出力するにはどうしたらいいんでしょうか? $x = 4294967296; # 0x100000000 のような値を、(ビッグエンディアンなら) 00 00 00 00 01 00 00 00 のようなバイナリファイルにしたいのですが。 pack 'Q', $x; は "Invalid type in pack : 'Q' と言われてしまいます。。。 何かいい方法があったら教えてください。
>>825 本読んでもわからない知識ならほかの買うかあきらめて掲示板削除しろ。
どうせ1年以上荒らされているなら来ているやつもいないだろうし
それともネタ?
どれにしてもすれ違いです。
841 :
825 :01/12/22 13:58 ID:oibAhbUr
>840さま いや、今でも一日300人ぐらい来てくださっているので・・・。 では、サブルーチンについて教えて頂け無いでしょうか・・。 掲示板のソースに ( ) で囲んでサブルーチン (つまり導入したいCGIのソース)を押し込むだけで 機能は追加されるのでしょうか・・? 宜しくお願いします。
本で調べてください。
843 :
名無しさん@お腹いっぱい。 :01/12/22 14:02 ID:oibAhbUr
本を見るとそのようなかんじで書いてあるのですが・・、 実際の意味がよく解りません・・・助けて下さい お願いします。
>841 貼り付けただけだと(多分)動かないよ ^―^;
846 :
名無しさん@お腹いっぱい。 :01/12/22 14:12 ID:oibAhbUr
>845さま・・・ありがとうございます。感謝です・・(泣 例えば、 レンタル掲示板のソースが、 最後 exet; で終わったします・・。そして、そのあとあるいは途中に、 ( ) で囲んで、 その中に拾ったスクリプトを入れればいい・・じゃダメなのでしょうか? よろしくおねがいします・・本当に困っているのです・・。 又、 ( ) とするべきなのか、{ }とするべきなのかも解らないのですが・・うう・・・。 お願いします。 助けて下さい・・おねがいします・・・。
>>836 UG地方の特産品です。他にもNNTP、echo、telnet等など有り
これにログインマクロとか、ばればれフルコネクションの激遅スキャナとか
合わせたのが有るんだよ。 多分日本人だと思うが
In article
>>846 , 名無しさん@お腹いっぱい。//846 wrote:
>exet;
エラーですね。
>その中に拾ったスクリプトを入れればいい・・じゃダメなのでしょうか?
動けばそれで良いのでしょう、プログラムは書いた通りにしか動きませんよ。
>( ) とするべきなのか、{ }とするべきなのかも・・
どちらでも動かないと思うので結果は同じでしょうね。
>お願いします。
多分サポート出来る限界を大きく超えているので無理ですね
>>825
>>832 も書いているが、ここは825の一連の書き込みにあるIPの抜き方やCGI
スクリプトの動かし方を尋ねるスレじゃない。825は自分じゃ気付いてない
ようだが、スレの趣旨に反する君の執拗な書き込みそれ自体も、十分荒らしと
呼べる行為だよ。
掲示板の荒らしが限度を超えるなら、その旨を相手にきちんと伝えた上で、な
お止まないようなら警察に行くべき。それなりの理由で警察が動けばISPもロ
グを出すだろうし、825がIPを抜く必要も無い!
一方で、あれこれ訊いて仮に825が荒らしのIP抜けたとして、どうするわけ?
# まさかattackの方法をまた訊きに来るわけじゃないよな?(藁
825が不正アクセスや、迷惑メールなんかで反撃すれば法律に引っかかるだ
ろうし、IP判定で接続拒否してもIPが固定じゃなかったり、proxy使ったりで、
そういう輩なら手を変えて結局同じことを繰り返すと思うよ。そんなことして
も一向に状況は改善されないor825がいいように翻弄させられる(泣き寝入
りする)だけで、逆に相手に825の反撃を逆手にとって合法的に追求できる
可能性も与えてしまう。つまり自分の立場も悪くなるってこと。
いずれにせよこの話題を続けるのはスレ違いだとと思うので、法律板で相談す
るなり、技術的な話に絞った上で適切なスレを選ぶなりして下さい。少なくと
もこのスレの趣旨には沿わない内容です。
長文sage。
先生まで登場かよ (´д`;)
>>846 今の状態じゃ説明しきれないよ、ここに書いたとしてもそれを理解出来ないだろ?
だから今持ってる本を先に良く読んでからまたおいで。
851 :
名無しさん@お腹いっぱい。 :01/12/22 14:46 ID:fxlPljic
>849さま ええと、法的にはどうにもなりません。 掲示板嵐は犯罪でもなんでもないので、(名誉毀損などなければ。) それはムリな話です・・。 プロバイダに文句を言われればやめるので、あるいはアカ取り消しですし・・。 以後も、同様のユーザーをすぐにログを洗ってもらえるようになりますし・・。 アタックなんてできません・・。 今色々やっています・・またあとできます・・。同か宜しくお願いします皆様。
852 :
839 :01/12/22 14:49 ID:IddObTYJ
>>844 どうもです。いろいろ試して、
$l1 = int($x/0xffffffff);
$l2 = $x % 0xffffffff;
print pack 'LL', $l2, $l1;
これで、求めるものが出ているような気もしますが
あんまり自信もなし。。。
Q は、 perldoc -f pack すると
q A signed quad (64-bit) value.
Q An unsigned quad value.
(Quads are available only if your system supports 64-bit integer values _and_ if Perl has been compiled to support those. Causes a fatal error otherwise.)
とあって、これしかねぇ〜と喜んだのですが。。。
Win32ではサポート外だったようで。ハァ
今年もあとわずかなんだなあと思います。
854 :
名無しさん@お腹いっぱい。 :01/12/22 14:57 ID:oibAhbUr
増殖してるし(w
大量にレスついてるから何かと思ったよ。
>>852 $x に 64bit int 入れてちゃんと動いてる?
実は double になってるかもよ。
859 :
名無しさん@お腹いっぱい。 :01/12/22 23:34 ID:t/VCgPdO
関数名つける時とか規則的に名前つける? 英語名にするとか 名前の前に_をいれるとか。どう? ちなみに先頭に_をいれとけば予約語とかぶる事って無いですよね?
860 :
名無しさん@お腹いっぱい。 :01/12/23 00:58 ID:MEqShOBi
サブルーチン内のreturn関数について訊きたいです。 あるサブルーチンで出た結果を$resultに代入したとします。 これは必ず return $result; としなければならないのでしょうか。 returnの使い方がいまいち分かりません。 どういう時に使うもの/使わなければならないものものなのでしょうか。 perldocをみてもよく分かりませんでした・・・。 宜しくお願いします。
861 :
age :01/12/23 01:01 ID:kSQE2xUF
ageruhituyouganaikedo
862 :
名なひ :01/12/23 02:13 ID:M1oj4o+A
>>860 Perlのサブルーティンは戻り値返さなくてもよかったと、思う。
return();省略したら最後に評価した式が勝手に戻り血にできる、ようなきがした。
>>859 規約だけ守れば好きなようにやればいい
コーダのレベルは大体この辺で分かるけどな(笑
識別子に英語を使ったつもりでアホなスペルミスをおかすよりは、 ローマ字にしておくほうがまだ救いがある。
865 :
859 :01/12/23 04:34 ID:???
>>863 やっぱ熟練さん達はそうなんですか・・・。
経験値積むしか無いようですね。
>>864 自分の場合怪しいのは辞書チェックですw
866 :
名無しさん@お腹いっぱい。 :01/12/23 15:31 ID:cDgNamdE
foreach (<IN>) { print $_; } と、 print <IN>; ってメモリ消費量違ったりするんでしょうか?
>>866 Perlでメモリーを気にするのはナンセンス
869 :
868 :01/12/23 15:45 ID:???
うわ!本当だ。あれの237ページに組み込み関数として載っていた(汗
>>870 いや、関数らしいぞ。プログラミングPerl改訂版(JP)の237ページに載っている。
useもrequireもlastもnextも関数かよ。なんだこの言語は・・・・
>>871 なぜかperldoc perlfuncにも載ってるね。さすがPerlだ(w
>>872 gotoも関数だね。q//関数に至っては、もはやPerlにおける「関数」ってのは
他の言語とは意味が違うとしか思えないよ。
>>874 ifやforも関数にすればよかったのにね。 (w
>>867 過度にメモリを気にするのはナンセンスだけど、ある程度は考えようぜ。(苦笑)
(
>>866 の場合は while 使うのが吉。)
return関数とかgoto関数とか言うと 突っ込み隊が一杯釣れそうだな (・∀・)
LWPで代理サーバを使う事は出来ますか? まだドキュメント読んでる最中なんで、可否が解れば幸いです ^^
>>878 "proxy" を検索すれば0.3秒で分かります。
チャットや掲示板を軽くする方法ってないでしょうか?
>>880 有るか無いか聞いてどうすんの?
>いらっしゃーい、perlのコーディングで困ってる人のスレです。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
882 :
名無しさん@お腹いっぱい。 :01/12/24 06:24 ID:uH077O8Q
forkで生成するプロセス数を制限するのに 常套手段って有りますか 例えば上限を5とすると、5を超えるとsleep秒待ってリトライ と言う感じで実装したいのです
_gunzipさんどうもッス、xsって何だそりゃと思って読んでなかったっす Socket.xs、ちょっと開けて読んでみましたけど、難解ですねー と言うかこれってスパゲッティー? 頑張りますー 、ありがとうっす。
884 :
名無しさん@お腹いっぱい。 :01/12/24 15:39 ID:CE1hGHz4
SSIでクッキーを食べさせる方法っていうのがあると聞いたのですが、 具体的な方法をご存知の方がいらっしゃいましたらご教授お願い致します。
885 :
名無しさん@お腹いっぱい。 :01/12/24 16:03 ID:n/gVuaks
>>884 何でSSIなん? つーかJavaスクはWEB製作だろっつの >ム板さん
Googleで「Javascript」「Set-Cookie」で検索してヒットしたものを
SSIでexeccmdすれば良いの、ソースは検索すれば100万件位出てきます
887 :
田イ戈 :01/12/24 17:44 ID:???
>>885 の方法か、あるいは
<meta http-equiv="Set-Cookie" content="cookiename=cookievalue">
か。Perlとは関係ないのでスレ違い。
JavScript を execcmd って何だろう?
SSIでって言ってるのに <meta http-equiv="Set-Cookie" content="cookiename=cookievalue"> って何だろう?
厨房が厨房に答える、これ最強
890 :
886 :01/12/24 18:31 ID:???
891 :
884 :01/12/24 21:50 ID:zH2D792B
書き方が下手ですみません。 execcmdでパールで作ったCGIを呼び出すのですが、 それをクッキーに食べさせる方法を聞きたかったのであります。 JAVAスクリプト使うか <meta http-equiv="Set-Cookie" content="cookiename=cookievalue"> を使えばいいのですね。 JAVAスクリプトはまだやったことがないので 後者を使ってみます。 どうもみなさんありがとうございましたm(__)m
892 :
名無しさん@お腹いっぱい。 :01/12/25 00:55 ID:SHv7CWw6
while(<FILE>){~~~; てやるのと@data = <FILE> とかに代入して処理するのだと@dataの方が メモリ使わなかったりするのですか?
893 :
892 :01/12/25 00:59 ID:SHv7CWw6
間違えました。 @dataの方がメモリ使ったりするのですか?
>893 します。
>>893 少し上のレスくらい読んでみたらどーよ。
896 :
892 :01/12/25 01:19 ID:SHv7CWw6
>894-895 どうもありがとうございます。 読んでたんですけど、低次元なレベルなもので 代入だと別なのかも・・・と思いまして。
897 :
892 :01/12/25 03:25 ID:qZ0BU43G
あ、あと WHILEで処理してる間に(これは読み取りのみで開いた) 別の処理が書きこみしても大丈夫でしょうか? 例えば #処理1 open (FILE,./file.dat) while(<FILE>){〜〜〜;} close FILE; #処理2 open (FILE,">./file.dat") print FILE $hogedata; close (FILE); みたいな感じでAさんが処理1をやってる場合に Bさんが処理2をやるというのは問題無いですか?
898 :
892 :01/12/25 03:27 ID:qZ0BU43G
あっ、訂正 close (FILE);です。
問題無いですよ好きなようにやって下さい
900 :
遅いか :01/12/25 07:28 ID:???
>>892 ファイルハンドルはリストコンテキストだと全てを(メモリに)読み込み
スカラーコンテキストだと一行読み込みます。
foreach(){}の()とか配列、リストを左辺に置く代入文は右辺は
リストコンテキストで評価されます。
面倒なときはscalar(オブジェクト)で強制的にオブジェクトをスカラーで評価できます。
while(<IN>){}は$_=<IN>の省略なのでスカラー評価でメモリは抑え目です。
>>897 問題ある。
同時に1つのファイルを読み書きすると
おかしなデータを読み込むかもしれない。
処理1側で @data = <FILE>; とやっていてもダメ。
flock関数について調べると吉。同時に読み書きできないようにできる。
蛇足だけどPerl5くらいから,組み込まれたり事前に宣言されている関数は
open FILE, '> ./file.dat';
close FILE;
みたいに ()無しでも使える。
()なしで書くのってなんかイヤ
903 :
名無しさん@お腹いっぱい。 :01/12/25 16:46 ID:mgSxI3Lq
配列の中に1,2,3という数字があったとする。 それを順に並び替えて(123、132、213、231・・・・・のように) 全パターン出力する書き方を教えてください。 よろしくお願いします
@ary=sort(@ary); # 分からない時は関数を検索しよう
905 :
903 :01/12/25 17:27 ID:???
sortで全パターンが出力されるのですか? @a="A","B","C"; を 画面上で ABC ACB BAC BCA CAB CBA の表示させたいのです。 よろしくお願いします。
>>905 それってPerlの話?それともアルゴリズムの話?
Perlの話なら、とりあえず疑似コードかCでアルゴリズム書いてみ。
Googleに行ってprintを検索しろ もし分かったら二度と戻ってくるな もし分からなかったらお前は正真正銘完全完璧にプログラムには 向いてないからやっぱりもどってくるな、諦めろ
ここまで来るとおちょくられてるとしか思えんな(笑
#!/usr/local/bin/perl &permutation( [], 1 .. 999999 ); sub permutation{ my $stack = shift; unless( @_ ){ print "@$stack\n"; return; } for( my $i=0; $i<@_; $i++ ){ push @$stack, $_[$i]; &permutation( $stack, @_[0..$i-1], @_[$i+1..$#_] ); pop @$stack; } } 何で皆怒ってるの?
907は何か勘違いしているとか。
911 :
903 :01/12/25 17:46 ID:???
全通り並び替えとprintとどこが関係あるの? はてはて?
>>907 お前みたいに相手の言っていることも性格に読み取れないようなヤツは
正真正銘完全完璧にプログラムには向いてないからやっぱりもどってくるな、諦めろ(p
悲惨な人たちですな
914 :
名無しさん@お腹いっぱい。 :01/12/25 20:23 ID:Ca6wsnSB
Win32で動くPerl v5.6.1を自分のパソコン(Win98)で使ってるんですけども、 NET::FTPモジュールが入ってるかどうか確認するにはどうしたらいいでしょう?
ftp鯖のアドレスとユーザーIDを入力してスタートボタンを 押すとパスクラックしてくれるCGIの作り方教えて
916 :
892 :01/12/25 20:45 ID:Is9/IN8s
>>901-902 レスありがとうございます。
度々申し分けないのですが、
#処理1
open (FILE,./file.dat)
while(<FILE>){〜〜〜;}
close FILE;
〜〜〜〜〜〜〜〜; #この処理は重要では無いので
〜〜〜〜〜〜〜〜; #処理1で空データを読み取ってしまっても構わない
#処理2
open (FILE,./file.dat)
while(<FILE>){〜〜〜;}
close FILE;
#処理3
open (FILE,">./file.dat")
print FILE $hogedata;
close (FILE);
上のような一連の流れの場合、処理1ではそのまま読み取って(ロック無しで)
処理2で再度読み取り、この読み取ったデータを元に処理3で
ファイルに書きこむ場合は処理2の前でロックすれば良いのでしょうか?
あと私の覚えてる範囲だとロック処理を行う理由は
別のユーザーが実行したプロセスが
ユーザー1のプロセスがファイルに書きこんでる最中に
ユーザー2が読み取ると空のデータを読み取ってしまい
このデータを元にファイルに書きこむと空データになってしまう。
それを防ぐためにロック処理をしてる。
と覚えてるのですが、他にも理由というのはあるのですか?
917 :
:01/12/25 21:37 ID:???
書き込みに影響ある範囲で、だからいいんじゃないの? スクリプトの内容がよく分からんけど
何だか意味が分からないけど、lock(少なくともflockシステムコール)は ただの紳士協定です。 有るプロセスが排他ロック(LOCK_EX)すると他のプロセスは排他ロック(LOCK_EX) が出来なくなるだけで、共有ロックは勿論、読み込みも書き込みも自由に出来るということです 今書いてるのはCGIみたいですが、ややこしければ深く考えずに2行目でロックして exitする前にアンロックでも大抵は十分です
919 :
名無しさん@お腹いっぱい。 :01/12/25 23:00 ID:JNXKMJjK
>917 そうですか。スクリプトの内容というか、 よく上のような場面の処理1で、ロックがかかってるか 調べてから読み取った方が良いのかな? と考える場面があったので(mkdir方式でロックしてます) レスありがとうございます。
あ、もし秒間1000回アクセスとか 処理時間1分とかなら別ですよ :-)
>>914 perldoc -l Net::FTP
とか
perl -e "use Net::FTP"
など
922 :
:01/12/26 00:01 ID:???
>>919 処理1はどうでもいいわけでしょ?
処理2〜3で扱うデータとの整合性が必要ないならそれでいい
ただタイミング的に(別プロセスとの関係で)おかしいデータを取り得るって
ことじゃないの?
それがいやなら(=整合性は要らなくても正しいデータが欲しいなら)処理1の前に
ロックしてしまえと
923 :
:01/12/26 00:34 ID:???
print "aa" if $b; こういう書き方って古いPerl(Perl5よりまえ?)でも使えるんでしょうか?
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ピュ.ー ( ・∀・)< わーぃ♪ =〔~∪ ̄ ̄〕 \________ = ◎――◎
925 :
名無しさん@お腹いっぱい。 :01/12/26 00:51 ID:gQqjt0L+
if修飾子ってPerl5からじゃなかったけ?
それはそうと
>>815 できないこともないけど1度やったら捕まるね。
927 :
名無しさん@お腹いっぱい。 :01/12/26 01:59 ID:ONuCP+Nn
ハッシュのキーにパッケージ名を入れたいのですが、どうもうまく書けません。 $hash{__PACKAGE__} = "hogehoge"; だと、"__PACKAGE__"と言うキーのハッシュ値ができてしまいます。 今は、 $packagename = __PACKAGE__; $hash{$packagename} = "hogehoge"; と2行で書いているんですが、もう少しスマートな書き方はありませんか?
928 :
名無しさん@お腹いっぱい。 :01/12/26 02:46 ID:xizBefjb
package名っつーことで、なんか特別な事があるのかも知れないけど、 defined $hash{'keyname'} とかそーゆーんじゃなくて?
>>927 $hash{__PACKAGE__}は $hash{"__PACKAGE__"}と
等価だから、基本的にはそのやり方しかないんじゃないかなぁ。
$hash{''. __PACKAGE__} =1;とかでもいけることはいけるけど。。。
931 :
914 :01/12/26 03:52 ID:FVfGl49U
>>927 $hash{+__PACKAGE__}
>>916 >>918 LOCK_EX されると、LOCK_SH で flock を呼び出したときもブロックされます。
(もちろん、LOCK_NB ビットも立てた場合はそのまま失敗する。)
通常、書き込みを伴う処理については LOCK_EX を、読み込みのみの処理のと
きは LOCK_SH を指定します。これだと、書き込みするときは他のプロセスか
ら読み書き両方できず、読み込みする場合は他のプロセスから読み込みのみ可
能となります。
あと、open FH, "> ..." とした場合はその瞬間にファイルサイズが 0 になっ
てしまうので、ロックする意味がないです。>> とか +< で open しておいて、
truncate とかするのがよい。
蛇足ながら、ファイルをクローズ、またはプロセスが終了した時点でロックは
解除されます。
perlの関数呼び出しはCall by referenceだと思うのですが func ($foo,$hoge,$poyo,$baz,$biz); のように長い引き数が有る関数の呼び出しで、func内で@_に入った値を 任意の名前にエイリアスする方法は有りませんか? 少し前まで直接$_[3] = '100'; の様に代入してたんですが、とても読みにくいので 今はリファレンスを貰ってます でも、これでも参照外しが大変なので、せっかく参照呼出しなのだから 何か良い方法が無いかなと思ってしまって・・・ よろしくお願いします。
935 :
名無しさん@お腹いっぱい。 :01/12/26 14:48 ID:Y7QEtnjd
さげてしまった (^^; func内で my (*foo,*hoge,*poyo,*baz,*biz) = \@_; の様にして一発でエイリアスを張る事って出来ないですかね。。。
local( *x, *y, *z ) = map { \$_ } @_; Perl って Call by reference じゃないと思うけど。。
Socketを使うときに相手への環境変数提示は print S "Referer: $ENV{'HTTP_REFERER'}\r\n"; print S "User-Agent: $ENV{'HTTP_USER_AGENT'}\r\n\r\n"; だけで十分ですかね? やっぱり全部送ってやったほうが良いでしょうか? また、そう言う場合もっとすっきりやる方法はありませんでしょうか?
けーすばいけーすでちゅ (・.・)
{ my ($out, $in1, $in2) = (0 .. 2); sub foo{ # $_[ $in1 ] と$_[ $in2 ] を使って何か演算をする $_[ $out ] = $result; return 1; # 成功 } } こんなのはどうだろうな。まぁ馬鹿げているが。
>>934 事前にこんなようなの書いとけばできる。
sub func(\$\$) {
local($one,$two) = @_;
}
941 :
名無しさん@お腹いっぱい。 :01/12/26 17:40 ID:o9s6aZoq
>>933 ひょっとして 頻繁に起動されるスクリプトでLOCK_SHを使っている場合,
LOCK_EXを掛けようとすると延々待たされますか?
何でやねん、つーか延々とか頻繁のニュアンスがワカラソ そんな彼方にはプロセス丸ごと排他を推奨
>>941 LOCK_SHしてるやつがいなくなるまで待つ。
だからクリティカルセッションはなるべく短めにすること。
944 :
941 :01/12/26 18:02 ID:???
>>942-943 ありがとう。やっぱそうなるんですか。
読み込みもLOCK_EXにすることにします。
945 :
927 :01/12/26 18:21 ID:???
遅レスすみません。
>>932 の方法でやろうと思います。
みなさんありがとうございました。
946 :
934 :01/12/26 19:03 ID:Y7QEtnjd
皆さん速レスありがとうございます、勉強になります。 押し切るとlocal使う事になりそうですね、、、 Call by referenceはCの様に関数間で値をmoveするんじゃなくて、 見かけ上、引き数が呼び出し先に突き抜けてくるという意味で書きました これはプロトタイプでも解決出来ないですよね、、、、 取り合えずconstな値はローカルにコピーして、書き換える時は@_を直接 書き換えることにします (でもやりにくいなぁ・・・
947 :
940 :01/12/26 19:14 ID:???
ごめん,写し間違えてた。 sub swap(\$\$) { local(*one,*two) = @_; ($two,$one) = ($one,$two); } でリファレンス渡しになる。 使う時はswap($aaa,$bbb); みたいに書く。
>>946 参照呼出しで合ってる、俺も前にちょっと考えてenumしたりしたけど結局大きい変数とかは $_[] に書いてるよ
949 :
916 :01/12/26 21:06 ID:???
>>933 >open FH, "> ..." とした場合はその瞬間にファイルサイズが 0 になっ
てしまうので
データが空になる瞬間を間違えて覚えてました。
レスありがとうございます。
とりあえず、
LOCK_SH (shared) だけならいくらでも同時に可能。読み込みだけの時はこれ
だけ使っておけ。
LOCK_EX (exclusive) は他のプロセスが LOCK_EX / LOCK_SH しているとダメ。
LOCK_NB (non-blocking) を指定していなければ、他のロックしているプロセ
スがロックをやめるまで待ち続けます。書き込みを伴うときはこれ使っておけ。
説明悪い?
LOCK_SH は LOCK_SH のみと共存可能。
LOCK_EX は LOCK_EX とも LOCK_SH とも共存不可能。
って書いた方がいいのかな。
>>944 なんでそんな結論になるかなぁ...
951 :
941 :01/12/26 21:46 ID:???
すいません。 「別のスクリプトから書き込む時にLOCK_EXを掛けようとすると延々〜」って書いてたつもりでした。。。
952 :
名無しさん@お腹いっぱい。 :01/12/27 02:01 ID:K1xvVgg1
953 :
952 :01/12/27 02:06 ID:K1xvVgg1
ちょっと質問違いました! foreach(@array){ てした時に何回目なのかを格納する変数を教えて下さい。でした。 951だと$_ てなっちゃいますね。すいません。
ない、いじょ
955 :
名無しさん@お腹いっぱい。 :01/12/27 02:27 ID:K1xvVgg1
無いのですか!? これだけいろいろな特殊変数があるのに!意外だ…。 ではforeach(@array){ $tmp++; とやって数えるしかないのですね。。。なるほど。 即レス感謝です。 ありがとうございました。
956 :
かもかも :01/12/27 04:31 ID:GPy3eH+b
@a= qw(1 5 2); for ( $[ .. $[+$#a ){ print "id= $_, value= $a[$_]\n"; }
957 :
名無しさん@お腹いっぱい。 :01/12/27 05:20 ID:06m3pfEi
>>956 なるほど〜。変数では無いですけど、
そういう方法もありますね。
# $[+$#a
# ここでなんで$[を足すのかがまだわからんですけど
レスどうもです。
958 :
かもかも :01/12/27 05:26 ID:STachx1U
配列のインデックスを0からとか1から始めるとかを設定するのが$[変数 なのでR!
かもかも、カコイイ♥
$count++; して数えとけ。
$[って今は使われて無い(というか、使うなと言われている)変数だから、この場合は素直に 0..$#aでも良いと思うが・・・
>>957 $[ は足さなくてよい。ていうか、足しちゃだめ。
$#aで、$[ をバイアスとする@aの最後の添え字の意味になる。
perldoc perldataでは、以下のように説明されている
scalar(@whatever) == $#whatever - $[ + 1;
>>958 デフォルトの$[ == 0だから動いただけ。
local $[ = 1;
を965の先頭に入れて動かしてみ。
てことで、
>>958 新スレよろしく!
963 :
えいじ :01/12/27 19:20 ID:VRi8wtO1
open(OUT,+>filename.txt);
print OUT "あいうえお\n";
close(OUT);
でfilename.txtが新規作成されるんですけど
http://www.****.com/ のトップのディレクトリだけは
新規作成されません。
どうしたら解決できるかご存知の方おられますでしょうか。
よろしくお願いいたします
open(OUT,+>filename.txt)||die("$!"); にしてエラーを見てみ
wwwのドキュメントルートと鯖のルートの違いを判ってないに1票
つーかこの馬鹿スレ立てやがった (呆
>>965 なんだ。そういう勘違いをしていたのか。
ドキュメントルートってなんですか? とか質問するに一票。
マルチ無視 わざわざAA張って煽る事すらウザイ
971 :
名無しさん@お腹いっぱい。 :01/12/28 04:07 ID:OJh+njZn
IPってダイヤルアップで再接続すると微妙に変わるものですよね? 再接続しても同一ユーザーだと特定する方法ってないんですか?
IPは何回繋いでもVersion4だろ w
>>972 おいそれは屁理屈に近いだろ。このくらい教えてやれよ。
>方法ってないんですか? 有るよ
教えれ
↑ (´,_ゝ`)プッ (´,_ゝ`)プッ (´,_ゝ`)プッ
先生!画像アップロード掲示板でmidファイルを使用したいのですが どうしてもうまく改造できません..。 よければアドバイス願いします。
>>971 そのこととPerlとどんな関係があるんだ?
>>978 if($filename=~m/\.mid$/)
print "Content-Type:audio/midi";
981 :
980 :01/12/28 15:30 ID:???
Perlは実行文がひとつでも{と}で囲まなければならなかったかな?
982 :
980 :01/12/28 15:31 ID:???
一応こっちで if($filename=~m/\.mid$/){print "Content-Type:audio/midi\n\n";}
983 :
978 :01/12/28 16:12 ID:???
>>980 先生!ありがとうございます!!
ある、画像アップロード掲示板を使用しているのですが
それはイメージ(GIFやJPEG)画像しかうpできないんです。
それじゃーとりあえず982の記述を適当に書き込んだら良いのでしょうか?
984 :
982 :01/12/28 17:06 ID:???
そういえば、出力するときはCGIは通さないか・・・・
>>983 コードを見ればどこかに受け入れ可能な拡張子を判断するところがあるだろ?
そこに.midを付け加えればOK
985 :
984 :01/12/28 17:09 ID:???
1000
sage
sage
sage
sage
sage
sage
sage
sage
sage
sage
sage
sage
sage
sage
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。