トップページ⇒php
1001コメント350KB

Perlコーディング初心者質問スレ Part 41

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん05/03/10 00:47:16ID:sT66OcmD
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

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

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0263nobodyさん2005/03/27(日) 02:46:04ID:???
for $x( 'a'..'Z'){
for $y('a'..'z'){
print "$x$y\n";
}
}
0264nobodyさん2005/03/27(日) 05:22:23ID:???
my $str = "zz";
while (++$str =~ /\A[a-z]{3}\z/) {
print "${str}\n";
}
0265nobodyさん2005/03/27(日) 06:05:15ID:???
>>262
for ('aaa'..'zzz') {
  print "$_ ";
}
0266nobodyさん2005/03/27(日) 10:11:31ID:???
>>263-264
ラクダ本読んでないってのは、怖いな。。
02672622005/03/27(日) 10:17:27ID:???
別に、たいしたことじゃない。
perlだけに時間さくわけにもいかんしな。
0268nobodyさん2005/03/27(日) 10:18:22ID:???
 ↑262 => 263ね。
0269nobodyさん2005/03/27(日) 15:26:22ID:???
おいおまいら、正直に言え。
人にラクダ本すすめといて自分で読んでないやついるだろ!
0270nobodyさん2005/03/27(日) 17:51:21ID:???
263と264は間違いなの?
0271nobodyさん2005/03/27(日) 17:56:41ID:???
>>270
perlだけに限らんけど、
there's more than one way to do it.

'aaa'..'zzz' つー記法はperlってこんなこともできるんだよスゲー、て紹介の仕方で良く引用されてるような。
02722642005/03/27(日) 19:02:20ID:???
>>266
すみません、読んだつもりだったんですが、「TMTOWTDI」しか頭に残ってませんでした。
0273nobodyさん2005/03/27(日) 19:30:00ID:???
>>269
読んだんだけどホンダアコードの話しか頭に残っていない
0274nobodyさん2005/03/27(日) 20:04:20ID:???
俺はボロボロになるまで読んだ。
0275nobodyさん2005/03/27(日) 21:30:34ID:???
俺は読んでボロボロになった。
0276nobodyさん2005/03/28(月) 00:13:11ID:???
持ってるけどほとんど読んでないorz
最近はphpばかりでCGIではPerl使わないしなぁ。
'aaa'..'zzz'はちょっと感動。

試しにベンチ取ってみた。
Benchmark: timing 10000 iterations of A, B...
 A: 3 wallclock secs ( 3.24 usr + 0.01 sys = 3.25 CPU) @ 3076.92/s (n=10000)
 B: 2 wallclock secs ( 2.16 usr + 0.00 sys = 2.16 CPU) @ 4638.22/s (n=10000)
