トップページ⇒php
1001コメント350KB

【Perl】初心者コーナー Part19

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/01/11 13:52ID:???
初めに→「perl」その物のスレです。

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

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

あとは>>2-10にまかせた。
0548nobodyさん03/01/26 12:18ID:P6Egn5Az
>>547
他の常連さんが成功してるみたいなので。。
0549nobodyさん03/01/26 12:20ID:???
>>548
常連さんに聞くのはどうでしょう?
0550nobodyさん03/01/26 12:30ID:P6Egn5Az
>>549
あまり喋らないので、気まずい...
0551nobodyさん03/01/26 12:47ID:zx28i3UH
アクセスアップキャンペーン中
http://ginrai.hp.infoseek.co.jp/
0552nobodyさん03/01/26 12:58ID:10NDG8/s
>>543
なんでもかんでもダブルクオートで囲むのはよろしくない。
それに、今はそれは全然関係ない。

>>542
自分が問題だと思っている部分だけじゃなくて、全体を出してみろ。
0553nobodyさん03/01/26 16:22ID:???
cronって何?どうやって設定するんですか?
0554nobodyさん03/01/26 17:09ID:???
>>553
時間を決めて実行するための仕組み。
専用レンタルサーバとかじゃないと使えないから気にしなくていい。
スレ的には、「ある時間にCGIを実行したいんだけど」な気がするから、
「CGIが読み込まれたときに時間をチェックして実行するかどうか決めろ」
0555nobodyさん03/01/26 17:56ID:lX4NK7pu
ジオシティーズのPerlのパスってなんですかぁ??
0556nobodyさん03/01/26 18:44ID:bvYo1DgE
>>555
そもそもCGI使えないだろ
0557nobodyさん03/01/26 21:22ID:???
>>554
仕組みというかただのデーモン(プログラム)。
0558nobodyさん03/01/26 22:37ID:???
$aaaと同じ内容の$bbbを作るにはどうすればよいのですか?
0559nobodyさん03/01/26 22:46ID:???
>>558
$bbb = $aaa;
0560nobodyさん03/01/26 23:30ID:2o0R3o6+
消費税の計算なのですが、
小数点以下切捨てということで、
$tax = int($5*$total/100);
という感じでやっているのですが、
小数点以下四捨五入で・・・とするにはどうしたらいいのでしょうか?
初歩的な質問ですいません・・・。
0561nobodyさん03/01/26 23:37ID:???
>>560
0.5 足してから切り捨て
0562nobodyさん03/01/26 23:40ID:???
>>560
$tax = int(($total * 0.05) + 0.5);

