[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 07/13 10:37 / Filesize : 211 KB / Number-of Response : 804
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:nobodyさん mailto:sage [2008/02/25(月) 19:25:51 ID:???]
Perlのコーディングで困ってる人のスレです。

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

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

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

お勧めサイトは >2 以降

前スレ pc11.2ch.net/test/read.cgi/php/1189939783/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/


596 名前:nobodyさん mailto:sage [2008/05/28(水) 10:11:34 ID:???]
典型的な"隠す人"だったか。

597 名前:590 mailto:sage [2008/05/28(水) 10:39:10 ID:???]
うわ、ちょっと離れたスキにすげぇ慇懃無礼なこと書いてやがる。
目的も明確にせず、そのへんが限界てw
そもそも次の疑問に移ったなら、その過程を説明するのが回答者への最低限の礼儀だろ。
社会出て苦労するよ。

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

sub merge_argument_and_default {
 my ($argument, @default) = @_;
 my %count;
 $count{$_} = $default[$_] for( 0..$#default );
 $count{$_} = ${ $argument }[$_] for( 0..$#{ $argument } );
 return map { $count{$_} } sort keys %count;
}

598 名前:nobodyさん mailto:sage [2008/05/28(水) 11:40:59 ID:???]
>595みたいなやつっているよね
言葉遣いが丁寧なだけで、いっぱしの大人だと思ってる人。

599 名前:nobodyさん mailto:sage [2008/05/28(水) 12:04:01 ID:???]
sub merge_argument_and_default { map{ defined $_[0][$_] ? $_[0][$_] : $_[$_ + 1] ;} 0 .. $#{$_[0]} ; }

>>598
ガキなの見え見えなんだよねw
ttp://www2.atpages.jp/mirror/2ch/perl/prog/read.php/1157874614/
の595を思い出した。

600 名前:nobodyさん mailto:sage [2008/05/28(水) 13:55:09 ID:???]
>>593
そいえば5.10でてるんだっけ(汗
RHELとCentOSしか使ってないからすっかり忘れてました。


601 名前:nobodyさん mailto:sage [2008/05/28(水) 15:44:58 ID:???]
5.10って絶対分かりづらいよw
5.8より昔のリリースだとしか思えない。

602 名前:nobodyさん mailto:sage [2008/05/28(水) 15:51:58 ID:???]
Ver 5.008008
Ver 5.010000
こう書けばよいのか?

603 名前:nobodyさん mailto:sage [2008/05/28(水) 16:09:29 ID:???]
5.1の方が新しいんですか?
知らなかったorz

604 名前:nobodyさん mailto:sage [2008/05/28(水) 16:21:25 ID:???]
5.10.0 > 5.9.5 > 5.8.8 >> 5.1.0
苦肉の策なんだろうな……。



605 名前:nobodyさん mailto:sage [2008/05/28(水) 17:55:49 ID:???]
perl6ってどうなったん?

606 名前:nobodyさん mailto:sage [2008/05/28(水) 19:03:22 ID:???]
>>605
parrotの新しいのが最近でた気が・・・

607 名前:nobodyさん mailto:sage [2008/05/28(水) 20:28:19 ID:???]
あるIPアドレスが変数$ipに格納してあります。
この$ipが存在するか、あるテキストファイル(ip.txt)を読んで
チェックしています。以下は例です。

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

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

ip.txtに

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


簡単にいうと、あるIPアドレスが
サブネットマスクで指定してある
10進表記またはサイダー表記に
マッチするか判定したいのです。
ip.txtは10進表記でもサイダー表記の
どっちでも構いません。

608 名前:nobodyさん mailto:sage [2008/05/28(水) 20:34:04 ID:???]
ttp://pc11.2ch.net/test/read.cgi/tech/1086143976/491-590
の543-544及び「IP pack unpack perl」でググれ。

609 名前:607 mailto:sage [2008/05/28(水) 20:59:40 ID:???]
>>608
あり♪
明日、見てみるよん

610 名前:597 mailto:sage [2008/05/28(水) 21:17:34 ID:???]
>>599
終わった話題なんだけど、ちょっと気になった。
めんどくさかったら、スルーして。

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

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

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

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

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

だから、「配列の重複値をハッシュを利用してマージ」の応用みたいなことを>>597でやってみたわけだ。
なんか美しい方法あればいいんだけどなぁ。

611 名前: ◆TWARamEjuA mailto:sage [2008/05/28(水) 21:20:10 ID:???]
(´-`).。oO(Net::CIDRでよさそうな。。。)

612 名前:597 mailto:sage [2008/05/28(水) 21:26:18 ID:???]
my @temp = ( $#array1 <=> $#array2 ) == -1 ) ? ( 0..$#array2 ) ; 0..$#array1;
こんな前処理してから、>>599のmap対象配列に、( 0..\$temp ) って感じかなぁ?

エレガントさには欠けるけど、これが可読性保つギリギリかな?

613 名前:597 mailto:sage [2008/05/28(水) 21:28:46 ID:???]
動作確認してないからtypoしまくり。まぁ分かるよね?(苦笑

614 名前:607 mailto:sage [2008/05/28(水) 21:31:18 ID:???]
>>611
私へのレスですね。
明日調べてみます



615 名前:599 mailto:sage [2008/05/28(水) 22:23:24 ID:???]
>>610
ああ、
@array1 = ( undef, undef ) ;
は考えてたけども、それは想定してなかったw
>>612の解で良いんじゃね? 助長を厭わないならば、
map{ 略 } 0 .. $#{$_[0]} , 0 .. $#_ - 1 ;
っつー荒技もw
自分のスクリプトじゃ絶対やんないけどね。

616 名前:599 mailto:sage [2008/05/28(水) 22:27:21 ID:???]
>>615
s/助長/冗長/

617 名前:nobodyさん mailto:sage [2008/05/29(木) 03:05:45 ID:???]
mapがいまいち理解し切れなくて使ってないんだが覚えとくべき?
覚えると便利そうだけど。

618 名前:nobodyさん mailto:sage [2008/05/29(木) 03:45:40 ID:???]
やってることは、forやforeachと変わらん。
違うっていえば、{}の中を、引数リストのそれぞれの要素で実行した結果をリストとして返すってとこか。
かなり便利な局面もある。覚えとくべきだとは思う。

@res = map{ $_ + 10 } (1,2,3,4,5) ;
print join("\n",@res);
---結果---
11
12
13
14
15

619 名前: ◆TWARamEjuA mailto:sage [2008/05/29(木) 07:02:31 ID:???]
my $Now_Date = sprintf qq|%04d/%02d/%02d %02d:%02d|, map {
$_->[0] += 1900;
$_->[1]++;
@$_;
}[(localtime)[5,4,3,2,1]];

2008/05/28 07:02
って出るかと思う。

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

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



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

\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

622 名前:nobodyさん mailto:sage [2008/05/29(木) 17:53:57 ID:???]
0-9

623 名前:607 mailto:sage [2008/05/29(木) 17:54:42 ID:???]
すみません。
\dは数字でした。
申し訳ない

624 名前:607 mailto:sage [2008/05/29(木) 18:10:05 ID:???]
またまたお願いします。

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

$hoge =~ /\//



625 名前:607 mailto:sage [2008/05/29(木) 18:11:58 ID:???]
すんません

\/で、いけるみたいです。
お騒がせしました。

626 名前:nobodyさん mailto:sage [2008/05/29(木) 18:15:31 ID:???]
$hoge =~ m(/);

すこしは綺麗?


627 名前:nobodyさん mailto:sage [2008/05/29(木) 18:19:11 ID:???]
>>617だけどレスありがとう。
シュワルツ変換とかまだいまいち理解できないけど良さそうだね。
sortは結構使うから思い処理の部分で使うのはいいかも。
でも問題は後で読み直して何してるか理解できなくなりそうな所だな。

628 名前: ◆TWARamEjuA mailto:sage [2008/05/29(木) 20:45:58 ID:???]
>>620
つっこみおおきに♪
mapを覚えちゃってからどんどん斜め上に逝っちゃいました。

ひとまず車輪の再発明は大好き♪

629 名前:nobodyさん mailto:sage [2008/05/30(金) 02:09:30 ID:???]
曲芸はほどほどに

630 名前:nobodyさん mailto:sage [2008/05/30(金) 08:17:40 ID:???]
出来た物が車輪じゃない上に使えないのならただの無駄

631 名前:nobodyさん mailto:sage [2008/05/30(金) 10:14:07 ID:???]
車輪を作ろうとしたら鎖鎌が出来ちゃった感じだな

632 名前:nobodyさん mailto:sage [2008/05/30(金) 10:19:32 ID:???]
まーmapは便利だってことだ

633 名前:nobodyさん mailto:sage [2008/05/30(金) 11:57:18 ID:???]
XML::DOMを使ってXHTMLに広告を挿入するCGIを書いたのですが、use encoding "utf8";
を書くとローカルで文字化けしてしまいます。これをコメントアウトすると
XREA.COMのサーバ上でScript Errorが発生してしまいます(しかもエラーログが見られない)。

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

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

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

# 広告挿入処理

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

ローカルの環境はUbuntu 8.04 + Perl 5.8.8 + Apache 2.2.8、
XREA.COMはよくわかりません。

634 名前:nobodyさん mailto:sage [2008/05/30(金) 12:22:33 ID:???]
>>632
だれも「mapが不便」なんて言ってないがな
明らかにバッドノウハウなコードを曝してる奴をくさしてるだけで



635 名前:nobodyさん mailto:sage [2008/05/30(金) 12:23:13 ID:???]
すみません。自己解決しました。use encoding "utf8";をコメントアウトして
utf8::is_utf8($doc->toString) ? print encode('utf-8', $doc->toString) : print $doc->toString;
とすればいいみたいです。utf8フラグというのが関係しているみたいなので、
調べてみます。おさわがせしました。

636 名前:nobodyさん mailto:sage [2008/05/30(金) 12:40:26 ID:???]
>>635
これはマジメに調べまくった方がいい。
慣れるまでPerl5.8以降でハマる最大の原因。

637 名前:nobodyさん mailto:sage [2008/05/30(金) 12:50:11 ID:???]
BOM付けてたりして・・・

638 名前:nobodyさん mailto:sage [2008/06/01(日) 07:19:24 ID:???]
BOMBなら付いてますw

639 名前:nobodyさん mailto:sage [2008/06/02(月) 12:34:35 ID:???]
Wed, 12 Mar 2008 21:20:11 GMT
Last-Modified↑これをtimeの値に変換する方法を教えてください。
3600秒以内とかの判定に使いたいので。

640 名前:nobodyさん mailto:sage [2008/06/02(月) 12:49:16 ID:???]
>>639
timelocal

641 名前:nobodyさん mailto:sage [2008/06/02(月) 12:57:39 ID:???]
>>640
ありがとうございました!

642 名前:nobodyさん mailto:sage [2008/06/02(月) 13:51:21 ID:???]
こんな感じで出来たのですが凄く格好悪いです。
$mon = 1 if $mon eq 'Jan';とか。
スマートな例があったら参考の為に見せてください。

sub last_modified {
my $time = shift;
my($day, $mon, $year, $hour, $min, $sec);
if ($time =~ /\w+, (\d+) (\w+) (\d+) (\d+):(\d+):(\d+) GMT/) {
($day, $mon, $year, $hour, $min, $sec) = ($1, $2, $3, $4, $5, $6);
$mon = 1 if $mon eq 'Jan';
$mon = 2 if $mon eq 'Feb';
$mon = 3 if $mon eq 'Mar';
$mon = 4 if $mon eq 'Apr';
$mon = 5 if $mon eq 'May';
$mon = 6 if $mon eq 'Jun';
$mon = 7 if $mon eq 'Jul';
$mon = 8 if $mon eq 'Aug';
$mon = 9 if $mon eq 'Sep';
$mon = 10 if $mon eq 'Oct';
$mon = 11 if $mon eq 'Nov';
$mon = 12 if $mon eq 'Dec';
} else {
die "Error: $time\n";
}
$time = timelocal($sec,$min,$hour,$day,$mon-1,$year);
return $time;
}


643 名前:nobodyさん mailto:sage [2008/06/02(月) 14:47:28 ID:???]
>>642
%mons = (
Jan => 1, Feb => 2, Mar => 3, Apr = 4, # ……以下省略
);
$mon = $mons{$mon};

とかどうよ?

644 名前:nobodyさん mailto:sage [2008/06/02(月) 15:22:18 ID:???]
>>643
ありがとうございます。
連想配列は普段全く使わないので、この機会に試してみます!



645 名前:nobodyさん mailto:sage [2008/06/02(月) 15:44:50 ID:???]
>>643は、どうせ後で1引くのに、どうしてわざわざ1足すのさ?w

646 名前:nobodyさん mailto:sage [2008/06/02(月) 16:15:30 ID:???]
>>645
ほんとだ><
お前頭いいな
すみません><

647 名前:nobodyさん [2008/06/02(月) 17:46:33 ID:VCfcjQkN]
CPANを使わずにモジュールを使いたいのですが、なかなかうまくいきません。
HTML::Template を使いたいのですが、

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

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

ですが、うまくいかないようです。
use lib qw(.); の部分を、
unshift @INC, '.';
などとしても不可能でした。
ググっても上記の方法ぐらいしか出てこないんですが、何がいけないか教えていただけますでしょうか。
Perl のバージョンは 5.00503 です。

648 名前:nobodyさん mailto:sage [2008/06/02(月) 17:51:49 ID:???]
Template.pmをHTMLというディレクトリを作ってそこにいれる

649 名前:nobodyさん [2008/06/02(月) 18:08:23 ID:VCfcjQkN]
>>648
ありがとうございます。
助言どおりHTML ディレクトリにTemplate.pmを入れて、エラーが出たので、
Digest::MD5がどうだとかエラーが出ました。
同じ要領で、Digest ディレクトリを作り、MD5.pmを入れると、
次はXSLoader.pmが必要らしく、それもcgiと同ディレクトリに入れました。
次はDynaLoader.pmがどうとかエラーが出たので、それも同じディレクトリに入れたのですが、
今度はエラーが消えませんでした。。
最終的にCGI::Carpがはいたエラーは以下です。

[Mon Jun 2 18:01:45 2008] Template.pm:
[Mon Jun 2 18:01:45 2008] Template.pm:
[Mon Jun 2 18:01:45 2008] MD5.pm:
[Mon Jun 2 18:01:45 2008] MD5.pm:
[Mon Jun 2 18:01:45 2008] DynaLoader.pm: Can't locate loadable object for module Digest::MD5 in @INC
(@INC contains: /usr/lib/perl5/5.00503/i386-linux /usr/lib/perl5/5.00503 /usr/lib/perl5/site_perl/5.005/i386-linux /usr/lib/perl5/site_perl/5.005 .) at HTML/Template.pm line 915
[Mon Jun 2 18:01:45 2008] Template.pm:
[Mon Jun 2 18:01:45 2008] Template.pm: BEGIN failed--compilation aborted at HTML/Template.pm line 915. BEGIN failed--compilation aborted at test.cgi line 6.

650 名前:nobodyさん mailto:sage [2008/06/02(月) 18:17:18 ID:???]
CPAN にモジュールの関連性とか書いてなかったっけ?

651 名前:nobodyさん mailto:sage [2008/06/02(月) 18:18:22 ID:???]
関連性とかじゃなくて依存のこと

652 名前:nobodyさん [2008/06/02(月) 18:25:00 ID:VCfcjQkN]
q.hatena.ne.jp/mobile/1195733487
↑必要としているモジュールは違うものの、
この人と同じ状況なのかな、と思うんですがどう思いますか?

同じ状況だとすると、不可能ですよね
FTPであげることしかできませんので。。。

653 名前:nobodyさん mailto:sage [2008/06/02(月) 18:41:40 ID:???]
呼び出されてるDLLがWin用のコンパイル済みDynaLoader.pmを、Linuxにそのままコピーしたんでしょ? たぶん。
Linuxでコンパイルし直さないとムリ。よってムリ。

654 名前:nobodyさん [2008/06/02(月) 18:45:29 ID:VCfcjQkN]
あぁ・・・やはり無理ですか。

5.00503で使えるHTML::Templateの代わりのようなものがほしいんですが、
どこを探せばいいでしょうか。
何度も申し訳ありません。



655 名前:nobodyさん [2008/06/02(月) 18:52:18 ID:VCfcjQkN]
HTML::Templateの昔のバージョンとかなら5.00503でも動きますかね?

656 名前:nobodyさん mailto:sage [2008/06/02(月) 18:56:19 ID:???]
その知識だと、HTML::Templateなんて必要ないじゃん!的な使い方しかしてしないと予想されるので、
自前でテンプレート化した方が早い。

スキン対応と銘打ってる配布CGIのソース読んだ方が早い気がする。

657 名前:nobodyさん mailto:sage [2008/06/02(月) 18:59:25 ID:???]
HTML をテンプレート使って出力するようにすると病み付きになる

658 名前:nobodyさん mailto:sage [2008/06/02(月) 19:03:56 ID:???]
5.005のこと詳しくしらないけど、DynaLorderとかって、標準で入ってないの?
ってか、>>649の内容を見るに、DynaLorderでわなくて、Digest::MD5(.so)が無いんでないの?(これも標準でない?)

まあなければ、Digest::MD5はXSモジュール含んでるから、
そのサーバー上でコンパイルし直さないと実行できないのは、>>653と同じ意見だけど。

659 名前:nobodyさん [2008/06/02(月) 19:07:00 ID:VCfcjQkN]
PerlってHTMLと親和性ないですよね〜。
テンプレート使えないとなると、めんどくさくなるけど、まぁがんばります。
ありがとうございました。

660 名前:nobodyさん mailto:sage [2008/06/02(月) 19:49:04 ID:???]
自分の未熟さを言語のせいにするなよw
HTMLと最も親和性のある言語として、Perl/CGIが一世風靡しただろ。

661 名前:nobodyさん mailto:sage [2008/06/02(月) 19:51:49 ID:???]
>>657
kwsk

662 名前:nobodyさん mailto:sage [2008/06/02(月) 19:59:46 ID:???]
>>661
ちょっとかじった程度の人でもデザイナーとプログラマを切り分けられる利点がある

663 名前:nobodyさん [2008/06/03(火) 00:57:17 ID:etSjPPZK]
PostやGetで送られてきたURIエンコードをデコードしてハッシュに確保するような
プログラムを作ったのですが
HTMLのformでenctypeをmultipart/form-dataにすると
送られてくるデータの形式が変わってしまって
うまくハッシュに確保することができなくなっちゃいました。

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

ついでに、multipart/form-dataで送られてきたデータの扱い方を
まとめてあるサイトとかありましたら教えてほしいです。

664 名前:nobodyさん mailto:sage [2008/06/03(火) 01:01:53 ID:???]
multipart/form-data って文字があるのか application/x-www-form-urlencoded って文字があるのかで簡単に判別着く
multipart/form-data の処理は CGI.pm 使ってね♪



665 名前:nobodyさん mailto:sage [2008/06/03(火) 01:12:56 ID:???]
>>663
CGI.pm ならどちらの形式でも意識せず受け取れる。
perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod

自前実装したいのなら
www.studyinghttp.net/cgi-bin/rfc.cgi?3875#Sec8.2
www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/interact/forms.html#h-17.13.4.1
www.studyinghttp.net/cgi-bin/rfc.cgi?2388

666 名前:nobodyさん [2008/06/03(火) 01:24:31 ID:etSjPPZK]
>>665
ありがとう!

667 名前:nobodyさん mailto:sage [2008/06/03(火) 01:58:53 ID:???]
>>659
テンプレートエンジン、自分で作るという手もある。
そんなに難しくないよ。
Compositeパターンでも使えば。


668 名前:nobodyさん mailto:sage [2008/06/03(火) 09:41:38 ID:???]
>>659
HTML をふつうに書く
HTML なかに <%BODY%> とか、挿入場所を示す識別子をいくつか用意して書き込む
プログラムからテンプレート HTML を読み込む
正規表現で置換

たったこれだけです。


669 名前:nobodyさん mailto:sage [2008/06/03(火) 11:07:04 ID:???]
Template::Toolkitならともかく
HTML::Templateは単純な処理だしね
さくっと使いたい時には便利、無けりゃ無いでどうにでもなる

670 名前:nobodyさん [2008/06/03(火) 12:56:41 ID:K4KbdDUT]
Perlでindex.cgiを作って
そのCGIですべてを管理するような仕組みを作った場合
やっぱindex.cgiにアクセスが集中してよくなかったりするんですか?

671 名前:nobodyさん mailto:sage [2008/06/03(火) 13:31:41 ID:???]
index.cgi で処理させる内容を挙げてくれないとまったくわからない

自分は普通のエディタ (関数へのジャンプとか無くて色分けだけ) なので
まったく違う処理はファイル分けてる

672 名前:nobodyさん mailto:sage [2008/06/03(火) 17:01:51 ID:???]
多分聞きたい事って、hoge1.cgiとhoge2.cgi…hoge100.cgiとかあったら
それぞれ頭で同じ事やってるから、all.cgi(index.cgi?)に全て
まとめられないか?って事じゃないのかな?
 my $cgi = CGI->new();
 my $config = init();
 if( $cgi->param('mode')eq'hoge1' ) {
  require 'hoge1.pl';
  hoge1::main($config);
 } elsif( $cgi->param('mode')eq'hoge2' ) {
  require 'hoge2.pl';
  hoge2::main($config);
…って、感じで。漏れも昔、初心者だった時に同じ事を思った。

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

そういう事じゃなくて??


673 名前:nobodyさん mailto:sage [2008/06/03(火) 17:44:51 ID:???]
>>670
俺それやってる
wikiみたいに書けるテキストファイルを自動で携帯/PCに最適化してValid XHTML出力する、みたいな。

674 名前:nobodyさん mailto:sage [2008/06/03(火) 17:56:29 ID:???]
bloxsomだっけ?



675 名前:nobodyさん mailto:sage [2008/06/03(火) 19:41:27 ID:???]
perl関連のプロジェクトは企画倒れが本当に多いね。
企画倒れというより、制作者が途中で飽きて、ブームになっても、そのまま放置……みたいな。
かのCPANだって、一部のモジュール以外は、姥捨山みたいになってる。
古いモジュールに、パッチ送ってもメール不達とか多すぎるんだよ!

676 名前:nobodyさん mailto:sage [2008/06/03(火) 20:52:43 ID:???]
tp://www.drk7.jp/weather/
ここの 東京の xml から加工を行っています。
最終的には明日の天気を出力したいのですが、以下のコードを書いたところ
気温や降水確率が出力されなくて悩んでいます。

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

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

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

{range}->[1] で %hash と言われてしまうのはどうしてでしょうか。
その後に [1]->{-centigrade} をするとこの場合は min が出てくるのは判っています。

677 名前:nobodyさん mailto:sage [2008/06/03(火) 21:13:48 ID:???]
[1]->'#text'

ダンプしろよ

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


679 名前:670 [2008/06/03(火) 22:25:48 ID:etSjPPZK]
言葉が足りんでした。スミマセン。

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

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

教えてLarry!!

680 名前:nobodyさん mailto:sage [2008/06/03(火) 22:40:04 ID:???]
つか、ほとんどのWEBアプリケーションは、特定ファイルに負荷集中するがな。

681 名前:670 [2008/06/04(水) 00:28:11 ID:KcodebuX]
>>680
あ、じゃあ余計な心配しなくて大丈夫かぁ

682 名前:nobodyさん mailto:sage [2008/06/04(水) 01:09:20 ID:???]
つ mod_perl

683 名前:nobodyさん mailto:sage [2008/06/04(水) 05:38:01 ID:???]

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

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

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



684 名前:nobodyさん mailto:sage [2008/06/04(水) 06:05:53 ID:???]
自分で調べられる手間を人に仮託するな。



685 名前:nobodyさん mailto:sage [2008/06/04(水) 08:14:25 ID:???]
>>670
>>672に答えが書いてあるのだが、何故それを無視する?

686 名前:nobodyさん mailto:sage [2008/06/04(水) 10:13:14 ID:???]
どなたか教えてください。

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

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


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

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

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


こういった文字化けを回避するような、いい方法は無いでしょうか?

687 名前:nobodyさん mailto:sage [2008/06/04(水) 10:15:53 ID:???]
jfold

688 名前:686 mailto:sage [2008/06/04(水) 10:27:56 ID:???]
2分での光速のお返事ありがとうございます。

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

さっそく試してみます。
どうもありがとうございました。

689 名前:670 [2008/06/04(水) 13:24:15 ID:44uKn/lk]
>>685
スミマセン基地外でした。

690 名前:nobodyさん [2008/06/05(木) 00:08:18 ID:S7Nj2GEO]
ところでさ…何故elsifなんだと思う?
どうせならifにあわせてelとefとか2文字にしてほしかったん

691 名前:nobodyさん mailto:sage [2008/06/05(木) 00:28:25 ID:???]
ごめんなさいごめんなさい

692 名前:nobodyさん mailto:sage [2008/06/05(木) 22:21:15 ID:???]
Cか何かでやってる人いたな。

693 名前:nobodyさん mailto:sage [2008/06/05(木) 23:21:13 ID:???]
最近5.10を使うようにしてんだけどgiven-whenが馴染めない
switch-caseでいいと思うのになんでgiven-whenにしたのかな?Switch.pmがあるから?

694 名前:nobodyさん mailto:sage [2008/06/06(金) 01:28:23 ID:???]
>>693
pc11.2ch.net/test/read.cgi/php/1008355270/85
Perl の自然言語的体裁には switch-case より given-when の方が
よりしっくりくるかもね。



695 名前:nobodyさん [2008/06/07(土) 20:54:21 ID:8brPzE2o]
www.vid-dl.net/

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

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

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>
これが大本でこれを解析してるんでしょうか。
こういうのはどうやって解析すればいいのでしょうか?

よろしくお願いします。

696 名前:nobodyさん mailto:sage [2008/06/07(土) 21:00:16 ID:???]
一部の0に1足してるだけじゃないの?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<211KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef