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

このエントリーをはてなブックマークに追加
1nobodyさん
Perlのコーディングで困ってる人のスレです。

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

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

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

お勧めサイトは >2 以降

前スレ http://pc11.2ch.net/test/read.cgi/php/1189939783/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
2nobodyさん:2008/02/25(月) 19:26:15 ID:???
ム板Perlスレより 1 of 2

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

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

[オンラインマニュアル] (追加)
最新のドキュメント: ttp://search.cpan.org/dist/perl-5.8.8/
perl5.8.xのドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: ttp://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: ttp://www.cpan.jp/search.cgi
perldoc.jp: ttp://www.perldoc.jp/
Perldoc.com: ttp://www.perldoc.com/
3nobodyさん:2008/02/25(月) 19:26:39 ID:???
4nobodyさん: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で動かした場合は正常に動作しました。
これはどういった理由でエラーが起こっているんでしょうか?
5nobodyさん:2008/02/25(月) 22:17:42 ID:???
>>4
鯖にモジュールがインストールされてないんじゃない?
/usr/lib/的なフォルダに/Net/HTTP.pmを入れてみたら?
6nobodyさん: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
7nobodyさん:2008/02/25(月) 22:31:43 ID:???
8nobodyさん:2008/02/25(月) 23:24:10 ID:???
perlで書いた2つのCGIがあるのですが、
1つ目のCGIを実行中にエラーが起きた時に$ERROR=1等として
エラーフラグに数値を入れて、その値を2つ目のCGIに渡して
2つ目のCGIでエラーメッセージを表示させたいのですが、
色々調べているのですが上手く行きません。

何か上手く2つ目のCGIに値を渡す方法がありましたら、
よろしくお願いします。
9nobodyさん: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);

これだと一つのファイルの中身は見れますが、フォルダの中全てを開きたい
僕にとってこれは違う気がします。
なんとか、方法はないでしょうか?宜しければ教えてください。
10nobodyさん:2008/02/25(月) 23:55:34 ID:???
11nobodyさん:2008/02/26(火) 01:25:07 ID:???
オブジェクト指向を勉強中です。
あるメソッドが、自分自身のクラス内のクラスメソッドを呼び出すには
どのように書いたらよいでしょうか。
クラスメソッドは普通Package->hoge()とするようですが、
自分自身のパッケージをわざわざ書くのが正しいのかと
疑問に思いました。よろしくお願いします。
12nobodyさん:2008/02/26(火) 01:59:04 ID:???
__PACKAGE__->hoge();
13nobodyさん:2008/02/26(火) 02:33:17 ID:???
ありがとうございます!
144:2008/02/26(火) 07:45:15 ID:???
>>7
色々と見てみましたが未だ解決しませんorz
15nobodyさん:2008/02/26(火) 09:29:48 ID:???
>>14
XAMPPには詳しくないですが、
出力とは別にエラーログに書かれてないですか?
XAMPP/log/error.logみたいに
16nobodyさん:2008/02/26(火) 11:40:40 ID:???
ライブラリを読み込む優先順位なんですが、
カレントディレクトリを最優先したいので、
unshift @INC, pop @INC; ってしたいと思うんですが、
環境によってうまくいかなかったりします?

自分の環境で@INCを表示すると
C:/usr/site/lib C:/usr/lib . となるんですが、
unshift @INC, '.';のほうが良いんですかね?
17nobodyさん:2008/02/26(火) 11:59:34 ID:???
.がどこにあるかは環境によって違うから、除去と追加は.を明示した方がいいんじゃないか。
18nobodyさん:2008/02/26(火) 12:45:05 ID:???
>>16
use lib '.'; で良きに計らってくれる。
http://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);
}

なんて書いたりするけど。
19nobodyさん:2008/02/26(火) 13:03:29 ID:???
>>17 >>18 ありがとう
use FindBin;
use lib $FindBin::Bin;
で解決しました。

重複してるけど、除去しなくても
確実にカレントディレクトリで見つかれば問題ないですよね?
20nobodyさん:2008/02/26(火) 15:20:10 ID:???
>>15
apacheのerror.logならあるのですが、
perl実行時のエラーを吐き出しているlogはありませんでした。

WWW:Mixiで使っているモジュールがあるかどうかなども確認したのですが、
全て揃っていて、Winの自鯖なので権限なども関係ないと考えているのですが・・・解決しません。
21nobodyさん:2008/02/26(火) 16:11:53 ID:rftlSzSy
WIN鯖はなにかと問題が多いんで
切り替えることをおすすめしますよ。
22nobodyさん: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日まで、今から何日前なのか後なのかを計算する
方法をどなたか教えてください。
24nobodyさん:2008/02/28(木) 15:55:55 ID:???
>>23
http://search.cpan.org/dist/Date-Calc/
http://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);
25nobodyさん:2008/02/28(木) 15:57:12 ID:???
Windowsの英語版と日本語版を区別する方法ってないですか?
$^OでOS名は取れるのですが…
現在はシステムの`date /t`の戻り値を見て判断しています。
26初心者:2008/02/28(木) 16:11:55 ID:GDQH6oGX
>>24さんありがとうございます。
出来ればモジュールを使わずに日数を計算する方法はないんでしょうか?
27nobodyさん:2008/02/28(木) 16:36:04 ID:TYs56hmn
28nobodyさん:2008/02/28(木) 16:36:24 ID:TYs56hmn
間違えたwすまんw
>>26
>>1
29nobodyさん:2008/02/28(木) 16:55:57 ID:???
30nobodyさん:2008/02/28(木) 17:21:40 ID:???
知恵を貸してください
ログインスクリプト作ってるんですが
最初の画面でhttpかhttpsを選択
httoの場合は普通に次の画面でCookie食べておしまい

https(SSL)の方はpost後代理鯖(共有SSL)でCookie食べる
locationで元の鯖に飛ばしてhttpの方もCookie食べる
という処理なのですがlocationなので当然丸見えなんです。。。
何かスマートな方法ありましたらご教示願います。
3125:2008/02/28(木) 17:24:53 ID:???
>>29
サンクス。解決したよ
32nobodyさん:2008/02/28(木) 21:20:30 ID:???
LWP::UserAgentについて質問があります。
下ページを取得しようとすると、CPU使用率が100%になったままで
応答がなくなり?ます。ページも取得できません。
こんな場合、途中で諦めたいのですが、タイムアウトを設定しても変化なし。
どうすれば良いかアドバイスお願いします。

#!/usr/bin/perl

use strict;
use LWP::UserAgent;

my $url = 'http://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;
33nobodyさん:2008/02/28(木) 22:07:20 ID:???
そのページ3G近くあんじゃんwブラウザで開いて焦ったw
たぶんメモリが足りないだけなんじゃないかな
$ua->max_sizeで上限決めたりヘッダにrange付けて小分けにリクエスト投げるといい
34nobodyさん:2008/02/28(木) 22:32:37 ID:???
>>33
そんなに大きかったのですか!w
すみません、でもお陰で$ua->max_sizeを知ることができましたし、
デフォルト無制限なのを知ることも出来ました。
どうもありがとうございました。
35nobodyさん:2008/02/28(木) 23:44:29 ID:txq/MTXf
push(@list, {'num1' => 1, 'num2' => 2});

上記データのnum2をキーにしてをsortを行うことは可能でしょうか。
もし可能でしたら方法をご教示いただけますと幸いです。

宜しくお願いします。
36nobodyさん:2008/02/29(金) 00:12:26 ID:???
@sorted = sort { $a->{"num2"} <=> $b->{"num2"} } @list;
37nobodyさん:2008/02/29(金) 01:24:59 ID:???
>>33
???
そのページ30MB位しかないぞ。
content-lengthも29239056ってなってるし。
たしかにブラウザで開いたらCPU100%で1分くらい固まったけど・・。
でも、取得できたから、保存して、テキストエディタで開いてみたら、やっぱり30MBくらいだったぞ。

>>32
で、LWPなんだが、ウチの環境でも、ファイルサイズが大体3〜4メガ位より大きくなると、
とたんに反応が無くなる。ちなみにメモリは1G積んでて、余りも800M以上ある状態で・・・。
何故だかはわからん。

ちょっとソース読んでみるか。
38nobodyさん:2008/02/29(金) 01:31:25 ID:???
でも、そんな非常識なサイトを取得する意義ってあるのかな。
まあ、そういうことがしたいってことなら仕方ないけど、そういう非常識なサイト対策って意味で、
>>33-34あたりの対策をしておく必要があるんだなっていう意味で参考になった。
39nobodyさん: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
4030:2008/02/29(金) 15:29:10 ID:???
他あたって見ます
失礼しました
41初心者:2008/02/29(金) 17:30:27 ID:VfFNtRxq
カレンダーを表示する時に

 日 月 火 水 木 金 土
| | | | | | 1 | 2|
 _ _ _ _ _ _ _  ← 線はもっとうえに

うまく書けてなくて申し訳ないですが、数字を囲むような形で常に5行表示させるには
どうしたらよいでしょうか。どなたか教えてください。
42nobodyさん:2008/02/29(金) 17:44:40 ID:???
>>36
遅ればせながら、有難うございました。
助かりました。
43nobodyさん:2008/02/29(金) 18:16:34 ID:???
質問です。
2進数から10進数に変換したいんですけど
どうすればできますか?

>>41
テーブルタグでも使ったほうがいいんじゃないですか?
4443:2008/02/29(金) 18:22:40 ID:???
質問が変なので追記
$a = 10101010;
となっている場合に
$a = '0b' . $a;
$dec = oct $a;
のようにしてます。
もっとスマートに0bを付けられないでしょうか?
45nobodyさん:2008/02/29(金) 18:33:58 ID:???
46nobodyさん:2008/02/29(金) 19:50:41 ID:???
>>45
簡単でしたね…。ありがとうございます。
4737: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で小分けにするのがベターなやりかたかな。
48nobodyさん:2008/02/29(金) 21:04:20 ID:???
$ua->requestにcallback関数とサイズ渡したほうが
range対応して無くても使えるしいいんじゃないかな?
49nobodyさん: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して、処理をかけるってことをやろうとすると、ファイル開かないといけないけど、
まあバイナリファイル取得する分には十分だな。

なんつうか、ちゃんとドキュメント読めよオレ!っていう結論だ。
50nobodyさん:2008/03/02(日) 22:25:56 ID:???
全部メモリに読み込む以外のインターフェース用意するのは当たり前だ。そのくらい気付いてドキュメント嫁。
それ以前に、数百MBのデータ読み込もうとするな。へぼ。
51nobodyさん:2008/03/03(月) 05:44:20 ID:???
>>50
いやいや、今回の場合は、メモリに十分余裕があるのに、たかだか5Mとか10M位でも
Win(ActivPerl)環境だと激しく遅くなるのに、Linux環境だとそうはならない。ってとこで色々やって見たわけなんだわ。
まあ確かに、ちゃんとドキュメント読んでたら、最初の質問出たときに素早く正確なレス返せたかもしれないけど、
そこらへんヘボなんは認めるよ。まあ初心者スレなんだし。

だけど、俺なんかはPerlで数百M〜GBクラスのファイル読み込みとか普通にするし、
Perlの使用メモリが2G近くまで行ったりもするけど、今までそんな使い方してて、異常だとか思ったことなかったけど・・。
(そりゃあ、レンサバとか共用マシンとかでやるのは非常識だと思うし、CGIとかの鯖環境ではオレもそんなことしないけど、
自分専用で使う分にはええんでないの。今回みたいな検証したり、ベンチマーク取ったりもするし。)
52nobodyさん:2008/03/05(水) 05:02:04 ID:yN6MH4LB
ファイルパスを引数として受け取り
受け取ったファイルパスにファイルを作るサブルーチンを作りたいんですが、
ファイルパスが正しいかチェックするための正規表現がどうしてもかけません。
マッチする条件として
・ドットで始まるファイルは不可
・拡張子は必須/\.[a-z]+$/
・チルダ不可
・先頭のみ./は許可。../は不可。
・ディレクトリ、ファイル名は/[A-Za-z0-9\-]/にマッチ
・連続するスラッシュ、ドットは不可
・m|^/|も許可
書いてみてもものすごく長くなって、結局破綻してしまいます。
たすけて
53nobodyさん:2008/03/05(水) 05:08:29 ID:???
追記
open(FH,">",$file);
で作れるファイル名なら問題ないです。
ただし、カレントディレクトリ以下です。
54nobodyさん: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をポコッと置いてるだけなんですけど
何が足りないんでしょうか?
55nobodyさん:2008/03/05(水) 08:19:07 ID:???
>>54
@INCを出力してみたら?
フルパス打ってみるとか
56nobodyさん:2008/03/05(水) 10:04:58 ID:???
>>54
「Can't locate loadable object」とあるように
Data::Alias は pure perl なモジュールじゃない。
http://search.cpan.org/src/XMATH/Data-Alias-1.07/
57nobodyさん:2008/03/06(木) 03:17:10 ID:???
>>52

無理してひとつの正規表現で済ませなきゃいーじゃん。
58nobodyさん:2008/03/06(木) 05:45:50 ID:F1MYa2qu
たしかに
マッチしないものをどんどんはじけば処理少なくならないか?
59nobodyさん:2008/03/06(木) 15:48:54 ID:???
レンタルサーバにMT入れてブログをやってるってだけで、
社内でネットプログラムに一番詳しい人にされてしまいました。
材料仕入れて加工して個人に売るという会社なのですが、DQN取締役から
「在庫管理と顧客管理をブラウザから処理できるシステムってできるでしょ?
年度始めまでにお願いね」
と言われて涙目です。
プログラムは未経験で何をどうしていいかすら分かりません。
在庫管理のデータベースシステムの概要や、スクリプトの流れが
理解できるような書籍があったら教えてください。
ラクダ本は買ってみたのですが一から勉強するにはちょっと時間が足りません…
60nobodyさん:2008/03/06(木) 16:06:45 ID:???
「できません。」って言う
61nobodyさん:2008/03/06(木) 16:19:02 ID:???
フリーで落ちてる奴でも使っておけ
62nobodyさん:2008/03/06(木) 16:56:54 ID:???
できませんが一番
63nobodyさん:2008/03/06(木) 20:17:17 ID:???
64 ◆TWARamEjuA :2008/03/07(金) 00:01:42 ID:??? BE:871924-2BP(7072)
(´-`).。oO(やりたいよなぁ。。。)
65nobodyさん:2008/03/07(金) 12:30:47 ID:???
>59
予算もらって外注する
予算なければ出来ないっていうか、
予算相当に自分の人件費を上げてもらって頑張って勉強
66nobodyさん: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名無し募集中。。。:2008/03/07(金) 19:05:18 ID:???
=~ /[0.]$//
で削っていけば?
68nobodyさん:2008/03/07(金) 19:22:48 ID:???
>3.02000 → 0.02
3.02じゃなくて?

3.02なら*1すりゃいいだけだけど・・・
69nobodyさん:2008/03/07(金) 19:28:01 ID:???
>>66
一旦数値コンテキストで評価。
print "$_ => ", $_ + 0, "\n" for qw(3.00 3.02000 19120730.0000);
70nobodyさん:2008/03/07(金) 19:40:11 ID:???
>>67->>69
レスありがとうございます。

>>68
> 3.02じゃなくて?

そのとおり、3.02でした。

*1でも+0でも可能でした。ありがとうございました。
71nobodyさん:2008/03/09(日) 04:23:14 ID:???
>>59
そんなもんJifty使って1時間もあればプロダクションまでいけるおれが答えよう。
(「在庫」の複雑さにもよるが)

これからプログラムやりたいんであれば、なんとしてでもこの機会を利用しろ。
開発用マシン買ってくれとか、本買ってくれとか、時間くれとか。
どんな言語がやはっていても、RDBMSの知識は常に使える。
3rd manifestoまではまだ10年以上かかるだろう。

プログラムやるきがなくて、この社内アプリが手柄になるなら外注しろ。

どれでもなければ、「できません」だな。
72nobodyさん:2008/03/09(日) 06:21:52 ID:kv7E/tC/
MT使ってるだけでこんなの押し付けられる会社だぜ?
期待に応えたりしたらさらに良いように無理難題押し付けられるのが関の山だ
にげちまえ
73nobodyさん:2008/03/09(日) 10:38:47 ID:???
>>59
「外注」というと上司が文句を言う場合は、部品(ライブラリ)を
買うと言ってみてはどうだろう?

use ZAIKOKANRI
ZAIKOKANRI->new( -option=>... );

みたいな形で起動する、ライブラリという名のアプリケーション。
実際、漏れの上司は何故か外注を嫌がるが、「ライブラリを買う」
というと許可が下りるので、フリーのプログラマの知り合いに
頼んで作ってもらってる。
74nobodyさん:2008/03/09(日) 16:08:58 ID:???
>>73
知り合いに発注すると、背任に問われかねない。
75nobodyさん: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: !=$! ?=$?");
76nobodyさん:2008/03/10(月) 17:53:13 ID:dzM4A1jo
マルチポスト君に応える回答は御座いませぬ
他池
7775:2008/03/10(月) 19:29:36 ID:???
自己解決出来たので報告です。
>>75のは、「文字コードが意味不明だゴラァ」と言われていたようでした。
(『encode』とは『UTF-8から』sjisやらiso-2022-jpやらにエンコードする機能。
 一度UTF-8に『decode』しなければならなかった。)

 以上、スレ汚し失礼しました。
78nobodyさん: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);
}
}
79nobodyさん:2008/03/10(月) 22:51:05 ID:???
chomp使えばいいんじゃない?
80nobodyさん:2008/03/10(月) 23:25:05 ID:???
問.localtimeは配列を吐きますが、localtimeの動作の逆(配列を入れたら経過秒数合計が返ってくる)はどうしますか。
81nobodyさん:2008/03/10(月) 23:34:28 ID:dzM4A1jo
たしかGMTから秒数を返すモジュールがあったはず
比較的簡単に見つかるはずだからググッてみそ
82nobodyさん:2008/03/10(月) 23:42:22 ID:???
>>78
==
83nobodyさん: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パターンはあるようで、非常に嘆かわしいと思いました。
84nobodyさん:2008/03/11(火) 00:00:51 ID:kt3GGsX4
XMLが自由すぎて使いづらいのが難点よねw
85nobodyさん:2008/03/11(火) 00:17:08 ID:???
安易に拡張性を求めたら墓穴を掘るいい例だよね
自由にできるのは結構なことだけど,良く使う日時のフォーマットくらい統一してほしいぜ・・・
86nobodyさん:2008/03/11(火) 00:31:27 ID:???
>>83
Time::Local (の timelocal) は組込関数ではないが標準モジュール。
故意に抜かない限り入っている。
87nobodyさん: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";
88nobodyさん: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
89nobodyさん:2008/03/11(火) 05:24:13 ID:???
XML::RSSでEUCのRSSを読み込むにはどうしたらいいんだ
90nobodyさん:2008/03/11(火) 09:52:01 ID:???
変換してから読み込めば?
91nobodyさん:2008/03/11(火) 09:53:07 ID:???
>>87
+0900の部分はグリニッジ比だから-から始まることもあり得る。
92nobodyさん:2008/03/11(火) 12:11:54 ID:PA7R3QgS
CPANモジュールのSpreadsheet::WriteExcelを導入しています。
このモジュールのあるバージョン以下の場合はメソッドA実行、それ以外はメソッドB実行
といった振り分けを行いたいのですが、モジュールのバージョンをperl上で調べるには
どうすればいいのでしょうか?
print $SpreadSheet::WriteExcel::VERSION;
としても、何も表示されませんでした。
93nobodyさん:2008/03/11(火) 12:35:37 ID:???
version 2.18 はそれできちんと表示された。その他の version は知らん。
ソースに当ってみたら?
94nobodyさん:2008/03/11(火) 13:47:11 ID:???
>>93
レスありがとうございます。わざわざ調べて頂きどうもです。

やってしまいました。
print $SpreadSheet::WriteExcel::VERSION;
ではなく、
print $Spreadsheet::WriteExcel::VERSION;
でした。これははずかしい(*´Д`)
バージョン2.15、2.20とも表示されました。大変失礼しました。
95nobodyさん:2008/03/11(火) 14:00:50 ID:???
どっちも同じなのだがw
96nobodyさん:2008/03/11(火) 14:26:49 ID:???
大文字小文字
97nobodyさん:2008/03/11(火) 14:34:32 ID:???
あ〜ww
98nobodyさん:2008/03/12(水) 10:02:54 ID:???
>>94
use strict汁!
99nobodyさん:2008/03/12(水) 20:50:08 ID:???
突然すみません。
Perlの勉強中で簡素なプログラムを作成しているのですが
POSTでデータがうまく送信できなくて困っています。
同じコードでMETHOD="GET"とすると送信できるのですが
パスワード入力などをするため、URLにパラメータを表示したくないのです。
お知恵を拝借させてください。よろしくお願いします
100nobodyさん:2008/03/12(水) 20:55:51 ID:???
>>99
POSTで送ることがわかってるなら調べれば簡単だと思うんだが。
CGI.pmとか使うと簡単にできる
101nobodyさん:2008/03/12(水) 21:02:36 ID:???
送信出来ないのでなく受信したあとの処理が出来てないに1000ペリカ
102nobodyさん:2008/03/12(水) 21:04:45 ID:???
>>100
迅速なレス、感謝します。
浅学でお恥ずかしいのですがCGI.pmについてこれから調べてみます。
ありがとうございます。
103nobodyさん: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?で調べられるのかどうなのかまだよくわかっておりませんが
まずいところの見当すらつかなかったので助かります。
ありがとうございます。
104nobodyさん:2008/03/12(水) 21:18:29 ID:???
ぱっと見た感じ問題なさそうだけどな

しかしnameにも日本語を使ってるのか
105nobodyさん:2008/03/13(木) 00:55:15 ID:???
KENTのコピペ臭がするのは俺だけ?
106nobodyさん:2008/03/13(木) 01:19:37 ID:???
>>103
うーん、区切りがほんとに’&’なのかな。
一回、 print $form ; やってみれば?
107nobodyさん:2008/03/13(木) 02:21:43 ID:???
Perl4時代のこの定番処理がいまだに使われてるってのもなぁ
108nobodyさん:2008/03/13(木) 03:58:19 ID:???
そこでcgi-lib.plですよw
109nobodyさん:2008/03/13(木) 13:54:44 ID:???
最近、GET/POSTのデータやテキストファイルを自前で読み込まなきゃならないことがあって
「あれ? どうやるんだっけ?」と本気で焦った俺。

使わないとそんなもんだよな。
110nobodyさん:2008/03/13(木) 20:56:52 ID:???
>>109
ライブラリが整備されてそっち使うと忘れるんだよな
111nobodyさん:2008/03/14(金) 00:19:02 ID:jE/64EXv
くだすれにも書き込んだ者ですが。

$aaa=1;
if($aaa==1||$aaa==3)
これをもっと簡潔に書くにはどうすればいいですか。

あと、「$aaaが8のn倍ならマッチさせる」というのも
わかりませんでした、おねがいしますm(_ _)m
112nobodyさん:2008/03/14(金) 00:26:38 ID:???
!($aaa % 8) ← これで8の倍数のチェックだけど、マイナス値は試してないのでわかんないw

8で割ってみて余りが0なら割り切れてるので8の倍数ということ
113nobodyさん:2008/03/14(金) 00:34:03 ID:???
$aaa=1;
if($aaa==1||$aaa==3)

if ($aaa =~ /^[13]$/)
こんなのできないこともないけど、そのままでいいんじゃないか?
114111:2008/03/14(金) 00:40:08 ID:jE/64EXv
>112
そういうやりかたもあるんですね。

>113
極端にいえば
if($aaa==1||$aaa==5||$aaa==13||$aaa==17||$aaa==25||$aaa==34||)
こんなに長くなってしまう。
これじゃあまりにもじゃないですか?
115nobodyさん:2008/03/14(金) 01:07:31 ID:???
$aaa==9 や $aaa==21 が入ってなくて $aaa==34 が出てくるから
長くなるんだと思う。
116nobodyさん:2008/03/14(金) 01:13:26 ID:???
ありえる数字を列挙させて、それのチェック対象が1つの変数なら
1つの変数に対して配列で一気にチェックできた気がする

grep 使ったような使わなかったような・・・ごめん。 俺にはもう無理w
117nobodyさん:2008/03/14(金) 01:41:34 ID:???
長くて見づらいけど、処理量が多くて重くなるよりはマシかな。
そんな劇的な違いは無いとしても気分的になんとなくw
118nobodyさん:2008/03/14(金) 01:51:12 ID:???
重いと言っても何百万回も繰り返さないから、こうしちゃうなw
if($aaa =~ /^(1|5|13|17|25|34)$/)
119nobodyさん:2008/03/14(金) 06:02:08 ID:???
%tmp = map { $_ , 1 } ( 1, 5, 13, 17, 25, 34 ) ;
if ( defined $tmp{$aaa} ){
 print "俺の名を言ってみろ\n" ;
}
120nobodyさん:2008/03/14(金) 11:41:19 ID:???
>>116
grep使う方法だとこうかな?

if ( grep { $aaa == $_ } qw( 1 5 13 17 25 34  ) ) {
    # code here
}
121nobodyさん:2008/03/14(金) 11:42:57 ID:???
# 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/];
122nobodyさん:2008/03/14(金) 11:53:06 ID:???
ほとんどの場合、ブロックより式の方が早いので
my %tmp = map +( $_ => 1 ), ( 1, 5, 13, 17, 25, 34 );
grep $aaa == $_ ,( 1, 5, 13, 17, 25, 34 );

123nobodyさん:2008/03/14(金) 14:50:45 ID:???
dankogaiがエントリ書いてた
ttp://blog.livedoor.jp/dankogai/archives/51017983.html
124nobodyさん:2008/03/14(金) 15:48:58 ID:???
125nobodyさん:2008/03/14(金) 22:34:42 ID: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";
  }
}
126nobodyさん:2008/03/14(金) 22:50:02 ID:???
>>125
open(FH, "$_") or die "$! [$_]";
1 while <FH>;

とでもして吐かれたエラーメッセージを読む。
127nobodyさん:2008/03/14(金) 23:25:19 ID:???
>>125
File::Find の find では pwd が変りますが、
$File::Find::name で得られるのはこの場合は $dir からのパス。

use Cwd ;
して if 文の中に
print getcwd ;
して確認してみそ。

簡単な解決方法は、$dir にゼッタイパスを突っ込め。
それから perldoc File::Find くらいしろ。
128nobodyさん:2008/03/16(日) 19:27:01 ID:483Ek7KZ
Commonで漢字を含むデータをPOSTしたいのですが、漢字部分が出力されません。
以下で生成されたcontentをチェックしても、漢字だけ消えています。
どの様にすれば良いでしょうか。
よろしくお願いいたします。
use encoding "shift-jis";
LWP::UserAgent;
use HTTP::Request::Common qw(POST);
my %form=('test'=>'漢字123');
my $request = POST('http://test.test',[%form]);
my $con=$request->content;
print "test:$form{test}\n";
print "content:$con\n";

出力
test:漢字123
content:test=123
129nobodyさん:2008/03/16(日) 22:26:04 ID:???
>>128
# use encoding "shift-jis";
# LWP::UserAgent;
130nobodyさん:2008/03/16(日) 23:03:42 ID:eaCmNgRi
はじめましてこんにちは。
自作の掲示板を作ってまして、ある書き込みにレスが付いた場合は
そのレスの数をカウントして画面に表示させる、という事をやってます。
現状はこんな感じです。

print "($res)<br>\n" if ($res ne "");

レスがある場合は(9)とかの某かの数字、レスが付いてない場合は空白という所までは
上手く行ってるのですが、
この(9)の部分を赤で出力したいと思ってます。

出来れば上記の命令の中だけで完結させたいのですが、無理でしょうか?
131nobodyさん:2008/03/16(日) 23:16:51 ID:???
>>130
print qq|<span style="color:red;">($res)</span><br>\n| if $res;

Webサイト制作初心者用質問スレ Part 194
http://pc11.2ch.net/test/read.cgi/hp/1204015309/

△▲ WebProg 初心者の質問 Part17 ▼▽
http://pc11.2ch.net/test/read.cgi/php/1204462146/
132nobodyさん:2008/03/17(月) 02:23:56 ID:WVXzjYIy
>>129
ありがとうございました。
ただ、UserAgentは使うのでコメントアウトできません。
EUCでソースを書き、1行目だけコメントアウトで解決しました。
133nobodyさん:2008/03/17(月) 11:04:17 ID:+D1UxdpV
>>126
>>127
ありがとうございました。解決しました。
134130:2008/03/17(月) 21:21:26 ID:iYfDDUad
>>131
ありがとうございました、無事に解決いたしました。
これを応用して、文字のサイズを変える事もやってみましたが上手く行きました!

ところで考え方の確認を1つ。。。
admin.cgiで生成した画面から、subって画像をUPロード。
その画像を、album.cgiという別の画面上に表示させていて上手く動いてるのですが、
「その画像がUPされた日時をalbum.cgiの画面上に表示させる。」という事を考えています。

すごーく単純に考えて、
「subる直前に日時を取得して、それを変数に格納。その変数をalbum.cgiに渡して、その変数をprintすればOKかも。」
と考えてやってますが上手く行きません。(表示すらされない。)

もともとCOBOラーなもんで、この手のコーディングは激苦手なのですが四苦八苦しながら何とかやってます。
変数の初期化は?変数は共通変数なのかpg内変数なのか?受け渡しはどうやってやるのか?
などなど色々疑問は尽きませんが、そもそも上記の考え方でおかしくはないですか?

