【Perl 】初心者コーナーPart7
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい
01/09/12 13:04ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://corn.2ch.net/test/read.cgi?bbs=php&key=988809842&ls=50
CGIの質問はこちら【CGIだけど、なんか質問ある?part3】
http://corn.2ch.net/test/read.cgi?bbs=php&key=988727833&ls=50
過去ログ、その他の役立ち情報は>>2-5を見よう。
0054名無しさん@お腹いっぱい。
01/09/15 16:15ID:???nslookupを呼び出すのは禁止なんですよね。
困った困った。
0055名無しさん@お腹いっぱい。
01/09/16 04:15ID:D8MO0CAo0056名無しさん@お腹いっぱい。
01/09/16 04:24ID:D8MO0CAoHTTPD立ち上げてブラウザからhttp://127.0.0.1/で掲示板とか作ってるんですが・・。
各所で-wT使え strict使えとか言われてるのに使えなくて困っております。
0057名無しさん@お腹いっぱい。
01/09/16 05:14ID:???0058あぼーん
NGNG多分、-wT は
#!/usr/bin/perl -wT
がやりたいんだと思われ。
で、use strict の使い方と意味知ってますか。
0060名無しさん@お腹いっぱい。
01/09/16 13:02ID:???というわけで、perldoc strict かな。
>>59
良いトリップですな。
0061名無しさん@お腹いっぱい。
01/09/16 14:08ID:VeBCjLxg取り込むプログラムがありますが、同じようにWebベースの
メールをローカルスプールに取り込むperlスクリプトを作りたい
のですが、それを書くのに便利なモジュールとCGIとの会話に
必要な知識が載っている資料(RFCかweb)を知っていたら
教えていただけませんか。
0062名無しさん@お腹いっぱい。
01/09/16 15:24ID:???そんな都合の良いもんねーよ。
もっと基本からはじめろ。
0063名無しさん@お腹いっぱい。
01/09/16 16:15ID:HiUGkhywそうでしたか。結構CPANとかには「そんな都合のいいもの」って
思うようなものもあるので、誰かが作っているかもって思ったの
です。LWPとか使って書くしかないってことですか。
>もっと基本からはじめろ。
車輪の再発明を避けようと、似たようなモジュールがないか探した
だけで、基本に戻れってことですか?
0064名無しさん@お腹いっぱい。
01/09/16 16:21ID:???LWP以上の何を求めてるのかが解りませんが
hotmail.pmみたいなのを探してるのか。。。
0065名無しさん@お腹いっぱい。
01/09/16 17:06ID:yvDq7DHwたしかに違いますが、大手のinfoseek, exciteくらいなら使っている
人も多いし、webメールが面倒って思って作っているひとがいるかも
って思ったので^
>LWP以上の何を求めてるのかが解りませんが
各WEBの違いを吸収してくれるモジュールがあれば…ってことです。
>hotmail.pmみたいなのを探してるのか。。。
それってあるのですか? CPANとgoogleで検索かけても見つけ
られませんでした。
0066名無しさん@お腹いっぱい。
01/09/16 17:40ID:???そもそも世界中に一体何千のサービスがあって(以下略
0067名無しさん@お腹いっぱい。
01/09/16 17:45ID:MGixgscI了解。
0068名無しさん@お腹いっぱい。
01/09/16 18:46ID:9Q.bsKq2ttp://www4.tkcity.net/~elmo/accessory/wforum.htmlを設置しようと思い、
「#!/usr/local/bin/perl」のパスを「#!/usr/bin/perl」に変更し
cgi-binとbbsディレクトリのパーミッションは755に変更。
後は以下のように変更しました。
wforum.cgi(755)
wforum.log(644)
wf_admin.cgi(755)
index.cgi(755)
1.html(644)
pastno.dat(644)
index.html(644)
title.gif(644)
jcode.pl(644)
fold.pl(644)
accesslog.log(644)
code.log(644)
ですが、どうしても「500 Internal Server Error」と出てしまい動きません。
たぶんパーミッションが間違ってるのかな?と思いますが
どう変えれば良いのかがわかりません。
誰か教えて下さい、お願いします。
ちなみにFTPソフトは「Fetch3.0.3J2」を使ってます。
0069名無しさん@お腹いっぱい。
01/09/16 18:56ID:???頑張ってください、と言いたい所だが。
スレ違いです。
CGIだけど、なんか質問ある?part3
http://corn.2ch.net/test/read.cgi?bbs=php&key=988727833&ls=50
つーか、 use CGI::Carp してみたら助かること多いのにね。
0071名無しさん@お腹いっぱい。
01/09/16 20:31ID:???KCatch.pm使ってエラーメッセージ表示できる。
続きはCGIスレでやってね。
0072名無しさん@お腹いっぱい。
01/09/16 20:33ID:???007368
01/09/16 20:53ID:gRdNqaZI0074名無しさん@お腹いっぱい。
01/09/16 21:17ID:iOe1OIlA参考になるルーチンなどありますでしょうか。
0075名無しさん@お腹いっぱい。
01/09/16 21:25ID:???0076名無しさん@お腹いっぱい。
01/09/16 22:30ID:???0077名無しさん@お腹いっぱい。
01/09/16 22:44ID:???確かに。
私はKCatchじゃなくてCGI::Carp派です。
書いとくか…
BEGIN {
use CGI::Carp qw(carpout);
open FH, ">> ./error.txt";
carpout(*FH);
}
0078名無しさん@お腹いっぱい。
01/09/17 00:52ID:???クッキー切られてたら意味ない気がしたのだが
0079あぼーん
NGNG0080名無しさん@お腹いっぱい。
01/09/17 00:59ID:???0081名無しさん
01/09/17 22:02ID:vlnxJJbsunmatched [] in regexp at ファイル名が表示されるんですけど
エラーをなくすにはどうしたらよいですか?
0082名無しさん
01/09/17 22:06ID:???0083名無しさん@お腹いっぱい。
01/09/17 22:14ID:???\Q \E
quotemeta
0084名無しさん@お腹いっぱい
01/09/17 22:34ID:???$a : 移動前のファイル名
$b : 移動先のディレクトリ名
この場合、どんな風に書けばいいのか教えてください
0085名無しさん@お腹いっぱい。
01/09/17 22:57ID:???$c : 移動前のディレクトリ名
rename("$c/$a","$b/$a");
0086名無しさん@お腹いっぱい。
01/09/17 23:49ID:IPBfuQwsmove($a,$b);
0087名無しさん@お腹いっぱい。
01/09/18 05:01ID:???蛇足ながら。
$a,$bはsort用の特殊変数なので
普通の用途では使わないほうがいい(かもしれない)
008884
01/09/18 07:57ID:???0089名無しさん@お腹いっぱい。
01/09/18 21:30ID:???どうやってやるんでしょうか?
0090名無しさん@お腹いっぱい。
01/09/18 22:23ID:???use Cwd;
$dir = cwd();
0091名無しさん@お腹いっぱい。
01/09/18 23:07ID:???わ。そんな簡単な方法があったのですか。
ありがとうございます。感涙です。
0092名無しさん@お腹いっぱい。
01/09/18 23:27ID:s6QOmheA(分割結果を個別で携帯メールに送る)
日本語文字列の分割はどうすればいいのでしょう?
substr使って以下のようにすると、1byteコードが入ったところで化けます。
$max_byte = 80;
$offset = 0;
for($i=0;;$i++){
@mailbody[$i] = substr($mailbody,$offset,$max_byte);
$offset +=length(@mailbody[$i]);
if(@mailbody[$i] eq ""){
last;
}
}
よろしくお願いします。
0093名無しさん@お腹いっぱい。
01/09/19 00:24ID:R7HmAIag正規表現を使う
あと、@じゃなくて$な
0094名無しさん@お腹いっぱい。
01/09/19 02:33ID:???つーか、日本語は2byte(または3byte)って事知ってるか?
@と$間違うレベルじゃ多分無理だろうな。
0095名無しさん@お腹いっぱい。
01/09/19 02:47ID:qAnhwpTs逆に間違う古参が出てくるだろうが。
0096あぼーん
NGNG0097名無しさん@お腹いっぱい。
01/09/19 05:36ID:xKEtyMaE93と94の言ってることがわからなければ、たとえばこのへんを参考に。
http://www.din.or.jp/~ohzaki/perl.htm#JP_Split
そのあと>>2-3のリンク先も全部読んでおくといいかも。
2ヶ月もがんばれば全部読めるっすよ。
0098名無しさん@お腹いっぱい。
01/09/19 06:33ID:???タイムアウトしてサーバーがみつからんです。っていいます。
なんとかしてください。
0099名無しさん@お腹いっぱい。
01/09/19 06:42ID:???ローカルで?サーバーで、の間違いでしょ?
forkして子プロセスにやらせるとか
やること記述したファイル生成して、cronに拾わせるとか
0100名無しさん@お腹いっぱい。
01/09/19 07:02ID:???良く聞いてみたらなが〜いのはもちろんhelloperlも動かない
つーかHTMLも表示出来ん、Pingも飛ばねえってオチ これ基本ね
0101名無しさん@お腹いっぱい。
01/09/19 07:18ID:???ブラウザ表示がタイムアウトになっても処理は続いてる。
画面に表示されないだけ。
表示内容を見たいだけならスクリプトの最後に表示させたい内容を
外部保存するように書き換えて、あとからそのHTMLだけ開けばいい。
0102名無しさん@お腹いっぱい。
01/09/19 07:22ID:???なが〜いスクリプトってのはただ単に
入れ子になってるだけなんですけど
httpdがずっと通信してますよー。ってなってて
もうやめた。って感じで止まり、鯖見つからんかった事にしといてー。
ってなるんです。
0103じゃ・・
01/09/19 07:24ID:AuWg3XVU0104名無しさん@お腹ごろごろ
01/09/19 14:53ID:ZyNXuusgPerlスクリプトの設置場所とカレントディレクトリを「c:\temp」にした状態で
「c\temp\sample.txt」を「c:\temp\old\sample.txt」に移動するにはどうすれば良いでしょうか
0105名無しさん@お腹いっぱい。
01/09/19 14:56ID:???ログ見ろ!
>84-86
0106名無しさん@お腹ごろごろ
01/09/19 15:06ID:???[[解決]]
0107コアだんぷ
01/09/19 15:35ID:hUyzFQTQ例えば簡単な掲示板作れるくらいのレベルに達するのにどれくらい
かかった?
先日友人に1ヶ月くらいやってやっと簡単な掲示板作れるレベルになった
といわれてビクーリした。そいつは仕事から帰ってずっとPerlやってたみたいなんだけど
そんなにかかるの?
ちなみに俺は簡単な掲示板作れるようなレベルになるまで1週間かからなかった記憶があります。
個人差もあると思いますがだいたいどれくらいでいけるもんなのですか?
0108P
01/09/19 16:05ID:???やりたいことができれば習熟度や経歴なんて関係ないよ〜
私は掲示板のアレンジは即日可能でしたが
特に目的がなかったのでその後は進歩していません
0109名無しさん@お腹いっぱい。
01/09/19 16:06ID:???Perl以外のプログラムを組んだ事あるかないかによる。
組んだ事がなくてもその知識があるかないかによる。
文系か理系かにもよる。
漏れは改造から入ったから、簡単な掲示板を1から自分で作ったのが
いつだったか全然覚えてない。(ぉ
0110名無しさん@お腹いっぱい。
01/09/19 17:00ID:tAq/5NMs$mailto = "'x_x_x@xxx','x.x.x@xxx','xxx@xxx',"
こんな書き方で大丈夫でしょうか?
0111名無しさん@お腹いっぱい。
01/09/19 19:09ID:???2chの様に複数のスレッド(トピック)が有ってそこにレス付けて行く
BBSの場合トップソート(あげ機能)の有無に関わらずログの整理が
必要ですよね。
多くの掲示板みたいに
open (FH,"./log.txt");@log = <FH>;
ってやるのは少し気が引けます
もし while (<FH>) で何とかしたいとしたら、ここみたいに
スレッド毎にログファイルとsubject.txtみたいなテキストを用いる
しか無いんでしょうか。 ログファイルが増えるのもちょっとなぁ
と思ってるんですが・・・
0112sage
01/09/19 20:42ID:???それじゃ無理。具体的な掲示板スクリプト書いてくれ
@Mailto('[email protected]','[email protected]','[email protected]'); #送りたいメールアドレスを好きなだけ書く
foreach $Mailto (@Mailto){掲示板スクリプトの送信処理;}
大まかな考え方はこんな感じだと思うよ
>111
複数の方法がある場合、ナニを優先させるか明記しないとレス不可能
というかナニがしたいの?
0113sage
01/09/19 22:59ID:???@Mailto = ('〜以下省略〜');ですよ。「=」抜けてました(汗々)
0114名無しさん@お腹いっぱい。
01/09/19 23:11ID:RdNP37osTo: mail_addr@host, nail2@host, ...
で送れるでしょ。
ただ、ダブルクオートでくくると、変数展開がまずいことにならないかな。
$mailto = '"x_x_x@xxx","x.x.x@xxx","xxx@xxx"';
の方が安心かも。
0115114
01/09/19 23:15ID:RdNP37os動かしているスクリプトの処理によっては、えらいことになりかねない。
0116110
01/09/20 00:32ID:xeOjatSc’”x_x_x@xxx”’だと出来ました。
最初は単純にカンマで区切っただけだったんですが($mailto = '[email protected],[email protected],[email protected]';)
これだと最初のやつが送信されなかったんです。_ があったのが悪かったんでしょうか???
なぜだかよくわかってませんけどこれから勉強します。
112さん114さんお答えどうもありがとうございました。
0117名無しさん@お腹いっぱい。
01/09/20 04:24ID:tvjA6dmg探しても見つかりませんでした。
どこで見られますか?
0119名無しさん@お腹いっぱい。
01/09/20 07:33ID:???どうやるんですかーー?
ちなみにgrepって検索文字に変数使えないんですか?
例えば grep ~ /$hoge/,@kensakutaisho;
みたい$hogeつかえないのですか?
0120あぼーん
NGNG0121らすかる
01/09/20 07:50ID:MTc8pgUsスクリプトを1つのファイルにまとめるか複数に分けるか悩んでます。
エラー処理のところなどを別ファイルにしようかと思うのですが
やはり複数に分けた方が処理は軽くなるのでしょうか?
それとも複数でも全てを1つのファイルにまとめても大してかわらないのでしょうか?
0122名無しさん@お腹いっぱい。
01/09/20 07:56ID:o56tunDA0123名無しさん@お腹いっぱい。
01/09/20 08:17ID:???@a3 = map {$ck1{$_}} @a2;
@hits = grep {$_ =~ /$hage/} @search_target;
↓
@hits = grep {/$hage/} @search_target;
↓
@hits = grep /$hage/,@search_target;
0124名無しさん@お腹いっぱい。
01/09/20 09:19ID:???ログを1ファイルで管理する場合は保存件数を制限するだろ?
複数ファイルで管理するとそれを探すステップが必要なので
入門レベルで処理の重い/軽いを気にするなら1ファイル管理がいいと思うが?
>122
作るcgiの完成度と作られるcgiの内容による
0125名無しさん@お腹いっぱい。
01/09/20 09:34ID:???条件によっていろいろなので一概に言えない。
@dupe = grep {$tmp{$_}++} @array1, @array2
>>121
分けたほうが遅くはなるけど、たいして変わらない。
分けるなら読み込みのスクリプトと、書き込みのスクリプトで分ける。
2chもそうだよね。
0126名無しさん@お腹いっぱい。
01/09/20 15:34ID:???だったとして
@querys = split (/&/,$ENV{'QUERY_STRING'});
foreach (@querys){
  ($name,$value) = split (/=/,$_);
  $fromin{"$name"} = $value;
}
これは理解出来るとして、
@querys = split (/&/,$ENV{'QUERY_STRING'});
foreach (@querys){
  ($name,$value) = split (/=/,$_);
  $fromin{"$name"} = $value;
}
  $name = $formin{name};
  $year = $formin{year};
これは何故? 殆どの配布スクリプトがこんな感じ
なんですけど、、何で
@querys = split (/&/,$ENV{'QUERY_STRING'});
foreach (@querys){
  ($name,$value) = split (/=/,$_);
  unless ($name =~ m/^(name|year|sex|)$/){next;}
  $$name = $value;
}
これで済ませないの?
0127名無しさん@お腹いっぱい。
01/09/20 15:48ID:???もしくは、盲目的「ソフトリファレンスは使うな」。
もしくは、マッチの負荷を気にしている。
つーか、ハッシュのままでいいじゃん。
0128127
01/09/20 15:52ID:???0129名無しさん@お腹いっぱい。
01/09/20 16:21ID:UtkSX9Kcなんかスクリプトの中にパラメータを
>m/^(name|year|sex|)$/){next;}
って書くのはマジックナンバーの埋め込みみたいに
感じるんですけど。メンテナンスが面倒になりませんか?
0130126
01/09/20 16:34ID:???一番の理由はマッチングのコストなのかな、、
シンボリックリファレンスは多用すると参照先が曖昧になってしまうから
上級者さんが、使うなー って言ってるんですよね
>メンテナンスが面倒になりませんか?
これは上の例の2つ目でも同じ事ですよね 例えばaddを足したら
$add = formin{add} を足さないといけないという部分では
色んなスクリプト読んでるんですが、何故か2つめのやり方が凄く
多いんです。で、3つ目は一度も見た事無いんで、何か落とし穴でも
有るのか、それともこう言う基本部分のリファレンス?みたいなのが
どっかに有って、みんなそれをコピーして使ってるのかな
と思ったんです perlってほんと色々な書き方が有って困ってるのに
この部分だけ判子押したように同じだったんで。。。
0131名無しさん@お腹いっぱい。
01/09/20 16:46ID:X2sVnNMYマジックナンバー(マジックストリング?)なんてどうにでもなるし。
ただ、入力データだということをハッキリさせたいのでハッシュの方がいいとは思うが。
そんな俺は自作のCGI::Queryで$q->param("foo")だけど。
0132ぱーるやろう
01/09/20 16:47ID:???0134119
01/09/20 17:41ID:???>>125
どうもありがとです。
それで試してみます。
123の矢印は省略可って事ですよね?
>>132
どっかのサイトにあったなぁ。
メアドも例外みたいのがあってそれをはじかず
変なアドレスだけをはじいていくってやつが。
ちなみに超長かった。
例外考えないと
if($email !~ /[\w\.\-\&]+\@[\w\.\-\&]+\.[\w\.\-\&]/){&error("メアド変");}
($siteurl !~ /^https?:\/\/[\w|\:\@\-]+\.[\w|\:\!\#\%\=\&\-\|\@\~\+\.\?\/]+$/i){&error("URL変");}
か?
0135119
01/09/20 17:41ID:???elsif($siteurl !~ /^https?:\/\/[\w|\:\@\-]+\.[\w|\:\!\#\%\=\&\-\|\@\~\+\.\?\/]+$/i){&error("URL変");}
だ。
0136名無しさん@お腹いっぱい。
01/09/20 18:15ID:???0137名無しさん@お腹いっぱい。
01/09/20 18:18ID:JzJOOdyAとりあえず自分で上級者って言わない奴。
0138名無しさん@お腹いっぱい。
01/09/20 18:23ID:???Inter National Perl Coding Qualification (INPCQ)
Master クラスを取得してから
0139名無しさん@お腹いっぱい。
01/09/20 18:27ID:???Perlを使いこなせるようになってから
0141名無しさん@お腹いっぱい。
01/09/20 19:12ID:???中級:CPANにモジュールを登録し、Perl文化に貢献する
上級:Perlのコアの開発に携わる
神:ラリーウォール
0142名無しさん@お腹いっぱい。
01/09/20 19:24ID:???0143名無しさん@お腹いっぱい。
01/09/20 19:54ID:???不覚にもワラタ
0144名無しさん@お腹いっぱい。
01/09/20 20:58ID:???げ。どうしよう。初級者じゃん俺。もっとヘボいと思ったのに俺。
0145初心者++
01/09/20 22:18ID:???0146稲垣(゚д゚)ゴルォ
01/09/20 22:26ID:???0147名無しさん@お腹いっぱい。
01/09/20 23:01ID:???ツマラン
0148名無しさん@お腹いっぱい。
01/09/20 23:45ID:dlBnP3mg0149名無しさん@お腹いっぱい。
01/09/21 01:45ID:D8Pk/8eMその要素以外を記録する方法がやはりわかりません。
というかうまく動きません。
これだ!というのがあれば教えてください。
0150名無しさん@お腹いっぱい。
01/09/21 02:05ID:DP/oQEFM@a = (1,2,3,4,5,6);
@b = (2,4,6,8,10);
foreach (@a) {$hash{$_} = ""}
foreach (@b) {exists($hash{$_}) ? delete $hash{$_} : print "$_\n"}
foreach (keys %hash){print "$_\n"}
ぱっとしないけど。
0151149
01/09/21 02:16ID:D8Pk/8eM今自分でアイデア出てやっとこさ作れたけどその
数倍長いよw
いや親切さん多くてうれしいですね。どうもでした。
0152150
01/09/21 02:18ID:DP/oQEFM@b = (2,4,6,8,10);
foreach (@a, @b) {$hash{$_}++}
# 重複してるの
foreach (sort keys %hash) {if ($hash{$_} >= 2) {print $_, "\n"}}
# 重複してないの
foreach (sort keys %hash) {if ($hash{$_} == 1) {print $_, "\n"}}
こっちのほうがええかも
0153Perl上級者
01/09/21 02:55ID:???#!/usr/bin/perl
$message = "Hello";
print "子プロセスを起動....\n";
$pid = fork();
if($pid < 0){
die("子プロセスの作成に失敗しました。\n");
}elsif($pid == 0){
$message .= " World";
print "\$message = $message\n";
exit(0);
}
wait();
print "\$message = $message\n";
exit(0);
0154Perl上級者
01/09/21 02:59ID:???./log.plでも./log.pl > logfile
子プロセスを起動....
$message = Hello World
$message = Hello
---------------------------
Perl5.005.3
./log.pl
子プロセスを起動....
$message = Hello World
$message = Hello
./log.pl > logfile
子プロセスを起動....
$message = Hello World
子プロセスを起動....
$message = Hello
■ このスレッドは過去ログ倉庫に格納されています