四捨五入は、0.5を足して小数点以下を切り落とす。
056356003/01/26 23:47ID:???
>>561-562
ありがとうございます!!!
$tax = int(($total * 0.05) + 0.5);
↑ちなみにこの2重括弧はやっぱり付けた方がいいんですか?
$tax = int($total * 0.05 + 0.5);
だけだとだめですか?
0564nobodyさん03/01/26 23:51ID:???
>>563
数学と同じで*は+より先に評価されるのでいらないだろうね。
056556203/01/26 23:52ID:???
>>563
あー、括弧はなくてもいいです。なんかクセでつけちゃった。
056656003/01/26 23:56ID:???
ありがとうございます。
0.5足して切り捨て、いわれれば納得!!!
つーか、最初の書き方変でしたね。
$tax = int($5*$total/100);
$5ってなんだ・・・(w
どうもありがとうございました。
0567nobodyさん03/01/27 00:31ID:???
>>566
マッチ演算子にて5番目にマッチした部分。
0568nobodyさん03/01/27 05:26ID:???
perlの掲示板で、書き込み内容の、
>がついてる文章を<BLOCKQUOTE>で括りたいんですが、

$message =~ s/a(.*)\n/<blockquote>$1<\/blockquote>/g;

とすると、

aあいうえお
aかきくけこ
さしすせそ

が

<BLOCKQUOTE>あいうえお</BLOCKQUOTE>
<BLOCKQUOTE>かきくけこ</BLOCKQUOTE>
さしすせそ

になってしまいます。

<BLOCKQUOTE>あいうえお<BR>
かきくけこ</BLOCKQUOTE>
さしすせそ

にする方法と、aじゃなくて、>で出来る方法(>を使うとなぜかエラーが出ます)
を教えてください。
056956803/01/27 05:27ID:???
>>568
あ、この方法の欠点見付けました。
>で始まる行でも、改行してなかったら引用と認識しませんね。

>で始まる行の後に、文章を書かない事はないと思いますが、万が一のために、\nがなくてもOKなようにしたいんですが。
057056803/01/27 06:31ID:???
>の個数だけ<BLOCKQUOTE><P>を頭に追加、行末の\nを<BR>に変換、
>の個数が一個減るたびにその直前に</P></BLOCKQUOTE>をつける、でいいんでしょうかね。
0571nobodyさん03/01/27 07:42ID:x/t6q6bL
1.最初に見つかった引用符(>)を<BLOCKQUOTE>に置換
2.先読みを利用して最後の引用符の行に</BLOCKQUOTE>を追加
3.その他の引用符をすべて消去

http://www.kt.rim.or.jp/~kbk/perl5.005/perlre.html
0572nobodyさん03/01/27 08:21ID:Npl77MmW
-------------------------------------------
本日23:00時より祭りを開催いたします。
是非、参加下さいます様、お願いします。
携帯PHS
迷惑メールサイト一斉訪問お祭り開催
http://jbbs.shitaraba.com/news/bbs/read.cgi?BBS=853&KEY=1043335260
-------------------------------------------
057356803/01/27 08:26ID:???
>>571
原理は分かりましたが、書き方が分からないです。
0574nobodyさん03/01/27 08:30ID:???
>>573
修行不足だな。
057556803/01/27 08:31ID:???
>>574
すみません。
0576bloom03/01/27 08:53ID:2qTkpcb7
http://www.agemasukudasai.com/bloom/
0577nobodyさん03/01/27 15:48ID:???
すいません、
モジュールは自分で鯖にインストールしないといけないのでしょうか?
例えばLWPなどは一般的にどのような手順を踏めば使えるのでしょうか。
0578nobodyさん03/01/27 16:10ID:???
>>577
前も来てなかった?

一般的にはモジュール配布サイトの指示に従う。だけれど。
0579nobodyさん03/01/27 16:11ID:x/t6q6bL
>568
これが理解出来れば後は余裕かと
$message =~ s|>([^>\n]+)(\n*)(?!>)([^>]+)$|$1</AA>$2$3|s;

>577
場所によるけど良いレンタル鯖だとメジャーなモジュールは
インストール済みだったりする
http://www.zdnet.co.jp/help/tips/linux/l0495.html
058057703/01/27 16:21ID:???
>>578-579
ありがとうございます。
>前も来てなかった?
もし過去ログにあったなら見逃してました、すみません。

試してみて、また分からなくなったら来ます。
その時もよろしくお願いします。
0581nobodyさん03/01/27 16:44ID:???
>580
LWPのインストールはPerlと関係ないのでもう来ないでください。
0582nobodyさん03/01/27 17:00ID:???
12chというスクリプトを使ってるんですけどmegabbsにある等幅チェックなるものを移植しようとしてます。
どなたか改造するポイントを教えてください。

因みに使っているバージョンは
ttp://mitinoku.jp/script/12ch_2.02.lzh
これです。

bbs.cgiというファイルを改造すればいいみたいです。
動作は、等幅チェックボタンをONにして書き込むと
<tt>「書き込み内容」</tt>
と、こんな風に<tt>タグでカキコの内容をはさむようにしたいです。

では、宜しくお願いいたしますです・・・。
058358203/01/27 17:04ID:???
megabbsでは等幅チェックの処理をこんな風にやってるみたいです

↓書き込みフォームの等幅チェック部分
等幅<input type=checkbox name=touhaba value=on>

↓$com(コメント)を<tt>ではさむ処理。
if ($email eq "haba" || $email eq "tohaba" ||$FORM{touhaba} eq "on"){$com="<tt>$com</tt>";$tt=1;}

0584nobodyさん03/01/27 17:05ID:???
>>582

【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/
058558203/01/27 17:09ID:???
>>584
うっ、・・すれ違いすいません・・・。そちらの方で聞いてきます。
すいませんでした。
0586nobodyさん03/01/27 18:01ID:???
海外製などのCGIを使うと、「ポ」など一部の文字で不具合が発生するのですが何故でしょうか。
どなたか分かる方いらっしゃいましたら教えてください。
0587nobodyさん03/01/27 18:42ID:KZuCQWmj
「こういうのがやりたい」と「どうやってもこれができない」にスレッド分割しない?
0588nobodyさん03/01/27 21:32ID:???
>>586
2バイト文字の処理を行っていないから?
とにかく >>1 から始めよ。

>>587
レスの半分近くが誘導になる悪寒ガクガクブルブル
0589nobodyさん03/01/27 21:46ID:???
$sub =~ s/^Re:\[[0-9]+\]\s//g;
の[0-9]+、ようするにその部分に入る数字を
$renoって変数に格納するにはどうしたら?
0590nobodyさん03/01/27 21:49ID:o8/ytwxU
($reno) = $sub =~ /^Re:\[([0-9]+)\]\s/;
0591nobodyさん03/01/27 21:50ID:???
>>589-590

お前ら、\dが泣いています。
0592nobodyさん03/01/27 21:52ID:???
数字を3桁ずつコンマ区切りにするスクリプトを作ってみた。
某有名所のスクリプトと比べると30%ほど速いみたいだけど…
評価してもらえるかな…?
改善点とか、悪いところとか…。
初期値は $old です…。
ドキドキ


$i = 0;
$new = "";
foreach $n (reverse(split //, $old)){
    $n .= "," unless ($i % 3);
    $new = $n . $txt;
    $i ++;
}
$new =~ s/,$//;
0593nobodyさん03/01/27 21:54ID:???
>>592
さっきもっとシンプルなの上がってたじゃん。
0594nobodyさん03/01/27 22:02ID:???
>>590
できました。
ありがとうございました。
0595nobodyさん03/01/27 22:09ID:???
>>593
どこ?
「速さ」より「シンプルさ」を重視すべきかな?
0596nobodyさん03/01/27 22:18ID:???
Perlメモに載ってる
0597腐れ厨房(゚腐゚)03/01/27 22:58ID:9+vb6fjV
ダウンロド&あらしスクリプトをperlで書いてんですけどLWPがうまく使えナインでcurlインストルして外部プログラムでポストするよにしタンです。
んで本題なんですけどhtmlファイルの中にポストボタンがあてcurlでポストすると302 foundのhtmlが出力されんです。そん中に書いてあるURLを今度はgetするとちゃんと希望したhtmlが入手できんですけどこれどゆ仕組みですか?
302foundのリンク先をブラウザが読んで飛んでんでしょか?それともヘダにそゆ内緒の跳び先が書いてあんでしょか?ヘダ見たけどごく普通だたと思うんですけど。
0598f03/01/27 23:00ID:???
★あなたのお悩み解決致します!!
●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
●ストーカー対策
社会問題ともなっているストーカーを撃退致します!!
その他人生相談からどんなお悩みでも解決いたします!!
 24時間受付  090−8505−3086
URL  http://www.h5.dion.ne.jp/~grobal/
メール  [email protected]
   グローバル探偵事務局 

0599 ◆PerlqhxPVA 03/01/27 23:50ID:???
>>592
$old = 1225678901;
while($old =~ s/(\d{1,3}?)$//){ unshift(@_,$&); };
print join(',',@_);

ちゅうのはカコ悪いか(w

>>597
Apacheの仕組みを覚えれ。
0600nobodyさん03/01/28 00:34ID:???
>>597
ネタなのかマジなのかよくわからん。
0601nobodyさん03/01/28 00:35ID:???
ttp://www.din.or.jp/~ohzaki/perl.htm
ここがPerlメモ

3桁ごとのカンマはこれが一番シンプルじゃねーかな。
0602nobodyさん03/01/28 03:04ID:???
>>597
Apacheだと、エラー時に好きなページを出力できる。
cgiを起動する事もできたりする。
0603g03/01/28 04:31ID:QDc4rCif
すいません、今本を見ながら一生懸命猿まねしてるんですが、、、
スラッシュの反対向きのやつってどうやって入力するのですか?
それらしきキーを押してるのに「\」が出てきます。
誰か教えてください。
0604g03/01/28 04:54ID:QDc4rCif
>>603
フォントを変えるとできました。
お騒がせしました。
0605nobodyさん03/01/28 06:37ID:???
すみません、ご存知の方いらっしゃれば教えて下さい。

あまり詳しくは言えないので非常に申し訳ないのですが、
ある2つのcgiをWin98(Celeron500)+Apache2+ActivePerl5.8で動かしていて全く問題がなかったのですが、
Win2000(Celeron500)で同じサーバ構成を作り(たぶん)稼動させた所、
1つは非常に快適に動作し、1つは動かないに等しい程おそくなってしまいました。

CGIを自分でかけないので分からない、というのがすでに問題なのですが、
こう言ったことは起こりうると推測出来るでしょうか?

サーバの構築ミスとかも有るかもしれません、、、。

ご教授頂ければ幸いです、、、、。
060659203/01/28 06:47ID:???
確かに似たようなのあるね
すまそ
0607腐れ厨房(゚腐゚)03/01/28 07:15ID:vWtuYxkU
>>602
なるホドです。んでそれをブラウザはどやて認識してんですか?
あよくよくヘダ見たら302fondの時「Location: http://hoge.com/hoge.html」とあたです。これでしょか?
0608nobodyさん03/01/28 09:15ID:???
>>607
帰れ。せめてhttpのRFCぐらい目を通してこい。
あと、日本語も勉強してこような。
0609nobodyさん03/01/28 09:19ID:???
>>605
起こりうる可能性はいくらでもありますね
ソフトウェア的な設定ミスから
ハードウェアやネットワークの障害などなど

ひとまず順を追って用意した環境が間違いないか確認しましょう

>>607
まずは日本語を(ry
061060503/01/28 10:05ID:???
>>609さん
レスありがとうございます。
そうですね、おちついて順をおってもう一度やってみます。

CGIのプログラムを外注に出しているので、
「おい動かなかったぞ!」と文句つけてみたものの
自分の設定ミスでしたという訳にもいかず(w

ただもともと動いていたCGIなので、どちらかといえば自分の設定ミスの方が
ありえるかな?と、その可能性をあたってみたかったという所です。

いやまったくお恥ずかしい話なんですが。
0611nobodyさん03/01/28 10:42ID:???
ここperl
061260903/01/28 12:15ID:???
>>610
外注先がコンサルしてくれないって痛いですね
大変だと思いますがガンガってくださいまし

スレ違いネタになってきたのでこの辺で、、
0613nobodyさん03/01/28 15:26ID:???
ここDQN
0614腐れ厨房(゚腐゚)03/01/28 16:53ID:vWtuYxkU
>>608
んな難解なヘンテコ文章読むの強要する低脳さんです。乞食が「このくらいの寒さひもじさなんだお前ら根性なし。」と騒いでるみたいです。

ところですべての文字列にマチさしたいんですけど
([.]|[^.])*?
てヤてんですけどカコとパイプだらけでカコ悪いです。もちょとスマトな方法ないですか?
 全能な正規表現
  (??{ code })
  (?{ code })
これ試してみましたけどなんかダメでしたです。Perl5.8です。
0615nobodyさん03/01/28 17:02ID:???
>>614
.*じゃ駄目なのか?

あと、HTTPについては、http://www.studyinghttp.net/
日本語だから読めるでしょ?

とにかく、日本語を書くように。
0616nobodyさん03/01/28 17:08ID:oYLjlQQn
全ての文字列にマッチってなんじゃろ?
.* ということではなくて?

あとLWP::UserAgentはredirectの解決もしてくれるから便利だよ。
curlはよくしらないけど。
0617nobodyさん03/01/28 17:09ID:oYLjlQQn
かぶった。
0618腐れ厨房(゚腐゚)03/01/28 17:20ID:vWtuYxkU
.*だと空白とか\nとか\rにマチしナインで都合悪いんです。
あとLWPは何度やてもうまく逝かなかたんで諦めましたです。curlはwgetライクで使い安いです。
0619nobodyさん03/01/28 17:39ID:???
腐れ厨房←他人のコテハン使うの止めろ。
荒らし←どうせ2chだろ。

氏ね
0620nobodyさん03/01/28 17:48ID:???
man perlre読め。
/.*/s
0621腐れ厨房(゚腐゚)03/01/28 18:42ID:vWtuYxkU
>>620
ありがとです。たたまたま分かりましたです。

>>619
名無し風情がエラそです。
0622けんすう ◆mTj9hjLz9w 03/01/28 19:22ID:???
腐れ厨房さんだ!本物?
0623nobodyさん03/01/28 19:46ID:wCME9ZCu
open(FILEA,"/var/tmp/a");
open(FILEB,"/var/tmp/b");
while ($linea=<FILEA>) {
while ($lineb=<FILEB>){
if ( $linea eq $lineb ){
処理・・・
}
}

見たいな事ってできないんでしょうか?
上記のコードだと FILEAのループが
1行分で終了してしまうのですが・・

0624nobodyさん03/01/28 19:53ID:???
>>623
配列に代入してforeachを使ってみてはどうだろうか
0625nobodyさん03/01/28 19:55ID:???
>>623
goto
0626nobodyさん03/01/28 19:57ID:wCME9ZCu
>>624-625
ほぅほぅ。
とにかく623のコードじゃダメなわけね。
なんでダメなんだろ?理由がわからない。
0627nobodyさん03/01/28 20:01ID:???
>626
ファイルハンドルからのデータ取得は、一度最後まで行ったらseekしないと戻らないから。
0628nobodyさん03/01/28 20:07ID:???
>>627
なるほど!!
じゃぁ1個目のWhile文のなかでFILEBをOPENするか、Seekで先頭にもどすかすれば
だいじょうぶかな?
こんど試してみます。今、環境がないんで。
0629nobodyさん03/01/28 20:07ID:VjdgexrL
>>623
一個目のwhile抜けた後でseek FILEB,0,0でもすれば?
0630腐れ厨房(゚腐゚)03/01/28 20:53ID:EPPQeVDF
>1個目のWhile文のなかでFILEBをOPENするか
僕の環境だとそれで逝けましたです。なんかネストしたらシクしないて不良品てカンジイです。

>>622
僕です。
0631nobodyさん03/01/28 20:57ID:???
板違いかもしんないけからsageで・・・
フォームのサブミットボタンに表示させる文字って
VALUE=" "に書くやんかぁ?
でボタンにダブルクォート自体を表示させたい場合ってどうするん?
どうするん?
どうなん?
0632 ◆PerlqhxPVA 03/01/28 21:03ID:???
>>631
value='"こんなん"'
0633nobodyさん03/01/28 21:07ID:???
>>632
ほぉー!
なるほど。

じゃぁじゃぁ シングルクォートとダブルクォート両方を表示したい時は??
0634nobodyさん03/01/28 21:08ID:???
>>631
http://tohoho.wakusei.ne.jp/html/char.htm
0635nobodyさん03/01/28 21:12ID:???
>>634
ほぉー!
なるほど。

いやぁ実はPerlでCGI作ってて、フォームで入力してもらった文字列を
表示させる部分があるんですが、そのまんま表示してるんで < とか ”とか
入力されたら困ってたんですよね。

ほー!
こういうのを自動でチェック、変換してくれるよかモジュール知らんですか?
0636nobodyさん03/01/28 21:15ID:???
>>633
"'&quot;"
こうする
0637nobodyさん03/01/28 22:57ID:???
>>633
qq{}
0638nobodyさん03/01/28 23:22ID:???
>636 それHTMLだけだろ

637の方法以外に \" \'
0639nobodyさん03/01/28 23:26ID:0+yLIxs1
0640nobodyさん03/01/28 23:28ID:???
これでなんで動かないんですか?

#!/usr/bin/perl
print"Content-type:text/html\n\n";
print<<EOF;
<html>
<body>
あああ
</body>
</html>
EOF
0641nobodyさん03/01/28 23:38ID:6cWKDFOV
>>640
#!/usr/bin/perl
→
#!/usr/local/bin/perl
にしてみた?
0642nobodyさん03/01/28 23:39ID:???
>>640
最後の行の「EOF」の後に
半角スペースが入っている。
0643nobodyさん03/01/28 23:45ID:???
>>640
具体的にどう動かないのかちゃんと書いてくれ。
ちなみにうちの環境では期待する動作をした。
064464003/01/28 23:49ID:???
>>641
サーバーは#!/usr/bin/perlなんです。
念のため#!/usr/local/bin/perl にしましたがダメでした。

>>642
>>640の書きこみはスペース入ってますが実際はスペースはありません。
一応書きなおしましたがダメでした。

#!/usr/bin/perl
print"Content-type:text/html\n\n";
print"あああ";

だと動きますが、

#!/usr/bin/perl
print"Content-type:text/html\n\n";
print<<EOF;
あああ
EOF

だと動きません。
0645nobodyさん03/01/28 23:50ID:???
EOF
の次の行に
;
とか。
改行コードがおかしいとか。
064664003/01/28 23:51ID:???
>>643
実行するとInternal Server Errorとでます。
064764003/01/28 23:53ID:???
>>645
最後の行に";"を入れたら動きました!!
ありがとうございました!!!!
■ このスレッドは過去ログ倉庫に格納されています