【Perl】初心者コーナー Part18
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
02/11/20 22:04ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0855852
03/01/05 03:31ID:TaQfxWs2名前以外を退避…。
そちらに頭が全くまわってなかったです。
アドバイス有難うございます!
>>854
なんという基本的な間違いを。ご指摘有難うございます。
早速修正します。
0856nobodyさん
03/01/05 09:18ID:2NV2xWH6(自分でおいたCGIのせい?)
どうしたら削除できますか?
サーバーはinfoseekです.
0858nobodyさん
03/01/05 09:26ID:2NV2xWH6もう少し詳しくお願いします
0859nobodyさん
03/01/05 09:28ID:???rm -rf ./
0860nobodyさん
03/01/05 09:49ID:???FFFTPとかで消せないって言うか、ファイルが見えないんだろ?
任意のコマンド ってあるから>>859みたいに
chmod 644 ./ファイル名
0861nobodyさん
03/01/05 10:05ID:2NV2xWH6FFFTP ですが 任意のコマンドで chmod 使えません。
どのフォルダのパーミッションをかえればいいのでしょうか
0862nobodyさん
03/01/05 10:57ID:???あそこはnobodyで動いてるから、自分でコーディングもできない利用者は
そりゃハマるだろうよ。
っつうか、そもそもPerlと何の関係が?
0863852
03/01/05 14:32ID:C4pjTkfz不要な名前を削って再度リストに並べ直す方法で巧く出来ました。
本当に助かりました。ありがとうございます。
0864nobodyさん
03/01/05 17:51ID:???いやいや漏れが言いたかったのはここまで有用な言語でありながら
変数定義と参照に関する処理系の警告機構が利用されていない
@listとして定義して$listとしてのアクセスは警告に値する。
(というか、この場合$listってどういう意味が有る?)
-wスイッチで起動すると解決するのか?
0867nobodyさん
03/01/05 23:18ID:LhQ0NrhBまだまだPerl初心者だね。
スカラー、リスト、ハッシュには、別々な名前空間(?)が存在するから、
$list @list %listは同時に使うことができる。
-wを付ければ、定義されていない変数がどーたらって警告が出るし、
use strictをつければ、コンパイル時にエラー(グローバル変数の利用)出て、
実行してくれない。から変数名を間違えたって気づくはず。
0868nobodyさん
03/01/05 23:31ID:+d9WGquVhttp://yahooo.s2.x-beat.com/linkvp/linkvp.html
0869nobodyさん
03/01/05 23:43ID:???その本の作者には何か奇妙な癖のようなものがあって、
スカラー、リスト、ハッシュの変数名に同じ名前を割り当てているケースが多くて、
1行ごとプログラムリストの解説が載っているにもかかわらず、
はじめはわけがわからなかった。
特にforeachのところでは必ずといっていいほど
foreach $hoge(@hoge){}みたいになっていた。
0870nobodyさん
03/01/06 00:07ID:???$i = $i + 10; # $iを10増やす
でつか?
0871おまけ
03/01/06 00:12ID:hDz3fIfAmy $hoge
foreach $hoge (@hoge) { }
2.
foreach my $hoge (@hoge) { }
1よりも2の方がいい。
0872nobodyさん
03/01/06 00:30ID:???例えば
価格。COMみたいな製品評価を皆でするタイプ。
http://kakaku.com/prdsearch/detail.asp?ItemCD=001004&MakerCD=30&Product=FMV%2DDESKPOWER%20C18B
あとは
http://www.jinvestor.com/cgi-bin/bbscode.cgi?c=6748
こんな感じで皆で評価できるタイプを作りたいのですが、初心者なのでよくわかりません。
無料のCGI配布してるとこ等、探しましたが、なかなか上記に見合うタイプのがないです。
何か助言お願いします。もし作り方知ってられましたら是非教えてください。お願いします。
0873nobodyさん
03/01/06 01:15ID:???まずは円グラフがどういうものかの勉強からやり直してきてください。
0874nobodyさん
03/01/06 01:32ID:???GD::Graph::pie使えば円グラフ簡単に作れるけど、GD::Graphが
使えるかどうかは管理者に聞いてくだちい。
0875869
03/01/06 01:52ID:???その本のプログラムはPerl4で書かれていたからmyは使ってなかった。
localも何故かほとんど使ってなくて、
$hogeや@hogeみたいな変数は全てグローバル変数だった。
0878nobodyさん
03/01/06 21:42ID:???アクセスがあるとHTTPの文書を返せればよいのですけれど
0882864
03/01/07 01:48ID:???調べたら簡単に出来るモジュールがあった。
http://search.cpan.org/author/GAAS/libwww-perl-5.68/lib/HTTP/Daemon.pm
そのまんまだ、
サンプルをいじって見れば、、、
0883864 2/3
03/01/07 01:49ID:???----httpd.plとして作成
use HTTP::Daemon;
use HTTP::Status;
my $d = new HTTP::Daemon(LocalPort =>$ARGV[0]) || die;
print "Please contact me at: <URL:", $d->url, ">\n";
while (my $c = $d->accept) {
my ($family, $port, $heraddr) =unpack('S n a4 x8',$c->peername);
while (my $r = $c->get_request) {
print "Accept from:".Socket::inet_ntoa($heraddr)." Port:".$port."\n";
print " User-Agent:".$$r{"_headers"}{"user-agent"}."\n";
if ($r->method eq 'GET' and (-e '.'.$r->url->path)) {
if ($c->send_file_response('.'.$r->url->path)) {
print "Get file: .".$r->url->path."\n" ;
}
} else {
print "Not Respons ".$r->method." ".$r->url->path."\n" ;
$c->send_error(RC_FORBIDDEN)
}
}
print "Close Connection :".Socket::inet_ntoa($heraddr)."\n";
$c->close;
undef($c);
}
----
0884864 3/3
03/01/07 01:50ID:???試しとして同じDIR上にaaaa.htmlを作成
perl httpd.pl 8888 で起動。8888は任意のポート番号
ブラウザからhttp://ホスト名/aaaa.html で表示を確認した。
しかし、これだけだとマルチスレッドとならない為完全な同時アクセスには対応していない。
(先のページには同時に5要求の待ち合わせが出来るように書いてある?)
以上
0885864
03/01/07 01:57ID:???ブラウザからhttp://ホスト名/aaaa.html で表示を確認した。
↓
ブラウザからhttp://ホスト名:8888/aaaa.html で表示を確認した。
0886nobodyさん
03/01/07 03:26ID:???use HTTP::Daemon;
use HTTP::Status;
my $d = new HTTP::Daemon(LocalPort =>$ARGV[0]) || die;
print "Please contact me at: <URL:", $d->url, ">\n";
while (my $c = $d->accept) {
my ($family, $port, $heraddr) =unpack('S n a4 x8',$c->peername);
while (my $r = $c->get_request) {
print "Accept from:".Socket::inet_ntoa($heraddr)." Port:".$port."\n";
print " User-Agent:".$$r{"_headers"}{"user-agent"}."\n";
if ($r->method eq 'GET' and (-e '.'.$r->url->path)) {
if ($c->send_file_response('.'.$r->url->path)) {
print "Get file: .".$r->url->path."\n" ;
}
} else {
print "Not Respons ".$r->method." ".$r->url->path."\n" ;
$c->send_error(RC_FORBIDDEN)
}
}
print "Close Connection :".Socket::inet_ntoa($heraddr)."\n";
$c->close;
undef($c);
}
0887nobodyさん
03/01/07 03:31ID:???use HTTP::Daemon;
use HTTP::Status;
my $d = new HTTP::Daemon(LocalPort =>$ARGV[0]) || die;
print "Please contact me at: <URL:", $d->url, ">\n";
while (my $c = $d->accept) {
my ($family, $port, $heraddr) =unpack('S n a4 x8',$c->peername);
my $pid = fork() ;
if ($pid!=0) {
next ;
}
else {
while (my $r = $c->get_request) {
print "Accept from:".Socket::inet_ntoa($heraddr)." Port:".$port."\n";
print " User-Agent:".$$r{"_headers"}{"user-agent"}."\n";
if ($r->method eq 'GET' and (-e '.'.$r->url->path)) {
if ($c->send_file_response('.'.$r->url->path)) {
print "Get file: .".$r->url->path."\n" ;
}
} else {
print "Not Respons ".$r->method." ".$r->url->path."\n" ;
$c->send_error(RC_FORBIDDEN);
}
}
print "Close Connection :".Socket::inet_ntoa($heraddr)."\n";
$c->close;
undef($c);
}
}
0888nobodyさん
03/01/07 14:19ID:???リファレンスとかバリバリ使ってる初心者は嫌だ。
0889nobodyさん
03/01/07 15:42ID:???一度立った事があるけど、今は残ってない。
初心者と中級者の線引きを決めないと上手くいかないよ。
tu-ka,中級者は自分で調べる事(自力で解決する術)を知ってるから、
あまりこういうところで聞かないんだよな。
0890nobodyさん
03/01/07 23:25ID:???どんどん質問してください。
当然、
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
0891nobodyさん
03/01/08 00:41ID:???if ($fname =~ /filename="(.*)"/){
my $tmp = $1;
if ($tmp =~ /\\/){
for ($fi = (length $tmp) - 1; $fi >= 0; $fi--){
if ("\\" eq substr($tmp, $fi, 1)){
$fi++;
last;
}
}
$fname = substr($tmp, $fi);
}else{
$fname = $tmp;
}
}else{
$fname="";
}
Windowsから十二名の乗客.jpgを取得しようとすると
二名の乗客.jpgとなってしまいます。
どなたか良い方法をご教授ください。
0892nobodyさん
03/01/08 03:07ID:???文字コードをECU-JPにしてその後SJISに戻すとか…
ちなみに処理は1行で
$fname =~ m/([^\\]*)"$/;
print $1;
0894えり
03/01/08 10:27ID:RjcWJJ7/アンインストールしたいのですがどうすればいいですか?
アプリケーションの追加と削除で削除したのですがperlのフォルダーが残っており
又、フォルダーの中身ものこったままです
0896nobodyさん
03/01/08 13:03ID:3CJ1U7Ioたとえば、
テキストファイルに「青」、「うんこ」とあったら
perlで五十音順に並べ替えたりできるんですか?
0898896
03/01/08 14:05ID:???少なくとも読み仮名が無ければ厳しいんですね。
http://www.mytools.net/cgitools/dictionary0.html
こういうの見つけましたが、構成ファイルが多すぎてセッティングしてません。
0900えり
03/01/08 15:39ID:RjcWJJ7/ありがとうございました!!!
0901nobodyさん
03/01/08 20:51ID:OEI4EUTrkakasiを使えば、ある程度は、正しい読み仮名を付けれるよ。
0902nodody
03/01/08 22:13ID:1Pe5J1+Nしてみたいと思っています(スキルアップのために)。
ソースの見やすさを考える以外に気をつけておいた方がいいことが
あればご教授下さい。
Perlを使用します。
(特定の記述法は特に効率が悪いからやめろとか)
0905nobodyさん
03/01/08 22:24ID:???ローカルでテストする。
これ、最優先事項。
0906nodody
03/01/08 22:26ID:1Pe5J1+Nマジで見てくださるのですか!?
じゃあ、マッハでつくります。
>>904
ありがとうございます。
気をつけてみます。
0908nobodyさん
03/01/08 22:30ID:atnjxi5O参考書に載ってなかった。おしえてくだちい。
0909nobodyさん
03/01/08 22:32ID:???0910nobodyさん
03/01/08 22:32ID:???0911nobodyさん
03/01/08 22:53ID:???0913nodody
03/01/08 23:15ID:1Pe5J1+Nいや、少なくとも数日かかると思いますが…。
意気込みってやつですよ。
>>907
use strict と-w 調べて使ってみました。
out という名前でファイルを開いたあと、
print out "文章";
と書くとoutがクォートで囲まれていないという警告が出ます。
そこで
print "out" "文章";
とするとエラーがでて動作しません。
これは無視した方がいいのでしょうか?
0914913
03/01/08 23:18ID:1Pe5J1+NError 500
CGI エラー - Content-Type ヘッダが正しくありません。
というエラーです。
0916nobodyさん
03/01/08 23:40ID:???正直、様々な原因が考えられるエラーだ。
本気でデバッグしてもらいたいなら、
スクリプトをどっかに.txtにしてアップするくらいのことはしろ。
0918>>916
03/01/09 00:39ID:ve0CCzFGにソース(すごく簡略化してありますが、エラーメッセージは同じです)
とエラーメッセージをテキストにまとめてアップしました。
よろしければご教授下さい。
0919nobodyさん
03/01/09 00:56ID:???open OUT, ">test.dat";
print OUT $text;
close (OUT);
open IN ,"<test.dat";
my @a = <IN>;
close (IN);
0920913
03/01/09 01:01ID:ve0CCzFGありがとうございました。
0921nobodyさん
03/01/09 01:07ID:???これと比べてみな。
#!/usr/local/bin/perl -w
use strict;
my $text = <<'EOE';
テスト
です
EOE
open ( OUT, '>test.dat' );
print OUT $text;
close ( OUT );
open ( IN, 'test.dat' );
my @line = <IN>;
close ( OUT );
print "Content-type: text/html\n\n";
print "<html><head><title>test</title></head><body>";
print map { $_,'<br>' } @line;
print "</body></html>";
exit;
0922nobodyさん
03/01/09 01:13ID:???Perlの文法がどうこう以前に、
変数の名前のつけ方とかをもっとしっかりさせた方がいい。
http://www.rfs.jp/sitebuilder/perl/07/01.html
http://www.rfs.jp/sitebuilder/perl/07/02.html
こんなのでも読むべし。
0923nobodyさん
03/01/09 02:51ID:j8Nogs/Uime.nu/hoge.jp/だったらime.nuのあとにhoge.jp/というフォルダを作っているんですか?
それとhttp://ime.nu/test.com/
からtest.comをどうやって取得しているんですか?
リファは無理っぽいです。
0924nobodyさん
03/01/09 03:55ID:???#!/usr/bin/perl
use strict;
my $buf_size = 256;
my $query = substr $ENV{PATH_INFO}?$ENV{PATH_INFO}:$ENV{QUERY_STRING},0,$buf_size;
$query =~ tr{-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#}{}cd;
$query =~ s{^/+}{};
print <<HTML;
Content-type: text/html;charset=Shift_JIS\r\n\r
<html><head><title>jump</title></head><b><a href=${query}>${query}</a></b><br>
別のサイトにジャンプしようとしています。宜しければ上記のリンクをクリックしてください
HTML
__END__
0926nobodyさん
03/01/09 09:35ID:???以前実験したことがありますが、IE6では約2000bytes、Netscape7では約8000bytes送れました。
ネスケでは、Apacheから
400 Bad Request
Your browser sent a request that this server could not understand.
Size of a request header field exceeds server limit.
とか
414 Request-URI Too Large
The requested URL's length exceeds the capacity limit for this server.
request failed: URI too long
とか言われますた。
0927nobodyさん
03/01/09 10:32ID:???できますか?教えてください。
0928nobodyさん
03/01/09 10:57ID:???0930初心者
03/01/09 13:46ID:???cgiページの最上部にサイト共通のヘッダを表示したかったので
<!--#include file="header.html"-->
と記載しましたが、そのままコメント文として出力されました。
この場合はどんな方法を使用すればよいのでしょうか?
0931nobodyさん
03/01/09 13:59ID:???Perlとは一切関係ないので該当スレへ行ってください。
SSIスレとかかな?
Apacheの設定スレの方がいいかな?
どのスレへ行けばいいかわからないからと言って、マルチポストはするんじゃないぞ。
0932nobodyさん
03/01/09 14:11ID:???open(IN, "<header.html");
my @header = <IN>;
close(IN);
<!--#include file="header.html"-->
の代りに
@header
とでもしておけYO
0937nobodyさん
03/01/09 15:33ID:???Perlで排他制御を行うにはシンボリックリンクをフラグとして使いましょう。
とかまじめに書いてるサイトもあるので要注意だな。
0938nobodyさん
03/01/09 15:53ID:???マルチタスクでの排他処理は要注意。
0939nobodyさん
03/01/09 16:21ID:???http://www.hoge.co.jp/hoge.cgi?str=あいうえお
こんな風に日本語を引数にしてもいいんでしょうか。
試したらうまくいったんですけど。
なんか、検索エンジンとかでは、入力するとurlエンコードって言うんですかね、
そうなって訳のわからない文字に変換されますよね。
ああいう風にしなくてもいいんですかね、という事です。
0940nobodyさん
03/01/09 16:51ID:???良し悪しで言えば・・・悪し。
フォームでGET送信すれば自動的にエンコードしてくれるけど
直リンでの固有文字はその文字コードを使用していないと文字化けまくり。
しかも文字中に&や=などの区切り文字など混じった場合に対処出来なくなる罠。。
World Wideを意識しないでローカル派なのであればどうぞ。
0941nobodyさん
03/01/09 17:15ID:???もちろん必須です。理由はRFCで決まっているから。で良いと思われ。
特定のアルファベットと記号以外を全部%16進の形式にするだけなので割と簡単です。
formのinput要素とかはブラウザが変換する義務を負うので無視して良いです。
0942nobodyさん
03/01/09 17:18ID:???なぁ?
URLエンコードしてもそのエンコード前の文字コードに対応してなかったら結局化けると思うんだけれど。
あなた論理だと英語以外送っちゃいけないことに・・・。
SJIS -URLエンコード-> URLエンコードされたSJIS -URLデコード-> SJIS
0943nobodyさん
03/01/09 17:35ID:???現状ではまだ英数文字以外のURLは送るべきではない。
http://www.hoge.co.jp/hoge.cgi?str=あいうえお
書かれていたこのURLはただの例にすぎないが
URLを伝える過程(Webだけではなく)で文字化けしていては
第三者がURLを辿っていけない状況は多分にある。
そのURL先が文字化けしているか、はまた別の話。
0944nobodyさん
03/01/09 17:46ID:???「改行が2つ続いたら、それは改行1個に置き換える」をしたいんですが、
$value =~ s/\r\n\r\n|\r\r|\n\n/\n/g;
これじゃダメっぽいです。なぜでしょうか。
0946nobodyさん
03/01/09 18:00ID:???改行とおぼしきものを一旦違うものに置き換えてからってどうかしらん?
$value ~= s/\r\n|\r|\n/<br>/g;
$value ~= s/(<br>)+/$1/g;
とか。
他の凡例は >>946
0951nobodyさん
03/01/09 18:43ID:???s/\n\n+/\n/g;
0952nobodyさん
03/01/09 18:58ID:???0953nobodyさん
03/01/09 19:02ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
レス数が950を超えています。1000を超えると書き込みができなくなります。