A=>>263
B='aa'..'zz'
0277nobodyさん2005/03/28(月) 03:16:21ID:kLN9+ZWU
perlでHTMLのソースを表示するプログラムを作りたいんですが、
いろいろ調べたけどわかりません。
socketとか使うんすかね?
ちなみにサーバーは@niftyです。
もしやsocketのせい?
0278nobodyさん2005/03/28(月) 03:49:27ID:???
>>277
@niftyのせいです。あそこはな、(ry
0279nobodyさん2005/03/28(月) 12:03:12ID:???
>>269
10年以上昔の俺は赤ラクダを真剣に読んだ。当時はまだ読めた。
今青ラクダを2冊とも読み通せと言われるとちょっと辛い。

>>277
他サーバから http で get してきた HTML ファイルを表示したいのか?
ttp://oshiete1.goo.ne.jp/kotaeru.php3?q=1205000 を見る限り道は険しそうだが
0280nobodyさん2005/03/28(月) 13:44:59ID:???
データ重複チェックについて質問です。
ID(例えばdiaryとかtalkとか)を自由に登録・ID自体の編集もできるスクリプトになっています
実質カテゴリわけとかそんなかんじでしょうか。
open(IN,"$setup") || &error("開けない");
while (<IN>) {
($id,$disp) = split(/,/);
if ($id eq $in{'id'}) { &error('存在するIDです'); }
}
close(IN);
今は上記のようになっていますがこれですと
今編集しようとしている$setup内の行がマッチしてしまうわけで。
何か良い記述方法はないでしょうか?
0281nobodyさん2005/03/28(月) 13:55:54ID:???
意味ふめ。
open(IN,"$setup") || &error("開けない");
これなら読み込みしかできない。$setupのファイルは編集できない。
while (<IN>) {
($id,$disp) = split(/,/);
if ($id eq $in{'id'}) { $flag=1; &error('存在するIDです'); }
}
close(IN);
if ($flag == 1) {
open(OUT, ">> $setup") or die $!, "\n";
print "$id\t$disp\n";
close OUT;
とか。
0282nobodyさん2005/03/28(月) 13:56:45ID:???
もち、flock処理なども必要。
0283nobodyさん2005/03/28(月) 15:15:23ID:???
スマソ、かなり説明不足だった。
・データファイルは
2,説明,
1,説明,
 のようになっていて、複数登録が可能になっている(別サブルーチン)
・ID(変数は$id),説明($disp)をフォームから編集可能にしたい
 例えばID2を1にする場合にはエラー,2を2のまま編集する場合はエラーは出さないようにしたい
・現状だと編集中のIDがマッチするためエラーが出てしまう
・編集中のID以外をマッチさせる方法はないか?と考えたが上手い記述が見つからず
・スクリプトの記述方法は某有名所にかなり依存
・排他処理関係の関数は抜かし、他も簡略化しつつソースを晒してみた

ttp://yu.to/perl/up/id.txt
281氏の書き方だとflag==1の時、つまり同IDがある時編集可能になっちゃいますよね
0284nobodyさん2005/03/28(月) 15:21:44ID:???
ロックして行数覚えとけば?
0285nobodyさん2005/03/28(月) 15:32:19ID:???
>>283
つーか何がしたいのかわからんのだが

IDと説明を入力させるんだろ?で、

・ID が存在しなかったら登録
・ID が存在したら説明を上書き

ってことか?しかしそうなると

>・ID(変数は$id),説明($disp)をフォームから編集可能にしたい
> 例えばID2を1にする場合にはエラー,2を2のまま編集する場合はエラーは出さないようにしたい
>・現状だと編集中のIDがマッチするためエラーが出てしまう
>・編集中のID以外をマッチさせる方法はないか?と考えたが上手い記述が見つからず

ここらへんが意味不明なんだが
0286nobodyさん2005/03/28(月) 16:14:33ID:???
・絶望的に説明が下手
・要求仕様自体がバグってる

のどっちかな気がする。
0287nobodyさん2005/03/28(月) 16:36:20ID:???
>>279
赤ラクダに相当するのは、青ラクダ+クックブックだ!
つべこべ言わず4冊読破汁!
0288nobodyさん2005/03/28(月) 16:43:13ID:???
学習コストの高い言語ですね。
0289280=2832005/03/28(月) 18:04:51ID:???
レスありがとう
>・絶望的に説明が下手
たぶんこれだなorz
こちらのしたいことが明確に伝わらなくて申し訳ないです

>・ID が存在しなかったら登録
はまあ合ってるんだけど
>・ID が存在したら説明を上書き
はちょっと違うかな
ID自体も編集できるようにしたいのです(説明はたんなるオプションでしかないから)

※
ユーザーアカウントをWEB上で登録・編集・削除したい…みたいな。
イメージとしてはそんなかんじです。
そういうアカウントとかだと登録はもちろん編集する時もIDについては重複させるわけにはいかないので。

>284氏に助言いただいたこともあるのでもう一回組みなおしたりググったりしてみます
0290nobodyさん2005/03/28(月) 18:11:01ID:???
ID自体を編集、て結局新しい ID を登録してるのと変わんないんじゃないの?
0291nobodyさん2005/03/28(月) 18:29:41ID:???
>>289
当然といえば当然なんだが、idが変更されたかどうかを知るためには、
以前のid・新規idの2つがスクリプトに渡されなければならない。
0292nobodyさん2005/03/28(月) 18:34:40ID:???
ID が編集可能という時点で ID が identifier としての役目を果たさないわけで。
データ構造の設計から見直した方が良いんじゃないですかね?
0293nobodyさん2005/03/28(月) 19:55:25ID:TfqpURTV
ラクダ本まるまるUPしたらやっぱ捕まるの?
0294nobodyさん2005/03/28(月) 20:01:05ID:???
>>293
釣りか?聞かなくても奥付見りゃわかるだろ。
0295nobodyさん2005/03/28(月) 20:27:21ID:???
>>292
Larry没後50年まで生きてください。
0296nobodyさん2005/03/28(月) 20:28:05ID:???
めんご、>>293だた
0297nobodyさん2005/03/28(月) 21:23:02ID:???
>>280
やっと分かった。
IDは使われていない番号への変更が可能ということなんだ。
すっきり。

データ構造とファイルの扱いが分からないので、簡単に。
編集=新しいIDの登録+古いIDの削除。
または、IDをただのデータとして扱ってIDを書き換える。
0298nobodyさん2005/03/29(火) 17:27:53ID:???
便所の落書き
ラクダ本とやらを見に行ったらすんごく面白かった。

学生には高すぎるよorz
0299nobodyさん2005/03/29(火) 17:33:36ID:???
図書館で借りろ。俺はそうした。
03002802005/03/29(火) 19:10:54ID:???
うお。こんなにレスが…ありがとうございます本当に。
至らない所が多々ありすみませんでした。
最初からそう説明してればよかったのか。

結局、297氏の案+αで自分のやりたいことができるようになりました。
もちっとスキルアップしてきますorz
それでは、スレ汚し失礼しました。
0301nobodyさん2005/03/29(火) 21:35:34ID:???
すいません、push(@result{'minus30'}, $name);ということって不可能なのでしょうか?
03023012005/03/29(火) 21:44:57ID:???
言葉足りずでした。push(@result{'minus30'}, $name);とするとエラーが出てしまうのですが、
@result{'minus30'}->[]という無名配列にpush出来る方法ってないでしょうか?
0303nobodyさん2005/03/29(火) 21:54:38ID:???
push @{$result->{minus30}}, $name;
03043012005/03/29(火) 22:10:40ID:???
ありがとうございます。なるほどこうやれば良いんですね、出来ました!
ここら辺についての理解が怪しいので、もう一回勉強してきます〜。
0305nobodyさん2005/03/30(水) 18:04:36ID:???
スカラーのリファレンスのリストを引き数で渡すと
一気にデリファレンスしてくれる関数が欲しいのですが
他にも方法があったら教えてください。

#一括デリファレンス関数の定義
sub list:lvalue{@_?(${$_[0]},list(@_[1..$#_])):@{[]}}

#以下使用例
@a = \($a,$b,$c,$d,$e);

if($case){
(list(@a)) = qw(aa bb cc dd ee);
}else{
(list(@a)) = qw(AA BB CC DD EE);
}

print "$a,$b,$c,$d,$e";
0306nobodyさん2005/03/30(水) 19:45:23ID:???
>スカラーのリファレンスのリスト

@a = (\$a,\$b,\$c,\$d,\$e);
0307nobodyさん2005/03/30(水) 20:48:59ID:???
>>305
お前の釣り針に長靴引っ掛けるクマ・・・・・
0308nobodyさん2005/03/30(水) 22:07:20ID:???
>他にも方法があったら

sub list:lvalue{@_?(${+shift},list(@_)):@{[]}}
0309nobodyさん2005/03/30(水) 22:26:29ID:???
>>306
何が言いたいのかわからん。
0310nobodyさん2005/03/31(木) 05:57:08ID:???
長靴だけだった...クマめ...orz
0311nobodyさん2005/03/31(木) 06:09:24ID:???
>>305
プロトタイプ宣言したほうがいいんかも。
てか、lvalueってPerl5.6以上限定だね。

sub list(@):lvalue{@_?(${+shift},list(@_)):@{[]}}

@a = \($a,$b,$c,$d,$e);

if($case){
(list @a) = qw(aa bb cc dd ee);
}else{
(list @a) = qw(AA BB CC DD EE);
}

print "$a,$b,$c,$d,$e";
0312nobodyさん2005/03/31(木) 08:25:29ID:???
すいません、PerlでMSNメッセンジャー接続を行うモジュールを探してて
http://www.bot-depot.com/forums/?showforum=12
ここの
http://www.bot-depot.com/forums/index.php?act=Attach&type=post&id=629
これを落としたんですが、上手く動きません…。

とりあえず最新のActivePerl入れてXP SP1上で動かしてるだけなんですが、
他に何か必要なんでしょうか。

落としたファイルの内書き換えた場所は、echobot.plの

my $handle = '自分のhotmailアドレス';
my $password = 'パスワード';
my $admin = '自分のhotmailアドレス';

のみなんですが…。

何かアドバイスなどよろしくお願いします…。
03133122005/03/31(木) 08:27:17ID:???
ちなみに動かして表示される内容は次のようなものです。
よろしくお願いします…。

MSN 2.0 (01/21/2005) Rev: 84 - Checksum: 60068-NS18164-SB8878

SERVER ERROR : Authentication Error: No response from Passport server
ERROR : Trying to print 'PNG
' on an undefined socket
Caller trace:
0: MSN::error (MSN/Notification.pm, line 102)
1: MSN::Notification::error (MSN/Notification.pm, line 189)
2: MSN::Notification::_send (MSN/Notification.pm, line 519)
3: MSN::Notification::ping (MSN.pm, line 669)
4: MSN::do_one_loop (echobot.pl, line 44)
03143122005/03/31(木) 08:30:28ID:???
あ、あと関係ないかも知れませんがMSNmessengerのバージョンは7.0(BETA)を使用しています。
質問がスレ違いならよろしければ該当スレに誘導して頂ければありがたいです。すいません。
0315nobodyさん2005/03/31(木) 09:40:58ID:???
ImageMagickを使ったサムネイル作成機能つき画像アップローダを作ってるんですが
軽い画像(5kb程度)なら上手くいくものが重い画像(10kb以上)になると
動作しなくなってしまいます。

・アップロード&保存
  軽い画像→OK、重い画像→OK
・アップロード&保存&ImageMagick処理
  軽い画像→OK、重い画像→×
・ImageMagick処理(別スクリプト)
  軽い画像→OK、重い画像→OK

こんな感じで保存とImageMagick処理を同じスクリプトでやろうとすると
上手くいきません。画像処理の実行に関わらず、スクリプト内で
use Image::Magick;しているとダメポです。保存すらできません…。

どういう原因が考えられるでしょうか?
アドバイスお願いしますorz
0316nobodyさん2005/03/31(木) 11:49:16ID:???
>>315
情報少なすぎ。スクリプト吊るさんと。
03173152005/03/31(木) 13:11:59ID:???
後出しすみませんorz
長くなりますがよろしくお願いします。

#マルチパートデータ解析
local($div,$id,$value,$filename,$minetype,$size);
$div = <STDIN>;
$div =~ s/\s+$//;
$line = '';
until($line =~ /^$div--/){
 $id = '';
 $value = '';
 $filename = '';
 $minetype = '';
 $line = <STDIN>;
 until($line =~ /^\s*$/){
  return if eof(STDIN);
  if($line =~ /\sname="([^"]*)"/i){$id = $1;}
  if($line =~ /\sfilename="([^"]*)"/i){$filename = &trim($1);}
  if($line =~ /^Content-Type:\s+(\s+)/i){$minetype = $1;}
  $line = <STDIN>;
 }
 $size = 0;
 $maxbyte = 1024*500;
 $line = <STDIN>;
 until($line =~ /^$div/){
  return if eof(STDIN);
  $size += length($line);
  $value .= $line if ($size < $maxbyte);
  $line = <STDIN>;
 }
03183152005/03/31(木) 13:12:59ID:JNShQA97
 if($size < $maxbyte){
 $param{$id} = $value;
  $paramtype{$id} = $minetype if($minetype ne '');
 }else{
  $param{$id} = '';
  $paramtype{$id} = 'big';
 }
 $paramfile{$id} = $filename if ($filename ne '');
}

#ファイル保存
$oname = &trim($paramfile{"file"});
&jcode'convert(*oname,'euc');
$oname =~ s/\\/\//g;
$oname = substr($oname,rindex($oname,"/")+1);
$type = $paramtype{"file"};
$bindat = $param{"file"};
if($type eq 'big'){&err;}
if($bindat =~ /^\s*$/){ $chk='ok';}
elsif($bindat =~ /^GIF\d\d[a-z]/) { $chk='ok'; }
elsif($bindat =~ /^\xFF\xD8\xFF\xE0\x00/) { $chk='ok'; }
elsif($bindat =~ /^\x89\x50\x4E\x47\x0D\x0A\x1A\x0A/) { $chk='ok'; }
elsif($type =~ /image\/gif/i){ $chk='ok'; }
elsif($type =~ /image\/jpeg/i){ $chk='ok'; }
elsif($type =~ /image\/x-png/i){ $chk='ok'; }
else{ $chk='no'; }
if($chk ne 'ok'){ &err;}
$fullpath = "$imgdir$oname";
if(-f "$fullpath"){&err;}
03193152005/03/31(木) 13:13:24ID:???
if($bindat ne '' && $oname ne ''){
 unless(open(FILE, ">$fullpath")){&err;}
 binmode(FILE);
 print FILE $bindat;
 close(FILE);
 chmod (0666,$fullpath);

 use Image::Magick;
 $osize = Image::Magick->new();
 $osize->Read($fullpath);
 ($w,$h) = $osize ->Get('width','height');
##以下略
}

ageてしまったごめんなさい。
03203152005/03/31(木) 13:17:16ID:???
しかも文字化けてる……
化け部分はエラー用のサブルーチンに跳ばしてます。
0321nobodyさん2005/03/31(木) 13:28:14ID:???
サーバのエラーログは何か言ってないの?
03223152005/03/31(木) 14:02:42ID:???
>321
レスありがとうございます。
サーバ側では特にエラーは出ていないようです。

use Image::Magick;しなければちゃんと動くんですが、
↑があるとファイル保存以下をスッ飛ばしてスクリプトの
最初の行に戻ってしまうような感じです。
アップロードしたのが軽いファイルなら最後まで正常に動きます。
どこが悪いのか自分ではさっぱり…。
0323nobodyさん2005/03/31(木) 15:52:09ID:???
>>315
CGI.pm使った方が楽だと思うのだが...

使おうとしたが何か問題があってどうしても使えないとか、
CGIの解釈を自分でやる練習ならしょうがないけど。
03243152005/03/31(木) 21:35:58ID:???
こだわりがあるわけじゃないんですが
CGI.pmを使った時、パラメータ名の指定に

for($i=0; $i < $datlist; $i++){
 $hoge = $query->param("file_$i");
}

という感じに変数で指定ってできるんでしょうか?
これやると上手くいかなかったもので…。
03253152005/03/31(木) 23:39:26ID:???
ごめんなさい324は勘違いしてました。
CGI.pmだと好感触みたいなのでこれでもう少し頑張ってみます。
ありがとうございました >323
0326nobodyさん2005/03/31(木) 23:56:49ID:???
ttp://www.melma.com/mag/85/m00014785/a00000008.html
これ見てファクトリパターンかっこええなぁと思ったので、ちょっとやってみるかと思ったんですが、
> return "Message::".$classname->new(%{$arg_ref});
ってことは "Message::".$classname なクラスを事前に読み込ませておかないといけないんですよね?
まさか文頭に「読み込まれる可能性のあるクラスを全部書いておく」なんてことはないんでしょうが、
直前で use "Message::".$classname; とかやっても平気なんでしょうか?
0327nobodyさん2005/04/01(金) 00:04:45ID:???
>>326
>まさか文頭に「読み込まれる可能性のあるクラスを全部書いておく」なんてことはないんでしょうが、
ん? そうじゃないの? そのときどきにrequireする物なのかな? useはNGだお
0328nobodyさん皇紀2665/04/01(金) 13:45:49ID:JJhcoQhv
$hoge = "あいうえお-かきくけこ-さしすせそ-たちつてと";
$_ = $hoge;
if((s/-/-/g) > 10){
print "10以上";
}else{
print "10以下";
}
0329328皇紀2665/04/01(金) 13:47:15ID:???
↑$hogeにあるハイフンを数えて判定する綺麗なやり方を教えてくだされ!
0330nobodyさん皇紀2665/04/01(金) 14:14:26ID:???
>>329
教えてやろうと思ったが、2レスに渡って書いてるのと、語尾がムカついtr。
0331nobodyさん皇紀2665/04/01(金) 14:44:13ID:XdlrhN9n
perlで一般的なハンガリー記法ってありますか?
0332nobodyさん皇紀2665/04/01(金) 14:52:50ID:???
>>331
そんな記法のことはきれいさっぱり忘れてくダサい。
0333328皇紀2665/04/01(金) 15:34:10ID:???
>>330
途中で書き込んだ為、誤って2スレ分になってしまいました。
語尾によって気分を害されたのであれば申し訳御座いません。
また御機会があれば宜しくお願い致します。
0334nobodyさん皇紀2665/04/01(金) 15:39:55ID:???
>>333
>>330の語尾をよく見tr
0335nobodyさん皇紀2665/04/01(金) 15:58:02ID:???
>>329
tr/-//
0336nobodyさん皇紀2665/04/01(金) 18:00:41ID:???
>>328-329
$_ = $hoge; # ←する理由がわからん
(ふつう $_ に意識的に代入するかなぁ…?)

$count ++ while ($hoge =~ m/-/g);
とかも可能
0337nobodyさん皇紀2665/04/01(金) 19:13:27ID:???
>>336
おそらく if (($hoge =~ s/-/-/g) > 10) と書けるとは知らなかったと思われ。
0338326皇紀2665/04/01(金) 21:21:39ID:???
>>327
うお、マジすか。

DBIが似たような仕組みらしいので、ちょいと中をのぞいてみても、
どのへんでこの問題を解決しているのかサッパリです。
ソースのどの辺りで解決しているのかおわかりの方はいませんか?
0339nobodyさん皇紀2665/04/01(金) 22:48:38ID:ybs/IKbS
>>338
DBIが読み込むドライバのことを言っているのかな。
どうせuseかrequireかdoを使ってるんだろうと
あたりをつけてサーチかませばDBI.pmのサブルーチン
install_driverの中でreqireしてごにょごにょしてる
ところはすぐ見つかると思われる。

ただドライバはDBI::DBDに説明されているような構成
になってることを要求されていて一般的なモジュール
とはちといえないから、参考になるかどうかはびみょー。

0340328皇紀2665/04/01(金) 22:53:02ID:???
>>335-337
ありがとです。度忘れしてました。
tr/-//採用させていただきます。

use Benchmark;
$hoge = "あいうえお-かきくけこ-さしすせそ-たちつてと-なにぬねの-はひふへほ";
timethese(100000, {
sample1 => sub { if(($hoge =~ tr/-//) > 10){} },
sample2 => sub { if(($hoge =~ s/-/-/g) > 10){} },
});
Benchmark: timing 100000 iterations of sample1, sample2...
sample1: 0 wallclock secs ( 0.05 usr + 0.00 sys = 0.05 CPU) @ 2127659.57/s (n=100000)
sample2: 0 wallclock secs ( 0.22 usr + 0.00 sys = 0.22 CPU) @ 456621.00/s (n=100000)
0341nobodyさん皇紀2665/04/02(土) 00:17:03ID:m1Urw5SA
■言いたい放題FC東京 310■
http://ex9.2ch.net/test/read.cgi/soccer/1112223516/

瓦斯スレ突破ゲーム
瓦斯サポの突破力をみんなで身につけよう!!
※瓦斯スレにメール欄「小鹿」本文「お疲れ様でーす」と書き込む
※5分間書き込みがなかったら「突破成功」と再書き込みで成立
※なんらしかレスがあったら失敗 
※「フロント」か「朝日」の書き込みがあったら
シーチケ取り上げられるだけで済みます。
0342326皇紀2665/04/02(土) 02:28:50ID:???
>>339
仰せの通り、該当部を覗いてみると、
requireでドライバを読み込んで、
読み込まれたドライバはDynaloaderをuseして、
bootstrapで自分自身をロードしているらしい
……具体的にはワケワカメなのですが。

詰まるところ、これが動的なインポートというやつなのでしょうか?
まんまパクってやれば、いちいち「読み込まれる可能性のある(以下略」を書かなくても良いのかなぁ。
0343nobodyさん2005/04/02(土) 13:44:50ID:BYWwUZK5
プロキシでのアクセスを制限したいです。
環境変数の取得の仕方は分かります。
プロキシかどうかを判定すにはどうすれば良いのでしょうか?
0344nobodyさん2005/04/02(土) 14:12:01ID:???
簡易的な方法でいいの?
0345nobodyさん2005/04/02(土) 14:25:00ID:BYWwUZK5
レスありがとうございます。
個人的には、できるだけ強力な制限にしたいのですが、
面倒くさいようでしたら、さわりだけでも教えて頂けると助かります。
ぐぐったんですけど、検索の仕方悪いのかサーバがどうのこうのってのばっかりで…。
03463282005/04/02(土) 14:33:36ID:???
>>343
ポートの80と8080番空いてるか調べるとか。
0347nobodyさん2005/04/02(土) 14:38:36ID:???
>>343
ttp://sv2ch.baila6.jp/chk_proxy.cgi
0348nobodyさん2005/04/02(土) 14:40:29ID:BYWwUZK5
勉強不足ですみません。ポート開いてるかを見る環境変数もあったんですかぁ…。
つまり、プロキシ鯖は80、8080は大抵空いているものなのですか?
0349nobodyさん2005/04/02(土) 14:46:46ID:BYWwUZK5
ポート番号: 80 結果:接続できますた。(^o^)

…ルータで弾いてるはずなのに。やばいっすかね?
0350nobodyさん2005/04/02(土) 15:58:19ID:???
use IO::Socket;

$host = 'www.2ch.net'; #IPとかホスト名
$port = 80; #ポート番号

$socket = IO::Socket::INET->new(PeerAddr => $host, PeerPort => $port, Proto => 'tcp');

if($socket){ print 'ポート空いてるお^^'; }
else{ print '空いてないお^^'; }
0351nobodyさん2005/04/02(土) 17:11:41ID:???
>>347にあるけど2chのBBQ使って正引きするのがイイと思う
03523432005/04/02(土) 17:18:11ID:jF3LdyJO
御協力感謝です。
でも、初心者の僕には頭が混乱してくる話で…w
皆さんの御厚意を無駄にしないよう、ぐぐりまくって勉強します。
最後に、クレクレで申し訳ないんですが、良い勉強サイトあったら紹介して頂けますでしょうか。

皆さんのように教えられる立場になれるようがんばります。ありがとうございました。
0353nobodyさん2005/04/02(土) 17:46:33ID:???
それもググりまくってください。
03543432005/04/02(土) 19:10:20ID:jF3LdyJO
がんばって、ぐぐるとです。
ところで、
sub checkProxyList
{
my $RADDR = $ENV{'REMOTE_ADDR'};

$RADDR =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
my $query_addr = "$4.$3.$2.$1.niku.2ch.net";
my $addr = join('.', unpack('C*', gethostbyname($query_addr)));
if ($addr eq '127.0.0.2')
{
DispError("ERROR!","公開PROXYからの投稿は受け付けていません!!(1)");
}
return 0;
}
って、勝手に使って良いんですか?
0355nobodyさん2005/04/02(土) 21:39:07ID:???
>>354
私的利用なら問題ないでしょ。多分。俺は詳しくないからわからんけど。
でも俺なら

my $req = join(".", reverse(split(/\./, $ADDR))) . ".niku.2ch.net";
my $res = join(".", unpack("C*", gethostbyname($req)));
DispError("ERROR!","公開PROXYからの投稿は受け付けていません!!(1)") if ($res eq '127.0.0.2');

とか、

if(join(".", unpack("C*", gethostbyname(join(".", reverse(split(/\./, $ADDR))) . ".niku.2ch.net"))) eq '127.0.0.2'){
    DispError("ERROR!","公開PROXYからの投稿は受け付けていません!!(1)");
}

みたいに書くよ!
0356nobodyさん2005/04/03(日) 00:25:49ID:???
確か特定のIPからしかリクエスト利かなかったような覚えが・・・
0357nobodyさん2005/04/03(日) 01:52:06ID:???
サブルーチンのリファレンスを作るのに、引数も一緒に渡そうとしています。
例えばサブルーチンcodeのリファレンスを作るとき
sub { &code('a','b') }とすると見栄え的にあまりよくないと思うので、
\&code('a','b') や \{&code('a','b')} としてみたらエラーとなりました。
何かうまい方法は無いのでしょうか。例えば次の単純なプログラムを実行したら
Not a CODE referenceと表示されます。

$ref = \&hoho(1,\&huhu('a','b'));
&$ref;
sub hoho {
&{$_[1]};
}
sub huhu {
print $_[0].$_[1];
}
0358nobodyさん2005/04/03(日) 06:33:05ID:???
>>357
そろそろオブジェクト指向にシフトする頃合かも。
あえてクロージャで書いてみる。
$ref = create_hoho(1, create_huhu('a', 'b'));
$ref->();

sub create_hoho {
my ($dummy_arg, $sub_ref) = @_;
return sub { $sub_ref->(); }
}

sub create_huhu {
my @args = @_;
return sub { print $args[0].$args[1]; }
}
0359nobodyさん2005/04/03(日) 08:50:06ID:???
>>358
それはうまくいきますね。
オブジェクト指向ですか、勉強してみようと思います。
ありがとうございました。
0360nobodyさん2005/04/03(日) 10:02:18ID:???
while(readdir(DIR)){
    # 処理
    # のようなのは不可能なのですか?
    # この中でディレクトリの内容を $_ に読み込んで処理したいのですが、
    # 直前に処理されていた $_ の値が入ってしまいます。
}

よろしくお願いします。
0361nobodyさん2005/04/03(日) 10:54:05ID:???
while($_ = readdir(DIR)){
}
0362nobodyさん2005/04/03(日) 11:17:18ID:???
for (readdir(DIR)){
}
■ このスレッドは過去ログ倉庫に格納されています