135nobodyさん:2008/03/17(月) 22:03:37 ID:???
>>134
>>1-3

△▲ WebProg 初心者の質問 Part17 ▼▽
http://pc11.2ch.net/test/read.cgi/php/1204462146/

CGI: Common Gateway Interface part 13
http://pc11.2ch.net/test/read.cgi/php/1126436361/
136nobodyさん:2008/03/18(火) 10:37:05 ID:???
>>134
CGIプログラム:バッチ
htmlフォーム:コマンドライン
と考えれば、おのずと答えが見えると思われ。

各バッチ処理間でデータをやり取りするには、
・ファイルまたはDBに格納する
・コマンドラインオプションを利用しうまく受け渡す方法を考える
のいずれかになる。

CGIプログラム間でうまくデータを受け渡すには
・セッション(ファイルまたはDB)を利用する
・htmlフォームデータとして生成しPOSTする(値を変えられたくなければHIDE要素にする)
のいずれかになる。
137nobodyさん:2008/03/18(火) 11:07:18 ID:???
小難しく考えるなよ
stat使えばいいだろ
138nobodyさん:2008/03/18(火) 17:51:36 ID:yz+TlyvN
お世話になっております。

----------------
sub test{
$hoge = shift;
$fuga = shift;
$hoge += $fuga;
}
----------------

のような感じのプログラムを作っていましたが
うまくいかなくてどうしてだろうかと考えた所
文字列として認識していたっぽいです。

この $fuga を 数字に明言したいのですが
どのようにやるのでしょうか?

以上 ご助力いただけますとありがたいです。
139nobodyさん:2008/03/18(火) 18:20:21 ID:???
>>138
デバッグの基本、$fugaをprintしてみる
140nobodyさん:2008/03/18(火) 18:25:39 ID:???
>>138
$hoge と $fuga に数字がきちんと入ってたら、最初に文字列として認識してようと、
+= の段階で数字として扱ってくれるだろ…。他の部分のミスじゃね?
141nobodyさん:2008/03/18(火) 18:26:00 ID:???
$hogeか$fugaに数字以外の記号(改行とか)が混じっていると予想
142138:2008/03/18(火) 18:30:10 ID:yz+TlyvN
RESありがとうございますっ

$hogeか$fugaに数字以外の記号が入っている場合もあり
ソノ場合は0として扱いたいのですが
数字が入っていた場合は数字として扱いたいのです、、、

num $fuga
int $fuga
などで数字と明言する方法があったような気がするのですが
私の勘違いでしょうか???
143nobodyさん:2008/03/18(火) 18:35:55 ID:???
勘違い。
っつーかデバッグして調べろよ
144nobodyさん:2008/03/18(火) 19:26:34 ID:???
内容が多いハッシュの値があって、それをデータベースに格納するのに、
そのまま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文を構築してデータを格納しているのですが、
もう少しスマートな方法は無いでしょうか?
145nobodyさん:2008/03/18(火) 19:50:13 ID:???
 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)の辺りは、
もうちょっとスマートな方法がありそう…。
146nobodyさん:2008/03/18(火) 20:25:49 ID:???
>>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 } );

てきとーに書いたから、' とか抜けてても勘弁。
147nobodyさん:2008/03/18(火) 21:49:40 ID:???
>>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);
148138:2008/03/19(水) 16:21:54 ID: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>";
}
}
}
(続く)
149138:2008/03/19(水) 16:23:18 ID: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{名前}->数
とのハッシュデータを取得できますでしょうか?

以上 ご助力をいただけますとありがたいです。
150nobodyさん:2008/03/19(水) 16:44:42 ID:???
日本語で
151nobodyさん:2008/03/19(水) 16:56:44 ID:???
ひどすぎワロタwww
152nobodyさん:2008/03/19(水) 17:13:34 ID:???
$hash{名前}->数ってこれはリファレンス的な意味じゃないよね?
$hash{名前} = 数で取り出したいってこと?
$splitdata[10]てなに?空じゃないの?
$hashには$hash{$splitdata[7]} = 0; この部分でしか入れてないよね?
153nobodyさん:2008/03/19(水) 17:20:14 ID:???
> (フォーマットは「名前\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] したいんじゃないのかな。
154153:2008/03/19(水) 17:21:25 ID:???
最後の行 $hash{
155153:2008/03/19(水) 17:23:29 ID:???
すみません。} を打とうとしたら shift + enter を押して鬱。
$hash{$splitdata[0]} の } が抜けてました。
156nobodyさん:2008/03/19(水) 17:28:37 ID:???
map { $hash->{$_->[0]} += $_->[7]; } map { chomp; [split(/\t/)]; } @data;
157nobodyさん:2008/03/19(水) 23:15:18 ID:???
このスレが相応しいかわかりませんが質問させてください。

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 のはずです
158nobodyさん:2008/03/19(水) 23:41:08 ID:???
>>157
OSの設定はutf-8か、日本語が表示できるシェルを使ってるか
159nobodyさん:2008/03/19(水) 23:45:37 ID:???
BBSなんだからHTML吐いてるんじゃないの?
それでメタタグの文字コード宣言が違うとか
160157:2008/03/20(木) 12:29:10 ID:???
おはようございます。
apache を使ってブラウザ上に表示させてます。
メタタグには一応 utf-8 って記入してます。

ブラウザ側の文字コードも utf-8 になってました
161nobodyさん:2008/03/20(木) 12:38:21 ID:???
BOM付いてる希ガス
162nobodyさん:2008/03/20(木) 13:03:57 ID:???
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]が表示されないのはなぜ?
163nobodyさん:2008/03/20(木) 13:33:56 ID:???
print "$box[1][0+$i*10]\n";だから。
164nobodyさん:2008/03/20(木) 13:41:13 ID:???
$box[$i][$j] = $j;

の行の次に

print "[$i][$j]\n";

入れて表示してみ
165nobodyさん:2008/03/20(木) 13:42:25 ID:???
$box[$i][$j] = $i * 10 + $j;
期待する動作はこれかな?
166nobodyさん:2008/03/20(木) 13:43:46 ID:???
>>163
俺には理解不能だ
もうちと、噛み砕いておしえてくれ
167162:2008/03/20(木) 13:44:57 ID:???
みなさん、レスありがと。
今、飯食ってるから
終わったら試してみる。
168nobodyさん:2008/03/20(木) 13:54:36 ID:???
>>164
意図した動きになってる。
iもjもちゃんと入れ子になって
ループしている
169nobodyさん:2008/03/20(木) 13:56:38 ID:???
>>164
あ!ごめんなさい
ちと、おかしい
170nobodyさん:2008/03/20(木) 14:02:32 ID:???
>>165
そうでした。
171162:2008/03/20(木) 14:03:22 ID:???
皆様、ありがとうございます。
解決できました。

PG久しぶりなんで、
頭が退化してたようです。
172nobodyさん:2008/03/20(木) 14:11:42 ID:???
10 x 10 の箱に連番を入れたかっただけだけど、配列のインクリメントでちとボケてただけですね
まぁ俺もたまに似たようなミスするのであまりコケにできないwww
173nobodyさん:2008/03/20(木) 15:57:38 ID:???
またお願いします。

見た目の桁数を8桁に揃えたいんです。
先頭は空白にしたいのですが、下記でうまくいきません。

$len = 8 - length($num);
$head = " " x $len;
$txt = $head.$num;

2行目を
$head = "a" x $len;
とすれば、先頭に
"a"は入って、桁が揃うんです。

それとも連続空白を表す記号みたいな物は
あるのでしょうか?
174nobodyさん:2008/03/20(木) 16:03:28 ID:???
webブラウザが半角スペースをつぶしちゃうからとかじゃなくて?
175nobodyさん:2008/03/20(木) 16:12:49 ID:???
>>174
げ!、ソースを見たらちゃんと空白が入ってました。
ブラウザで表示すると空白がなくなっちゃう。。。
これはなんでですか?
176nobodyさん:2008/03/20(木) 16:43:28 ID:???
ブラウザの仕様
177nobodyさん:2008/03/20(木) 17:00:56 ID:???
ブラウザで桁をそろえたいなら、表示する部分のフォントを
font-family: monospace;
にしたうえで空白を   にすればいいです。
178nobodyさん:2008/03/20(木) 20:32:02 ID:cqY9pHpE
<pre></pre>
179162:2008/03/20(木) 22:32:36 ID:???
>>178
それは、クライアントの読み込みが遅くなるので
あきらめました。
 にしました。
180162:2008/03/20(木) 22:33:29 ID:???
& n b s p ;

に、しました。
181nobodyさん:2008/03/20(木) 23:06:14 ID:???
「&amp;nbsp;にしました」と書けばok
182nobodyさん:2008/03/20(木) 23:17:39 ID:???
>>181
むぅ、また、難しいことを言うな。
明日、調べます。
183nobodyさん:2008/03/20(木) 23:33:13 ID:???
>>182
いやいや、難しい話でなく。>>181が言ってるのは
「&amp;nbsp;にしました」と入力して投稿すれば
「&nbsp;にしました」と表示されるからスペース不要ってだけの話だと思うよ。

# でも確か専ブラによって表示が違ったはず。<エンティティ方面
184nobodyさん:2008/03/21(金) 10:02:10 ID:???
nbsp;でも詰まるよ
HTMLでalign=rightのほうがいいんじゃない?
185nobodyさん:2008/03/21(金) 10:37:17 ID:???
それはプロポーショナルたからな
桁そろえるのにHTMLのブロック要素を使わなかったり
固定幅フォントを使わないのはバカだゆん
186157:2008/03/21(金) 11:32:07 ID:???
>>157 です
自己解決決しました。

SQL を実行する前に SET NAMES utf8 を実行する必要があったみたいです。
一旦 SET NAMES utf8 を実行した後で select/insert/etc... を実行しないと
化けてしまうようです。
ナゼ化けるのかは理解できていませんが・・・。
# たぶん utf-8 以外で MySQL から出力しようとして化けてしまうとは思いますが理解できていません。
187nobodyさん:2008/03/21(金) 13:27:45 ID:???
ふと>>144の解答で疑問に思ったのですが…

ハッシュ値の並び方が呼び出しのタイミング等で
一致しないのは知ってますが、keys %hash と values %hash の
並び方って必ず組み合わせが一致するのでしょうか?
188nobodyさん:2008/03/21(金) 13:31:00 ID:???
keys使ってからをvaluesを使うまでにハッシュの内容を変えなかった場合一致するよ
189nobodyさん:2008/03/21(金) 18:55:25 ID:???
どなたか、10進数を26進数(使える文字はAからZ)に変換するサブルーチンを教えてください
190nobodyさん:2008/03/21(金) 21:10:27 ID:???
>>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];
}
191nobodyさん:2008/03/21(金) 21:33:13 ID:???
>>189
sub conv($){
my $alpha = 'A' ;
$alpha ++ for 1 .. $_[0] ;
return $alpha ;
}
printf "%d\t%s\n", $_, conv $_ for 0 .. 200 ;
192nobodyさん:2008/03/21(金) 21:53:29 ID:???
191は取り消し
193nobodyさん:2008/03/21(金) 23:12:27 ID:???
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}
  ;
}
194nobodyさん:2008/03/22(土) 07:21:59 ID:???
>>190-193

ありがとうございます。
さっぱり分かりませんが、
使ってみます。
195nobodyさん:2008/03/22(土) 07:40:27 ID:???
>>190
教えて頂いて申し訳ないですが、
Zの次がBAになってしまいます。
Zの次はAAにしたいのです。
196nobodyさん:2008/03/22(土) 08:02:49 ID:???
>>195
それだったら191使えば?
197nobodyさん:2008/03/22(土) 08:39:40 ID:???
>>196

>>191は取り消しって書いてあるから、
試してなかったんだけど、
試したら、うまくいってると思う。
なんで、取り消したんだろう???
198nobodyさん:2008/03/22(土) 08:46:28 ID:???
>>197
Excel式の26進数もどきだから。
199nobodyさん:2008/03/22(土) 08:53:15 ID:???
>>198
よく分からんが、ありがと。
しかし、>>191の処理速度は遅いね。
200nobodyさん:2008/03/22(土) 09:14:56 ID:???
>>193
は、なんかエラーが出て動かないorz
201nobodyさん:2008/03/22(土) 09:21:39 ID:???
>>190をなんとか改造できないだろうか。
ちと、考えてみる。
でも、自分には無理な気がする。
202nobodyさん:2008/03/22(土) 09:22:10 ID:???
>>191は、26進数じゃない。使うな。
10進数676は、26進数では、
676/26 = 26 余り0
26/26 = 1 余り0
で、1 0 0(BAAが正しい)が、
>>191だとZAになる。

>>200
インデントの為の全角スペースを除け。

203nobodyさん:2008/03/22(土) 09:38:25 ID:???
>>202

ありがと。
>>191は、遅い理由も含めて、使用しないことにする。
>>191さん、申し訳ない。
204nobodyさん:2008/03/22(土) 09:44:17 ID:???
>>193

zの次がbaになるorz
205nobodyさん:2008/03/22(土) 09:45:28 ID:???
>>203
202=191=193=俺なので気にするな。
206nobodyさん:2008/03/22(土) 10:17:00 ID:???
Math::BaseCalcモジュールでも使えば良いんでないか?
207nobodyさん:2008/03/22(土) 10:39:29 ID:???
>>206
まず、インストールのいかたが分からないので、
そこから、調べてみる
208nobodyさん:2008/03/22(土) 10:39:45 ID:???
インストールのしかた
209nobodyさん:2008/03/22(土) 10:54:33 ID:???
ppm install Math-BaseCalc
210nobodyさん:2008/03/22(土) 10:57:42 ID:???
インストールできました。

$calc = new Math::BaseCalc(digits => ['a'..'z']);
$ans = $calc->to_base($number);

これもzの次にbaが出るorz
211nobodyさん:2008/03/22(土) 11:22:42 ID:???
当り前だろ、A=0 B=0扱いなんだから
おまいがやりたい事は26進とは言わない
212nobodyさん:2008/03/22(土) 11:23:35 ID:???
B=1だ orz
213nobodyさん:2008/03/22(土) 11:32:56 ID:???
うぅーん、そうなると
私が意図したものは
どう書けばいいのだろうか???
214nobodyさん:2008/03/22(土) 12:54:31 ID:???
出来た!実に単純だった。

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];
}
215nobodyさん:2008/03/22(土) 13:06:15 ID:???
間違えた、こうだ。

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];
}
216nobodyさん:2008/03/22(土) 14:55:10 ID:???
ブルートフォースアタックに使えそうなコードだなw
217138:2008/03/24(月) 22:18:54 ID: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で数値が入りません。
どうしてでしょうか?
218nobodyさん:2008/03/24(月) 22:49:38 ID:???
レスあっただろ
219nobodyさん:2008/03/24(月) 22:52:29 ID:???
>>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;
220nobodyさん:2008/03/24(月) 23:29:25 ID:???
>>219
その @arrangeData を >>217 のコードに食わせても
 name1 : 11
 name2 : 22
 name3 : 0
 name4 : 44
になるんよね。"name3\tぱ\t" にしたりしても。

データのフォーマットが本人の説明と違うように思う。
という指摘が前回もあったような。
221nobodyさん:2008/03/26(水) 00:57:12 ID:???
質問です。ある文字列の集合を集計して出現頻度の高い順に取り出すため、
対象の集合をそのままハッシュのキーにして値を++したんですが、
ハッシュはソートできませんよね。配列を使うしかないでしょうか。
222nobodyさん:2008/03/26(水) 01:00:59 ID:???
sort { $hash{$b} <=> $hash{$a} } keys %hash;
223nobodyさん:2008/03/26(水) 01:01:47 ID:???
>>221
質問が漠然とし過ぎてるんで、この辺一通り読んでから来て。
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html
http://perldoc.jp/docs/perl/5.8.8/perldsc.pod
224nobodyさん:2008/03/26(水) 01:05:19 ID:???
>>222さんのでわかりました!
>>223さんのも読んでおきます!
どうもでした!!
225nobodyさん:2008/03/26(水) 09:29:51 ID:LilkylgS
CGI.pmを使ってアップロードされたファイルの途中まで読んで
そこで終わりにしたい場合はどうしたらいいでしょうか?

どうも全部読むか、失敗かの選択しかないみたいなんですが。。
226nobodyさん:2008/03/26(水) 14:32:04 ID:???
そんな需要は稀なんだろ
一旦保存してから読み直せば?
227nobodyさん:2008/03/26(水) 14:47:06 ID:???
>>225
httpd が受け取る/受け取らないという話でなく、
プログラム中の処理の流れでという意味なら
http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod
の「ファイル・アップロード・フィールドの作成」の項
228nobodyさん:2008/03/26(水) 22:35:17 ID: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は空白です。

http://q.hatena.ne.jp/1190815879
とかを見るとどう見てもこれで正しいようにしか思えないのですが何故?


他にこんなところで迷ってる人居ないから環境の問題なんだろうか?
CoLinux,perl5.8.6
229nobodyさん:2008/03/26(水) 22:45:43 ID:???
同じ変数でも名前空間が異なれば別物
230nobodyさん:2008/03/26(水) 22:57:38 ID:???
>>228
<q cite="http://perldoc.jp/docs/perl/5.10.0/perlfunc.pod#item_my_EXPR_my">
my はリストアップされた変数を、囲っているブロック、ファイル、eval の中で
ローカルな (レキシカルな) ものにします。
</q>

http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlmod.html#Perl_Modules
231nobodyさん:2008/03/26(水) 23:12:52 ID:???
my と use strict を取っ払ってみると print されたり。
変数の局所化とか strict とは無縁になるけど。

はてなでやり取りしてる人らはそうしてるんじゃないかな。
232nobodyさん:2008/03/27(木) 01:07:20 ID:???
local
233nobodyさん:2008/03/27(木) 01:23:34 ID: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使うべし。
http://memo.majide.com/index.php?%A1%DAPerl%A1%DBConfig-Auto%A4%CB%A4%E8%A4%EB%C0%DF%C4%EA%A5%D5%A5%A1%A5%A4%A5%EB%A4%CE%C6%C9%A4%DF%B9%FE%A4%DF

当然だがファイル間は文字コードは統一しとけよ
それでしんだひとをみたことがあります。>俺自身
234nobodyさん:2008/03/27(木) 10:30:16 ID:???
>>233
説明で「 -> 1」とかを使ったら混乱するだろjk
235nobodyさん:2008/03/27(木) 12:35:04 ID:???
正直すまんかった
234が責任を持って書き換えます。おながい。
236nobodyさん:2008/03/27(木) 12:36:10 ID:???
>>228
こうするのさ。

---const.pl---
$x="あいうえお";
1;

---main.cgi---
use strict;
our $x;
require "./const.pl";
print $x;
237nobodyさん:2008/03/27(木) 16:59:46 ID:???
our wwwwwwwwwwwwwwwwwwwwwwwwww
238nobodyさん:2008/03/27(木) 19:04:51 ID:???
○|_|| ̄ wwwwwwwwwwwwwww
239nobodyさん:2008/03/27(木) 22:17:48 ID:???
oL/
240228:2008/03/27(木) 23:49:16 ID:OO8NUyXN
>>229-236
さっぱりわからんがサンクス。調べてみる
iniファイルやPHPみたいに簡単に取得できる方法はないのかのう・・・
241nobodyさん:2008/03/27(木) 23:56:27 ID:???
>iniファイルやPHPみたいに簡単に取得できる方法
だからモジュール紹介されてるやんけwww
242nobodyさん:2008/03/28(金) 00:17:56 ID:???
ワロタ
243233:2008/03/28(金) 00:26:56 ID:???
>>240
感想でいいからくれ
何がさっぱりわからんと思ったか書いてくれれば分かりやすくもういっかい書くよ。

1. リンクを開いたと思うんだが、何が意味不明だと思った(全部ってのはなしで)
2. 何を作っててプログラム暦何年か教えてくれ。

スレ汚しならすまん。ちょっと個人的に技法よりも心理障壁に興味がある。
244nobodyさん:2008/03/28(金) 10:02:51 ID:???
新人教育かw
245nobodyさん:2008/03/28(金) 15:01:30 ID:jpsDmJfA
ログに保存されている日付を以下のように整形するにはどうしたらいいんでしょう?

2008/03/28(金) 09:30:08

08/3/28 9:30
246nobodyさん:2008/03/28(金) 15:33:52 ID:???
>>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');
247nobodyさん:2008/03/28(金) 15:36:13 ID:???
use strict;

my $orgdate = '2008/03/28(金) 09:30:08';
my @splitdata = $orgdate =~ /(\d{2})+/g;

printf("%02d/%02d/%02d %02d:%02d:%02d", @splitdata);
248nobodyさん:2008/03/28(金) 15:46:09 ID:???
s{\d\d(\d\d/\d+/\d+)[^ ]+( \d+:\d+):\d+}{$1$2};
249nobodyさん:2008/03/28(金) 15:48:45 ID:???
指定がないけど %02d/%d/%d %d:%02d を期待されてそうな気がする
250nobodyさん:2008/03/28(金) 15:57:20 ID:???
なるほど。

s{\d\d(\d\d)/0?(\d+)/0?(\d+)[^ ]+ 0?(\d+):(\d+):\d+}{$1/$2/$3 $4:$5};
251nobodyさん:2008/03/28(金) 16:45:45 ID:???
my @splitdata = $orgdate =~ /(\d{1,2})+/g;
my $datetime = sprintf("%02d/%d/%d %d:%d:%d", @splitdata);
252nobodyさん:2008/03/28(金) 16:49:23 ID:???
間違えた

my @splitdata = $orgdate =~ /(\d{1,2})+/g;
my $datetime = sprintf("%02d/%d/%d %d:%d", @splitdata);
print $datetime;
253nobodyさん:2008/03/28(金) 16:59:35 ID:???
2008/03/28(金) 09:30:08から08/3/28(Fri) 9:30にするにはどうする?

254nobodyさん:2008/03/28(金) 17:35:24 ID:???
>>247-252
もはや、知らない奴が見たら暗号でしかないなw

255nobodyさん:2008/03/28(金) 19:09:17 ID:???
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
になります。
そこで、この問題について載っているサイトがあれば教えてください。
256nobodyさん:2008/03/28(金) 20:04:35 ID:???
式の途中で値を変えるやり方がまずいとは思うけどね
257nobodyさん:2008/03/28(金) 23:58:05 ID:???
加算の評価順は定義されてないという事を知らずに
> var c=1;alert(c=c+(c*=10)+(c*=100));
こう書くのはクズグラマー。
258nobodyさん:2008/03/29(土) 03:54:49 ID:???
259nobodyさん:2008/03/29(土) 04:33:29 ID:???
>>253
年を二桁にしたら100年後に困るぞ!
260nobodyさん:2008/03/29(土) 08:45:59 ID:???
>>253
s/^\d\d//;
s/^(\d\d\/)0/$1/;
s/金/Fri/;
s/:\d\d$//;
261nobodyさん:2008/03/29(土) 14:59:25 ID:???
>>259
19xxから20xxに変わったが、2桁で困ってないので100年後も同様に困らない。
262nobodyさん:2008/03/29(土) 17:09:47 ID:???
>>259
百年後なんて俺等死んでるから気にする必要ないw
263nobodyさん:2008/03/29(土) 17:56:41 ID:???
そういう屑のせいで困る人たちもいるわけだ
264nobodyさん:2008/03/29(土) 19:27:22 ID:???
>>262
医学の進歩は目覚しいから、お前のような底辺奴隷はむしろ死ねないかもしれない。
265259:2008/03/30(日) 22:02:27 ID:???
ジョークを真に受ける馬鹿がこんなに多いとは・・・
266nobodyさん:2008/03/30(日) 23:27:37 ID:???
>>265
更にジョークを真に受けた馬鹿の登場ですか?
267nobodyさん:2008/03/30(日) 23:58:51 ID:???
>>266
言っとくけど俺をあまりナメないほうがいいよ
vipでコテハンやってるしこのスレ潰すくらいの影響力は持ってるから
くだらないことで刺激して後悔しないようにね
268nobodyさん:2008/03/31(月) 01:08:05 ID:???
>>267
そのコピペには、もう飽きた\(^o^)/
269259:2008/03/31(月) 07:25:32 ID:???
>>266
後出しジャソケソカコワルイ
270nobodyさん:2008/03/31(月) 10:11:33 ID:???
どっちが後出しだよw
271nobodyさん:2008/03/31(月) 12:02:54 ID:???
中出しの方が気持ちいいぞ。
272nobodyさん:2008/04/01(火) 21:14:09 ID:???
HTML::Templateっていうモジュールを使おうとしたら
鯖管理してる人が入れたくないです。っていうので
HTML::Templateの代わりになるような標準モジュールって何かありますかね?
個人的にはHTML::Templateの<TMPL_IF>みたいなのが使えれば大満足なんだけども

自分で作っちゃったほうが早いかな?
273nobodyさん:2008/04/02(水) 01:00:40 ID:???
普通にディレクトリでも作って放り込んで、useで使うのは駄目なん?
274nobodyさん:2008/04/02(水) 10:50:31 ID:???
HTML::TemplateはPurePerlだからディレクトリ作ってほうりこめばおk
275nobodyさん:2008/04/02(水) 14:04:47 ID:???
昨日から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は書き換える箇所があるのですか?
基本は同じと聞いたのですが細かく言うと変更すべきところもあるんでしょうか?

どなたかよろしくお願い致します
276nobodyさん:2008/04/02(水) 14:28:33 ID:???
>>275
>perlには大きくわけて2つある
ファイルを置けば動くPurePerlと、installが必要なバイナリの2種類かな?

>恐らくActivePerlの為に書かれたであろうソースをcygwinで
プログラムファイル自体にその差は無い
よって
>cygwinとActiveperlは書き換える箇所があるのですか?
書き換える箇所は無い
ただしActivePerlでは動かないものもあるかもしれない

cygwinはUNIXエミュレータ(みたいなもの)
ActivePerlはWindows版のPerlインタプリタ
同列に並べるのはおかしい

> Internet Explorer ではこのページは表示できません
このエラーが出るってことはおそらくパーミッション
277nobodyさん:2008/04/02(水) 15:21:24 ID:???
>>275
書いた人です。「それは Perl だ」と言ったのも自分。

あれはCGIではなくてCLIスクリプト(=コンソールアプリ)なので、
Perl実行環境さえあればWebサーバだの何だのは要りません。
# 「標準出力に何も吐かない」ブツはCGIではない。

あなたのしたいことは、Web制作板ともWebProg板とも関係のないことです。

ブツ自体はActivePerl だろうが cygwin 上の Perl だろうが動きます。
プロンプトから perl hoge.pl するだけ。以上。

ただ、glob() に2万ファイル食わせるのはやめといたほうがいいと思うな。
278nobodyさん:2008/04/02(水) 15:33:03 ID:???
直接やれwww
279nobodyさん:2008/04/02(水) 15:40:45 ID:???
元ネタはここか
http://pc11.2ch.net/test/read.cgi/hp/1205922529/100

ほんとか?
280nobodyさん:2008/04/02(水) 15:52:10 ID:???
>>275です
>>276
詳しくありがとうございます
勉強になります

>>277
手取り足取りスレでお世話になりました
>>277さんのお陰で目標までの道が見えたような気がします
本当に感謝しております
HTMLとTXTそれぞれ3枚づつ置いてテストしてみようとしたのですが
上記の通り読み込めませんでした
hello.plで試したところ読み込みはできているようなので
書き込み用のファイルを用意しておくべきなのかわからないです
サーバなしで動くのでしたか私はサーバを通して操作するものかと勘違いしてましたすいません
perlでできると教えてくれて本当にありがとうございます

板違いになるのかーショボーン
どこに行けばいいのか・・・
みなさんありがとうございました
281277:2008/04/02(水) 16:00:03 ID:???
スレ汚しまくりで、本当にごめんなさい。 > all
とりあえず、物凄い勢いで板違い。>>275さんには、教えてgoo辺りがお勧め。
当分消えよう。

>>278
間接でも偏頭痛がしたので勘弁してください。
放置するとめんどくさい流れになりそうだったので出てきました。すみません。

>>279
そこで正解です…。
282nobodyさん:2008/04/02(水) 17:09:09 ID:???
winならActivePerlでいいやん。
283nobodyさん:2008/04/02(水) 21:09:16 ID:???
おまえらstrawberryperl知らんのか
284nobodyさん:2008/04/03(木) 00:13:59 ID:???
知らないかダメダメだから話題に出ない
それぐらい察してくれるとありがたい
285nobodyさん:2008/04/03(木) 03:38:43 ID:x8vlzbgB
colinuxでいいじゃん
286nobodyさん:2008/04/03(木) 10:28:20 ID:???
いろいろ出すと混乱しちゃうぉw
287nobodyさん:2008/04/03(木) 13:05:14 ID:???
colinuxとクリネックスて似てるね
288nobodyさん:2008/04/03(木) 14:21:42 ID:???
初心者ならActivePerl、中級者以降ならStrawberry Perlだな。
289nobodyさん:2008/04/03(木) 16:36:19 ID:???
超上級者ですが ActivePerl 使ってます
290nobodyさん:2008/04/03(木) 18:06:58 ID:???
perl開発者ですがperl使ってません
291nobodyさん:2008/04/03(木) 19:03:25 ID:???
自分はStrawberryPerlが有り難すぎるのだけど、前はActivePerl使ってた。
StrawberryPerlと比べてActivePerlはどういうメリットがあるのかな。
PPMが便利なこともあるけど、CPANが使いやすいStrawberryPerlの方が自分は便利。
ActivePerlの方を推す方の意見を聞きたいです。
292nobodyさん:2008/04/03(木) 19:56:47 ID:???
ActivePerl に一致する日本語のページ 約 560,000 件中 1 - 50 件目 (0.04 秒)
Strawberry Perl に一致する日本語のページ 約 13,000 件中 1 - 50 件目 (0.37 秒)

