Perl 初心者コーナー Part21
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/03/18 18:47ID:Dujz7IUF【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 9
http://pc.2ch.net/test/read.cgi/php/1041530204/
参考書籍の話題は、【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
0369nobodyさん
03/03/31 22:42ID:rFaVLjrqう〜ん見れません
0371nobodyさん
03/04/01 00:15ID:???これから24時間嘘が飛び交います。
0372nobodyさん
03/04/01 00:21ID:???0375372
03/04/01 00:34ID:???実を言うとTCP/IPプロトコルを作ったのも僕です。
もちろんFTPもですよ
0376nobodyさん
03/04/01 00:47ID:???見なかった事にしといて。
0377nobodyさん
03/04/01 01:40ID:???トップページに閉鎖しますだってよw
0378nobodyさん
03/04/01 01:50ID:???やるとはさすが・・・
0379nobodyさん
03/04/01 02:19ID:???と思ってたら発見
age
0380nobodyさん
03/04/01 03:06ID:???cryptとかpack関数とか関係あるのかなと思って調べてみたんですけど、
cryptはともかくpackって私には理解不能で・・・
2chのIDもどきの作り方、どなたか教えていただけないでしょうか?
0381nobodyさん
03/04/01 03:09ID:???0382nobodyさん
03/04/01 03:51ID:???http://pc2.2ch.net/test/read.cgi/php/1040777088/469
0384nobodyさん
03/04/01 09:18ID:???って言うソースの一部で悩んでいるのですが
$chars[$config{'char'}]{"points_$arg1"}
って何だ?・・理解できない。
何というか配列の構造(変数)?が理解できません。
脳内処理では
@chars = (%config,%etc....
%config = ('char'=>points_$arg1
のように考えてしまったのですがコレは明らかに違う様な気がします。
そもそも連想配列のkeyに連想配列を使えるのか・・?とか言う疑問が
頭の中で反乱してグチャグチャになっとります。
多分こんな説明では教える方もわからないと思いますが
配列の構成みたいなものをビシっと言って頂けるととても助かります。
4/1日ですけどマジ質問です。
0385nobodyさん
03/04/01 09:50ID:???>@chars = (%config,%etc....
>%config = ('char'=>points_$arg1
とか
>連想配列のkeyに連想配列
とか、言ってることがさっぱりんこだが、
$chars[$config{'char'}]{"points_$arg1"}
これは、
$chars[$config{char}]->{"points_$arg1"}
としたほうがわかりいいんか?
use strict;
my %config = (char => 0);
my $arg1 = 123;
my @chars = ({ points_123 => 'hage' });
print $chars[$config{char}]->{"points_$arg1"};
# or
# print $chars[$config{'char'}]{"points_$arg1"};
# same as
# print $chars[0]->{points_123};
わかた?
0386nobodyさん
03/04/01 10:08ID:???my %config = (char => 0);
my $arg1 = 123;
my @chars = ({ points_123 => 'hage' });
print $chars[$config{char}]->{"points_$arg1"};
# or
# print $chars[$config{'char'}]{"points_$arg1"};
# same as
# print $chars[0]->{points_123};
グホッ、やばいです、インダス文字に見えてきました。
しかも->の意味がわかってないし・・
教えて貰った情報を元にもう一回解説サイト回って消化できるようにしてきまつ。
わけわからんこと書いてるのにアドバイスありがとうございます。
0387nobodyさん
03/04/01 10:16ID:???1970年1月1日からの秒数に変換してくれるツールありませんか?
0388nobodyさん
03/04/01 10:44ID:???Time::Localだね
use strict;
use Time::Local;
# Usage:
# $time = timelocal($sec,$min,$hours,$mday,$mon,$year);
my $date = '99/01/22';
my @date = reverse split m|/|, $date;
$date[1]--;
my $time = timelocal(0, 0, 0, @date);
print $time;
0389246
03/04/01 13:54ID:2CNQXE4J別に他の文字とかでもいいんですか?
慣習上の問題ってやつですか?
0390nobodyさん
03/04/01 14:14ID:???カレントディレクトリに CGItemp28729 など
一時ファイルが残ってしまい消えません
#アップロードするごとに増えていく
環境はWinXP+ActivePerl v5.8.0 built for MSWin32-x86-multi-thread
です。
初歩的なところでつまずいてると思いますが
一時ファイルを残さない方法教えてください。
0391251
03/04/01 15:08ID:???関数はunlinkでできるけど安易に使うと全部消去しかねない諸刃の剣
そもそも、自分でスクリプトを書いてて何故ソースが理解出来とらんのだろうかと・・・
0393390
03/04/01 15:16ID:???いや実はUnixではきれいに消えてるんですが
知り合いにソース頂戴と言われて
あげたら環境がWindowsXPで
テンポラリファイルが消えないと文句言われました。
で自分でその環境を作ったらやはり消えない・・・
0394390
03/04/01 15:19ID:???スクリプト起動するごとにそこのディレクトリを
掃除するってことも考えたんですが
なぜ消えないのかの方が疑問になったんです。
んー なんででしょう・・・
0397390
03/04/01 15:55ID:???一応ANHTTPd Apache BJD試してみましたがどれも同じ結果に・・・
ついでに自分の書き方が悪いのかとおもって
他の方が配布しているスクリプトを使ってみても同じでした・・
うーん 気持ち悪い
0398nobodyさん
03/04/01 16:02ID:???うだうだ言ってないで、テンポラリファイルを消している部分の
ソースコードをここに示してください。
また、余計な部分は示さないでください。
0400nobodyさん
03/04/01 16:23ID:???結局、僕は解決できなかったので諦めました。
04014 ◆6ykHaReEM2
03/04/01 16:28ID:2ihQy5Ooforeach (readdir(DIR)) {
/^CGItmp/ && unlink;
}
closedir(DIR);
これでだめだろうか?
04024 ◆6ykHaReEM2
03/04/01 16:32ID:2ihQy5OoUpload終わって、プログラム終了前に↑してもだめなのですか?
04034 ◆6ykHaReEM2
03/04/01 16:34ID:2ihQy5Oo暇あればWindowsで試してみます。
0404390
03/04/01 16:34ID:???それがいちばんよさそうですね
UPしたやつはロックかかってるのかわかりませんが消えません
以前にUPしたやつは消えました。
これって激しく既出の問題だったんでしょうか?
0405nobodyさん
03/04/01 16:40ID:???一時ファイルって作成する場所って自分で指定できないんでしょうか?
0406nobodyさん
03/04/01 16:44ID:???これだと特定のアドレスは阻止できてもhotmail全部は無理みたいです
どうすればいいんでしょうか?
if ($FORM{'EMAIL'} eq "****\@hotmail.com"){ push @err,'・このメールアドレスは使えません'; }
0407390
03/04/01 16:44ID:???原因はファイルハンドルを閉じて無かったことでした。
$filename = $query->param('File');
この状態で <$filename>が存在してしまうので
close($filename);
の一行入れるだけで問題なく一時ファイルは消えるようになりました
くだらん質問してスマソ!!
0409nobodyさん
03/04/01 16:49ID:zxB6PEfRhttp://homepage3.nifty.com/digikei/
0411nobodyさん
03/04/01 16:55ID:???でいいかな?
0414nobodyさん
03/04/01 17:48ID:???の中の ftpcontrol.pl を解読中なのですが、300行目付近の
($boundary) = $content_type =~ /boundary="([^"]+)"/; #";
の行がよくわかりません。左端の括弧が必要な理由と、
右端の #"; が何かよくわかりません。どなたかわかりますか?
0415nobodyさん
03/04/01 18:18ID:???0416nobodyさん
03/04/01 18:30ID:???てのは、なんだかわからん。
普通に考えれば、# 以降は行末までコメントだけど・・・。
0417414
03/04/01 18:40ID:???調べが足りませんでした。
しかし、右端の #"; は謎ですね。コメントにしか見えないんだけど、
何の意味をこめてコメントにしたのかわからないし、
タイプミスだとしても、タイプミスで「"」を入力するヤシがいるのかと問いたい。
0418nobodyさん
03/04/01 18:58ID:???そこへ飛んだりできるエディタが多く存在するのだよ。
そういうエディタで /boundary="([^"]+)"/ なんて行が
あると、クォートの数が揃わんで難儀するのだよ。
0421nobodyさん
03/04/01 19:11ID:???0422bloom
03/04/01 19:13ID:xVxahWvN0423nobodyさん
03/04/01 23:05ID:jYJDEp5Aforeach $line (@template){
$line =~ s/aaa/AAA/;
$hoge = $hoge . $line;
}
print "@template : $hoge";
こうすると、$template[0]自体がAAAになってしまいます。
違うのです。配列の要素は変わらないで欲しいんです。
っていうか、配列の要素に対して置き換えしてるわけじゃないのに
どうして配列の要素の$template[0]が置き換えされちゃうんでしょうか。
$lineに対して処理をしてるのに。
0424423
03/04/01 23:09ID:???配列の要素が変更されてると困っちゃうんです。
0425nobodyさん
03/04/01 23:23ID:???思いっきり配列の要素を変更しようとしています。
) foreach $line (@template){
) $line =~ s/aaa/AAA/;
) $hoge = $hoge . $line;
) }
foreach ループ内では、$line は配列@templateの各要素にセットされます。
$line を変更すると、配列の要素が変更できる、ということです。
変更したくない場合は、一旦別な変数にコピーしてから、扱いましょう。
「コピーする」「セットする」という用語がみそです。
0426nobodyさん
03/04/01 23:34ID:???0427nobodyさん
03/04/01 23:51ID:???0428nobodyさん
03/04/01 23:55ID:wgIEAtF8@arr = ('aaa', 'bbb', 'ccc');
$str = 'zzz';
foreach $str (@arr) {
print $str . "\n";
}
print $str . "\n";
最後に表示される1行は、zzz だよ。
今日は4月1日だな。(笑)
0430nobodyさん
03/04/02 01:09ID:???でも今の、foreachの中で$strが@arrの各要素のエイリアスになる、ということには関係ない。
0432nobodyさん
03/04/02 01:22ID:???0434nobodyさん
03/04/02 04:29ID:???直ぐに出てくるのですが記号等は検索しても何故か引っかからないのでお手上げ状態に
なってしまいます。
0435nobodyさん
03/04/02 05:15ID:???0437nobodyさん
03/04/02 08:30ID:???0438
03/04/02 14:38ID:sWPLndkw投票CGIの多重投票防止をクライアントのNICのMACアドレスを取得
することで実現できないかと考えたのですが、実現可能でしょうか?
また実現可能な場合、どのようなコードを書けばいいのでしょうか?
ご教授ください。
0439nobodyさん
03/04/02 14:53ID:???0441438
03/04/02 15:06ID:sWPLndkwそれでもIPやクッキーよりもましだと思うので、方法があるのでしたら
ご教授ください。
0442nobodyさん
03/04/02 15:09ID:???同じネットワーク内だけじゃ?
0443nobodyさん
03/04/02 15:28ID:???0444nobodyさん
03/04/02 15:35ID:???NetPacket::ARPとか使えば出来そうだけど、
敷居が高すぎてやったことないね。
それよりもネットワーク系超ニガテだけどさ、
442さんの言うとおりイーサネットまででしょ。
多分つかまえられるのはてめーんとこのルータのMACアドレスまでだね。
他はIP+ポートのソケット単位でルーティングされてるんだろうから。
リモートのIPじゃだめなの?
よって、クッキーたべさせなさい。
0445
03/04/02 15:35ID:sWPLndkwクライアント側でipconfig実行してその値を取得できればいいんですけど
そのやり方がどうも分からなくて、Win32::OLE使えば出来そうなんですけど。
http://member.nifty.ne.jp/hippo2000/perltips/Win32/OLE.htm
0447nobodyさん
03/04/02 15:39ID:???0448
03/04/02 15:39ID:sWPLndkwIPだと再ダイアルアップしたらだめだし、クッキーもその都度消されちゃったら
だめなんでMACアドレスならいいかなと。それにルーターまででも桔梗いいん
じゃないかと・・・
0449446
03/04/02 15:39ID:???0450nobodyさん
03/04/02 15:43ID:???だから、てめーんとこのルータまでだって。
ルータ製品を変えない限り何万回でも何億回でも
同じMACアドレスしかつかまえられないでしょ。
そんなクッキーよりIPより無用なものがよかったら
NetPacket::ARP使いなさいってこった。
0451nobodyさん
03/04/02 15:45ID:???果てしなくガクブル系セキュリティホールだな。
しかも、OLEなんて全然関係ないし。
0452nobodyさん
03/04/02 18:04ID:4v5aHOPP<!--here-->
みたいなコメントの部分をCGIで置き換えて出力する部分を作成しています(Perl)。
この、HTMLファイルを、CGIのディレクトリと違うディレクトリにいれたんですが、
これだと、HTMLが画像のリンクなどを含んでいた場合、困ったことになります。
HTMLがCGIから出力された時に、相対パスで入っていると、画像が表示されません。
ホームページの編集ソフトなどで作成したHTMLを、指定フォルダにアップする形にしたいので、
すべての画像パスを絶対パスにするとかそういう解決策は無しで、何かいい方法はないでしょうか?
一般的な解決策などがあるのでしょうか?
0454nobodyさん
03/04/02 18:12ID:???0455nobodyさん
03/04/02 18:21ID:???その相対パスの指定が間違っているだけではありませんか。
結果的に正しい相対パスになるように、書いておくしかないのではないでしょうか。
0456nobodyさん
03/04/02 19:13ID:???なんで<!--here-->は置き換えられてIMGタグは置き換えられないのかと・・・ry
0457nobodyさん
03/04/02 20:21ID:???##################################
$openimg = "svropen.gif";
$closeimg = "svrclose.gif";
open IN, "<$iptext" or die "ERROR:ipファイルが開けません!";
$ipdata = <IN>;
close IN;
if ($ipdata == "close") {
$dispimg = $closeimg;
&dispimage;
} else {
$dispimg = $openimg;
&dispimage;
}
sub dispimage{
print "Content-type: image/gif\n\n";
open IMG, "$dispimg" or die "ERROR:imgファイルが開けません!";
binmode IMG;
binmode STDOUT;
while (<IMG>){
print STDOUT $_;
}
close IMG;
}
__END__
これのopenimgとcloseimg両方を文字で表したいのですがどうすればいいですか?
0458nobodyさん
03/04/02 20:31ID:???0460457
03/04/02 20:43ID:???##############ファイル設定#################
$iptext = "ip.txt";
$open = "あ";
$close = "い";
###########################################
if ($ipdata == "close") {
print "$open\n";
}
else {
print "$close\n";
}
これでは表示されないのかなぁ?
0461nobodyさん
03/04/02 21:04ID:???0462nobodyさん
03/04/02 21:08ID:???open IN, "<$iptext" or die "ERROR:ipファイルが開けません!";
$ipdata = <IN>;
close IN;
を消してんだよ。
0463457
03/04/02 21:10ID:???これさ、imgタグで表示させるから、文字にしても意味ないか、、、
0464nobodyさん
03/04/02 21:15ID:???0465nobodyさん
03/04/02 21:19ID:???0466457
03/04/02 22:19ID:???今やろうとしているのは、
まずip.txtを読みにいって、IPがあれば、「公開」、空白だと「非公開」
(ip.txtの更新はNoDNSというフリーソフトでやってます)
というふうにして、HTMLに表示するCGIを作りたいのですが、どうでしょうか?
0468457
03/04/02 22:38ID:yhPO3ktu$ex=0;
open(FILE,"ip.txt");
while(<FILE>){
if(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/){
$ex++;
}
}
close(FILE);
if($ex){
&settion;
}else{
&unsettion;
}
sub settion
{
print "content-type: text/html\n\n";
print "<html><head><title>公開</title></head>\n";
print "<body><h1>公開</h1></body>\n";
print "</html>\n";
exit;
}
sub unsettion
{
print "content-type: text/html\n\n";
print "<html><head><title>非公開</title></head>\n";
print "<body><h1>非公開</h1></body>\n";
print "</html>\n";
exit;
}
■ このスレッドは過去ログ倉庫に格納されています