08/02/25 19:26:15
ム板Perlスレより 1 of 2
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: URLリンク(www.site-cooler.com)
[本]
リャマ: URLリンク(www.oreilly.co.jp)
駱駝: URLリンク(www.oreilly.co.jp)
Effective Perl: URLリンク(www.ascii.co.jp)
クックブック: URLリンク(www.oreilly.co.jp)
Perl ベストプラクティス: URLリンク(www.oreilly.co.jp)
Perl Hacks: URLリンク(www.oreilly.co.jp)
[オンラインマニュアル] (追加)
最新のドキュメント: URLリンク(search.cpan.org)
perl5.8.xのドキュメント(一部): URLリンク(www.kt.rim.or.jp)
perl5.005_03 のドキュメント: URLリンク(www.kt.rim.or.jp)
日本語ドキュメント検索: URLリンク(www.cpan.jp)
perldoc.jp: URLリンク(www.perldoc.jp)
Perldoc.com: URLリンク(www.perldoc.com)
3:nobodyさん
08/02/25 19:26:39
ム板Perlスレより 2 of 2
[モジュール]
CPAN.com: URLリンク(search.cpan.org)
河馬屋二千年堂: URLリンク(homepage3.nifty.com)
[テクニック]
Perlメモ: URLリンク(www.din.or.jp)
Perlのページ: URLリンク(homepage1.nifty.com)
Perlの小技: URLリンク(homepage3.nifty.com)
[Perl5.8Unicodeメモ]
URLリンク(www.pure.ne.jp)
URLリンク(www.namazu.org)
URLリンク(www.lr.pi.titech.ac.jp)
4:nobodyさん
08/02/25 22:05:56
WindowsXP+XAMMP+Perl Add-onで、WWW:Mixiを利用して、
URLリンク(digit.que.ne.jp)
↑のHPのコードを動かしているんですが、
500 Can't locate object method "configure" via package "Net::HTTP"
というエラーが出ます。同じCGIをXREAで動かした場合は正常に動作しました。
これはどういった理由でエラーが起こっているんでしょうか?
5:nobodyさん
08/02/25 22:17:42
>>4
鯖にモジュールがインストールされてないんじゃない?
/usr/lib/的なフォルダに/Net/HTTP.pmを入れてみたら?
6:nobodyさん
08/02/25 22:28:05
>>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さん
08/02/25 22:31:43
>>6
URLリンク(www.google.co.jp)
8:nobodyさん
08/02/25 23:24:10
perlで書いた2つのCGIがあるのですが、
1つ目のCGIを実行中にエラーが起きた時に$ERROR=1等として
エラーフラグに数値を入れて、その値を2つ目のCGIに渡して
2つ目のCGIでエラーメッセージを表示させたいのですが、
色々調べているのですが上手く行きません。
何か上手く2つ目のCGIに値を渡す方法がありましたら、
よろしくお願いします。
9:nobodyさん
08/02/25 23:44:14 JDOb3tEV
Aフォルダの中にある10~30.txtファイルがあります。
Aフォルダの中身はこれが全てでこれを全部開きたいのです。
open(FILE, '10.txt') or die "$!";
while (my $line =<FILE>) {
print $line;
}
close(FILE);
これだと一つのファイルの中身は見れますが、フォルダの中全てを開きたい
僕にとってこれは違う気がします。
なんとか、方法はないでしょうか?宜しければ教えてください。
10:nobodyさん
08/02/25 23:55:34
>>9
>>2
URLリンク(www.site-cooler.com)
11:nobodyさん
08/02/26 01:25:07
オブジェクト指向を勉強中です。
あるメソッドが、自分自身のクラス内のクラスメソッドを呼び出すには
どのように書いたらよいでしょうか。
クラスメソッドは普通Package->hoge()とするようですが、
自分自身のパッケージをわざわざ書くのが正しいのかと
疑問に思いました。よろしくお願いします。
12:nobodyさん
08/02/26 01:59:04
__PACKAGE__->hoge();
13:nobodyさん
08/02/26 02:33:17
ありがとうございます!
14:4
08/02/26 07:45:15
>>7
色々と見てみましたが未だ解決しませんorz
15:nobodyさん
08/02/26 09:29:48
>>14
XAMPPには詳しくないですが、
出力とは別にエラーログに書かれてないですか?
XAMPP/log/error.logみたいに
16:nobodyさん
08/02/26 11:40:40
ライブラリを読み込む優先順位なんですが、
カレントディレクトリを最優先したいので、
unshift @INC, pop @INC; ってしたいと思うんですが、
環境によってうまくいかなかったりします?
自分の環境で@INCを表示すると
C:/usr/site/lib C:/usr/lib . となるんですが、
unshift @INC, '.';のほうが良いんですかね?
17:nobodyさん
08/02/26 11:59:34
.がどこにあるかは環境によって違うから、除去と追加は.を明示した方がいいんじゃないか。
18:nobodyさん
08/02/26 12:45:05
>>16
use lib '.'; で良きに計らってくれる。
URLリンク(search.cpan.org)
5.00503 の lib.pm だと重複除去をしてくれないから
BEGIN {
my %dup;
@INC = grep !$dup{$_}++, ('/path/to/your/extlib', @INC);
}
なんて書いたりするけど。
19:nobodyさん
08/02/26 13:03:29
>>17 >>18 ありがとう
use FindBin;
use lib $FindBin::Bin;
で解決しました。
重複してるけど、除去しなくても
確実にカレントディレクトリで見つかれば問題ないですよね?
20:nobodyさん
08/02/26 15:20:10
>>15
apacheのerror.logならあるのですが、
perl実行時のエラーを吐き出しているlogはありませんでした。
WWW:Mixiで使っているモジュールがあるかどうかなども確認したのですが、
全て揃っていて、Winの自鯖なので権限なども関係ないと考えているのですが・・・解決しません。
21:nobodyさん
08/02/26 16:11:53 rftlSzSy
WIN鯖はなにかと問題が多いんで
切り替えることをおすすめしますよ。
22:nobodyさん
08/02/26 16:27:13
>>20
XAMPPとかWWW::Mixiがどんな仕様か詳しくは知らないけど、
普通のPerl-CGIなら、そのApacheのerror.logにエラーが出力されてるハズ。
23:初心者
08/02/28 15:16:09 GDQH6oGX
最終的に曜日を知りたいので、指定した○年○月1日まで、今から何日前なのか後なのかを計算する
方法をどなたか教えてください。
24:nobodyさん
08/02/28 15:55:55
>>23
URLリンク(search.cpan.org)
URLリンク(perldoc.jp)
use Date::Calc qw(Day_of_Week);
my $dow = Day_of_Week($year,$month,$day);
25:nobodyさん
08/02/28 15:57:12
Windowsの英語版と日本語版を区別する方法ってないですか?
$^OでOS名は取れるのですが…
現在はシステムの`date /t`の戻り値を見て判断しています。
26:初心者
08/02/28 16:11:55 GDQH6oGX
>>24さんありがとうございます。
出来ればモジュールを使わずに日数を計算する方法はないんでしょうか?
27:nobodyさん
08/02/28 16:36:04 TYs56hmn
>>24
>>1
28:nobodyさん
08/02/28 16:36:24 TYs56hmn
間違えたwすまんw
>>26
>>1
29:nobodyさん
08/02/28 16:55:57
>>25
URLリンク(homepage3.nifty.com)
30:nobodyさん
08/02/28 17:21:40
知恵を貸してください
ログインスクリプト作ってるんですが
最初の画面でhttpかhttpsを選択
httoの場合は普通に次の画面でCookie食べておしまい
https(SSL)の方はpost後代理鯖(共有SSL)でCookie食べる
locationで元の鯖に飛ばしてhttpの方もCookie食べる
という処理なのですがlocationなので当然丸見えなんです。。。
何かスマートな方法ありましたらご教示願います。
31:25
08/02/28 17:24:53
>>29
サンクス。解決したよ
32:nobodyさん
08/02/28 21:20:30
LWP::UserAgentについて質問があります。
下ページを取得しようとすると、CPU使用率が100%になったままで
応答がなくなり?ます。ページも取得できません。
こんな場合、途中で諦めたいのですが、タイムアウトを設定しても変化なし。
どうすれば良いかアドバイスお願いします。
#!/usr/bin/perl
use strict;
use LWP::UserAgent;
my $url = 'URLリンク(www.mother-house.jp)';
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さん
08/02/28 22:07:20
そのページ3G近くあんじゃんwブラウザで開いて焦ったw
たぶんメモリが足りないだけなんじゃないかな
$ua->max_sizeで上限決めたりヘッダにrange付けて小分けにリクエスト投げるといい
34:nobodyさん
08/02/28 22:32:37
>>33
そんなに大きかったのですか!w
すみません、でもお陰で$ua->max_sizeを知ることができましたし、
デフォルト無制限なのを知ることも出来ました。
どうもありがとうございました。
35:nobodyさん
08/02/28 23:44:29 txq/MTXf
push(@list, {'num1' => 1, 'num2' => 2});
上記データのnum2をキーにしてをsortを行うことは可能でしょうか。
もし可能でしたら方法をご教示いただけますと幸いです。
宜しくお願いします。
36:nobodyさん
08/02/29 00:12:26
@sorted = sort { $a->{"num2"} <=> $b->{"num2"} } @list;
37:nobodyさん
08/02/29 01:24:59
>>33
???
そのページ30MB位しかないぞ。
content-lengthも29239056ってなってるし。
たしかにブラウザで開いたらCPU100%で1分くらい固まったけど・・。
でも、取得できたから、保存して、テキストエディタで開いてみたら、やっぱり30MBくらいだったぞ。
>>32
で、LWPなんだが、ウチの環境でも、ファイルサイズが大体3~4メガ位より大きくなると、
とたんに反応が無くなる。ちなみにメモリは1G積んでて、余りも800M以上ある状態で・・・。
何故だかはわからん。
ちょっとソース読んでみるか。
38:nobodyさん
08/02/29 01:31:25
でも、そんな非常識なサイトを取得する意義ってあるのかな。
まあ、そういうことがしたいってことなら仕方ないけど、そういう非常識なサイト対策って意味で、
>>33-34あたりの対策をしておく必要があるんだなっていう意味で参考になった。
39:nobodyさん
08/02/29 12:47:11
ありゃあ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
08/02/29 15:29:10
他あたって見ます
失礼しました
41:初心者
08/02/29 17:30:27 VfFNtRxq
カレンダーを表示する時に
日 月 火 水 木 金 土
| | | | | | 1 | 2|
_ _ _ _ _ _ _ ← 線はもっとうえに
うまく書けてなくて申し訳ないですが、数字を囲むような形で常に5行表示させるには
どうしたらよいでしょうか。どなたか教えてください。
42:nobodyさん
08/02/29 17:44:40
>>36
遅ればせながら、有難うございました。
助かりました。
43:nobodyさん
08/02/29 18:16:34
質問です。
2進数から10進数に変換したいんですけど
どうすればできますか?
>>41
テーブルタグでも使ったほうがいいんじゃないですか?
44:43
08/02/29 18:22:40
質問が変なので追記
$a = 10101010;
となっている場合に
$a = '0b' . $a;
$dec = oct $a;
のようにしてます。
もっとスマートに0bを付けられないでしょうか?
45:nobodyさん
08/02/29 18:33:58
>>43-44
my $dec = oct "0b$a";
URLリンク(mikeneko.creator.club.ne.jp)
46:nobodyさん
08/02/29 19:50:41
>>45
簡単でしたね…。ありがとうございます。
47:37
08/02/29 20:11:23
>>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さん
08/02/29 21:04:20
$ua->requestにcallback関数とサイズ渡したほうが
range対応して無くても使えるしいいんじゃないかな?
49:nobodyさん
08/03/01 04:06:42
>>48
そうなんだよな。
確かにそんなことも出来たようなことを、かつてdocument流し読みした時にあったな~って思って、もっかいmanualを詳しく読んでみたら、
なにも$ua->request()に、code_refを投げなくても、直接$filenameを渡せば、Discにcontentsを書いてくれるそうなんで、いっちょやってみた。
そしたら、Win環境でもNetwork転送時間+書き込み時間位で取得できるようになった。
ファイルサイズを100M,200M,500MとでかくしてやってもLWP(Perl)がハングすることなく、大体見積もり程度の時間で取得出来るようになった。
これだと、取得したHTMLをさらにParseして、処理をかけるってことをやろうとすると、ファイル開かないといけないけど、
まあバイナリファイル取得する分には十分だな。
なんつうか、ちゃんとドキュメント読めよオレ!っていう結論だ。
50:nobodyさん
08/03/02 22:25:56
全部メモリに読み込む以外のインターフェース用意するのは当たり前だ。そのくらい気付いてドキュメント嫁。
それ以前に、数百MBのデータ読み込もうとするな。へぼ。
51:nobodyさん
08/03/03 05:44:20
>>50
いやいや、今回の場合は、メモリに十分余裕があるのに、たかだか5Mとか10M位でも
Win(ActivPerl)環境だと激しく遅くなるのに、Linux環境だとそうはならない。ってとこで色々やって見たわけなんだわ。
まあ確かに、ちゃんとドキュメント読んでたら、最初の質問出たときに素早く正確なレス返せたかもしれないけど、
そこらへんヘボなんは認めるよ。まあ初心者スレなんだし。
だけど、俺なんかはPerlで数百M~GBクラスのファイル読み込みとか普通にするし、
Perlの使用メモリが2G近くまで行ったりもするけど、今までそんな使い方してて、異常だとか思ったことなかったけど・・。
(そりゃあ、レンサバとか共用マシンとかでやるのは非常識だと思うし、CGIとかの鯖環境ではオレもそんなことしないけど、
自分専用で使う分にはええんでないの。今回みたいな検証したり、ベンチマーク取ったりもするし。)
52:nobodyさん
08/03/05 05:02:04 yN6MH4LB
ファイルパスを引数として受け取り
受け取ったファイルパスにファイルを作るサブルーチンを作りたいんですが、
ファイルパスが正しいかチェックするための正規表現がどうしてもかけません。
マッチする条件として
・ドットで始まるファイルは不可
・拡張子は必須/\.[a-z]+$/
・チルダ不可
・先頭のみ./は許可。../は不可。
・ディレクトリ、ファイル名は/[A-Za-z0-9\-]/にマッチ
・連続するスラッシュ、ドットは不可
・m|^/|も許可
書いてみてもものすごく長くなって、結局破綻してしまいます。
たすけて
53:nobodyさん
08/03/05 05:08:29
追記
open(FH,">",$file);
で作れるファイル名なら問題ないです。
ただし、カレントディレクトリ以下です。
54:nobodyさん
08/03/05 05:42:23 ImwXiBY3
use lib qw( ./lib );
use Data::Alias;
で
Can't locate loadable object for module Data::Alias
と言われます。
./lib/Data/にAlias.pmをポコッと置いてるだけなんですけど
何が足りないんでしょうか?
55:nobodyさん
08/03/05 08:19:07
>>54
@INCを出力してみたら?
フルパス打ってみるとか
56:nobodyさん
08/03/05 10:04:58
>>54
「Can't locate loadable object」とあるように
Data::Alias は pure perl なモジュールじゃない。
URLリンク(search.cpan.org)
57:nobodyさん
08/03/06 03:17:10
>>52
無理してひとつの正規表現で済ませなきゃいーじゃん。
58:nobodyさん
08/03/06 05:45:50 F1MYa2qu
たしかに
マッチしないものをどんどんはじけば処理少なくならないか?
59:nobodyさん
08/03/06 15:48:54
レンタルサーバにMT入れてブログをやってるってだけで、
社内でネットプログラムに一番詳しい人にされてしまいました。
材料仕入れて加工して個人に売るという会社なのですが、DQN取締役から
「在庫管理と顧客管理をブラウザから処理できるシステムってできるでしょ?
年度始めまでにお願いね」
と言われて涙目です。
プログラムは未経験で何をどうしていいかすら分かりません。
在庫管理のデータベースシステムの概要や、スクリプトの流れが
理解できるような書籍があったら教えてください。
ラクダ本は買ってみたのですが一から勉強するにはちょっと時間が足りません…
60:nobodyさん
08/03/06 16:06:45
「できません。」って言う
61:nobodyさん
08/03/06 16:19:02
フリーで落ちてる奴でも使っておけ
62:nobodyさん
08/03/06 16:56:54
できませんが一番
63:nobodyさん
08/03/06 20:17:17
URLリンク(xn--lckja1b6r.jp)
URLリンク(xn--lckja1b6r.jp)
64: ◆TWARamEjuA
08/03/07 00:01:42 BE:871924-2BP(7072)
(´-`).。oO(やりたいよなぁ。。。)
65:nobodyさん
08/03/07 12:30:47
>59
予算もらって外注する
予算なければ出来ないっていうか、
予算相当に自分の人件費を上げてもらって頑張って勉強
66:nobodyさん
08/03/07 18:55:17 +CnMyeLv
質問です。
小数点以下の右端の0を全部取り除きたいです。
小数点以下が0しかない場合は、小数点も含めて取り除きたいです。
3.00 → 3
3.02000 → 0.02
どう書けばよいのでしょうか?
my $result = sprintf("%g", num); とすればいけるかと思いましたが、numが19120730.0000の場合に
1.91207e+07となり、だめでした(19120730となってほしい)。
さっき正規表現スレで聞いたんですが、正規表現は関係ないとレスされました。
宜しくお願いします。
67:名無し募集中。。。
08/03/07 19:05:18
=~ /[0.]$//
で削っていけば?
68:nobodyさん
08/03/07 19:22:48
>3.02000 → 0.02
3.02じゃなくて?
3.02なら*1すりゃいいだけだけど・・・
69:nobodyさん
08/03/07 19:28:01
>>66
一旦数値コンテキストで評価。
print "$_ => ", $_ + 0, "\n" for qw(3.00 3.02000 19120730.0000);
70:nobodyさん
08/03/07 19:40:11
>>67->>69
レスありがとうございます。
>>68
> 3.02じゃなくて?
そのとおり、3.02でした。
*1でも+0でも可能でした。ありがとうございました。
71:nobodyさん
08/03/09 04:23:14
>>59
そんなもんJifty使って1時間もあればプロダクションまでいけるおれが答えよう。
(「在庫」の複雑さにもよるが)
これからプログラムやりたいんであれば、なんとしてでもこの機会を利用しろ。
開発用マシン買ってくれとか、本買ってくれとか、時間くれとか。
どんな言語がやはっていても、RDBMSの知識は常に使える。
3rd manifestoまではまだ10年以上かかるだろう。
プログラムやるきがなくて、この社内アプリが手柄になるなら外注しろ。
どれでもなければ、「できません」だな。
72:nobodyさん
08/03/09 06:21:52 kv7E/tC/
MT使ってるだけでこんなの押し付けられる会社だぜ?
期待に応えたりしたらさらに良いように無理難題押し付けられるのが関の山だ
にげちまえ
73:nobodyさん
08/03/09 10:38:47
>>59
「外注」というと上司が文句を言う場合は、部品(ライブラリ)を
買うと言ってみてはどうだろう?
use ZAIKOKANRI
ZAIKOKANRI->new( -option=>... );
みたいな形で起動する、ライブラリという名のアプリケーション。
実際、漏れの上司は何故か外注を嫌がるが、「ライブラリを買う」
というと許可が下りるので、フリーのプログラマの知り合いに
頼んで作ってもらってる。
74:nobodyさん
08/03/09 16:08:58
>>73
知り合いに発注すると、背任に問われかねない。
75:nobodyさん
08/03/10 16:46:11
すみません、下のソースで、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さん
08/03/10 17:53:13 dzM4A1jo
マルチポスト君に応える回答は御座いませぬ
他池
77:75
08/03/10 19:29:36
自己解決出来たので報告です。
>>75のは、「文字コードが意味不明だゴラァ」と言われていたようでした。
(『encode』とは『UTF-8から』sjisやらiso-2022-jpやらにエンコードする機能。
一度UTF-8に『decode』しなければならなかった。)
以上、スレ汚し失礼しました。
78:nobodyさん
08/03/10 22:41:42
$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さん
08/03/10 22:51:05
chomp使えばいいんじゃない?
80:nobodyさん
08/03/10 23:25:05
問.localtimeは配列を吐きますが、localtimeの動作の逆(配列を入れたら経過秒数合計が返ってくる)はどうしますか。
81:nobodyさん
08/03/10 23:34:28 dzM4A1jo
たしかGMTから秒数を返すモジュールがあったはず
比較的簡単に見つかるはずだからググッてみそ
82:nobodyさん
08/03/10 23:42:22
>>78
==
83:nobodyさん
08/03/10 23:43:47
>>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さん
08/03/11 00:00:51 kt3GGsX4
XMLが自由すぎて使いづらいのが難点よねw
85:nobodyさん
08/03/11 00:17:08
安易に拡張性を求めたら墓穴を掘るいい例だよね
自由にできるのは結構なことだけど,良く使う日時のフォーマットくらい統一してほしいぜ・・・
86:nobodyさん
08/03/11 00:31:27
>>83
Time::Local (の timelocal) は組込関数ではないが標準モジュール。
故意に抜かない限り入っている。
87:nobodyさん
08/03/11 00:55:54
フォーマットを統一するものを書いてみました。無駄があったらご指摘お願いします。
#!/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さん
08/03/11 05:18:16
読むのもめんどくせえよ
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さん
08/03/11 05:24:13
XML::RSSでEUCのRSSを読み込むにはどうしたらいいんだ
90:nobodyさん
08/03/11 09:52:01
変換してから読み込めば?
91:nobodyさん
08/03/11 09:53:07
>>87
+0900の部分はグリニッジ比だから-から始まることもあり得る。
92:nobodyさん
08/03/11 12:11:54 PA7R3QgS
CPANモジュールのSpreadsheet::WriteExcelを導入しています。
このモジュールのあるバージョン以下の場合はメソッドA実行、それ以外はメソッドB実行
といった振り分けを行いたいのですが、モジュールのバージョンをperl上で調べるには
どうすればいいのでしょうか?
print $SpreadSheet::WriteExcel::VERSION;
としても、何も表示されませんでした。
93:nobodyさん
08/03/11 12:35:37
version 2.18 はそれできちんと表示された。その他の version は知らん。
ソースに当ってみたら?
94:nobodyさん
08/03/11 13:47:11
>>93
レスありがとうございます。わざわざ調べて頂きどうもです。
やってしまいました。
print $SpreadSheet::WriteExcel::VERSION;
ではなく、
print $Spreadsheet::WriteExcel::VERSION;
でした。これははずかしい(*´Д`)
バージョン2.15、2.20とも表示されました。大変失礼しました。
95:nobodyさん
08/03/11 14:00:50
どっちも同じなのだがw
96:nobodyさん
08/03/11 14:26:49
大文字小文字
97:nobodyさん
08/03/11 14:34:32
あ~ww
98:nobodyさん
08/03/12 10:02:54
>>94
use strict汁!
99:nobodyさん
08/03/12 20:50:08
突然すみません。
Perlの勉強中で簡素なプログラムを作成しているのですが
POSTでデータがうまく送信できなくて困っています。
同じコードでMETHOD="GET"とすると送信できるのですが
パスワード入力などをするため、URLにパラメータを表示したくないのです。
お知恵を拝借させてください。よろしくお願いします
100:nobodyさん
08/03/12 20:55:51
>>99
POSTで送ることがわかってるなら調べれば簡単だと思うんだが。
CGI.pmとか使うと簡単にできる
101:nobodyさん
08/03/12 21:02:36
送信出来ないのでなく受信したあとの処理が出来てないに1000ペリカ
102:nobodyさん
08/03/12 21:04:45
>>100様
迅速なレス、感謝します。
浅学でお恥ずかしいのですがCGI.pmについてこれから調べてみます。
ありがとうございます。
103:nobodyさん
08/03/12 21:10:03
>>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さん
08/03/12 21:18:29
ぱっと見た感じ問題なさそうだけどな
しかしnameにも日本語を使ってるのか
105:nobodyさん
08/03/13 00:55:15
KENTのコピペ臭がするのは俺だけ?
106:nobodyさん
08/03/13 01:19:37
>>103
うーん、区切りがほんとに’&’なのかな。
一回、 print $form ; やってみれば?
107:nobodyさん
08/03/13 02:21:43
Perl4時代のこの定番処理がいまだに使われてるってのもなぁ
108:nobodyさん
08/03/13 03:58:19
そこでcgi-lib.plですよw
109:nobodyさん
08/03/13 13:54:44
最近、GET/POSTのデータやテキストファイルを自前で読み込まなきゃならないことがあって
「あれ? どうやるんだっけ?」と本気で焦った俺。
使わないとそんなもんだよな。
110:nobodyさん
08/03/13 20:56:52
>>109
ライブラリが整備されてそっち使うと忘れるんだよな
111:nobodyさん
08/03/14 00:19:02 jE/64EXv
くだすれにも書き込んだ者ですが。
$aaa=1;
if($aaa==1||$aaa==3)
これをもっと簡潔に書くにはどうすればいいですか。
あと、「$aaaが8のn倍ならマッチさせる」というのも
わかりませんでした、おねがいしますm(_ _)m
112:nobodyさん
08/03/14 00:26:38
!($aaa % 8) ← これで8の倍数のチェックだけど、マイナス値は試してないのでわかんないw
8で割ってみて余りが0なら割り切れてるので8の倍数ということ
113:nobodyさん
08/03/14 00:34:03
$aaa=1;
if($aaa==1||$aaa==3)
if ($aaa =~ /^[13]$/)
こんなのできないこともないけど、そのままでいいんじゃないか?
114:111
08/03/14 00:40:08 jE/64EXv
>112
そういうやりかたもあるんですね。
>113
極端にいえば
if($aaa==1||$aaa==5||$aaa==13||$aaa==17||$aaa==25||$aaa==34||)
こんなに長くなってしまう。
これじゃあまりにもじゃないですか?
115:nobodyさん
08/03/14 01:07:31
$aaa==9 や $aaa==21 が入ってなくて $aaa==34 が出てくるから
長くなるんだと思う。
116:nobodyさん
08/03/14 01:13:26
ありえる数字を列挙させて、それのチェック対象が1つの変数なら
1つの変数に対して配列で一気にチェックできた気がする
grep 使ったような使わなかったような・・・ごめん。 俺にはもう無理w
117:nobodyさん
08/03/14 01:41:34
長くて見づらいけど、処理量が多くて重くなるよりはマシかな。
そんな劇的な違いは無いとしても気分的になんとなくw
118:nobodyさん
08/03/14 01:51:12
重いと言っても何百万回も繰り返さないから、こうしちゃうなw
if($aaa =~ /^(1|5|13|17|25|34)$/)
119:nobodyさん
08/03/14 06:02:08
%tmp = map { $_ , 1 } ( 1, 5, 13, 17, 25, 34 ) ;
if ( defined $tmp{$aaa} ){
print "俺の名を言ってみろ\n" ;
}
120:nobodyさん
08/03/14 11:41:19
>>116
grep使う方法だとこうかな?
if ( grep { $aaa == $_ } qw( 1 5 13 17 25 34 ) ) {
# code here
}
121:nobodyさん
08/03/14 11:42:57
# no 5.10
grep { $aaa == $_ } qw/1 5 13 17 25/;
#
use List::MoreUtils qw/any/;
any { $aaa == $_ } qw/1 5 13 17 25/;
# use 5.10
$aaa ~~ [qw/1 5 13 17 25/];
122:nobodyさん
08/03/14 11:53:06
ほとんどの場合、ブロックより式の方が早いので
my %tmp = map +( $_ => 1 ), ( 1, 5, 13, 17, 25, 34 );
grep $aaa == $_ ,( 1, 5, 13, 17, 25, 34 );
123:nobodyさん
08/03/14 14:50:45
dankogaiがエントリ書いてた
URLリンク(blog.livedoor.jp)
124:nobodyさん
08/03/14 15:48:58
>>111 >>113-122
URLリンク(www.kt.rim.or.jp)
125:nobodyさん
08/03/14 22:34:42 exCIvuwa
Perl初心者です。宜しくお願いします。
ディレクトリ探索し、ディレクトリの中の「.txt」をファイルを見つけたら
その行数を出力したいのですが、「open(FH, "$_") or die;」のところで
落ちます。何がいけないのでしょうか?
---ここから
use File::Find;
my $dir = 'TestDir';
find(\&print_file, $dir);
sub print_file {
$_ = $File::Find::name;
if (/.+\.txt/) {
print "$_ \t";
open(FH, "$_") or die;
1 for <FH>;
print $. . "行\n";
close(FH);
} else {
print "$_ \n";
}
}
126:nobodyさん
08/03/14 22:50:02
>>125
open(FH, "$_") or die "$! [$_]";
1 while <FH>;
とでもして吐かれたエラーメッセージを読む。
127:nobodyさん
08/03/14 23:25:19
>>125
File::Find の find では pwd が変りますが、
$File::Find::name で得られるのはこの場合は $dir からのパス。
use Cwd ;
して if 文の中に
print getcwd ;
して確認してみそ。
簡単な解決方法は、$dir にゼッタイパスを突っ込め。
それから perldoc File::Find くらいしろ。
128:nobodyさん
08/03/16 19:27:01 483Ek7KZ
Commonで漢字を含むデータをPOSTしたいのですが、漢字部分が出力されません。
以下で生成されたcontentをチェックしても、漢字だけ消えています。
どの様にすれば良いでしょうか。
よろしくお願いいたします。
use encoding "shift-jis";
LWP::UserAgent;
use HTTP::Request::Common qw(POST);
my %form=('test'=>'漢字123');
my $request = POST('URLリンク(test.test)',[%form]);
my $con=$request->content;
print "test:$form{test}\n";
print "content:$con\n";
出力
test:漢字123
content:test=123
129:nobodyさん
08/03/16 22:26:04
>>128
# use encoding "shift-jis";
# LWP::UserAgent;
130:nobodyさん
08/03/16 23:03:42 eaCmNgRi
はじめましてこんにちは。
自作の掲示板を作ってまして、ある書き込みにレスが付いた場合は
そのレスの数をカウントして画面に表示させる、という事をやってます。
現状はこんな感じです。
print "($res)<br>\n" if ($res ne "");
レスがある場合は(9)とかの某かの数字、レスが付いてない場合は空白という所までは
上手く行ってるのですが、
この(9)の部分を赤で出力したいと思ってます。
出来れば上記の命令の中だけで完結させたいのですが、無理でしょうか?
131:nobodyさん
08/03/16 23:16:51
>>130
print qq|<span style="color:red;">($res)</span><br>\n| if $res;
Webサイト制作初心者用質問スレ Part 194
スレリンク(hp板)
△▲ WebProg 初心者の質問 Part17 ▼▽
スレリンク(php板)
132:nobodyさん
08/03/17 02:23:56 WVXzjYIy
>>129
ありがとうございました。
ただ、UserAgentは使うのでコメントアウトできません。
EUCでソースを書き、1行目だけコメントアウトで解決しました。
133:nobodyさん
08/03/17 11:04:17 +D1UxdpV
>>126
>>127
ありがとうございました。解決しました。
134:130
08/03/17 21:21:26 iYfDDUad
>>131
ありがとうございました、無事に解決いたしました。
これを応用して、文字のサイズを変える事もやってみましたが上手く行きました!
ところで考え方の確認を1つ。。。
admin.cgiで生成した画面から、subって画像をUPロード。
その画像を、album.cgiという別の画面上に表示させていて上手く動いてるのですが、
「その画像がUPされた日時をalbum.cgiの画面上に表示させる。」という事を考えています。
すごーく単純に考えて、
「subる直前に日時を取得して、それを変数に格納。その変数をalbum.cgiに渡して、その変数をprintすればOKかも。」
と考えてやってますが上手く行きません。(表示すらされない。)
もともとCOBOラーなもんで、この手のコーディングは激苦手なのですが四苦八苦しながら何とかやってます。
変数の初期化は?変数は共通変数なのかpg内変数なのか?受け渡しはどうやってやるのか?
などなど色々疑問は尽きませんが、そもそも上記の考え方でおかしくはないですか?
135:nobodyさん
08/03/17 22:03:37
>>134
>>1-3
△▲ WebProg 初心者の質問 Part17 ▼▽
スレリンク(php板)
CGI: Common Gateway Interface part 13
スレリンク(php板)
136:nobodyさん
08/03/18 10:37:05
>>134
CGIプログラム:バッチ
htmlフォーム:コマンドライン
と考えれば、おのずと答えが見えると思われ。
各バッチ処理間でデータをやり取りするには、
・ファイルまたはDBに格納する
・コマンドラインオプションを利用しうまく受け渡す方法を考える
のいずれかになる。
CGIプログラム間でうまくデータを受け渡すには
・セッション(ファイルまたはDB)を利用する
・htmlフォームデータとして生成しPOSTする(値を変えられたくなければHIDE要素にする)
のいずれかになる。
137:nobodyさん
08/03/18 11:07:18
小難しく考えるなよ
stat使えばいいだろ
138:nobodyさん
08/03/18 17:51:36 yz+TlyvN
お世話になっております。
----------------
sub test{
$hoge = shift;
$fuga = shift;
$hoge += $fuga;
}
----------------
のような感じのプログラムを作っていましたが
うまくいかなくてどうしてだろうかと考えた所
文字列として認識していたっぽいです。
この $fuga を 数字に明言したいのですが
どのようにやるのでしょうか?
以上 ご助力いただけますとありがたいです。
139:nobodyさん
08/03/18 18:20:21
>>138
デバッグの基本、$fugaをprintしてみる
140:nobodyさん
08/03/18 18:25:39
>>138
$hoge と $fuga に数字がきちんと入ってたら、最初に文字列として認識してようと、
+= の段階で数字として扱ってくれるだろ…。他の部分のミスじゃね?
141:nobodyさん
08/03/18 18:26:00
$hogeか$fugaに数字以外の記号(改行とか)が混じっていると予想
142:138
08/03/18 18:30:10 yz+TlyvN
RESありがとうございますっ
$hogeか$fugaに数字以外の記号が入っている場合もあり
ソノ場合は0として扱いたいのですが
数字が入っていた場合は数字として扱いたいのです、、、
num $fuga
int $fuga
などで数字と明言する方法があったような気がするのですが
私の勘違いでしょうか???
143:nobodyさん
08/03/18 18:35:55
勘違い。
っつーかデバッグして調べろよ
144:nobodyさん
08/03/18 19:26:34
内容が多いハッシュの値があって、それをデータベースに格納するのに、
そのままSQL文を書くと長いので
my ( @n, @q, @p );
foreach my $key ( keys %hash ) {
push @n, $key;
push @q, '?';
push @p, $hash{$key};
}
my $sth=$dbh->prepare('INSERT INTO test('.join(',',@n).') VALUES('.join(',',@q).')');
$sth->execute(@p);
という形でSQL文を構築してデータを格納しているのですが、
もう少しスマートな方法は無いでしょうか?
145:nobodyさん
08/03/18 19:50:13
my $sth=$dbh->prepare('INSERT INTO test('.join(',',keys %data).') VALUES('.join(',',map{'?'}(keys %data)).')');
$sth->execute(map{$data{$_}}(keys %data));
適当にmapで記述したら、ここまで短くなりましたが、map{'?'}(keys %data)の辺りは、
もうちょっとスマートな方法がありそう…。
146:nobodyさん
08/03/18 20:25:49
>>145
スマートな方法より可読性を選んだら?
keys %data を三回も呼ぶんだったらアレイに突っ込むだろ。
ついでに、join ',' も二回あるんだったらサブルーチンかなんかにしちまえ。<= 嘘。
sub foo { return join ',', @_ ;} ;
@arr = keys %data ;
my $sth=$dbh->prepare('INSERT INTO test('. &foo( @arr ) .') VALUES('. &foo( ('?') x @arr) ).')');
$sth->execute( @data{ @arr } );
てきとーに書いたから、' とか抜けてても勘弁。
147:nobodyさん
08/03/18 21:49:40
>>138
#!/usr/bin/perl -w
use strict;
use Scalar::Util qw(looks_like_number);
test(@ARGV);
test(map looks_like_number($_) ? $_ : 0, @ARGV);
sub test {
my($hoge, $fuga) = @_;
print "hoge:[$hoge] fuga:[$fuga] ";
$hoge += $fuga;
print "result:[$hoge]\n";
}
>>144
my $col = join ',', my @col = keys %hash;
my $phs = join ',', ('?') x @col;
my $sth = $dbh->prepare("INSERT INTO test($col) VALUES($phs)");
$sth->execute(values %hash);
148:138
08/03/19 16:21:54 uoUGbd4u
>147さん RESありがとうございます。
>143さん おっしゃるとおりでした。
すいません。デバッグしてみますと整数になっていなかった訳ではなくバグでした。
下記のようなプログラムでタブ区切りのファイル内の$filename
(フォーマットは「名前\t\t\t\t\t\t\t数\t\n」)
でハッシュデータで $hash{名前}->数
とやろうとして下記のようにプログラムを組んでみました。
----------------
open(FH,"$filename"); my @data = <FH>; close(FH);
my %hash = ();
foreach(@data){
my @splitdata= split(/\t/);
if(defined $hash{$splitdata[7]}){
print "<>$splitdata[7]no$hash{$splitdata[7]} ha mouaru<><br>";
}else{
$hash{$splitdata[7]} = 0;
print "$splitdata[7] wo sengen<br>";
}
}
my $key;
foreach $key ( keys %hash ) {
print "$key<br>";
foreach(@data){
my @splitdata= split(/\t/);
if($key eq $splitdata[7]){
print "$hash{$key} ni $splitdata[10] tumari $hash{$key} += $splitdata[10];wo tasu<br>";
$hash{$key} += $splitdata[10];
print "$hash{$key} : $hash{$splitdata[7]}<br>";
}
}
}
(続く)
149:138
08/03/19 16:23:18 uoUGbd4u
(続き)
----------------
それで出力が
print "$hash{$key} ni $splitdata[10] tumari $hash{$key} += $splitdata[10];wo tasu<br>";
$hash{$key} += $splitdata[10];
print "$hash{$key} : $hash{$splitdata[7]}<br>";
の所が
0 ni 2 tumari 0 += 2 ;wo tasu
0 : 0となっていたのですが どのようにすれば
ハッシュデータで $hash{名前}->数
とのハッシュデータを取得できますでしょうか?
以上 ご助力をいただけますとありがたいです。
150:nobodyさん
08/03/19 16:44:42
日本語で
151:nobodyさん
08/03/19 16:56:44
ひどすぎワロタwww
152:nobodyさん
08/03/19 17:13:34
$hash{名前}->数ってこれはリファレンス的な意味じゃないよね?
$hash{名前} = 数で取り出したいってこと?
$splitdata[10]てなに?空じゃないの?
$hashには$hash{$splitdata[7]} = 0; この部分でしか入れてないよね?
153:nobodyさん
08/03/19 17:20:14
> (フォーマットは「名前\t\t\t\t\t\t\t数\t\n」)
$splitdata[0] が「名前」
$splitdata[7] が「数」
に見える。
コードは
$splitdata[7] が「名前」
$splitdata[10] が「数」
っぽいことになってるし、いつのまにか $splitdata[10] に 2 が入ってるし、よくわかんない。
(exists $hash{$splitdata[0]}) かどうか調べて、なかったら用意して
$hash{$splitdata[0] += $splitdata[7] したいんじゃないのかな。
154:153
08/03/19 17:21:25
最後の行 $hash{
155:153
08/03/19 17:23:29
すみません。} を打とうとしたら shift + enter を押して鬱。
$hash{$splitdata[0]} の } が抜けてました。
156:nobodyさん
08/03/19 17:28:37
map { $hash->{$_->[0]} += $_->[7]; } map { chomp; [split(/\t/)]; } @data;
157:nobodyさん
08/03/19 23:15:18
このスレが相応しいかわかりませんが質問させてください。
perl 5.8.4
mysql 4.1.11
OS debian
上記の環境でお勉強目的で BBS を作成しています。
データ自体は utf8 で格納出来ているはずですが、 perl 取得した結果を print した
際に文字化けが発生してしまいます。何処を注意すべきでしょうか?
# やってる内容をかいつまんで記入します
use DBI;use utf8;use Encode;
binmode STDIN, ":encoding(utf8)";
binmode STDOUT, ":encoding(utf8)";
$db = DBI->connect("DBI:mysql:database:localhost:$port", "hoge", "hoge");
$db->prepare("set character set utf8");
あとはセレクトして print しているだけ
# DB の中身は dump したファイルが utf8 で出力されていたのでデータは utf8 のはずです
158:nobodyさん
08/03/19 23:41:08
>>157
OSの設定はutf-8か、日本語が表示できるシェルを使ってるか
159:nobodyさん
08/03/19 23:45:37
BBSなんだからHTML吐いてるんじゃないの?
それでメタタグの文字コード宣言が違うとか
160:157
08/03/20 12:29:10
おはようございます。
apache を使ってブラウザ上に表示させてます。
メタタグには一応 utf-8 って記入してます。
ブラウザ側の文字コードも utf-8 になってました
161:nobodyさん
08/03/20 12:38:21
BOM付いてる希ガス
162:nobodyさん
08/03/20 13:03:57
for ($i=0; $i<6; $i++) {
for ($j=0+$i*10; $j<10+$i*10; $j++) {
$box[$i][$j] = $j;
};
};
print "$box[0][0]\n";
print "$box[0][1]\n";
print "$box[0][2]\n";
print "$box[0][3]\n";
print "$box[0][4]\n";
print "$box[0][5]\n";
print "$box[0][6]\n";
print "$box[0][7]\n";
print "$box[0][8]\n";
print "$box[0][9]\n";
print "$box[1][0]\n";
print "$box[1][1]\n";
print "$box[1][2]\n";
print "$box[1][3]\n";
print "$box[1][4]\n";
print "$box[1][5]\n";
print "$box[1][6]\n";
print "$box[1][7]\n";
print "$box[1][8]\n";
print "$box[1][9]\n";
上記のプログラムを実行すると、$box[1][x]が表示されないのはなぜ?
163:nobodyさん
08/03/20 13:33:56
print "$box[1][0+$i*10]\n";だから。
164:nobodyさん
08/03/20 13:41:13
$box[$i][$j] = $j;
の行の次に
print "[$i][$j]\n";
入れて表示してみ
165:nobodyさん
08/03/20 13:42:25
$box[$i][$j] = $i * 10 + $j;
期待する動作はこれかな?
166:nobodyさん
08/03/20 13:43:46
>>163
俺には理解不能だ
もうちと、噛み砕いておしえてくれ
167:162
08/03/20 13:44:57
みなさん、レスありがと。
今、飯食ってるから
終わったら試してみる。
168:nobodyさん
08/03/20 13:54:36
>>164
意図した動きになってる。
iもjもちゃんと入れ子になって
ループしている
169:nobodyさん
08/03/20 13:56:38
>>164
あ!ごめんなさい
ちと、おかしい
170:nobodyさん
08/03/20 14:02:32
>>165
そうでした。
171:162
08/03/20 14:03:22
皆様、ありがとうございます。
解決できました。
PG久しぶりなんで、
頭が退化してたようです。
172:nobodyさん
08/03/20 14:11:42
10 x 10 の箱に連番を入れたかっただけだけど、配列のインクリメントでちとボケてただけですね
まぁ俺もたまに似たようなミスするのであまりコケにできないwww
173:nobodyさん
08/03/20 15:57:38
またお願いします。
見た目の桁数を8桁に揃えたいんです。
先頭は空白にしたいのですが、下記でうまくいきません。
$len = 8 - length($num);
$head = " " x $len;
$txt = $head.$num;
2行目を
$head = "a" x $len;
とすれば、先頭に
"a"は入って、桁が揃うんです。
それとも連続空白を表す記号みたいな物は
あるのでしょうか?
174:nobodyさん
08/03/20 16:03:28
webブラウザが半角スペースをつぶしちゃうからとかじゃなくて?
175:nobodyさん
08/03/20 16:12:49
>>174
げ!、ソースを見たらちゃんと空白が入ってました。
ブラウザで表示すると空白がなくなっちゃう。。。
これはなんでですか?
176:nobodyさん
08/03/20 16:43:28
ブラウザの仕様
177:nobodyさん
08/03/20 17:00:56
ブラウザで桁をそろえたいなら、表示する部分のフォントを
font-family: monospace;
にしたうえで空白を にすればいいです。
178:nobodyさん
08/03/20 20:32:02 cqY9pHpE
<pre></pre>
179:162
08/03/20 22:32:36
>>178
それは、クライアントの読み込みが遅くなるので
あきらめました。
にしました。
180:162
08/03/20 22:33:29
& n b s p ;
に、しました。
181:nobodyさん
08/03/20 23:06:14
「&nbsp;にしました」と書けばok
182:nobodyさん
08/03/20 23:17:39
>>181
むぅ、また、難しいことを言うな。
明日、調べます。
183:nobodyさん
08/03/20 23:33:13
>>182
いやいや、難しい話でなく。>>181が言ってるのは
「&nbsp;にしました」と入力して投稿すれば
「 にしました」と表示されるからスペース不要ってだけの話だと思うよ。
# でも確か専ブラによって表示が違ったはず。<エンティティ方面
184:nobodyさん
08/03/21 10:02:10
nbsp;でも詰まるよ
HTMLでalign=rightのほうがいいんじゃない?
185:nobodyさん
08/03/21 10:37:17
それはプロポーショナルたからな
桁そろえるのにHTMLのブロック要素を使わなかったり
固定幅フォントを使わないのはバカだゆん
186:157
08/03/21 11:32:07
>>157 です
自己解決決しました。
SQL を実行する前に SET NAMES utf8 を実行する必要があったみたいです。
一旦 SET NAMES utf8 を実行した後で select/insert/etc... を実行しないと
化けてしまうようです。
ナゼ化けるのかは理解できていませんが・・・。
# たぶん utf-8 以外で MySQL から出力しようとして化けてしまうとは思いますが理解できていません。
187:nobodyさん
08/03/21 13:27:45
ふと>>144の解答で疑問に思ったのですが…
ハッシュ値の並び方が呼び出しのタイミング等で
一致しないのは知ってますが、keys %hash と values %hash の
並び方って必ず組み合わせが一致するのでしょうか?
188:nobodyさん
08/03/21 13:31:00
keys使ってからをvaluesを使うまでにハッシュの内容を変えなかった場合一致するよ
189:nobodyさん
08/03/21 18:55:25
どなたか、10進数を26進数(使える文字はAからZ)に変換するサブルーチンを教えてください
190:nobodyさん
08/03/21 21:10:27
>>189
my $Number10 = 1234; # 10進数
# 2進数
#my @digits = ('0','1');
# 16進数
#my @digits = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
# 8進数
#my @digits = ('0','1','2','3','4','5','6','7','8');
# 26進数
my @digits = ('A'..'Z');
print &to_base($Number10,\@digits);
sub to_base {
my $num = shift;
my $digits = shift;
my $dignum = @{$digits};
my $result = '';
while ($num > 0) {
substr($result,0,0) = $$digits[ $num % $dignum ];
$num = int ($num / $dignum);
}
return length $result ? $result : $$digits[0];
}
191:nobodyさん
08/03/21 21:33:13
>>189
sub conv($){
my $alpha = 'A' ;
$alpha ++ for 1 .. $_[0] ;
return $alpha ;
}
printf "%d\t%s\n", $_, conv $_ for 0 .. 200 ;
192:nobodyさん
08/03/21 21:53:29
191は取り消し
193:nobodyさん
08/03/21 23:12:27
my $alpha = q{A} ;
my %table2 = map { $_, $_ } 0..1 ;
my %table8 = map { $_, $_ } 0..7 ;
my %table16 = ( ( map {$_, $_ } 0..9 ), map{ $_, $alpha ++ } 10..15 );
$alpha = q{A} ;
my %table26 = map{ $_, $alpha ++ } 0 .. 25 ;
sub trans($$){
my %table = %{ shift @_ } ;
my $num = shift ;
my $int = keys %table ;
my $res = q{} ;
until( $num / $int <1){
$res = $table{ $num % $int } . $res ;
$num = int ( $num / $int) ;
}
return $table{$num}. $res ;
}
for ( 0 .. 1000 ){
print $_ . qq{\t}
. ( trans \%table26, $_ ) . qq{\t}
. ( trans \%table2, $_ ) . qq{\t}
. ( sprintf "%b", $_ ) . qq{\t}
. ( trans \%table8, $_ ) . qq{\t}
. ( sprintf "%o", $_ ) . qq{\t}
. ( trans \%table16, $_ ) . qq{\t}
. ( sprintf "%x", $_ ) . qq{\n}
;
}
194:nobodyさん
08/03/22 07:21:59
>>190-193
ありがとうございます。
さっぱり分かりませんが、
使ってみます。
195:nobodyさん
08/03/22 07:40:27
>>190
教えて頂いて申し訳ないですが、
Zの次がBAになってしまいます。
Zの次はAAにしたいのです。
196:nobodyさん
08/03/22 08:02:49
>>195
それだったら191使えば?
197:nobodyさん
08/03/22 08:39:40
>>196
>>191は取り消しって書いてあるから、
試してなかったんだけど、
試したら、うまくいってると思う。
なんで、取り消したんだろう???
198:nobodyさん
08/03/22 08:46:28
>>197
Excel式の26進数もどきだから。
199:nobodyさん
08/03/22 08:53:15
>>198
よく分からんが、ありがと。
しかし、>>191の処理速度は遅いね。
200:nobodyさん
08/03/22 09:14:56
>>193
は、なんかエラーが出て動かないorz
201:nobodyさん
08/03/22 09:21:39
>>190をなんとか改造できないだろうか。
ちと、考えてみる。
でも、自分には無理な気がする。
202:nobodyさん
08/03/22 09:22:10
>>191は、26進数じゃない。使うな。
10進数676は、26進数では、
676/26 = 26 余り0
26/26 = 1 余り0
で、1 0 0(BAAが正しい)が、
>>191だとZAになる。
>>200
インデントの為の全角スペースを除け。
203:nobodyさん
08/03/22 09:38:25
>>202
ありがと。
>>191は、遅い理由も含めて、使用しないことにする。
>>191さん、申し訳ない。
204:nobodyさん
08/03/22 09:44:17
>>193も
zの次がbaになるorz
205:nobodyさん
08/03/22 09:45:28
>>203
202=191=193=俺なので気にするな。
206:nobodyさん
08/03/22 10:17:00
Math::BaseCalcモジュールでも使えば良いんでないか?
207:nobodyさん
08/03/22 10:39:29
>>206
まず、インストールのいかたが分からないので、
そこから、調べてみる
208:nobodyさん
08/03/22 10:39:45
インストールのしかた
209:nobodyさん
08/03/22 10:54:33
ppm install Math-BaseCalc
210:nobodyさん
08/03/22 10:57:42
インストールできました。
$calc = new Math::BaseCalc(digits => ['a'..'z']);
$ans = $calc->to_base($number);
これもzの次にbaが出るorz
211:nobodyさん
08/03/22 11:22:42
当り前だろ、A=0 B=0扱いなんだから
おまいがやりたい事は26進とは言わない
212:nobodyさん
08/03/22 11:23:35
B=1だ orz
213:nobodyさん
08/03/22 11:32:56
うぅーん、そうなると
私が意図したものは
どう書けばいいのだろうか???
214:nobodyさん
08/03/22 12:54:31
出来た!実に単純だった。
my @digits = ('A'..'Z');
print &to_base($Number10,\@digits);
sub to_base {
my $num = shift;
my $digits = shift;
my $dignum = @{$digits};
my $result = '';
while ($num > 0) {
substr($result,0,0) = $$digits[ $num % $dignum ];
$num = int ($num / $dignum) - 1;
}
return length $result ? $result : $$digits[0];
}
215:nobodyさん
08/03/22 13:06:15
間違えた、こうだ。
my @digits = ('A'..'Z');
print &to_base($Number10,\@digits);
sub to_base {
my $num = shift;
my $digits = shift;
my $dignum = @{$digits};
my $result = '';
while ($num >= 0) {
substr($result,0,0) = $$digits[ $num % $dignum ];
$num = int ($num / $dignum) - 1;
}
return length $result ? $result : $$digits[0];
}
216:nobodyさん
08/03/22 14:55:10
ブルートフォースアタックに使えそうなコードだなw
217:138
08/03/24 22:18:54 wHKnZ0l2
お世話になっております。
スイマセン。色々試しましたがヤハリ分からないのでコチラに書き込みをさせていただきます。
「名前\t数\t」というデータ(@arrangeData)から
$hash{名前}=合計数とのhashデータを作成したいのです。
# データを宣言
foreach(@arrangeData){
my @splitdata = split(/\t/);
if(defined $hash{$splitdata[0]}){
}else{
$hash{$splitdata[0]} = 0;
}
}
my $key;
print "取得した数を数える。<br>";
# 取得した数を合計する。
foreach(@arrangeData){
my @splitdata= split(/\t/);
foreach $key ( keys %hash ) {
if($key eq $splitdata[0]){
print "$hash{ $key } ni $splitdata[1] tumari $hash{$key} += $splitdata[1];wo tasu<br>";
$hash{$key} += $splitdata[1];
print "$key : $hash{$key}<br>";
}
}
}
とのプログラムでは何故か
$hash{$key} += $splitdata[1];
print "$key : $hash{$key}<br>";
が0で数値が入りません。
どうしてでしょうか?
218:nobodyさん
08/03/24 22:49:38
レスあっただろ
219:nobodyさん
08/03/24 22:52:29
>>138
#!/usr/bin/perl -w
use strict;
# use Scalar::Util qw(looks_like_number);
sub looks_like_number { $_[0] =~ /([0-9]+)/ ? $1 : 0 }
my @arrangeData = (
"name1\t1\t", "name2\t2\t", "name3\t\t", "name4\t4\t",
"name1\t10\t", "name2\t20\t", "name3\t\t", "name4\t40\t",
);
my %hash;
for (@arrangeData) {
my($name, $num) = split /\t/;
$hash{$name} += looks_like_number($num) ? $num : 0;
}
print "key:[$_] value:[$hash{$_}]\n" for sort keys %hash;
220:nobodyさん
08/03/24 23:29:25
>>219
その @arrangeData を >>217 のコードに食わせても
name1 : 11
name2 : 22
name3 : 0
name4 : 44
になるんよね。"name3\tぱ\t" にしたりしても。
データのフォーマットが本人の説明と違うように思う。
という指摘が前回もあったような。
221:nobodyさん
08/03/26 00:57:12
質問です。ある文字列の集合を集計して出現頻度の高い順に取り出すため、
対象の集合をそのままハッシュのキーにして値を++したんですが、
ハッシュはソートできませんよね。配列を使うしかないでしょうか。
222:nobodyさん
08/03/26 01:00:59
sort { $hash{$b} <=> $hash{$a} } keys %hash;
223:nobodyさん
08/03/26 01:01:47
>>221
質問が漠然とし過ぎてるんで、この辺一通り読んでから来て。
URLリンク(www.kt.rim.or.jp)
URLリンク(perldoc.jp)
224:nobodyさん
08/03/26 01:05:19
>>222さんのでわかりました!
>>223さんのも読んでおきます!
どうもでした!!
225:nobodyさん
08/03/26 09:29:51 LilkylgS
CGI.pmを使ってアップロードされたファイルの途中まで読んで
そこで終わりにしたい場合はどうしたらいいでしょうか?
どうも全部読むか、失敗かの選択しかないみたいなんですが。。
226:nobodyさん
08/03/26 14:32:04
そんな需要は稀なんだろ
一旦保存してから読み直せば?
227:nobodyさん
08/03/26 14:47:06
>>225
httpd が受け取る/受け取らないという話でなく、
プログラム中の処理の流れでという意味なら
URLリンク(perldoc.jp)
の「ファイル・アップロード・フィールドの作成」の項
228:nobodyさん
08/03/26 22:35:17 OE9DSfjk
しつもん
定数なんかを別ファイルに置いてそこから取得したい。
---const.pl---
my $x="あいうえお";
1;
---main.cgi---(ヘッダとかは略)
use strict;
require "./const.pl";
print $x;
とするとGlobal symbol "$x" requires explicit package nameという
$xが定義されていませんエラーになります。
use strict外すと$xは空白です。
URLリンク(q.hatena.ne.jp)
とかを見るとどう見てもこれで正しいようにしか思えないのですが何故?
他にこんなところで迷ってる人居ないから環境の問題なんだろうか?
CoLinux,perl5.8.6
229:nobodyさん
08/03/26 22:45:43
同じ変数でも名前空間が異なれば別物
230:nobodyさん
08/03/26 22:57:38
>>228
<q cite="URLリンク(perldoc.jp)">
my はリストアップされた変数を、囲っているブロック、ファイル、eval の中で
ローカルな (レキシカルな) ものにします。
</q>
URLリンク(www.kt.rim.or.jp)
231:nobodyさん
08/03/26 23:12:52
my と use strict を取っ払ってみると print されたり。
変数の局所化とか strict とは無縁になるけど。
はてなでやり取りしてる人らはそうしてるんじゃないかな。
232:nobodyさん
08/03/27 01:07:20
local
233:nobodyさん
08/03/27 01:23:34 R/qLdwoI
>>228
hoge.pm
package hoge;
sub kaze_hiita{
"hayaku neru"
}
our $x = 1;
1;
foo.pl
use hoge;
print hoge::kaze_hiita; -> 早く寝る
print $hoge::x; -> 1
$hoge::x = 10;
print $hoge::x; -> 10
関数のときのみ::じゃなくて->が使えるんだぜ。
あと関数の尻尾には();って書いてあると俺はうれしい。
ハッシュで渡すとさらにうれしい。
あと、そゆのがコンフィグを一杯つかうなら
普通に Auto-Config使うべし。
URLリンク(memo.majide.com)
当然だがファイル間は文字コードは統一しとけよ
それでしんだひとをみたことがあります。>俺自身
234:nobodyさん
08/03/27 10:30:16
>>233
説明で「 -> 1」とかを使ったら混乱するだろjk
235:nobodyさん
08/03/27 12:35:04
正直すまんかった
234が責任を持って書き換えます。おながい。
236:nobodyさん
08/03/27 12:36:10
>>228
こうするのさ。
---const.pl---
$x="あいうえお";
1;
---main.cgi---
use strict;
our $x;
require "./const.pl";
print $x;
237:nobodyさん
08/03/27 16:59:46
our wwwwwwwwwwwwwwwwwwwwwwwwww
238:nobodyさん
08/03/27 19:04:51
○|_|| ̄ wwwwwwwwwwwwwww
239:nobodyさん
08/03/27 22:17:48
oL/
240:228
08/03/27 23:49:16 OO8NUyXN
>>229-236
さっぱりわからんがサンクス。調べてみる
iniファイルやPHPみたいに簡単に取得できる方法はないのかのう・・・
241:nobodyさん
08/03/27 23:56:27
>iniファイルやPHPみたいに簡単に取得できる方法
だからモジュール紹介されてるやんけwww
242:nobodyさん
08/03/28 00:17:56
ワロタ
243:233
08/03/28 00:26:56
>>240
感想でいいからくれ
何がさっぱりわからんと思ったか書いてくれれば分かりやすくもういっかい書くよ。
1. リンクを開いたと思うんだが、何が意味不明だと思った(全部ってのはなしで)
2. 何を作っててプログラム暦何年か教えてくれ。
スレ汚しならすまん。ちょっと個人的に技法よりも心理障壁に興味がある。
244:nobodyさん
08/03/28 10:02:51
新人教育かw
245:nobodyさん
08/03/28 15:01:30 jpsDmJfA
ログに保存されている日付を以下のように整形するにはどうしたらいいんでしょう?
2008/03/28(金) 09:30:08
↓
08/3/28 9:30
246:nobodyさん
08/03/28 15:33:52
>>245
sub reduce_date {
my @date = split /\D+/, $_[0];
$date[0] -= 2000;
sprintf '%02d/%d/%d %d:%d', @date[0..4];
}
print reduce_date('2008/03/28(金) 09:30:08');
247:nobodyさん
08/03/28 15:36:13
use strict;
my $orgdate = '2008/03/28(金) 09:30:08';
my @splitdata = $orgdate =~ /(\d{2})+/g;
printf("%02d/%02d/%02d %02d:%02d:%02d", @splitdata);
248:nobodyさん
08/03/28 15:46:09
s{\d\d(\d\d/\d+/\d+)[^ ]+( \d+:\d+):\d+}{$1$2};
249:nobodyさん
08/03/28 15:48:45
指定がないけど %02d/%d/%d %d:%02d を期待されてそうな気がする
250:nobodyさん
08/03/28 15:57:20
なるほど。
s{\d\d(\d\d)/0?(\d+)/0?(\d+)[^ ]+ 0?(\d+):(\d+):\d+}{$1/$2/$3 $4:$5};
251:nobodyさん
08/03/28 16:45:45
my @splitdata = $orgdate =~ /(\d{1,2})+/g;
my $datetime = sprintf("%02d/%d/%d %d:%d:%d", @splitdata);
252:nobodyさん
08/03/28 16:49:23
間違えた
my @splitdata = $orgdate =~ /(\d{1,2})+/g;
my $datetime = sprintf("%02d/%d/%d %d:%d", @splitdata);
print $datetime;
253:nobodyさん
08/03/28 16:59:35
2008/03/28(金) 09:30:08から08/3/28(Fri) 9:30にするにはどうする?
254:nobodyさん
08/03/28 17:35:24
>>247-252
もはや、知らない奴が見たら暗号でしかないなw
255:nobodyさん
08/03/28 19:09:17
javascriptのプログラムをPerlに移植しようとしていて、複合代入演算子の挙動が違うのでとまどっています。
例えばjavascriptで
var c=1;alert(c=c+(c*=10)+(c*=100));
は1011
Perlで
my $c=1;print($c=$c+($c*=10)+($c*=100));
は1020
になります。
そこで、この問題について載っているサイトがあれば教えてください。
256:nobodyさん
08/03/28 20:04:35
式の途中で値を変えるやり方がまずいとは思うけどね
257:nobodyさん
08/03/28 23:58:05
加算の評価順は定義されてないという事を知らずに
> var c=1;alert(c=c+(c*=10)+(c*=100));
こう書くのはクズグラマー。
258:nobodyさん
08/03/29 03:54:49
>>255
URLリンク(www.st.rim.or.jp)
259:nobodyさん
08/03/29 04:33:29
>>253
年を二桁にしたら100年後に困るぞ!
260:nobodyさん
08/03/29 08:45:59
>>253
s/^\d\d//;
s/^(\d\d\/)0/$1/;
s/金/Fri/;
s/:\d\d$//;
261:nobodyさん
08/03/29 14:59:25
>>259
19xxから20xxに変わったが、2桁で困ってないので100年後も同様に困らない。
262:nobodyさん
08/03/29 17:09:47
>>259
百年後なんて俺等死んでるから気にする必要ないw
263:nobodyさん
08/03/29 17:56:41
そういう屑のせいで困る人たちもいるわけだ
264:nobodyさん
08/03/29 19:27:22
>>262
医学の進歩は目覚しいから、お前のような底辺奴隷はむしろ死ねないかもしれない。
265:259
08/03/30 22:02:27
ジョークを真に受ける馬鹿がこんなに多いとは・・・
266:nobodyさん
08/03/30 23:27:37
>>265
更にジョークを真に受けた馬鹿の登場ですか?
267:nobodyさん
08/03/30 23:58:51
>>266
言っとくけど俺をあまりナメないほうがいいよ
vipでコテハンやってるしこのスレ潰すくらいの影響力は持ってるから
くだらないことで刺激して後悔しないようにね
268:nobodyさん
08/03/31 01:08:05
>>267
そのコピペには、もう飽きた\(^o^)/
269:259
08/03/31 07:25:32
>>266
後出しジャソケソカコワルイ
270:nobodyさん
08/03/31 10:11:33
どっちが後出しだよw
271:nobodyさん
08/03/31 12:02:54
中出しの方が気持ちいいぞ。
272:nobodyさん
08/04/01 21:14:09
HTML::Templateっていうモジュールを使おうとしたら
鯖管理してる人が入れたくないです。っていうので
HTML::Templateの代わりになるような標準モジュールって何かありますかね?
個人的にはHTML::Templateの<TMPL_IF>みたいなのが使えれば大満足なんだけども
自分で作っちゃったほうが早いかな?
273:nobodyさん
08/04/02 01:00:40
普通にディレクトリでも作って放り込んで、useで使うのは駄目なん?
274:nobodyさん
08/04/02 10:50:31
HTML::TemplateはPurePerlだからディレクトリ作ってほうりこめばおk
275:nobodyさん
08/04/02 14:04:47
昨日からperlに興味持っています
perlには大きくわけて2つあると聞きました
1:恐らくActivePerlの為に書かれたであろうソースをcygwinで動かしたい
(書いた方はどちらのperlと言うこともなく消えちゃいました。他の方が「それperlだよ」と教えてくれました)
2:1行目に書かれていた 「 #!/perl/bin/perl 」 を 「 #!/cygwin/bin/perl 」 に書き換えた
2行目にあった 「 # /usr/bin/perl はないはず 」 を削除した
読み込ませるファイルをcgi-binフォルダーに置いた
3: Internet Explorer ではこのページは表示できません
cygwinとActiveperlは書き換える箇所があるのですか?
基本は同じと聞いたのですが細かく言うと変更すべきところもあるんでしょうか?
どなたかよろしくお願い致します
276:nobodyさん
08/04/02 14:28:33
>>275
>perlには大きくわけて2つある
ファイルを置けば動くPurePerlと、installが必要なバイナリの2種類かな?
>恐らくActivePerlの為に書かれたであろうソースをcygwinで
プログラムファイル自体にその差は無い
よって
>cygwinとActiveperlは書き換える箇所があるのですか?
書き換える箇所は無い
ただしActivePerlでは動かないものもあるかもしれない
cygwinはUNIXエミュレータ(みたいなもの)
ActivePerlはWindows版のPerlインタプリタ
同列に並べるのはおかしい
> Internet Explorer ではこのページは表示できません
このエラーが出るってことはおそらくパーミッション
277:nobodyさん
08/04/02 15:21:24
>>275
書いた人です。「それは Perl だ」と言ったのも自分。
あれはCGIではなくてCLIスクリプト(=コンソールアプリ)なので、
Perl実行環境さえあればWebサーバだの何だのは要りません。
# 「標準出力に何も吐かない」ブツはCGIではない。
あなたのしたいことは、Web制作板ともWebProg板とも関係のないことです。
ブツ自体はActivePerl だろうが cygwin 上の Perl だろうが動きます。
プロンプトから perl hoge.pl するだけ。以上。
ただ、glob() に2万ファイル食わせるのはやめといたほうがいいと思うな。
278:nobodyさん
08/04/02 15:33:03
直接やれwww
279:nobodyさん
08/04/02 15:40:45
元ネタはここか
スレリンク(hp板:100番)
ほんとか?
280:nobodyさん
08/04/02 15:52:10
>>275です
>>276
詳しくありがとうございます
勉強になります
>>277
手取り足取りスレでお世話になりました
>>277さんのお陰で目標までの道が見えたような気がします
本当に感謝しております
HTMLとTXTそれぞれ3枚づつ置いてテストしてみようとしたのですが
上記の通り読み込めませんでした
hello.plで試したところ読み込みはできているようなので
書き込み用のファイルを用意しておくべきなのかわからないです
サーバなしで動くのでしたか私はサーバを通して操作するものかと勘違いしてましたすいません
perlでできると教えてくれて本当にありがとうございます
板違いになるのかーショボーン
どこに行けばいいのか・・・
みなさんありがとうございました
281:277
08/04/02 16:00:03
スレ汚しまくりで、本当にごめんなさい。 > all
とりあえず、物凄い勢いで板違い。>>275さんには、教えてgoo辺りがお勧め。
当分消えよう。
>>278
間接でも偏頭痛がしたので勘弁してください。
放置するとめんどくさい流れになりそうだったので出てきました。すみません。
>>279
そこで正解です…。
282:nobodyさん
08/04/02 17:09:09
winならActivePerlでいいやん。
283:nobodyさん
08/04/02 21:09:16
おまえらstrawberryperl知らんのか
284:nobodyさん
08/04/03 00:13:59
知らないかダメダメだから話題に出ない
それぐらい察してくれるとありがたい
285:nobodyさん
08/04/03 03:38:43 x8vlzbgB
colinuxでいいじゃん
286:nobodyさん
08/04/03 10:28:20
いろいろ出すと混乱しちゃうぉw
287:nobodyさん
08/04/03 13:05:14
colinuxとクリネックスて似てるね
288:nobodyさん
08/04/03 14:21:42
初心者ならActivePerl、中級者以降ならStrawberry Perlだな。
289:nobodyさん
08/04/03 16:36:19
超上級者ですが ActivePerl 使ってます
290:nobodyさん
08/04/03 18:06:58
perl開発者ですがperl使ってません
291:nobodyさん
08/04/03 19:03:25
自分はStrawberryPerlが有り難すぎるのだけど、前はActivePerl使ってた。
StrawberryPerlと比べてActivePerlはどういうメリットがあるのかな。
PPMが便利なこともあるけど、CPANが使いやすいStrawberryPerlの方が自分は便利。
ActivePerlの方を推す方の意見を聞きたいです。
292:nobodyさん
08/04/03 19:56:47
ActivePerl に一致する日本語のページ 約 560,000 件中 1 - 50 件目 (0.04 秒)
Strawberry Perl に一致する日本語のページ 約 13,000 件中 1 - 50 件目 (0.37 秒)
ActivePerl入れっぱなしだから特に探さなかった
293:nobodyさん
08/04/03 20:05:15
じゃ、今のActivePerl使ってみな。
294:nobodyさん
08/04/03 20:05:58
>>293 → >>291
295:nobodyさん
08/04/03 22:08:39
おーこんなんあったのか
存在すらしらなかった
296:nobodyさん
08/04/03 22:33:14
ActivePerlにはppmがあるし、最近は日本人がやってるppmリポジトリ(tcool)があるから
何かあっても日本語で済ませられるからなぁ。あそこだとCatalyst+DBIC+TT2もJiftyもPlaggerもそろってるし。
297:nobodyさん
08/04/04 04:20:23
winでweb開発するならvmwareとかcolinuxとかいれるだろ情交
298:nobodyさん
08/04/04 10:07:57
>>297
たしかにそれはもっともなんだが、クライアントの要望でWinで動かなきゃだめ、ってのでも
対応できて助かる。ほんと。
299:nobodyさん
08/04/04 14:10:52
vmwareとかcolinuxって何に必要なんだ?
特殊なことをするのでなければ、cronとSpeedyCGIぐらいしか思いつかない。
300:nobodyさん
08/04/04 16:49:23
サーバ機のOSにwin使うの?それならば何も言わんけど
301:nobodyさん
08/04/04 17:29:46
話がどんどんズレてるぞおまいら。
302:nobodyさん
08/04/05 00:28:43
PerlからDBI::ODBCでMS Accessに接続しようと思います。
SQLに日本語が混じっているときSJISだとうまくいくのですが
UTF8だと文字化けしてエラーになってしまいます。
Unicodeでも文字化けしない方法はないでしょうか?
303:nobodyさん
08/04/05 03:41:48
DB 側に文字コードを指定できたはず
304:nobodyさん
08/04/07 18:30:35 /Zogy0zf
もの凄く抽象的な質問ですがご容赦ください。
現在、mod_perl下で動いているプログラムがあります。
必要があり、これを修正してみたところ、何が悪かったのかそのままサーバダウン。
サーバダウン直前の挙動、エラーメッセージ、mod_perlの特性などから検証した結果、
プログラムの必要メモリ量が極端に増え、それに伴いメモリ不足で落ちたのではないかという結論に至りました。
さて、ここからが質問なんですが、
mod_perlのプログラムを書くにあたり、メモリ使用量などに関して、
コーディングのコツ、書くときの注意、メモリ使用量を見る方法などがありましたら教えてください。
参考になるサイトや書籍などでも構いません。
英語でも頑張って読んでみようとは思いますが、理解できるかどうかは甚だ怪しいです。
305:nobodyさん
08/04/07 19:21:31
プロを雇いなさい。
306:nobodyさん
08/04/07 19:50:42
修正前は全く問題なかったのなら修正部分見るだけで簡単に解かるから楽ジャン
307:nobodyさん
08/04/07 21:42:21 TcHrwP/2
元に戻す
308:nobodyさん
08/04/07 23:10:26
svn revert -R
309:nobodyさん
08/04/07 23:27:22
ちゃんと初期化、解放したったらえーんとちゃうのん?
310:nobodyさん
08/04/08 03:52:16
一定回数の呼び出しでリブートするしかなかったっけか。
311:nobodyさん
08/04/08 06:53:24 O35wAre8
あるオブジェクトが属するクラス名(パッケージ名)はどこに入っているのでしょうか。
特定のオブジェクトを外部から判定したいとしたときなど、
文字列(ClassName=HASHxxxなど)を見て判断できるとも思いますが、
文字列変換が値の出力にオーバーライドされていたりするとダメですし・・
例えば、あるサブルーチンの引数をClassNameオブジェクトに限る、といったときに判定したいのです。
よろしくお願いします。
312:311
08/04/08 07:27:45
すみません見つかりました。判定に関しては
if ($obj->isa('ClassName')) {・・・}
この辺から探っていけそうでしたので、311の質問は一旦取り下げますm(_ _)m
313:nobodyさん
08/04/08 09:05:59
>309
してます。
今回の場合に限りますが、解放されてないリソースが溜まり続けると言うより、1回の必要量が大きすぎた模様。
>305
いや、そんなこと言われても。
>306-309
質問文は後半だ。
314:nobodyさん
08/04/08 09:13:08
>>313
>>1
【激速】mod_perl SpeedyCGI FastCGI【激速】
スレリンク(php板)
315:nobodyさん
08/04/08 12:45:16
>>304
mod_perlかcgiかに関係なく
strictを付ける
サイズの予想できないデータは一括取り込みしない
ってのは当たり前だと思うんだが・・・
mod_perlで問題になりそうなのは
循環参照と意図しないクロージャくらいかな?
316:nobodyさん
08/04/08 18:50:34
>314
ありがとうございます。
宗教戦争が勃発してる魔境にしか見えないのが辛いところですが。
>315
ちょっとだけ内部の挙動を変えたらメモリ容量が4倍に膨れ上がってしまいまして…。
こういうのを、topコマンドでリアルタイムに監視する以外の方法があれば教えてください。
317:nobodyさん
08/04/08 19:19:20
4倍で落ちるってどんだけだよ
318:nobodyさん
08/04/08 19:20:40
Devel::Sizeでどの変数がメモリ食ってるか調べてみれば?
319:nobodyさん
08/04/08 19:26:09
URLリンク(search.cpan.org)
URLリンク(perl.apache.org)
参考リンク
320:nobodyさん
08/04/08 20:31:28
>317
単純計算ですが、総計にしてメモリ1GBほど増加です。
>318
ありがとうございます
>319
ちょうど英語にひぃひぃ言いながら読んでたところです。
321:nobodyさん
08/04/08 20:55:45
メモリ量が4倍になったならMaxClientsを1/4にすりゃいいじゃん。
とりあえずこのへんも参考にするといい
URLリンク(iandeth.dyndns.org)
URLリンク(www.typemiss.net)
322:nobodyさん
08/04/08 22:02:45
>>313
数100MBのデータを気軽に読み込んじゃうのは素人なんだってば。
だからプロを雇えと。
323:nobodyさん
08/04/08 23:49:56 ng1N9SG/
与えられた文字列がutf8として正しいかどうか判断するのに
utf8::decode($str);
if ($str =~ /\P{IsASCII}/ and not (utf8::is_utf8($str))) {
### エラー
}
ってやってみましたが、あってますか?
324:nobodyさん
08/04/11 10:40:16
モジュールがPurePerlかどうかはどうやって判断すれば良いでしょうか?
325:nobodyさん
08/04/11 11:53:06
それは機械的に?
それとも手動で?
326:nobodyさん
08/04/14 15:21:25
URLリンク(watalog.jugem.jp)
↑の人と同じ悩みなんですが、jugem.jpのRSSをLWP::Simple::mirrorでミラーリングしようとすると、
RSSの内容ではなく、HTMLの内容が帰ってくるのは、どうしてですか?
RSSは以下のURLなのですが、引数を渡しているURLは、LWP::Simpleでは対応できないってでしょうか?
URLリンク(watalog.jugem.jp)
327:訂正
08/04/14 15:22:02
URLリンク(watalog.jugem.jp)
↑の人と同じ悩みなんですが、jugem.jpのRSSをLWP::Simple::mirrorでミラーリングしようとすると、
RSSの内容ではなく、HTMLの内容が帰ってくるのは、どうしてですか?
RSSは以下のURLなのですが、引数を渡しているURLは、LWP::Simpleでは対応できないってことでしょうか?
URLリンク(watalog.jugem.jp)
328:nobodyさん
08/04/14 16:19:57
>>327
UAで判定してる模様。
$ua = LWP::UserAgent->new(agent=>'IEみたいなUA');
でやってみ。
329:nobodyさん
08/04/14 16:25:16
>>328
ありがとうございます。いやらしいことしますね…
LWP::Simple::mirrorを使っているので、全部書き直すか、例外処理を作るしかなさそうですねorz
330:nobodyさん
08/04/14 16:33:55 BE:212256083-DIA(100004)
LWP::Simple は $ua を Export 出来る
331:nobodyさん
08/04/14 16:52:36
>>328の一行を追加すればいけるということでしょうか。
オブジェクト指向的な話(->とか)が全くわからないので、そういうところを避けながらコーディングしてきたのですが厳しいですね。
332:327
08/04/14 19:32:33
結局、LWP::UserAgentでUA偽装して、ミラーリングさせました。
今後はSimpleではなくて、こっちを使おう…
333:nobodyさん
08/04/14 21:28:37 vhVZb6UQ
CGI::Application を使ってみようかと考えてるPerl初心者です。
Web上でいろいろサンプルコードを見ていたんですが、
使いたいモジュールがある場合は
CGI::Application::Plugin として利用するのがお決まりのように見えます。
実際、それが推奨スタイルなんでしょうか?
Log::Handler が使いたかったのですが、
単純に use Log::Handler; して使うと何か不都合があるのでしょうか?
334:nobodyさん
08/04/15 07:46:19 m7oSRbUq
再利用しやすいようにPluginにぶら下げてるだけなんじゃないの?
好きにしたらいいと思うよ
335:nobodyさん
08/04/15 11:53:04 7+9bkjp8
ありがとうございます!
336:いしはら
08/04/15 18:41:44 y4DgL3Q4
------------------------------------------------
☆簡易CTIサービス(1万5千円)
URLリンク(s1s.jp)
☆自動クリックサービス
URLリンク(s1s.jp)
☆ブログ自動更新 記事投稿 コメント書き込みアプリ
URLリンク(s1s.jp)
------------------------------------------------
ヽ('A`)ノ
( ) 大金星!!
ノω|
337:nobodyさん
08/04/16 14:37:06
二項分布で確率1/AをB回の試行でちょうどC回引く確率を計算したいのですが、
これらをperlかPHPで計算する方法が分かる方いましたらアドバイス頂けないでしょうか。
式は見ても理解できないのでサンプルソースを頂けると助かります。
338:nobodyさん
08/04/16 15:16:19
式を見ても理解できないとコーディングなんてできないだろw
339:nobodyさん
08/04/16 16:03:06
「二項分布 perl」でぐぐれ
340:nobodyさん
08/04/16 17:57:49
最初の方に出て来るJUG7のソースいじりましたが、
サイコロ10000回投げて1が1666回出る確率とかだそうとする際に
数値が大きすぎるのかバグります…。
以前調べた時のソースも、数値が小さければ問題無いものの、
規模を大きくすると1.#INFというエラーが返ったり。
341:nobodyさん
08/04/16 21:19:23 WbXSl+I/
お願いします。
与えられた文字列が大小文字同一視でハッシュのキーとして存在するかどうか、
調べる方法はないでしょうか。ハッシュキーは膨大な数あるので、配列にコピーとかは
したくないです。よろしくお願いし明日。
342:nobodyさん
08/04/16 21:28:03
1 hashを作るときに小文字(あるいは大文字)に変換して作る。
2 tieで1と同じ事を行う。
好きなほうをどうぞ。
343:nobodyさん
08/04/16 21:32:57
>>341
大小文字の区別はされるけどexistsって関数がある
344:nobodyさん
08/04/16 21:39:38
なるほど、ありがとうございます。
実は、元の正しい表記を後で取り出したいんですが、
ハッシュのvalueは空いてるので、そこに元の表記を入れておいて
キーを大文字統一にしてみようと思います。
コピーするのと変わらないかもしれませんが。
345:nobodyさん
08/04/17 04:13:49 CjUpsUhE
お世話になります。
All UTF-8 でやってます。
さらに USE CGI しないURLデコードをやってみたところ、マルチバイト文字が文字化けするようになりました。
全部□になります。
?#!c:/user/local/bin/perl510/bin/perl.exe
use utf8;
use encoding "utf8";
# ↓UTF8でPOSTされた情報を想定
my $str = '%E8%8C%B6%E6%B1%B2%E5%85%BC%E9%9B%91%E7%94%A8%E4%BF%82';
# ↓URLデコード(今回$strに+はないのでそのへんは省略)
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1)/eg;
# ↓出力
print "Content-type: text/html; charset=UTF-8\n\n";
print "テスト // START // $str<br>\n";
これでHTML全体としては正しく表示されているんですが、$str部分のみが文字化けします。
ウェブで原因を調べること丸1日、これについてどこにも情報がありませんでした……
346:nobodyさん
08/04/17 07:21:16
use utf8;
use encoding "utf8";
# ↓UTF8でPOSTされた情報を想定(内部ではワイドキャラクタとして格納されてます)
my $str = '%E8%8C%B6%E6%B1%B2%E5%85%BC%E9%9B%91%E7%94%A8%E4%BF%82';
utf8::encode($str); # 一旦UTF-8フラグを落として
# ↓URLデコード(今回$strに+はないのでそのへんは省略)
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1)/eg;
utf8::decode($str); # UTF-8フラグを付け直す
347:nobodyさん
08/04/17 09:58:36
>>345,>>346
> # ↓UTF8でPOSTされた情報を想定(内部ではワイドキャラクタとして格納されてます)
> my $str = '%E8%8C%B6%E6%B1%B2%E5%85%BC%E9%9B%91%E7%94%A8%E4%BF%82';
それデコードしたら、バイナリ(utf8フラグoff)のUTF-8文字列。
とりあえず、use utf8;とuse encoding "utf8"を外して、そのままprintしてみ。
ちゅうか、use utf8 とuse encoding "utf8"両方してる意味がわからん。
348:nobodyさん
08/04/17 14:34:42 FD3bsXbG
>>345です
解決しました。情報に感謝します。
>>346の内容を、Encode::~でやりました。
こういうのって結構な落とし穴ですね。フラグのことはわかっているつもりでしたが……
349:nobodyさん
08/04/17 20:17:29 2zzFnXWL
教えて君でスマンが、分かる人がいたら助けて。
CGI::Applicationパッケージを使っているんだけど、
param() 関数で、数字だけの長い「文字列」を受け取ると
数値リテラルとして、しかも丸められた値が返されちゃうんだけど、
文字リテラルとしてそのまま受け取れるよい方法ないかな?
350:349
08/04/17 22:21:21
自己レスです。
CGI.pmにまでさかのぼって調べた結果、
query()->param()は文字リテラルで返してました。
自分が書いた、表示する際の処理のバグでした。orz
351:nobodyさん
08/04/18 00:03:02 qXgVgrBZ
いつもすみません。
自分で作ったhash refの配列がデリファレンスできません。
$array[0]->{key}
$array[0]{key}
${$array[0]}->{key}
とか書いてみましたが様々なエラーが出ました。どう書いたらいいですか?
352:nobodyさん
08/04/18 00:07:12
すみません。問題を取り違えていました。デリファレンスはできてました。
ソートをしようと思い、下記のように書いたらhash refを配列扱いするなと言われます。
my @sorted = sort {$array[$b]->{score} <=> $array[$a]->{score}} @array;
よろしくお願いします。
353:nobodyさん
08/04/18 00:20:08
ものすごく勘違いしてました。こういうことでした。
my @sorted = sort {$b->{score} <=> $a->{score}} @array;
354:nobodyさん
08/04/18 10:01:49
そういうときもあるよ
355:nobodyさん
08/04/18 18:42:42 J/rLxrZJ
前に2項分布について質問した者ですが、
これだけでも教えてくれると助かります…。
1.#INF の意味はなんですか?インフィニティ?
検索しても#は検索対象にならないらしく、
*.INFの設定ファイルや関係無いものが出て来るばかりで…。
356:nobodyさん
08/04/18 19:06:45
知らんがな
357:nobodyさん
08/04/19 09:40:11
インフォメーションじゃね?
それかインフォーラム
もしくはインフェルノ
358:nobodyさん
08/04/19 12:48:02 n4AN2xdT
URLリンク(www.semblog.org) で配布されている、
RNAというアンテナソフトを使っています。
すでに動作してるのですが、summary部分のhtmlタグを除去したいと思います。
URLリンク(www-kasm.nii.ac.jp)
のようにRSSを取得してくるCGIなのですが、
summary部分にhtmlタグが残ってしまいます。
ATOMやRSS2.0などでしょうか、
Yahoo!やexcite等RSSにhtmlタグが入ってるサイトを巡回すると
htmlタグが入ってしまいます。
template/recent_template には
<div class="summary">
<$RNAItemDescription$>
</div>
となっており、そのあたりを作ってると思われる
lib/RNA/AntennaTree.pmの1029行目、
my $encoded_descript = encode($item->{channel}->{description});
の後に
my $encoded_descript =~ s/<.*?>//g;
を追加してみたところ、サマリー部分がなくなってしまいました。
開発がストップしてるCGIなので、なんとか改造して使い続けたいと思っています。
どうかご教示願います。
359:nobodyさん
08/04/20 00:00:52
いくら何でも冷たすぎじゃないかお前ら。
>>355
備長炭 自殺方法 でぐぐれ。それでダメなら二項分布 オーバーフローとか。
360:nobodyさん
08/04/20 01:46:25
>>358
現物ソース確認したわけじゃないけど
URLリンク(naoya.dyndns.org)
の下の方にある remove_html を試してみたらどうかな。
361:nobodyさん
08/04/20 02:10:18
>>358
そのモジュールについては詳しくはわからないけど、もともとのソースをいぢるんじゃなくて、
それが吐き出したものを、自前で書き換えればいいんじゃね?
362:nobodyさん
08/04/20 02:30:50
元のコード見なくても
> my $encoded_descript = encode($item->{channel}->{description});
> の後に
> my $encoded_descript =~ s/<.*?>//g;
> を追加
って書いてるんだから
my $str = "<strong>大切な</strong>文書";
my $str =~ s/(.)/$1/g; # 行頭の何かが余計
print length($str);
こういうことじゃないの。
363:nobodyさん
08/04/20 16:44:58
ヒアドキュメント内でハッシュリファレンスを使う場合はどのようにすればよいのでしょうか?
$text =<<EOL;
name = $h->{'name'}
mail = $h->{'mail'}
EOL
とやっても変数が展開されません。
仕方ないのでハッシュにデリファンスしてますが、
方法があったら教えてください。
364:nobodyさん
08/04/20 17:36:03
本当はシングルクォートで括ってね?
365:nobodyさん
08/04/20 20:52:48 tHisgd6U
オリジナルの携帯サイトアクセスランキングを作っています。
OUTをカウントするためなんすけど、アンカーから自前のCGIページを通過させてリンク先を表示させるにはどうすればいいですか?
366:nobodyさん
08/04/21 00:00:18
自前のCGIページを通過させるアンカーを出力すればよいと思います。
367:nobodyさん
08/04/21 18:56:21
>>363
my $h = {name=>'john', mail=>'john@example.net'};
my $text =<<EOL;
name = $h->{'name'}
mail = $h->{'mail'}
EOL
print $text;
こんな感じ。