ActivePerl入れっぱなしだから特に探さなかった
293nobodyさん:2008/04/03(木) 20:05:15 ID:???
じゃ、今のActivePerl使ってみな。
294nobodyさん:2008/04/03(木) 20:05:58 ID:???
>>293>>291
295nobodyさん:2008/04/03(木) 22:08:39 ID:???
おーこんなんあったのか
存在すらしらなかった
296nobodyさん:2008/04/03(木) 22:33:14 ID:???
ActivePerlにはppmがあるし、最近は日本人がやってるppmリポジトリ(tcool)があるから
何かあっても日本語で済ませられるからなぁ。あそこだとCatalyst+DBIC+TT2もJiftyもPlaggerもそろってるし。
297nobodyさん:2008/04/04(金) 04:20:23 ID:???
winでweb開発するならvmwareとかcolinuxとかいれるだろ情交
298nobodyさん:2008/04/04(金) 10:07:57 ID:???
>>297
たしかにそれはもっともなんだが、クライアントの要望でWinで動かなきゃだめ、ってのでも
対応できて助かる。ほんと。
299nobodyさん:2008/04/04(金) 14:10:52 ID:???
vmwareとかcolinuxって何に必要なんだ?
特殊なことをするのでなければ、cronとSpeedyCGIぐらいしか思いつかない。
300nobodyさん:2008/04/04(金) 16:49:23 ID:???
サーバ機のOSにwin使うの?それならば何も言わんけど
301nobodyさん:2008/04/04(金) 17:29:46 ID:???
話がどんどんズレてるぞおまいら。
302nobodyさん:2008/04/05(土) 00:28:43 ID:???
PerlからDBI::ODBCでMS Accessに接続しようと思います。
SQLに日本語が混じっているときSJISだとうまくいくのですが
UTF8だと文字化けしてエラーになってしまいます。
Unicodeでも文字化けしない方法はないでしょうか?
303nobodyさん:2008/04/05(土) 03:41:48 ID:???
DB 側に文字コードを指定できたはず
304nobodyさん:2008/04/07(月) 18:30:35 ID:/Zogy0zf
もの凄く抽象的な質問ですがご容赦ください。


現在、mod_perl下で動いているプログラムがあります。
必要があり、これを修正してみたところ、何が悪かったのかそのままサーバダウン。

サーバダウン直前の挙動、エラーメッセージ、mod_perlの特性などから検証した結果、
プログラムの必要メモリ量が極端に増え、それに伴いメモリ不足で落ちたのではないかという結論に至りました。


さて、ここからが質問なんですが、
mod_perlのプログラムを書くにあたり、メモリ使用量などに関して、
コーディングのコツ、書くときの注意、メモリ使用量を見る方法などがありましたら教えてください。

参考になるサイトや書籍などでも構いません。
英語でも頑張って読んでみようとは思いますが、理解できるかどうかは甚だ怪しいです。
305nobodyさん:2008/04/07(月) 19:21:31 ID:???
プロを雇いなさい。
306nobodyさん:2008/04/07(月) 19:50:42 ID:???
修正前は全く問題なかったのなら修正部分見るだけで簡単に解かるから楽ジャン
307nobodyさん:2008/04/07(月) 21:42:21 ID:TcHrwP/2
元に戻す
308nobodyさん:2008/04/07(月) 23:10:26 ID:???
svn revert -R
309nobodyさん:2008/04/07(月) 23:27:22 ID:???
ちゃんと初期化、解放したったらえーんとちゃうのん?
310nobodyさん:2008/04/08(火) 03:52:16 ID:???
一定回数の呼び出しでリブートするしかなかったっけか。
311nobodyさん:2008/04/08(火) 06:53:24 ID:O35wAre8
あるオブジェクトが属するクラス名(パッケージ名)はどこに入っているのでしょうか。
特定のオブジェクトを外部から判定したいとしたときなど、
文字列(ClassName=HASHxxxなど)を見て判断できるとも思いますが、
文字列変換が値の出力にオーバーライドされていたりするとダメですし・・

例えば、あるサブルーチンの引数をClassNameオブジェクトに限る、といったときに判定したいのです。
よろしくお願いします。
312311:2008/04/08(火) 07:27:45 ID:???
すみません見つかりました。判定に関しては
if ($obj->isa('ClassName')) {・・・}
この辺から探っていけそうでしたので、311の質問は一旦取り下げますm(_ _)m
313nobodyさん:2008/04/08(火) 09:05:59 ID:???
>309
してます。
今回の場合に限りますが、解放されてないリソースが溜まり続けると言うより、1回の必要量が大きすぎた模様。

>305
いや、そんなこと言われても。

>306-309
質問文は後半だ。
314nobodyさん:2008/04/08(火) 09:13:08 ID:???
>>313
>>1
【激速】mod_perl SpeedyCGI FastCGI【激速】
http://pc11.2ch.net/test/read.cgi/php/1149505269/
315nobodyさん:2008/04/08(火) 12:45:16 ID:???
>>304
mod_perlかcgiかに関係なく
strictを付ける
サイズの予想できないデータは一括取り込みしない
ってのは当たり前だと思うんだが・・・

mod_perlで問題になりそうなのは
循環参照と意図しないクロージャくらいかな?

316nobodyさん:2008/04/08(火) 18:50:34 ID:???
>314
ありがとうございます。
宗教戦争が勃発してる魔境にしか見えないのが辛いところですが。

>315
ちょっとだけ内部の挙動を変えたらメモリ容量が4倍に膨れ上がってしまいまして…。



こういうのを、topコマンドでリアルタイムに監視する以外の方法があれば教えてください。
317nobodyさん:2008/04/08(火) 19:19:20 ID:???
4倍で落ちるってどんだけだよ
318nobodyさん:2008/04/08(火) 19:20:40 ID:???
Devel::Sizeでどの変数がメモリ食ってるか調べてみれば?
319nobodyさん:2008/04/08(火) 19:26:09 ID:???
320nobodyさん:2008/04/08(火) 20:31:28 ID:???
>317
単純計算ですが、総計にしてメモリ1GBほど増加です。

>318
ありがとうございます

>319
ちょうど英語にひぃひぃ言いながら読んでたところです。
321nobodyさん:2008/04/08(火) 20:55:45 ID:???
メモリ量が4倍になったならMaxClientsを1/4にすりゃいいじゃん。


とりあえずこのへんも参考にするといい
http://iandeth.dyndns.org/mt/ian/archives/000624.html
http://www.typemiss.net/blog/kounoike/20060212-64
322nobodyさん:2008/04/08(火) 22:02:45 ID:???
>>313
数100MBのデータを気軽に読み込んじゃうのは素人なんだってば。
だからプロを雇えと。
323nobodyさん:2008/04/08(火) 23:49:56 ID:ng1N9SG/
与えられた文字列がutf8として正しいかどうか判断するのに
utf8::decode($str);
if ($str =~ /\P{IsASCII}/ and not (utf8::is_utf8($str))) {
### エラー
}
ってやってみましたが、あってますか?
324nobodyさん:2008/04/11(金) 10:40:16 ID:???
モジュールがPurePerlかどうかはどうやって判断すれば良いでしょうか?
325nobodyさん:2008/04/11(金) 11:53:06 ID:???
それは機械的に?
それとも手動で?
326nobodyさん:2008/04/14(月) 15:21:25 ID:???
http://watalog.jugem.jp/?eid=135
↑の人と同じ悩みなんですが、jugem.jpのRSSをLWP::Simple::mirrorでミラーリングしようとすると、
RSSの内容ではなく、HTMLの内容が帰ってくるのは、どうしてですか?

RSSは以下のURLなのですが、引数を渡しているURLは、LWP::Simpleでは対応できないってでしょうか?
http://watalog.jugem.jp/?mode=rss
327訂正:2008/04/14(月) 15:22:02 ID:???
http://watalog.jugem.jp/?eid=135
↑の人と同じ悩みなんですが、jugem.jpのRSSをLWP::Simple::mirrorでミラーリングしようとすると、
RSSの内容ではなく、HTMLの内容が帰ってくるのは、どうしてですか?

RSSは以下のURLなのですが、引数を渡しているURLは、LWP::Simpleでは対応できないってことでしょうか?
http://watalog.jugem.jp/?mode=rss
328nobodyさん:2008/04/14(月) 16:19:57 ID:???
>>327
UAで判定してる模様。
$ua = LWP::UserAgent->new(agent=>'IEみたいなUA');
でやってみ。
329nobodyさん:2008/04/14(月) 16:25:16 ID:???
>>328
ありがとうございます。いやらしいことしますね…
LWP::Simple::mirrorを使っているので、全部書き直すか、例外処理を作るしかなさそうですねorz
330nobodyさん:2008/04/14(月) 16:33:55 ID:??? BE:212256083-DIA(100004)
LWP::Simple は $ua を Export 出来る
331nobodyさん:2008/04/14(月) 16:52:36 ID:???
>>328の一行を追加すればいけるということでしょうか。
オブジェクト指向的な話(->とか)が全くわからないので、そういうところを避けながらコーディングしてきたのですが厳しいですね。
332327:2008/04/14(月) 19:32:33 ID:???
結局、LWP::UserAgentでUA偽装して、ミラーリングさせました。
今後はSimpleではなくて、こっちを使おう…
333nobodyさん:2008/04/14(月) 21:28:37 ID:vhVZb6UQ
CGI::Application を使ってみようかと考えてるPerl初心者です。
Web上でいろいろサンプルコードを見ていたんですが、
使いたいモジュールがある場合は
CGI::Application::Plugin として利用するのがお決まりのように見えます。
実際、それが推奨スタイルなんでしょうか?
Log::Handler が使いたかったのですが、
単純に use Log::Handler; して使うと何か不都合があるのでしょうか?
334nobodyさん:2008/04/15(火) 07:46:19 ID:m7oSRbUq
再利用しやすいようにPluginにぶら下げてるだけなんじゃないの?
好きにしたらいいと思うよ
335nobodyさん:2008/04/15(火) 11:53:04 ID:7+9bkjp8
ありがとうございます!
336いしはら:2008/04/15(火) 18:41:44 ID:y4DgL3Q4
------------------------------------------------
☆簡易CTIサービス(1万5千円)
http://s1s.jp/CTI/


☆自動クリックサービス
http://s1s.jp/


☆ブログ自動更新 記事投稿 コメント書き込みアプリ
http://s1s.jp/BLOG/

------------------------------------------------
 ヽ('A`)ノ
  (  )  大金星!!
  ノω|
337nobodyさん:2008/04/16(水) 14:37:06 ID:???
二項分布で確率1/AをB回の試行でちょうどC回引く確率を計算したいのですが、
これらをperlかPHPで計算する方法が分かる方いましたらアドバイス頂けないでしょうか。
式は見ても理解できないのでサンプルソースを頂けると助かります。
338nobodyさん:2008/04/16(水) 15:16:19 ID:???
式を見ても理解できないとコーディングなんてできないだろw
339nobodyさん:2008/04/16(水) 16:03:06 ID:???
「二項分布 perl」でぐぐれ
340nobodyさん:2008/04/16(水) 17:57:49 ID:???
最初の方に出て来るJUG7のソースいじりましたが、
サイコロ10000回投げて1が1666回出る確率とかだそうとする際に
数値が大きすぎるのかバグります…。
以前調べた時のソースも、数値が小さければ問題無いものの、
規模を大きくすると1.#INFというエラーが返ったり。
341nobodyさん:2008/04/16(水) 21:19:23 ID:WbXSl+I/
お願いします。
与えられた文字列が大小文字同一視でハッシュのキーとして存在するかどうか、
調べる方法はないでしょうか。ハッシュキーは膨大な数あるので、配列にコピーとかは
したくないです。よろしくお願いし明日。
342nobodyさん:2008/04/16(水) 21:28:03 ID:???
1 hashを作るときに小文字(あるいは大文字)に変換して作る。
2 tieで1と同じ事を行う。
好きなほうをどうぞ。
343nobodyさん:2008/04/16(水) 21:32:57 ID:???
>>341
大小文字の区別はされるけどexistsって関数がある
344nobodyさん:2008/04/16(水) 21:39:38 ID:???
なるほど、ありがとうございます。
実は、元の正しい表記を後で取り出したいんですが、
ハッシュのvalueは空いてるので、そこに元の表記を入れておいて
キーを大文字統一にしてみようと思います。
コピーするのと変わらないかもしれませんが。
345nobodyさん:2008/04/17(木) 04:13:49 ID: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日、これについてどこにも情報がありませんでした……
346nobodyさん:2008/04/17(木) 07:21:16 ID:???
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フラグを付け直す
347nobodyさん:2008/04/17(木) 09:58:36 ID:???
>>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"両方してる意味がわからん。
348nobodyさん:2008/04/17(木) 14:34:42 ID:FD3bsXbG
>>345です
解決しました。情報に感謝します。
>>346の内容を、Encode::〜でやりました。
こういうのって結構な落とし穴ですね。フラグのことはわかっているつもりでしたが……
349nobodyさん:2008/04/17(木) 20:17:29 ID:2zzFnXWL
教えて君でスマンが、分かる人がいたら助けて。

CGI::Applicationパッケージを使っているんだけど、
param() 関数で、数字だけの長い「文字列」を受け取ると
数値リテラルとして、しかも丸められた値が返されちゃうんだけど、
文字リテラルとしてそのまま受け取れるよい方法ないかな?
350349:2008/04/17(木) 22:21:21 ID:???
自己レスです。
CGI.pmにまでさかのぼって調べた結果、
query()->param()は文字リテラルで返してました。
自分が書いた、表示する際の処理のバグでした。orz
351nobodyさん:2008/04/18(金) 00:03:02 ID:qXgVgrBZ
いつもすみません。
自分で作ったhash refの配列がデリファレンスできません。
$array[0]->{key}
$array[0]{key}
${$array[0]}->{key}
とか書いてみましたが様々なエラーが出ました。どう書いたらいいですか?
352nobodyさん:2008/04/18(金) 00:07:12 ID:???
すみません。問題を取り違えていました。デリファレンスはできてました。
ソートをしようと思い、下記のように書いたらhash refを配列扱いするなと言われます。
my @sorted = sort {$array[$b]->{score} <=> $array[$a]->{score}} @array;
よろしくお願いします。
353nobodyさん:2008/04/18(金) 00:20:08 ID:???
ものすごく勘違いしてました。こういうことでした。
my @sorted = sort {$b->{score} <=> $a->{score}} @array;
354nobodyさん:2008/04/18(金) 10:01:49 ID:???
そういうときもあるよ
355nobodyさん:2008/04/18(金) 18:42:42 ID:J/rLxrZJ
前に2項分布について質問した者ですが、
これだけでも教えてくれると助かります…。
1.#INF の意味はなんですか?インフィニティ?
検索しても#は検索対象にならないらしく、
*.INFの設定ファイルや関係無いものが出て来るばかりで…。
356nobodyさん:2008/04/18(金) 19:06:45 ID:???
知らんがな
357nobodyさん:2008/04/19(土) 09:40:11 ID:???
インフォメーションじゃね?
それかインフォーラム
もしくはインフェルノ
358nobodyさん:2008/04/19(土) 12:48:02 ID:n4AN2xdT
http://www.semblog.org/wiki/?rna で配布されている、
RNAというアンテナソフトを使っています。
すでに動作してるのですが、summary部分のhtmlタグを除去したいと思います。

http://www-kasm.nii.ac.jp/~i2k/tmp/rna/rss/recent_entry.html
のように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なので、なんとか改造して使い続けたいと思っています。
どうかご教示願います。
359nobodyさん:2008/04/20(日) 00:00:52 ID:???
いくら何でも冷たすぎじゃないかお前ら。

>>355
備長炭 自殺方法 でぐぐれ。それでダメなら二項分布 オーバーフローとか。
360nobodyさん:2008/04/20(日) 01:46:25 ID:???
>>358
現物ソース確認したわけじゃないけど
ttp://naoya.dyndns.org/~naoya/mt/archives/000611.html
の下の方にある remove_html を試してみたらどうかな。
361nobodyさん:2008/04/20(日) 02:10:18 ID:???
>>358
そのモジュールについては詳しくはわからないけど、もともとのソースをいぢるんじゃなくて、
それが吐き出したものを、自前で書き換えればいいんじゃね?
362nobodyさん:2008/04/20(日) 02:30:50 ID:???
元のコード見なくても

> my $encoded_descript = encode($item->{channel}->{description});
> の後に
> my $encoded_descript =~ s/<.*?>//g;
> を追加

って書いてるんだから

my $str = "<strong>大切な</strong>文書";
my $str =~ s/(.)/$1/g; # 行頭の何かが余計
print length($str);

こういうことじゃないの。
363nobodyさん:2008/04/20(日) 16:44:58 ID:???
ヒアドキュメント内でハッシュリファレンスを使う場合はどのようにすればよいのでしょうか?

$text =<<EOL;
name = $h->{'name'}
mail = $h->{'mail'}
EOL

とやっても変数が展開されません。
仕方ないのでハッシュにデリファンスしてますが、
方法があったら教えてください。
364nobodyさん:2008/04/20(日) 17:36:03 ID:???
本当はシングルクォートで括ってね?
365nobodyさん:2008/04/20(日) 20:52:48 ID:tHisgd6U
オリジナルの携帯サイトアクセスランキングを作っています。

OUTをカウントするためなんすけど、アンカーから自前のCGIページを通過させてリンク先を表示させるにはどうすればいいですか?
366nobodyさん:2008/04/21(月) 00:00:18 ID:???
自前のCGIページを通過させるアンカーを出力すればよいと思います。
367nobodyさん:2008/04/21(月) 18:56:21 ID:???
>>363
my $h = {name=>'john', mail=>'[email protected]'};
my $text =<<EOL;
name = $h->{'name'}
mail = $h->{'mail'}
EOL
print $text;

こんな感じ。
368358:2008/04/23(水) 09:11:49 ID:???
>>360, >>361, >>362

ありがとうございます。
remove_html、使いたいのですが使い方がわかりません...

# http://naoya.dyndns.org/~naoya/mt/archives/000611.html
sub remove_html {
my ($str) = @_;
my $ret;
if (defined $str) {
my $p = HTML::TokeParser->new( \$str ) or die "$!";
do {
my $plain = $p->get_text;
$ret .= $plain;
} while (my $token = $p->get_tag);
}
$ret;
}

を lib/RNA/AntennaTree.pm の最下部に追記して、
my $encoded_descript = encode($item->{channel}->{description});
の後に見よう見まねで
my $encodec_descript = &remove_html();
としてみましたが変わらずでした。
369nobodyさん:2008/04/23(水) 12:47:07 ID:???
m_unit.plというライブラリがほしいんですがググっても出てきません
どこで手に入れる事ができるでしょうか?
370nobodyさん:2008/04/23(水) 13:05:00 ID:???
>>369
ググっって出てくる奴とは違う物?
371:2008/04/23(水) 13:08:34 ID:???
ごめんなさい間違えました(><)
372nobodyさん:2008/04/24(木) 18:43:40 ID:???
ABCXXXDEF
という文字列から
ABCとDEFを削除してXXXのみを表示させたい場合はどうすればよいのでしょうか?

$moji = ABCXXXDEF;
$ans = $moji からABCとDEFを削除;

print "$ansです\n"

という具合でいいんでしょうか?
このABCとDEFを消す処理の部分がわかりません。
373nobodyさん:2008/04/24(木) 18:47:46 ID:???
$moji =~ tr/ABCDEF//d;
print $moji;
374nobodyさん:2008/04/24(木) 18:48:17 ID:???
>>372
$moji =~ s/ABC|DEF//g;
$ans = $moji
375nobodyさん:2008/04/24(木) 18:50:21 ID:???
>>373>>374
ありがとうございました。
助かります。
376nobodyさん:2008/04/26(土) 13:15:07 ID:flUVuiqJ
basenameでファイル名を取り出したいのですが、ブラウザが動いているOSの種類によって、
区切りが/であったり\であったりとまちまちです。
perlはLinux上で動いているので、デフォルトでは、/で区切られている場合しか、ファイル名を取り出せません。
\で区切られている場合でも、取り出せるようにするにはどのようにしたらよいのでしょうか?
fileparse_set_fstypeでMSWin32を指定してしまうと今度は、Unixからアクセスしてきた場合にうまくいきません。
377nobodyさん:2008/04/26(土) 13:19:19 ID:???
んなもんアクセスしてきたOSの種類で使いわけりゃいい話だろボケ
こんなもん中学生でも分かるぞカス死ね
378nobodyさん:2008/04/26(土) 16:13:45 ID:flUVuiqJ
もしブラウザがOSに関する情報を送ってこなかったらどうすればよいのでしょうか?
379nobodyさん:2008/04/26(土) 16:23:13 ID:???
>>378
ファイルの有無を判断して、
どっちのデリミタで切るか、
判断したら?
380nobodyさん:2008/04/26(土) 17:01:10 ID:???
アクセスしてきたOSは関係ない。
Perlが動いているサーバーのOSが関係する。
そして、basenameは動いているOSによって区切りを/か\か自動的に
判断してくれるので便利に使える。
サーバーがWindowsでもLinuxでもbasenameは正しく動いてファイル名を取り出せる。
取り出せない場合は、何か別の原因。
381nobodyさん:2008/04/26(土) 19:45:43 ID:???
type=fileで送られてくるファイル名の話じゃないのか?
382nobodyさん:2008/04/26(土) 21:48:20 ID:vQRq4Omz
だいたいみなさんの、perl普通にコード書き込みできるまでに要した
時間と日数おしえてもらえませんか?時間とか1日何時間くらいしてます?
383nobodyさん:2008/04/26(土) 22:09:54 ID:???
意味が。
384nobodyさん:2008/04/26(土) 22:14:17 ID:???
>>382
もっと、日本語を勉強した方がいいよ
385nobodyさん:2008/04/26(土) 22:49:57 ID:???
>>382
皆さんは「週何日、1日当たり何時間」なんていう時間割みたいな方式で
取り組んできたわけじゃないので、そういうのはよくわかんないのです。
そりゃ、そんな方式で堅苦しく取り組んできた人もいるかもしれないけど。

あなたが今までにちんちんを何ストロークしてきたかが不明なのと似てます。
386nobodyさん:2008/04/27(日) 00:52:54 ID:G3KB/HmG
mod_rewriteでURLを書き換えた時に%2Fがあると404エラーになってしまうので
スラッシュをURLエンコードさせたくないのですが、可能でしょうか?どなたか助けてください・・
p://example.net/dir/index.cgi?name=<em>hoge</em>
このように、どうしてもタグが含まれてしまうURLなので困ってます。

見るからに初心者ですが、どうかよろしくお願いします。
387nobodyさん:2008/04/27(日) 01:20:29 ID:???
>>386
不可能。
388386:2008/04/27(日) 02:55:07 ID:G3KB/HmG
>>387
そうですか・・
諦めて他に方法がないか試行錯誤してみます
ありがとうございました。
389nobodyさん:2008/04/27(日) 23:26:09 ID:???
>>382
10時間ぐらいかな。
もっとも、Perl以前にawk, sed, C
などの下地があったわけだが。
390nobodyさん:2008/04/27(日) 23:35:33 ID:???
普通がどの程度か全く分からないけど、とりあえず動く掲示板を作るのに1日1〜2時間ほど
コード書いて1週間かかった気がする

そんな自分は C (すっかり書けないけど、ポインタで躓くまでは書いてた)、VB (アプリをいくつか作ってた) の経験ありです。
391nobodyさん:2008/04/27(日) 23:39:03 ID:???
Perlでバッチ処理を書くのはすぐ出来るけど、
Webアプリ(cgi)は時間がかかると思う。
392nobodyさん:2008/04/27(日) 23:44:48 ID:???
そんな貴方にCGI.pmですよ
393nobodyさん:2008/04/30(水) 17:01:56 ID:9OxUbc+M
あの、乱数についてなのですが、100~150までの間でランダムな数をスカラー変数に格納するにはどうすればいいでしょうか?
394nobodyさん:2008/04/30(水) 17:13:24 ID:???
my $rndnum = rand(51) + 100

rand(51)
0 〜 51 未満を生成 (未満は 51 を含まないので 50 以下の数字が現れる)

+100
下限値である 100 を加えてやる


以上
395nobodyさん:2008/04/30(水) 17:14:49 ID:???
int
396nobodyさん:2008/04/30(水) 17:19:40 ID:???
my $rndnum = int(rand(51)) + 100;
397nobodyさん:2008/04/30(水) 17:19:49 ID:???
忘れてたw
>>395
thx

my $rndnum = int(rand(51) + 100);
398nobodyさん:2008/04/30(水) 18:11:00 ID:???
>>393の質問ではintなしの>>394が正解とすべきなんじゃないか?
質問者の質問が悪いところまでフォローして手取り足取りするのが役目?
399>>393:2008/04/30(水) 18:26:54 ID:9OxUbc+M
皆さんどうもありがとうございます。
確かに>>398さんの言うとおりです。わざわざフォローして下さった親切なお二方に感謝します。
400nobodyさん:2008/04/30(水) 18:38:47 ID:???
すいません。
どうも下記例のforeachのループの中で、さらにwhileのループを
回せないのですが、たぶん簡単な理由だとは思うのですが、
お助け下さい。

他にもこのようなforeachのループの中で、foreachのループも回せないと
思います。

foreach $number(@number){


while (<F2>) {
print "$number\n";
if (/$number/)
{
print "マッチしました\n";
print F3;
}
}
}
401nobodyさん:2008/04/30(水) 19:09:01 ID:???
>>400
<F2>で同じ行数を複数回とりだしたい感じ?
だとしたらヒント:seek
402nobodyさん:2008/04/30(水) 19:10:23 ID:???
>>400
1回目のforeachが終わったときに<F2>が空になる
403nobodyさん:2008/04/30(水) 19:48:00 ID:???
whileに入る前に開きなおすのも手だな
404nobodyさん:2008/04/30(水) 20:17:59 ID:GavbPT5W
一回目のループで開いてるファイルのファイル位置が終端にあるため
2周目はファイルを読み込むループが発生しません

解決法は2つ
・While の直前でファイルを開くようにする
・While の直前で seek を使ってファイル位置を先頭に戻す
です。
負荷は後者の方が幾分か軽いです
405nobodyさん:2008/04/30(水) 20:28:06 ID:???
my @lines = <F2>;

場合によってはこれもありかなと思った。無駄にメモリ食うけど。
406nobodyさん:2008/04/30(水) 20:47:41 ID:???
whileの中でforeachじゃ駄目なん?
407400:2008/04/30(水) 23:43:57 ID:???
すいません。seekというのは初めて知りました。
1回目のforeachが終わったときに<F2>が空になる ってマジですか。
例のループにseekを追加して、動くようにしていただけませんか?
お願いします。
408nobodyさん:2008/05/01(木) 01:39:53 ID:???
>>400
初めてのPerlと続・初めてのPerl買えばいいよ。
409nobodyさん:2008/05/01(木) 12:48:54 ID:???
コストの高い I/O をメインにループさせたほうがいいっすね

open(F2, "hoge.txt");
while (<F2>) {
  foreach $number(@number){
    〜
  }
}

close(F2);
410nobodyさん:2008/05/01(木) 13:18:21 ID:???
>>407
自分でやれ。
できないなら金払って業者つかえ。
代行するところじゃなく、自分で作るためのヒントを与えるところだ。
ここまでヒントがそろったらあとは調べながらできる。
411nobodyさん:2008/05/01(木) 13:51:56 ID:???
あとね、初心者なんだから記述を略すな
ちゃんと意味がわかってから略すように汁
412400:2008/05/01(木) 23:38:01 ID:???
>409 Thx 明日試してみます。seek(F2, 0, 0)では動かなかった。
>410 GW中くらい、自宅警備を止めてみたら?
>411 省略ハァ? 汁?
413409,411:2008/05/01(木) 23:46:36 ID:???
そういう口調ならてめぇで解決しろよ能無しチンカス糞野郎
414nobodyさん:2008/05/02(金) 00:07:00 ID:???
> 省略ハァ? 汁?
ワロタ
415nobodyさん:2008/05/02(金) 05:46:04 ID:???
まあ、なんだ
「ものを学ぶ姿勢」ってやつを身に着けないと成長できないよね
416nobodyさん:2008/05/02(金) 08:12:32 ID:???
きっとこの人はこれからさきの人生も困ったら自分の力で解決しようとせず人を頼りにして生きていくんだろうな。
これ10代だったら笑って流せるけど、20代以上で本気で言ってたら深刻ww
417nobodyさん:2008/05/02(金) 10:22:44 ID:???
定期的に沸くから慣れろwww
418nobodyさん:2008/05/02(金) 10:32:20 ID:???
自分の書いてるのが略記だって事すらも気がついてないんだろうな

あと、これはおそらくは宿題だなw
419nobodyさん:2008/05/02(金) 11:18:57 ID:???
延々と質問者を叩く・・・キモッ
とっくに質問者は消えてることに気づけよ禿げ
420nobodyさん:2008/05/02(金) 12:28:02 ID:???
>>419
僕の予想が確かなら、質問者なら君のパソコンのモニタの前に居るよ。
421nobodyさん:2008/05/02(金) 12:37:17 ID:???
>>420
はぁ?俺か?
ちゃうっちゅーねん
あほか
422nobodyさん:2008/05/02(金) 13:12:28 ID:???
ノリが一緒でわろたwww
423nobodyさん:2008/05/02(金) 13:34:20 ID:???
お前の粘着っぷりのほうがおもろい
医者いったほうがええんちゃうかw
リアルでアレかw
424nobodyさん:2008/05/02(金) 13:43:58 ID:???
日本語が変でござるよ
425nobodyさん:2008/05/02(金) 14:15:25 ID:???
ネット上での似非関西弁って餓鬼が凄む時に巻き舌になるのに似てる
426nobodyさん:2008/05/02(金) 14:47:41 ID:???
それは言わないのが優しさだったのに・・・
427nobodyさん:2008/05/02(金) 15:08:52 ID:???
質問者以外が必死になる理由が見つからない
428nobodyさん:2008/05/02(金) 18:44:35 ID:???
ぼくが一番、perlをうまく操れるんだ!
429nobodyさん:2008/05/02(金) 23:07:56 ID:???
>>427
思い込み激しいとか言われへん?
回りに迷惑かけても気づかないタイプだな
回答もしないのに罵倒するのはお前だけやろ
頭変すぎてわからんかw
430nobodyさん:2008/05/02(金) 23:28:43 ID:???
>>429
そんならお前が回答してやれよ。 出来るもんなら。www
431nobodyさん:2008/05/02(金) 23:45:27 ID:???
>>429
なんでそんなに必死なん?
432nobodyさん:2008/05/02(金) 23:59:11 ID:???
GWで暇なんだろ
433nobodyさん:2008/05/03(土) 02:50:47 ID:???
GW、通勤とか会社の中とか人が少なくていいよね。
434nobodyさん:2008/05/03(土) 03:07:39 ID:???
いいですよね。客からの電話も鳴りませんし。
435nobodyさん:2008/05/03(土) 10:04:09 ID:???
泣いてませんか?
436nobodyさん:2008/05/03(土) 18:44:15 ID:???
内線もならないよね。
437nobodyさん:2008/05/03(土) 19:02:10 ID:???
でもトイレに花子さん居るよね。
438フー子:2008/05/04(日) 19:36:48 ID:798fbSDd
Perl の CGI::Base とか CGI::Request モジュールって、
何のためにあるの?どうやって使うの?
439nobodyさん:2008/05/04(日) 19:50:31 ID:???
>>398
初心者質問スレで何言ってるんだ。
440 ◆TWARamEjuA :2008/05/04(日) 20:01:51 ID:??? BE:3267465-2BP(7082)
>>438
君かわいいね。

・・・ぶつ森のスレかとオモタorz...

ttp://search.cpan.org/~mrjc/cvswebedit-v2.0b1/cvs-web/lib/CGI/Base.pm
ttp://search.cpan.org/~mrjc/cvswebedit-v2.0b1/cvs-web/lib/CGI/Request.pm
を眺めてみればよろしいかと。

例文を眺めればだいたい何がしたいのかが見えてくるかと。
英文は無理に読まなくてもよろしいかと。
441nobodyさん:2008/05/04(日) 20:22:15 ID:???
pmという拡張子、ガクブル
442nobodyさん:2008/05/05(月) 14:08:42 ID:GD7pTJpy
CGI掲示板を自作していますが、書き込み送信メールのSendmailによる送信処理でつまづきました。

以下のように記述すると、管理人である自分には登録メールが送られますが、
管理人以外に、書き込みした人にも登録確認メールが送られるようにしたいんです。

#Sendmailによる送信処理
if (open(MAIL,"| $sendmail -t")){
print MAIL "X-Mailer:legend2\n";
print MAIL "To: $administrator\n";
print MAIL "Errors-To: $administrator\n";
print MAIL "From: $administrator\n";
print MAIL "Subject: $subject\n";
print MAIL "MIME-Version: 1.0\n";
print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n";
print MAIL "Content-Transfer-Encoding: 7bit\n";
print MAIL "$mail_comment\n";
print MAIL "\n";
close(MAIL);
}
}

以下のどれかを使うのでしょうか?

print SENDMAIL "From: $sender <$from>\n";
print SENDMAIL "To: $to\n";
print SENDMAIL "Cc: $cc\n";
print SENDMAIL "Bcc: $bcc\n";


どうすれば良いか御教授下さい。宜しくお願いします。

443nobodyさん:2008/05/05(月) 14:20:17 ID:???
>>442
# CGIは板違いだが、この処理自体はCGIと関係がないので。
if文のブロックを、Toヘッダだけ「書き込みした人」のアドレスにしてもう一度処理するか、
Toを「書き込みした人」のアドレス、CcまたはBccを「管理人」のアドレスにするか。

Errors-Toヘッダはobsoluteだった気がします。
envelopeアドレスを指定するべし。sendmailに-fオプションに続けてアドレスを指定する。
ttp://sonic64.com/2004-11-07.html
444nobodyさん:2008/05/05(月) 16:36:56 ID:???
つーか、今時、open(MAIL,"| $sendmail -t")やErrors-To:とか前世紀に
書かれた古文書を元にCGI作るな。めーわくだ。
445nobodyさん:2008/05/05(月) 18:19:44 ID:???
批判だけならゾウリムシにもできる
例文または参考 URL ぐらい提示すればいいじゃない
446nobodyさん:2008/05/05(月) 19:20:18 ID:???
ただでは断る。
447nobodyさん:2008/05/05(月) 20:15:30 ID:???
>>446
しね
448nobodyさん:2008/05/05(月) 21:17:57 ID:???
役立たずなテキストに騙される処を指摘してやったのに随分な言い草だな。
449BEET:2008/05/05(月) 21:36:20 ID:???
http://z-z.jp/index.cgi ここのスクリプト抜きたいんですけど、どうしたらいいのですか?
450nobodyさん:2008/05/05(月) 21:39:44 ID:???
>>449
むり
451nobodyさん:2008/05/05(月) 21:57:12 ID:???
>>449
ハッキングすればできるかもしれない。
452nobodyさん:2008/05/05(月) 22:16:06 ID:???
スクリプト抜くってどういう意味なんですか?
453nobodyさん:2008/05/05(月) 22:44:54 ID:???
ハァハァするんじゃないかな。
454nobodyさん:2008/05/05(月) 23:21:45 ID:V/xhfGfA
ftpで接続しないとスクリプトは抜けないでしょう
455BEET:2008/05/06(火) 00:42:09 ID:???
回答ありがとう。 ハッキングって.. 簡単なのかな? ソフトはできるだけ使いたくないな
456BEET:2008/05/06(火) 00:45:09 ID:???
追記なんですけど
このレンタル掲示板の管理パスをクラックされて、改竄されたんだけど、どうやってクラックしてるのかな?
457nobodyさん:2008/05/06(火) 00:49:33 ID:fJq/GBDg
(`・ω・´)??
458nobodyさん:2008/05/06(火) 00:50:15 ID:???
>>455-456
>>1を100回声を出して読め。
読み終わったら610と三ポールのミックスカクテル飲め。
459nobodyさん:2008/05/06(火) 00:51:09 ID:fJq/GBDg
(`・ω・´)ソフト使ってるだろww
460nobodyさん:2008/05/06(火) 09:09:26 ID:???
Windowsローカルに入れたActivePerlで
cpan > install XML::ATOM::Feed
したのに、それを500エラーになってしまいます
(useしてるところをコメントアウトすると通る)
moduschで見たら「存在しないか、ロード出来ない」っぽい
なぜでしょうか…?
461nobodyさん:2008/05/06(火) 16:59:23 ID:???
>>442
BCCで目的は達成できると思うけど、
自分のメールアドレスを、スパムを送りたい先などにされると
簡単にスパムの踏み台になるから気をつけてね。
462nobodyさん:2008/05/06(火) 22:50:17 ID:wGWcI8Lv
AUTOLOADってのを初めて使ってみたんです。
未定義の関数を読んだら無事AUTOLOADが呼ばれたんですが、
変数$AUTOLOADを参照するとGlobal symbol〜っていうエラーが出てしまいます。
AUTOLOADを使う場合はno strictしていいものでしょうか。
463nobodyさん:2008/05/07(水) 00:05:35 ID:???
use strict;
use warnings;

sub AUTOLOAD {
  our $AUTOLOAD;
  print $AUTOLOAD;
}

foo();
464nobodyさん:2008/05/10(土) 23:18:32 ID:???
URL転送なんだけど今こうしてます↓

#!/usr/bin/perl
print "Location: http://*****\n\n";

これに転送するまでHTMLの<meta content="x">みたいに
一定時間ウェイトかける事って出来るのでしょうか?
465nobodyさん:2008/05/10(土) 23:19:01 ID:???
いいえ
466 ◆TWARamEjuA :2008/05/11(日) 01:16:36 ID:???
転送するまでひと寝入りする。
467nobodyさん:2008/05/11(日) 02:11:14 ID:???
>>464
いい事いうじゃねえか。
出来るんだな?
今すぐ頼むぞ。
468nobodyさん:2008/05/11(日) 13:18:10 ID:yMOlxpUv
print qq{あいうえお @{[1+1]} かきくけこ };

無名配列のリファレンスとデリファレンスを使ってクォート内に式を埋め込めます。
これ気に入っててよく使うんですが、これのスカラーリファレンス版ってできませんか?

\$()
無名スカラーって存在しないんですかね。
いやそもそも@{[]}に式を埋め込めるのはそこをクォート内ではないと認識するからなわけで。
いや、う〜ん。確かこれなんかいい方法があったような期がするんですが。
469nobodyさん:2008/05/11(日) 23:02:44 ID:Vy6R2X5C
Perlスクリプトの処理が全て完了する前に
クライアントとの接続を明示的にクローズする方法は
ありませんでしょうか?

以下のようなことが実施したいです。
どなたかよろしくお願いします。


#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "<html><body>なんちゃら</body></html>";

## ここで明示的にクライアントとのConnectionをクローズしたい。

## ここからクライアント側に影響がない時間がかかる別の処理を実施したい。
&HokaNoShori();

exit;
470nobodyさん:2008/05/12(月) 01:08:40 ID:CYOIx0A2
perlで重い処理をさせるのが困ります。
例えばパソコンの30%の能力だけ使わせるとかってできませんか?
471nobodyさん:2008/05/12(月) 01:16:51 ID:???
>>470
それは知らないけど、nice付けて起動とかしてみては?
472nobodyさん:2008/05/12(月) 03:09:36 ID:???
>>468

qq{  ${\do {1+3}}  }
473nobodyさん:2008/05/12(月) 04:50:44 ID:???
>>469
close(STDOUT);
474nobodyさん:2008/05/12(月) 10:21:48 ID:???
>>469
fork
475nobodyさん:2008/05/12(月) 16:03:50 ID:???
WindowsXPでActivePerlを使って
クリップボードにあるテキストに処理を加えて
クリップボードに戻すプログラムを作ろうとしています。
Win32::Clipboardを使用しているのですが、Unicodeだと化けてしまいます。
Unicodeでも化けないで処理できる方法はあるでしょうか?
476nobodyさん:2008/05/12(月) 16:08:19 ID:CYOIx0A2
>>472
思い出した!

print qq{ ${ \(1+1)} };
でしたね。
なるほどなるほど。${}これでデリファレンスができるというわけだ。
477nobodyさん:2008/05/12(月) 17:20:30 ID:???
Win32::Clipboard が受け取るのは Shift_JIS 固定っぽいです
Encode でShift_JIS にして渡してみたらどうりますか?
478nobodyさん:2008/05/12(月) 18:00:21 ID:???
>>477
回答ありがとうございます。
Shift_JISにない文字も処理したかったので
Win32::Clipboardでは無理と言うことですね。
Win32::Clipboard以外でクリップボードを利用できるものはありますか?
479nobodyさん:2008/05/12(月) 20:22:51 ID:???
文字化けしないようにする方法教えてください
use LWP::Simple;
my $page = get('http://hogehogehoge.jp/');
getprint('http://hogehogehoge.jp/');
print $page
480nobodyさん:2008/05/12(月) 21:36:53 ID:???
>>479
ヒント:Jcode
481nobodyさん:2008/05/13(火) 01:04:45 ID:???
perl 文字化け でググれカス
482479:2008/05/13(火) 03:44:42 ID:???
エスジス保存しておいたソースファイルをEUCに変更保存してみたけど
何も変わんないですよ
483nobodyさん:2008/05/13(火) 06:45:22 ID:???
>>482
「ソースファイル」ってのが上の us-ascii で足りそうなコードのことだったら
SJIS → EUC しても何も変わんないですよ。

環境その他も書かれてないし、変換に興味なさそうなので
perl hoge.pl > test.html
して「まともなエディタで見れば文字化けしない」でいいのかも。
484nobodyさん:2008/05/13(火) 13:57:38 ID:???
>>464
Location:を表示する前にwaitをいれればおk
485nobodyさん:2008/05/17(土) 19:31:00 ID:???
$obj = new Class;
$obj = Class->new();

この二つの違いは何ですか?
486nobodyさん:2008/05/17(土) 20:03:56 ID:???
おんなじ。どっちのClassクラスのコンストラクタを呼んでるだけ。
Classってサブルーチンが定義されてるときに問題がおきることがあるので、
$obj = Class->new;
の形式のほうが推奨されるけど。
487nobodyさん:2008/05/17(土) 23:09:13 ID:???
>486
ありがとんです
488nobodyさん:2008/05/18(日) 11:25:25 ID:???
俺はコンストラクタを呼び出すときだけはnew Classってしてあとはぜんぶ$obj->sub()ってするかな。
489nobodyさん:2008/05/19(月) 06:36:14 ID:???
なんだか、急にCPANでエラーで全く動かなくなったので、いろいろ調べてみたら、
ERRNO.pmが、MSWin32-x86-multi-thread-5.00(Windows Updateでいつの間にか変わってた)を弾いてた。

とりあえず、ERRNO.pmを書き換える(!)ことで対処したんだけど、
他に同じトラブルあってる人いません?
490がんちゃん:2008/05/19(月) 10:02:27 ID:???
perlでImage::MagickのAnnotateを使って画像と文字を合成できたのですが
出来上がった画像を右クリックして保存しましたが
そのファイルが開けません。
何が原因でしょうか。宜しくお願いします。
491nobodyさん:2008/05/19(月) 11:27:27 ID:???
>>490
開けないとは具体的にどういうこと?
単に、変なファイル名(拡張子)で保存してしまって、ダブルクリックしても関連づけの問題で開けないってことではなくて?
492がんちゃん:2008/05/19(月) 12:15:34 ID:???
うっせーよ!それぐらい分かるっての!腐った回答してんじゃねぇよwww
493がんちゃん:2008/05/19(月) 12:29:05 ID:???
     *      *
  *     +  うそです
     n ∧_∧ n
 + (ヨ(* ´∀`)E)
      Y     Y    *
494がんちゃん:2008/05/19(月) 12:32:08 ID:???
なんだここの人たちはこれぐらいの質問も答えられないの?
回答者が初心者のスレだったのか・・・
495がんちゃん:2008/05/19(月) 12:35:01 ID:???
     *      *
  *     +  うそです
     n ∧_∧ n
 + (ヨ(* ´∀`)E)
      Y     Y    *
496nobodyさん:2008/05/19(月) 14:06:12 ID:???
print "Content-type: image/jpeg\n\n";
binmode STDOUT;
$image->Write('jpeg:-');

ソース晒せや。
497nobodyさん:2008/05/19(月) 14:11:40 ID:???
なにこの流れ・・・
498nobodyさん:2008/05/19(月) 15:48:41 ID:???
質問の仕方も知らないというか、質問の文章すら正しく書けない馬鹿が多すぎ
Perl云々の前に日本語学校行け
499nobodyさん:2008/05/19(月) 15:59:52 ID:???
\E
500nobodyさん:2008/05/19(月) 16:39:50 ID:???
はい、次
501nobodyさん:2008/05/19(月) 16:41:56 ID:???
>>498
お前の文章が一番変だわ
502nobodyさん:2008/05/19(月) 18:36:38 ID:82E4EJS9
すみません。ド素人です。
質問です。
Can't locate GD/Image.pm in @INC (@INC contains: C:/perl/site/lib C:/perl/lib .)
というソフトウェアエラーが出て、CGIを実行できません。
どうかどうか、教えてください。
503nobodyさん:2008/05/19(月) 18:38:59 ID:???
GD を入れてください

はい次
504nobodyさん:2008/05/19(月) 18:39:34 ID:82E4EJS9
GDは入れてるんですけど、image.pmってのがなにか、わかんないんです。。。
505nobodyさん:2008/05/19(月) 18:44:49 ID:???
GD-Image-Thumbnail でも居れておきゃえぇんとちゃうのん?
506nobodyさん:2008/05/19(月) 18:45:58 ID:82E4EJS9
505さん ありがとうございますぅやってみます。
507nobodyさん:2008/05/19(月) 18:47:44 ID:???
508nobodyさん:2008/05/19(月) 18:54:23 ID:82E4EJS9
507さん。。ありがとうです。
けど、このページの、なにをどうすればいいのか。
わかりません
どうしようもない素人なので。。
509nobodyさん:2008/05/19(月) 19:12:16 ID:???
*.pmってのはPerlモジュール
エラーの内容は「このモジュールがみつからないよパパ」
→インスコor場所確認
とりあえずモジュールが入ってるか確認する
→ぐぐる
入っていない場合、モジュールをインスコする
→ぐぐる
入っている場合、パスを確認する
→ぐぐる
510nobodyさん:2008/05/19(月) 19:26:15 ID:???
GDのバージョンを2.39に上げれば解決。
511nobodyさん:2008/05/19(月) 19:58:48 ID:???
「初心者」「素人」は分からないからフルサポートしてもらえる理由になりません。
512nobodyさん:2008/05/19(月) 20:03:39 ID:82E4EJS9
GD2.39の中のGD.pmとGDフォルダを /perl/libの中にドラック&ドロップしてるんです。
これは、どこかのサイトに書いてあったので。しました。
そしたら、エラーがでて。GD/Image.pmがどうのこうのとなってまして。
505さん507さん509さん510さんの言葉も、正直、理解しきれてない状況です。
まず、インスコというのが、コマンドプロンプトでするらしいとどこかに書いてて、
してみたんですけど。まず、「ppm」とすると、perlpackagemanagerが起動して、
その中に、GDがなくて。どやってインストールしていいのかも、わかんない感じです。
すみません長々と。どうかお助け願います。。
513nobodyさん:2008/05/19(月) 20:03:43 ID:???
ローカルで試そうとしてるやつが、
どうしようもない素人を名乗るなよ。
向上心ねぇのか
514nobodyさん:2008/05/19(月) 20:16:06 ID:???
>>512
http://www.bribes.org/perl/ppmdir.html
ここへいってら。

