【Perl】初心者コーナー Part12
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん
02/04/27 23:17ID:1NNXdNspいらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
CGIの質問は【CGIだけどなんか質問ある Pert 6 】
http://pc.2ch.net/test/read.cgi/php/1019561283/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4 】
http://pc.2ch.net/test/read.cgi/php/1012839651/
過去ログ、その他の役立ち情報は>>2-10を見よう。
0802nobodyさん
02/05/21 16:50ID:???binmodeは多分やってるはずですが・・・。
以下ソースです。
$addr = (gethostbyname("www.2ch.net"))[4];
$name = pack("S n a4 x8", 2, 80, $addr);
socket(S, 2, 1, 0);
connect(S, $name);
binmode(S);
select(S); $| = 1; select(stdout);
print S "GET /back.jpg HTTP/1.0\n\n";
open(A,">>back.jpg");
while (<S>) {print A;}
close(A);
close(S);
0803nobodyさん
02/05/21 17:13ID:???ダメすぎです。
0804nobodyさん
02/05/21 17:37ID:Eo1hAg2d"ー"は日本語のハイホン
これが走らないのですが、ーはできないのですか?
0805nobodyさん
02/05/21 17:41ID:???【Perl】FAQを敢えて質問するネタ心者コーナー
に変更されますた。
0806nobodyさん
02/05/21 18:08ID:???http://www.google.co.jp/search?num=100&hl=ja&safe=off&q=%83%6E%83%43%83%7A%83%93&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
ハイフン
http://www.google.co.jp/search?num=100&hl=ja&safe=off&q=%83%6E%83%43%83%74%83%93&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
ハイプン
http://www.google.co.jp/search?num=100&hl=ja&safe=off&q=%83%6E%83%43%83%76%83%93&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
0807nobodyさん
02/05/21 18:18ID:???ttp://www.warbirds.nu/heiki/42000.htm
0809nobodyさん
02/05/21 22:04ID:???参考サイト(http://x68000.startshop.co.jp/~68user/)
書き出すファイルのファイルハンドルもbinmodeにしてね。
それとHTTPの応答は邪魔だから捨てると。
IO::SocketやLWPもチェック。
================================
use Socket;
$port = getservbyname('http', 'tcp');
$iaddr = inet_aton("www.2ch.net") or die "www.2ch.netは存在しないホストです。\n";
$sock_addr = pack_sockaddr_in($port, $iaddr);
socket(SOCKET, PF_INET, SOCK_STREAM, 0) or die "ソケットを生成できません。\n";
connect(SOCKET, $sock_addr) or die "www.2ch.netのポート$portに接続できません。\n";
select(SOCKET); $|=1; select(STDOUT);
binmode(SOCKET);
print SOCKET "GET /back.jpg HTTP/1.0\r\n";
print SOCKET "\r\n";
while (<SOCKET>){
m/^\r\n$/ and last;
}
open(FH, "> tmp.jpg");
binmode(FH);
while (<SOCKET>){
print FH $_;
}
close(FH);
0813nobodyさん
02/05/22 09:31ID:???0814nobodyさん
02/05/22 11:42ID:o5bpVYAL配列のサイズを求めたいのですが、length(@arry)や(-s @arry)で取れません。
サイズを求める記述を教えてください。
0815nobodyさん
02/05/22 12:29ID:TrskWj5Vforeach (@arry){$length = length;}
0816nobodyさん
02/05/22 12:30ID:???配列をスカラーコンテキストで評価すると要素数になります。
my @array = 0..99;
my $c = @array;
print $c;
それともこういうこと?
my @array = 0..99;
my $length = 0;
map { $length += length } @array;
print $length;
どちらにしろまともな参考書を読むのをお勧めします。
0817nobodyさん
02/05/22 14:29ID:FKXAo2H10818nobodyさん
02/05/22 14:31ID:FKXAo2H1$length=keys %hash_name;
0819nobodyさん
02/05/22 14:34ID:dip8mLbFuse MLDBM 'GDBM_File';
tie (%db, 'MLDBM', 'data.pag', O_CREAT|O_TDWR, 0644) || die;
としましたが、
MLDBM:error Second level tie failed 'ファイルもディレクトリもありません'
と出て止まってしまいます。
スカラーを格納する時は、use GDBM_File ですぐできたのですが、
このエラーの原因が解りません ;;
Diedは上記エラーの次に出ます。MLDBMは最新です。
どなかた勘所の解る方、ヒントでも教えていただけませんか。 よろしくお願いいたします。
0820nobodyさん
02/05/22 14:35ID:LbPQIjeDContent-type: text/html\n\n
書いて、HTMLを表示したものを、処理の終わりがけに消して
Location: jump_url\n\n
したいのだが、どうすればいいのれすか
0822nobodyさん
02/05/22 15:16ID:7BsbRs8K言っていることがいまいちわかりません。
参考URLがあったら、教えてくれ。
0823nobodyさん
02/05/22 15:19ID:???2重カウント防止のやつね。
0826nobodyさん
02/05/22 16:37ID:JlVHE84P0827nobodyさん
02/05/22 16:50ID:???結果表示用のフレーム(F1)とCGIの進行状況を監視するフレーム(F2)をつくる。
F1にはCGIの出力を垂れ流す。(長時間無出力でタイムアウトしないように注意)
F2ではCGIの状況を監視する監視用CGIを実行する。
監視用CGIは処理が完了するまでrefreshでループする、完了したらWindow全体をどっかに飛ばす。
0828nobodyさん
02/05/22 17:24ID:B5h8aDroPCなら飛ぶんですが。。。
0829nobodyさん
02/05/22 17:29ID:T+IRZr/d仕様です。
Locationヘッダを絶対パスじゃなく相対パスで指定してるとか?
0831nobodyさん
02/05/22 17:43ID:B5h8aDro絶対パスで指定しています。
cgiにジャンプしてるんですが、できないんでしょうか?
0833nobodyさん
02/05/22 18:23ID:a/hkqU170834nobodyさん
02/05/22 18:26ID:???> いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
>
>1:自分はこう言う事がしたい。
>2:それでこんな風にやってみたが・・・
>3:それだとこんなエラーが出て上手く行かなかった。
>
>1と3が無いと誰も答えられないよ、良い回答は良い質問から。
>一緒に勉強しましょう。
0835nobodyさん
02/05/22 18:51ID:???0836nobodyさん
02/05/22 18:59ID:dip8mLbF2ch掲示板のID付与機能は、何を見てなされているのでしょうか。
環境変数でしょうか。
cookieでしょうか。
よろしくお願いします。
0838836
02/05/22 19:08ID:dip8mLbF0839nobodyさん
02/05/23 00:03ID:wU66PY4jif (length($data{'coment'}) > 500){print 'コメントが長すぎます。'
}else{
構文チェックではOKが出るんですが、どこが間違ってるんでしょうか?
0841nobodyさん
02/05/23 00:54ID:???>これだとエラーが出ます。
エラーの内容を書けない理由でもあるんでしょうか?
>フォームの
↓ ヘッダ(Content-type)出力してますか?
>print 'コメントが長すぎます。'
0843nobodyさん
02/05/23 04:41ID:???・ ・ ・ ヽ(´ー`)ノ ・ ・ ・
0844nobodyさん
02/05/23 16:07ID:???$strtmp = htmlテキスト
の条件で
$strtmp =~ /<a*href=(\w+)>/i;
print "URL = $&\n";
のように指定しておりますが、$&が返ってきません
($1にしても同様でした)
なるべくシンプルな形で改善方法およびもっと良い方法があれば
ご教授いただけますでしょうか。
0845nobodyさん
02/05/23 16:11ID:???×a*href
○a.+?href
0846844
02/05/23 17:00ID:???ありがとうございます。
どうしようもないとこまちがってました。
ただ、直してもやはり結果が
URL =
と何も出てきません。なぜなのでしょう??
0847nobodyさん
02/05/23 17:10ID:yzRVE+W0えっとperlの関数でエクセルのMAXやMINと同じ働きをするのはないの
でしょうか?
やりたいことは、
ある配列リストの中で、一番大きな数字と一番小さな数字を抜き出したい
んです。
例えば
@AA = (1, 0, 5, 13, 8, 0, 4,);
となっていたときに、最小の0と最大の13を抜き出して、それぞれを別々の
スカラー変数に入れるようにするにはどうしたらいいのでしょうか?
(@AAの中に入る数字は、整数だけです。また@AAの中身は別の計算で出た答え
を順番にならべたものなので、可変します)
よろしくおねがいします。
0848nobodyさん
02/05/23 17:26ID:???perlfaq9
#!/usr/bin/perl -n00
# qxurl - [email protected]
print "$2\n" while m{
< \s*
A \s+ HREF \s* = \s* (["']) (.*?) \1
\s* >
}gsix;
>>847
# もっと効率いいのがあるかも
@AA = (1, 0, 5, 13, 8, 0, 4,);
@BB = sort { $a <=> $b } @AA;
$MIN = shift @BB;
$MAX = pop @BB;
0849nobodyさん
02/05/23 17:28ID:???\wは正規表現でなにを意味するかをよく考える。
そしてURLに使われる文字列に必ず入るはずのものを考える。
://
0851847です
02/05/23 18:24ID:ETJF2qc1すごい!素早い回答ありがとうございます。
そうか、sort使えば出来ますね。関数ばかりを探していたので、気がつか
なかったです。
ありがとうございました。
0852nobodyさん
02/05/23 19:27ID:9GY0TqYi0853nobodyさん
02/05/24 01:20ID:T4wzQrMy教えて下さい。
@array の中は $array[a][b][c][d]...
と言う感じになっていて、
aの部分や、bの部分など条件を変えてソートが出来るようにしたいのですが
どうゆう方法でやるのが一般的なのでしょうか?
sort関数は使えなそうなので、自分で作るしかないんでしょうか。
0854nobodyさん
02/05/24 02:25ID:???ソースは下のurlにupしておきました。ご指導お願いします。
http://www68.dns.ne.jp/~bbs2/upload3/helen/OB0008502.lzh
0855nobodyさん
02/05/24 02:28ID:???Error 500
CGI エラー - Content-Type ヘッダが正しくありません。
CGI 出力メッセージ:
Bareword found where operator expected at C:\inetpub\WWWROOT\testbbs.cgi line 33
, near "$myaction ep"
(Missing operator before ep?)
String found where operator expected at C:\inetpub\WWWROOT\testbbs.cgi line 33,
near "ep 'write'"
(Do you need to predeclare ep?)
Bareword found where operator expected at C:\inetpub\WWWROOT\testbbs.cgi line 35
, near "$mytitle ep"
(Missing operator before ep?)
String found where operator expected at C:\inetpub\WWWROOT\testbbs.cgi line 35,
near "ep ''"
(Do you need to predeclare ep?)
syntax error at C:\inetpub\WWWROOT\testbbs.cgi line 33, near "$myaction ep "
Execution of C:\inetpub\WWWROOT\testbbs.cgi aborted due to compilation errors.
ローカルでテストできる環境作れ。
http://tohoho.wakusei.ne.jp/wwwcgi6.htm
0856nobodyさん
02/05/24 02:52ID:???質問の意味が分からない。具体的に何がしたいのか書いてくれ。
aやbの条件を変えて、とかワケワカラン。
個人的にはあまり多次元にならないようにした方がいいと思う。
二次元配列で値のソートをする場合こんな感じ?
my @array;
for my $one (0..9) {
for my $two (0..9) {
$array[$one][$two] = $one * $two;
}
}
@sorted_by_value = sort { $b <=> $a } map { @{$array[$_]} } 0..$#array;
print join "\t",@sorted_by_value;
0857nobodyさん
02/05/24 03:22ID:???構文チェックだけ。
>$mytitle ep ''
↑ 4個所ほど ↓ 3個所くらい(関係無いけど、なんでbmp?)
>$myurl = "<<a href=$myurl><img src="home.bmp"></a>>"
↓ FOOTの後ろにオマケが。
>FOOT
0858854
02/05/24 04:31ID:???掲示板が表示されるようになりました
が、書き込みのところがおかしいみたいなのでまだ調整が必要なようです。
調整はひとまず寝てからにします。どうもありがとうございました。
0860nobodyさん
02/05/24 07:34ID:???&boo( @foo );
sub boo
{
パラメーターとして連想配列が
渡ってくるんだけど、
どうやって参照するのか解らないっ!
foreach $k ( keys @_ ) {
print "$k = $_{$k}\n";
}
なんか、違う・・・気が・・・する・・・
}
0861nobodyさん
02/05/24 08:04ID:???0862nobodyさん
02/05/24 09:43ID:???貴方は@fooを連想配列だと思っているのか、
それともデリファレンスの方法がわからないのにリファレンスを使おうとしているのか、
どっちですか。
>>861
File::Pathのrmtree
#!perl
use File::Spec;
rmtree [ '/', @other_path ], $is_verbose, $is_safe;
0863nobodyさん
02/05/24 10:20ID:???0865nobodyさん
02/05/24 12:16ID:RsaAAUuOSSLサーバー内のCGIからSendmailを使ってメール送信する場合
その内容は暗号化されるのでしょうか?
具体的には、アンケートフォームを、セキュアディレクトリ内で動かして
その内容をメールで送信したいのですが・・・・
0867nobodyさん
02/05/24 12:54ID:RsaAAUuOとかうたっておきながら注文内容がそのままメールで来るのって、
ぜんぜん意味が無いってこと?
0868nobodyさん
02/05/24 13:03ID:???インターネット上で勉強していたんですが、=~の意味がイマイチ分かりません。
誰か教えてください・・・。こんな初歩的な質問をしてスミマセン。
0869nobodyさん
02/05/24 13:26ID:JeawxLYiDBMってロックできないのでしょうか?
0870質問
02/05/24 13:49ID:???ActivePerl&Apacheをインストールしってプレーンテキストで文字を表示
する事は出来たんですが、HTMLをCGIスクリプトで表示させようと思ったら
エラーが出ました。
↓↓
#! c:/perl/bin/perl
# CGIヘッダーの出力
print "Content-type: text/html\n\n";
# HTMLの出力
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>Hello HTML</title></head>\n";
print "<body><p>これは、HTML文章の例です。</p></body>\n";
print "</html>";
どうしてなんでしょう?
0871nobodyさん
02/05/24 13:54ID:???> いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
>
> 1:自分はこう言う事がしたい。
> 2:それでこんな風にやってみたが・・・
> 3:それだとこんなエラーが出て上手く行かなかった。
>
> 1と3が無いと誰も答えられないよ、良い回答は良い質問から。
> 一緒に勉強しましょう。
1と2はあるが、3がないな・・・。
Winでやってるなら、
print "Content-type: text/html\r\n\r\n";
にしてみ。
0873nobodyさん
02/05/24 14:12ID:kdQeUGzgcookie自体に名前付けるとか。
2時間弱ネットさまよってますけど、見つかんないんです…。
0874nobodyさん
02/05/24 14:20ID:???もうちょっとわかりやすく。
多分できる。
0875nobodyさん
02/05/24 14:36ID:lhjaJYwp0876nobodyさん
02/05/24 14:38ID:kdQeUGzg日付が今日と同じなら同じものを表示したいんですが、
その日付と時間秒数が、名前やメールを変えると、
一緒に同じ日付でも更新されてしまいます。
0877nobodyさん
02/05/24 14:41ID:???ttp://pc.2ch.net/test/read.cgi/php/984840107/
スレ一覧の検索ぐらいする!
>876
日本語で説明してくれ。
0878nobodyさん
02/05/24 14:42ID:kdQeUGzgもうちょっと自分でがんばってみます(鬱
0879nobodyさん
02/05/24 16:07ID:ftO6wAMU拡張子は.shtmlで
<!-- #include virtual="./aaa.cgi" -->
と記述しています。
cgiを直接起動させると正しく出力しています。
パーミッションもいろいろと試してみました。
どのような対処が考えられますでしょうか?
ちなみにサーバはGMOのサーバで試してます。
ローカルではうまく動いているのですが・・・。
0880nobodyさん
02/05/24 16:33ID:???>>1
> いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
>
> 1:自分はこう言う事がしたい。
> 2:それでこんな風にやってみたが・・・
> 3:それだとこんなエラーが出て上手く行かなかった。
遠くの本屋で本を買え。
virtualで読み込むSSIが直接起動で正しく出力?
Content-type: text/htmlヘッダしか吐かないはずなのに
正しく表示されるほうがおかしくないかい?
0882nobodyさん
02/05/24 17:22ID:ftO6wAMUshtmlファイル上にCGIで出力されたテキストをのせたいので、
<table>
〜
</table>
までを出力させてます。
ブラウザでCGIを直接起動すると
タグには<table>〜</table>までちゃんと出力されてました。
shtmlから起動すると
<!-- #include virtual="./aaa.cgi" --> これがそのまま書かれているだけです。
なにか根本的に間違ってたりするのでしょうか・・・。
0883nobodyさん
02/05/24 17:43ID:???クレジットカード番号がメールに書かれていたら問題だけど、
商品名や自分の名前くらいなら別にいいんじゃない?
それすらイヤならそもそもメール使えないし。
ローカルでうまく動いてるって、ローカルサーバではなくその事?
目的のサーバでSSIのvirtualが使えるのならCGIに問題あるとしか
考えられないけど。
いずれにしてもソースを見なければ。
0887nobodyさん
02/05/24 18:42ID:???環境変数を色々使えばできるとは思うが、情報不足で答えられん。
環境変数も鯖によっては取得できなかったりもするし。
0888nobodyさん
02/05/24 18:45ID:???全自動でやることを考えるよりも、
$local_path = '..';
$full_path = 'http://〜〜/cgi-bin';
$path =~ s/$local_path/$full_path/;
と手入力でやった方が簡単だぞ。
スクリプトを配布するなら別だが、それだと環境変数でのやり方は鯖によって
可不可が変わるから難しいと言っておく。
0889885
02/05/24 18:57ID:???えっと、Socket使って他サーバーにあるHTML読み込んでそこにあるタグから
アドレスを抜き取ってファイルをダウンロードしてみようとか考えて、
http://〜の形式のアドレスではできたのですが、相対パスはいろいろ考えてみたのですが
よくわからないので相談してみたんです。
0890nobodyさん
02/05/24 19:06ID:???ソケットを使うって事はその基点となるURLはわかってるわけだろ?
だとしたら、そこから「../があったらURLを削る」、「./だったら同じフォルダ」で
URL変換を入れればいいだけじゃないのか?
0891nobodyさん
02/05/24 22:19ID:???・HTML読む
・<base>, <meta http-equiv="base">があったらそれ、無い場合はリクエストからベースURLをつくる。
・相対パスだったら連結する。.や..はhttpサーバがよきにはからってくれる。
0892nobodyさん
02/05/24 22:32ID:ftO6wAMUローカルサーバではうまくいってます。
借りてる鯖の説明にはSSIは使えるとかいてありますが、
普通のhtmlファイルやテキストファイルをインクルードしても全く反応しません。
本当にSSI使えるのかな・・・・。
0893nobodyさん
02/05/24 23:01ID:???<!-- #include virtual="./aaa.cgi" --> を
<!--#include virtual="./aaa.cgi"--> にしたら動いたりしてな
0896nobodyさん
02/05/25 03:06ID:???もし配列のデリファレンスが判らないのならば、
@{$array[0][0]}のように、@{}の中にリファレンスを書けばいいだろう。
File::Pathのrmtreeがわからないなら実際にドキュメント読んでまず試せ。
0897nobodyさん
02/05/25 03:32ID:???ネエYOとWarningが出た。CPANへ探しに行ったが見あたらん。
何ですのコレ。make test に問題が出るだけで、そのまま使え
そうな気もしますが。
0898nobodyさん
02/05/25 03:41ID:???http://search.cpan.org/doc/MSCHWERN/Test-Simple-0.44/lib/Test/More.pm
0899nobodyさん
02/05/25 03:59ID:???んやね。一生懸命、目で探してますた。ありが�d
0900nobodyさん
02/05/25 05:07ID:???0901nobodyさん
02/05/25 07:46ID:/kHlEeLMサブルーチン内からmain内でmy宣言した変数を
参照するにはどうすれば良いのでしょう。
引数で参照渡しするしかない・・・?
それとも、これってmy宣言の意味わかってない・・・?
レス数が900を超えています。1000を超えると表示できなくなるよ。