トップページphp
1001コメント323KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2008/02/25(月) 19:25:51ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

お勧めサイトは >2 以降

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

[モジュール]
CPAN.com: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/

[テクニック]
Perlメモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perlの小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm

[Perl5.8Unicodeメモ]
ttp://www.pure.ne.jp/~learner/program/Perl_unicode.html
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0004nobodyさん2008/02/25(月) 22:05:56ID:???
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で動かした場合は正常に動作しました。
これはどういった理由でエラーが起こっているんでしょうか?
0005nobodyさん2008/02/25(月) 22:17:42ID:???
>>4
鯖にモジュールがインストールされてないんじゃない?
/usr/lib/的なフォルダに/Net/HTTP.pmを入れてみたら?
0006nobodyさん2008/02/25(月) 22:28:05ID:???
>>5
確認してみたのですが、HTTP.pmは既にモジュールとして入っていました。
HTTPというフォルダも同じ場所にあったので、競合してるのかなと思い名前などを弄ってみたのですが、
フォルダ名をいじった場合でもHTTP.pmを移動した場合でも、エラーは

501 Can't locate object method "new" via package "LWP::Protocol::http"

となりました。LWP/Protocol/http.pmも既に入っていました・・・orz
0007nobodyさん2008/02/25(月) 22:31:43ID:???
>>6
http://www.google.co.jp/search?hl=ja&client=firefox-a&channel=s&rls=org.mozilla%3Aja%3Aofficial&hs=wkI&q=Can%27t+locate+object+method++Perl&btnG=%E6%A4%9C%E7%B4%A2&lr=lang_ja
0008nobodyさん2008/02/25(月) 23:24:10ID:???
perlで書いた2つのCGIがあるのですが、
1つ目のCGIを実行中にエラーが起きた時に$ERROR=1等として
エラーフラグに数値を入れて、その値を2つ目のCGIに渡して
2つ目のCGIでエラーメッセージを表示させたいのですが、
色々調べているのですが上手く行きません。

何か上手く2つ目のCGIに値を渡す方法がありましたら、
よろしくお願いします。
0009nobodyさん2008/02/25(月) 23:44:14ID:JDOb3tEV
Aフォルダの中にある10〜30.txtファイルがあります。
Aフォルダの中身はこれが全てでこれを全部開きたいのです。

open(FILE, '10.txt') or die "$!";
while (my $line =<FILE>) {
print $line;
}
close(FILE);

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

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

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

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

WWW:Mixiで使っているモジュールがあるかどうかなども確認したのですが、
全て揃っていて、Winの自鯖なので権限なども関係ないと考えているのですが・・・解決しません。
0021nobodyさん2008/02/26(火) 16:11:53ID:rftlSzSy
WIN鯖はなにかと問題が多いんで
切り替えることをおすすめしますよ。
0022nobodyさん2008/02/26(火) 16:27:13ID:???
>>20
XAMPPとかWWW::Mixiがどんな仕様か詳しくは知らないけど、
普通のPerl-CGIなら、そのApacheのerror.logにエラーが出力されてるハズ。
0023初心者2008/02/28(木) 15:16:09ID:GDQH6oGX
最終的に曜日を知りたいので、指定した○年○月1日まで、今から何日前なのか後なのかを計算する
方法をどなたか教えてください。
0024nobodyさん2008/02/28(木) 15:55:55ID:???
>>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);
0025nobodyさん2008/02/28(木) 15:57:12ID:???
Windowsの英語版と日本語版を区別する方法ってないですか?
$^OでOS名は取れるのですが…
現在はシステムの`date /t`の戻り値を見て判断しています。
0026初心者2008/02/28(木) 16:11:55ID:GDQH6oGX
>>24さんありがとうございます。
出来ればモジュールを使わずに日数を計算する方法はないんでしょうか?
0027nobodyさん2008/02/28(木) 16:36:04ID:TYs56hmn
>>24
>>1
0028nobodyさん2008/02/28(木) 16:36:24ID:TYs56hmn
間違えたwすまんw
>>26
>>1
0029nobodyさん2008/02/28(木) 16:55:57ID:???
>>25
http://homepage3.nifty.com/hippo2000/perltips/Win32/OLE/NLS.htm
0030nobodyさん2008/02/28(木) 17:21:40ID:???
知恵を貸してください
ログインスクリプト作ってるんですが
最初の画面でhttpかhttpsを選択
httoの場合は普通に次の画面でCookie食べておしまい

https(SSL)の方はpost後代理鯖(共有SSL)でCookie食べる
locationで元の鯖に飛ばしてhttpの方もCookie食べる
という処理なのですがlocationなので当然丸見えなんです。。。
何かスマートな方法ありましたらご教示願います。
0031252008/02/28(木) 17:24:53ID:???
>>29
サンクス。解決したよ
0032nobodyさん2008/02/28(木) 21:20:30ID:???
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;
0033nobodyさん2008/02/28(木) 22:07:20ID:???
そのページ3G近くあんじゃんwブラウザで開いて焦ったw
たぶんメモリが足りないだけなんじゃないかな
$ua->max_sizeで上限決めたりヘッダにrange付けて小分けにリクエスト投げるといい
0034nobodyさん2008/02/28(木) 22:32:37ID:???
>>33
そんなに大きかったのですか!w
すみません、でもお陰で$ua->max_sizeを知ることができましたし、
デフォルト無制限なのを知ることも出来ました。
どうもありがとうございました。
0035nobodyさん2008/02/28(木) 23:44:29ID:txq/MTXf
push(@list, {'num1' => 1, 'num2' => 2});

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

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

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

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

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

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

>>41
テーブルタグでも使ったほうがいいんじゃないですか?
0044432008/02/29(金) 18:22:40ID:???
質問が変なので追記
$a = 10101010;
となっている場合に
$a = '0b' . $a;
$dec = oct $a;
のようにしてます。
もっとスマートに0bを付けられないでしょうか?
0045nobodyさん2008/02/29(金) 18:33:58ID:???
>>43-44
my $dec = oct "0b$a";

http://mikeneko.creator.club.ne.jp/~lab/perl/numerical_transform/
0046nobodyさん2008/02/29(金) 19:50:41ID:???
>>45
簡単でしたね…。ありがとうございます。
0047372008/02/29(金) 20:11:23ID:???
>>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で小分けにするのがベターなやりかたかな。
0048nobodyさん2008/02/29(金) 21:04:20ID:???
$ua->requestにcallback関数とサイズ渡したほうが
range対応して無くても使えるしいいんじゃないかな?
0049nobodyさん2008/03/01(土) 04:06:42ID:???
>>48
そうなんだよな。
確かにそんなことも出来たようなことを、かつてdocument流し読みした時にあったな〜って思って、もっかいmanualを詳しく読んでみたら、
なにも$ua->request()に、code_refを投げなくても、直接$filenameを渡せば、Discにcontentsを書いてくれるそうなんで、いっちょやってみた。
そしたら、Win環境でもNetwork転送時間+書き込み時間位で取得できるようになった。
ファイルサイズを100M,200M,500MとでかくしてやってもLWP(Perl)がハングすることなく、大体見積もり程度の時間で取得出来るようになった。

