Perl 初心者コーナー Part22
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/04/15 10:15ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/
参考書籍の話題は、【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は、【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
0521nobodyさん
03/05/02 21:30ID:???はい、次の質問。
いらっしゃーい、Perlのコーディングで困ってる人のスレです。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0522nobodyさん
03/05/02 21:33ID:???それは二重ポインタだろうが。
Cでの二次元配列はメモリー上にまっすぐ並んでいるんだよ。おまえこそ分かっているのか?
>>521
スマソ もうやめる。
0523522
03/05/02 21:35ID:???これで本当に最後
0524nobodyさん
03/05/02 22:26ID:???0525nobodyさん
03/05/02 23:14ID:???>それは二重ポインタだろうが。
>>519に対してレスしてるんだよ?スレを嫁。(そして俺はスレタイを嫁。
>メモリー上にまっすぐ
なんじゃそりゃ。メモリの配置方法は関係ないだろ?
そんなこと言ったらそもそも「配列」なんて意味を持たない。
配列の各要素について等サイズのメモリが割り当てられてるのが多次元配列。
>>519の言ってる「二重配列」は配列の各要素でサイズが違うもの。お分かり?
0526nobodyさん
03/05/03 00:31ID:???確認時にtempディレクトリを作って、そこに画像を保存
画像の名前はIPからcryptしたユニークIDにすることで同じIPからの
投稿は上書き処理にすることで無効化する
一時保存の前にtempディレクトリをstatして10分以上更新がなければ
tempディレクトリごと消去することで仮に確認だけを行って一時ファイルを無作為に増やすような
嵐行為は10分以上時間が空けば無駄になる仕組み
一時ファイルは本書き込みの際に移動&リネームで本来の画像名を与える
もっといい案があればくれろ。
てかこの板ってまともな質問できるスレ少ないな
0527250
03/05/03 00:57ID:???画像の名前からMD5をとって、md5のファイル名の一時ファイルを作成。
それと同時に、md5ファイル名対応ファイルを作成。
んで本書きこみは対応表から本ファイル名にリネーム保存、んでリストから対応データを削除つーのはいかが?
0528nobodyさん
03/05/03 01:13ID:???う〜ん、10分程度の時間ならそれほど重複することもないかなとか
というか、問題は確認時に保存した一時ファイルの処理だったり
本書き込みの際に処理をさせるとなると確認だけで本書き込みに移行されない場合は
そのファイルが永遠に残ってしまうので
確認時に保存したファイルをどう削除するかスリープさせて一定時間で消去ってのも・・・
0529250
03/05/03 01:16ID:???それよりか、ファイルのバイナリデータ自体にMD5をかければ連投さけれるな・・・
例えば
12a6de24c6aec73c5c23da03c135a3c0.png
12a6de24c6aec73c5c23da03c135a3c0.txt
つーのをつくって、12a6de24c6aec73c5c23da03c135a3c0.txt
ファイル名を記述しとく。
ayaya.png
とか・・・
んで、statなりつかってリネーム、txtファイルは削除とかどうよ・・・
0530477
03/05/03 01:43ID:???ありがとうございます^^
配列を配列に入れられる物なんですね〜、、
下半分はまだ駆け出しにはよくわかんないのでメモして調べて見ます、
あと、質問です、、
-----------------------------------------
@gyou([〜間〜'day'],
[〜間〜'20030202'],
[〜間〜'20021231'],
[〜間〜'20030101'],
);
for ($i = 0; $i <= 51; $i++) {
$j += $i;
if ($head[$i][7] < $head[$j][7]){
@temp1 = @head[$i];
@head[$i] = @head[$j];
@head[$j] = @temp1;
}
}
------------------------------------------
日付順に並べかえしようと思ったんですが、1部しか並べ変わりません、、
(日付をわざわざ打つのも自動にできればいいけど無理でしょうか?、
それはそれで、
入替えってすぐ頭がこんがらがってしまって上手く構想さえ練れません、、
52列は有るんですが、変数i+1 i+2 i+3 〜〜 と52個取得して
forを51度も置いて並べ替えしなきゃだめでしょうか?、
前教えてもらった$〜[○,○]での変換がまだ上手く使えなくって・・T T
できれば助言ください〜、、
0531250
03/05/03 02:15ID:???何故に@gyou なのに@headをソートしてるにょ?
それはおいといて、もっと簡単に
@gyou([〜間〜'day'],
[〜間〜'20030202'],
[〜間〜'20021231'],
[〜間〜'20030101'],
);
@gyou = @gyou[sort{ $gyou[$a]->[7] <=> $gyou[$b]->[7]} 0 .. $#gyou ];
これでいけるよ。
0533477
03/05/03 12:42ID:???実はややこしい配列使ってるからちょっと内容変えてたらミスを TT
内容変えてた性と構文と専門用語よくわかってないせいでまったく動かずパニック、
ちょっと別の手段さぐってみます T T
ごめんなさい、、
0534477
03/05/03 12:58ID:???Sortのこと調べてたら$aと$bはSort用のなんですね、、
forで$aつかって$b += $aなんて作ってたから動かなかったみたいです、
繰返したりしなくても単品で全て入れかえるんですね、、
C++少しかじったのが仇になった気分です、
中身を宣言しなくてもいい変数が有ると覚えておきます、(_ _、
ありがとうございました〜、
0535nobodyさん
03/05/03 13:07ID:???perlでクッキー使わずにセッション管理って出来るのかな?
URLでセッションIDとかを引き継ぐのもアレだしどうしたもんかと
>1:自分はこう言う事がしたい
適当なページでログインした後はログイン状態の維持
スレ違いだったらスマソ
0536動画直リン
03/05/03 13:10ID:TBhkUsV+0538535
03/05/03 14:06ID:???やっぱそれぐらいしか無いのね・・・
出来ればhtmlはそのままでSSIぐらいで片付く方法探してたんだけど
リンク元・ホスト・IPなんかで絞る方法ってのも無理だろうなぁ・・・
0539nobodyさん
03/05/03 21:04ID:???こっちかなーっと迷ったのですが、とりあえずここで聞いてみます。
perlで書かれてる掲示板スクリプトで、書いて読む(読み込む記事数を指定できる)だけの簡単なやつをだれか知りませんか?探したんですが、どれも何か実用できるような機能がついていたので...
勉強に使います。
誰か教えてください、お願いしますm(_ _)m
0540nobodyさん
03/05/03 21:10ID:???0541動画直リン
03/05/03 21:10ID:TBhkUsV+0542途方にくれています
03/05/03 22:51ID:40KqJ28qcgiファイルに書いてたときは問題なく動いてたのですが
関数をplファイルに移し変えたとたん↓の行が動かなくなりました。
select(SOCKET); $|=1; select(stdout);
なんもエラーメッセージ出てないが、ここで処理が中断されてしまう。
なぜ?
0544nobodyさん
03/05/03 23:11ID:???0545542
03/05/03 23:19ID:40KqJ28q0546nobodyさん
03/05/03 23:25ID:???そこで処理が中断されている証拠を見せろ。
予想では君の証言が間違ってる。
恐らくスクリプトが実行すらされていないんだろう。違いますか?
0547542
03/05/03 23:35ID:40KqJ28q# URL分解
$SrcFileName =~ /http:\/\/([^:\/]*)(:([0-9]+))?(\/.*)?/;
$host = $1;
$port = ($3 ne "") ? $3 : 80;
$path = ($4 ne "") ? $4 : "/";
# 接続先情報構築
$addr = (gethostbyname($host));
$name = sockaddr_in($port,inet_aton($host));
# 接続
print "0<br>";
socket(S, PF_INET, SOCK_STREAM, 0);
print "1<br>";
connect(S, $name);
print "2<br>";
binmode(S);
print "3<br>";
select(S);
print "4<br>";
$| = 1;
print "5<br>";
select(stdout);
print "6<br>";
実行すると"3"までプリントされる。
サーバのerror.logには
DBD::mysql::st execute failed:
が出てるけど関係ないよなぁ〜?
0548542
03/05/04 00:12ID:???0549nobodyさん
03/05/04 00:14ID:???0550nobodyさん
03/05/04 00:23ID:GUaqk5wHSSIコマンドでCGI/SSIが動く他サーバにあるCGIを動かせて処理結果を
Aサーバのサイトに表示させたいんですがどうすればよいでしょうか?
exec cgiでフルパスを指定したんですが間違いですか?
他サーバにはちゃんとcontent-typeヘッダの出力はしてます。
同じサーバにおいたらちゃんと実行できたのでプログラムの処理自体はまちがってないはずなんですが
0551nobodyさん
03/05/04 00:32ID:???0552542
03/05/04 00:34ID:???>>549
まだ何も解決してないyo!
たとえば、
「Perl サブルーチン集」
ttp://www.antun.net/tips/cgi/perl.html
ここにあるget_homepageをcgiファイル上にコピペして
(すこしバグ修正して)動くようにする。
で、get_homepageを別のplファイルにカット&ペースト。
するとアラ不思議。
select(SOCKET); $|=1; select(stdout);から先が動かねええぇっ!!
なぜ?
0554nobodyさん
03/05/04 00:37ID:???まぁ、スレ違いなのだが。
0555nobodyさん
03/05/04 00:38ID:???>関数をplファイルに移し変えたとたん
だからどこか間違ってるんだろ。
一部分だけ書いてなぜって聞かれて誰がわかるってんだ。
0559542
03/05/04 00:56ID:???たとえばどういうとこが?
ちなみに
select(SOCKET); $|=1; select(stdout);
のあたりはWebページ読み込みの紋切り型の処理の一部のようだから
判る人にはわかるにちがいないと思ったんだよ〜。
もしかしたらpl化するときのFAQ的なことなんじゃないだろうかと思ったので
バグがどうとか言うより、plではselectがうまく動作しないとかいうことがあるのかな、とか
そんな話が聞きたかった。
0560nobodyさん
03/05/04 01:00ID:???>バグがどうとか言うより、plではselectがうまく動作しないとかいうことがあるのかな
そんなことはない。
どっちにしても全ソース晒さなければ答えようがない。
0561nobodyさん
03/05/04 01:26ID:???.plがCGIとして実行されていないのでは?
どうせsub get_homepageに渡す引数は$ENVから取ってるんでしょ?
空っぽだったりしてね。
0562nobodyさん
03/05/04 01:27ID:???0563連カキすまそ
03/05/04 01:30ID:???>>547を見る限り変な改造してそうだ。
print "0<br>";
の前に
print "$SrcFileName<br>";
print "$host<br>";
print "$port<br>";
print "$addr<br>";
print "$name<br>";
を付け足して.cgi,.pl両方の結果を晒してみろ。
0564542
03/05/04 01:51ID:???552のソースで実験したもの。
cgi版
address = http://www.geocities.co.jp/AnimeComic-Tone/4606/index.html
host = www.geocities.co.jp
port = 80
addr = メ兀セ
name = Pメ兀セ
pl版
address = http://www.geocities.co.jp/AnimeComic-Tone/4606/index.html
host = www.geocities.co.jp
port = 80
addr = メ兀セ
name = Pメ兀セ
0565542
03/05/04 01:53ID:???#! /usr/local/bin/perl
require "test2.pl";
use Socket;
{
# HTMLヘッダ
print "Content-type: text/html\n\n";
print '<html><head>'.
'<meta http-equiv="content-type" content="text/html;charset=x-sjis">'.
'<title>$strProject</title>'.
'</head><body>';
if ( 1 )
{
# cgi版
my $html= get_homepage('http://www.geocities.co.jp/AnimeComic-Tone/4606/index.html');
print "$html<br>";
}
else
{
# pl版
my $html= &test2'get_homepage('http://www.geocities.co.jp/AnimeComic-Tone/4606/index.html');
print "$html<br>";
}
# HTMLフッタ
print '</body></html>';
exit;
}
#この後ろにget_homepageが来る
#ただし、return値は $homepage{"body"} にしてある
0566542
03/05/04 01:55ID:???package test2;
use Socket;
$system_agent = 'unknown';
sub get_homepage
{
# get_homepage
# ただし、return値は $homepage{"body"} にしてある
}
1;
0569250
03/05/04 05:40ID:???を指定してるところを書き変えてないとかしょーも無いところでないの?
おおよそ、解ってないんであればソースを全部アプロダなりに上げるぐらいするべきでは?
スレ汚れすぎてみる気もせんわい・・・
0570nobodyさん
03/05/04 10:37ID:???コーディングミスしかないわな
0571nobodyさん
03/05/04 18:11ID:???代入された値が数字でないものを
インクリメントするというのはどういうことなのでしょうか?
0574nobodyさん
03/05/04 21:17ID:SY2E/p10use Socket;
my $host = 'live2.2ch.net';
my $port = 80;
my $path = '/news/subback.html';
〜省略〜
print SOCKET "GET $path HTTP/1.0\r\n";
print SOCKET "\r\n";
while (<SOCKET>){
m/^\r\n$/ and last; }
print "Content-type: text/html\n\n";
while (<SOCKET>){
print ($_);
}
socketでニュー速のsubback.htmlを取得したいのですが,
変なページに飛ばされてしまいます.
イラク情勢のsubback.htmlは問題なく取得できるのですが・・
どうやったらニュー速のsubback.htmlを取得できるんでしょうか?
0575nobodyさん
03/05/04 21:24ID:???GET /news/subback.html HTTP/1.1
Host: live2.2ch.net
を出してるみたいだね
0576nobodyさん
03/05/04 21:33ID:SY2E/p10print SOCKET "GET $path HTTP/1.1\r\n";
print SOCKET "Host: live2.2ch.net\r\n";
print SOCKET "\r\n";
こんなふうにしたらできるようになりました.どうもありがとうございました.
0577nobodyさん
03/05/04 21:37ID:???複数同時にやって処理を高速化したいと考えています。
forkを使って作ってみたのですが、プロセスの終了を待たずに
forkを繰り返すスクリプトでは、どうしても途中でエラーになってしまいます。
(win2kでActivePerlを使用)
forkを使う何かうまい回避方法か、
forkを使わないなるべく簡単な方法はありませんか?
0579nobodyさん
03/05/04 22:48ID:???子プロセスのプロセスIDを知ってるのが子プロセスだけなので、
自殺してもらうしかないような気がします。
っていうか、exitはさせてます。でもゴーストが溜まります。
0581nobodyさん
03/05/04 22:52ID:???Windows2000だと違うのか?
0582bloom
03/05/04 23:10ID:c6ZqX6LO0583nobodyさん
03/05/04 23:15ID:digHu/wF0584nobodyさん
03/05/04 23:22ID:???どのバージョンか知らんが、Windows版ActivePerlのforkは
いくつか注意点あるぞ。
0585nobodyさん
03/05/04 23:25ID:???孫プロセス:やりたい処理(GETでファイルをとってくる)。
親プロセス:子プロセスをwait待ちのあと、子をkill。
孫は自分の親を失ったときから孤児になり、あとは孤児院(ていうかOS)が面倒をみてくれる。
と思う。わからんけど。
0586nobodyさん
03/05/04 23:55ID:???あ、そうですね。なんか逆に思ってた。
unless ($pid = fork()) {子}
という書き方をしたからか。
>>585
forkを二段にするのは、やってみれとどこかに書いてあったので
試してみましたが、結果は同じでした。
そらそうだろうなあ、とその時は納得したのですが、
OSが孫の面倒を見てくれるという背景があるとは知りませんでした。
かなり処理系に依存しそうな話なので、うちでは無理なのかもしれません。
という感じで fork に頼るのは半ば諦めているのですが、
fork 以外の方法もお願いします。
system() で別のperlを呼んじゃうのもアリかな、と考えてますが。
0588nobodyさん
03/05/05 01:22ID:???できないかな、と思ったんですが。
そうすると、本当に例えば10のソケットを作って、
順番に様子を見ていく、みたいな処理を書かないといけないのかな。
print SOCKET
だけしといて、
<SOCKET>
は後回しにして、whileは使わずにEOFを調べる、みたいな。
0589nobodyさん
03/05/05 05:19ID:LXl5aCv3htmlで作ったForm(input,textarea,select,radio,submitとか)のデータを
受け取ったり逆にデータ手渡す方法orガイドしてるHPとかないですか?
JavaScriptでは作った事有るんですがやっぱりCGIだとかなり便利だし、
何か知ってる方いらっしゃられたら些細な事でも教えて下さい、、
0590nobodyさん
03/05/05 05:42ID:???0591nobodyさん
03/05/05 05:44ID:???とりあえずこれ
http://www.google.com/search?as_q=perl+&num=100&hl=ja&ie=UTF-8&oe=UTF-8&c2coff=1&btnG=Google+%E6%A4%9C%E7%B4%A2&as_epq=%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E6%B8%A1%E3%81%99%E6%96%B9%E6%B3%95
0592初心者です
03/05/05 10:25ID:MabQ6h0K自分が幾つか持っているHPの日記に一度に書き込みをしたいのです。
それでperlで書いてみたんですけど、
foreach $bbslist (@bbs){
print "Location: $bbslist\n\n";
}
@bbsの中身はhttp://〜から記述した内容がget形式で渡されています。
で、このソースを実行すると1つめの日記に書き込みをした時点で、
処理が終わってしまい、次の日記を書きに行ってくれません。
Locationは一度実行すると処理を終えてしまうようなことを
どこかで見かけた気がしますが、それなら、どのように書けばいいのでしょうか?
どなたか教えてください。
0593nobodyさん
03/05/05 10:36ID:???荒らしスクリプトっぽいからダメ。
0594初心者です
03/05/05 10:38ID:MabQ6h0Kああ、そうなるのですか・・・
言われてみればそうですね。
変なこと尋ねて申し訳ありませんでした。
0595nobodyさん
03/05/05 10:44ID:???これ以上は言わん。
0596bloom
03/05/05 11:10ID:lHdchtO/0597nobodyさん
03/05/05 11:25ID:???0598nobodyさん
03/05/05 11:43ID:???perlをwinにインストールしようと思い、以下のサイトに行きました。
http://www.activestate.com/
英語は全く読めないのですが、勘で進みました。
するとダウンロードの所に2種類あるではありませんか。
ActivePerl 5.8.0 build 806
Windows MSI 11.5MB
Windows AS package 11.4MB
意味が分かりません。
MSIと、ASは、なにが違うのでしょうか?
よろしくお願いします。
0599nobodyさん
03/05/05 11:47ID:???自分はスキルがあるのに実力が発揮しにくいです。
0600nobodyさん
03/05/05 11:51ID:???ここ、コーディングのスレなんだけど・・・
まぁ、MSIのほうダウンロードしといたらええよ。
で、ダブルクリックしたらインストール始まる。
ただし使ってるWindowsの種類によってはMicrosoftのサイトから
Windows Installerのファイルを落としておかないとインストールできない。
このへんのことは検索したらwindowsマシンへのActivePerlのインストール
方法を解説してるサイト見つかると思うので、あとは自力でがんばって
0602nobodyさん
03/05/05 13:11ID:eAEbJzW0ありがとうございます^^
検索下手には嬉しいHit結果です、お手数かけました〜、
0603_
03/05/05 13:25ID:???! i iノノリ)) 〉
i l l.´ヮ`ノリ <先生!こんなのがありました!
l く/_只ヽ
http://www.japan.pinkserver.com/kaorin/hankaku/hankaku07.html
http://japan.pinkserver.com/kaorin/zenkaku/index.html
http://www.japan.pinkserver.com/kaorin/hankaku/hankaku08.html
http://japan.pinkserver.com/kaorin/hankaku/hankaku10.html
http://www.japan.pinkserver.com/kaorin/hankaku/hankaku07.html
http://japan.pinkserver.com/kaorin/hankaku/hankaku03.html
http://www.japan.pinkserver.com/kaorin/hankaku/hankaku05.html
http://japan.pinkserver.com/kaorin/hankaku/hankaku01.html
http://www.japan.pinkserver.com/kaorin/hankaku/hankaku06.html
http://japan.pinkserver.com/kaorin/hankaku/hankaku04.html
http://www.japan.pinkserver.com/kaorin/hankaku/hankaku09.html
0604nobodyさん
03/05/05 14:35ID:eAEbJzW0文字列に直すと整数の桁数が不安定で1/100から切れたり1/10から切れたりします、
どうすればいいでしょうか?、
0605nobodyさん
03/05/05 14:42ID:???0606nobodyさん
03/05/05 14:56ID:???他サーバで処理させたカウントを
CGIの動かないサーバに置いてあるページ内にgifをつかって表示させるには
どうしたらいいでしょうか
0608_
03/05/05 15:06ID:???|: ̄\(∩´∀`) \ <先生!こんなのがありました!
|:在 |: ̄ ̄ U ̄:|
http://www.japan.pinkserver.com/kaorin/moe/jaz09.html
http://japan.pinkserver.com/kaorin/mona/index.html
http://www.japan.pinkserver.com/kaorin/moe/jaz10.html
http://japan.pinkserver.com/kaorin/moe/jaz08.html
http://www.japan.pinkserver.com/kaorin/moe/jaz07.html
http://japan.pinkserver.com/kaorin/moe/jaz03.html
http://www.japan.pinkserver.com/kaorin/moe/jaz05.html
http://japan.pinkserver.com/kaorin/moe/jaz01.html
http://www.japan.pinkserver.com/kaorin/moe/jaz06.html
http://japan.pinkserver.com/kaorin/moe/jaz04.html
http://www.japan.pinkserver.com/kaorin/moe/jaz02.html
0609bloom
03/05/05 15:10ID:lHdchtO/0610bloom
03/05/05 15:10ID:lHdchtO/0611nobodyさん
03/05/05 15:47ID:eAEbJzW0$aはsortのみたいに書き変えないでいい物かと思って失敗しましたけど
違うんですね、、
それにperlにも整数に直すint型が有るんですねー。(C++かじった事有)
これで小数点に悩まされずに済みます、ありがとうございました〜
0612nobodyさん
03/05/05 16:03ID:???0614nobodyさん
03/05/05 16:29ID:???無型流自由殺法
0615nobodyさん
03/05/05 17:53ID:???これまで1か0のフラグとして使っていた変数$aの真偽を判定するのに
if($a == 1)
と記述していたのですが、もしかして
if($a)
だけでも良いのでしょうか。良いのならコードがかなりすっきりするんですが…。
良い、悪いだけでも結構ですので、どなたか教えていただけませんでしょうか。
0616nobodyさん
03/05/05 17:57ID:???か
if ($a & 1){ hoge; }
が正解でつ。
0617nobodyさん
03/05/05 18:03ID:???真偽判定だけならそれでもかまわない。
ないとは思うが、
if(1) # 真
if(0) # 偽
if('') # 偽
if('0') # 偽
if('00') # 真
こういうワナもあるので注意。
0618nobodyさん
03/05/05 18:38ID:???if ($a)
とやると、$a = "0" の罠にはまる。
0619nobodyさん
03/05/05 18:40ID:???動かないスクリプトとか、普通に出回ってそうだ
■ このスレッドは過去ログ倉庫に格納されています