1 名前:nobodyさん mailto:sage [2008/02/25(月) 19:25:51 ID:???] Perlのコーディングで困ってる人のスレです。 【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 「コマンドの意味がわかんない」とかはマニュアル見ましょう。 回答者さんは何でも屋じゃありません。 1: 自分はこういう事がしたい。 2: それでこんな風にやってみたが・・・ 3: こんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。 お勧めサイトは >2 以降 前スレ pc11.2ch.net/test/read.cgi/php/1189939783/ 過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
4 名前:nobodyさん mailto:sage [2008/02/25(月) 22:05:56 ID:???] WindowsXP+XAMMP+Perl Add-onで、WWW:Mixiを利用して、 ttp://digit.que.ne.jp/work/wiki.cgi?Perl%e3%83%a2%e3%82%b8%e3%83%a5%e3%83%bc%e3%83%ab%2fWWW%3a%3aMixi ↑のHPのコードを動かしているんですが、 500 Can't locate object method "configure" via package "Net::HTTP" というエラーが出ます。同じCGIをXREAで動かした場合は正常に動作しました。 これはどういった理由でエラーが起こっているんでしょうか?
5 名前:nobodyさん mailto:sage [2008/02/25(月) 22:17:42 ID:???] >>4 鯖にモジュールがインストールされてないんじゃない? /usr/lib/的なフォルダに/Net/HTTP.pmを入れてみたら?
6 名前:nobodyさん mailto:sage [2008/02/25(月) 22:28:05 ID:???] >>5 確認してみたのですが、HTTP.pmは既にモジュールとして入っていました。 HTTPというフォルダも同じ場所にあったので、競合してるのかなと思い名前などを弄ってみたのですが、 フォルダ名をいじった場合でもHTTP.pmを移動した場合でも、エラーは 501 Can't locate object method "new" via package "LWP::Protocol::http" となりました。LWP/Protocol/http.pmも既に入っていました・・・orz
7 名前:nobodyさん mailto:sage [2008/02/25(月) 22:31:43 ID:???] >>6 www.google.co.jp/search?hl=ja&client=firefox-a&channel=s&rls=org.mozilla%3Aja%3Aofficial&hs=wkI&q=Can%27t+locate+object+method++Perl&btnG=%E6%A4%9C%E7%B4%A2&lr=lang_ja
8 名前:nobodyさん mailto:sage [2008/02/25(月) 23:24:10 ID:???] perlで書いた2つのCGIがあるのですが、 1つ目のCGIを実行中にエラーが起きた時に$ERROR=1等として エラーフラグに数値を入れて、その値を2つ目のCGIに渡して 2つ目のCGIでエラーメッセージを表示させたいのですが、 色々調べているのですが上手く行きません。 何か上手く2つ目のCGIに値を渡す方法がありましたら、 よろしくお願いします。
9 名前:nobodyさん [2008/02/25(月) 23:44:14 ID:JDOb3tEV] Aフォルダの中にある10〜30.txtファイルがあります。 Aフォルダの中身はこれが全てでこれを全部開きたいのです。 open(FILE, '10.txt') or die "$!"; while (my $line =<FILE>) { print $line; } close(FILE); これだと一つのファイルの中身は見れますが、フォルダの中全てを開きたい 僕にとってこれは違う気がします。 なんとか、方法はないでしょうか?宜しければ教えてください。
10 名前:nobodyさん mailto:sage [2008/02/25(月) 23:55:34 ID:???] >>9 >>2 www.site-cooler.com/kwl/perl/6.htm#6-4
11 名前:nobodyさん mailto:sage [2008/02/26(火) 01:25:07 ID:???] オブジェクト指向を勉強中です。 あるメソッドが、自分自身のクラス内のクラスメソッドを呼び出すには どのように書いたらよいでしょうか。 クラスメソッドは普通Package->hoge()とするようですが、 自分自身のパッケージをわざわざ書くのが正しいのかと 疑問に思いました。よろしくお願いします。
12 名前:nobodyさん mailto:sage [2008/02/26(火) 01:59:04 ID:???] __PACKAGE__->hoge();
13 名前:nobodyさん mailto:sage [2008/02/26(火) 02:33:17 ID:???] ありがとうございます!
14 名前:4 mailto:sage [2008/02/26(火) 07:45:15 ID:???] >>7 色々と見てみましたが未だ解決しませんorz
15 名前:nobodyさん mailto:sage [2008/02/26(火) 09:29:48 ID:???] >>14 XAMPPには詳しくないですが、 出力とは別にエラーログに書かれてないですか? XAMPP/log/error.logみたいに
16 名前:nobodyさん mailto:sage [2008/02/26(火) 11:40:40 ID:???] ライブラリを読み込む優先順位なんですが、 カレントディレクトリを最優先したいので、 unshift @INC, pop @INC; ってしたいと思うんですが、 環境によってうまくいかなかったりします? 自分の環境で@INCを表示すると C:/usr/site/lib C:/usr/lib . となるんですが、 unshift @INC, '.';のほうが良いんですかね?
17 名前:nobodyさん mailto:sage [2008/02/26(火) 11:59:34 ID:???] .がどこにあるかは環境によって違うから、除去と追加は.を明示した方がいいんじゃないか。
18 名前:nobodyさん mailto:sage [2008/02/26(火) 12:45:05 ID:???] >>16 use lib '.'; で良きに計らってくれる。 search.cpan.org/src/RGARCIA/perl-5.10.0/lib/lib_pm.PL 5.00503 の lib.pm だと重複除去をしてくれないから BEGIN { my %dup; @INC = grep !$dup{$_}++, ('/path/to/your/extlib', @INC); } なんて書いたりするけど。
19 名前:nobodyさん mailto:sage [2008/02/26(火) 13:03:29 ID:???] >>17 >>18 ありがとう use FindBin; use lib $FindBin::Bin; で解決しました。 重複してるけど、除去しなくても 確実にカレントディレクトリで見つかれば問題ないですよね?
20 名前:nobodyさん mailto:sage [2008/02/26(火) 15:20:10 ID:???] >>15 apacheのerror.logならあるのですが、 perl実行時のエラーを吐き出しているlogはありませんでした。 WWW:Mixiで使っているモジュールがあるかどうかなども確認したのですが、 全て揃っていて、Winの自鯖なので権限なども関係ないと考えているのですが・・・解決しません。
21 名前:nobodyさん [2008/02/26(火) 16:11:53 ID:rftlSzSy] WIN鯖はなにかと問題が多いんで 切り替えることをおすすめしますよ。
22 名前:nobodyさん mailto:sage [2008/02/26(火) 16:27:13 ID:???] >>20 XAMPPとかWWW::Mixiがどんな仕様か詳しくは知らないけど、 普通のPerl-CGIなら、そのApacheのerror.logにエラーが出力されてるハズ。
23 名前:初心者 [2008/02/28(木) 15:16:09 ID:GDQH6oGX] 最終的に曜日を知りたいので、指定した○年○月1日まで、今から何日前なのか後なのかを計算する 方法をどなたか教えてください。
24 名前:nobodyさん mailto:sage [2008/02/28(木) 15:55:55 ID:???] >>23 search.cpan.org/dist/Date-Calc/ perldoc.jp/docs/modules/Date-Calc-5.3/Calc.pod use Date::Calc qw(Day_of_Week); my $dow = Day_of_Week($year,$month,$day);
25 名前:nobodyさん mailto:sage [2008/02/28(木) 15:57:12 ID:???] Windowsの英語版と日本語版を区別する方法ってないですか? $^OでOS名は取れるのですが… 現在はシステムの`date /t`の戻り値を見て判断しています。
26 名前:初心者 [2008/02/28(木) 16:11:55 ID:GDQH6oGX] >>24 さんありがとうございます。 出来ればモジュールを使わずに日数を計算する方法はないんでしょうか?
27 名前:nobodyさん [2008/02/28(木) 16:36:04 ID:TYs56hmn] >>24 >>1
28 名前:nobodyさん [2008/02/28(木) 16:36:24 ID:TYs56hmn] 間違えたwすまんw >>26 >>1
29 名前:nobodyさん mailto:sage [2008/02/28(木) 16:55:57 ID:???] >>25 homepage3.nifty.com/hippo2000/perltips/Win32/OLE/NLS.htm
30 名前:nobodyさん mailto:sage [2008/02/28(木) 17:21:40 ID:???] 知恵を貸してください ログインスクリプト作ってるんですが 最初の画面でhttpかhttpsを選択 httoの場合は普通に次の画面でCookie食べておしまい https(SSL)の方はpost後代理鯖(共有SSL)でCookie食べる locationで元の鯖に飛ばしてhttpの方もCookie食べる という処理なのですがlocationなので当然丸見えなんです。。。 何かスマートな方法ありましたらご教示願います。
31 名前:25 mailto:sage [2008/02/28(木) 17:24:53 ID:???] >>29 サンクス。解決したよ
32 名前:nobodyさん mailto:sage [2008/02/28(木) 21:20:30 ID:???] LWP::UserAgentについて質問があります。 下ページを取得しようとすると、CPU使用率が100%になったままで 応答がなくなり?ます。ページも取得できません。 こんな場合、途中で諦めたいのですが、タイムアウトを設定しても変化なし。 どうすれば良いかアドバイスお願いします。 #!/usr/bin/perl use strict; use LWP::UserAgent; my $url = 'www.mother-house.jp/ceo/2006/10/post.html '; print "$url\n"; my $ua = LWP::UserAgent->new; $ua->timeout(30); my $request = HTTP::Request->new(GET => $url); $request->header('Pragma' => 'no-cache'); my $response = $ua->request($request); if ($response->is_success) { print $response->content; } else { print "(´・ω・`)ショボーン\n"; } exit;
33 名前:nobodyさん mailto:sage [2008/02/28(木) 22:07:20 ID:???] そのページ3G近くあんじゃんwブラウザで開いて焦ったw たぶんメモリが足りないだけなんじゃないかな $ua->max_sizeで上限決めたりヘッダにrange付けて小分けにリクエスト投げるといい
34 名前:nobodyさん mailto:sage [2008/02/28(木) 22:32:37 ID:???] >>33 そんなに大きかったのですか!w すみません、でもお陰で$ua->max_sizeを知ることができましたし、 デフォルト無制限なのを知ることも出来ました。 どうもありがとうございました。
35 名前:nobodyさん [2008/02/28(木) 23:44:29 ID:txq/MTXf] push(@list, {'num1' => 1, 'num2' => 2}); 上記データのnum2をキーにしてをsortを行うことは可能でしょうか。 もし可能でしたら方法をご教示いただけますと幸いです。 宜しくお願いします。
36 名前:nobodyさん mailto:sage [2008/02/29(金) 00:12:26 ID:???] @sorted = sort { $a->{"num2"} <=> $b->{"num2"} } @list;
37 名前:nobodyさん mailto:sage [2008/02/29(金) 01:24:59 ID:???] >>33 ??? そのページ30MB位しかないぞ。 content-lengthも29239056ってなってるし。 たしかにブラウザで開いたらCPU100%で1分くらい固まったけど・・。 でも、取得できたから、保存して、テキストエディタで開いてみたら、やっぱり30MBくらいだったぞ。 >>32 で、LWPなんだが、ウチの環境でも、ファイルサイズが大体3〜4メガ位より大きくなると、 とたんに反応が無くなる。ちなみにメモリは1G積んでて、余りも800M以上ある状態で・・・。 何故だかはわからん。 ちょっとソース読んでみるか。
38 名前:nobodyさん mailto:sage [2008/02/29(金) 01:31:25 ID:???] でも、そんな非常識なサイトを取得する意義ってあるのかな。 まあ、そういうことがしたいってことなら仕方ないけど、そういう非常識なサイト対策って意味で、 >>33-34 あたりの対策をしておく必要があるんだなっていう意味で参考になった。
39 名前:nobodyさん mailto:sage [2008/02/29(金) 12:47:11 ID:???] ありゃあ30Mか見間違えてた 3Gと勘違いしてて実行しなかったけど 今試してみたら引っかかることなく問題なく取得できたよ colinuxでメモリ126M割り当て $ perl -v This is perl, v5.8.8 built for i386-linux-thread-multi $perl -MLWP::UserAgent -e 'print $LWP::UserAgent::VERSION' 2.036
40 名前:30 mailto:sage [2008/02/29(金) 15:29:10 ID:???] 他あたって見ます 失礼しました
41 名前:初心者 [2008/02/29(金) 17:30:27 ID:VfFNtRxq] カレンダーを表示する時に 日 月 火 水 木 金 土 | | | | | | 1 | 2| _ _ _ _ _ _ _ ← 線はもっとうえに うまく書けてなくて申し訳ないですが、数字を囲むような形で常に5行表示させるには どうしたらよいでしょうか。どなたか教えてください。
42 名前:nobodyさん mailto:sage [2008/02/29(金) 17:44:40 ID:???] >>36 遅ればせながら、有難うございました。 助かりました。
43 名前:nobodyさん mailto:sage [2008/02/29(金) 18:16:34 ID:???] 質問です。 2進数から10進数に変換したいんですけど どうすればできますか? >>41 テーブルタグでも使ったほうがいいんじゃないですか?
44 名前:43 mailto:sage [2008/02/29(金) 18:22:40 ID:???] 質問が変なので追記 $a = 10101010; となっている場合に $a = '0b' . $a; $dec = oct $a; のようにしてます。 もっとスマートに0bを付けられないでしょうか?
45 名前:nobodyさん mailto:sage [2008/02/29(金) 18:33:58 ID:???] >>43-44 my $dec = oct "0b$a"; mikeneko.creator.club.ne.jp/~lab/perl/numerical_transform/
46 名前:nobodyさん mailto:sage [2008/02/29(金) 19:50:41 ID:???] >>45 簡単でしたね…。ありがとうございます。
47 名前:37 mailto:sage [2008/02/29(金) 20:11:23 ID:???] >>39 あれ、そうなん?って思って、ウチでもちょっと実験してみた。 人のサイトにリクエスト送りまくるんは、ちょっとアレなんで、LAN上に50MBほどのファイルを用意してやってみた。 perl -v This is perl, v5.8.8 built for MSWin32-x86-multi-thread (WinXp + ActivePerl5.8.8-822) LWP/5.808 LWP-UserAgent/2.036 の環境だと、この50MBのファイルを受け取って書き出すまでに、実に573秒(9分33秒)かかった。 ちなみに、ab で計測すると約4.7秒で転送できる。 その時、タスクマネージャーで監視していると、CPU80-90%くらいで、システム(グラフの赤色)が40%を占めてる。 で、メモリの使用量が、1〜2秒おき位に、30〜40MB位まとめて、増えたり減ったり激しく変動してる。 そこで、 perl -v This is perl, v5.8.8 built for i386-linux-thread-multi (Linux/CentOS5.1 + i386.rpm) LWP/5.808 LWP-UserAgent/2.036 の環境で同じことをやってみたら、ファイル書き出し完了までで、なんと5.3秒! ab での計測で約4.6秒はWin環境とほとんど変わらず。コレにDisk書き込みの時間が足されてまあこんなもんか。 ちょっとソース読んでみたけど、LWP内部で特に問題になるようなところはなさそう。 WinとLinuxで違いもない(Version同じだから当たり前か)。 多分、IO::Socketとか、もっとCoreに近い部分が原因で、とくにActivePerlとWin環境だけで>>32 >>37 みたいになるのかな。 >>38 確かに、HTMLやテキストファイルだけでそんな容量使ってるサイトは、非常識と言えるかも知れないけど、 画像や音楽、動画、アプリケーションのzipやtarなんかだと、数MB〜数十MBなんかはザラにあるから、 そんなんクロールして取得しようとか以前思った時に、>>37 みたいな現象に遭遇したんだ。 まあそん時は、Win環境しかなくて、今回みたいに検証すらしなかったんだが・・・。 おっしゃるように、max_sizeで小分けにするのがベターなやりかたかな。
48 名前:nobodyさん mailto:sage [2008/02/29(金) 21:04:20 ID:???] $ua->requestにcallback関数とサイズ渡したほうが range対応して無くても使えるしいいんじゃないかな?
49 名前:nobodyさん mailto:sage [2008/03/01(土) 04:06:42 ID:???] >>48 そうなんだよな。 確かにそんなことも出来たようなことを、かつてdocument流し読みした時にあったな〜って思って、もっかいmanualを詳しく読んでみたら、 なにも$ua->request()に、code_refを投げなくても、直接$filenameを渡せば、Discにcontentsを書いてくれるそうなんで、いっちょやってみた。 そしたら、Win環境でもNetwork転送時間+書き込み時間位で取得できるようになった。 ファイルサイズを100M,200M,500MとでかくしてやってもLWP(Perl)がハングすることなく、大体見積もり程度の時間で取得出来るようになった。 これだと、取得したHTMLをさらにParseして、処理をかけるってことをやろうとすると、ファイル開かないといけないけど、 まあバイナリファイル取得する分には十分だな。 なんつうか、ちゃんとドキュメント読めよオレ!っていう結論だ。
50 名前:nobodyさん mailto:sage [2008/03/02(日) 22:25:56 ID:???] 全部メモリに読み込む以外のインターフェース用意するのは当たり前だ。そのくらい気付いてドキュメント嫁。 それ以前に、数百MBのデータ読み込もうとするな。へぼ。
51 名前:nobodyさん mailto:sage [2008/03/03(月) 05:44:20 ID:???] >>50 いやいや、今回の場合は、メモリに十分余裕があるのに、たかだか5Mとか10M位でも Win(ActivPerl)環境だと激しく遅くなるのに、Linux環境だとそうはならない。ってとこで色々やって見たわけなんだわ。 まあ確かに、ちゃんとドキュメント読んでたら、最初の質問出たときに素早く正確なレス返せたかもしれないけど、 そこらへんヘボなんは認めるよ。まあ初心者スレなんだし。 だけど、俺なんかはPerlで数百M〜GBクラスのファイル読み込みとか普通にするし、 Perlの使用メモリが2G近くまで行ったりもするけど、今までそんな使い方してて、異常だとか思ったことなかったけど・・。 (そりゃあ、レンサバとか共用マシンとかでやるのは非常識だと思うし、CGIとかの鯖環境ではオレもそんなことしないけど、 自分専用で使う分にはええんでないの。今回みたいな検証したり、ベンチマーク取ったりもするし。)
52 名前:nobodyさん [2008/03/05(水) 05:02:04 ID:yN6MH4LB] ファイルパスを引数として受け取り 受け取ったファイルパスにファイルを作るサブルーチンを作りたいんですが、 ファイルパスが正しいかチェックするための正規表現がどうしてもかけません。 マッチする条件として ・ドットで始まるファイルは不可 ・拡張子は必須/\.[a-z]+$/ ・チルダ不可 ・先頭のみ./は許可。../は不可。 ・ディレクトリ、ファイル名は/[A-Za-z0-9\-]/にマッチ ・連続するスラッシュ、ドットは不可 ・m|^/|も許可 書いてみてもものすごく長くなって、結局破綻してしまいます。 たすけて
53 名前:nobodyさん mailto:sage [2008/03/05(水) 05:08:29 ID:???] 追記 open(FH,">",$file); で作れるファイル名なら問題ないです。 ただし、カレントディレクトリ以下です。
54 名前:nobodyさん [2008/03/05(水) 05:42:23 ID:ImwXiBY3] use lib qw( ./lib ); use Data::Alias; で Can't locate loadable object for module Data::Alias と言われます。 ./lib/Data/にAlias.pmをポコッと置いてるだけなんですけど 何が足りないんでしょうか?
55 名前:nobodyさん mailto:sage [2008/03/05(水) 08:19:07 ID:???] >>54 @INCを出力してみたら? フルパス打ってみるとか
56 名前:nobodyさん mailto:sage [2008/03/05(水) 10:04:58 ID:???] >>54 「Can't locate loadable object」とあるように Data::Alias は pure perl なモジュールじゃない。 search.cpan.org/src/XMATH/Data-Alias-1.07/
57 名前:nobodyさん mailto:sage [2008/03/06(木) 03:17:10 ID:???] >>52 無理してひとつの正規表現で済ませなきゃいーじゃん。
58 名前:nobodyさん [2008/03/06(木) 05:45:50 ID:F1MYa2qu] たしかに マッチしないものをどんどんはじけば処理少なくならないか?
59 名前:nobodyさん mailto:sage [2008/03/06(木) 15:48:54 ID:???] レンタルサーバにMT入れてブログをやってるってだけで、 社内でネットプログラムに一番詳しい人にされてしまいました。 材料仕入れて加工して個人に売るという会社なのですが、DQN取締役から 「在庫管理と顧客管理をブラウザから処理できるシステムってできるでしょ? 年度始めまでにお願いね」 と言われて涙目です。 プログラムは未経験で何をどうしていいかすら分かりません。 在庫管理のデータベースシステムの概要や、スクリプトの流れが 理解できるような書籍があったら教えてください。 ラクダ本は買ってみたのですが一から勉強するにはちょっと時間が足りません…
60 名前:nobodyさん mailto:sage [2008/03/06(木) 16:06:45 ID:???] 「できません。」って言う
61 名前:nobodyさん mailto:sage [2008/03/06(木) 16:19:02 ID:???] フリーで落ちてる奴でも使っておけ
62 名前:nobodyさん mailto:sage [2008/03/06(木) 16:56:54 ID:???] できませんが一番
63 名前:nobodyさん mailto:sage [2008/03/06(木) 20:17:17 ID:???] xn--lckja1b6r.jp/%E5%9C%A8%E5%BA%AB%E7%AE%A1%E7%90%86%20%43%47%49 xn--lckja1b6r.jp/%E9%A1%A7%E5%AE%A2%E7%AE%A1%E7%90%86%20%43%47%49
64 名前: ◆TWARamEjuA mailto:sage [2008/03/07(金) 00:01:42 ID:??? BE:871924-2BP(7072)] (´-`).。oO(やりたいよなぁ。。。)
65 名前:nobodyさん mailto:sage [2008/03/07(金) 12:30:47 ID:???] >59 予算もらって外注する 予算なければ出来ないっていうか、 予算相当に自分の人件費を上げてもらって頑張って勉強
66 名前:nobodyさん [2008/03/07(金) 18:55:17 ID:+CnMyeLv] 質問です。 小数点以下の右端の0を全部取り除きたいです。 小数点以下が0しかない場合は、小数点も含めて取り除きたいです。 3.00 → 3 3.02000 → 0.02 どう書けばよいのでしょうか? my $result = sprintf("%g", num); とすればいけるかと思いましたが、numが19120730.0000の場合に 1.91207e+07となり、だめでした(19120730となってほしい)。 さっき正規表現スレで聞いたんですが、正規表現は関係ないとレスされました。 宜しくお願いします。
67 名前:名無し募集中。。。 mailto:sage [2008/03/07(金) 19:05:18 ID:???] =~ /[0.]$// で削っていけば?
68 名前:nobodyさん mailto:sage [2008/03/07(金) 19:22:48 ID:???] >3.02000 → 0.02 3.02じゃなくて? 3.02なら*1すりゃいいだけだけど・・・
69 名前:nobodyさん mailto:sage [2008/03/07(金) 19:28:01 ID:???] >>66 一旦数値コンテキストで評価。 print "$_ => ", $_ + 0, "\n" for qw(3.00 3.02000 19120730.0000);
70 名前:nobodyさん mailto:sage [2008/03/07(金) 19:40:11 ID:???] >>67->>69 レスありがとうございます。 >>68 > 3.02じゃなくて? そのとおり、3.02でした。 *1でも+0でも可能でした。ありがとうございました。
71 名前:nobodyさん mailto:sage [2008/03/09(日) 04:23:14 ID:???] >>59 そんなもんJifty使って1時間もあればプロダクションまでいけるおれが答えよう。 (「在庫」の複雑さにもよるが) これからプログラムやりたいんであれば、なんとしてでもこの機会を利用しろ。 開発用マシン買ってくれとか、本買ってくれとか、時間くれとか。 どんな言語がやはっていても、RDBMSの知識は常に使える。 3rd manifestoまではまだ10年以上かかるだろう。 プログラムやるきがなくて、この社内アプリが手柄になるなら外注しろ。 どれでもなければ、「できません」だな。
72 名前:nobodyさん [2008/03/09(日) 06:21:52 ID:kv7E/tC/] MT使ってるだけでこんなの押し付けられる会社だぜ? 期待に応えたりしたらさらに良いように無理難題押し付けられるのが関の山だ にげちまえ
73 名前:nobodyさん mailto:sage [2008/03/09(日) 10:38:47 ID:???] >>59 「外注」というと上司が文句を言う場合は、部品(ライブラリ)を 買うと言ってみてはどうだろう? use ZAIKOKANRI ZAIKOKANRI->new( -option=>... ); みたいな形で起動する、ライブラリという名のアプリケーション。 実際、漏れの上司は何故か外注を嫌がるが、「ライブラリを買う」 というと許可が下りるので、フリーのプログラマの知り合いに 頼んで作ってもらってる。
74 名前:nobodyさん mailto:sage [2008/03/09(日) 16:08:58 ID:???] >>73 知り合いに発注すると、背任に問われかねない。
75 名前:nobodyさん mailto:sage [2008/03/10(月) 16:46:11 ID:???] すみません、下のソースで、sendmailをcloseしたときにエラー($?=256)が返されてしまうのですが、 これはどう対処すべきなのでしょうか…? #タイトルのエンコード $subject = encode('iso-2022-jp', $subject); # iso-2022-jpにエンコード $subject = encode_base64($subject, ''); # Base64にエンコード $subject = '=?iso-2022-jp?B?' . $subject . '?='; # ヘッダー文字列の追加 # 本文のエンコード $content = encode('iso-2022-jp', $content); # iso-2022-jpにエンコード # メール送信 $cnt=<<"EOT"; MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=iso-2022-jp From: $from To: $to Subject: $subject $content EOT open MAIL, "| /usr/sbin/sendmail -t" or &err("Cannot open sendmail: $!"); print MAIL $cnt; close MAIL or &err("Cannot close sendmail: !=$! ?=$?");
76 名前:nobodyさん [2008/03/10(月) 17:53:13 ID:dzM4A1jo] マルチポスト君に応える回答は御座いませぬ 他池
77 名前:75 mailto:sage [2008/03/10(月) 19:29:36 ID:???] 自己解決出来たので報告です。 >>75 のは、「文字コードが意味不明だゴラァ」と言われていたようでした。 (『encode』とは『UTF-8から』sjisやらiso-2022-jpやらにエンコードする機能。 一度UTF-8に『decode』しなければならなかった。) 以上、スレ汚し失礼しました。
78 名前:nobodyさん mailto:sage [2008/03/10(月) 22:41:42 ID:???] $lineの内容と同じ行がlog.txtになかったら、$lineをlog.txtの末尾に追記する といったものを作りたいのですが上手く行きません。 症状は、エラーは吐かず、同じ行があっても末尾に追記されてしまいます。 ご教授いただけたら助かります。 foreach my $aaa ( @{$data->{'aaa'}} ) { $line="This is $aaa->{'msg'}"; $chk=0; open( DAT, "./log.txt" ); while ( <DAT> ) { if( $_ == $line ){ $chk++; } } close( DAT ); if( $chk == 0 ){ open(FILE, ">>./log.txt"); $line="$line\n"; print FILE $line; close(FILE); } }
79 名前:nobodyさん mailto:sage [2008/03/10(月) 22:51:05 ID:???] chomp使えばいいんじゃない?
80 名前:nobodyさん mailto:sage [2008/03/10(月) 23:25:05 ID:???] 問.localtimeは配列を吐きますが、localtimeの動作の逆(配列を入れたら経過秒数合計が返ってくる)はどうしますか。
81 名前:nobodyさん [2008/03/10(月) 23:34:28 ID:dzM4A1jo] たしかGMTから秒数を返すモジュールがあったはず 比較的簡単に見つかるはずだからググッてみそ
82 名前:nobodyさん mailto:sage [2008/03/10(月) 23:42:22 ID:???] >>78 ==
83 名前:nobodyさん mailto:sage [2008/03/10(月) 23:43:47 ID:???] >>81 ありがとうございます。 別サイトのRSSのタイムスタンプを読み、データベース化するのに秒数の方が効率がいいと思いました。 ただ標準実装では出来ないようなのでYYYYMMDDhhmmssで行こうと思います。 チラシの裏 RSSの仕様のいい加減さと各サイトの独自拡張と欧文フォーマットの日付表記ウザすぎですね。 少々殺意を覚えました。YahooやgooやニュースサイトのRSSを見てみると、バージョン違いで タグが違う(pubDateやらdc:dateやら)はまだ許せますが、フォーマットもめちゃくちゃですね。 Mon, 10 Mar 2008 19:17:02 +0900 Mon,10 Mar 2008 11:02:29 +0900 2008-03-10T21:56:00+09:00 少なくとも3パターンはあるようで、非常に嘆かわしいと思いました。
84 名前:nobodyさん [2008/03/11(火) 00:00:51 ID:kt3GGsX4] XMLが自由すぎて使いづらいのが難点よねw
85 名前:nobodyさん mailto:sage [2008/03/11(火) 00:17:08 ID:???] 安易に拡張性を求めたら墓穴を掘るいい例だよね 自由にできるのは結構なことだけど,良く使う日時のフォーマットくらい統一してほしいぜ・・・
86 名前:nobodyさん mailto:sage [2008/03/11(火) 00:31:27 ID:???] >>83 Time::Local (の timelocal) は組込関数ではないが標準モジュール。 故意に抜かない限り入っている。
87 名前:nobodyさん mailto:sage [2008/03/11(火) 00:55:54 ID:???] フォーマットを統一するものを書いてみました。無駄があったらご指摘お願いします。 #!/usr/local/bin/perl sub DateFmt{ my $str=$_[0]; my $i,$temp,$num; if($str =~ /[0-9]{4}?(-[0-9]{2}?){2}?T[0-9]{2}?:[0-9]{2}?:[0-9]{2}?\+[0-9]{2}?:[0-9]{2}?/){ return $str; } $str =~ s/^[a-zA-Z]{3}?\,//; $str =~ s/^\ +//g; @mname = ('Jun','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); $i=1; foreach $temp (@mname){ $num=sprintf("%02d",$i); $str =~ s/$temp/$num/i; $i++; } ($day,$month,$year,$hms,$jst) = split(/ /,$str); $jst =~ s/\+(..)(..)/+$1:$2/; return "$year-$month-${day}T$hms$jst"; } print &DateFmt("Mon, 10 Mar 2008 19:17:02 +0900"); print "\n"; print &DateFmt("Mon,10 Mar 2008 11:02:29 +0900"); print "\n"; print &DateFmt("2008-03-10T21:56:00+09:00"); print "\n";
88 名前:nobodyさん mailto:sage [2008/03/11(火) 05:18:16 ID:???] 読むのもめんどくせえよ use Date::Parse; print str2time($_), "\n" for <DATA>; __DATA__ Mon, 10 Mar 2008 19:17:02 +0900 Mon,10 Mar 2008 11:02:29 +0900 2008-03-10T21:56:00+09:00
89 名前:nobodyさん mailto:sage [2008/03/11(火) 05:24:13 ID:???] XML::RSSでEUCのRSSを読み込むにはどうしたらいいんだ
90 名前:nobodyさん mailto:sage [2008/03/11(火) 09:52:01 ID:???] 変換してから読み込めば?
91 名前:nobodyさん mailto:sage [2008/03/11(火) 09:53:07 ID:???] >>87 +0900の部分はグリニッジ比だから-から始まることもあり得る。
92 名前:nobodyさん [2008/03/11(火) 12:11:54 ID:PA7R3QgS] CPANモジュールのSpreadsheet::WriteExcelを導入しています。 このモジュールのあるバージョン以下の場合はメソッドA実行、それ以外はメソッドB実行 といった振り分けを行いたいのですが、モジュールのバージョンをperl上で調べるには どうすればいいのでしょうか? print $SpreadSheet::WriteExcel::VERSION; としても、何も表示されませんでした。
93 名前:nobodyさん mailto:sage [2008/03/11(火) 12:35:37 ID:???] version 2.18 はそれできちんと表示された。その他の version は知らん。 ソースに当ってみたら?
94 名前:nobodyさん mailto:sage [2008/03/11(火) 13:47:11 ID:???] >>93 レスありがとうございます。わざわざ調べて頂きどうもです。 やってしまいました。 print $SpreadSheet::WriteExcel::VERSION; ではなく、 print $Spreadsheet::WriteExcel::VERSION; でした。これははずかしい(*´Д`) バージョン2.15、2.20とも表示されました。大変失礼しました。
95 名前:nobodyさん mailto:sage [2008/03/11(火) 14:00:50 ID:???] どっちも同じなのだがw
96 名前:nobodyさん mailto:sage [2008/03/11(火) 14:26:49 ID:???] 大文字小文字
97 名前:nobodyさん mailto:sage [2008/03/11(火) 14:34:32 ID:???] あ〜ww
98 名前:nobodyさん mailto:sage [2008/03/12(水) 10:02:54 ID:???] >>94 use strict汁!
99 名前:nobodyさん mailto:sage [2008/03/12(水) 20:50:08 ID:???] 突然すみません。 Perlの勉強中で簡素なプログラムを作成しているのですが POSTでデータがうまく送信できなくて困っています。 同じコードでMETHOD="GET"とすると送信できるのですが パスワード入力などをするため、URLにパラメータを表示したくないのです。 お知恵を拝借させてください。よろしくお願いします
100 名前:nobodyさん mailto:sage [2008/03/12(水) 20:55:51 ID:???] >>99 POSTで送ることがわかってるなら調べれば簡単だと思うんだが。 CGI.pmとか使うと簡単にできる
101 名前:nobodyさん mailto:sage [2008/03/12(水) 21:02:36 ID:???] 送信出来ないのでなく受信したあとの処理が出来てないに1000ペリカ
102 名前:nobodyさん mailto:sage [2008/03/12(水) 21:04:45 ID:???] >>100 様 迅速なレス、感謝します。 浅学でお恥ずかしいのですがCGI.pmについてこれから調べてみます。 ありがとうございます。
103 名前:nobodyさん mailto:sage [2008/03/12(水) 21:10:03 ID:???] >>101 様 レスありがとうございます 受信後の処理は、次のような処理を記述しております if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $form, $ENV{'CONTENT_LENGTH'}); } else { $form = $ENV{'QUERY_STRING'}; } @pairs = split(/&/, $form); foreach (@pairs) { ($name, $value) = split(/=/, $_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/>/>/g; $value =~ s/</</g; &jcode'convert(*value, 'sjis'); &jcode'convert(*name, 'sjis'); $FORM{$name} = $value; } GETだとうまく処理されるので2行目の read(STDIN, $form, $ENV{'CONTENT_LENGTH'}); が怪しそうですね。 CGI.pm?で調べられるのかどうなのかまだよくわかっておりませんが まずいところの見当すらつかなかったので助かります。 ありがとうございます。
104 名前:nobodyさん mailto:sage [2008/03/12(水) 21:18:29 ID:???] ぱっと見た感じ問題なさそうだけどな しかしnameにも日本語を使ってるのか