これだと、取得したHTMLをさらにParseして、処理をかけるってことをやろうとすると、ファイル開かないといけないけど、
まあバイナリファイル取得する分には十分だな。

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

だけど、俺なんかはPerlで数百M〜GBクラスのファイル読み込みとか普通にするし、
Perlの使用メモリが2G近くまで行ったりもするけど、今までそんな使い方してて、異常だとか思ったことなかったけど・・。
(そりゃあ、レンサバとか共用マシンとかでやるのは非常識だと思うし、CGIとかの鯖環境ではオレもそんなことしないけど、
自分専用で使う分にはええんでないの。今回みたいな検証したり、ベンチマーク取ったりもするし。)
0052nobodyさん2008/03/05(水) 05:02:04ID:yN6MH4LB
ファイルパスを引数として受け取り
受け取ったファイルパスにファイルを作るサブルーチンを作りたいんですが、
ファイルパスが正しいかチェックするための正規表現がどうしてもかけません。
マッチする条件として
・ドットで始まるファイルは不可
・拡張子は必須/\.[a-z]+$/
・チルダ不可
・先頭のみ./は許可。../は不可。
・ディレクトリ、ファイル名は/[A-Za-z0-9\-]/にマッチ
・連続するスラッシュ、ドットは不可
・m|^/|も許可
書いてみてもものすごく長くなって、結局破綻してしまいます。
たすけて
0053nobodyさん2008/03/05(水) 05:08:29ID:???
追記
open(FH,">",$file);
で作れるファイル名なら問題ないです。
ただし、カレントディレクトリ以下です。
0054nobodyさん2008/03/05(水) 05:42:23ID:ImwXiBY3
use lib qw( ./lib );
use Data::Alias;

Can't locate loadable object for module Data::Alias
と言われます。

./lib/Data/にAlias.pmをポコッと置いてるだけなんですけど
何が足りないんでしょうか?
0055nobodyさん2008/03/05(水) 08:19:07ID:???
>>54
@INCを出力してみたら?
フルパス打ってみるとか
0056nobodyさん2008/03/05(水) 10:04:58ID:???
>>54
「Can't locate loadable object」とあるように
Data::Alias は pure perl なモジュールじゃない。
http://search.cpan.org/src/XMATH/Data-Alias-1.07/
0057nobodyさん2008/03/06(木) 03:17:10ID:???
>>52

