[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 08/25 20:07 / Filesize : 271 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:nobodyさん mailto:sage [2007/09/16(日) 19:49:43 ID:???]
Perlのコーディングで困ってる人のスレです。

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

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

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >2 以降

前スレ ttp://pc11.2ch.net/test/read.cgi/php/1180492441/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/

198 名前:nobodyさん mailto:sage [2007/09/30(日) 23:01:50 ID:???]
コーディングではないけれどPerl関連(Windows関連?)ということでお願いします。
PerlのパスをUNIX風に設定しておくことってできますか?(usr/bin/perl)
今は5.8なんですが、前に5.6の頃、実際のパスがc:\perlだとしても
この書き方(パス)で動いてた気がするんだけど・・・

199 名前:nobodyさん mailto:sage [2007/10/01(月) 00:24:00 ID:???]
5.8でも動く件

200 名前:198 mailto:sage [2007/10/01(月) 01:04:55 ID:???]
>>199
すんません、ブラウザでCGIとして起動した場合はどうですか?
関連に気づかなくて書かなかったんですが、
こちらでもプロンプトでは動くんだけど、ブラウザではアウトです。

201 名前:nobodyさん mailto:sage [2007/10/01(月) 01:27:53 ID:???]
普通にpath通せばいいんじゃね?

202 名前:nobodyさん mailto:sage [2007/10/01(月) 02:12:06 ID:???]
それはPerlじゃなく各々のhttpdの管轄
なので他の適切なスレを当たって下さい

203 名前:198 mailto:sage [2007/10/01(月) 02:14:31 ID:???]
>>201
ありトゥース!・・・が、しかし。。
恥をしのんでお尋ねしますが、パス通すって・・?
Windowsの環境変数にusr/bin/perlを追記するってことではないですよね。
い、いかように・・・

204 名前:nobodyさん mailto:sage [2007/10/01(月) 07:19:52 ID:???]
関連付けでおk。

205 名前:nobodyさん [2007/10/01(月) 09:49:39 ID:4GodVsb7]
>>180
レス遅くなってすみません。
JcodeやめてEnocdeで対応させました。

perlのバージョンは5.8、Jcodeは最初サーバーには入っていなかったので
自前で自分のディレクトリにインストールして使ってました。
それで問題なかったのですが最近サーバの方が用意してくれたらしく
そっちを読み込むようになってました。
そのサーバにインストールされた新しいJcodeで問題が発生していたと言う次第でした。
しかし新しいJcodeはなんであんなとんでもないバグを持ってるんだろうか。
UTF-8変換できなきゃJCodeの存在意義が無くなるのに。

206 名前:nobodyさん mailto:sage [2007/10/01(月) 10:32:27 ID:???]
>>203
環境変数にperl.exeのパスを通せばいい。
もしくは出来るならhttpdの方で指定するとか。



207 名前:nobodyさん mailto:sage [2007/10/02(火) 00:21:38 ID:???]
>>203
かなり無理やりな解決方法。

C:\直下にusrを作って、そこへC:\Perl\bin\(Enter連打でinstした場合)をフォルダごとコピー。
でC:\Perl\lib\とC:\Perl\site\もフォルダごとコピー。
これでC:\usr\直下に、binとlibとsiteができる。
それでcgiファイルの頭に
#!/usr/bin/perlでOK。

でも、ppmや、自前でモジュールインストールする度に、本来のC:\Perl\以下よりlibやsiteをコピー
しなければならないし、UpgradeやUninstallの時も当然ながら消してはくれません。
普通の人にはお勧めできない。

実を言うと、C:\直下にusrやtmpやvarなんかを作ってると、perlスクリプトの中からフルパスで
/var/tmp/〜とかやってファイル操作したりするのに、Unix環境といちいち書き換えなくて済むっちゅう
横着ができたりします。

208 名前:nobodyさん mailto:sage [2007/10/02(火) 00:40:37 ID:???]
activeperlで>207の方法をやるなら、perldoc reloc_perlを見ると幸せになれるかもしれない。

209 名前:nobodyさん mailto:sage [2007/10/02(火) 01:54:23 ID:???]
質問です。
LWP::UserAgentとCrypt::SSLeayを利用して、SSLでサーバと通信を行っています。
相手先の証明書が、期限切れなど信頼できない場合は、以降の処理を打ち切りたいのですが、
それを判別するにはどうすればよいですか?

210 名前:nobodyさん mailto:sage [2007/10/02(火) 02:05:01 ID:???]
LWP::Protocol::httpsにヒントがあるかもね

211 名前:180 mailto:sage [2007/10/02(火) 02:34:16 ID:???]
>>205
ん、別に少し間が開いたくらいは気にせんからいいよ。

ただ、サーバー管理者が入れたのがおかしいってのは変だね。
症状からすると、(わざわざ)pure perl のコードを選択したときのバグっぽいけど
これって fix されたんじゃなかったっけか?

それにPerl本体が 5.8なら Encodeを利用する形でJcodeは入るはずだしなあ。


212 名前:nobodyさん [2007/10/02(火) 06:25:36 ID:SbhRpQr+]
レン鯖に特定のモジュールがインスコされてるかどうか
テストするのに良い方法はないでしょうか?

213 名前:nobodyさん mailto:sage [2007/10/02(火) 07:23:13 ID:???]
@INCを総当たり

214 名前:nobodyさん mailto:sage [2007/10/02(火) 08:34:43 ID:???]
>>211
原因を特定できないのなら黙っておけ。

215 名前:nobodyさん mailto:sage [2007/10/02(火) 09:25:29 ID:???]
>>212
実際に use して調べるのが一番確実。

#!/usr/bin/perl -w
use strict qw(subs vars);
my $token = qr/[A-Z_a-z][0-9A-Z_a-z]*/;
my $module = ($ARGV[0] || '') =~ /^($token(?:::$token)*)\z/ ? $1 : '';
my $result = $module ? eval "use $module" : 'usage: .../this.cgi?Module::Name';
$result ||= $@ || qq/$module ${"${module}::VERSION"}/;
print "Content-Type: text/plain\n\n$result";
__END__

216 名前:nobodyさん mailto:sage [2007/10/02(火) 09:39:01 ID:???]
もう少し可読性を高める努力をしろよ。



217 名前:nobodyさん mailto:sage [2007/10/02(火) 10:20:20 ID:???]
>>207
インストールしなおしでその構成になるようにしたほうがいいんじゃ・・・

218 名前:nobodyさん mailto:sage [2007/10/02(火) 17:33:08 ID:???]
$^Oが取り得る値のリストってどこかにない?

219 名前:nobodyさん mailto:sage [2007/10/02(火) 19:19:35 ID:???]
>>218
search.cpan.org/~nwclark/perl-5.8.8/pod/perlport.pod#PLATFORMS

220 名前:nobodyさん mailto:sage [2007/10/02(火) 20:12:26 ID:???]
>>215
コードまで書いていただいてありがとうございました。
use <モジュール名> をevalして戻り値を確かめるわけですね。
どうもevalは使うのに躊躇してしまうんですが、こういうときは便利ですね。

>>213
@INCの中を覗くという発想も考えたことがなかったので
やってみたいと思います。

221 名前:nobodyさん [2007/10/02(火) 21:03:46 ID:2QBdgnfp]
日本語変換の問題について質問です。
コードをEUCで書いて、出力をShift_JISで行うのが目的です。

今はjcode.pl使っています。
activeperlのwinxp用でローカルチェックをしています。

JCODEというモジュールもあるそうですが、activeperlには初期状態でなかったりしますよね。
確か自分は入れた覚えもあるのですが。

オススメは何ですか?
確か他にも変換用のモジュール?はあったと思いますが。
euc,shift_jis,jisの3つだけでのオススメが知りたいです。

222 名前:nobodyさん mailto:sage [2007/10/02(火) 21:47:16 ID:???]
>>221
万能解は無いので、Encode / Jcode / jcode.pl / Unicode::Japanese を
一通り使い込んでから、好みと用途に合ったものをお選びなさいな。

223 名前:nobodyさん mailto:sage [2007/10/02(火) 23:24:50 ID:???]
いまさらjcode.pl薦めるなよ。

224 名前:221 [2007/10/02(火) 23:41:50 ID:2QBdgnfp]
jcode.plを除いて一番汎用的に使えるのはどれですか?
汎用的って言っても、サーバーやローカル環境で一番広く使えるものです。
一番広まってるモジュールといえばいいのですかね。

225 名前:nobodyさん mailto:ge [2007/10/03(水) 00:23:34 ID:???]
リストをリストのままリストの個数を得るにはどうすればいいですか?

(1,2,3,4,5)
これを配列にいれずにってことです。
grepとかでもリストが作られますよね。
そういうときにわざわざ配列に入れてから要素数を知るのが面倒です。

scalar(@{[grep{$_>0}]})
っていうのも同じくなんかなぁと思います。
普通にないなら関数作ろうと思うのですが。

226 名前:nobodyさん mailto:sage [2007/10/03(水) 00:41:53 ID:???]
scalar(@{[1,2,3,4,5]})



227 名前:nobodyさん mailto:sage [2007/10/03(水) 00:41:53 ID:???]
はあ

228 名前:nobodyさん mailto:sage [2007/10/03(水) 01:16:44 ID:???]
システムに依存する組み込み関数が使用できるかどうか
手っ取り早く調べる方法ってなにかな?

229 名前:nobodyさん mailto:sage [2007/10/03(水) 01:49:55 ID:???]
>>224
インスコしてなかったら自分で読み込むようにすればいいよ。
use libつかうなり同階層に置いてuseするなり。

230 名前:nobodyさん mailto:sage [2007/10/03(水) 01:58:30 ID:???]
>>224
Perl 5.8.x なら標準モジュールの Encode が一番広まっていると言えば
広まっている。

>>225
リストコンストラクタが幾つの要素を吐くかは、吐かせてみないと
分からない。吐かせた結果を保存しないのなら、目の前を流れていく
個数を数えるしかない。

sub count { scalar @_ } $num = count((1) x rand 10);
$num = scalar @{[ (1) x rand 10 ]};
$num = 0; ++$num for (1) x rand 10;

>>228
search.cpan.org/~nwclark/perl-5.8.8/pod/perlport.pod#FUNCTION_IMPLEMENTATIONS
に目を通した上で eval 内で実際に使用して確認。

231 名前:225 [2007/10/04(木) 00:46:59 ID:kUiVRXqk]
>>230
黒魔術みたいなコードはいけないってこのスレで教えてもらいました。
素人ながら納得しました。
ですからあなたもそういうコード書いていてはいけないと思います。
それも教える側でそれを使うと黒魔術が流行ってしまいます。

僕にはあなたのコードが何をしてるのかわかりません。

232 名前:nobodyさん mailto:sage [2007/10/04(木) 00:52:08 ID:???]
++$num for (1) x rand 10;
こんな書き方はじめてみたw
7行プログラミングとかに出てきそうだな。
だれか解説というか一般的な形にしてクレクレ


233 名前:nobodyさん mailto:sage [2007/10/04(木) 00:57:28 ID:???]
foreach((1) x rand(10)){
++$num;
}

234 名前:nobodyさん mailto:sage [2007/10/04(木) 02:06:39 ID:???]
こんなの全然黒魔術じゃないと思うが・・・

235 名前:nobodyさん mailto:sage [2007/10/04(木) 03:26:46 ID:???]
中身が1行のfor(もしくはforeach)なんて普通こう書かんか?

↑もう何年もforeachなんて書かずにforで済ませてるからスペル調べちまったw


236 名前:nobodyさん mailto:sage [2007/10/04(木) 03:33:49 ID:???]
それは分かりづらい。括弧でくくった方がいいな。
++$num for ((1) x rand 10);



237 名前:nobodyさん mailto:sage [2007/10/04(木) 06:44:51 ID:???]
これだからPerlのコードは気持ち悪いんだよな

238 名前:225 [2007/10/04(木) 07:08:27 ID:kUiVRXqk]
((1) x rand(10))
これの意味がわかりません。
1*10とどう違うんですか。
それとforに10とか与える意味も。
0..10ならわかるけど。

239 名前:nobodyさん mailto:sage [2007/10/04(木) 08:10:41 ID:???]
このスレは精神障害者ばかりですね。

240 名前:nobodyさん mailto:sage [2007/10/04(木) 08:14:34 ID:???]
>>231
その程度の実力で関数を自作するってかw


241 名前:nobodyさん mailto:sage [2007/10/04(木) 09:03:58 ID:???]
>>238
ひょっとして

>吐かせた結果を保存しないのなら、目の前を流れていく
>個数を数えるしかない。

の意味がわかってないのか?
お前が一定の個数で決め打ちしたいなら最初からそうすればいいだけ。

242 名前:nobodyさん mailto:sage [2007/10/04(木) 09:42:16 ID:???]
>> grepとかでもリストが作られますよね。
>> そういうときにわざわざ配列に入れてから要素数を知るのが面倒です。

grepに限って言えばスカラーコンテキストでは条件が真になる要素数を返すわけだが。

% perl -e 'print scalar(grep { $_ > 0 } 0,1,1,0,1)'
3


243 名前:nobodyさん mailto:sage [2007/10/04(木) 09:43:48 ID:???]
x 10ならわかるけどなんでrand(10)なん?
それがいまいちわからんぽ

244 名前:nobodyさん mailto:sage [2007/10/04(木) 10:10:16 ID:???]
いつも10だと面白くないと思って乱数にしただけで特に意味はないだろう。
そんなこと気にしてるとハゲるぞ。


245 名前:nobodyさん mailto:sage [2007/10/04(木) 10:20:27 ID:???]
>>238
perldoc.jp/docs/perl/5.8.8/perlop.pod
「Multiplicative Operators operator, multiplicative」の項

rand EXPR は 0 以上 EXPR 未満の値を返すので、整数値が欲しい際は
通常 int() を通す。但し perl が整数値を欲しがっている箇所に小数値が
与えられた場合は、自動で整数値に丸められる。

$str = substr('abcd', 0, rand 5); # '', 'a', 'ab', 'abc', 'abcd'
$var = $array[ rand @array ]; # @array 中の要素からランダム選出

x 演算子の右辺は「個数」という整数値を要求しているので、(1) x rand 5
という式は (), (1), (1,1), (1,1,1), (1,1,1,1) のいずれかになる。

>>243
>>241 が指摘してくれているように、最初から個数が分かっているなら
「リストをリストのままリストの個数を得る」必要はなく、$num = 10;
等と書いておけば済む。(1) x rand 10 という式には「要素数が不定で」
「コピペですぐ動作確認できる」リストのサンプルという以上の意味は無い。

246 名前:nobodyさん mailto:sage [2007/10/04(木) 17:45:56 ID:???]
これ何?
$|++;




247 名前:nobodyさん mailto:sage [2007/10/04(木) 18:42:58 ID:???]
出力バッファの自動フラッシュを抑制

248 名前:nobodyさん mailto:sage [2007/10/04(木) 18:43:28 ID:???]
ハニーフラッシュ!

249 名前:nobodyさん mailto:sage [2007/10/04(木) 18:44:27 ID:???]
抑制じゃねえ間違えた まあいいや

250 名前:nobodyさん mailto:sage [2007/10/04(木) 19:48:49 ID:???]
プログラミングPerlのパッケージ、オブジェクトの章を読んでも意味が
さっぱりわからなかったのですがどうすればいいですか?
みなさんはあそこに書いてあること、あっさりわかりました?

251 名前:nobodyさん mailto:sage [2007/10/04(木) 20:48:51 ID:???]
>>250
ラクダ本だけでは実感が掴みにくいような。
www.rfs.jp/sb/perl/
でも解説されてる。
同じ説明でもいろんな説明を見ると分かってくるような。

252 名前:nobodyさん mailto:sage [2007/10/04(木) 21:37:38 ID:???]
>>250
fleur.hio.jp/perldoc/mix/pod/perlboot.html

253 名前:nobodyさん mailto:sage [2007/10/05(金) 09:42:06 ID:???]
OOP 勉強したいなら Plagger に入門すればいいよ!

254 名前:nobodyさん mailto:sage [2007/10/05(金) 12:41:48 ID:???]
>>251
これは本当に超初心者向けといった感じですね。
>>252
これはわかりやすい!
>>253
こんな面白いものがあったんだ

255 名前:nobodyさん [2007/10/06(土) 12:48:34 ID:PfM+S4yJ]
foreach(){}

↑フォーイーチみたいな発音でいいですよね・・・?

256 名前:255 [2007/10/06(土) 13:03:13 ID:PfM+S4yJ]
追加お願いします。

use strict;
my %hash = qw/2 5 s 2 d 3/;
print map{"$_ " , 1}keys %hash;

>Execution of C:\test.pl aborted due to compilation errors.
これ何がいけないんですか?

print map{$_ ," ", 1}keys %hash;
こう書き換えるとエラーになりません。
activeperl5.8.1のwinxp稼動です。




257 名前:255 [2007/10/06(土) 13:23:18 ID:PfM+S4yJ]
ぐるせいや。ぐるせいや。

258 名前:nobodyさん mailto:sage [2007/10/06(土) 13:30:22 ID:???]
>>256
perldoc map見れば分かる

259 名前:255 [2007/10/06(土) 15:01:35 ID:PfM+S4yJ]
>>258
すいません。わからないです。
教えてください。

260 名前:nobodyさん mailto:sage [2007/10/06(土) 15:40:28 ID:???]
> perldoc map見れば分かる

> map - An utility to map texts from and to unicode

ねーよwww

261 名前:255 [2007/10/06(土) 17:19:29 ID:PfM+S4yJ]
どなたか>>255-256の回答お願いできませんでしょうかm(__)m

262 名前:nobodyさん mailto:sage [2007/10/06(土) 17:33:12 ID:???]
print map{("$_ ", 1)} keys %hash;

263 名前:nobodyさん mailto:sage [2007/10/06(土) 17:33:28 ID:???]
読み方なんてどーでもいいじゃん
スクールでも始める気か?

264 名前:nobodyさん mailto:sage [2007/10/06(土) 17:44:55 ID:???]
>>255
dictionary.goo.ne.jp/search.php?MT=for&kind=ej&mode=0&base=1&row=1
dictionary.goo.ne.jp/search.php?MT=each&kind=ej&mode=0&kwassist=0

これぐらいは辞書引いたらどうよ。

>>256
perldoc.jp/docs/perl/5.6.1/perlfunc.pod
> { はハッシュリファレンスとブロックの両方の開始文字なので、
> map { ... は map BLOCK LIST の場合と map EXPR, LIST の場合があります。
> perl は終了文字の } を先読みしないので、{ の直後の文字を見て
> どちらとして扱うかを推測します。通常この推測は正しいですが、
> もし間違った場合は、} まで読み込んでカンマが足りない(または多い)ことが
> わかるまで、何かがおかしいことに気付きません。 } の近くで文法エラーが出ますが、
> perl を助けるために単項の + を使うというように、{ の近くの何かを変更する必要が
> あります。

perlの構文解析までは知らん。

265 名前:nobodyさん mailto:sage [2007/10/06(土) 17:49:40 ID:???]
>>260
-fを入れることも自分で分からないようではいかんだろって意味であえて書かなかった


266 名前:255 [2007/10/06(土) 19:25:29 ID:PfM+S4yJ]
>>264
ありがとうございます。
それでフォーイーチでいいのですか?
用語なんで普通の読み方で本当にいいのかという意味の質問だったのですが。

mapの方ですが、
my $hash = {"A "=>"5" , "s"=>"2" , "d"=>"3"};
これでエラーが出ないんです。"A "でエラーが出ないのに、どうして

print map{"$_ " , 1}keys %hash;
でエラーが出て
print map{$_ ," ", 1}keys %hash;
でエラーが出ないのか。

よくわからないのですが、ハッシュリファレンスとしてエラーが出そうなのは後者だと思うんです。
カンマが足りないってことで。
そして前者はブロックとしても式としても何も問題がないと思うのです。
my $test = 1;
if("$test " , 1){
print "ok";
}
これを走らせてもエラーでないですし。
そこらへんどういうことなのかわかりますでしょうか?



267 名前:255 [2007/10/06(土) 19:28:03 ID:PfM+S4yJ]
>>265
-fってなんですか?
perl.misty.ne.jp/switch.html
ここには載ってないですが。

268 名前:nobodyさん mailto:sage [2007/10/06(土) 19:31:23 ID:???]
>>266
>それでフォーイーチでいいのですか?

関数名の読み方に正解なんてないから好きに呼べよ。
余程狂ってなきゃ誰も笑ったりしないよ。

で、結局何が問題なんだ?
結論は既に出てるし、perlの仕様について文句言われても困る。

269 名前:nobodyさん mailto:sage [2007/10/06(土) 19:32:40 ID:???]
釣りなのか読解力がないのか単なる馬鹿なのか

270 名前:nobodyさん mailto:sage [2007/10/06(土) 20:11:35 ID:???]
>>267
perldocを嫁

271 名前:nobodyさん mailto:sage [2007/10/06(土) 20:42:22 ID:???]
>>267
それはperlのオプション。

あんたが必要なのはperldocのオプションだから、
コマンドラインからperldoc perldocで確認すべし。

272 名前:255 [2007/10/06(土) 20:43:43 ID:PfM+S4yJ]
>>268
何故エラーが出るのかわからないのです。>>266にあるとおりです。
>>264さんのところの話ではつじつまが合わないのです。

>map { ... は map BLOCK LIST の場合と map EXPR, LIST の場合があります。

どちらとして評価しても
print map{"$_ " , 1}keys %hash;
これでエラーが出る説明になりません。



273 名前:255 [2007/10/06(土) 20:47:23 ID:PfM+S4yJ]
>>271
なるほどつまり-fの意味は
perldoc -f map
で、mapの仕様を確認しろって事なんですね。

274 名前:nobodyさん mailto:sage [2007/10/06(土) 20:59:58 ID:???]
>>272
{"$_ " , 1}をEXPRとして、keys %hashをLISTと解釈すると、コンマが足らない。

275 名前:255 [2007/10/06(土) 22:39:59 ID:PfM+S4yJ]
>>274
ん・・・

map EXPR, LIST
    ↑これかーー!

納得です。ずっと{}の中のコンマばかりに注目してました。{}とLISTの間のコンマのあるなしが問題だたのですね。



276 名前:nobodyさん mailto:sage [2007/10/06(土) 23:23:20 ID:???]
フォーイーチでいいんじゃないの?



277 名前:nobodyさん mailto:sage [2007/10/06(土) 23:29:56 ID:???]
perldoc に -f をつけるだけで上場できるインターネッツはここですか?

278 名前:nobodyさん mailto:sage [2007/10/07(日) 13:10:36 ID:???]
むしろ英単語の for と each をくっつけただけのものを
他になんて読めるのか知りたい

279 名前:nobodyさん mailto:sage [2007/10/07(日) 15:12:27 ID:???]
>>278
仏単語の fo と 英単語の reach をくっつけたものという可能性も検討すべきでは?


280 名前:nobodyさん [2007/10/07(日) 18:18:02 ID:LZD6O2BK]
フォーチだろ。

281 名前:nobodyさん [2007/10/07(日) 21:49:16 ID:lRWvT8wN]
ソケット使ってホームページを取得するプログラムを書いてます。
HTTP/1.1 200 OKが返ってきて、Content-lengthもある程度あるのに、
フッタが何もないことがあるのですがどうしてでしょうか。
正常に見れるサイトもあります。

use Socket;
use FileHandle;

$host = "www.ftnet.or.jp";
$path = "/FTtuusin/index.html";
$port = 80;

$ip = inet_aton($host) || &error("host($host) not found.\n");
$SOCKADDR = pack_sockaddr_in($port, $ip);
$res = &connect($host,$path,$port);
print $res;

exit;


282 名前:nobodyさん [2007/10/07(日) 21:51:37 ID:lRWvT8wN]
sub connect {
my ($res, $host, $path, $port);
$res = "";
$host = $_[0];
$path = $_[1];
$port = $_[2];

# ソケットの生成
socket(SOCKET, PF_INET, SOCK_STREAM, 0) || return -1;
# ソケットの接続
connect(SOCKET, $SOCKADDR) || return -2;
autoflush SOCKET (1);

print SOCKET "GET $path HTTP/1.1\n";
print SOCKET "Referer: $url\n";
print SOCKET "Host: $host:$port\n";
print SOCKET "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\n";
print SOCKET "Connection: close\n";
print SOCKET "\n";


foreach (<SOCKET>) {
$res .= $_;
}
close SOCKET;
return $res;
}

283 名前:nobodyさん [2007/10/07(日) 21:53:04 ID:lRWvT8wN]
レスポンスは

HTTP/1.1 200 OK
Date: Sun, 07 Oct 2007 11:31:44 GMT
Server: Apache/2.0.52 (CentOS)
Last-Modified: Fri, 16 Jun 2006 05:41:38 GMT
ETag: "4474a-daf-deccc880"
Accept-Ranges: bytes
Content-Length: 3503
Connection: close
Content-Type: text/html


284 名前:nobodyさん mailto:sage [2007/10/07(日) 23:54:11 ID:???]
フッタって何の事言ってる?

285 名前:281 mailto:sage [2007/10/08(月) 00:21:06 ID:???]
すまん、確かにフッタって言葉は違う気がしてきた。

本文の部分です。htmlが書かれてる部分。

286 名前:nobodyさん mailto:sage [2007/10/08(月) 02:57:53 ID:???]
>>281
「何もない」状態を確実に再現できる例を
用意してくれないと、デバッグの手伝いはできないよ。
少なくとも手元の環境だと>>281-282のコードとサイトは
一応動くし全部取得できている。



287 名前:nobodyさん mailto:sage [2007/10/08(月) 03:06:09 ID:???]
HTTPは正確には\nではなく\r\nでそ

288 名前:nobodyさん mailto:sage [2007/10/08(月) 03:32:19 ID:???]
HTTP/1.0にしたら解決しましたって答えは無しな。
わざわざ作るなら1.1を使う物を作ろうよ。

289 名前:nobodyさん mailto:sage [2007/10/08(月) 03:33:54 ID:???]
答えじゃないな。解決法だなorz

290 名前:nobodyさん mailto:sage [2007/10/08(月) 06:54:42 ID:???]
ちょっとここでいいのかどうかわかりませんが、質問です。
HTML-Parser-3.56を、cpan2rpmで.rpmにリビルドしようとしてたんですが、
make testの段でエラーになります。

(略・・・
t/unbroken-text......ok
t/unicode-bom........
# Failed test in t/unicode-bom.t at line 43.
# got: 'Parsing of undecoded UTF-8 will give garbage when decoding entities at t/unicode-bom.t line 24.
# Parsing of undecoded UTF-8 will give garbage when decoding entities at t/unicode-bom.t line 28.
# Parsing of undecoded UTF-16 at t/unicode-bom.t line 31.
# Parsing of undecoded UTF-16 at t/unicode-bom.t line 34.
# Parsing of undecoded UTF-32 at t/unicode-bom.t line 37.
# Parsing of undecoded UTF-32 at t/unicode-bom.t line 40.
・・・・(略)
t/unicode............ok
t/xml-mode...........ok
Failed Test Stat Wstat Total Fail Failed List of Failed
-------------------------------------------------------------------------------
t/unicode-bom.t 1 256 2 1 50.00% 1
1 test and 1 subtest skipped.
Failed 1/48 test scripts, 97.92% okay. 1/430 subtests failed, 99.77% okay.

291 名前:つづき mailto:sage [2007/10/08(月) 06:55:12 ID:???]
で自前で、tar xzf HTML-Pasrer-3.56
perl Makefile.PL
make
make test
したときは、ビルドエラーにならず、
(略...
t/xml-mode...........ok
All tests successful, 1 test and 1 subtest skipped.
Files=48, Tests=430, 5 wallclock secs ( 3.03 cusr + 1.62 csys = 4.65 CPU)
と、ちゃんと通ります。

そこで、途中経過のspecファイルと、自前make時の出力を見比べてみると、
1:cd HTML-Parser-3.56
2:grep -rsl '^#!.*perl' . |
3:grep -v '.bak$' |
4:xargs --no-run-if-empty /usr/bin/perl -MExtUtils::MakeMaker -e 'MY->fixin(@ARGV)'
5:/usr/bin/perl -MExtUtils::MakeMaker -e ' print qq|PREFIX=/var/tmp/perl-HTML-Parser-3.56-root/usr| if $ExtUtils::MakeMaker::VERSION =~ /5\.9[1-6]|6\.0[0-5]/ ' |
6:/usr/bin/perl Makefile.PL
と、cd HTML-Parser-3.56 から /usr/bin/perl Makefile.PLまでの間になにか挟まってます。(↑のはcpan2rpmで出来たspec)

多分、5行目は、仮インストールPREFIXを指定してるとこなので必要だとは思いますが、2,3,4行目でやってることの
意味がわかりません。


292 名前:つづき2 mailto:sage [2007/10/08(月) 06:56:35 ID:???]
ためしに自分で展開したHTML-Parserに、上の部分だけ(5行目以外)shスクリプトにコピペして実行してみると、
make testでエラーになりました。

さらに、2,3部分のみ実行すると、
./t/document.t ./t/marked-sect.t ./t/dtext.t ./t/msie-compat.t ./t/stack-realloc.t ./t/headparser.t ./t/crashme.t ./t/script.t
./t/filter-methods.t ./t/entities2.t ./t/unicode.t ./t/unicode-bom.t ./eg/hlc ./eg/hform ./eg/hstrip ./eg/htitle ./eg/htextsub
./eg/htext ./eg/hanchors ./eg/hdump ./eg/hrefsub ./mkpfunc ./mkhctype
と、こんな結果になるんですが、これをlist(@ARGV)として
perl -MExtUtils::MakeMaker -e 'MY->fixin(@ARGV)'に渡してるんだと思うんですが、
この'MY->fixin(@ARGV)'がなにをやってるのかがわかりません。
MakeMaker.pmやそこからuse,requireしてるモジュールから'fixin'関数を探しましたが見つからず、
また、ggってみても、cpan2rpmの途中経過を報告してるページにHITするだけで、これが何を意味してるかがわかりません。

specから、この2,3,4の部分を消してrpmbuildするとちゃんとビルドが通ることは通るんですが、
なにか重大な落とし穴があるような気がして、気持ち悪いです。


293 名前:290 mailto:sage [2007/10/08(月) 07:22:51 ID:???]
おっと、MM_Unixのマニュアルに’fixin’を発見。今までWin機にインストールされたマニュアルみても出てこんわけだ。

でも、説明の Inserts the sharpbang or equivalent magic number to a set of @files. で??
sharpbangってなんですか。
さらにUnix版のMakeMaker.pm内で検索かけても’fixin’で出てこない。
なおさら???です。

294 名前:290 mailto:sage [2007/10/08(月) 07:37:52 ID:???]
なんべんも連投すいません。
sharpbangってのはどうやらファイルの頭の
#!/usr/bin/perl ってのらしいですが、ますます訳がわかりません。
一晩寝てないんでもう頭がバグってきました。
もう寝ます。

295 名前:nobodyさん mailto:sage [2007/10/08(月) 11:25:25 ID:???]
> 一晩寝てないんでもう頭がバグってきました。

徹夜なんかする奴はばかです。

296 名前:281 mailto:sage [2007/10/08(月) 12:47:24 ID:???]
>>286

>>281は余計と思われる部分を省いて、通信に関わる部分だけを書いたんですが
それを実際に自分で動かしてみたら正常に動きました。
htmlを取得したあとの文字列処理が原因だったようです。
ご迷惑おかけしました。サンクスです。



297 名前:nobodyさん mailto:sage [2007/10/08(月) 15:03:02 ID:???]
>>290-294
そこまで辿れてるのならソース見れば?
search.cpan.org/src/MSCHWERN/ExtUtils-MakeMaker-6.36/lib/ExtUtils/MM_Unix.pm
ザラっと読んだ限りでは shebang (sharpbang) 行を自分の環境に
合うものへ修正しているみたいだけど。

298 名前:290 mailto:sage [2007/10/08(月) 21:22:47 ID:???]
昼間寝てリフレッシュしたんで、追跡再開。

>>297のおっしゃる通り、’MY->fixin(@ARGV)’で、292のテストスクリプト一式の先頭行が、
#!perl -w から #!/usr/bin/perl -w に書き換えられてる模様。
でその下に3行ほど、
eval 'exec /usr/bin/perl -w -S $0 ${1+"$@"}'
if 0; # not running under some shell

ってゆうコードが追加されてます。
それ以下、use strict・・・からの実行部分は両者(自前makeとcpan2rpm)で一字一句違いなし。
(ここからはmake testでエラーの出る t/unicode-bom.tに絞って追っています)

なんで上の追加された3行が原因か?と調べてみると、ここの部分は、どうやら一部の/bin/shが頭の
#!/usr/bin/perl(sharpbang)を認識しない時用に直接shから起動させるためのコードの模様。
これが原因ではないっぽい。
う〜んと思ってスクリプトを上から順になぞっていくと、
!!!!!っ! わかったーーー!!

このスクリプトの後半部分で、is(join("",@warn), <<EOT)以下で、warningのトラップをしてるんだけど、
うえの3行が追加されたことによって、当然実行部分の行数が3行づつ下がってるんだけど、
warningトラップの各対応行がもともとのまま(つまり実際の行数-3の)部分と比較しようとして
is()がこけてmake testがエラってたんです。

>>295
いや〜〜、やっとエラーの原因つかめてすっきりしました。これで今晩はゆっくり寝れます。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<271KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef