Perlコーディング初心者質問スレ Part 58
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/08/06(水) 22:54:32ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
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プログラミング講座: 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:???[モジュール]
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
0005nobodyさん
2008/08/07(木) 07:15:27ID:1CE8PFPTある特定のページでは途中で切れてしまいます。
データサイズも大きくないのに、
なぜ途中で止まってしまうのかがわかりません。。
#!/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このような暗号化するサイトをつくりたいです。
暗号化に使用するスクリプトは知り合いに作ってもらいました
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:???0009nobodyさん
2008/08/07(木) 12:17:13ID:???0010nobodyさん
2008/08/07(木) 12:19:33ID:???なのでこちらでお願いしているんです
0011nobodyさん
2008/08/07(木) 12:23:08ID:???0012nobodyさん
2008/08/07(木) 12:31:41ID:???最低限の知識ぐらいは身につけてから来た方がいい。
0016nobodyさん
2008/08/07(木) 13:03:10ID:???0017nobodyさん
2008/08/07(木) 13:17:02ID:???今度だけだよ。次からは自分で探してね。
# アドバイスが欲しい場合:
★三 【 スクリプト改造工房 PART 9 】 ★三
http://pc11.2ch.net/test/read.cgi/php/1143834740/
# 誰かにやってもらいたい場合:
【 スクリプト改造依頼スレ 】(丸投げ) part7
http://pc11.2ch.net/test/read.cgi/php/1216419170/
0020nobodyさん
2008/08/07(木) 16:26:22ID:???初期値を設定するにはどうすればいいのでしょうか。
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>
こんな感じでやってるのですが、他に効率のいい方法があったら教えてください。
0023nobodyさん
2008/08/07(木) 18:43:16ID:???selectする要素がDBに入ってるから、
ループでまわして、同じ値だったらselectedするようにしてる。
0024nobodyさん
2008/08/07(木) 21:07:08ID:???[% 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 %]
00255
2008/08/07(木) 21:41:11ID:1CE8PFPTprint "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:???print Jcode->new(chr $c,"jis")->utf8,"\n";
print Jcode->new("あ","jis")->utf8, "\n";
異なる結果が表示されるのですが、同じ結果はどうすれば得られますか。
0028nobodyさん
2008/08/08(金) 02:32:39ID:???0030nobodyさん
2008/08/08(金) 02:36:27ID:???003120
2008/08/08(金) 11:08:08ID:???こんなものがあったのですね。とても便利そうなので使ってみます。
>>23
ふむふむ
>>24
具体的な使い方ありがとうございます!
みなさんどうもありがとうございました。
0032nobodyさん
2008/08/08(金) 16:57:50ID:???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:???本気でエスケープシーケンスにまみれてたら元質問が出てこない。
00355
2008/08/08(金) 23:12:59ID:6d/Auy3aWindows Vista 、Active Perl v5.6.1、コマンドプロンプト
でHTMLをGETしてprint出力させたところ、下記結果になりますた。。
print $hoge ; #一定サイズで止まる
print "Content=" . $hoge ; #全部出力される
003835=5
2008/08/10(日) 12:35:43ID:FnBuPKsd↓こんな感じ
c:\Perl>gethtml03.pl
〜省略〜
は意識してないんですが、これで(野村
c:\Perl>
下記のようにファイル出力させると正常に</html>まで書き込んでいました。
open(OUT, ">gethtml.txt");
print OUT $resp->content ;
close(OUT);
Perlの問題ではなくて、コマンドプロンプトが勝手にセッションを切ってしまうのかもしれません。。
0039nobodyさん
2008/08/10(日) 13:54:06ID:e4jqjZel#!C/:perl/bin/perl
として指定していますがこれをを
#!usr/bin/perl
で動かしたいのですが良い方法はありますか?
0040nobodyさん
2008/08/10(日) 14:25:28ID:???試してからもう一度聞きに来てくださいな。
あ、あたち、……待ってゆかやぁ!
# ちなみにそれ、どっちもたぶん間違っているけれど釣りなのか typo なのか。
0041nobodyさん
2008/08/10(日) 15:25:56ID:???まあ、何も書いてなくても動くけど。
004236
2008/08/11(月) 21:00:27ID:???何度やっても、ぴったり再現するようなら、以下の原因が考えられます。
- Windows Vista 搭載 cmd.exe(?) の新機能
- Windows Vista の新機能
- Perl もしくは Module のバージョンが古臭い
当方は以下の環境で相変わらず再現せず:
Perl 5.10.0, (nyacus.exe|cmd.exe|command.com), Windows XP Professional SP2
0043nobodyさん
2008/08/13(水) 12:07:37ID:???どのように記述すればいいでしょうか?
$str = 'XXX,YYY';
$aa = $ARGV[0]; # (.+),(.+)
$bb = $ARGV[1]; # $2-$1
$str =~ s/$aa/$bb/; # YYY-XXX になるようにしたい
0044nobodyさん
2008/08/13(水) 12:41:40ID:???ただ$1-$2は"で囲わないと、変数展開しないと思う。
0045nobodyさん
2008/08/13(水) 23:35:35ID:???そのまま $1-$2 に置換されます。
できないのでしょうか。
0047nobodyさん
2008/08/14(木) 04:07:34ID:???忘れずに。
0048nobodyさん
2008/08/14(木) 09:24:20ID:???eを使わなくても変数展開するが、その場合は一度しかしない。
$2-$1だと引き算が行われるので、"で囲って変数展開が行われるようにする。
0049nobodyさん
2008/08/14(木) 15:40:50ID:???最終的にこうしました。
$str = 'XXX,YYY';
$aa = $ARGV[0]; # (.+),(.+)
$bb = $ARGV[1]; # $2-$1
$bb = "\"".$bb."\"" if($bb =~ /[\$]\d/);
$str =~ s/$aa/$bb/ee; # YYY-XXX になるようにしたい
0050nobodyさん
2008/08/16(土) 16:45:37ID:oiXxzTPYMIME::Parserを使用してメールを処理したいのですが
my $parser = MIME::Parser->new();
$parser->parse(\*STDIN);
のparseを呼び出した時点で処理がとまってしまいました。
無限ループではまったかのようにとまっています。
falseも返ってきません。
ネットを調べても、上記の状態でとまったという事例を
発見することができませんでした。
原因として考えられることはどのようなことでしょうか?
0051nobodyさん
2008/08/16(土) 16:54:48ID:???0052nobodyさん
2008/08/16(土) 17:02:50ID:oiXxzTPYwhile(<STDIN>){
$buf .= $_;
}
my $entity = $parser->parse($buf);
ありがとうございます。
この形でよろしいでしょうか?
上の形にしても現状の解決はできませんでした。
新しくわかったこととして、メールに画像を添付した際に
とまってしまっていることがわかりました。
ファイル添付をしていないメールならば
$parser->parse()を抜けてきているようです。
0053nobodyさん
2008/08/16(土) 17:46:56ID:???0054nobodyさん
2008/08/16(土) 18:02:12ID:oiXxzTPY正直今ひとつわかっていないと思います。
どこか、大前提のようなものが抜けているのでしょうか?
0055nobodyさん
2008/08/16(土) 23:56:28ID:???qmail 使ったことないんでわからんけど。
0056nobodyさん
2008/08/17(日) 01:13:43ID:???0057nobodyさん
2008/08/17(日) 03:07:34ID:???.qmail 使わずに添付ファイルの受信は出来てるのかとか、色々問題を切り分けてみてよ
あと止まる直前か直後の文字コードを、正常に受信出来たときのコードで憶測してみるとか
まだまだやることはあるんじゃないの?
0058nobodyさん
2008/08/17(日) 04:50:10ID:???そのファイルが展開できるかどうかをチェックしてみればいいんじゃないのか。
あと、エラートラップは、きっちり書いて。
0059nobodyさん
2008/08/18(月) 10:53:12ID:???質問者が特定場所以降のドロップっ意味で止まってるって書いてるならやる意義は十分ありますが…
0060nobodyさん
2008/08/18(月) 11:46:03ID:???0061nobodyさん
2008/08/18(月) 12:32:24ID:???0063nobodyさん
2008/08/19(火) 18:06:14ID:???項目を数字で指定しない方向で同等の処理は出来ないでしょうか。
お願いします。
' VB+oo4o
OraDynaset = OraDataBase.DbCreateDynaset(SQL_STR, 0&)
aaa = OraDynaset.Fields("AAA").Value
# Perl+oo4o
my OraDynaset = OraDataBase.DbCreateDynaset(SQL_STR, 0)
$aaa = $OraDynaset->Fields('AAA')->{Value};
結果:Can't call method "Fields" on an undefined value at ***.
$aaa = $OraDynaset->{Fields('AAA')}->{Value};
結果:Undefined subroutine &main::Fields called at ****
0064nobodyさん
2008/08/19(火) 18:26:43ID:???0065nobodyさん
2008/08/19(火) 23:26:21ID:???自覚はないのかも知れないけれど、なんだかすごく混乱しているみたい。
VB, Oracle, oo4o, OLE, Perl のそれぞれに分けて把握を整理したほうがよさげ。
0066nobodyさん
2008/08/20(水) 10:57:24ID:???エラーメッセージから分かるのは、Fieldsをメソッド/サブルーチンとして呼び出そうとしている。
それを踏まえてPerlの文法をもう少し勉強してみます。
0068nobodyさん
2008/08/20(水) 23:50:12ID:???文字列で、"20080820"となっている
前日(昨日)を求めるコーディングを
教えてください。
0069nobodyさん
2008/08/20(水) 23:54:12ID:???0071nobodyさん
2008/08/21(木) 00:34:14ID:???0072nobodyさん
2008/08/21(木) 01:40:28ID:???0073nobodyさん
2008/08/21(木) 01:50:41ID:???0074nobodyさん
2008/08/21(木) 02:22:39ID:???とか
use Date::Manip qw(UnixDate DateCalc Date_Init);
とか。
0075nobodyさん
2008/08/21(木) 02:56:24ID:???日付の話がでたついでに質問なのですが、Nヶ月後とかNヶ月前ってどうやって計算してる?
(というよりどう定義してるかの問題?)
Q1. 1月31日の一ヶ月後
Q2. 2月28日の一ヵ月後
Q3. 3月31日の一ヶ月前
Q4. 3月31日の一ヵ月後
0076nobodyさん
2008/08/21(木) 03:46:07ID:???ttp://www5d.biglobe.ne.jp/~Jusl/TomoLaw/KikanKeisan.html
007763
2008/08/21(木) 08:04:49ID:???";"は当たり障りある部分を消すときに一緒に消えたのでしょう。
一応、文字コードが変な様ですが、通ることは通るようになりました。
項目指定にリテラル数字/リテラル文字列を指定すると変なままですけど。
my $OraSession = Win32::OLE->new ("OracleInProcServer.XOraSession");
my $OraDatabase = $OraSession->DBOpenDatabase("orcl", "scott/tiger", 0);
my $oDyna = $OraDatabase->CreateDynaset("SELECT * FROM ****", 0);
my %FN;
my $i;
for ($i = 0; $i < $oDyna->Fields->Count ; $i++){
$FN{$i} = $oDyna->FieldName($i);
}
while(!($oDyna->{EOF})) {
for ($i = 0; $i < $oDyna->Fields->Count ; $i++){
print $oDyna->Fields($FN{$i})->Value, "\n";
}
print "\n";
$oDyna->MoveNext;
}
0078nobodyさん
2008/08/21(木) 09:39:20ID:VetJG0Vxprint $OraDynaset->Fields('ABCD')->Value."\n";
は普通に通ります。
0079nobodyさん
2008/08/23(土) 09:30:39ID:???ギャル文字の正規化モジュールとか知りませんか。ギャル文字への変換じゃなく、ギャル文字からの変換。
手作業で対応表を組もうとかも考えましたが、無謀すぎた……orz
0080nobodyさん
2008/08/23(土) 10:04:39ID:???今様々なWEBページからHTMLを取得して、それをShiftJISに変換しているのですが、
JcodeでもEncodeでも一部のページで文字化けが起こって困っています。
文字化けを極力起こしたくない場合、どのような変換方法がいいのでしょうか?
0081nobodyさん
2008/08/23(土) 10:17:15ID:???元ページ自体が文字化けしてるかどうか目視することも一考
■ このスレッドは過去ログ倉庫に格納されています