無理してひとつの正規表現で済ませなきゃいーじゃん。
0058nobodyさん2008/03/06(木) 05:45:50ID:F1MYa2qu
たしかに
マッチしないものをどんどんはじけば処理少なくならないか?
0059nobodyさん2008/03/06(木) 15:48:54ID:???
レンタルサーバにMT入れてブログをやってるってだけで、
社内でネットプログラムに一番詳しい人にされてしまいました。
材料仕入れて加工して個人に売るという会社なのですが、DQN取締役から
「在庫管理と顧客管理をブラウザから処理できるシステムってできるでしょ?
年度始めまでにお願いね」
と言われて涙目です。
プログラムは未経験で何をどうしていいかすら分かりません。
在庫管理のデータベースシステムの概要や、スクリプトの流れが
理解できるような書籍があったら教えてください。
ラクダ本は買ってみたのですが一から勉強するにはちょっと時間が足りません…
0060nobodyさん2008/03/06(木) 16:06:45ID:???
「できません。」って言う
0061nobodyさん2008/03/06(木) 16:19:02ID:???
フリーで落ちてる奴でも使っておけ
0062nobodyさん2008/03/06(木) 16:56:54ID:???
できませんが一番
0063nobodyさん2008/03/06(木) 20:17:17ID:???
http://xn--lckja1b6r.jp/%E5%9C%A8%E5%BA%AB%E7%AE%A1%E7%90%86%20%43%47%49
http://xn--lckja1b6r.jp/%E9%A1%A7%E5%AE%A2%E7%AE%A1%E7%90%86%20%43%47%49
0064 ◆TWARamEjuA 2008/03/07(金) 00:01:42ID:????2BP(7072)
(´-`).。oO(やりたいよなぁ。。。)
0065nobodyさん2008/03/07(金) 12:30:47ID:???
>59
予算もらって外注する
予算なければ出来ないっていうか、
予算相当に自分の人件費を上げてもらって頑張って勉強
0066nobodyさん2008/03/07(金) 18:55:17ID:+CnMyeLv
質問です。
小数点以下の右端の0を全部取り除きたいです。
小数点以下が0しかない場合は、小数点も含めて取り除きたいです。

3.00 → 3
3.02000 → 0.02

どう書けばよいのでしょうか?
my $result = sprintf("%g", num); とすればいけるかと思いましたが、numが19120730.0000の場合に
1.91207e+07となり、だめでした(19120730となってほしい)。
さっき正規表現スレで聞いたんですが、正規表現は関係ないとレスされました。
宜しくお願いします。
0067名無し募集中。。。2008/03/07(金) 19:05:18ID:???
=~ /[0.]$//
で削っていけば?
0068nobodyさん2008/03/07(金) 19:22:48ID:???
>3.02000 → 0.02
3.02じゃなくて?

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

>>68
> 3.02じゃなくて?

そのとおり、3.02でした。

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

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

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

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

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

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

 以上、スレ汚し失礼しました。
0078nobodyさん2008/03/10(月) 22:41:42ID:???
$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);
}
}
0079nobodyさん2008/03/10(月) 22:51:05ID:???
chomp使えばいいんじゃない?
0080nobodyさん2008/03/10(月) 23:25:05ID:???
問.localtimeは配列を吐きますが、localtimeの動作の逆(配列を入れたら経過秒数合計が返ってくる)はどうしますか。
0081nobodyさん2008/03/10(月) 23:34:28ID:dzM4A1jo
たしかGMTから秒数を返すモジュールがあったはず
比較的簡単に見つかるはずだからググッてみそ
0082nobodyさん2008/03/10(月) 23:42:22ID:???
>>78
==
0083nobodyさん2008/03/10(月) 23:43:47ID:???
>>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パターンはあるようで、非常に嘆かわしいと思いました。
0084nobodyさん2008/03/11(火) 00:00:51ID:kt3GGsX4
XMLが自由すぎて使いづらいのが難点よねw
0085nobodyさん2008/03/11(火) 00:17:08ID:???
安易に拡張性を求めたら墓穴を掘るいい例だよね
自由にできるのは結構なことだけど,良く使う日時のフォーマットくらい統一してほしいぜ・・・
0086nobodyさん2008/03/11(火) 00:31:27ID:???
>>83
Time::Local (の timelocal) は組込関数ではないが標準モジュール。
故意に抜かない限り入っている。
0087nobodyさん2008/03/11(火) 00:55:54ID:???
フォーマットを統一するものを書いてみました。無駄があったらご指摘お願いします。
#!/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";
0088nobodyさん2008/03/11(火) 05:18:16ID:???
読むのもめんどくせえよ

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
0089nobodyさん2008/03/11(火) 05:24:13ID:???
XML::RSSでEUCのRSSを読み込むにはどうしたらいいんだ
0090nobodyさん2008/03/11(火) 09:52:01ID:???
変換してから読み込めば?
0091nobodyさん2008/03/11(火) 09:53:07ID:???
>>87
+0900の部分はグリニッジ比だから-から始まることもあり得る。
0092nobodyさん2008/03/11(火) 12:11:54ID:PA7R3QgS
CPANモジュールのSpreadsheet::WriteExcelを導入しています。
このモジュールのあるバージョン以下の場合はメソッドA実行、それ以外はメソッドB実行
といった振り分けを行いたいのですが、モジュールのバージョンをperl上で調べるには
どうすればいいのでしょうか?
print $SpreadSheet::WriteExcel::VERSION;
としても、何も表示されませんでした。
0093nobodyさん2008/03/11(火) 12:35:37ID:???
version 2.18 はそれできちんと表示された。その他の version は知らん。
ソースに当ってみたら?
0094nobodyさん2008/03/11(火) 13:47:11ID:???
>>93
レスありがとうございます。わざわざ調べて頂きどうもです。

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

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

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

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

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

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

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

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

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

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

0123nobodyさん2008/03/14(金) 14:50:45ID:???
dankogaiがエントリ書いてた
ttp://blog.livedoor.jp/dankogai/archives/51017983.html
0124nobodyさん2008/03/14(金) 15:48:58ID:???
>>111 >>113-122
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#how_can_i_tell_whether_a_certain_element_is_contained_in_a_list_or_array
0125nobodyさん2008/03/14(金) 22:34:42ID: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";
  }
}
0126nobodyさん2008/03/14(金) 22:50:02ID:???
>>125
open(FH, "$_") or die "$! [$_]";
1 while <FH>;

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

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

簡単な解決方法は、$dir にゼッタイパスを突っ込め。
それから perldoc File::Find くらいしろ。
0128nobodyさん2008/03/16(日) 19:27:01ID: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
0129nobodyさん2008/03/16(日) 22:26:04ID:???
>>128
# use encoding "shift-jis";
# LWP::UserAgent;
0130nobodyさん2008/03/16(日) 23:03:42ID:eaCmNgRi
はじめましてこんにちは。
自作の掲示板を作ってまして、ある書き込みにレスが付いた場合は
そのレスの数をカウントして画面に表示させる、という事をやってます。
現状はこんな感じです。

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

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

出来れば上記の命令の中だけで完結させたいのですが、無理でしょうか?
0131nobodyさん2008/03/16(日) 23:16:51ID:???
>>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/
0132nobodyさん2008/03/17(月) 02:23:56ID:WVXzjYIy
>>129
ありがとうございました。
ただ、UserAgentは使うのでコメントアウトできません。
EUCでソースを書き、1行目だけコメントアウトで解決しました。
0133nobodyさん2008/03/17(月) 11:04:17ID:+D1UxdpV
>>126
>>127
ありがとうございました。解決しました。
01341302008/03/17(月) 21:21:26ID:iYfDDUad
>>131
ありがとうございました、無事に解決いたしました。
これを応用して、文字のサイズを変える事もやってみましたが上手く行きました!

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

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

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

0135nobodyさん2008/03/17(月) 22:03:37ID:???
>>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/
0136nobodyさん2008/03/18(火) 10:37:05ID:???
>>134
CGIプログラム:バッチ
htmlフォーム:コマンドライン
と考えれば、おのずと答えが見えると思われ。

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

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

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

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

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

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

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

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

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

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

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

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

の行の次に

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

どうも全部読むか、失敗かの選択しかないみたいなんですが。。
0226nobodyさん2008/03/26(水) 14:32:04ID:???
そんな需要は稀なんだろ
一旦保存してから読み直せば?
0227nobodyさん2008/03/26(水) 14:47:06ID:???
>>225
httpd が受け取る/受け取らないという話でなく、
プログラム中の処理の流れでという意味なら
http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod
の「ファイル・アップロード・フィールドの作成」の項
0228nobodyさん2008/03/26(水) 22:35:17ID: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
0229nobodyさん2008/03/26(水) 22:45:43ID:???
同じ変数でも名前空間が異なれば別物
0230nobodyさん2008/03/26(水) 22:57:38ID:???
>>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
0231nobodyさん2008/03/26(水) 23:12:52ID:???
my と use strict を取っ払ってみると print されたり。
変数の局所化とか strict とは無縁になるけど。

はてなでやり取りしてる人らはそうしてるんじゃないかな。
0232nobodyさん2008/03/27(木) 01:07:20ID:???
local
0233nobodyさん2008/03/27(木) 01:23:34ID: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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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

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

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

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

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

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

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

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



こういうのを、topコマンドでリアルタイムに監視する以外の方法があれば教えてください。
0317nobodyさん2008/04/08(火) 19:19:20ID:???
4倍で落ちるってどんだけだよ
0318nobodyさん2008/04/08(火) 19:20:40ID:???
Devel::Sizeでどの変数がメモリ食ってるか調べてみれば?
0319nobodyさん2008/04/08(火) 19:26:09ID:???
http://search.cpan.org/perldoc?Devel::Size
http://perl.apache.org/docs/1.0/guide/performance.html#Measuring_the_Memory_of_the_Process

参考リンク
0320nobodyさん2008/04/08(火) 20:31:28ID:???
>317
単純計算ですが、総計にしてメモリ1GBほど増加です。

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

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


とりあえずこのへんも参考にするといい
http://iandeth.dyndns.org/mt/ian/archives/000624.html
http://www.typemiss.net/blog/kounoike/20060212-64
0322nobodyさん2008/04/08(火) 22:02:45ID:???
>>313
数100MBのデータを気軽に読み込んじゃうのは素人なんだってば。
だからプロを雇えと。
0323nobodyさん2008/04/08(火) 23:49:56ID:ng1N9SG/
与えられた文字列がutf8として正しいかどうか判断するのに
utf8::decode($str);
if ($str =~ /\P{IsASCII}/ and not (utf8::is_utf8($str))) {
### エラー
}
ってやってみましたが、あってますか?
0324nobodyさん2008/04/11(金) 10:40:16ID:???
モジュールがPurePerlかどうかはどうやって判断すれば良いでしょうか?
0325nobodyさん2008/04/11(金) 11:53:06ID:???
それは機械的に?
それとも手動で?
0326nobodyさん2008/04/14(月) 15:21:25ID:???
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
0327訂正2008/04/14(月) 15:22:02ID:???
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
0328nobodyさん2008/04/14(月) 16:19:57ID:???
>>327
UAで判定してる模様。
$ua = LWP::UserAgent->new(agent=>'IEみたいなUA');
でやってみ。
0329nobodyさん2008/04/14(月) 16:25:16ID:???
>>328
ありがとうございます。いやらしいことしますね…
LWP::Simple::mirrorを使っているので、全部書き直すか、例外処理を作るしかなさそうですねorz
0330nobodyさん2008/04/14(月) 16:33:55ID:????DIA(100004)
LWP::Simple は $ua を Export 出来る
0331nobodyさん2008/04/14(月) 16:52:36ID:???
>>328の一行を追加すればいけるということでしょうか。
オブジェクト指向的な話(->とか)が全くわからないので、そういうところを避けながらコーディングしてきたのですが厳しいですね。
03323272008/04/14(月) 19:32:33ID:???
結局、LWP::UserAgentでUA偽装して、ミラーリングさせました。
今後はSimpleではなくて、こっちを使おう…
0333nobodyさん2008/04/14(月) 21:28:37ID:vhVZb6UQ
CGI::Application を使ってみようかと考えてるPerl初心者です。
Web上でいろいろサンプルコードを見ていたんですが、
使いたいモジュールがある場合は
CGI::Application::Plugin として利用するのがお決まりのように見えます。
実際、それが推奨スタイルなんでしょうか?
Log::Handler が使いたかったのですが、
単純に use Log::Handler; して使うと何か不都合があるのでしょうか?
0334nobodyさん2008/04/15(火) 07:46:19ID:m7oSRbUq
再利用しやすいようにPluginにぶら下げてるだけなんじゃないの?
好きにしたらいいと思うよ
0335nobodyさん2008/04/15(火) 11:53:04ID:7+9bkjp8
ありがとうございます!
0336いしはら2008/04/15(火) 18:41:44ID:y4DgL3Q4
------------------------------------------------
☆簡易CTIサービス(1万5千円)
http://s1s.jp/CTI/


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


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

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

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

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

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

って書いてるんだから

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

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

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

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

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

こんな感じ。
03683582008/04/23(水) 09:11:49ID:???
>>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();
としてみましたが変わらずでした。
0369nobodyさん2008/04/23(水) 12:47:07ID:???
m_unit.plというライブラリがほしいんですがググっても出てきません
どこで手に入れる事ができるでしょうか?
0370nobodyさん2008/04/23(水) 13:05:00ID:???
>>369
ググっって出てくる奴とは違う物?
03712008/04/23(水) 13:08:34ID:???
ごめんなさい間違えました(><)
0372nobodyさん2008/04/24(木) 18:43:40ID:???
ABCXXXDEF
という文字列から
ABCとDEFを削除してXXXのみを表示させたい場合はどうすればよいのでしょうか?

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

print "$ansです\n"

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

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

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

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

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

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


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

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

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

foreach $number(@number){


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

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

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

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

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

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

例文を眺めればだいたい何がしたいのかが見えてくるかと。
英文は無理に読まなくてもよろしいかと。
0441nobodyさん2008/05/04(日) 20:22:15ID:???
pmという拡張子、ガクブル
0442nobodyさん2008/05/05(月) 14:08:42ID: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";


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

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

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

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

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

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

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

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

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

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


#!/usr/bin/perl

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

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

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

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

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

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

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

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

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

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

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

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

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

serach のとろを

s GD

としてくださいな

これでも出来なければ諦めてください
サポートしきれないです
0522nobodyさん2008/05/20(火) 01:25:53ID:???
http://pub.ne.jp/wakapon/?entry_id=82091
Perl 5.8ならなんか面倒そうなんだけどこれかな?
0523nobodyさん2008/05/20(火) 03:52:12ID: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に上げる事ができた。
ふう、疲れたぜ・・・・。
0524nobodyさん2008/05/20(火) 04:15:25ID:???
そうなんだお疲れちゃん
0525nobodyさん2008/05/20(火) 14:16:09ID:XrCi5l42
519です。
いろいろサポートいただいて、できました。
ほんとに感謝してます。ありがとうです。
0526nobodyさん2008/05/21(水) 00:33:37ID:???
phpのexplodeみたいに、
正規表現を使わずに高速に動作するsplitの代わりはないでしょうか?
0527nobodyさん2008/05/21(水) 01:39:24ID:???
substrでループさせる自前の関数でも作れば?
0528nobodyさん2008/05/21(水) 01:41:57ID:???
それって速いのかな。。
indexとsubstrを併用してちょっと試してみるか。
0529nobodyさん2008/05/21(水) 11:18:20ID:crauFAgn
モジュールが一切入っていないレンタルサーバで、xmlを読み込もうとしています。
ググってみると、どこもXMLとLWPというモジュールを読み込む事が前提になっているようなのですが、
何も無い状態でXML
05305292008/05/21(水) 11:19:42ID:???
すみません途中で送信してしまいました…orz

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

宜しくお願いします。
0531nobodyさん2008/05/21(水) 12:00:10ID:???
ソケット使ってゴリゴリ書くしか無いんじゃないかな
0532nobodyさん2008/05/21(水) 12:06:34ID:???
モジュールが一切入っていないレンタルサーバでソケットが使えるようにインストールされてる
とはとても思えないが・・
0533nobodyさん2008/05/21(水) 12:14:45ID:???
xmlそのものについても調べてる状態なんですが、
どうも事実上無理っぽいということですかね…orz
お騒がせしました、ありがとうございました。
0534nobodyさん2008/05/21(水) 13:46:16ID:???
php が動くなら php 普通にネットワーク経由でファイル開けるので php も考慮してみれば?
0535nobodyさん2008/05/21(水) 23:33:50ID:???
>>529,530
XMLを読み込むだけなら、XML::TreePPでXMLが読める。
別サイト上にあるXMLを読むならLWP等が必要。
0536nobodyさん2008/05/22(木) 08:42:14ID:???
質問です。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等試してみましたが上手く行きませんでした

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

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

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

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

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

通常データの受け取りは
$hoge=$cgi->param('namae');
セッションでの受け取りは
$hoge=$session->param('namae');
の間違いです。
0550nobodyさん2008/05/24(土) 14:04:47ID:???
>>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
05515432008/05/24(土) 14:05:03ID:CztaXqIN
cookieにセッションIDやもっておきたいデータ(今回の場合、お名前やメール)を記述しておき、
サーバ側から要求があった時点でクライアントはそのcookieのデータを受け渡す

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

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

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

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

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

 × >受け取るソースがsession.cgiだと認識してるのですが…
 ○ >データを受け渡す側のソースが>>543
05565432008/05/24(土) 14:19:38ID:CztaXqIN
すいません。もう少し勉強しなおしてきます。
みなさん、有難うございましたー・・・
05575432008/05/24(土) 14:23:19ID: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/>',


05585432008/05/24(土) 14:24:17ID: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

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

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

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

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

の流れがいるのでは?




自信ないけど
0561nobodyさん2008/05/25(日) 19:58:56ID:sAYmYKjS
perlのセッション管理はphpに比べるとかなりめんどい
もちろん細かく制御するには向いてるんだが始めとっつきにくいかもなー
0562nobodyさん2008/05/26(月) 13:29:09ID:???
>>561
>>543の質問を分かりやすくPHPで説明すると、
$_REQUESTの内容を$_SESSIONで受け取るにはどうしたらいいんですか?
ということ。
0563nobodyさん2008/05/26(月) 19:00:45ID:BXwqNwjP
すみません。質問です。
Global symbol "%in" requires explicit package name at C:/ApacheGroup/〜〜.cgi line 375, <DATA> line 855.
というソフトウェアエラーが出続けてるんですが。
どうすればいいでしょう。
どなたか教えてください〜。
0564nobodyさん2008/05/26(月) 19:09:34ID: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での保存が可能になるんでしょうか!
0565nobodyさん2008/05/26(月) 19:18:18ID:???
>>563
http://xn--lckja1b6r.jp/%47%6C%6F%62%61%6C%20%73%79%6D%62%6F%6C%20%20%72%65%71%75%69%72%65%73%20%65%78%70%6C%69%63%69%74%20%70%61%63%6B%61%67%65%20%6E%61%6D%65

>>564
http://xn--lckja1b6r.jp/%70%65%72%6C%20%67%7A%69%70
0566nobodyさん2008/05/26(月) 19:32:47ID:???
Archive perl でググればでてくるじゃないの
0567nobodyさん2008/05/26(月) 23:41:19ID:???
>>563
英語が読めないなら駱駝本を買うべきだ。
0568nobodyさん2008/05/27(火) 11:06:43ID:???
ラクダを漢字で書かれると困ります (><;)
0569nobodyさん2008/05/27(火) 19:27:42ID:???
{
$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;
}
をコンパクトにまとめたいが、バグが混入しそうでいやん。
0570nobodyさん2008/05/27(火) 19:44:24ID:???
{
my $global_foo = $foo;
my $global_bar = $bar;
$foo = shift || $global_foo;
$bar = shift || $global_bar;
}
0571nobodyさん2008/05/27(火) 19:55:45ID:???
>>569-570
$foo eq undef もたいがいだが
shift || $global_foo だと $_[0] が '0' の時に挙動変わるな。
0572nobodyさん2008/05/27(火) 20:06:24ID:???
{
my $global_foo = $foo;
my $global_bar = $bar;
$foo = defined( $_[0] ) ? $_[0] : $global_foo;
$bar = defined( $_[1] ) ? $_[1] : $global_bar;
}

こうか?
0573nobodyさん2008/05/27(火) 20:06:58ID:???
あ、三項演算子逆だ。すまん。
0574nobodyさん2008/05/27(火) 20:33:00ID:???
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サンクス、参考になります。
0575nobodyさん2008/05/27(火) 20:38:51ID:???
つーか、>>569だとまともに動かんよ。

初期化するためにmy使っちゃってるように見えるけど、
この場合、ブロックスコープになるから、
ブロック内の$foo, $barと、グローバル変数$foo, $barは別物になる。
0576nobodyさん2008/05/27(火) 20:54:18ID:???
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;
}
欲しい動作はこうかな…
0577nobodyさん2008/05/27(火) 20:56:48ID:???
いやいやいやいやw
「perl スコープ 変数」でググっみ。
0578nobodyさん2008/05/27(火) 21:53:15ID:???
全然わかってないわかってないwww
0579nobodyさん2008/05/27(火) 22:34:53ID:???
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
0580nobodyさん2008/05/28(水) 00:31:36ID:???
早くdefined-or演算子実装されないかな…
0581nobodyさん2008/05/28(水) 01:24:48ID:???
今日が今月の何週目か求めるにはどうしたらよいでしょうか
05825762008/05/28(水) 01:29:54ID:???
$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
05835762008/05/28(水) 01:32:06ID:???
$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が理解できず悩み中
0584nobodyさん2008/05/28(水) 01:34:02ID:???
ぎゃー、>>583張り間違えた

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

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

orz 120秒規制が若干きつい…
0585nobodyさん2008/05/28(水) 01:35:51ID:???
Date::Calc
0586nobodyさん2008/05/28(水) 01:46:51ID:???
>>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];
}
0587nobodyさん2008/05/28(水) 01:47:41ID:???
>>585
感動した ありがとう
05885762008/05/28(水) 01:58:37ID:???
>>586
サブルーチン冒頭にて、引数リスト > デフォルト値(グローバル変数の値とか)
の優先順でmy変数値を設定したいことはよくあるから、
perlなら… perlならきっとすごくスマートに書く方法があるに違いない…

という夢を見たけど、幻だったみたいですね…
変数ひとつずつシコシコとunless definedを当てることにします。
0589nobodyさん2008/05/28(水) 02:00:25ID:???
いや、日本語でおk
お前の望むようなことは確実にできると思うんだけど、
なにぶん言いたいことがよく分からんw
0590nobodyさん2008/05/28(水) 02:16:48ID:???
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をシンプルかつ可読性も保ったまま実現できるんだが。
これじゃいかんの?
0591nobodyさん2008/05/28(水) 02:25:18ID:???
>>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);
}

みなさんありがとうございました。
0592nobodyさん2008/05/28(水) 02:30:59ID:???
殺してぇ……。日記じゃねぇんだよ。
0593nobodyさん2008/05/28(水) 06:17:52ID:???
>>580
もう実装されてるよ?
http://search.cpan.org/dist/perl/pod/perl5100delta.pod#Defined-or_operator
0594nobodyさん2008/05/28(水) 06:40:31ID:???
>>576みたいに、自分のプライド保つために
当初の目的をすり替えて、自分は違うもの作ってました的な発言するやつは質問にくるなよ。

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

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

ただ、このスレッドにはしばらく書き込みを自粛します。さよなら。
0596nobodyさん2008/05/28(水) 10:11:34ID:???
典型的な"隠す人"だったか。
05975902008/05/28(水) 10:39:10ID:???
うわ、ちょっと離れたスキにすげぇ慇懃無礼なこと書いてやがる。
目的も明確にせず、そのへんが限界て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;
}
0598nobodyさん2008/05/28(水) 11:40:59ID:???
>595みたいなやつっているよね
言葉遣いが丁寧なだけで、いっぱしの大人だと思ってる人。
0599nobodyさん2008/05/28(水) 12:04:01ID:???
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を思い出した。
0600nobodyさん2008/05/28(水) 13:55:09ID:???
>>593
そいえば5.10でてるんだっけ(汗
RHELとCentOSしか使ってないからすっかり忘れてました。
0601nobodyさん2008/05/28(水) 15:44:58ID:???
5.10って絶対分かりづらいよw
5.8より昔のリリースだとしか思えない。
0602nobodyさん2008/05/28(水) 15:51:58ID:???
Ver 5.008008
Ver 5.010000
こう書けばよいのか?
0603nobodyさん2008/05/28(水) 16:09:29ID:???
5.1の方が新しいんですか?
知らなかったorz
0604nobodyさん2008/05/28(水) 16:21:25ID:???
5.10.0 > 5.9.5 > 5.8.8 >> 5.1.0
苦肉の策なんだろうな……。
0605nobodyさん2008/05/28(水) 17:55:49ID:???
perl6ってどうなったん?
0606nobodyさん2008/05/28(水) 19:03:22ID:???
>>605
parrotの新しいのが最近でた気が・・・
0607nobodyさん2008/05/28(水) 20:28:19ID:???
ある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進表記でもサイダー表記の
どっちでも構いません。
0608nobodyさん2008/05/28(水) 20:34:04ID:???
ttp://pc11.2ch.net/test/read.cgi/tech/1086143976/491-590
の543-544及び「IP pack unpack perl」でググれ。
06096072008/05/28(水) 20:59:40ID:???
>>608
あり♪
明日、見てみるよん
06105972008/05/28(水) 21:17:34ID:???
>>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でやってみたわけだ。
なんか美しい方法あればいいんだけどなぁ。
0611 ◆TWARamEjuA 2008/05/28(水) 21:20:10ID:???
(´-`).。oO(Net::CIDRでよさそうな。。。)
06125972008/05/28(水) 21:26:18ID:???
my @temp = ( $#array1 <=> $#array2 ) == -1 ) ? ( 0..$#array2 ) ; 0..$#array1;
こんな前処理してから、>>599のmap対象配列に、( 0..\$temp ) って感じかなぁ?

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

@res = map{ $_ + 10 } (1,2,3,4,5) ;
print join("\n",@res);
---結果---
11
12
13
14
15
0619 ◆TWARamEjuA 2008/05/29(木) 07:02:31ID:???
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
って出るかと思う。
0620nobodyさん2008/05/29(木) 08:23:18ID:???
>>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"; '

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

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

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

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

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

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

ひとまず車輪の再発明は大好き♪
0629nobodyさん2008/05/30(金) 02:09:30ID:???
曲芸はほどほどに
0630nobodyさん2008/05/30(金) 08:17:40ID:???
出来た物が車輪じゃない上に使えないのならただの無駄
0631nobodyさん2008/05/30(金) 10:14:07ID:???
車輪を作ろうとしたら鎖鎌が出来ちゃった感じだな
0632nobodyさん2008/05/30(金) 10:19:32ID:???
まーmapは便利だってことだ
0633nobodyさん2008/05/30(金) 11:57:18ID:???
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はよくわかりません。
0634nobodyさん2008/05/30(金) 12:22:33ID:???
>>632
だれも「mapが不便」なんて言ってないがな
明らかにバッドノウハウなコードを曝してる奴をくさしてるだけで
0635nobodyさん2008/05/30(金) 12:23:13ID:???
すみません。自己解決しました。use encoding "utf8";をコメントアウトして
utf8::is_utf8($doc->toString) ? print encode('utf-8', $doc->toString) : print $doc->toString;
とすればいいみたいです。utf8フラグというのが関係しているみたいなので、
調べてみます。おさわがせしました。
0636nobodyさん2008/05/30(金) 12:40:26ID:???
>>635
これはマジメに調べまくった方がいい。
慣れるまでPerl5.8以降でハマる最大の原因。
0637nobodyさん2008/05/30(金) 12:50:11ID:???
BOM付けてたりして・・・
0638nobodyさん2008/06/01(日) 07:19:24ID:???
BOMBなら付いてますw
0639nobodyさん2008/06/02(月) 12:34:35ID:???
Wed, 12 Mar 2008 21:20:11 GMT
Last-Modified↑これをtimeの値に変換する方法を教えてください。
3600秒以内とかの判定に使いたいので。
0640nobodyさん2008/06/02(月) 12:49:16ID:???
>>639
timelocal
0641nobodyさん2008/06/02(月) 12:57:39ID:???
>>640
ありがとうございました!
0642nobodyさん2008/06/02(月) 13:51:21ID:???
こんな感じで出来たのですが凄く格好悪いです。
$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;
}
0643nobodyさん2008/06/02(月) 14:47:28ID:???
>>642
%mons = (
Jan => 1, Feb => 2, Mar => 3, Apr = 4, # ……以下省略
);
$mon = $mons{$mon};

とかどうよ?
0644nobodyさん2008/06/02(月) 15:22:18ID:???
>>643
ありがとうございます。
連想配列は普段全く使わないので、この機会に試してみます!
0645nobodyさん2008/06/02(月) 15:44:50ID:???
>>643は、どうせ後で1引くのに、どうしてわざわざ1足すのさ?w
0646nobodyさん2008/06/02(月) 16:15:30ID:???
>>645
ほんとだ><
お前頭いいな
すみません><
0647nobodyさん2008/06/02(月) 17:46:33ID: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 です。
0648nobodyさん2008/06/02(月) 17:51:49ID:???
Template.pmをHTMLというディレクトリを作ってそこにいれる
0649nobodyさん2008/06/02(月) 18:08:23ID: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.
0650nobodyさん2008/06/02(月) 18:17:18ID:???
CPAN にモジュールの関連性とか書いてなかったっけ?
0651nobodyさん2008/06/02(月) 18:18:22ID:???
関連性とかじゃなくて依存のこと
0652nobodyさん2008/06/02(月) 18:25:00ID:VCfcjQkN
http://q.hatena.ne.jp/mobile/1195733487
↑必要としているモジュールは違うものの、
この人と同じ状況なのかな、と思うんですがどう思いますか?

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

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

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

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

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

ついでに、multipart/form-dataで送られてきたデータの扱い方を
まとめてあるサイトとかありましたら教えてほしいです。
0664nobodyさん2008/06/03(火) 01:01:53ID:???
multipart/form-data って文字があるのか application/x-www-form-urlencoded って文字があるのかで簡単に判別着く
multipart/form-data の処理は CGI.pm 使ってね♪
0665nobodyさん2008/06/03(火) 01:12:56ID:???
>>663
CGI.pm ならどちらの形式でも意識せず受け取れる。
http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod

自前実装したいのなら
http://www.studyinghttp.net/cgi-bin/rfc.cgi?3875#Sec8.2
http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/interact/forms.html#h-17.13.4.1
http://www.studyinghttp.net/cgi-bin/rfc.cgi?2388
0666nobodyさん2008/06/03(火) 01:24:31ID:etSjPPZK
>>665
ありがとう!
0667nobodyさん2008/06/03(火) 01:58:53ID:???
>>659
テンプレートエンジン、自分で作るという手もある。
そんなに難しくないよ。
Compositeパターンでも使えば。
0668nobodyさん2008/06/03(火) 09:41:38ID:???
>>659
HTML をふつうに書く
HTML なかに <%BODY%> とか、挿入場所を示す識別子をいくつか用意して書き込む
プログラムからテンプレート HTML を読み込む
正規表現で置換

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

自分は普通のエディタ (関数へのジャンプとか無くて色分けだけ) なので
まったく違う処理はファイル分けてる
0672nobodyさん2008/06/03(火) 17:01:51ID:???
多分聞きたい事って、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の呼び出し回数倍増えるよ。

そういう事じゃなくて??
0673nobodyさん2008/06/03(火) 17:44:51ID:???
>>670
俺それやってる
wikiみたいに書けるテキストファイルを自動で携帯/PCに最適化してValid XHTML出力する、みたいな。
0674nobodyさん2008/06/03(火) 17:56:29ID:???
bloxsomだっけ?
0675nobodyさん2008/06/03(火) 19:41:27ID:???
perl関連のプロジェクトは企画倒れが本当に多いね。
企画倒れというより、制作者が途中で飽きて、ブームになっても、そのまま放置……みたいな。
かのCPANだって、一部のモジュール以外は、姥捨山みたいになってる。
古いモジュールに、パッチ送ってもメール不達とか多すぎるんだよ!
0676nobodyさん2008/06/03(火) 20:52:43ID:???
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 が出てくるのは判っています。
0677nobodyさん2008/06/03(火) 21:13:48ID:???
[1]->'#text'

ダンプしろよ
0678nobodyさん2008/06/03(火) 21:21:10ID:???
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}
とアクセスしなくてはいけない。オプションで回避できるけど。
06796702008/06/03(火) 22:25:48ID:etSjPPZK
言葉が足りんでした。スミマセン。

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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

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


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

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

この意味が分からない次元じゃ、到底ムリ。
0703nobodyさん2008/06/07(土) 23:36:39ID: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って自分でコンパイル?でしたっけができないとダメなものなのでしょうか。
0704nobodyさん2008/06/07(土) 23:53:12ID:8brPzE2o
すいません
getHTTPの

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

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

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

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

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

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

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

ワロタ
0710nobodyさん2008/06/08(日) 18:41:29ID: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");

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

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

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

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

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

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

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

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



0716nobodyさん2008/06/08(日) 22:10:54ID:???
>>715
ありがとうございます。
スライス操作調べてみました。SELECTでLIMITつければいいんですかね?
これで必要な分だけのフェッチですみましたが、どうも時間がかかるようです。
ちょっと複雑なSQL文なんでそっちのほうがボトルネックのようですorz
SQL文のほうを考え直そうと思います。
0717nobodyさん2008/06/09(月) 12:35:45ID:???
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文はスレ違い。
0718nobodyさん2008/06/09(月) 15:41:11ID:???
もうメンドクセーから、bind_columns()とfetch()にすれば?
生えーぞ。
0719nobodyさん2008/06/09(月) 16:00:10ID:???
生いいよね
0720nobodyさん2008/06/09(月) 19:29:41ID:BYZvhcIN
LIMITしらねーとか そんなレベルなら
其の都度ひっかかって質問するより勉強したほうがはやいよ
リファレンスページみっけてプリントアウトしとけ
0721nobodyさん2008/06/09(月) 23:24:50ID:???
122
11
11000
↑これをソートすると

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

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

*** 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で判断するしかないのでしょうか?
0725nobodyさん2008/06/13(金) 09:17:11ID:???
>>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
(「ファイル・アップロード・フィールドの作成」の項)
0726nobodyさん2008/06/13(金) 10:25:57ID:???
@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をどのように使ったら良いのか分らなくなりました
よろしかったらどのように表記したら良いのか教えてください
0727nobodyさん2008/06/13(金) 10:51:23ID:???
>>726
>>3
07287262008/06/13(金) 11:00:28ID:???
ありがとうございます
Perlメモはいつも参考にさせて頂いてまして
・複数の項目でソートする
・自分で決めた順番でソートする
の応用でなんとかなるかと思ったのですが
どうにも分らずこちらでお伺いしました次第です
どの辺りを応用すればよろしいでしょうか?
07297262008/06/13(金) 11:18:24ID:???
・複数の項目でソートするを応用して(まんまかも)
先にmapでポイントの配列を作る事でなんとか出来ました

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

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

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

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

■サーバー

#!/usr/local/bin/perl

require "example.cgi";

■ローカル

#!C:/perl/bin/perl

require "example.cgi";


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

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

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

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

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

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


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

みたいな感じなら、submit に文字列を仕込むという方法が。
0750nobodyさん2008/06/16(月) 10:59:18ID:???
でも文字化けという問題が...
ラジオかセレクト使えばいいと思う。
それかAjaxか
0751nobodyさん2008/06/16(月) 11:58:23ID:???
>>745
普通はユニットテスト用のロボット作るんじゃね?
使ってないけど、モジュールも何種類かあるはず。
0752nobodyさん2008/06/16(月) 12:17:52ID:???
じゃあ、まずは画面を見て情報を処理しキーボード操作する
ロボットのAIの開発からしなきゃだな。
0753nobodyさん2008/06/16(月) 12:26:02ID:???
>>752
そのAIのデバッグはどうするんですか。
0754nobodyさん2008/06/16(月) 12:53:21ID:???
ニワトリが先か タマゴが先か
0755nobodyさん2008/06/16(月) 23:32:06ID:???
真ん中をとってヒヨコが先だ
0756nobodyさん2008/06/17(火) 00:45:20ID:???
>>745
CGI.pm を使うなら
use CGI qw(-debug);
0757nobodyさん2008/06/17(火) 10:41:46ID:???
>>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=
0758nobodyさん2008/06/17(火) 12:33:48ID:???
>>757
500が帰ってきたとき、どこが悪いかどう見当つけてるかってはなしでしょ
0759nobodyさん2008/06/17(火) 14:47:07ID:???
なんでTest関係のモジュール使わないの?マゾなの?
0760nobodyさん2008/06/17(火) 16:37:40ID:???
世の中には君の環境と違う環境の人もいるのだよ
0761nobodyさん2008/06/17(火) 18:26:54ID:???
> 世の中には君の環境と違う環境の人もいるのだよ

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

意地はってないで、「詳しいことはわかりません!!」っていうのがオトナだよ
0763nobodyさん2008/06/17(火) 18:53:23ID:???
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=GFRC,GFRC:2007-04,GFRC:ja&q=perl+%e3%83%81%e3%82%a7%e3%83%83%e3%82%af
0764nobodyさん2008/06/18(水) 12:33:38ID:???
つまらん('A`)1
0765nobodyさん2008/06/18(水) 14:54:32ID:???
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 できちゃったりするもんでしょうか?
0766nobodyさん2008/06/18(水) 15:02:39ID:???
>>765
一般的かどうかは知らんが、俺は JEncode::_func_getcode() みたいな
ラッパーを書いて使っている。
http://www.donzoko.net/source/JEncode/JEncode.pm
0767nobodyさん2008/06/18(水) 15:25:31ID:???
>>766
ありがとうございます。
_func_getcode と _ambiguous、_test_mojicode を見ながら実装します。
0768nobodyさん2008/06/20(金) 01:13:32ID:???
@X0(a,b,c);
@X1(d,e,f);
と二つリストを作って、
$Y = int(rand(2));
で$Yに0か1を入れて、それに対応したリストを使いたいのですが、どうすればいいですか?
print "$X"$Y"[1]";
のような感じにしたいのですが…。
0769nobodyさん2008/06/20(金) 01:41:21ID:???
print @{'X'.$Y};
0770nobodyさん2008/06/20(金) 01:43:48ID:???
あ、スライスか
print @{'X'.$Y}[1];
0771nobodyさん2008/06/20(金) 01:53:59ID:???
>>770
カッコイー

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

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

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

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

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

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

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

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

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

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

・母親は受験勉強をする息子の学力向上のためにフェラチオをする
・日本人女性の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
0800nobodyさん2008/06/29(日) 21:21:31ID:ib7dTQ8m
シンタックスハイライト用のモジュールでオススメってありますか?
Syntax::Highlight::Engine::Kateはちょっと好みじゃなかったのと、
Text::Highlightは今のところ使い方が分からないの。
0801nobodyさん2008/06/29(日) 21:37:01ID:???
Text::VimColor
0802nobodyさん2008/06/29(日) 23:14:30ID:???
ありがとう。日本語が上手くいかず。
0803nobodyさん2008/07/03(木) 04:34:06ID: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/
0804nobodyさん2008/07/08(火) 20:37:38ID:???
文字コードを強制的に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に変換するのか教えてください。
0805nobodyさん2008/07/08(火) 20:38:36ID:???
あ、忘れてました。
perlのバージョンは5.8.8です。
0806nobodyさん2008/07/08(火) 20:44:53ID:???
jcode.pm や Unicode.pm をインストール出来ない環境なので、
それも抜きだと jcode.pl で convert するくらいしか他に方法が無い?
0807nobodyさん2008/07/08(火) 21:32:37ID:???
>>804
コードがそれだけなら入ってくる文字列をdecodeしなきゃだめだよ
0808nobodyさん2008/07/08(火) 23:49:39ID:???
>>804
encode()の第2引数は、デコード済みの文字列でないとだめでしょ。
encode(ocode, decode(icode, str))
ocode…出力する文字コード
icode…strの文字コード
str…入力する文字列
0809nobodyさん2008/07/12(土) 09:51:37ID:???
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;
これだと結合できない。
仕様なのか俺がアフォなのか誰か教えれ!
08108092008/07/12(土) 11:19:24ID:???
事故レス
何となくできたわ。
お騒がせしますた。
0811nobodyさん2008/07/12(土) 18:05:43ID:???
>>810
お騒がせしたと思うのなら、どうやったらできたのか書くように。
同じ悩みで検索でたどりついた人はまた同じ質問をするでしょ?
0812nobodyさん2008/07/12(土) 18:28:41ID:???
>>811
もうちょっと優しく書いて欲しいな。
0813nobodyさん2008/07/13(日) 09:44:35ID:SNV4Eg13
Perlでクローラーを作りたくて、いろいろ勉強しているのですが、
下記3行目のコードの意味がどうしてもわかりません。。
my @extract_links; #パーズ中に抽出されたURL
my $base = $response->base;
@extract_links = map { $_ = url( $_, $base )->abs; } @extract_links;

Perl初心者にもわかるようなコードに書き直すことはできますか?
何を勉強したら、このようなプロっぽいコードが書けるようになるのかも知りたいです。。
0814nobodyさん2008/07/13(日) 17:38:13ID:???
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の中身が全部絶対パスになって返ります。
0815nobodyさん2008/07/13(日) 23:01:57ID:???
>>813
プロっぽいどころか、「どこの素人が書いた?」って言われるコード
だと思うが、、、何で無意味な代入をするかねぇ

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

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

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

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

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

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

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

みたいなところなんで、

「いきなり実行する」

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

&は消える。

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

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

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

$salt =~ s/[^\.-z]/\./go;
0849nobodyさん2008/07/19(土) 10:33:23ID:???
5本の指が入る Perl hacker に聞けばいいだろ。
0850nobodyさん2008/07/19(土) 18:10:50ID:???
>>848
s///
[A-Z]
と分けて考えないとダメ。
0851nobodyさん2008/07/19(土) 18:39:57ID:???
>>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.
0852nobodyさん2008/07/19(土) 20:43:57ID:???
>>850-851

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

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

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


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

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

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

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

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

なぜ、mod_perlでは動作しないのかは、よくわかりません。
誰か教えて下され・・・。
0863nobodyさん2008/07/19(土) 23:48:52ID:???
>>862
coderepos かどこかにソース晒せば、5本の指が入る Perl hacker に教えてもらえるよ。
0864nobodyさん2008/07/20(日) 02:16:15ID:???
>>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の内装知ってるわけではないので、詳しくはわかりません。)
0865nobodyさん2008/07/20(日) 03:26:59ID:???
孫プロセスでやればいいだけの話だと思うが
0866nobodyさん2008/07/20(日) 03:56:52ID:???
gearman とか使えばいいんじゃね。
0867nobodyさん2008/07/20(日) 06:30:33ID:???
>>855
ググってもよく分からんのですよ。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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;
0888nobodyさん2008/07/22(火) 13:31:20ID:???
telnet 相手先 80でいいじゃないか。
わざわざそんなことせんでも。。。
0889nobodyさん2008/07/22(火) 14:50:40ID:???
HEAD 使ってあげればいいのに・・・
0890nobodyさん2008/07/22(火) 15:02:22ID:???
仕様が不十分な以上はどれが良いとも決められないな
0891nobodyさん2008/07/22(火) 18:38:20ID:???
CGIのための実践入門Perl
技術評論社
アーク・シンク・タンク 三島 俊司

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

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

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

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

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

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

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

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

foreach 変数 リスト {



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

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

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

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

併せて、ちったあ試してみてくれよ、とお願いしてみます。
>>884 にテストの例も挙げています、ってーか自分の至れり尽くせりっぷりに泣けてきた。
0902nobodyさん2008/07/23(水) 02:20:55ID:???
>>896
秀丸+マクロでおk
0903nobodyさん2008/07/23(水) 07:57:47ID:???
初心者スレで無ければほっとくんだが…
>>892
python ですら実装してしまった三項演算子にケチを付けてどうする。
>>894
\a はアラームじゃねえか? \A だろ?しかも \A と ^ は挙動が違うし。
>>895
perl5.10 にしろ。指定が無い場合は勝手に文字列か数値か決めてソート
してくれるらしい。
0904nobodyさん2008/07/23(水) 08:56:46ID:???
>>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
0905nobodyさん2008/07/23(水) 10:47:15ID:???
おもいっくそ文字列じゃないw
0906nobodyさん2008/07/23(水) 12:14:10ID:???
>>896
Eclipse
0907nobodyさん2008/07/23(水) 21:52:41ID:???
>>906 糞重い
0908nobodyさん2008/07/23(水) 22:01:45ID:???
Open Perl IDEはどう?

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

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

foreach 変数 リスト {



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


>>949-950
うん。
タイムアウト付きでselectしてconnect自体は完了してもconnectに成功したかどうかを調べる方法を知らなかったんだ
0953nobodyさん2008/07/30(水) 18:10:55ID:???
>>952
linuxの日本語マニュアルだからたぶんJMだね
0954nobodyさん2008/07/30(水) 18:42:46ID:???
なんという質問の後出し。
0955nobodyさん2008/07/31(木) 01:58:02ID: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にしてもヘッダが
オカシイ以外は正しく動いている風です。

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

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

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


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

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

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

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

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

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

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

って書いたら

Use of implicit split to @_ is deprecated

て言われました。どう書くのが今時ですか?
0979nobodyさん2008/08/06(水) 06:35:34ID:???
>>978
splitをscalarで使うと文句を言われるから、tr/\///などで数える方法に切り替える。
あと、シュウォーツ変換を使うと効率が上がる。
0980nobodyさん2008/08/06(水) 12:03:05ID:???
「今時」てえのは知らんが、やり方なんざ山程あるぜ。
@_ のなんたるかを理解してるなら
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 ;
0981nobodyさん2008/08/06(水) 12:28:12ID:???
山程あるならたった4例だけじゃなくて山のほうを紹介してよ
0982nobodyさん2008/08/06(水) 12:40:22ID:???
>>981
ググれ
0983nobodyさん2008/08/06(水) 13:43:13ID:???
「今時」を考えると効率を多少犠牲にしても
見やすく書いたほうがいいんじゃないかな
0984nobodyさん2008/08/06(水) 13:55:55ID:+ukCpM4+
今時でもファイルが万あると考慮すべき問題です
DISK I/O のコストを甘く見ないほうがいい
0985nobodyさん2008/08/06(水) 14:03:20ID:???
$a = @aでいいものを$a=scalar @aとか$a= @{[ @a ]}とか$a=sub{@_}->(@a)とかバカだろ。
そういうのはTMTOWTDIとはいわない。
0986nobodyさん2008/08/06(水) 15:45:53ID:???
978〜の流れでDISK IOなんか発生してないし
犠牲にするのが多少じゃないんだったら考慮するのはあたりまえじゃ
0987nobodyさん2008/08/06(水) 17:10:27ID:???
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 ;

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

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

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

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

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

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

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

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

         .∧__,,∧
        (´・ω・`)
         (つ終と)
         `u―u´
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。