それができたら、こっちも回っておくように。
http://theoryx5.uwinnipeg.ca/ppms/
515nobodyさん:2008/05/19(月) 20:18:47 ID:82E4EJS9
514さんありがとうございます。
読んでます。
516nobodyさん:2008/05/19(月) 21:08:55 ID:82E4EJS9
やっぱりエラーになります(涙
517nobodyさん:2008/05/19(月) 21:35:03 ID:???
リポジトリを増やしたのだからインストールできるはずだが。

掲示板なんだから、レスに主語と述語をはっきり書いてくれ。
とりあえず、頭にエラーが出たのか?
518nobodyさん:2008/05/19(月) 22:17:16 ID:???
良く読んでないけど、
スタート→すべてのプログラム→ActivePerl→Perl Package Managerで
必要なものをクリック、クリック!した方が楽で簡単だよ。
519nobodyさん:2008/05/19(月) 23:01:51 ID:82E4EJS9
perl package managerの中に GDが見当たらないんです。
コマンドプロンプトで CPANから install GDってしても
できないんです。
GD/image.pmが@INCに無いっていうエラーが出るんです。517さん。
520nobodyさん:2008/05/19(月) 23:13:22 ID:???
>>519
>>514サイトをよく読んでppmにリポジトリを追加すると、GD 2.39がインストールできるようになる。
ちゃんとリポジトリを追加したか?
それでも出ないというのなら、ppmに問題があることになる。
521nobodyさん:2008/05/19(月) 23:23:58 ID:???
ttp://mikiho.jp/memo/?log=20070111_141552

serach のとろを

s GD

としてくださいな

これでも出来なければ諦めてください
サポートしきれないです
522nobodyさん:2008/05/20(火) 01:25:53 ID:???
http://pub.ne.jp/wakapon/?entry_id=82091
Perl 5.8ならなんか面倒そうなんだけどこれかな?
523nobodyさん:2008/05/20(火) 03:52:12 ID:U/T3y6km
ここ見て、Win用のGD-2.39来てるのかと思い、threory58に行くも2.35しかないじゃないか!?ぷんぷん。
ふと、PPM-Repositoriesを0.14に上げて見るとbribesなるレポがあるので、これを見に行くと、
おおー、結構新しいの来てるじゃないか〜と、調子にのってperl areaのmoduleもUpしまくる。
しかし、Compress-ZlibをUpすると、Bandleされてたversionを上書きしてしまい、
それ以降ppmがtar.gzファイルを展開できなくなってしまった。(今まで見たことないエラーでPPMが落ちる)

とゆうことで、今やっと再インストールと、(自分のよく使う)各種モジュールのインストール、最新版へのUpデートが終わった。
なんとか、Compress-Zlibも2.010に上げる事ができた。
ふう、疲れたぜ・・・・。
524nobodyさん:2008/05/20(火) 04:15:25 ID:???
そうなんだお疲れちゃん
525nobodyさん:2008/05/20(火) 14:16:09 ID:XrCi5l42
519です。
いろいろサポートいただいて、できました。
ほんとに感謝してます。ありがとうです。
526nobodyさん:2008/05/21(水) 00:33:37 ID:???
phpのexplodeみたいに、
正規表現を使わずに高速に動作するsplitの代わりはないでしょうか?
527nobodyさん:2008/05/21(水) 01:39:24 ID:???
substrでループさせる自前の関数でも作れば?
528nobodyさん:2008/05/21(水) 01:41:57 ID:???
それって速いのかな。。
indexとsubstrを併用してちょっと試してみるか。
529nobodyさん:2008/05/21(水) 11:18:20 ID:crauFAgn
モジュールが一切入っていないレンタルサーバで、xmlを読み込もうとしています。
ググってみると、どこもXMLとLWPというモジュールを読み込む事が前提になっているようなのですが、
何も無い状態でXML
530529:2008/05/21(水) 11:19:42 ID:???
すみません途中で送信してしまいました…orz

モジュールが何も無い状態でXMLを読み込むために
参考になるようなサイトがありましたら、ご教示下さい。

宜しくお願いします。
531nobodyさん:2008/05/21(水) 12:00:10 ID:???
ソケット使ってゴリゴリ書くしか無いんじゃないかな
532nobodyさん:2008/05/21(水) 12:06:34 ID:???
モジュールが一切入っていないレンタルサーバでソケットが使えるようにインストールされてる
とはとても思えないが・・
533nobodyさん:2008/05/21(水) 12:14:45 ID:???
xmlそのものについても調べてる状態なんですが、
どうも事実上無理っぽいということですかね…orz
お騒がせしました、ありがとうございました。
534nobodyさん:2008/05/21(水) 13:46:16 ID:???
php が動くなら php 普通にネットワーク経由でファイル開けるので php も考慮してみれば?
535nobodyさん:2008/05/21(水) 23:33:50 ID:???
>>529,530
XMLを読み込むだけなら、XML::TreePPでXMLが読める。
別サイト上にあるXMLを読むならLWP等が必要。
536nobodyさん:2008/05/22(木) 08:42:14 ID:???
質問です。Snアップローダー(http://sugachan.dip.jp/obsolete/snup/)の
ファイル個別HTMLを作成する部分で

$buff = "<html><head><title>$filename</title></head><body>";
$buff .= qq|Download <a href="./$filename">$filename</a>|;
$buff .= '</body></html>';
(ソースの760行目付近です)

特定の拡張子のみ別のHTMLコードを書き出したいのですが
if文で$filename等試してみましたが上手く行きませんでした

どなたか分かる方宜しくお願いします
537nobodyさん:2008/05/22(木) 10:13:46 ID:???
改造スレいけ
538nobodyさん:2008/05/22(木) 12:40:41 ID:???
$buff .= qq|Download <a href="./$filename">$filename</a>|;

こういう書き方もあるんだ。勉強になったw
539nobodyさん:2008/05/22(木) 13:18:50 ID:???
毎行クォート変えるくらいならヒアドキュメント使えよ
540nobodyさん:2008/05/22(木) 13:25:55 ID:???
ヒアドキュメントもコーディングの桁揃えと、HTMLの桁揃えでタブを使うと、すっきりする方法
がなかなか見つからない。
541nobodyさん:2008/05/22(木) 13:40:38 ID:???
>if文で$filename等試してみましたが上手く行きませんでした
どう試して、どういう結果になったのか書かないと。
基本だと思うが。
542nobodyさん:2008/05/22(木) 17:17:18 ID:???
>>540
普通に cookbook にある解ではダメなのか?
ttp://www.unix.com.ua/orelly/perl/cookbook/ch01_12.htm
543nobodyさん:2008/05/24(土) 13:22:00 ID:CztaXqIN
セッション変数の受け渡しについての質問です。

print <<EOT
<form action="http://localhost/cgi-bin/session.cgi" method="post">
<p>
<label for="nm">お名前:</label>
<input type="text" name="namae" id="nm"><br>
<label for="ma">メール:</label>
<input type="text" name="email" id="ma">
</p>
<p>
<input type="submit" value="送信">
<input type="reset" value="リセット">
</p>
</form>
EOT
;

これらのフォームデータをセッション変数としてsession.cgiに受け渡したい
のですが、どのようにすればよいでしょうか?
CGI::sessionモジュールを利用して、session.cgi側で
$hoge=$cgi->$session->param('namae');
などとすればセッション変数として受け取れる事は分かったのですが、
フォームからの受け渡し方が分かりません…。

よろしくお願いします。
544nobodyさん:2008/05/24(土) 13:38:27 ID:???
hiddenで投げれ
545nobodyさん:2008/05/24(土) 13:41:36 ID:???
>>543
どれがセッション変数なの?
546543:2008/05/24(土) 13:47:45 ID:CztaXqIN
>>544
hiddenフィールドを利用すればセッション変数として受け渡されるのでしょうか?

>>545
「お名前」や「メール」フォームに入力された文字列をセッション変数として
session.cgiで受け取りたいと考えています。
547nobodyさん:2008/05/24(土) 13:47:48 ID:???
CGI.pmでデータを受け取るところから勉強を始めるべき。
セッションはその後。
548nobodyさん:2008/05/24(土) 13:49:52 ID:???
・hidden
・GET
・cookie

わざわざCGI::session使うくらいなんだから、普通はcookie使うんじゃね?
549543:2008/05/24(土) 13:53:40 ID:CztaXqIN
>>547
すいません。>>543の書き込み微妙に間違っています。
$hoge=$cgi->$session->param('namae'); のところ

通常データの受け取りは
$hoge=$cgi->param('namae');
セッションでの受け取りは
$hoge=$session->param('namae');
の間違いです。
550nobodyさん:2008/05/24(土) 14:04:47 ID:???
>>549
受け渡しの情報が知りたいって言ってるのに、
受け取りのソース書いてるから、それを指摘されてるんだよ。

>基本的にはセッション系モジュールの役割は、特定のキー=セッションIDに紐付けて、
>データを保存したり、読み込んだりといったことです。
>セッションIDの受渡しはCGI側でする必要があります。

ヒント:http://digit.que.ne.jp/work/wiki.cgi?Perl%e3%83%a1%e3%83%a2%2fCGI%3a%3aApplication%3a%3aPlugin%3a%3aSession%e3%83%a2%e3%82%b8%e3%83%a5%e3%83%bc%e3%83%ab
551543:2008/05/24(土) 14:05:03 ID:CztaXqIN
cookieにセッションIDやもっておきたいデータ(今回の場合、お名前やメール)を記述しておき、
サーバ側から要求があった時点でクライアントはそのcookieのデータを受け渡す

といったイメージで良いのでしょうか。

うぅ、難しい。。。
552543:2008/05/24(土) 14:13:48 ID:CztaXqIN
>>550
>受け渡しの情報が知りたいって言ってるのに、
>受け取りのソース書いてるから、それを指摘されてるんだよ。

データを受け渡す側のソースが>>543で、受け取るソースがsession.cgiだと
認識してるのですが…。間違っているでしょうか。

もしかしたら私が勘違い?をしているのかも?

553nobodyさん:2008/05/24(土) 14:14:00 ID:???
>>551
正直、目的に対して技術が足りなすぎる。イヤミじゃなくてね。
トラブル起こす前に、オライリーのCGIプログラミング読破オススメ。
554nobodyさん:2008/05/24(土) 14:18:21 ID:???
>>552
>受け取るソースがsession.cgiだと認識してるのですが…。
少なくてもこのソース中でセッションIDはどこにも発行してないでしょ?
後は調べなさい。
555554:2008/05/24(土) 14:19:15 ID:???
ごめんミスった。

 × >受け取るソースがsession.cgiだと認識してるのですが…
 ○ >データを受け渡す側のソースが>>543
556543:2008/05/24(土) 14:19:38 ID:CztaXqIN
すいません。もう少し勉強しなおしてきます。
みなさん、有難うございましたー・・・
557543:2008/05/24(土) 14:23:19 ID:CztaXqIN
>>554
あ、ソースの一部分しか乗せてなかったためです!

use CGI::Session qw/-ip_match/;

my $session=CGI::Session->new(undef,undef,{Directory=>'./session'});
$session->expire('+1m'); #有効期限は1分間
$session->param('name','john'); #セッション経由で引き渡す項目と値

my $cgi=CGI->new;

print $cgi->header(-charset=>'UTF-8',
-cookie=>$cgi->cookie(-name=>'CGISESSID',
-value=>$session->id,
-expires => '+3M')),
#cookieにセッションidを保管
$cgi->start_html(-lang=>'ja',
-encoding=>'UTF-8',
-title=>'CGI.pm使用/cookie'),
$cgi->p('session id: '.$session->id.'<br/>',
'name: '.$session->param('name').'<br/>',


558543:2008/05/24(土) 14:24:17 ID:CztaXqIN
続き

print <<EOT
<form action="http://localhost/cgi-bin/session.cgi" method="post">
<p>
<label for="nm">お名前:</label>
<input type="text" name="namae" id="nm"><br>
<label for="ma">メール:</label>
<input type="text" name="email" id="ma">
</p>
<p>
<input type="submit" value="送信">
<input type="reset" value="リセット">
</p>
</form>
EOT
;
$cgi->end_html;
#end

すいません…!
559nobodyさん:2008/05/24(土) 14:27:18 ID:???
めんどくさいし、合ってる保証ないけど、適当にフォローしてみる

追記 use CGI;
追記 my $cgi = new CGI;

× my $session=CGI::Session->new(undef,undef,{Directory=>'./session'});
○ my $session=CGI::Session->new(undef, $cgi, {Directory=>'./session'});
560nobodyさん:2008/05/25(日) 02:16:54 ID:???
htmlのフォームデータをセッション変数に格納して利用するには

htmlのフォームデータをpost→受け取ったデータをセッション変数を格納するCGI
→それらのセッション変数にアクセス(利用する)CGI

の流れがいるのでは?




自信ないけど
561nobodyさん:2008/05/25(日) 19:58:56 ID:sAYmYKjS
perlのセッション管理はphpに比べるとかなりめんどい
もちろん細かく制御するには向いてるんだが始めとっつきにくいかもなー
562nobodyさん:2008/05/26(月) 13:29:09 ID:???
>>561
>>543の質問を分かりやすくPHPで説明すると、
$_REQUESTの内容を$_SESSIONで受け取るにはどうしたらいいんですか?
ということ。
563nobodyさん:2008/05/26(月) 19:00:45 ID:BXwqNwjP
すみません。質問です。
Global symbol "%in" requires explicit package name at C:/ApacheGroup/〜〜.cgi line 375, <DATA> line 855.
というソフトウェアエラーが出続けてるんですが。
どうすればいいでしょう。
どなたか教えてください〜。
564nobodyさん:2008/05/26(月) 19:09:34 ID:fmVA2Qe8
先生方! 質問よろしいでしょうか!

open(OUT,"+< log.txt");
eval{flock(OUT, 2);};
eval{truncate(OUT, 0);};
seek(OUT, 0, 0);
print OUT @log;
eval{flock(OUT, 8);};
close(OUT);

今はこのように通常のテキストでログの上書き保存をしているのですが、
私はgzipで圧縮して上書き保存をしたいのです!
しかしどれだけGoogle先生に訊いてもgzipでの保存方法を教えてもらえません! あの先生はケチです!
もう先生方だけが頼りなんです! 一体どうすればgzipでの保存が可能になるんでしょうか!
565nobodyさん:2008/05/26(月) 19:18:18 ID:???
566nobodyさん:2008/05/26(月) 19:32:47 ID:???
Archive perl でググればでてくるじゃないの
567nobodyさん:2008/05/26(月) 23:41:19 ID:???
>>563
英語が読めないなら駱駝本を買うべきだ。
568nobodyさん:2008/05/27(火) 11:06:43 ID:???
ラクダを漢字で書かれると困ります (><;)
569nobodyさん:2008/05/27(火) 19:27:42 ID:???
{
$global_foo = $foo;
$global_bar = $bar;
my $foo;
my $bar;
$foo = $_[0];
$bar = $_[1];
$foo = $global_foo if $foo eq undef;
$bar = $global_bar if $bar eq undef;
}
をコンパクトにまとめたいが、バグが混入しそうでいやん。
570nobodyさん:2008/05/27(火) 19:44:24 ID:???
{
my $global_foo = $foo;
my $global_bar = $bar;
$foo = shift || $global_foo;
$bar = shift || $global_bar;
}
571nobodyさん:2008/05/27(火) 19:55:45 ID:???
>>569-570
$foo eq undef もたいがいだが
shift || $global_foo だと $_[0] が '0' の時に挙動変わるな。
572nobodyさん:2008/05/27(火) 20:06:24 ID:???
{
my $global_foo = $foo;
my $global_bar = $bar;
$foo = defined( $_[0] ) ? $_[0] : $global_foo;
$bar = defined( $_[1] ) ? $_[1] : $global_bar;
}

こうか?
573nobodyさん:2008/05/27(火) 20:06:58 ID:???
あ、三項演算子逆だ。すまん。
574nobodyさん:2008/05/27(火) 20:33:00 ID:???
defined関数の存在が頭から抜けてたorz
$foo = $global_foo if $foo eq undef;
$bar = $global_foo if $bar eq undef;
ではなく
$foo = $global_foo unless defined $foo;
$bar = $global_foo unless defined $bar;
でお願いします。あと>>570-573サンクス、参考になります。
575nobodyさん:2008/05/27(火) 20:38:51 ID:???
つーか、>>569だとまともに動かんよ。

初期化するためにmy使っちゃってるように見えるけど、
この場合、ブロックスコープになるから、
ブロック内の$foo, $barと、グローバル変数$foo, $barは別物になる。
576nobodyさん:2008/05/27(火) 20:54:18 ID:???
myの仕様間違えて覚えてたか…
$global_foo = $foo;
$global_bar = $bar;
{
my $foo;
my $bar;
$foo = $_[0];
$bar = $_[1];
$foo = $global_foo unless defined $foo;
$bar = $global_foo unless defined $bar;
}
欲しい動作はこうかな…
577nobodyさん:2008/05/27(火) 20:56:48 ID:???
いやいやいやいやw
「perl スコープ 変数」でググっみ。
578nobodyさん:2008/05/27(火) 21:53:15 ID:???
全然わかってないわかってないwww
579nobodyさん:2008/05/27(火) 22:34:53 ID:???
my $foo = 1;

sub func {
my $temp = $_[0];
return defined( $_[1] ) ? $_[1] : $temp;
}


ex :
$foo = func( $foo, 10 ); # $foo = 10
$foo = func( $foo ); $foo = 1
580nobodyさん:2008/05/28(水) 00:31:36 ID:???
早くdefined-or演算子実装されないかな…
581nobodyさん:2008/05/28(水) 01:24:48 ID:???
今日が今月の何週目か求めるにはどうしたらよいでしょうか
582576:2008/05/28(水) 01:29:54 ID:???
$global_foo = $foo = 1;
$global_bar = $bar = 2;
@_ = (3,4); #@_に値あり
{
my $foo;
my $bar;
$foo = $_[0];
$bar = $_[1];
$foo = $global_foo unless defined $foo;
$bar = $global_bar unless defined $bar;
print "point 1: foo=$foo bar=$bar\n";
}
print "point 2: foo=$foo bar=$bar\n";

出力結果
point 1: foo=3 bar=4
point 2: foo=1 bar=2
583576:2008/05/28(水) 01:32:06 ID:???
$global_foo = $foo = 1;
$global_bar = $bar = 2;
@_ = (3,4); #@_に値あり
{
my $foo;
my $bar;
$foo = $_[0];
$bar = $_[1];
$foo = $global_foo unless defined $foo;
$bar = $global_bar unless defined $bar;
print "point 1: foo=$foo bar=$bar\n";
}
print "point 2: foo=$foo bar=$bar\n";
出力結果
point 1: foo=1 bar=2
point 2: foo=1 bar=2
━━━━━━━━━━━━━━━━━━━━━━━
うん、欲しかった動作そのままだけど。
>>577-578が理解できず悩み中
584nobodyさん:2008/05/28(水) 01:34:02 ID:???
ぎゃー、>>583張り間違えた

【誤】@_ = (3,4); #@_に値あり

【正】@_ = (); #@_に値無し

orz 120秒規制が若干きつい…
585nobodyさん:2008/05/28(水) 01:35:51 ID:???
Date::Calc
586nobodyさん:2008/05/28(水) 01:46:51 ID:???
>>576
目的が分からん。そもそも何がしたいの?
説明する気あるのか?

my $foo = 1;
my $bar = 2;

print $foo = func( $foo );
print $bar = func( $bar );
print $foo = func( $foo, 3 );
print $bar = func( $bar, 4 );
exit;

sub func {
return defined( $_[1] ) ? $_[1] : $_[0];
}
587nobodyさん:2008/05/28(水) 01:47:41 ID:???
>>585
感動した ありがとう
588576:2008/05/28(水) 01:58:37 ID:???
>>586
サブルーチン冒頭にて、引数リスト > デフォルト値(グローバル変数の値とか)
の優先順でmy変数値を設定したいことはよくあるから、
perlなら… perlならきっとすごくスマートに書く方法があるに違いない…

という夢を見たけど、幻だったみたいですね…
変数ひとつずつシコシコとunless definedを当てることにします。
589nobodyさん:2008/05/28(水) 02:00:25 ID:???
いや、日本語でおk
お前の望むようなことは確実にできると思うんだけど、
なにぶん言いたいことがよく分からんw
590nobodyさん:2008/05/28(水) 02:16:48 ID:???
my $global_foo = my $foo = 1;
my $global_bar = my $bar = 2;

# @_ =( );
@_ =( 3, 4 );
{
my $foo = defined( $_[0] ) ? $_[0] : $global_foo;
my $bar = defined( $_[1] ) ? $_[1] : $global_bar;
print "point 1: foo=$foo bar=$bar\n";
}
print "point 2: foo=$foo bar=$bar\n";

結局、最初に提案されてる回答をアレンジすれば、
>>582-584をシンプルかつ可読性も保ったまま実現できるんだが。
これじゃいかんの?
591nobodyさん:2008/05/28(水) 02:25:18 ID:???
>>590
そのへんが限界みたいですね…ありがとうございます。
私の欲求そのものが十分特殊だったのかな…

いま考えてる最善の形はサブルーチンを使うことです。
サブルーチンコールは負担かかりそうだからやりたくないんだけど…

sub merge_argument_and_default{
my ($argument, @default) = @_;
my @value;
while(1){
my ($a, $v) = (shift @$argument, shift @default);
my $c = ((defined $a) ? $a : $v);
last unless defined $c;
push @value, $c;
}
return @value;
}

sub foo{
my(@bar) = &merge_argument_and_default(\@_, @default_bar);
}

みなさんありがとうございました。
592nobodyさん:2008/05/28(水) 02:30:59 ID:???
殺してぇ……。日記じゃねぇんだよ。
593nobodyさん:2008/05/28(水) 06:17:52 ID:???
594nobodyさん:2008/05/28(水) 06:40:31 ID:???
>>576みたいに、自分のプライド保つために
当初の目的をすり替えて、自分は違うもの作ってました的な発言するやつは質問にくるなよ。

当初は「>>569をコンパクトにしたい」って言ってただけなのに、
どんな解が提示されても、
どんどん違う方向に勝手に転換して善意のレスすら流し読み。
こういう奴は、治らないから本当に放置すべきだと思うよ。
595nobodyさん:2008/05/28(水) 07:18:42 ID:???
>>594
それは違うんだけど、あなたへの説得は無理かな。
ひどく機嫌を損ねてしまったのは悪いと思ってるが。

いただいたありがたいアドバイスから、例えば今回は、
「サブルーチン化でもしなければ相当コンパクトに収めるのは難しいらしい」
「そのサブルーチンはこういう形で書くのがよいのだろうか」
などと、自分の知識や興味対象は移り変わっていくことが多いです。

ただ、このスレッドにはしばらく書き込みを自粛します。さよなら。
596nobodyさん:2008/05/28(水) 10:11:34 ID:???
典型的な"隠す人"だったか。
597590:2008/05/28(水) 10:39:10 ID:???
うわ、ちょっと離れたスキにすげぇ慇懃無礼なこと書いてやがる。
目的も明確にせず、そのへんが限界てw
そもそも次の疑問に移ったなら、その過程を説明するのが回答者への最低限の礼儀だろ。
社会出て苦労するよ。

ちなみに>>591は、俺ならこう書く。

sub merge_argument_and_default {
 my ($argument, @default) = @_;
 my %count;
 $count{$_} = $default[$_] for( 0..$#default );
 $count{$_} = ${ $argument }[$_] for( 0..$#{ $argument } );
 return map { $count{$_} } sort keys %count;
}
598nobodyさん:2008/05/28(水) 11:40:59 ID:???
>595みたいなやつっているよね
言葉遣いが丁寧なだけで、いっぱしの大人だと思ってる人。
599nobodyさん:2008/05/28(水) 12:04:01 ID:???
sub merge_argument_and_default { map{ defined $_[0][$_] ? $_[0][$_] : $_[$_ + 1] ;} 0 .. $#{$_[0]} ; }

>>598
ガキなの見え見えなんだよねw
ttp://www2.atpages.jp/mirror/2ch/perl/prog/read.php/1157874614/
の595を思い出した。
600nobodyさん:2008/05/28(水) 13:55:09 ID:???
>>593
そいえば5.10でてるんだっけ(汗
RHELとCentOSしか使ってないからすっかり忘れてました。
601nobodyさん:2008/05/28(水) 15:44:58 ID:???
5.10って絶対分かりづらいよw
5.8より昔のリリースだとしか思えない。
602nobodyさん:2008/05/28(水) 15:51:58 ID:???
Ver 5.008008
Ver 5.010000
こう書けばよいのか?
603nobodyさん:2008/05/28(水) 16:09:29 ID:???
5.1の方が新しいんですか?
知らなかったorz
604nobodyさん:2008/05/28(水) 16:21:25 ID:???
5.10.0 > 5.9.5 > 5.8.8 >> 5.1.0
苦肉の策なんだろうな……。
605nobodyさん:2008/05/28(水) 17:55:49 ID:???
perl6ってどうなったん?
606nobodyさん:2008/05/28(水) 19:03:22 ID:???
>>605
parrotの新しいのが最近でた気が・・・
607nobodyさん:2008/05/28(水) 20:28:19 ID:???
あるIPアドレスが変数$ipに格納してあります。
この$ipが存在するか、あるテキストファイル(ip.txt)を読んで
チェックしています。以下は例です。

$ipは"192.168.0.1"
ip.txtに192.168.0.1が記述してあります。

この場合マッチするようプログラムしてあります。

ip.txtに

192.168.0.0/24
または
192.168.0.0/255.255.255.0
と記述してあるものと
マッチさせたいのですが、
そういうサブルーチンは
ありますでしょうか?


簡単にいうと、あるIPアドレスが
サブネットマスクで指定してある
10進表記またはサイダー表記に
マッチするか判定したいのです。
ip.txtは10進表記でもサイダー表記の
どっちでも構いません。
608nobodyさん:2008/05/28(水) 20:34:04 ID:???
ttp://pc11.2ch.net/test/read.cgi/tech/1086143976/491-590
の543-544及び「IP pack unpack perl」でググれ。
609607:2008/05/28(水) 20:59:40 ID:???
>>608
あり♪
明日、見てみるよん
610597:2008/05/28(水) 21:17:34 ID:???
>>599
終わった話題なんだけど、ちょっと気になった。
めんどくさかったら、スルーして。

提示してくれてるルーチンだと、

 引数1 @array1 = ();
 引数2 @array2 = ( 1,2 );

のとき、返り値が空になっちゃうよね。
配列1(引数1) > 配列2(引数2) という優先順位で、
配列3(返り値)を混ぜ合わせるというのが目的の処理だと思うんだけど、
配列1と配列2で要素数の大きい配列を、要素数だけループさせる処理にする場合、
キレイにまとめる方法ってないかなぁ?

 if( ( $#array1 <=> $#array2 ) == -1 ) {
  EXPR for( 0..$#array2 );
 } else {
  EXPR for( 0..$#array1 );
 }

みたいな、冗長な方法しか俺には思い浮かばなかった。

だから、「配列の重複値をハッシュを利用してマージ」の応用みたいなことを>>597でやってみたわけだ。
なんか美しい方法あればいいんだけどなぁ。
611 ◆TWARamEjuA :2008/05/28(水) 21:20:10 ID:???
(´-`).。oO(Net::CIDRでよさそうな。。。)
612597:2008/05/28(水) 21:26:18 ID:???
my @temp = ( $#array1 <=> $#array2 ) == -1 ) ? ( 0..$#array2 ) ; 0..$#array1;
こんな前処理してから、>>599のmap対象配列に、( 0..\$temp ) って感じかなぁ?

エレガントさには欠けるけど、これが可読性保つギリギリかな?
613597:2008/05/28(水) 21:28:46 ID:???
動作確認してないからtypoしまくり。まぁ分かるよね?(苦笑
614607:2008/05/28(水) 21:31:18 ID:???
>>611
私へのレスですね。
明日調べてみます
615599:2008/05/28(水) 22:23:24 ID:???
>>610
ああ、
@array1 = ( undef, undef ) ;
は考えてたけども、それは想定してなかったw
>>612の解で良いんじゃね? 助長を厭わないならば、
map{ 略 } 0 .. $#{$_[0]} , 0 .. $#_ - 1 ;
っつー荒技もw
自分のスクリプトじゃ絶対やんないけどね。
616599:2008/05/28(水) 22:27:21 ID:???
>>615
s/助長/冗長/
617nobodyさん:2008/05/29(木) 03:05:45 ID:???
mapがいまいち理解し切れなくて使ってないんだが覚えとくべき?
覚えると便利そうだけど。
618nobodyさん:2008/05/29(木) 03:45:40 ID:???
やってることは、forやforeachと変わらん。
違うっていえば、{}の中を、引数リストのそれぞれの要素で実行した結果をリストとして返すってとこか。
かなり便利な局面もある。覚えとくべきだとは思う。

@res = map{ $_ + 10 } (1,2,3,4,5) ;
print join("\n",@res);
---結果---
11
12
13
14
15
619 ◆TWARamEjuA :2008/05/29(木) 07:02:31 ID:???
my $Now_Date = sprintf qq|%04d/%02d/%02d %02d:%02d|, map {
$_->[0] += 1900;
$_->[1]++;
@$_;
}[(localtime)[5,4,3,2,1]];

2008/05/28 07:02
って出るかと思う。
620nobodyさん:2008/05/29(木) 08:23:18 ID:???
>>617
シュワルツ変換という定番sort手法には必須だよ。
ぐぐって、foreach 文で書いてみたらありがたみが分ると思う。

>>619
お前さんの例は頻繁にとんでもなく斜め上を行くなあw
なんで一要素しかないと分りきってる無名配列を作って map の例にする?
do ならいざしらず
perl -le 'my $Now_Date = sprintf qq|%04d/%02d/%02d %02d:%02d|, do{
@_ = (localtime )[5,4,3,2,1] ;
$_[0] += 1900 ;
$_[1] ++ ;
@_ } ;
print $Now_Date ;'
それ以前に普通は↑こんな面倒な事しないだろ?
perl -MPOSIX=strftime -le '$str =strftime "%Y/%m/%d %H:%M", localtime; print $str, "\n"; '

621607:2008/05/29(木) 17:51:57 ID:???
Net::CIDR::cidrlookupでうまくいきそうなのですが、
IPアドレスのチェックを行いたいと思ってます。
ググると、以下の様な正規表現がありますが、
\d(バックスペース)の意味が分かりません。
どういう意味なんでしょうか?

\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
622nobodyさん:2008/05/29(木) 17:53:57 ID:???
0-9
623607:2008/05/29(木) 17:54:42 ID:???
すみません。
\dは数字でした。
申し訳ない
624607:2008/05/29(木) 18:10:05 ID:???
またまたお願いします。

正規表現で/をマッチさせたいのですが、
以下であってますでしょうか?

$hoge =~ /\//
625607:2008/05/29(木) 18:11:58 ID:???
すんません

\/で、いけるみたいです。
お騒がせしました。
626nobodyさん:2008/05/29(木) 18:15:31 ID:???
$hoge =~ m(/);

すこしは綺麗?
627nobodyさん:2008/05/29(木) 18:19:11 ID:???
>>617だけどレスありがとう。
シュワルツ変換とかまだいまいち理解できないけど良さそうだね。
sortは結構使うから思い処理の部分で使うのはいいかも。
でも問題は後で読み直して何してるか理解できなくなりそうな所だな。
628 ◆TWARamEjuA :2008/05/29(木) 20:45:58 ID:???
>>620
つっこみおおきに♪
mapを覚えちゃってからどんどん斜め上に逝っちゃいました。

ひとまず車輪の再発明は大好き♪
629nobodyさん:2008/05/30(金) 02:09:30 ID:???
曲芸はほどほどに
630nobodyさん:2008/05/30(金) 08:17:40 ID:???
出来た物が車輪じゃない上に使えないのならただの無駄
631nobodyさん:2008/05/30(金) 10:14:07 ID:???
車輪を作ろうとしたら鎖鎌が出来ちゃった感じだな
632nobodyさん:2008/05/30(金) 10:19:32 ID:???
まーmapは便利だってことだ
633nobodyさん:2008/05/30(金) 11:57:18 ID:???
XML::DOMを使ってXHTMLに広告を挿入するCGIを書いたのですが、use encoding "utf8";
を書くとローカルで文字化けしてしまいます。これをコメントアウトすると
XREA.COMのサーバ上でScript Errorが発生してしまいます(しかもエラーログが見られない)。

ローカルでもXREA.COM上でも動くようにしたいのですがどうすればいいでしょうか。
コードはこんな感じです。

#!/usr/bin/perl
use strict;
use XML::DOM;
use encoding "utf8";

my $xhtml_file = $ENV{'PATH_TRANSLATED'};
my $parser = new XML::DOM::Parser;
my $doc;
eval { $doc = $parser->parsefile($xhtml_file) };
if($@) {
print "Content-Type: text/plain;charset=utf-8\n\n";
print "parsing error occured: $@";
exit;
}

# 広告挿入処理

print "Content-type: application/xhtml+xml;charset=utf-8\n\n";
print $doc->toString;
$doc->dispose;

ローカルの環境はUbuntu 8.04 + Perl 5.8.8 + Apache 2.2.8、
XREA.COMはよくわかりません。
634nobodyさん:2008/05/30(金) 12:22:33 ID:???
>>632
だれも「mapが不便」なんて言ってないがな
明らかにバッドノウハウなコードを曝してる奴をくさしてるだけで
635nobodyさん:2008/05/30(金) 12:23:13 ID:???
すみません。自己解決しました。use encoding "utf8";をコメントアウトして
utf8::is_utf8($doc->toString) ? print encode('utf-8', $doc->toString) : print $doc->toString;
とすればいいみたいです。utf8フラグというのが関係しているみたいなので、
調べてみます。おさわがせしました。
636nobodyさん:2008/05/30(金) 12:40:26 ID:???
>>635
これはマジメに調べまくった方がいい。
慣れるまでPerl5.8以降でハマる最大の原因。
637nobodyさん:2008/05/30(金) 12:50:11 ID:???
BOM付けてたりして・・・
638nobodyさん:2008/06/01(日) 07:19:24 ID:???
BOMBなら付いてますw
639nobodyさん:2008/06/02(月) 12:34:35 ID:???
Wed, 12 Mar 2008 21:20:11 GMT
Last-Modified↑これをtimeの値に変換する方法を教えてください。
3600秒以内とかの判定に使いたいので。
640nobodyさん:2008/06/02(月) 12:49:16 ID:???
>>639
timelocal
641nobodyさん:2008/06/02(月) 12:57:39 ID:???
>>640
ありがとうございました!
642nobodyさん:2008/06/02(月) 13:51:21 ID:???
こんな感じで出来たのですが凄く格好悪いです。
$mon = 1 if $mon eq 'Jan';とか。
スマートな例があったら参考の為に見せてください。

sub last_modified {
my $time = shift;
my($day, $mon, $year, $hour, $min, $sec);
if ($time =~ /\w+, (\d+) (\w+) (\d+) (\d+):(\d+):(\d+) GMT/) {
($day, $mon, $year, $hour, $min, $sec) = ($1, $2, $3, $4, $5, $6);
$mon = 1 if $mon eq 'Jan';
$mon = 2 if $mon eq 'Feb';
$mon = 3 if $mon eq 'Mar';
$mon = 4 if $mon eq 'Apr';
$mon = 5 if $mon eq 'May';
$mon = 6 if $mon eq 'Jun';
$mon = 7 if $mon eq 'Jul';
$mon = 8 if $mon eq 'Aug';
$mon = 9 if $mon eq 'Sep';
$mon = 10 if $mon eq 'Oct';
$mon = 11 if $mon eq 'Nov';
$mon = 12 if $mon eq 'Dec';
} else {
die "Error: $time\n";
}
$time = timelocal($sec,$min,$hour,$day,$mon-1,$year);
return $time;
}
643nobodyさん:2008/06/02(月) 14:47:28 ID:???
>>642
%mons = (
Jan => 1, Feb => 2, Mar => 3, Apr = 4, # ……以下省略
);
$mon = $mons{$mon};

とかどうよ?
644nobodyさん:2008/06/02(月) 15:22:18 ID:???
>>643
ありがとうございます。
連想配列は普段全く使わないので、この機会に試してみます!
645nobodyさん:2008/06/02(月) 15:44:50 ID:???
>>643は、どうせ後で1引くのに、どうしてわざわざ1足すのさ?w
646nobodyさん:2008/06/02(月) 16:15:30 ID:???
>>645
ほんとだ><
お前頭いいな
すみません><
647nobodyさん:2008/06/02(月) 17:46:33 ID:VCfcjQkN
CPANを使わずにモジュールを使いたいのですが、なかなかうまくいきません。
HTML::Template を使いたいのですが、

ローカルにインストールしている、
C:\Perl\cpan\build\HTML-Template-2.9\Template.pm
というファイルを、以下のcgiと同ディレクトリにコピーしました。

#!/usr/local/bin/perl
use strict;
use lib qw(.);
use HTML::Template;
print "Content-type:text/html\n\n", "test";

ですが、うまくいかないようです。
use lib qw(.); の部分を、
unshift @INC, '.';
などとしても不可能でした。
ググっても上記の方法ぐらいしか出てこないんですが、何がいけないか教えていただけますでしょうか。
Perl のバージョンは 5.00503 です。
648nobodyさん:2008/06/02(月) 17:51:49 ID:???
Template.pmをHTMLというディレクトリを作ってそこにいれる
649nobodyさん:2008/06/02(月) 18:08:23 ID:VCfcjQkN
>>648
ありがとうございます。
助言どおりHTML ディレクトリにTemplate.pmを入れて、エラーが出たので、
Digest::MD5がどうだとかエラーが出ました。
同じ要領で、Digest ディレクトリを作り、MD5.pmを入れると、
次はXSLoader.pmが必要らしく、それもcgiと同ディレクトリに入れました。
次はDynaLoader.pmがどうとかエラーが出たので、それも同じディレクトリに入れたのですが、
今度はエラーが消えませんでした。。
最終的にCGI::Carpがはいたエラーは以下です。

[Mon Jun 2 18:01:45 2008] Template.pm:
[Mon Jun 2 18:01:45 2008] Template.pm:
[Mon Jun 2 18:01:45 2008] MD5.pm:
[Mon Jun 2 18:01:45 2008] MD5.pm:
[Mon Jun 2 18:01:45 2008] DynaLoader.pm: Can't locate loadable object for module Digest::MD5 in @INC
(@INC contains: /usr/lib/perl5/5.00503/i386-linux /usr/lib/perl5/5.00503 /usr/lib/perl5/site_perl/5.005/i386-linux /usr/lib/perl5/site_perl/5.005 .) at HTML/Template.pm line 915
[Mon Jun 2 18:01:45 2008] Template.pm:
[Mon Jun 2 18:01:45 2008] Template.pm: BEGIN failed--compilation aborted at HTML/Template.pm line 915. BEGIN failed--compilation aborted at test.cgi line 6.
650nobodyさん:2008/06/02(月) 18:17:18 ID:???
CPAN にモジュールの関連性とか書いてなかったっけ?
651nobodyさん:2008/06/02(月) 18:18:22 ID:???
関連性とかじゃなくて依存のこと
652nobodyさん:2008/06/02(月) 18:25:00 ID:VCfcjQkN
http://q.hatena.ne.jp/mobile/1195733487
↑必要としているモジュールは違うものの、
この人と同じ状況なのかな、と思うんですがどう思いますか?

同じ状況だとすると、不可能ですよね
FTPであげることしかできませんので。。。
653nobodyさん:2008/06/02(月) 18:41:40 ID:???
呼び出されてるDLLがWin用のコンパイル済みDynaLoader.pmを、Linuxにそのままコピーしたんでしょ? たぶん。
Linuxでコンパイルし直さないとムリ。よってムリ。
654nobodyさん:2008/06/02(月) 18:45:29 ID:VCfcjQkN
あぁ・・・やはり無理ですか。

5.00503で使えるHTML::Templateの代わりのようなものがほしいんですが、
どこを探せばいいでしょうか。
何度も申し訳ありません。
655nobodyさん:2008/06/02(月) 18:52:18 ID:VCfcjQkN
HTML::Templateの昔のバージョンとかなら5.00503でも動きますかね?
656nobodyさん:2008/06/02(月) 18:56:19 ID:???
その知識だと、HTML::Templateなんて必要ないじゃん!的な使い方しかしてしないと予想されるので、
自前でテンプレート化した方が早い。

スキン対応と銘打ってる配布CGIのソース読んだ方が早い気がする。
657nobodyさん:2008/06/02(月) 18:59:25 ID:???
HTML をテンプレート使って出力するようにすると病み付きになる
658nobodyさん:2008/06/02(月) 19:03:56 ID:???
5.005のこと詳しくしらないけど、DynaLorderとかって、標準で入ってないの?
ってか、>>649の内容を見るに、DynaLorderでわなくて、Digest::MD5(.so)が無いんでないの?(これも標準でない?)

まあなければ、Digest::MD5はXSモジュール含んでるから、
そのサーバー上でコンパイルし直さないと実行できないのは、>>653と同じ意見だけど。
659nobodyさん:2008/06/02(月) 19:07:00 ID:VCfcjQkN
PerlってHTMLと親和性ないですよね〜。
テンプレート使えないとなると、めんどくさくなるけど、まぁがんばります。
ありがとうございました。
660nobodyさん:2008/06/02(月) 19:49:04 ID:???
自分の未熟さを言語のせいにするなよw
HTMLと最も親和性のある言語として、Perl/CGIが一世風靡しただろ。
661nobodyさん:2008/06/02(月) 19:51:49 ID:???
>>657
kwsk
662nobodyさん:2008/06/02(月) 19:59:46 ID:???
>>661
ちょっとかじった程度の人でもデザイナーとプログラマを切り分けられる利点がある
663nobodyさん:2008/06/03(火) 00:57:17 ID:etSjPPZK
PostやGetで送られてきたURIエンコードをデコードしてハッシュに確保するような
プログラムを作ったのですが
HTMLのformでenctypeをmultipart/form-dataにすると
送られてくるデータの形式が変わってしまって
うまくハッシュに確保することができなくなっちゃいました。

送られてきたデータが
multipart/form-dataなのか
application/x-www-form-urlencodedなのか
調べる方法ってありますか?

ついでに、multipart/form-dataで送られてきたデータの扱い方を
まとめてあるサイトとかありましたら教えてほしいです。
664nobodyさん:2008/06/03(火) 01:01:53 ID:???
multipart/form-data って文字があるのか application/x-www-form-urlencoded って文字があるのかで簡単に判別着く
multipart/form-data の処理は CGI.pm 使ってね♪
665nobodyさん:2008/06/03(火) 01:12:56 ID:???
666nobodyさん:2008/06/03(火) 01:24:31 ID:etSjPPZK
>>665
ありがとう!
667nobodyさん:2008/06/03(火) 01:58:53 ID:???
>>659
テンプレートエンジン、自分で作るという手もある。
そんなに難しくないよ。
Compositeパターンでも使えば。
668nobodyさん:2008/06/03(火) 09:41:38 ID:???
>>659
HTML をふつうに書く
HTML なかに <%BODY%> とか、挿入場所を示す識別子をいくつか用意して書き込む
プログラムからテンプレート HTML を読み込む
正規表現で置換

たったこれだけです。
669nobodyさん:2008/06/03(火) 11:07:04 ID:???
Template::Toolkitならともかく
HTML::Templateは単純な処理だしね
さくっと使いたい時には便利、無けりゃ無いでどうにでもなる
670nobodyさん:2008/06/03(火) 12:56:41 ID:K4KbdDUT
Perlでindex.cgiを作って
そのCGIですべてを管理するような仕組みを作った場合
やっぱindex.cgiにアクセスが集中してよくなかったりするんですか?
671nobodyさん:2008/06/03(火) 13:31:41 ID:???
index.cgi で処理させる内容を挙げてくれないとまったくわからない

自分は普通のエディタ (関数へのジャンプとか無くて色分けだけ) なので
まったく違う処理はファイル分けてる
672nobodyさん:2008/06/03(火) 17:01:51 ID:???
多分聞きたい事って、hoge1.cgiとhoge2.cgi…hoge100.cgiとかあったら
それぞれ頭で同じ事やってるから、all.cgi(index.cgi?)に全て
まとめられないか?って事じゃないのかな?
 my $cgi = CGI->new();
 my $config = init();
 if( $cgi->param('mode')eq'hoge1' ) {
  require 'hoge1.pl';
  hoge1::main($config);
 } elsif( $cgi->param('mode')eq'hoge2' ) {
  require 'hoge2.pl';
  hoge2::main($config);
…って、感じで。漏れも昔、初心者だった時に同じ事を思った。

答えは、当然all.cgi(index.cgi?)の呼び出しのオーバーヘッドは
全CGIの呼び出し回数倍増えるよ。

そういう事じゃなくて??
673nobodyさん:2008/06/03(火) 17:44:51 ID:???
>>670
俺それやってる
wikiみたいに書けるテキストファイルを自動で携帯/PCに最適化してValid XHTML出力する、みたいな。
674nobodyさん:2008/06/03(火) 17:56:29 ID:???
bloxsomだっけ?
675nobodyさん:2008/06/03(火) 19:41:27 ID:???
perl関連のプロジェクトは企画倒れが本当に多いね。
企画倒れというより、制作者が途中で飽きて、ブームになっても、そのまま放置……みたいな。
かのCPANだって、一部のモジュール以外は、姥捨山みたいになってる。
古いモジュールに、パッチ送ってもメール不達とか多すぎるんだよ!
676nobodyさん:2008/06/03(火) 20:52:43 ID:???
tp://www.drk7.jp/weather/
ここの 東京の xml から加工を行っています。
最終的には明日の天気を出力したいのですが、以下のコードを書いたところ
気温や降水確率が出力されなくて悩んでいます。

================================================
use XML::TreePP;
use strict;

my $tpp = XML::TreePP->new();
my $tree = $tpp->parsefile( '13.xml' );

print $tree->{weatherforecast}->{pref}->{area}->[1]->{info}->[1]->{weather} , "\n";
print $tree->{weatherforecast}->{pref}->{area}->[1]->{info}->[1]->{temperature}->{range}->[1];
================================================

{range}->[1] で %hash と言われてしまうのはどうしてでしょうか。
その後に [1]->{-centigrade} をするとこの場合は min が出てくるのは判っています。
677nobodyさん:2008/06/03(火) 21:13:48 ID:???
[1]->'#text'

ダンプしろよ
678nobodyさん:2008/06/03(火) 21:21:10 ID:???
print $tree->{weatherforecast}{pref}{area}[1]{info}[1]{temperature}{range}[1]{#text}
manual嫁。
あと、XMLの中にareaやinfoやrangeの要素が1つしか無い場合に配列要素に
ならないのがTreePPの仕様なので、例えばinfoが1要素しか無い場合は
print $tree->{weatherforecast}{pref}{area}[1]{info}{temperature}{range}[1]{#text}
とアクセスしなくてはいけない。オプションで回避できるけど。
679670:2008/06/03(火) 22:25:48 ID:etSjPPZK
言葉が足りんでした。スミマセン。

>>673
ちょっと俺の勉強不足で言ってることがよくわからないけれど

例えばindex.cgi?page=homeだとhome.htmlをcgiプログラムが引っ張ってきて表示する
みたいな仕組みを作った場合、
どのユーザーがどのページを見てもindex.cgiに必ずアクセスするわけじゃない?
てことはページが1000ページとかできたとして
いろんな人がいろんなページを見出したらindex.cgiのアクセスが集中して
なんかまずいことになったりしないのかなって思ったの。

教えてLarry!!
680nobodyさん:2008/06/03(火) 22:40:04 ID:???
つか、ほとんどのWEBアプリケーションは、特定ファイルに負荷集中するがな。
681670:2008/06/04(水) 00:28:11 ID:KcodebuX
>>680
あ、じゃあ余計な心配しなくて大丈夫かぁ
682nobodyさん:2008/06/04(水) 01:09:20 ID:???
つ mod_perl
683nobodyさん:2008/06/04(水) 05:38:01 ID:???

A:opendir でファイル一覧を取得する

B:予めファイル一覧をそれ用のメモファイルに書き出しておいてそれを読みこんで取得

AとBではどちらが負荷が少ないですか?

684nobodyさん:2008/06/04(水) 06:05:53 ID:???
自分で調べられる手間を人に仮託するな。
685nobodyさん:2008/06/04(水) 08:14:25 ID:???
>>670
>>672に答えが書いてあるのだが、何故それを無視する?
686nobodyさん:2008/06/04(水) 10:13:14 ID:???
どなたか教えてください。

掲示板のタイトル一覧取得を現在作っています。
それでタイトルがもし長かった場合、最初の9byteだけを表示するようにしたいのですが・・・

if (length($title) > 9) { $get = substr($title[3],0,9); }


以上のようにしてしまうと、9byte目に全角文字が来た場合文字化けしてしまいます。
例えば、

$title = "testtesttest";  この場合は $get = testtestt

$title = "テストテスト"; これだと $get = テストテ爛


こういった文字化けを回避するような、いい方法は無いでしょうか?
687nobodyさん:2008/06/04(水) 10:15:53 ID:???
jfold
688686:2008/06/04(水) 10:27:56 ID:???
2分での光速のお返事ありがとうございます。

調べてみたところ、Jcode.pmのモジュールみたいですね。
今までずっとjcode.plばっかだったので知らなかった…

さっそく試してみます。
どうもありがとうございました。
689670:2008/06/04(水) 13:24:15 ID:44uKn/lk
>>685
スミマセン基地外でした。
690nobodyさん:2008/06/05(木) 00:08:18 ID:S7Nj2GEO
ところでさ…何故elsifなんだと思う?
どうせならifにあわせてelとefとか2文字にしてほしかったん
691nobodyさん:2008/06/05(木) 00:28:25 ID:???
ごめんなさいごめんなさい
692nobodyさん:2008/06/05(木) 22:21:15 ID:???
Cか何かでやってる人いたな。
693nobodyさん:2008/06/05(木) 23:21:13 ID:???
最近5.10を使うようにしてんだけどgiven-whenが馴染めない
switch-caseでいいと思うのになんでgiven-whenにしたのかな?Switch.pmがあるから?
694nobodyさん:2008/06/06(金) 01:28:23 ID:???
>>693
http://pc11.2ch.net/test/read.cgi/php/1008355270/85
Perl の自然言語的体裁には switch-case より given-when の方が
よりしっくりくるかもね。
695nobodyさん:2008/06/07(土) 20:54:21 ID:8brPzE2o
http://www.vid-dl.net/

このサイトに
http://v.youku.com/v_show/id_ch00XMjc3MDQ1MzI=.html
を入力するとリンク先が4つほどでます。

これを自分でもPerlCGIで再現したいんですが、4つのリンク先をどうやって出してるのかわかりません。
HTMLのソースを見る限り4つないんです。
ないものを何かを元にして解析?してるようです。
4つの違いは以下です

http://f.youku.com/player/getFlvPath/sid/12008536434684686883/st/flv/fileid/までは一緒以下が

0200640400482D864C5AE000AEF6647CED502D-7AA2-9D39-9256-82A8FD7CC8D9
0200640401482D864C5AE000AEF6647CED502D-7AA2-9D39-9256-82A8FD7CC8D9
0200640402482D864C5AE000AEF6647CED502D-7AA2-9D39-9256-82A8FD7CC8D9
0200640403482D864C5AE000AEF6647CED502D-7AA2-9D39-9256-82A8FD7CC8D9

です。
<a charset="400-002-2-4" href="javascript:sendVideoLink('XMjc3MDQ1MzI=','0200640400482D864C5AE000AEF6647CED502D-7AA2-9D39-9256-82A8FD7CC8D9');">??</a>
これが大本でこれを解析してるんでしょうか。
こういうのはどうやって解析すればいいのでしょうか?

よろしくお願いします。
696nobodyさん:2008/06/07(土) 21:00:16 ID:???
一部の0に1足してるだけじゃないの?
697nobodyさん:2008/06/07(土) 21:25:47 ID:8brPzE2o
>>696
ですが4つとは限らないんです。
このビデオは4つですが、者によっては8つとかになります。
それをどうやって特定してるのかがわかりません。
698nobodyさん:2008/06/07(土) 21:33:39 ID:???
>>697
youkufireかなんかAPI使ってるんだろ。
Perlとは関係ないな。
699nobodyさん:2008/06/07(土) 21:43:36 ID:8brPzE2o
>>698
???
それではyoukufireではどうやってやってるんでしょうか?

こういうのってどういうスレに行くと知ってる人がおられるのでしょうか?
フラッシュ関連なのでしょうか?
自分はPerlをかじる程度しか知らないのでついここに来てしまったのですが。


アドバイスお願いします
700nobodyさん:2008/06/07(土) 22:34:21 ID:???
HTTPに関して勉強して下さい。
全くのスレ違いです。
701nobodyさん:2008/06/07(土) 22:55:37 ID:8brPzE2o
http???
他で質問してみます。ありがとうございました。
702nobodyさん:2008/06/07(土) 23:03:35 ID:???
いや、どこで質問しても無駄だと思うよ。
結局、HTTPレスポンスを解析する必要があるから。

そして、HTTPレスポンスの意味を把握するには、
sidなどユニークなIDのパターン解析と
youkuで使われてるファイル取得swfの内部解析も必要。

この意味が分からない次元じゃ、到底ムリ。
703nobodyさん:2008/06/07(土) 23:36:39 ID:8brPzE2o
なるほど。
http://www.kasai.fm/perlHTTP/
http://www.kasai.fm/perlHTTP/decode.html
からとりあえずそのhttpレスポンスとやらを実際に見てみようと思いましたが。

どうもCan't locate BASE64 in @INC エラーがでまして。
このモジュールをactiveperl5.8.1のppm(リポジトリは初期状態のまま1つです)でいれようとしましたが
ない模様です。

MINE::Base64って自分でコンパイル?でしたっけができないとダメなものなのでしょうか。
704nobodyさん:2008/06/07(土) 23:53:12 ID:8brPzE2o
すいません
getHTTPの

#use MIME::Base64;
require('BASE64');

use MIME::Base64;
#require('BASE64');
にしたらエラーが出ませんでした。動いてるかはわかりませんが。
705nobodyさん:2008/06/08(日) 00:05:22 ID:???
MIME::Base64は標準モジュールだ。
というか、質問内容が初心者未満の単なる教えて君だぞ。
最低限、ドキュメント読むかググってから書き込め。
706nobodyさん:2008/06/08(日) 00:14:24 ID:Mcg1bojL
そうなんですか。とりあえずperlでwebページを読み込む実験は成功しました。
そこからフラッシュのURLを抜き出すところまではできそうです。

>sidなどユニークなIDのパターン解析と
>youkuで使われてるファイル取得swfの内部解析も必要。

これを検索とか意味を探してきます。
707nobodyさん:2008/06/08(日) 14:55:02 ID:???
オブジェクトにメソッドを足すにはどうしたらいいでしょうか?

package foo;
*{foo::hoge::bar} = sub {1};
$hoge = foo->hoge;
$hoge->bar();
Can't locate object method "hoge" via package "foo"

アレ?
708nobodyさん:2008/06/08(日) 16:56:29 ID:???
>>707
基本から一通り勉強し直したらいいんじゃないかな。
http://www.kt.rim.or.jp/~kbk/perl5.005/perlmod.html
http://www.kt.rim.or.jp/~kbk/perl5.005/perlobj.html
709nobodyさん:2008/06/08(日) 18:03:33 ID:???
>>708
サンクス

最後のページ
Summary
なすべきこと。今、あなたは部屋を出てオブジェクト指向方法論に関する書籍を購入して、そして六ヶ月かそこらの間悩む必要があるでしょう。

ワロタ
710nobodyさん:2008/06/08(日) 18:41:29 ID:NYonUevm
うーん継承させても
hoge {
$this = shift;
return $this;
}

bar{1}

hoge->bar()ってやったら呼べるんだけどbarはhogeと同じ空間にあるのが変というか
つまり単純化するとこんな感じ。

*{foo::hoge::bar} = sub {1};
print foo->hoge->bar(); エラー
print foo::hoge::bar->(); 動くが気もい

*{foo::hoge::bar} = sub {1}; #もっとキモイ
$top = foo::hoge;
print eval ($top ."::bar");

勉強してきます
しかしあんま資料ないっぽい
711nobodyさん:2008/06/08(日) 18:52:18 ID:???
OOPじゃなくて、perlの基本からやり直しては。
*{foo::hoge::bar} じゃなくて *{foo::bar}
hogeなんていうpackage作ってないし。

712nobodyさん:2008/06/08(日) 19:09:16 ID:???
> hogeなんていうpackage作ってないし。 !
それだ! ありがとうやっとわかったよ。
てっきり package a::b::c;
ってやると

a
a::b
a::b::c

ってのが自動的に生成されると思ってた。
713nobodyさん:2008/06/08(日) 20:02:49 ID:???
パッケージじゃなくてオブジェクトに生やしたいの?
見かけ上はできるけだろうけどPerlのオブジェクトは名前空間に変数結び付けてるだけだからなあ

と思ったけどもう一度勉強した方が良さげだね
714nobodyさん:2008/06/08(日) 20:20:35 ID:???
Perl DBI MySQL

CGIであるデータをホームページ上に表示することをやっています。
5000件ほどのデータをfetchrow_arrayで1行ずつフェッチしていますが
どうもフェッチ処理に時間がかかっているようです。
実際に必要なのは20件ほどで、他はページ送りで表示可能。
検索エンジンの検索結果ページなんかをイメージしていただければ。

そこで、不要なフェッチを無くすために、
複数行を飛ばしてフェッチすることってできますか?

もし他に改善策があれば教えてください。
一応、SELECTの段階で20件だけを取り出す方法を思いつきました。
715nobodyさん:2008/06/08(日) 20:39:35 ID:???
>> 714 @array の展開はコスト食うのでやめたほうがいいかもね。
@arrayの高速操作が必要ならスライス操作とか調べてみると吉
SELECTで絞れるなら断然そっちのほうが早いと思うよ。



716nobodyさん:2008/06/08(日) 22:10:54 ID:???
>>715
ありがとうございます。
スライス操作調べてみました。SELECTでLIMITつければいいんですかね?
これで必要な分だけのフェッチですみましたが、どうも時間がかかるようです。
ちょっと複雑なSQL文なんでそっちのほうがボトルネックのようですorz
SQL文のほうを考え直そうと思います。
717nobodyさん:2008/06/09(月) 12:35:45 ID:???
SELECT SQL_CALC_FOUND_ROWS * FROM $table LIMIT ( $page*20+1 ), 20;
SELECT FOUND_ROWS();

>>715
>>716はSQLの話じゃなくて、
大規模の配列使うなって話で、
my @temp = splice( @array, 0, 20 );
的なことでしょ。

SQL文はスレ違い。
718nobodyさん:2008/06/09(月) 15:41:11 ID:???
もうメンドクセーから、bind_columns()とfetch()にすれば?
生えーぞ。
719nobodyさん:2008/06/09(月) 16:00:10 ID:???
生いいよね
720nobodyさん:2008/06/09(月) 19:29:41 ID:BYZvhcIN
LIMITしらねーとか そんなレベルなら
其の都度ひっかかって質問するより勉強したほうがはやいよ
リファレンスページみっけてプリントアウトしとけ
721nobodyさん:2008/06/09(月) 23:24:50 ID:???
122
11
11000
↑これをソートすると

11
11000
122
↑こんな風になってしまいます。

11
122
11000
↑こんな感じで大きい順にソートする方法を教えてください。
722nobodyさん:2008/06/09(月) 23:26:19 ID:???
sort { $a <=> $b } ( 122, 11, 11000 ) ;
723nobodyさん:2008/06/09(月) 23:36:47 ID:???
>>722さん、ありがとうございました。
724nobodyさん:2008/06/13(金) 02:38:01 ID:???
ファイルのアップロードについて質問です

*** form.html ***
 <input type="file" name="gazou1">
 <input type=その他 ...>

*** form.cgi ***
use CGI;
$q = new CGI;
@names = $q->param();
foreach $name (@names) {
 $value = $q->param($name);
 if (input type が file だったら ) {
  ファイル受信処理
 }
 なんらかの配列に格納
}
と、したいのですが、
inputのtypeは調べられないのでしょうか?
inputのnameで判断するしかないのでしょうか?
725nobodyさん:2008/06/13(金) 09:17:11 ID:???
>>724
ブラウザから渡されるデータ自体に type 属性の値が含まれて
いないのだから、CGI プログラム上から調べる事はできない。

ref $value でアタリを付ける事はできる。
http://perldoc.jp/docs/perl/5.10.0/perlfunc.pod#item_ref_EXPR_ref_reference
http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod
(「ファイル・アップロード・フィールドの作成」の項)
726nobodyさん:2008/06/13(金) 10:25:57 ID:???
@id には ( '101','106','112','130','150') などと入っており
$unit->{101}->{point} = 2.5;
$unit->{130}->{point} = 6.2;
$unit->{150}->{point} = 3.2;

と代入してあります

このポイント(2.5、6.2等)を元にして@idをソートしたいのですが

@id = sort { $unit->{$_}->point <=>$unit->{$_}->point } @id

とまで考えて、$aや$bをどのように使ったら良いのか分らなくなりました
よろしかったらどのように表記したら良いのか教えてください
727nobodyさん:2008/06/13(金) 10:51:23 ID:???
728726:2008/06/13(金) 11:00:28 ID:???
ありがとうございます
Perlメモはいつも参考にさせて頂いてまして
・複数の項目でソートする
・自分で決めた順番でソートする
の応用でなんとかなるかと思ったのですが
どうにも分らずこちらでお伺いしました次第です
どの辺りを応用すればよろしいでしょうか?
729726:2008/06/13(金) 11:18:24 ID:???
・複数の項目でソートするを応用して(まんまかも)
先にmapでポイントの配列を作る事でなんとか出来ました

@id = map { $_->[0] } sort { $b->[1] <=> $a->[1] } map { [$_,$unit->{$_}->{point} ] } @id

ありがとうございました
そしてお騒がせ致しました
730nobodyさん:2008/06/13(金) 11:37:27 ID:???
@id = sort { $unit->{$a}->{point} <=> $unit->{$b}->{point} } @id
731724:2008/06/13(金) 12:09:38 ID:???
>>725
やはりtypeは知りようがないのですね。
ご回答ありがとうございました。
732726:2008/06/13(金) 12:41:47 ID:???
なるほど、$_ がキーになる場合はそこが$a,$bの対象になるんですね
コードがすっきりしました
>>730さん、ありがとうございます
733nobodyさん:2008/06/13(金) 12:51:42 ID:???
>>732
sortでなんで$_がでてくるのかわからない。$aと$bしかないだろ。
grepやmapと混乱してないか?
734726:2008/06/13(金) 13:06:56 ID:???
Perlメモのを応用しようとしていじくりまわして
>>726のソースに間違えて辿り付いたので勘違いしてました
てっきり配列の要素を引っ張り出したらそれが$_になるのかと・・・
で、$a,$bはそれが直接比較の対象にならないといけないのかと勘違いしてました orz
735nobodyさん:2008/06/14(土) 03:33:00 ID:???
俺も今多次元ハッシュ使ってるけどコツがわかると便利で気に入ってる。
736nobodyさん:2008/06/15(日) 00:12:38 ID:???
ちょっとした構造体風の物を作るのにいいよね
リファレンスで受け渡しも簡単だし
737nobodyさん:2008/06/15(日) 01:14:21 ID:???
WinXPPro+Cygwin、iswebでperlを作成しています。
普段は問題なく動いているのですが、自宅で試したperlをiswebにアップロードする作業が面倒でたまりません。
そこで質問なのですが、
#!/usr/local/bin/perl
とかの表記を書き換えずとも、上記二つの環境の両方で動くように出来ないでしょうか。
毎度毎度アップロードするときに、全cgiを書き換えているので、そこだけでも何とかしたいんです。
もしくは、専用のFTPソフトみたいなので、アップと同時に書き換えてくれるような奴があると良いなぁって思ってます。

どなたか、よろしくお願いいたします。
738nobodyさん:2008/06/15(日) 01:43:19 ID:???
それこそローカルと同期させる専用FTPクライアントをPerlで作れよw
Net::FTP使えば、30分程度で作れるだろ。
739nobodyさん:2008/06/15(日) 01:43:42 ID:???
っ coLinux
っ ActivePerl をC:\usr\local\以下にインストール

っ 「メンドクセーっ! 頭 #!perl に統一してやんよ。」(Path通ってなかったら知らん)
740738:2008/06/15(日) 01:45:20 ID:???
単純にPerlのパスが違うって問題なら、
XPでエイリアス作れるようにするソフト使って、iswebに合わせればいい。
741nobodyさん:2008/06/15(日) 01:52:33 ID:???
>>737

■サーバー

#!/usr/local/bin/perl

require "example.cgi";

■ローカル

#!C:/perl/bin/perl

require "example.cgi";


これなら、example.cgi をアップするだけでOKです。
(意味が違うでしょうか??)
742nobodyさん:2008/06/15(日) 02:10:08 ID:???
>>738-741
どうも、有難うございます。
>>741さんのが一番楽そうなので、それでいこうと思います。

どうもありがとうございました。
743nobodyさん:2008/06/15(日) 14:41:47 ID:???
Perlでコードを書き始めたばかりの物なのですが、基本が少し分からないので質問させて下さい。

PerlでCGIを作っているのですが、いくつかのフォームから入力を取ろうと考えています。
フォームが一箇所ではないので(検索や書き込み、削除等)、送られて来る処理が全く違うため、
送られて来たフォームによって処理を変えたいです。
例えば、検索ならこの関数、書き込みならこの関数、のように分けたいのですが、どのように
実装するのがスマートな方法でしょうか?
考えているのはhiddenで、フォーム別の値を持っておきその値によって分岐しようと思っている
のですが、他にスマートな方法があれば知りたいです。

宜しくお願いします。
744nobodyさん:2008/06/15(日) 14:43:16 ID:???
>hiddenで、フォーム別の値を持っておきその値によって分岐
これが一番一般的で分かり易いと思うよ
745nobodyさん:2008/06/15(日) 15:43:06 ID:???
ところでお前ら、
postとらgetを使うときのデバッグってどうしてる?
コマンドラインからPOSTを設定する方法とかあるの?

めちゃめちゃ大変なんだが
746nobodyさん:2008/06/15(日) 17:13:16 ID:???
>>743

仕様によりますが、動作の種類によって、
スクリプトそのものを分けてしまうのはどうでしょう。
747nobodyさん:2008/06/15(日) 17:51:51 ID:???
受け取った値も表示するようにするかテキストに吐かせてるだけだけど、
そんなに面倒?
748nobodyさん:2008/06/15(日) 17:55:33 ID:???
何をやってるのかよくわかんないけど、どうやってコーディングするかという問題より、
postでもgetでも、与えられる引数をちゃんとチェックすることで、自然と動作の分岐が行えると思うんだけど
749nobodyさん:2008/06/16(月) 02:30:03 ID:???
質問者の想定とは違うかもしれないが、


 | ̄ ̄ ̄ ̄| [検索] [管理] [ほげほげ]
   ̄ ̄ ̄ ̄

みたいな感じなら、submit に文字列を仕込むという方法が。
750nobodyさん:2008/06/16(月) 10:59:18 ID:???
でも文字化けという問題が...
ラジオかセレクト使えばいいと思う。
それかAjaxか
751nobodyさん:2008/06/16(月) 11:58:23 ID:???
>>745
普通はユニットテスト用のロボット作るんじゃね?
使ってないけど、モジュールも何種類かあるはず。
752nobodyさん:2008/06/16(月) 12:17:52 ID:???
じゃあ、まずは画面を見て情報を処理しキーボード操作する
ロボットのAIの開発からしなきゃだな。
753nobodyさん:2008/06/16(月) 12:26:02 ID:???
>>752
そのAIのデバッグはどうするんですか。
754nobodyさん:2008/06/16(月) 12:53:21 ID:???
ニワトリが先か タマゴが先か
755nobodyさん:2008/06/16(月) 23:32:06 ID:???
真ん中をとってヒヨコが先だ
756nobodyさん:2008/06/17(火) 00:45:20 ID:???
>>745
CGI.pm を使うなら
use CGI qw(-debug);
757nobodyさん:2008/06/17(火) 10:41:46 ID:???
>>745

実際に色々な条件でPOST、GETさせてみて、
おかしくなったらそのつど、修正します。

あとは、スクリプトをWEB上にアップしている場合、
ユーザーの方からのバグ報告フォームを設けておくと、
問題発見が早くなります。


コマンドライン POSTで検索:
http://www.google.co.jp/search?hl=ja&rls=GFRC%2CGFRC%3A2007-04%2CGFRC%3Aja&q=%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3%E3%80%80POST&lr=
758nobodyさん:2008/06/17(火) 12:33:48 ID:???
>>757
500が帰ってきたとき、どこが悪いかどう見当つけてるかってはなしでしょ
759nobodyさん:2008/06/17(火) 14:47:07 ID:???
なんでTest関係のモジュール使わないの?マゾなの?
760nobodyさん:2008/06/17(火) 16:37:40 ID:???
世の中には君の環境と違う環境の人もいるのだよ
761nobodyさん:2008/06/17(火) 18:26:54 ID:???
> 世の中には君の環境と違う環境の人もいるのだよ

意地はってないで、「わかりません!教えてください!」っていうのがオトナだよ
762nobodyさん:2008/06/17(火) 18:42:33 ID:???
> 意地はってないで、「わかりません!教えてください!」っていうのがオトナだよ

意地はってないで、「詳しいことはわかりません!!」っていうのがオトナだよ
763nobodyさん:2008/06/17(火) 18:53:23 ID:???
764nobodyさん:2008/06/18(水) 12:33:38 ID:???
つまらん('A`)1
765nobodyさん:2008/06/18(水) 14:54:32 ID:???
Encode::guess_encoding の結果が shiftjis or euc-jp ってなったときで困ってます。
guess_encoding のあとに $utf8 = $enc->decode($inputkeyword); とやってるのですが、エラーとなります。
「 or 」 で split して
my $utf8 = Encode::decode($EncType[0], $inputkeyword);
のようにしたりするのが一般的なんでしょうか?

それとも Encode::decode する際に優先順位を決めたり出来て、それで decode できちゃったりするもんでしょうか?
766nobodyさん:2008/06/18(水) 15:02:39 ID:???
>>765
一般的かどうかは知らんが、俺は JEncode::_func_getcode() みたいな
ラッパーを書いて使っている。
http://www.donzoko.net/source/JEncode/JEncode.pm
767nobodyさん:2008/06/18(水) 15:25:31 ID:???
>>766
ありがとうございます。
_func_getcode と _ambiguous、_test_mojicode を見ながら実装します。
768nobodyさん:2008/06/20(金) 01:13:32 ID:???
@X0(a,b,c);
@X1(d,e,f);
と二つリストを作って、
$Y = int(rand(2));
で$Yに0か1を入れて、それに対応したリストを使いたいのですが、どうすればいいですか?
print "$X"$Y"[1]";
のような感じにしたいのですが…。
769nobodyさん:2008/06/20(金) 01:41:21 ID:???
print @{'X'.$Y};
770nobodyさん:2008/06/20(金) 01:43:48 ID:???
あ、スライスか
print @{'X'.$Y}[1];
771nobodyさん:2008/06/20(金) 01:53:59 ID:???
>>770
カッコイー

こんな風にしてた。
$Y = 'X'. int(rand(2));
print ${$Y}[1];

横からスマソ
772768:2008/06/20(金) 02:20:58 ID:???
>>769-771
素早い回答ありがとうございます。
773nobodyさん:2008/06/20(金) 08:10:04 ID:???
>>769-771
今時シンボリックリファレンスはやめとけ。
use strict;
my @X = [[a,b,c], [d,e,f]];
print $X[0]->[1]; # ==b ($X[0][1] とも書ける)
print $X[1]->[2]; # ==f
774770:2008/06/20(金) 12:31:24 ID:???
>>773
>>768に言ってくれ
前提条件に合わせてわかりやすく書いただけだ
775768:2008/06/21(土) 17:41:30 ID:???
昔やってたEBSってゲームを引っ張り出して弄ってる初心者なので、
バカの一つ覚え状態でかいてます><
>>773の書き方は始めてみました。
ありがとうございます。
776nobodyさん:2008/06/21(土) 17:48:55 ID:???
ここらへんにいる連中にへりくだる必要ないと思うよ。
777nobodyさん:2008/06/21(土) 23:46:21 ID:???
配列やハッシュでリファレンスを使うことを覚えると、かな〜り違うよ。
778nobodyさん:2008/06/22(日) 01:48:39 ID:???
>>773
s[\[\[.*\]\]][([$1])]
779778:2008/06/22(日) 01:49:38 ID:???
s[\[\[(.*)\]\]][([$1])] # キャプチャし忘れたorz
780nobodyさん:2008/06/22(日) 02:10:15 ID:???
perlにjavaの.propertiesファイルみたいなのはないでしょうか?
ちょっとしたデータをファイルの中にまとめておければ便利だと思っているのですが、
そのような奴があれば、助かります。どなたかご教授ください。
781nobodyさん:2008/06/22(日) 02:24:11 ID:???
>>780
Data::Properties
782nobodyさん:2008/06/22(日) 13:05:18 ID:???
外部コマンドの出力結果の取り込みがうまくいきません、なぜなんでしょうか?

open(COM_RET, "ping -n 10 192.168.100.1 |");
while ($data_line = <COM_RET>) {
print $data_line;
};
close(COM_RET);
783nobodyさん:2008/06/22(日) 13:27:13 ID:???
なにも表示されないってこと?
pingコマンドは存在する?
openの後に$|=1;したら表示される?
for (`ping -n 10 192.168.100.1`){print;}ではどう?

784782:2008/06/22(日) 13:28:07 ID:???
すみません。
プログラムの保存先を間違えていました。
785nobodyさん:2008/06/25(水) 22:01:59 ID:???
Google Wireless Transcoder経由でアクセスされるとpostで送信されてくる
フォームのデータがおかしくなってたことありませんか?
たとえば、なにも入力しなかったinputフォームの値が全て文字列の"VALUE"に
なったり・・・
786rubi:2008/06/26(木) 00:32:36 ID:P35F8OvT
system関数で外部コマンドを実行する際、その引数にプログラム内で使用しているスカラ変数の内容を指定するのにはどうすればいいのでしょうか?
787nobodyさん:2008/06/26(木) 00:55:50 ID:???
system($cmd $arg1 $arg2 ・・・);

引数中にスペース等ある時は、
system qq($cmd "$arg1" "$arg2" ・・・);
788nobodyさん:2008/06/27(金) 16:35:38 ID:???
すみません知恵を貸してください。
こんなファイルがあります → 項目\tデータ\n

中には同じ項目でデータ違いがあります。
100\t百\n
100\t百円\n
100\t百円玉\n

同じ項目は一つで良いので一番データの短い100\t百\nを残して
残りの長い二行を削除したいと考えています。
何か良い方法は無いでしょうか。
短いデータのみ残したいので配列の重複削除サンプルは
そのままでは利用不可でした。
789788:2008/06/27(金) 16:38:10 ID:???
…と、そもそも重複ではないですね。
重複サンプル〜以下は忘れてください。
790nobodyさん:2008/06/27(金) 17:02:39 ID:???
とりあえず書いてみろ
791788:2008/06/27(金) 17:30:24 ID:???
普段はスカラーと配列くらいしか使ってません。
項目もデータもバラバラなので方法が思いつかなくて。
792nobodyさん:2008/06/27(金) 17:41:01 ID:???
連想配列
793788:2008/06/27(金) 17:59:26 ID:???
初めは$DATA{項目} = データ; で一つだけ残そうと考えました。
そうじゃなくて、連想配列にしてデータサイズでソートとかあるんでしょうか?
分かりません(><)
794nobodyさん:2008/06/27(金) 18:21:02 ID:???
連想配列にしてデータサイズでソートすりゃいいだろ
795nobodyさん:2008/06/27(金) 18:27:40 ID:???
書かないってことはまだなにも書けない状態ってこと?
まずはopenでファイル開けるの解かる?
796788:2008/06/27(金) 18:50:29 ID:???
>>795
連想配列に入れてみました。

my %DATA;
open R, "koumoku.txt" or die;
while (<R>) {
chomp;
my ($key, $value) = split(/\t/);
$DATA{$key} = $value;
}
close R;

データサイズでソートは後でググってみます。
項目ごとに最短データだけ残す方法は今の時点で想像できません。。
797nobodyさん:2008/06/27(金) 19:15:25 ID:???
そこまで出来てるならあとは場合わけでしょ

if (exists $DATA{$key}){
length($DATA{$key}) > length($value) and $DATA{$key}= $value;
} else {
$DATA{$key}= $value;
}
798nobodyさん:2008/06/27(金) 19:47:44 ID:???
>>797
食事してて遅れました。
そのままコピペしたのですが望むとおりです完璧です。
項目ごとに一番小さいデータが残る。凄い考え付かない。
本当にありがとうございました。
799nobodyさん:2008/06/28(土) 13:36:15 ID:???
◆◆◆◆◆◆◆◆◆毎日新聞社による日本人への誹謗中傷◆◆◆◆◆◆◆◆◆

・母親は受験勉強をする息子の学力向上のためにフェラチオをする
・日本人女性の55%は、出会ったその日に男と寝る
・ファストフードは女子高生たちを性的狂乱状態におとしいれる
・ティーンたちはバイアグラを使ってウサギのようにセックスをする
・女子高生は、刺激のためにノーブラ・ノーパンになる
・日本の最新の流行 : 70歳の売春婦
・老人の売春婦の人気にもかかわらず、日本では小学生の売春婦にも仕事がある
・日本の若い看護婦は売春婦に勝る
・24時間オルガズムが止まらない病気で苦しむ日本人女性の数が増えている
・15未満の子供を対象とした疑似ポルノが日本に蔓延している
・OLの72%が、セックスをより堪能するために何らかのトレーニングを受けている
・人妻は気分転換の目的で昔の恋人に抱かれに行く
・主婦は郊外のコイン・シャワーで売春をしている
・日本男子は柔道や空手の部活で男相手に童貞を捨てている
・ほとんどすべての漁師は海でマンタとSEXしている
・まだ10代の少年から退職した老人までみんな2980円の手コキを利用している
・六本木のあるレストランでは、食事の前にその材料となる動物と獣姦する

※同社が全年齢向けコーナーで七年以上にわたり世界に向けて配信していたものの一部です
※同社の行為は日本人への偏見や人種差別、婦女暴行、幼児虐待を助長するものです

◆毎日新聞の英語版サイトがひどすぎる まとめ@wiki
 http://www9.atwiki.jp/mainichiwaiwai/
◆毎日新聞問題の情報集積wiki
 http://www8.atwiki.jp/mainichi-matome/

つまり日本人なら
http://www.vipper.net/vip552788.jpg
800nobodyさん:2008/06/29(日) 21:21:31 ID:ib7dTQ8m
シンタックスハイライト用のモジュールでオススメってありますか?
Syntax::Highlight::Engine::Kateはちょっと好みじゃなかったのと、
Text::Highlightは今のところ使い方が分からないの。
801nobodyさん:2008/06/29(日) 21:37:01 ID:???
Text::VimColor
802nobodyさん:2008/06/29(日) 23:14:30 ID:???
ありがとう。日本語が上手くいかず。
803nobodyさん:2008/07/03(木) 04:34:06 ID:N0WlacZt
日本人がイスラム過激派に狙われる可能性もあります

220 名前: 名無し三等兵 [sage] 投稿日: 2008/06/30(月) 00:35:59 ID:???
イスラムや胡錦濤の記事にもhentai入ってて
ニュー速の連中がアルジャジーラとかにメールしようとして
鬼女が止めに入ったり、なかなかわかってるなぁと。

262 名前: 名無し三等兵 [sage] 投稿日: 2008/06/30(月) 00:43:47 ID:???
つーか原理主義者は日本に入り込んでいるし組織もあるから
原理主義者によって白昼堂々人通りのある場所で首を掻き切られて
助教授が殺されて犯人が何も特定できていないわけで・・・

297 名前: 名無し三等兵 [sage] 投稿日: 2008/06/30(月) 00:51:28 ID:???
>>272
いや・・・それが・・・
タレコミより前に韓国でコーランが焼かれたと報道されてて
アルジャジーラTVより韓国でコーランを燃やす映像が放映され、アラブ諸国でさまざまの反応が出ている。
・その映像を見た老人がショック死(サウジアラビア)
・その映像を見た青年ら十数人が韓国大使館に投石(シリア)

★祭り★ 「日本の母は息子の性処理係」毎日新聞が捏造記事41
http://human7.2ch.net/test/read.cgi/ms/1215003832/
★祭り★ 【毎日・変態報道】 毎日新聞、「2ちゃんねる」を名指し…「女性社員中傷書きこみで法的措置」で★26
http://mamono.2ch.net/test/read.cgi/newsplus/1215016627/
【記者】毎日新聞の英語版記事で日本を侮辱【豪人】
http://academy6.2ch.net/test/read.cgi/english/1213971760/
【Daily】毎日新聞英語版がひどすぎる 3【WaiWai】
http://society6.2ch.net/test/read.cgi/mass/1214603376/
【毎日新聞】 iチャネル解約スレ 【変態報道】
http://hobby11.2ch.net/test/read.cgi/keitai/1214802475/
804nobodyさん:2008/07/08(火) 20:37:38 ID:???
文字コードを強制的にEUCにする方法が判りません。

use CGI;
use Encode;
$cgi = CGI->new;
print "Content-type: text/html; charset=EUC-JP\n\n";
print encode('euc-jp', $cgi->param('test'));

とやって、それぞれUTF8,SJIS,EUCで'test'に入力しても、EUCコードでの文字列が出てこず、化けてしまいます。
どうやって強制的にEUCに変換するのか教えてください。
805nobodyさん:2008/07/08(火) 20:38:36 ID:???
あ、忘れてました。
perlのバージョンは5.8.8です。
806nobodyさん:2008/07/08(火) 20:44:53 ID:???
jcode.pm や Unicode.pm をインストール出来ない環境なので、
それも抜きだと jcode.pl で convert するくらいしか他に方法が無い?
807nobodyさん:2008/07/08(火) 21:32:37 ID:???
>>804
コードがそれだけなら入ってくる文字列をdecodeしなきゃだめだよ
808nobodyさん:2008/07/08(火) 23:49:39 ID:???
>>804
encode()の第2引数は、デコード済みの文字列でないとだめでしょ。
encode(ocode, decode(icode, str))
ocode…出力する文字コード
icode…strの文字コード
str…入力する文字列
809nobodyさん:2008/07/12(土) 09:51:37 ID:???
Spreadsheet::WriteExcelって縦方向のセルの結合って出来ないのか?


$format = $workbook->add_format();
$format->set_merge();

$worksheet->write_unicode(0, 0, utf8( Jcode->new('ぬるぽ')->utf8 )->utf16, $format);
$worksheet->write_blank(0, $_, $format) for 0..13;
っていう横方向のセルの結合は出来るんだが

$worksheet->write_unicode(0, 0, utf8( Jcode->new('ぬるぽ')->utf8 )->utf16, $format);
$worksheet->write_blank($_, 0, $format) for 0..13;
これだと結合できない。
仕様なのか俺がアフォなのか誰か教えれ!
810809:2008/07/12(土) 11:19:24 ID:???
事故レス
何となくできたわ。
お騒がせしますた。
811nobodyさん:2008/07/12(土) 18:05:43 ID:???
>>810
お騒がせしたと思うのなら、どうやったらできたのか書くように。
同じ悩みで検索でたどりついた人はまた同じ質問をするでしょ?
812nobodyさん:2008/07/12(土) 18:28:41 ID:???
>>811
もうちょっと優しく書いて欲しいな。
813nobodyさん:2008/07/13(日) 09:44:35 ID:SNV4Eg13
Perlでクローラーを作りたくて、いろいろ勉強しているのですが、
下記3行目のコードの意味がどうしてもわかりません。。
my @extract_links; #パーズ中に抽出されたURL
my $base = $response->base;
@extract_links = map { $_ = url( $_, $base )->abs; } @extract_links;

Perl初心者にもわかるようなコードに書き直すことはできますか?
何を勉強したら、このようなプロっぽいコードが書けるようになるのかも知りたいです。。
814nobodyさん:2008/07/13(日) 17:38:13 ID:???
mapの説明を読みましょう。
$ perldoc -f map

@extract_links = map { $_ = url( $_, $base )->abs; } @extract_links;
これはフィルタです。
@extract_links = <--(フィルタ)-- @extract_links;
右側の @extract_linksにフィルタをかけて、自分自身に代入しています。

右側から入ってきた @extract_linksの各要素は、$_に入れられます。
その各要素に対して、
url($_, $base)->abs;
という処理をして(多分相対パスから絶対パスにしているのでしょう)、
その結果を $_ (自身) に入れています。
$_ = url($_, $base)->abs;

結果として@extract_linksの中身が全部絶対パスになって返ります。
815nobodyさん:2008/07/13(日) 23:01:57 ID:???
>>813
プロっぽいどころか、「どこの素人が書いた?」って言われるコード
だと思うが、、、何で無意味な代入をするかねぇ

3行目の代りになるコード。初心者向け。
foreach my $cont ( @extract_links ){ $cont = url( $cont, $base )->abs ; }
# $_ = url( $_, $base )->abs for @extract_links ;
816nobodyさん:2008/07/13(日) 23:03:33 ID:???
s/無意味な代入/無意味な$_への代入/
map自体を否定してるんじゃないです。
817nobodyさん:2008/07/13(日) 23:10:10 ID:???
>>816
mapブロック内で$_を変更したら、配列にも影響する。
だから、戻り値で置き換えるのは2度手間ってこと。
mapかforeachかは宗教論争だから好きなの使っとけ。
>>815のが見やすいことが多いけどな。
818nobodyさん:2008/07/13(日) 23:18:22 ID:???
>>817
フォロー thx.
815のままだとmapへの攻撃とも取られかねんかったから、816を書いたんだw
819nobodyさん:2008/07/14(月) 00:04:04 ID:???
>mapかforeachかは宗教論争だから

馬鹿すぎる
820nobodyさん:2008/07/14(月) 01:16:23 ID:???
あたまおかしいひとばかりですね
821nobodyさん:2008/07/14(月) 14:17:03 ID:???
TMTOWTDI
822nobodyさん:2008/07/14(月) 14:43:20 ID:???
>>819
ん?
823nobodyさん:2008/07/14(月) 15:02:41 ID:???
「use constant HOGE => "abc";」のとき、それを使って、
「print "match!\n"if(/^main::HOGE/);」とかしたいんですが、
うまい方法はありませんか?
「my $a=main::HOGE;print "match!\n"if(/^$a/);」はできるんですけど。
正規表現内で、use constant で定義した定数を使いたいのです。
824nobodyさん:2008/07/14(月) 15:29:04 ID:???
print "match!\n" if(/^@{[HOGE]}/);
print "match!\n" if(/^${\HOGE}/);
825813:2008/07/14(月) 22:29:29 ID:ojoqjs1p
皆さん、親切な回答ありがとうございました。

Perl初心者がいきなりクローラーを作ろうというのが、
ちょっと無謀だったかも。。

基礎から勉強します。(・з・)
826nobodyさん:2008/07/15(火) 00:18:02 ID:???
>>825
Plagger で HTTP::Async とかつかって遊ぶといいよ
827nobodyさん:2008/07/16(水) 23:13:16 ID:???
質問

splitで、&を区切り文字として指定した場合、
参考書だと、
&が消える、っていう説明と、
&が残る、って説明が混在しているんだが、
どっちが正しいの?
828nobodyさん:2008/07/16(水) 23:13:48 ID:???
それと無料のIDEもおしえて
829nobodyさん:2008/07/16(水) 23:46:12 ID:???
>>827
なぜ試さない

>>828
なぜ検索しない
830nobodyさん:2008/07/16(水) 23:54:09 ID:???
>>829
オレらの業界って気軽に試せないのね。

ダムがあったとして
「ここにもし10cmくらいの穴を開けたらどうなるだろう?」

みたいなところなんで、

「いきなり実行する」

っていうのはキチガイ扱いされてクビになるのね。
831nobodyさん:2008/07/17(木) 00:14:28 ID:???
>>829が言ってるのはむしろ試作の方だがな。
832nobodyさん:2008/07/17(木) 00:39:50 ID:???
自分で試したらわかった

&は消える。

参考書のほうが間違ってたわ。
833nobodyさん:2008/07/17(木) 00:55:40 ID:???
敢えて残るってわざわざ記述されてるってことはミスプリントなのか?
出版元に問い合わせてみたら?
834nobodyさん:2008/07/17(木) 02:41:15 ID:???
例題が2つあって、
1は消えてるんだけど、
2は残ってるの。
余計混乱するわ。
835nobodyさん:2008/07/17(木) 03:23:04 ID:???
そらむしろ必要な情報だろw
836nobodyさん:2008/07/17(木) 05:31:29 ID:???
>>832
「普通は」消えるが正解。正規表現内で()でトラップすりゃ残る。
$str = 'a&b&c&d&' ;
split /&/, $str ; # <= 消える。
split /(&)/, $str ; # <= 残る。
split /(?:&)/, $str ; # <= 消える。
なんで態々解説したかと言うと、区切り文字「列」を二つ使う場合に(|)使ってトラップさせて
「消えないんすけど」って質問された事があったから。
split /(&|:)/, 'a&b&c&d:e:f:g' ; # 本来は区切り文字列ね。
837nobodyさん:2008/07/17(木) 05:57:35 ID:???
なんかむずかしいことはよくわかんないけど、
こういうつまんないことってフレームワークに全部お任せすればよくね。
838nobodyさん:2008/07/17(木) 06:17:36 ID:???
フレームワーク使ったこと無い。
839nobodyさん:2008/07/17(木) 06:48:41 ID:???
鼠駆除すんのにナパーム弾を使うのか
840nobodyさん:2008/07/17(木) 09:33:43 ID:???
>>839
ナパーム弾どころか地球破壊爆弾を使おうとした例もありますが
841809:2008/07/17(木) 09:39:10 ID:???
>>811
すまんこすまんこ。さらに遅レスすまんこ

Spreadsheet::WriteExcelでセルの結合に悩んでるヤシは
ttp://www.koders.com/perl/fid09386E1C3E183B96174D224B87445AE647A32B23.aspx
ここを見れ!
例文が載ってたわ。
842nobodyさん:2008/07/17(木) 19:35:57 ID:???
>>836
消える場合と消えない場合が
あるってことか。
843nobodyさん:2008/07/17(木) 22:27:51 ID:???
gはグローバルの略だとか、
そういうのの、一覧表がのってる
ページをおしえて
844nobodyさん:2008/07/17(木) 22:29:43 ID:???
あと無料のIDEも教えてね
845nobodyさん:2008/07/18(金) 01:28:58 ID:???
知っているがおまえの態度が(ry
846nobodyさん:2008/07/18(金) 01:41:55 ID:???
>>843
作ってダーリン

>>844
好きに調べれダーリン
847nobodyさん:2008/07/18(金) 09:49:50 ID:???
もってけ!IDE
848nobodyさん:2008/07/19(土) 10:24:55 ID:???
トリップを生成する仕組みの以下の部分の意味が分かりません。
教えてください。

$salt =~ s/[^\.-z]/\./go;
849nobodyさん:2008/07/19(土) 10:33:23 ID:???
5本の指が入る Perl hacker に聞けばいいだろ。
850nobodyさん:2008/07/19(土) 18:10:50 ID:???
>>848
s///
[A-Z]
と分けて考えないとダメ。
851nobodyさん:2008/07/19(土) 18:39:57 ID:???
>>848
$salt =~ # Apply following pattern to $salt
s/ # Start substitution expression
[ # Start difine charactor class
^ # This is negated class
\.-z # Range: "." .. "z" by charactor-code
] # End define charactor class
/ # End pattern and start substitution string
\. # Means "." (NOTE: "\" is meaningless here)
/gox; # Modifiers
# g: global matching
# o: compile the pattern only once
## (x: extended)

>>849
> 5本の指が入る # So loose, and so non-useful for hacking.
852nobodyさん:2008/07/19(土) 20:43:57 ID:???
>>850-851

すみません、噛み砕いて教えてください。
853nobodyさん:2008/07/19(土) 20:44:03 ID:???
>>851
なにそれ
なんかのソフトでそうやって
自動で解説が出るの?
854nobodyさん:2008/07/19(土) 20:59:09 ID:???
>>853
> なんかのソフトでそうやって
> 自動で解説が出るの?

自動で解説できるモジュールあったら便利そうだね!
855nobodyさん:2008/07/19(土) 21:46:02 ID:???
>>852
>>851はかみ砕いて解説してあるよ。部品ごとにいちいち説明してあるじゃん。
(教えてくんにまともに教えるの癪だからわざわざ英語にしたんだと思うけど)
辞書引くくらいすれば?
perl 置換 パターンマッチ 正規表現 s演算子 でぐぐればいくらでも解説があるよ。
856nobodyさん:2008/07/19(土) 21:50:14 ID:???
じゃ、このスレいらないやん
857nobodyさん:2008/07/19(土) 22:20:45 ID:QBlnT4Mv

重い処理をする時に、ブラウザを待たせる必要がないので、
セッションを閉じようと思い、どうすればよいのかwebであさっていたら、
標準出力を閉じるとよいみたいな感じで書いていたので試してみましたが、
処理が待たされます。なぜでしょう?


print "a";
close(STDOUT);
sleep 20;

20秒またされたのち、ブラウザが開放されます。
858nobodyさん:2008/07/19(土) 22:30:40 ID:???
どこに書いてあったの?
859nobodyさん:2008/07/19(土) 22:33:59 ID:QBlnT4Mv
860nobodyさん:2008/07/19(土) 22:39:51 ID:???
そこ見た感じだと$|=1やってforkしたときに子プロセス側で先にcloseして
処理を始めるようだけど、そうしてもダメだったの?
861nobodyさん:2008/07/19(土) 22:46:03 ID:QBlnT4Mv
バッファはやった。
子プロはまだ作ってない。

そこのリンクの
http://www.tohoho-web.com/lng/199909/99090185.htm
環境によるようだね。

こうゆう時の処理はこうだよみたいに書いてあったんで(昔どっかのページで見た)、
普通に出来る処理と思ってた・・・。
862nobodyさん:2008/07/19(土) 23:04:25 ID:???
自己レス

普通のperlではちゃんと、動作しました。
mod_perlでの環境では動作しないようです。

なぜ、mod_perlでは動作しないのかは、よくわかりません。
誰か教えて下され・・・。
863nobodyさん:2008/07/19(土) 23:48:52 ID:???
>>862
coderepos かどこかにソース晒せば、5本の指が入る Perl hacker に教えてもらえるよ。
864nobodyさん:2008/07/20(日) 02:16:15 ID:???
>>862
くだすれのほうにもちょっと前に書いたけど、
$|=1にしても、たしか256byteまでは自動でキャッシュが効くとか昔調べた時にどこかに書いてあった。
(昔自分がやったのは、数秒sleep毎に文字列を書き出して、一定時間でexitする。って処理だったけど・・。)

なので自分は、Content-Typeヘッダ出力の直後に、print " " x 256; を書くようにしたらそれで出来た。
あんまりスマートなやり方ではないけど、これ以外に知らない。
(向こうでは、Apacheがキャッシュするって書いたけど、実は自分の思い違いだったかも知れん。
ブラウザとか鯖環境によってはバッファされるbyte数が違うとか言うのも聞いたことがあるのを思い出した。
詳しく調べてないんでよく分からんし、どこに書いてあったかも覚えてない。)

mod_perlについては、printもcloseもexitも全て内部用の関数にoverrideされてるはず。
それに実行されるのは、対象のスクリプトのみではなく、またmodperl::RegistryにしてもPerl Handlreにしても、
実行してるのはApacheプロセスそのものなので、IO周りやsignal周りはApacheの内部実装によると思われる。
それでも上の方法で、ウチの環境では、上のcgiで実行したのと同じ処理ができた。
(すまんが、自分もApacheとかmod_perlの内装知ってるわけではないので、詳しくはわかりません。)
865nobodyさん:2008/07/20(日) 03:26:59 ID:???
孫プロセスでやればいいだけの話だと思うが
866nobodyさん:2008/07/20(日) 03:56:52 ID:???
gearman とか使えばいいんじゃね。
867nobodyさん:2008/07/20(日) 06:30:33 ID:???
>>855
ググってもよく分からんのですよ。

.からzまで以外の文字があったら.(そのままって意味かな?)に変換する。
gオプションだから1回マッチしてもそのあとも処理を行う。
oオプションだからパターンを1回しかコンパイルしない。

だと思うのですが、目的が分からないのです。
あと、oオプションの意味もよく分からないし。
868nobodyさん:2008/07/20(日) 09:51:06 ID:???
oオプションを>>848のケースで使うのは無意味だからそりゃ意味わからなくて当然

.からz以外の文字は、
./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
以外の文字

gオプションが無いと最初の1回マッチするだけで、有るとあるだけマッチを繰り返す
869nobodyさん:2008/07/20(日) 14:38:39 ID:???
>>867
crypt(3)の標準的な実装では、第二引数(salt)は[a-zA-Z0-9./]からなる二文字です。ここではそれを得るための変換処理の一部過程として置換式を用いています。man crypt も参照。
ここから先は Perl の話題ではなくなりますが、知っていて損もないのでぼちぼちがんばってください。
870869:2008/07/20(日) 14:58:22 ID:???
>>867
> あと、oオプションの意味もよく分からないし。

>>868 が一行目で書いているけれど補足。
/o 修飾子は実行時に変化する部分が含まれている正規表現の再コンパイルを抑制します。
例えばパターンに変数が含まれているケースで /o 付きの式が複数回実行されてもパターンは再評価されません。
初回評価時の値のままマッチングが行われます。パターンが変化しない旨を明示することで実行時性能の向上を図る機能です。

今回のケースではパターンは [^\.-z] ですから変化する部分はありません。>>868 の言う「無意味」というのはそういうことです。
perldoc perlretut 及び perldoc perlop の Regexp Quote-Like Operators の項も見てみてください。
871nobodyさん:2008/07/20(日) 16:50:44 ID:???
>>869-870

回答ありがとうございます。
しかしよく分かりません。。。

[a-zA-Z0-9./]以外にマッチ=ひらがなとか漢字とか?にマッチしたら、
その文字を、そのまま使う???
そうなると、saltが許されるのは[a-zA-Z0-9./]だけなので?????

ん??????????????
俺、アホなのかな?
872nobodyさん:2008/07/20(日) 19:57:43 ID:???
質問

パーミッションで、
グループを6とかにすると、
もしそのサーバーが、シェルを使える
サーバーだった場合、
その同じサーバーを使ってる人が
シェルで勝手に入ってきてデータ-を
書き換えられたり、消されたりするので、
グループは0にしなければいけない、と
さっき読んだ参考書に書いてあるのですが、
それであってますか?
873869:2008/07/20(日) 20:39:57 ID:???
>>871
s/正規表現のぱたーん/左のパターンにマッチした部分を置き換える文字列/

[^\.-z] は一文字幅で /g 修飾子付きだから、マッチする一文字を見つけるたびに、置換文字列で置き換えられます。
置き換える文字列はこの場合 "." だから……。
要は s/// の右半分では "." はメタキャラクタじゃない、つまり何ら特別な意味がないということです。
がんばって気付け。
869 は自覚的なアホを応援しています。
874nobodyさん:2008/07/20(日) 20:49:41 ID:???
>872
ちょっとは参考書を信用してもいいんでね?w
875nobodyさん:2008/07/20(日) 23:09:24 ID:???
質問

EUCだと、タイトルに日本語使えない、
って参考書に書いてあるんだけど、そうなの?
876nobodyさん:2008/07/20(日) 23:20:40 ID:???
タイトルとは何のタイトルですか?
HTMLのTITLEタグのことですか?
でしたらヘッダで適切な文字コードを指定すれば使えますよ
877nobodyさん:2008/07/21(月) 00:13:22 ID:???
巨大配列を属性にセットしたオブジェクトを繰り返し生成すると、
なんだかブラウザの動きがもっさりしてくるんですが、
これはPerlが無駄にメモリを浪費してるからですか?
878nobodyさん:2008/07/21(月) 02:01:53 ID:???
そうです。はい次。
879nobodyさん:2008/07/21(月) 05:10:19 ID:???
>>873
あ、意味分かった。
[a-zA-Z0-9./]以外にマッチしたらピリオドに置き換えろ
って意味ですね?
880nobodyさん:2008/07/21(月) 10:10:27 ID:???
definitely
881nobodyさん:2008/07/21(月) 17:58:17 ID:???
頭悪い奴と初心者は解答してくれなくていいよ。
882nobodyさん:2008/07/21(月) 18:15:23 ID:???
上級者のレスは只じゃないよ
883nobodyさん:2008/07/21(月) 18:38:24 ID:???
ネットでの質疑応答にボランティア参加するかしないかの違いは、単に暇か忙しいかの違いであって、上級者か初心者かの違いではない。
884nobodyさん:2008/07/21(月) 20:58:45 ID:???
>>879
大筋で合ってるけど微妙に違います。
元のパターンは [^.-z] なので、[a-zA-Z0-9./] 以外にもマッチ。
下記のワンライナーで Let's 実験。

perl -ple "s/[^.-z]/./g"
885879:2008/07/22(火) 07:08:38 ID:???
>>884
自分で書いた
[a-zA-Z0-9./]以外にマッチしたらピリオドに置き換えろ

[a-zA-Z0-9./] 以外にもマッチ
の違いが分かりません。???
886nobodyさん:2008/07/22(火) 11:13:09 ID:???
perlで外部wwwサーバの生死が知りたいです。
LWP::UserAgentを使って出来そうなのですが、
どうコーディングしていいか分かりません。
よろしくお願いします。

やりたいことは、タイムアウト値を指定して
あるURLにアクセスした場合、
httpステータスコードが404を返しても
それは生きていると判定したいのです。
887886:2008/07/22(火) 11:24:14 ID:???
自己解決しました。
こんな感じで出来ました。

use LWP::UserAgent;

$url = "http://www.yahoo.co.jp/";

$ua = LWP::UserAgent->new;
$ua->timeout(10);
$req = HTTP::Request->new(GET => $url);
$res = $ua->request($req);
print $res->status_line;
888nobodyさん:2008/07/22(火) 13:31:20 ID:???
telnet 相手先 80でいいじゃないか。
わざわざそんなことせんでも。。。
889nobodyさん:2008/07/22(火) 14:50:40 ID:???
HEAD 使ってあげればいいのに・・・
890nobodyさん:2008/07/22(火) 15:02:22 ID:???
仕様が不十分な以上はどれが良いとも決められないな
891nobodyさん:2008/07/22(火) 18:38:20 ID:???
CGIのための実践入門Perl
技術評論社
アーク・シンク・タンク 三島 俊司

↑ちょっとわかりやすいね。
意味不明な記述も半分くらいあるけど。
892nobodyさん:2008/07/22(火) 18:40:05 ID:???
質問

ifの代わりとしての?は使わない方がいいね。

だって?は正規表現とかでも使うから、
?があると、

「正規表現としての?かな?
それとも、ifの代わりの?かな?」

って考えないといけない。それが時間の無駄なので
?は使わずにifを使うようにしましょう。
893nobodyさん:2008/07/22(火) 18:41:11 ID:???
質問なのかアドバイスなのかハッキリしろ糞バカヤロウw
894nobodyさん:2008/07/22(火) 18:52:12 ID:???
同様の混乱事例として^があるよね

これ、^があると、「正規表現の行頭の意味なのか?
それとも、否定の意味なのか?」
って一瞬、混乱するし、なるべく使わないほうがいいと
思うんだけど、行頭の意味だと、¥aっていう、代替表現が
あるんだよね。
895nobodyさん:2008/07/22(火) 18:53:27 ID:???
それとsortはデフォルトで文字列ソートだけど、
数値としてソートしたいときは、スペースシップ演算子を使って
$a <=> $b
とかって書かないといけないけど、そんなのめんどいので、
「数値ソート」
って関数をデフォルトで入れておいてくれないかな?
896nobodyさん:2008/07/22(火) 19:00:27 ID:???
あとおまえら、perlのIDE何使ってるのか教えてよ。

ttteditみたいのがいいんだけど。

たとえばforeachって選ぶと、自動で

foreach 変数 リスト {



ってテンプレが出てくるようなのがいい。
897nobodyさん:2008/07/22(火) 19:08:48 ID:???
>>894
そんなもんで混乱するなよw
898nobodyさん:2008/07/22(火) 19:12:00 ID:???
あとperlって音出してほしいよね。
ファイルのオープンに成功した時とか、

「ファイル オープン!」
「ギュイイイン」

みたいな。
899nobodyさん:2008/07/22(火) 20:54:22 ID:???
出るよ
900nobodyさん:2008/07/22(火) 20:54:33 ID:???
データベース接続!
ガショォォォォオオオン!
901884:2008/07/22(火) 21:30:20 ID:???
>>885
注意が足りなかった点、謝罪するとともに、説明しなおす試みです。

この場合、元のパターンを真偽反転させると分かりやすいかもです。
文字クラス [.-z] は、 [a-zA-Z0-9./] よりも広い範囲を指している点をご理解いただきたい。
つまり s/[.-z]/./g の後でも、[a-zA-Z0-9./] 以外の文字が一部残ってしまう可能性があるわけです。

併せて、ちったあ試してみてくれよ、とお願いしてみます。
>>884 にテストの例も挙げています、ってーか自分の至れり尽くせりっぷりに泣けてきた。
902nobodyさん:2008/07/23(水) 02:20:55 ID:???
>>896
秀丸+マクロでおk
903nobodyさん:2008/07/23(水) 07:57:47 ID:???
初心者スレで無ければほっとくんだが…
>>892
python ですら実装してしまった三項演算子にケチを付けてどうする。
>>894
\a はアラームじゃねえか? \A だろ?しかも \A と ^ は挙動が違うし。
>>895
perl5.10 にしろ。指定が無い場合は勝手に文字列か数値か決めてソート
してくれるらしい。
904nobodyさん:2008/07/23(水) 08:56:46 ID:???
>>903
本当?

% perl --version

This is perl, v5.10.0 built for i486-linux-gnu-thread-multi

Copyright 1987-2007, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

% perl -e 'print join(",", sort 1,2,10,5), "\n"'
1,10,2,5
905nobodyさん:2008/07/23(水) 10:47:15 ID:???
おもいっくそ文字列じゃないw
906nobodyさん:2008/07/23(水) 12:14:10 ID:???
>>896
Eclipse
907nobodyさん:2008/07/23(水) 21:52:41 ID:???
>>906 糞重い
908nobodyさん:2008/07/23(水) 22:01:45 ID:???
Open Perl IDEはどう?

Open Perl IDE
http://sourceforge.net/projects/open-perl-ide
909nobodyさん:2008/07/23(水) 23:15:34 ID:???
いや、「どう?」とかじゃなくて、
おまえらが実際に使っていて、そして
満足しているものを教えて欲しいの。
910nobodyさん:2008/07/23(水) 23:17:21 ID:???
漢は黙ってvimを使う
911nobodyさん:2008/07/24(木) 01:54:37 ID:???
自分がイメージしてるのわぁ〜

メニューに、ループ、ってのがあって、
そのループってのをクリックすると、
forとかwhileとかforeachとかが出てきて、
そのなかで例えばforeachを選ぶと、自動で

foreach 変数 リスト {



とかテンプレみたいに出てきて、あとは
その中の処理を書いていく、っていう。

ようはVBみたいなのが欲しいんだけど、
そういうのってある?
912nobodyさん:2008/07/24(木) 02:06:09 ID:???
エディタのマクロか、それこそコピペで済むようなことじゃないかそれ?
913nobodyさん:2008/07/24(木) 02:26:23 ID:???
>>912
さいしょっから、そういう風になってないといやなんだよ!
914nobodyさん:2008/07/24(木) 02:27:08 ID:???
さて、別の質問です。

パッケージと、
モジュールと、
ライブラリは
どう違うの?
915nobodyさん:2008/07/24(木) 02:29:34 ID:???
それとまた別の質問です。

参考書を読んでいたら、
シフトJISでは、
/(全角のスラッシュ)や、
・(なかぐろてん)や、
タ(はんかくのた)
などを返還しようとすると、
エラーになる、と書いてあるのですが、
その理由として、上記の文字をアスキーコードで
あらわすと、2バイト目が、5Eになっていて、この5Eというのは
^(ハット)のことを表すので、どうやらそれが原因らしいと。

しかし、EUCで書けばこの問題は回避できると。
このように書いてあるのですが、これであってますか?
916nobodyさん:2008/07/24(木) 03:41:54 ID:???
あっていないと疑う理由は何だ?
917nobodyさん:2008/07/24(木) 07:21:59 ID:???
自分で試す前に、あってることが確認できてないといやなんだよ。
918nobodyさん:2008/07/24(木) 13:08:24 ID:???
>>913
マクロの方が柔軟に変更できていいだろ
919nobodyさん:2008/07/24(木) 16:47:52 ID:???
もうね、クリックとか抜かしてる時点でうんこ
920nobodyさん:2008/07/24(木) 20:59:14 ID:???
パッケージは、名前空間にクラスやサブルーチン、変数を縛る機構のこと。
モジュールは、クラスや、メソッド、サブルーチンを一塊にして、再利用しやすくしたもの。
ライブラリは、モジュールを集めたもの。集積した場所。Perlでは曖昧な概念になってる。

適当に検索したが、この辺でも読んどけ。
http://www.rfs.jp/sb/perl/04/01.html

あと、クリックとか抜かしてる時点でうんこ
921nobodyさん:2008/07/24(木) 21:57:32 ID:???
zshやvim7の補完機能は便利すぎてコマンドやモジュール名、メソッド名が憶えられなくなるよ
あと、クリックとか抜かしてる時点でうんこ
922nobodyさん:2008/07/24(木) 22:37:43 ID:???
ちゃんと読んで無いけどクリックとか抜かしてる時点でうんこ
923nobodyさん:2008/07/25(金) 00:30:17 ID:???
>>920
糞サイトに直リンするなんて、
クリックと抜かしてるうんこ
924nobodyさん:2008/07/25(金) 01:48:34 ID:???
なんだこの流れ
クリックうんこ
925nobodyさん:2008/07/25(金) 11:10:09 ID:???
なにこの流れ?
とりあえず、クリんこ
926nobodyさん:2008/07/25(金) 11:37:17 ID:???
なにこの流れ?
クリックして脱がせてる時点でうんこ
927nobodyさん:2008/07/25(金) 13:18:17 ID:???
クリックしてうんこを流せ
928nobodyさん:2008/07/25(金) 13:42:17 ID:???
うんこをクリックしろ
929nobodyさん:2008/07/25(金) 19:29:09 ID:???
とりあえずまったり質問を待とうぜ
クリックうんこ
930nobodyさん:2008/07/28(月) 12:23:50 ID:???
コマンドラインからperlスクリプトを実行しています。
同じ処理を何度も繰り返すのですが、過剰に走らせるとシステムが落ちてしまうので
1回の処理につき10秒間sleepさせています。
そのスリープを目に見える形で表してみようと一つ処理が終わるごとに以下のようにしてみました。

print "sleep";
foreach(0 .. 10){
print '.';
sleep(1);
}
print "\n";

1秒ごとにピリオドがprintされることを期待してたのですが、10秒後に
「sleep..........」
とまとめて出力されます。
なぜなのでしょうか?

931nobodyさん:2008/07/28(月) 12:27:42 ID:???
>>930
典型的なバッファリング問題ですな。$|について調べてみんさい。
932nobodyさん:2008/07/28(月) 13:30:26 ID:???
調べてっていわれても$|じゃ検索できんだろ。
頭悪いヤツは消えな。
933nobodyさん:2008/07/28(月) 13:38:19 ID:IfOXe7Fq
perl バッファリング

でググれカス
934nobodyさん:2008/07/28(月) 14:49:30 ID:???
>>930
>>864読んで見て。
935930:2008/07/28(月) 18:42:39 ID:???
$| = 1
とやったら期待通り動きました。

>>931,932,933,934
どうもありがとうございました。
936nobodyさん:2008/07/28(月) 22:19:52 ID:???
>>932
Perlって検索できない用語多いよね。
6,000ページのマニュアルを
「全ページ」
暗記して使うようなことが期待されていたのだろうか>設計当時
937nobodyさん:2008/07/28(月) 23:04:53 ID:???
検索できない用語って例えば?
938nobodyさん:2008/07/28(月) 23:55:13 ID:???
やっぱ特殊変数じゃね?perldocで探せるしそれぞれ名前が付いてて検索も出来るんだけどな
っつってもその名前覚えてなきゃ同じだけど
939nobodyさん:2008/07/29(火) 00:37:41 ID:???
正規表現の論理積って、表現できませんか?
論理和ができて、なぜ論理積ができないのか・・・うーん
940nobodyさん:2008/07/29(火) 00:50:19 ID:???
>>938
なにげにちょこちょこと12年間ほとんど毎日のように使っているが、いまだに検索できんよ、俺は。
941nobodyさん:2008/07/29(火) 01:01:06 ID:???
>>940
それはやっぱり名前をおぼえていないから検索できないってこと?
942nobodyさん:2008/07/29(火) 01:01:40 ID:???
perldocっていうのがPerlのマニュアルなの?
それはWEBのどこで読めるの?
943nobodyさん:2008/07/29(火) 03:19:51 ID:???
Windows
スタート→プログラム→ActivePerl 5.x.x build xxx→Documentation
コマンドライン→perldoc

Web
http://perldoc.perl.org/
>>2
944nobodyさん:2008/07/29(火) 14:30:05 ID:fy3kWC2s
質問 ノ

オープンしたソケットにノンブロッキングモードで connect した時、
“Connection refused”を検出するにはどうしたらいいですか?
945nobodyさん:2008/07/29(火) 15:08:40 ID:i5c/JUZY
noopが帰ってくるかどうか
946nobodyさん:2008/07/30(水) 15:01:51 ID:d+B9EpcH
その noop というのはどうしたら得られますか?
947nobodyさん:2008/07/30(水) 15:56:41 ID:8tDIA2ts
ここでいいのかわかりませんが、スレ違いなら誘導ください。
Apache2.0+ActivePerl588の環境です。
これをIIS5.0で運用するかも的な話が出てきまして、IISで動作をテストしています。
Apacheでは、warn "hoge=$hoge"で、Apacheのエラーログにワーニング情報を出力していましたが、
IISではwarnによる結果が表示されません。
IISでは表示できないのでしょうか?あるいは設定次第で表示されたりします?
何か他の方法があれば教えてもらえませんか?
948nobodyさん:2008/07/30(水) 16:08:44 ID:???
動作とは全然関係ないけど
普通ウォーニングって言わね?
949nobodyさん:2008/07/30(水) 16:15:21 ID:???
タイムアウトの検出なら、selectにタイムアウト設定してループで検出やるんじゃないの?
どんな設計してるのか知らないけど。
950nobodyさん:2008/07/30(水) 16:16:16 ID:???
>>949は944宛て
951nobodyさん:2008/07/30(水) 16:38:08 ID:???
>>944
connect(2)のEINPROGRESSの説明をよく読め。

EINPROGRESS
ソケットが非停止 (non-blocking) に設定されていて、接続をすぐに完了することができない。
  その場合、 select(2) や poll(2) を使ってそのソケットが書き込み可能になるのを待つことで、
  接続の完了を知ることができる。 select(2) で書き込み可能になった後に、 getsockopt(2) を
  使って SOL_SOCKET レベルで SO_ERROR オプションを読み出すことにより、 connect() が
  成功したか、失敗したかを判断できる。成功の場合 SO_ERROR が 0 であり、失敗の場合
  SO_ERROR がここのリストにあるいずれかのエラーコードであり、それにより失敗の原因が
  分かる。
952944:2008/07/30(水) 18:06:58 ID:d+B9EpcH
>>951
でwwwけwwwたwwwww

そのとてつもなく親切なmanは一体どこのww
JMの成果物かしら?
うちのmanはそんな丁寧に書いてないですw

ググったら POSIX を適切に use するようにしておけばコードに対応するエラーメッセージが得られる事も分かりました
果てしなくありがとう♪


>>949-950
うん。
タイムアウト付きでselectしてconnect自体は完了してもconnectに成功したかどうかを調べる方法を知らなかったんだ
953nobodyさん:2008/07/30(水) 18:10:55 ID:???
>>952
linuxの日本語マニュアルだからたぶんJMだね
954nobodyさん:2008/07/30(水) 18:42:46 ID:???
なんという質問の後出し。
955nobodyさん:2008/07/31(木) 01:58:02 ID:oOtEPfmn
mod_perlについて質問させてください。
debian Etch、Perl5.8.8 mod_perl2.0です。
初めてmod_perlを試してみたんですが、CGIの動作がうまくいきません。
レスポンスヘッダを出力して欲しくないのに出力されてしまい、
しかもContent-typeがtext/plainになっています。
.htaccessで下記のように設定しています。

SetHandler perl-script
PerlResponseHandler ModPerl::RegistryPrefork
PerlSendHeader Off
Options +ExecCGI

通常のCGIとして正しく動いていて、mod_perlにしてもヘッダが
オカシイ以外は正しく動いている風です。

何かアドバイスをお願いします!
956nobodyさん:2008/07/31(木) 16:52:57 ID:???
mod_perl2でファイルが開けません。
エラーログ見ると、
Permission denied
とあります。普通のCGIだとファイルが開けるのにmod_perl2だと開けないというのは
何か特別な作法のようなものがあるのでしょうか。
超困っているのでお助けを・・・
957nobodyさん:2008/07/31(木) 23:29:50 ID:???
>>956
mod_perl のプロセスオーナと CGI (の Perl スクリプト実行の際に呼ばれる perl) のプロセスオーナが異なっているからでしょう。たぶんね。
958955:2008/08/01(金) 00:03:22 ID:???
なんか色々勘違いしてました。PerlSendHeaderはonが通常動作なんですね。
ステータスコードを自分で吐きたいときもあるんで、と思ったんですが、
別にONで構わないんですね。ただ、OFFにしてヘッダを頭から出力しても
うまくいかないのはよく分からず。

>>956
カレントディレクトリの食い違いじゃないですよね。定番なのに僕は嵌りました。
ユーザー違いはsuExec。whoamiで確認。昨日かじった程度の知識です。
959nobodyさん:2008/08/05(火) 02:44:01 ID:dDXLNQi4
Basic認証なんだけど、.htpasswdファイルってどのくらいまでパスワード登録できるのかしら?
例えば1万件とか、どうでしょう?
960nobodyさん:2008/08/05(火) 08:41:47 ID:???
>>959
スレチだけどいいや。
1万件なら独自に認証システム作った方が良いと思う。
961nobodyさん:2008/08/05(火) 09:13:10 ID:???
>>959
できるけど普通はやらない。
962959:2008/08/05(火) 09:13:45 ID:dDXLNQi4
いや、Perlで認証システム作っているんだけど、
どっちみちBasic認証だと.htpasswd使わないとダメでしょ?
963nobodyさん:2008/08/05(火) 10:31:58 ID:???
日本語で
964nobodyさん:2008/08/05(火) 12:53:10 ID:??? BE:725033977-2BP(1)
自分の知ってる限り普通のテキスト形式の.htpasswdだと
766550件ってのが一番多いが問題なく動いてる。

せめてDBMかSQLiteかmySQLあたりにしたほうがいいかなとは思う


965nobodyさん:2008/08/05(火) 13:06:09 ID:???
mod_authn_dbmとかあるからな。ぜんぜんperl関係ないけど
966nobodyさん:2008/08/05(火) 14:17:26 ID:???
766550件もどうやって管理してるの?
967nobodyさん:2008/08/05(火) 14:52:27 ID:???
同時アクセスが少ないうちはいけるだろうな
968959:2008/08/05(火) 16:22:30 ID:???
いろいろ、参考になりました。どうもです。

766550件もあると、MySql使ってても、どうなんでしょう。うまくいくのかしら。
969nobodyさん:2008/08/05(火) 16:56:41 ID:???
会員管理するシステムはある。DBはsybase。

970nobodyさん:2008/08/05(火) 17:02:04 ID:???
MySQL は単純な key <=> value のデータなら 2億8千万件でも動く。
つーか運用してる( Web じゃないけどね。)。データ形式が違えど 76万件
なんて少ない方だと思うが…。
実行速度なんかは index 作製の有無に顕著に依存するがな。

そっちのスレ行ってみれば?
971nobodyさん:2008/08/05(火) 19:53:36 ID:???
perlスクリプト上から自身が実行されてるperlランタイムのバージョンを知る方法はないでしょうか?
スクリプトはmod_perl上で動作しています。
972nobodyさん:2008/08/05(火) 20:20:50 ID:???
print $];
こういうこと?
973971:2008/08/05(火) 20:35:02 ID:???
>>972
それですそれです。ありがとうございました。

チラ、5.006002‥‥‥(゚д゚)
974nobodyさん:2008/08/05(火) 20:39:02 ID:???
11歳でFカップかよ・・・
975nobodyさん:2008/08/05(火) 20:53:00 ID:???
何その入江紗綾
976jark'use:2008/08/05(火) 21:29:26 ID:???
perlでz-z.jpのトリップ作るために
http://z-z.jp/のbbs.cgiスクリプトをnull(ry
[禁止用語]で抜こうと思います。
そこでパラメータにいろいろあてはめてますがうまく抜けません。
実際に抜いた人はnullを使ってたみたいです。
あまり詳しくは公開できない情報ですのでヒントを教えてください
977nobodyさん:2008/08/05(火) 22:42:26 ID:???
>>976
板違いです。
ネットワーク板へどうぞ。

http://pc11.2ch.net/hack/
978nobodyさん:2008/08/06(水) 02:10:44 ID:tTNUWkPT
ファイル名の配列をディレクトリの浅い順に並べるのに

@files = sort {scalar split('/', $a) <=> scalar split('/', $b)} @files;

って書いたら

Use of implicit split to @_ is deprecated

て言われました。どう書くのが今時ですか?
979nobodyさん:2008/08/06(水) 06:35:34 ID:???
>>978
splitをscalarで使うと文句を言われるから、tr/\///などで数える方法に切り替える。
あと、シュウォーツ変換を使うと効率が上がる。
980nobodyさん:2008/08/06(水) 12:03:05 ID:???
「今時」てえのは知らんが、やり方なんざ山程あるぜ。
@_ のなんたるかを理解してるなら
sort { ( @_ = split m{/}, $a ) <=> ( @_ = split m{/}, $b ) } @files ;
でもいいし、普通に捨て配列作ってもいいしTMTOWTDI。
sort { ( my @A = split m{/}, $a ) <=> ( my @B = split m{/}, $b ) } @files ;
sort { @{[ split m{/}, $a ]} <=> @{[ split m{/}, $b ]} } @files ;
sort { sub { split m{/}, $_[0] }->($a) <=> sub { split m{/}, $_[0] }->($b) } @files ;
981nobodyさん:2008/08/06(水) 12:28:12 ID:???
山程あるならたった4例だけじゃなくて山のほうを紹介してよ
982nobodyさん:2008/08/06(水) 12:40:22 ID:???
>>981
ググれ
983nobodyさん:2008/08/06(水) 13:43:13 ID:???
「今時」を考えると効率を多少犠牲にしても
見やすく書いたほうがいいんじゃないかな
984nobodyさん:2008/08/06(水) 13:55:55 ID:+ukCpM4+
今時でもファイルが万あると考慮すべき問題です
DISK I/O のコストを甘く見ないほうがいい
985nobodyさん:2008/08/06(水) 14:03:20 ID:???
$a = @aでいいものを$a=scalar @aとか$a= @{[ @a ]}とか$a=sub{@_}->(@a)とかバカだろ。
そういうのはTMTOWTDIとはいわない。
986nobodyさん:2008/08/06(水) 15:45:53 ID:???
978〜の流れでDISK IOなんか発生してないし
犠牲にするのが多少じゃないんだったら考慮するのはあたりまえじゃ
987nobodyさん:2008/08/06(水) 17:10:27 ID:???
perl -w -le '$a = split m{/}, q{/hoge/foo} ;'
でワーニングが出るって事をすっとばしてる奴がいるなあ。
perl -w -le '$a = @_ = split m{/}, q{/hoge/foo} ;'

元の質問に「コストも計算して」ってのがあったら、
シュワルツかシャチ泳ぎの二択になるんだけど
my %tb ;
sort { ( $tb{$a} ||= split m{/}, $a ) <=> ( $tb{$b} ||= split m{/}, $b ) } @files ;

988nobodyさん:2008/08/06(水) 17:33:19 ID:???
979が指摘したtrで数えたほうがいいという件についてはスルーですか?

それにスカラーコンテキストのsplitでなぜ警告が出るか理解してる?
@_を書き換える副作用があるからなんだけど。

シュワルツ使うのもシャチ泳ぎ使うのもいいけど、splitで数えるのは
おすすめできない。
989nobodyさん:2008/08/06(水) 17:53:17 ID:???
>>988
>それにスカラーコンテキストのsplitでなぜ警告が出るか理解してる?
だからリストコンテキストにして明示的に@_に代入してんじゃんw
>>985の「$a=@aは、元質問では直接使えない」って指摘しただけだよ。

tr///もs///gも書き換えを行なってるんだから、ここで変な人為ミスが入る可能性
が高いよ。俺は使うし好きにしたらいい。
元質問からsplitで説明しただけだから。
990nobodyさん:2008/08/06(水) 18:06:15 ID:???
まあ、元の変数には影響が無いけどワーニングは出るかもってのと
元の変数で書き換えが起こるってのじゃあなあ
 1000万文字の内のTのカウント
とかだと実行速度の問題もあってsplitは使わんが、コメント必須
にしてるなあ、実際先人の件の人為ミスで酷いことになった事あるし
991nobodyさん:2008/08/06(水) 18:12:39 ID:???
なんか難しい議論が進んでるけど、俺は動けば何でもいいやw
だって初心者だもん

webprogの目的は、狭義には見て貰う人のユーザービリティーを高めるとか
サイトの付加価値を高めるのが目的なんであって、perlで動いていようが、phpだろうが
利用者には関係のないこと。

ましてや、どう書くかなんて見えないわけで、そりゃ自分の手技向上のためにいろいろ
議論する価値はわかるけど、エンドポイント(サイトの付加価値を高めるなど)を
忘れて、単に技巧にだけ走ってしまうのは好きではないな。

やりたいことが、自分の技量の範囲の中でできれば、それで目的は達成できるじゃん。
992nobodyさん:2008/08/06(水) 18:17:08 ID:???
tr/hoge//のように2つ目のところを空にして使う分には置換なんて起きませんが、
コメントしないとわかってもらえないレベルの人がいるんじゃ大変だなぁ。javaとか
使った方がいいんじゃない?
993nobodyさん:2008/08/06(水) 18:24:39 ID:???
>>992
知ってるってw
それを知らない人がtr/T/t/しちゃったんだよ
貴方の様に知ってる人間ばかりだったら、コメントしないよ
予期しないバグをなるべく排除したいだけなんだ、共同開発してるから
ワーニングだけで済むならそれにこしたことは無いし
994nobodyさん:2008/08/06(水) 20:01:34 ID:???
warningを無視するぐらいなら、最初から付けなければいいのに。
995nobodyさん:2008/08/06(水) 20:06:03 ID:???
きがついてるが放置してるか
気が付いてないかはちがうんじゃないかな
996nobodyさん:2008/08/06(水) 20:30:17 ID:???
>>995
実際に落とし穴に嵌ったときに、気付かなくなるよ。
どうしてもというなら、必要な箇所に no warnings; を入れるべき。
997nobodyさん:2008/08/06(水) 22:36:24 ID:???
>>994
言葉足らずと言うか真意が違ったすまん
ワーニングなら気付くんだ、俺か誰かが
で、ラインナンバーまで解るから解決は早い
他の人の担当であっても指摘しやすい
そもそも自分のコーディングの時気付くw

上のトラブルの時はスパゲティーの中だったんで、
苦しいのなんのって…
998nobodyさん:2008/08/06(水) 22:50:23 ID:???
次スレ立ててもいいですか?
999nobodyさん:2008/08/06(水) 22:54:16 ID:???
てか聞いてる余裕はあまり多くないようですね、レス数的に。
立てます。
1000nobodyさん:2008/08/06(水) 22:55:25 ID:???

         .∧__,,∧
        (´・ω・`)
         (つ終と)
         `u―u´
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。