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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/08/06(水) 22:54:32ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

お勧めサイトは >2 以降

前スレ http://pc11.2ch.net/test/read.cgi/php/1203935151/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0002nobodyさん2008/08/06(水) 22:56:09ID:???
ム板Perlスレより 1 of 2

[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: ttp://www.site-cooler.com/kwl/perl/

[本]
リャマ: ttp://www.oreilly.co.jp/books/4873111269/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/

[オンラインマニュアル] (追加)
最新のドキュメント: ttp://search.cpan.org/dist/perl-5.8.8/
perl5.8.xのドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: ttp://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: ttp://www.cpan.jp/search.cgi
perldoc.jp: ttp://www.perldoc.jp/
Perldoc.com: ttp://www.perldoc.com/
0003nobodyさん2008/08/06(水) 22:56:31ID:???
ム板Perlスレより 2 of 2

[モジュール]
CPAN.com: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/

[テクニック]
Perlメモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perlの小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm

[Perl5.8Unicodeメモ]
ttp://www.pure.ne.jp/~learner/program/Perl_unicode.html
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0004nobodyさん2008/08/07(木) 00:19:06ID:???
say >>1 '乙';
0005nobodyさん2008/08/07(木) 07:15:27ID:1CE8PFPT
Webページを取得するため、LWP::UserAgentを使用したのですが、
ある特定のページでは途中で切れてしまいます。

データサイズも大きくないのに、
なぜ途中で止まってしまうのかがわかりません。。

#!/usr/local/bin/perl
use strict;
use warnings;
use LWP::UserAgent;

my $url = 'http://human7.2ch.net/wmotenai/subback.html';
my $browser = LWP::UserAgent->new;
my $resp = $browser->get($url, 'User-Agent' => 'test');

print $resp->content;
0006nobodyさん2008/08/07(木) 11:10:29ID:qpI1q2Ei
http://www.rescue.ne.jp/cgi/htpasswd/makepwd-des/
このような暗号化するサイトをつくりたいです。
暗号化に使用するスクリプトは知り合いに作ってもらいました
sub enc_string{
my ($key, $string) = @_;
my @map = (('A' ... 'Z'), ('a' ... 'z'), ('0' ... '9'), '+', '&');
my @key = unpack('C*', $key);
my $str = '';
my @x = map { int(rand(200)) } (0 ... 2);
@key = map {$x[$_] ^ $key[$_]} (0 ... 2);
while($string ne ''){
my $n = substr($string, 0, 3, '');
my @n = unpack('C3', $n);
map{$n[$_] ^= ($key[$_])} (0 ... 2);
@key = unpack('C3', $n);
@key = map {$x[$_] ^ $key[$_]} (0 ... 2);
my $a = $n[0] >> 2;
my $b = (($n[0] & 3) << 4) | ($n[1] >> 4);
my $c = (($n[1] & 15) << 2) | ($n[2] >> 6);
my $d = $n[2] & 63;
$str .= $map[$a] . $map[$b] . $map[$c] . $map[$d];
}
my $a = $x[0] >> 2;
my $b = (($x[0] & 3) << 4) | ($x[1] >> 4);
my $c = (($x[1] & 15) << 2) | ($x[2] >> 6);
my $d = $x[2] & 63;
return $str.'<>'.$map[$a].$map[$b].$map[$c].$map[$d];
}

これをcgiとして上記のサイトのように出力するようにするにはどうすればいいでしょうか?
0007nobodyさん2008/08/07(木) 11:45:30ID:???
$aとか$bはsortで使うから使わないほうが良いよ。
0008nobodyさん2008/08/07(木) 12:07:07ID:???
>>7
知り合いに作ってもらったのですが、触り方がわかりません。
同じ出力でできるのでしたら教えてください
0009nobodyさん2008/08/07(木) 12:17:13ID:???
知り合いに作ってもらえばいいだろw
0010nobodyさん2008/08/07(木) 12:19:33ID:???
いや今海外に居て連絡がつかないんです
なのでこちらでお願いしているんです
0011nobodyさん2008/08/07(木) 12:23:08ID:???
しらんがな
0012nobodyさん2008/08/07(木) 12:31:41ID:???
さすがに変数を変更出来ないのは初心者以前の問題じゃんw
最低限の知識ぐらいは身につけてから来た方がいい。
0013nobodyさん2008/08/07(木) 12:36:34ID:???
>>12
復号等は諦めますので、暗号化だけはしたいんです
初心者以前なのは承知の上で今回だけお願いします
0014nobodyさん2008/08/07(木) 12:49:13ID:???
>>13
それに合ったスレがあるでしょう。
0015nobodyさん2008/08/07(木) 13:00:58ID:???
>>14
すみません、誘導お願いします
0016nobodyさん2008/08/07(木) 13:03:10ID:???
お断りします。
0017nobodyさん2008/08/07(木) 13:17:02ID:???
>>15
今度だけだよ。次からは自分で探してね。

# アドバイスが欲しい場合:
★三 【 スクリプト改造工房 PART 9 】 ★三
http://pc11.2ch.net/test/read.cgi/php/1143834740/

# 誰かにやってもらいたい場合:
【 スクリプト改造依頼スレ 】(丸投げ) part7
http://pc11.2ch.net/test/read.cgi/php/1216419170/
0018nobodyさん2008/08/07(木) 13:37:45ID:???
>>17
本当にすみません、ご迷惑おかけしました
0019nobodyさん2008/08/07(木) 14:03:46ID:???
>>5
$resp->is_successと$resp->status_lineを確認してみれ。
0020nobodyさん2008/08/07(木) 16:26:22ID:???
Template Toolkitで、HTMLを書くときに、セレクトメニューやラジオボタンの
初期値を設定するにはどうすればいいのでしょうか。
CGI.pmでセレクトメニューを作ったときのようにdefault値を指定できる仕組みがあると便利なのですが。
現状では一つ一つにifで

<select name="test">
<option value="test_1" [% IF test_1 %]selected="selected"[% END %]>test1<option>
<option value="test_2" [% IF test_2 %]selected="selected"[% END %]>test2<option>
<option value="test_3" [% IF test_3 %]selected="selected"[% END %]>test3<option>
</select>

こんな感じでやってるのですが、他に効率のいい方法があったら教えてください。
0021nobodyさん2008/08/07(木) 16:55:07ID:???
>>5
っ[LWP::Debug*]
0022nobodyさん2008/08/07(木) 16:57:22ID:???
>>20 HTML::FillInFormを通すとかダメ
0023nobodyさん2008/08/07(木) 18:43:16ID:???
>>20
selectする要素がDBに入ってるから、
ループでまわして、同じ値だったらselectedするようにしてる。
0024nobodyさん2008/08/07(木) 21:07:08ID:???
[% USE FillInForm %]
[% FILTER fillinform fdat => stash %]
<select name="test">
<option value="test_1">test1<option>
<option value="test_2">test2<option>
<option value="test_3">test3<option>
</select>
[% END %]
002552008/08/07(木) 21:41:11ID:1CE8PFPT
不思議〜!

print "content=" . $resp->content . "\n"; #これだとHTML全部表示される
#print $resp->content; #これだと途中で止まる

ちなみに、
>>19
is_success=1
status_lilne=200 OK
でした。(^^

>>21
出力結果がよくわからず。。まだまだ勉強が足りないようです。。
0026nobodyさん2008/08/07(木) 22:25:18ID:???
バッファリングかよ。どういう出力先のどういう問題だ?
0027nobodyさん2008/08/08(金) 02:06:15ID:???
my $c = 9250; #JISコードの"あ"
print Jcode->new(chr $c,"jis")->utf8,"\n";
print Jcode->new("あ","jis")->utf8, "\n";

異なる結果が表示されるのですが、同じ結果はどうすれば得られますか。
0028nobodyさん2008/08/08(金) 02:32:39ID:???
JISの 'あ' は10進9250じゃなさそうな気がする
0029nobodyさん2008/08/08(金) 02:35:43ID:???
ごめんなさい。>>28撤回。
0030nobodyさん2008/08/08(金) 02:36:27ID:???
chr が返すのは Ascii だから、そこの時点で終わってる
0031202008/08/08(金) 11:08:08ID:???
>>22
こんなものがあったのですね。とても便利そうなので使ってみます。
>>23
ふむふむ
>>24
具体的な使い方ありがとうございます!

みなさんどうもありがとうございました。
0032nobodyさん2008/08/08(金) 16:57:50ID:???
>>27
use Jcode;

my $c = 9250; #JISコードの"あ"
print Jcode->new(pack('A3n', "\e\$B", $c), "jis")->utf8, "\n";
print Jcode->new('あ',"jis")->utf8, "\n";


# ぶっちゃけJISではencoding使わないとスクリプトなんて書いてられないんだが、
# 言及してないところを見ると、後釣りなんだろうか。
0033nobodyさん2008/08/08(金) 17:45:59ID:???
'あiう' が5バイト程で済みそうな感覚のまま気軽に試しただけじゃないかな。
本気でエスケープシーケンスにまみれてたら元質問が出てこない。
0034nobodyさん2008/08/08(金) 18:32:27ID:???
>>32
ありがとう。助かりました。
003552008/08/08(金) 23:12:59ID:6d/Auy3a
>>26
Windows Vista 、Active Perl v5.6.1、コマンドプロンプト
でHTMLをGETしてprint出力させたところ、下記結果になりますた。。
print $hoge ; #一定サイズで止まる
print "Content=" . $hoge ; #全部出力される
0036nobodyさん2008/08/10(日) 01:25:04ID:???
>>35
うーん、再現しないなあ。ページは >>5 のソースのアレでいいんだよね?
他に再現するページはあります?
0037nobodyさん2008/08/10(日) 08:17:20ID:???
>>35
Perl 5.8.8 on Linux
Perl 5.8.8 on WinXP

にて再現しませんでした。
003835=52008/08/10(日) 12:35:43ID:FnBuPKsd
2chのレス900くらいのスレッドを読み込んでも、途中で止まります。

↓こんな感じ
c:\Perl>gethtml03.pl
 〜省略〜
は意識してないんですが、これで(野村
c:\Perl>

下記のようにファイル出力させると正常に</html>まで書き込んでいました。
open(OUT, ">gethtml.txt");
print OUT $resp->content ;
close(OUT);

Perlの問題ではなくて、コマンドプロンプトが勝手にセッションを切ってしまうのかもしれません。。
■ このスレッドは過去ログ倉庫に格納されています