トップページ⇒php
984コメント309KB

【Perl】初心者コーナーPart11

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん02/03/27 12:53ID:wAXxxOxP
 
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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

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

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

過去ログ、その他の役立ち情報は>>2-10を見よう。
0910nobodyさん02/04/26 11:04ID:???
>907
それだとapril4.htmlまで消さないか?
0911nobodyさん02/04/26 12:13ID:???
File::Copy を利用しようか検討しているのですが
サーバ側でこの標準モジュールが許可されているか確認する為に
管理者へ連絡する以外に、perlを利用して確認する方法は存在しませんでしょうか?
0912nobodyさん02/04/26 12:50ID:???
使えば良いじゃん?
0913nobodyさん02/04/26 12:52ID:???
モジュールがインストールされてるかどうか、ってこと?
telnetとかできるんだったら

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

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

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

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

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

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

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

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

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

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

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

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

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

#!/usr/bin/perl -w

print "Content-Type: text/plain\n\n";
print eval{ require File::Copy; } ? "ok" : $@;
0926ななしさん02/04/26 19:10ID:???
>>922
"└"と"│"と"├"を組み合わせてツリー表示したいのですが、
上手く表示されません。
1: 直面する危機[cccc] 04/18 17:10
|   
|   日本企業が直面している、新事業開発と新市場創造の壁とは何か。
|   
├2:Re直面する危機 [つんく] 04/19 10:07
│   
│   つんくつんく大儲け
│   
│├3:Re直面する危機 [いいいい] 04/21 15:43
││   
││   いいいい
││   
│└4:Re直面する危機 [うううう] 04/21 15:44
│ │   
│ │   うううう
│ │   
└5:Re直面する危機 [おおおお] 04/21 15:42
 │   
 │   おおおお
 │   
ここまで

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

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

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

093092602/04/26 19:48ID:???
sub treelist {
$c .= $n eq "└" ? " " : "│" if($n);

while(@{$restree{$log}}){
@data=split(/\t/,$list{$log == 0 ? shift(@{$restree{$log}}) : pop(@{$restree{$log}})});

if($data[1] != 0){$n= @{$restree{$log}} ? "├" : "└";}
if($n eq "├"){$o = $data[1] == $log ? "│" : "";}
elsif($n eq "└"){$o = $data[1] == $log ? " │" : "  ";}

print "$data[0]:$data[3] [$data[4]] $data[6]";
if($data[1] == "0" && $data[1] != $log){$sen = "<br>|   ";}
else{$sen = "<br>$c$o"."   ";}
print"$sen$sen";
$data[7] =~ s/<br>/$sen/g;
print "$sen<nobr>$data[7]</nobr>$sen";
&treelist($data[0],$c,$n,$o,$size - 2);
}
}

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

system("/usr/local/bin/gpg -r D44EC5AA -o bbbb -ea aaaa");

とやると、エラーはでてきませんが、bbbbファイルが作成されません、
GnuPGはサーバーの/usr/local/bin/gpgにインストールされてますので、
telnet上の操作では、暗号化ファイルbbbbは問題なく作成されます。
問題は違うとこにあるのでしょうか?

元々やりたかったことは、フォームメールに入力されたデータを
暗号化されたメールとして受け取りたいということです。
解説ページなんてたくさんあるだろうと思って、暗号、PGP、GPG、GnuPG、フォーム、
他にもいろいろ検索ワードを試しましたが、それらしいページが見つかりません。

ひとつだけみつけましたがPHPでした。
http://www.hotwired.co.jp/webmonkey/2000/20/index3a.html

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

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

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

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

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

海外のページを探してみたら、GPG対応のフォームメールが
いくつか見つかりました。これを改造して使えないかなと中を見てるとこです。
日本語の解説ページもたくさんありそうなもんですがねぇ、
関連ワードで国内を検索しても、ショッピングサイトしかでてこないです。
094894402/04/27 03:22ID:???
>>947
スクリプトが、そのsystem()の行まで辿りつく前にエラーになってる可能性は
ないかな?
実行パーミッションがついてないとか、perlのpathが間違ってるとか。
あと、telnetでログインしたときと、CGIで叩いた時の $PATH が
違うという可能性か、入力ファイルが実は無かったとか。うーむ。
推測だらけですまん。
094990302/04/27 03:43ID:???
>948
親切なレスありがとうございます。
pathは間違ってないですねぇ、、、ファイルも存在してます。
実行パーミッションもついてます。う〜ん??
簡単なテストで、こんなのやってみました。

#!/usr/local/bin/perl

system("/usr/local/bin/gpg -r D44ECAAA -o bbbb -ea aaaa");
print "Content-type: text/html\n\n";
print "<HTML><BODY>\n";
print "暗号化終了<BR>";
print "</BODY></HTML>\n";
exit;

エラーはでないですが、bbbbファイルが作られません、
絶対パスでファイルを指定してもダメ。
すごい初歩的な思い違いをしてるような気もしますが、、、。
095094402/04/27 03:59ID:???
>>949
つーことは、なんとなーくgpgの実行時にエラーが出てる予感。
print "Content-type: text/html\n\n";
print `/usr/local/bin/gpg -r D44ECAAA -o bbbb -ea aaaa`;
てな感じで、エラー表示されないかなぁ
095190302/04/27 04:39ID:???
>944
こんな時間までお付き合いいただいて恐縮です。

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

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

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

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

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

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

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

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

【Perl】初心者コーナー Part12
http://pc.2ch.net/test/read.cgi/php/1019917048/
098397502/04/27 23:21ID:M0a39fTI
ごめん、Perl関係なかったデス。CGIダタ。
098497502/04/27 23:22ID:???
sage忘れるし・・・。鬱。
レス数が950を超えています。1000を超えると書き込みができなくなります。