1 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 22:35:39 ] "The duct tape of the Internet" こと、Perlについての質問箱です。 "There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。 CGIについての質問は板違いです。WEBプログラミング板でどうぞ。 CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。 (WEBプログラミング板 pc8.2ch.net/php/ ) CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。 このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 www.perl.org/get.html ● 2006/12/21現在の最新版: 5.8.8 ● 2006/12/21現在の開発版: 5.9.3 前スレ Perlについての質問箱 28箱目 pc8.2ch.net/test/read.cgi/tech/1162273941/ リンク集は>>2-3 過去スレは>>4
2 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 22:36:10 ] [プログラミング自体の経験が無い奴はまずココを読め] Perlプログラミング講座: www.site-cooler.com/kwl/perl/ [本] リャマ: www.oreilly.co.jp/books/4873111269/ 駱駝: www.oreilly.co.jp/books/4873110963/ Effective Perl: www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html クックブック: www.oreilly.co.jp/books/4873112028/ [オンラインマニュアル] (追加) 最新のドキュメント: search.cpan.org/~nwclark/perl-5.8.8/ perl5.8.xのドキュメント(一部): www.kt.rim.or.jp/~kbk/perl-5.8/ perl5.005_03 のドキュメント: www.kt.rim.or.jp/~kbk/perl5.005/ 日本語ドキュメント検索: www.cpan.jp/search.cgi perldoc.jp: www.perldoc.jp/ Perldoc.com: www.perldoc.com/
3 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 22:36:40 ] [モジュール] CPAN.com: search.cpan.org/ 河馬屋二千年堂: homepage3.nifty.com/hippo2000/ [テクニック] Perlメモ: www.din.or.jp/~ohzaki/perl.htm Perlのページ: homepage1.nifty.com/nomenclator/perl/ Perlの小技: homepage3.nifty.com/hippo2000/perltips/index.htm [Perl5.8Unicodeメモ] www.pure.ne.jp/~learner/program/Perl_unicode.html www.namazu.org/~tsuchiya/perl/perl-5.8.html www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
4 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 22:37:13 ] [過去スレ] 1 ttp://pc.2ch.net/tech/kako/1017/10177/1017736187.html 2 ttp://pc3.2ch.net/tech/kako/1033/10336/1033688230.html 3 ttp://pc2.2ch.net/tech/kako/1041/10412/1041205885.html 4 ttp://pc2.2ch.net/tech/kako/1048/10485/1048519394.html 5 ttp://pc5.2ch.net/tech/kako/1053/10530/1053053082.html 6 ttp://pc5.2ch.net/tech/kako/1060/10606/1060689008.html 7 ttp://pc2.2ch.net/test/read.cgi/tech/1068051036/ 8 ttp://pc2.2ch.net/test/read.cgi/tech/1074151549/ 9 ttp://pc5.2ch.net/test/read.cgi/tech/1079114157/ 10 ttp://pc5.2ch.net/test/read.cgi/tech/1085564875/ 11 ttp://pc5.2ch.net/test/read.cgi/tech/1090889189/ 12 ttp://pc5.2ch.net/test/read.cgi/tech/1094579428/ 13 ttp://pc5.2ch.net/test/read.cgi/tech/1097851764/ 14 ttp://pc5.2ch.net/test/read.cgi/tech/1101649274/ 15 ttp://pc5.2ch.net/test/read.cgi/tech/1105953092/ 16 ttp://pc8.2ch.net/test/read.cgi/tech/1111034732/ 17 ttp://pc8.2ch.net/test/read.cgi/tech/1117870308/ 18 ttp://pc8.2ch.net/test/read.cgi/tech/1121804136/ 19 ttp://pc8.2ch.net/test/read.cgi/tech/1126977805/ 20 ttp://pc8.2ch.net/test/read.cgi/tech/1131286411/ 21 ttp://pc8.2ch.net/test/read.cgi/tech/1134327348/ 22 ttp://pc8.2ch.net/test/read.cgi/tech/1138519327/ 23 ttp://pc8.2ch.net/test/read.cgi/tech/1141742901/ 24 ttp://pc8.2ch.net/test/read.cgi/tech/1146022352/ 25 ttp://pc8.2ch.net/test/read.cgi/tech/1149259409/ 26 ttp://pc8.2ch.net/test/read.cgi/tech/1153412251/ 27 ttp://pc8.2ch.net/test/read.cgi/tech/1157874614/ 28 ttp://pc8.2ch.net/test/read.cgi/tech/1162273941/
5 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 22:38:30 ] >>1 乙でし
6 名前: ◆TWARamEjuA mailto:sage [2006/12/21(木) 22:56:34 BE:4574276-BRZ(6677)] (´-`).。oO(「埋め」やっているやつは石器時代の人間か?)
7 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 23:05:10 ] >>6 現代人なら何するの?
8 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 23:13:39 ] ごめんね、おかあさんじょーくでquineかきこんだから、ごめんね 前スレ>>985 一応答えておきましょう。2変数の値の交換。 ($x, $y) = ($y, $x) で$xに$yの値を代入して、$yに元の$xの値を代入 if ($x < $y) { ($x, $y) = ($y, $x) } で、$xのほうが小さかったら$yと入れ替える。つまり$xのほうが大きくなるようにすると言う意味。
9 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 23:29:13 ] >>7 1000まで無駄なく使う、ってわざわざ言わなきゃわからないのか?
10 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 23:38:48 ] スレ隔てると中途半端になりそうな気もするがね。
11 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 23:42:00 ] C/C++も、Javaも、Rubyも、Pythonも宿題スレがあるんだな。 だから空気の読めない初心者が混ざるのか。
12 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 00:03:24 ] ちゃんと問題そのものを載せてくれるとまだ良いんだけどな
13 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 01:30:06 ] >>11 質問箱なんだから初心者が来るのは構わないんだけど結局>>12 の言うとおりじゃない?
14 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 01:58:54 ] 問題そのものを載せないのもそうだが コードが動かないときに自分の思いこみでコードの一部分だけ切り出して貼ったり 途中までやったけど分かりませんって書いて コードは一行もなかったり
15 名前:GOLFer名無しさん mailto:sage [2006/12/22(金) 02:27:18 ] @t=($x=1,$y=2,$z=3); $w=($l=@t)**2; {$j = 0;while(1){$i=0;while(1){@t[$i,$i+1]= ([$t[$i]=>$t[$i+1]]->[$t[$i]<=$t[$i+1]]=>[$t[$i+1]=>$t[$i]]->[$t[$i]<=$t[$i+1]]); last if$i++==$l;}last if$j++==$w;}} print "@t";
16 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 07:52:52 ] >>1 乙 my @in = qw( 4 2 6 ) ; my @new ; for( 0..$#in ){ my $min = $in[0] ; my $ind = 0 ; for (0 .. $#in ){ if ( $min > $in[$_] ){ $min = $in[$_] ; $ind = $_ ; } } push @new, $min ; splice @in, $ind, 1 ; } print @new , "\n" ;
17 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 12:42:52 ] >>14 なんかエラーがでます。 そのエラーを貼れよ!!
18 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 22:16:57 ] ○○ if △△ の形の条件分岐とかって使ってる? 俺は使ってないんだが。
19 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 22:20:55 ] next ifとreturn ifは使う
20 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 00:05:34 ] elseを伴わない場合で処理が1行ならほぼ間違いなく使う。
21 名前:デフォルトの名無しさん [2006/12/23(土) 00:12:52 ] すいません、ちょっと質問です。 jcode.pm で、文字コードを自動判定させると なんか時々変な判断しませんか。 #別に半角カタカナは使ってはいません。 例: $szName = Jcode->new("ほげほげ")->euc; ・・・・・たっぷりと文字列処理 print Jcode->new($szName)->sjis; # あれ? なんか化けてる。 $szName = Jcode->new("ほげほげ".'sjis')->euc; ・・・・・たっぷりと文字列処理 print Jcode->new($szName,'euc')->sjis; # うん、これならOK. でも引数が多いのは嫌ですね。
22 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 00:19:52 ] そもそも、バイト列の並びから文字コードを確実に判定する方法なんてないですよ。
23 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 01:01:47 ] だよね 可能なら自動判定は避けるべき 漢字一文字だと一部の漢字は自動判定できないし cgiの場合なら入力時の漢字コードは決まっていると思うので、元の漢字コードを指定しましょう
24 名前:18 mailto:sage [2006/12/23(土) 01:44:44 ] 結構みんなバラバラなのね。うちの周りだと使ってる人がほぼゼロだった。 純粋なPGがいないからかもしれないが。
25 名前:デフォルトの名無しさん [2006/12/23(土) 01:51:22 ] 関係ないですが $sql = "select from T_hogehoge where (判定='A')"; てのを書いてて、「あ、右端に顔文字・・・・」と思ってしまいますた。 ・・・・余談でつ。
26 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 02:09:12 ] >>18 あまり複雑な条件では使わない my $fh = new IO::File ">hoge"; return undef unless defined $fh; とか $str .= "hoge¥n"; $str .= "moge¥n" if $flag; return $str; とか
27 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 03:25:00 ] >>26 後者は同意だけど、前者は my $fh = new IO::File ">hoge" or return; と書くおいら perlstyleに言及があるとおり、場面に合わせて読みやすいであろう方を選択だよね。
28 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 08:33:59 ] ソースのインデント増やしたくないから積極的に 利用する(ある意味 next とかの積極利用なんだけど )
29 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 08:54:26 ] PBPに while ( <> ){ next if !/^(\S+)\s+(\S+)$/ ; #ここで$1, $2 の処理をする } みたく書いてあったときはある意味衝撃だったw ええ知らなかっただけですともorz...
30 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 10:12:42 ] \ を一々 \ に変えてる奴って頭おかしいの?
31 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 10:21:08 ] >>30 Safari厨だと思われ。
32 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 12:21:42 ] Vistaになればみんなそうなるのかな?
33 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 13:43:42 ] >>32 ならない。
34 名前:デフォルトの名無しさん [2006/12/23(土) 16:33:52 ] useしたモジュールで発生する"Use of uninitialized value"エラーを出力させたくないのですが、 どのようにしたらよろしいでしょうか? モジュールには手を加えたくないのですが。。
35 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 16:59:53 ] perl -w を使わずに use warnings すればいいんじゃね?
36 名前:34 mailto:sage [2006/12/23(土) 17:21:35 ] >>35 質問文が分かりにくくてすみません; #program start use hogehoge 'hoge'; print hoge('unko'); #program end 例えば、上記のプログラムを実行して標準出力に出力される、 "Use of uninitialized value in %s at hogehoge.pm line 30." というエラーの出力を止めたいのです。。
37 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 17:52:44 ] >>36 つまり何か。hogehogeモジュールがその中でwarningsプラグマを有効にしているにも拘らず、 正常な処理の範囲内でundefinedな値のチェックを怠っていて、しかも、 他の人が作ったモジュールだから触るわけには行かない。とそういう状況なわけか。
38 名前:34 mailto:sage [2006/12/23(土) 18:01:53 ] >>37 Yes!まさにその通りです!
39 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 19:03:35 ] レキシカルな特殊変数に干渉する方法がわからん… 一応、思いついたDirty Hack二通り 1. BEGIN { local *warnings::import; require hogehoge; import hogehoge 'hoge'; } 2. { use IO::Null; tie local *STDERR, 'IO::Null'; print hoge('unko'); }
40 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 19:37:17 ] いったんhogehogeにパッケージ切り替えてno warnings 'uninitialized';したら? use hogehoge qw/hoge/; package hogehoge; no warnings qw/uninitialized/; package main; print hoge('unko'); 試してないからわからん。
41 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 20:11:47 ] 表示されなければいいのなら$SIG{__WARN__}を定義して横取りする手もある。 The routine indicated by $SIG{__WARN__} is called when a warn- ing message is about to be printed. The warning message is passed as the first argument. The presence of a __WARN__ hook causes the ordinary printing of warnings to STDERR to be sup- pressed.
42 名前:34 mailto:sage [2006/12/23(土) 23:26:18 ] >>39-41 ありがとうございます _ _ >>39 さんの1の方法を使わせていただきました。 >>40 no useは地の文での解釈となってしまうようでした。
43 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 12:18:30 ] perl で PDFからテキストコンバータしたいんだけど、そんなモジュールってある?
44 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 12:34:08 ] search.cpan.org/search?query=pdf+extract+text&mode=module たくさんあるんじゃね?
45 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 12:36:07 ] CPANでそうやってけんさくするのか。 ありがとう。
46 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 15:04:19 ] WindowsのActivePerl-5.8.8.819-MSWin32-x86-267479.msiでインストールしたパッケージに Jcode.pmと新しいEncode.pmとEUCJPMSをインストールしようとしましたが、 Jcode.pm以外はインストールできませんでした。 Encode.pmの場合は NMAKE : fatal error U1077: 'C:\MSVSEE\VC\bin\cl.EXE' : リターン コード '0x80' Stop. NMAKE : fatal error U1077: 'C:\MSVSEE\VC\bin\nmake.exe' : リターン コード '0x2' Stop. EUCJPMSの場合は NMAKE : fatal error U1077: 'C:\MSVSEE\VC\bin\cl.EXE' : リターン コード '0x80' Stop. このようになり、Makefileからmakeできませんでした。 ほかにインストールする方法はないものでしょうか。
47 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 17:36:55 ] 「4の倍数」や「4で割り切れる」という条件は、どのように表したらよいのでしょうか?
48 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 17:51:58 ] >>47 if ($num % 4 == 0)
49 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 18:18:20 ] >>46 ppm install
50 名前:46 mailto:sage [2006/12/24(日) 19:14:23 ] すいません自己解決しました。 vcのincludeやlibへのパスがうまく通っていなかったようです。 設定しなおしたらmakeできました。 >>49 ppmでやろうと思ったらそんなもんねーよとppmに怒られてしまいました。
51 名前:47 mailto:sage [2006/12/24(日) 20:06:57 ] 2で割り切れても50で割り切れない 上記のようなものはどう表示すればよいのでしょうか?
52 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 20:14:04 ] これはひどい
53 名前:47 [2006/12/24(日) 20:25:26 ] 事故解決しました
54 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 20:27:39 ] >>51 if(2で割り切れる? = はい){ if(50で割り切れる? = いいえ){ print "2で割り切れるけど、50で割り切れないよ。"; } }
55 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 20:35:28 ] >>50 解決して何より。 だけどppmはリポジトリを追加するともっと強力になるよん。 Encodeの最新版はTheoryx5リポジトリにある。 Encode-EUCJPMSは検索したらパッケージを作ってる人がいました。 ttp://asakura.g.hatena.ne.jp/asakura-t/20061102/1162451401
56 名前:デフォルトの名無しさん [2006/12/24(日) 21:02:59 ] >>50 ppm では search hoge* してからにすべし Foo::bar というモジュール名は 経験上、ppm では install Foo-Bar の名称で指定することが多し。 <ちらしの裏> 追記すると、最新の ActivePerl (Win32) では ppm だと GUIウインドウが開く。 ppm-shell だと、従来通りのコマンドライン版が起動する。 </ちらしの裏>
57 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 23:13:43 ] perlって何を造るための言語なんだ? 結局はWeb関連だったらツマランわ
58 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 23:17:02 ] 聖夜釣ですか
59 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 23:35:41 ] Spreadsheet::WriteExcelでは既存のファイルを開けないことが判明orz VBAコードを仕込んでおきたかったんだけど、なんかうまい方法はないでしょうか。 Linuxサーバ上でやりたいため、WIn32::OLEという解は使えません…。
60 名前:デフォルトの名無しさん mailto:sage [2006/12/25(月) 13:28:50 ] >>57 Perl is a programming language for getting your job done.
61 名前:デフォルトの名無しさん [2006/12/25(月) 18:56:23 ] すみません。どなたか教えてくださいませ。 コード値を文字にしたいのですが、日本語はどのようにしたらよろしいのでしょうか? chrは2バイト文字はだめってのはわかったんですが。 ちなみにシフトJISのコードを変換したいです。 例 0x82A0 → あ
62 名前:デフォルトの名無しさん [2006/12/25(月) 19:17:21 ] $str = pack("H*","82A0");
63 名前:61 mailto:sage [2006/12/25(月) 19:22:37 ] >62 ありがとうございます! packの奥は深いっすね〜 もっと勉強します!
64 名前:デフォルトの名無しさん [2006/12/25(月) 21:15:28 ] >>60 ワロタ
65 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 01:22:43 ] 今日からオライリーのPerlの本で勉強始めます。 来月から仕事で使いそうなんで・・・
66 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 01:33:16 ] ここは俺の日記帳だからお前は日記を書くな
67 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 01:39:30 ] chomp
68 名前:デフォルトの名無しさん [2006/12/26(火) 03:21:37 ] 質問 文字化けする理由を教えてください。 スクリプト ------------------- $str="あー"; print $str; print "\n"; $tmp="−"; $str =~ s/$tmp//g; print $str; -------------------- 実行結果 -------------------- あー あ[ --------------------
69 名前:68 mailto:sage [2006/12/26(火) 03:24:04 ] 追記 環境Windowsで.plファイルのエンコードはShift-JISです。 実行結果はコマンドプロンプトでの実行結果です。
70 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 03:58:22 ] − = 81 7c | = 7c より、$str =~ s/$tmp//g;は $str =~ s/(文字コード81)|//g;とPerlに解釈されています。 つまり、$str内の文字コード81か、空文字にマッチングしそれが削除されます。 あー = 82 a0 81 5b内の81を削除すると82 a0 5bとなり これをShift_JISで表示すると[ = 5bよりあ[となります。
71 名前:68 mailto:sage [2006/12/26(火) 04:50:18 ] >>70 丁寧な解説ありがとうございました。 $tmp="−"; $str =~ s/$tmp//g; を $str =~ s/\x81\x7c//g; とすることによって解決できました。
72 名前:デフォルトの名無しさん [2006/12/26(火) 10:26:52 ] そうくるかw
73 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 11:46:16 ] Perl4時代の息吹を感じました。
74 名前:デフォルトの名無しさん [2006/12/26(火) 16:00:24 ] すみません、CPANにあるHTML::TableExtractについての質問です。 search.cpan.org/dist/HTML-TableExtract/lib/HTML/TableExtract.pm ↑のREGULAR METHODSにあるdepths()メソッドの文字を変数に代入したいんです。。 然るべき手順を踏んで、 print $te->depths(); するときちんとdepths()メソッドの文字が表示されるのですが、 my $test = $te->depths(); print $test; すると"Use of uninitialized value in print"というエラーが出てしまいます。。 全く訳が分からず打ち間違えを確認したりして同じ事を何回も繰り返したりしたのですが、 訳が分からないです。。どなたがご助言お願いいたします _ _
75 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 16:03:36 ] >>66 r;ァ'N;:::::::::::::,ィ/ >::::::::::ヽ . 〃 ヽル1'´ ∠:::::::::::::::::i i′ ___, - ,. = -一  ̄l:::::::::::::::l . ! , -==、´r' l::::::/,ニ.ヽ l _,, -‐''二ゝ l::::l f゙ヽ |、 レー-- 、ヽヾニ-ァ,ニ;=、_ !:::l ) } ト ヾ¨'7"ry、` ー゙='ニ,,,` }::ヽ(ノ 2ちゃんはみんなの日記帳だから :ーゝヽ、 !´ " ̄ 'l,;;;;,,,.、 ,i:::::::ミ ::::::::::::::::ヽ.-‐ ト、 r'_{ __)`ニゝ、 ,,iリ::::::::ミ ::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ , な! :::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::/// :::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ / ::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /
76 名前:74 mailto:sage [2006/12/26(火) 16:04:22 ] ごめんなさい。配列型で返ってきてました。。
77 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 16:26:50 ] >>73 use utf8を使えば文字を直接置換できるかな?
78 名前:デフォルトの名無しさん [2006/12/26(火) 16:43:49 ] >>68 pc8.2ch.net/test/read.cgi/php/1164519503/498-512
79 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 02:04:44 ] パール無図杉
80 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 23:00:18 ] すみません、質問があります。 WindowsのActive Perl v5.5.8です。 UTF16の日本語ファイルを開いて処理させようとすると 処理結果のテキストが文字化けしてしまいます。 Shift JISとUTF8形式だと問題なく処理できるのですが…。 UTF16でうまく処理できる方法はないでしょうか?
81 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 01:01:06 ] >>80 シフトJISのファイルを扱うとき、 binmode STDOUT, ":encoding(cp932)"; binmode STDERR, ":encoding(cp932)"; binmode STDIN, ":encoding(cp932)"; use open IO => ":encoding(cp932)"; とか書かなかった? cp932 を例えば、UTF-16LE に変えれば済むことと思われるが。
82 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 01:12:53 ] >>80 前スレがまだ残っているので、前スレ 694 からの流れを参照。 対策としては、前スレ 703 のリンク先にある方法が無難だと思う。
83 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 01:24:39 ] >>81 さん シフトJISのときは何も指定せずにいけました。 >>82 さん ありがとうございます。 明日頑張ってみます。
84 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 11:31:19 ] Activeperl でタイムアウトを指定してホスト名を逆引き(gethostbyaddr) するプログラムを書いています。タイムアウトした場合にはIPアドレスを 返そうと思います。そこで以下のようなサブルーチンを書いたのですが、 タイムアウトしません。古いActiveperlではalarmがないとの情報があった のですが、sleep行で確認した所、5.8.8では問題ないようです。 お知恵を拝借頂ければ幸いです。 sub resolv_host { my ($ip)=@_; my $timeout=2; my $host; $SIG{ALRM} = sub { die 'TIMED OUT' }; eval { alarm($timeout); # ホスト名を逆引きする。 #sleep 5; $host = gethostbyaddr(pack("C4", split(/\./, $ip)), 2); alarm(0); }; alarm(0); if ( $@ =~ /TIMED OUT/ ){ $host = $ip;} return ($host); } ※実行環境は以下の通りです。 Windows XP SP2 Activeperl 5.8.8
85 名前: ◆TWARamEjuA mailto:sage [2006/12/28(木) 13:23:20 BE:2178454-BRZ(6677)] Net::DNS を利用するのはいかがかしら?
86 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 17:31:04 ] 他所様のサーバの混雑具合を調べるプログラムを書こうとしています。 use IO::Socket; my $sock = IO::Socket::INET->new( PeerAddr => $ip, PeerPort => $port, Proto => 'tcp', Timeout => $TIMEOUT, ); if ($sock) { #接続成功 } else { #タイムアウト } 今現在のコードがこんな感じでして、繋がる繋がらないは分かるのですが、 接続に要する時間を調べたいもののその方法がわかりません。 SOCKETを触るのが今回初めてでして、 そもそもにおいて根本的な過ちを犯してる場合はそちらも併せて、 何かよい方法がありましたら、ご教授いただけると幸いです。
87 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 17:43:14 ] 普通に前後で現在時間を求めて引き算すればいいのでは?
88 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 17:58:48 ] >>85 ありがとうございました。 sub resolv_host { use Net::DNS; my ($ip)=@_; my $timeout=2; my $host; my $res = Net::DNS::Resolver->new( tcp_timeout => $timeout, udp_timeout => $timeout ); my $query = $res->query("$ip"); if ($query) { foreach my $rr ($query->answer) { next if $rr->type ne "PTR"; $host=$rr->ptrdname; } } else { $host=$ip; } return ($host); }
89 名前:名無しさん@Linuxザウルス mailto:sage [2006/12/28(木) 18:54:03 ] 任意の文字列からhttpで始まる単語(区切りはスペース)を切り取るにはどうしたらいいでしょうか $str = aaaa bbbb ccc ddd.vv.vv hhhh rrrr ff.ff.mm という文字列から「ddd.vv.vv 」「ff.ff.mm 」を切り出す方法です
90 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 18:59:42 ] @a = grep /^http/, split / /, $str;
91 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 19:05:18 ] @a = $str =~ /(?:^| )(http.*?)(?: |$)/g;
92 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 19:53:46 ] >>55 >>56 遅くなりましたが、ありがとうございました。 レポジトリを追加したらだいぶ便利になりました。 パッケージをダウンロードしてきてそのまま追加することもできるようになりました。
93 名前:名無しさん@Linuxザウルス mailto:sage [2006/12/28(木) 20:04:48 ] >>90 ,91 サンクス
94 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 20:45:12 ] 「後ろにtringが続かないs」を「z」に置換する方法は次の2つ以外にありますか? s/s$/z/; s/s([^t])/z$1/g; s/st([^r])/zt$1/g; s/str([^i])/ztr$1/g; ... s/string/(あり得なさそうな文字列)/g; s/s/z/g; s/(あり得なさそうな文字列)/string/g;
95 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 20:48:34 ] >>94 先読み否定。色々仲間があるので詳細はperlre参照。 s/s(?!tring)/z/g;
96 名前:デフォルトの名無しさん [2006/12/28(木) 21:14:01 ] 任意の精度の数値演算したいんですけど、 どうすればいいでしょうか?
97 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 21:16:21 ] あ、Math::BigFloat モジュールってのがありました すいません m(__)m
98 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 21:17:16 ] >>95 ありがとうございました。
99 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 05:18:57 ] FTPプロトコルでリモートにファイル転送するスクリプトを作ってるのですが ローカルとリモートで同名だけどリモートの方がファイルサイズ小さい場合 差分のみ転送にしたいのですがレジュームはどうやればできますでしょうか? perldoc Net::FTP でresumeをキーに検索したのですが見当たりませんでした。 よろしくお願いします。
100 名前:99 mailto:sage [2006/12/29(金) 08:20:07 ] 自己レス FTP resume perlをキーにググッたら下記の情報見つけた www.garayed.com/perl/215162-net-ftp-resume-file-transfer.html perldoc Net::FTPでWHEREを見ろって書いてあったので見たら ダウンロードはgetメソッドの第3引数でオフセット値が指定できるみたいだけど アップロードはrestartってメソッドでオフセット値をセットしてから putメソッドで転送すればいいのかな。 しかしputメソッドは第3引数でオフセット値を指定できないんだ???