[表示 : 全て 最新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/


75 名前:nobodyさん mailto:sage [2008/03/10(月) 16:46:11 ID:???]
すみません、下のソースで、sendmailをcloseしたときにエラー($?=256)が返されてしまうのですが、
これはどう対処すべきなのでしょうか…?

#タイトルのエンコード
$subject = encode('iso-2022-jp', $subject); # iso-2022-jpにエンコード
$subject = encode_base64($subject, ''); # Base64にエンコード
$subject = '=?iso-2022-jp?B?' . $subject . '?='; # ヘッダー文字列の追加
# 本文のエンコード
$content = encode('iso-2022-jp', $content); # iso-2022-jpにエンコード

# メール送信
$cnt=<<"EOT";
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=iso-2022-jp
From: $from
To: $to
Subject: $subject

$content
EOT
open MAIL, "| /usr/sbin/sendmail -t" or &err("Cannot open sendmail: $!");
print MAIL $cnt;
close MAIL or &err("Cannot close sendmail: !=$! ?=$?");

76 名前:nobodyさん [2008/03/10(月) 17:53:13 ID:dzM4A1jo]
マルチポスト君に応える回答は御座いませぬ
他池

77 名前:75 mailto:sage [2008/03/10(月) 19:29:36 ID:???]
自己解決出来たので報告です。
>>75のは、「文字コードが意味不明だゴラァ」と言われていたようでした。
(『encode』とは『UTF-8から』sjisやらiso-2022-jpやらにエンコードする機能。
 一度UTF-8に『decode』しなければならなかった。)

 以上、スレ汚し失礼しました。

78 名前:nobodyさん mailto:sage [2008/03/10(月) 22:41:42 ID:???]
$lineの内容と同じ行がlog.txtになかったら、$lineをlog.txtの末尾に追記する
といったものを作りたいのですが上手く行きません。

症状は、エラーは吐かず、同じ行があっても末尾に追記されてしまいます。
ご教授いただけたら助かります。

foreach my $aaa ( @{$data->{'aaa'}} ) {
$line="This is $aaa->{'msg'}";
$chk=0;
open( DAT, "./log.txt" );
while ( <DAT> ) {
if( $_ == $line ){
$chk++;
}
}
close( DAT );
if( $chk == 0 ){
open(FILE, ">>./log.txt");
$line="$line\n";
print FILE $line;
close(FILE);
}
}


79 名前:nobodyさん mailto:sage [2008/03/10(月) 22:51:05 ID:???]
chomp使えばいいんじゃない?

80 名前:nobodyさん mailto:sage [2008/03/10(月) 23:25:05 ID:???]
問.localtimeは配列を吐きますが、localtimeの動作の逆(配列を入れたら経過秒数合計が返ってくる)はどうしますか。

81 名前:nobodyさん [2008/03/10(月) 23:34:28 ID:dzM4A1jo]
たしかGMTから秒数を返すモジュールがあったはず
比較的簡単に見つかるはずだからググッてみそ

82 名前:nobodyさん mailto:sage [2008/03/10(月) 23:42:22 ID:???]
>>78
==

83 名前:nobodyさん mailto:sage [2008/03/10(月) 23:43:47 ID:???]
>>81
ありがとうございます。
別サイトのRSSのタイムスタンプを読み、データベース化するのに秒数の方が効率がいいと思いました。
ただ標準実装では出来ないようなのでYYYYMMDDhhmmssで行こうと思います。

チラシの裏
RSSの仕様のいい加減さと各サイトの独自拡張と欧文フォーマットの日付表記ウザすぎですね。
少々殺意を覚えました。YahooやgooやニュースサイトのRSSを見てみると、バージョン違いで
タグが違う(pubDateやらdc:dateやら)はまだ許せますが、フォーマットもめちゃくちゃですね。

Mon, 10 Mar 2008 19:17:02 +0900
Mon,10 Mar 2008 11:02:29 +0900
2008-03-10T21:56:00+09:00

少なくとも3パターンはあるようで、非常に嘆かわしいと思いました。



84 名前:nobodyさん [2008/03/11(火) 00:00:51 ID:kt3GGsX4]
XMLが自由すぎて使いづらいのが難点よねw

85 名前:nobodyさん mailto:sage [2008/03/11(火) 00:17:08 ID:???]
安易に拡張性を求めたら墓穴を掘るいい例だよね
自由にできるのは結構なことだけど,良く使う日時のフォーマットくらい統一してほしいぜ・・・

86 名前:nobodyさん mailto:sage [2008/03/11(火) 00:31:27 ID:???]
>>83
Time::Local (の timelocal) は組込関数ではないが標準モジュール。
故意に抜かない限り入っている。

87 名前:nobodyさん mailto:sage [2008/03/11(火) 00:55:54 ID:???]
フォーマットを統一するものを書いてみました。無駄があったらご指摘お願いします。
#!/usr/local/bin/perl
sub DateFmt{
my $str=$_[0];
my $i,$temp,$num;
if($str =~ /[0-9]{4}?(-[0-9]{2}?){2}?T[0-9]{2}?:[0-9]{2}?:[0-9]{2}?\+[0-9]{2}?:[0-9]{2}?/){
return $str;
}
$str =~ s/^[a-zA-Z]{3}?\,//;
$str =~ s/^\ +//g;
@mname = ('Jun','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
$i=1;
foreach $temp (@mname){
$num=sprintf("%02d",$i);
$str =~ s/$temp/$num/i;
$i++;
}
($day,$month,$year,$hms,$jst) = split(/ /,$str);
$jst =~ s/\+(..)(..)/+$1:$2/;
return "$year-$month-${day}T$hms$jst";
}
print &DateFmt("Mon, 10 Mar 2008 19:17:02 +0900");
print "\n";
print &DateFmt("Mon,10 Mar 2008 11:02:29 +0900");
print "\n";
print &DateFmt("2008-03-10T21:56:00+09:00");
print "\n";

88 名前:nobodyさん mailto:sage [2008/03/11(火) 05:18:16 ID:???]
読むのもめんどくせえよ

use Date::Parse;
print str2time($_), "\n" for <DATA>;
__DATA__
Mon, 10 Mar 2008 19:17:02 +0900
Mon,10 Mar 2008 11:02:29 +0900
2008-03-10T21:56:00+09:00

89 名前:nobodyさん mailto:sage [2008/03/11(火) 05:24:13 ID:???]
XML::RSSでEUCのRSSを読み込むにはどうしたらいいんだ

90 名前:nobodyさん mailto:sage [2008/03/11(火) 09:52:01 ID:???]
変換してから読み込めば?

91 名前:nobodyさん mailto:sage [2008/03/11(火) 09:53:07 ID:???]
>>87
+0900の部分はグリニッジ比だから-から始まることもあり得る。

92 名前:nobodyさん [2008/03/11(火) 12:11:54 ID:PA7R3QgS]
CPANモジュールのSpreadsheet::WriteExcelを導入しています。
このモジュールのあるバージョン以下の場合はメソッドA実行、それ以外はメソッドB実行
といった振り分けを行いたいのですが、モジュールのバージョンをperl上で調べるには
どうすればいいのでしょうか?
print $SpreadSheet::WriteExcel::VERSION;
としても、何も表示されませんでした。

93 名前:nobodyさん mailto:sage [2008/03/11(火) 12:35:37 ID:???]
version 2.18 はそれできちんと表示された。その他の version は知らん。
ソースに当ってみたら?



94 名前:nobodyさん mailto:sage [2008/03/11(火) 13:47:11 ID:???]
>>93
レスありがとうございます。わざわざ調べて頂きどうもです。

やってしまいました。
print $SpreadSheet::WriteExcel::VERSION;
ではなく、
print $Spreadsheet::WriteExcel::VERSION;
でした。これははずかしい(*´Д`)
バージョン2.15、2.20とも表示されました。大変失礼しました。

95 名前:nobodyさん mailto:sage [2008/03/11(火) 14:00:50 ID:???]
どっちも同じなのだがw

96 名前:nobodyさん mailto:sage [2008/03/11(火) 14:26:49 ID:???]
大文字小文字

97 名前:nobodyさん mailto:sage [2008/03/11(火) 14:34:32 ID:???]
あ〜ww

98 名前:nobodyさん mailto:sage [2008/03/12(水) 10:02:54 ID:???]
>>94
use strict汁!

99 名前:nobodyさん mailto:sage [2008/03/12(水) 20:50:08 ID:???]
突然すみません。
Perlの勉強中で簡素なプログラムを作成しているのですが
POSTでデータがうまく送信できなくて困っています。
同じコードでMETHOD="GET"とすると送信できるのですが
パスワード入力などをするため、URLにパラメータを表示したくないのです。
お知恵を拝借させてください。よろしくお願いします

100 名前:nobodyさん mailto:sage [2008/03/12(水) 20:55:51 ID:???]
>>99
POSTで送ることがわかってるなら調べれば簡単だと思うんだが。
CGI.pmとか使うと簡単にできる

101 名前:nobodyさん mailto:sage [2008/03/12(水) 21:02:36 ID:???]
送信出来ないのでなく受信したあとの処理が出来てないに1000ペリカ

102 名前:nobodyさん mailto:sage [2008/03/12(水) 21:04:45 ID:???]
>>100
迅速なレス、感謝します。
浅学でお恥ずかしいのですがCGI.pmについてこれから調べてみます。
ありがとうございます。

103 名前:nobodyさん mailto:sage [2008/03/12(水) 21:10:03 ID:???]
>>101
レスありがとうございます
受信後の処理は、次のような処理を記述しております

if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $form, $ENV{'CONTENT_LENGTH'});
} else {
$form = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/, $form);
foreach (@pairs) {
($name, $value) = split(/=/, $_);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/>/>/g;
$value =~ s/</</g;
&jcode'convert(*value, 'sjis');
&jcode'convert(*name, 'sjis');
$FORM{$name} = $value;
}

GETだとうまく処理されるので2行目の
read(STDIN, $form, $ENV{'CONTENT_LENGTH'});
が怪しそうですね。
CGI.pm?で調べられるのかどうなのかまだよくわかっておりませんが
まずいところの見当すらつかなかったので助かります。
ありがとうございます。



104 名前:nobodyさん mailto:sage [2008/03/12(水) 21:18:29 ID:???]
ぱっと見た感じ問題なさそうだけどな

しかしnameにも日本語を使ってるのか

105 名前:nobodyさん mailto:sage [2008/03/13(木) 00:55:15 ID:???]
KENTのコピペ臭がするのは俺だけ?

106 名前:nobodyさん mailto:sage [2008/03/13(木) 01:19:37 ID:???]
>>103
うーん、区切りがほんとに’&’なのかな。
一回、 print $form ; やってみれば?

107 名前:nobodyさん mailto:sage [2008/03/13(木) 02:21:43 ID:???]
Perl4時代のこの定番処理がいまだに使われてるってのもなぁ


108 名前:nobodyさん mailto:sage [2008/03/13(木) 03:58:19 ID:???]
そこでcgi-lib.plですよw

109 名前:nobodyさん mailto:sage [2008/03/13(木) 13:54:44 ID:???]
最近、GET/POSTのデータやテキストファイルを自前で読み込まなきゃならないことがあって
「あれ? どうやるんだっけ?」と本気で焦った俺。

使わないとそんなもんだよな。


110 名前:nobodyさん mailto:sage [2008/03/13(木) 20:56:52 ID:???]
>>109
ライブラリが整備されてそっち使うと忘れるんだよな

111 名前:nobodyさん [2008/03/14(金) 00:19:02 ID:jE/64EXv]
くだすれにも書き込んだ者ですが。

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

あと、「$aaaが8のn倍ならマッチさせる」というのも
わかりませんでした、おねがいしますm(_ _)m

112 名前:nobodyさん mailto:sage [2008/03/14(金) 00:26:38 ID:???]
!($aaa % 8) ← これで8の倍数のチェックだけど、マイナス値は試してないのでわかんないw

8で割ってみて余りが0なら割り切れてるので8の倍数ということ

113 名前:nobodyさん mailto:sage [2008/03/14(金) 00:34:03 ID:???]
$aaa=1;
if($aaa==1||$aaa==3)

if ($aaa =~ /^[13]$/)
こんなのできないこともないけど、そのままでいいんじゃないか?



114 名前:111 [2008/03/14(金) 00:40:08 ID:jE/64EXv]
>112
そういうやりかたもあるんですね。

>113
極端にいえば
if($aaa==1||$aaa==5||$aaa==13||$aaa==17||$aaa==25||$aaa==34||)
こんなに長くなってしまう。
これじゃあまりにもじゃないですか?

115 名前:nobodyさん mailto:sage [2008/03/14(金) 01:07:31 ID:???]
$aaa==9 や $aaa==21 が入ってなくて $aaa==34 が出てくるから
長くなるんだと思う。

116 名前:nobodyさん mailto:sage [2008/03/14(金) 01:13:26 ID:???]
ありえる数字を列挙させて、それのチェック対象が1つの変数なら
1つの変数に対して配列で一気にチェックできた気がする

grep 使ったような使わなかったような・・・ごめん。 俺にはもう無理w

117 名前:nobodyさん mailto:sage [2008/03/14(金) 01:41:34 ID:???]
長くて見づらいけど、処理量が多くて重くなるよりはマシかな。
そんな劇的な違いは無いとしても気分的になんとなくw

118 名前:nobodyさん mailto:sage [2008/03/14(金) 01:51:12 ID:???]
重いと言っても何百万回も繰り返さないから、こうしちゃうなw
if($aaa =~ /^(1|5|13|17|25|34)$/)

119 名前:nobodyさん mailto:sage [2008/03/14(金) 06:02:08 ID:???]
%tmp = map { $_ , 1 } ( 1, 5, 13, 17, 25, 34 ) ;
if ( defined $tmp{$aaa} ){
 print "俺の名を言ってみろ\n" ;
}

120 名前:nobodyさん mailto:sage [2008/03/14(金) 11:41:19 ID:???]
>>116
grep使う方法だとこうかな?

if ( grep { $aaa == $_ } qw( 1 5 13 17 25 34  ) ) {
    # code here
}

121 名前:nobodyさん mailto:sage [2008/03/14(金) 11:42:57 ID:???]
# no 5.10
grep { $aaa == $_ } qw/1 5 13 17 25/;

#
use List::MoreUtils qw/any/;
any { $aaa == $_ } qw/1 5 13 17 25/;

# use 5.10
$aaa ~~ [qw/1 5 13 17 25/];

122 名前:nobodyさん mailto:sage [2008/03/14(金) 11:53:06 ID:???]
ほとんどの場合、ブロックより式の方が早いので
my %tmp = map +( $_ => 1 ), ( 1, 5, 13, 17, 25, 34 );
grep $aaa == $_ ,( 1, 5, 13, 17, 25, 34 );



123 名前:nobodyさん mailto:sage [2008/03/14(金) 14:50:45 ID:???]
dankogaiがエントリ書いてた
ttp://blog.livedoor.jp/dankogai/archives/51017983.html



124 名前:nobodyさん mailto:sage [2008/03/14(金) 15:48:58 ID:???]
>>111 >>113-122
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

125 名前:nobodyさん [2008/03/14(金) 22:34:42 ID:exCIvuwa]
Perl初心者です。宜しくお願いします。

ディレクトリ探索し、ディレクトリの中の「.txt」をファイルを見つけたら
その行数を出力したいのですが、「open(FH, "$_") or die;」のところで
落ちます。何がいけないのでしょうか?


---ここから
use File::Find;

my $dir = 'TestDir';

find(\&print_file, $dir);

sub print_file {
  $_ = $File::Find::name;

  if (/.+\.txt/) {
    print "$_ \t";

    open(FH, "$_") or die;
    1 for <FH>;
    print $. . "行\n";
    close(FH);
  } else {
    print "$_ \n";
  }
}

126 名前:nobodyさん mailto:sage [2008/03/14(金) 22:50:02 ID:???]
>>125
open(FH, "$_") or die "$! [$_]";
1 while <FH>;

とでもして吐かれたエラーメッセージを読む。

127 名前:nobodyさん mailto:sage [2008/03/14(金) 23:25:19 ID:???]
>>125
File::Find の find では pwd が変りますが、
$File::Find::name で得られるのはこの場合は $dir からのパス。

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

簡単な解決方法は、$dir にゼッタイパスを突っ込め。
それから perldoc File::Find くらいしろ。

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

出力
test:漢字123
content:test=123

129 名前:nobodyさん mailto:sage [2008/03/16(日) 22:26:04 ID:???]
>>128
# use encoding "shift-jis";
# LWP::UserAgent;

130 名前:nobodyさん [2008/03/16(日) 23:03:42 ID:eaCmNgRi]
はじめましてこんにちは。
自作の掲示板を作ってまして、ある書き込みにレスが付いた場合は
そのレスの数をカウントして画面に表示させる、という事をやってます。
現状はこんな感じです。

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

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

出来れば上記の命令の中だけで完結させたいのですが、無理でしょうか?


131 名前:nobodyさん mailto:sage [2008/03/16(日) 23:16:51 ID:???]
>>130
print qq|<span style="color:red;">($res)</span><br>\n| if $res;

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

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

132 名前:nobodyさん [2008/03/17(月) 02:23:56 ID:WVXzjYIy]
>>129
ありがとうございました。
ただ、UserAgentは使うのでコメントアウトできません。
EUCでソースを書き、1行目だけコメントアウトで解決しました。


133 名前:nobodyさん [2008/03/17(月) 11:04:17 ID:+D1UxdpV]
>>126
>>127
ありがとうございました。解決しました。



134 名前:130 [2008/03/17(月) 21:21:26 ID:iYfDDUad]
>>131
ありがとうございました、無事に解決いたしました。
これを応用して、文字のサイズを変える事もやってみましたが上手く行きました!

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

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

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



135 名前:nobodyさん mailto:sage [2008/03/17(月) 22:03:37 ID:???]
>>134
>>1-3

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

CGI: Common Gateway Interface part 13
pc11.2ch.net/test/read.cgi/php/1126436361/

136 名前:nobodyさん mailto:sage [2008/03/18(火) 10:37:05 ID:???]
>>134
CGIプログラム:バッチ
htmlフォーム:コマンドライン
と考えれば、おのずと答えが見えると思われ。

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

CGIプログラム間でうまくデータを受け渡すには
・セッション(ファイルまたはDB)を利用する
・htmlフォームデータとして生成しPOSTする(値を変えられたくなければHIDE要素にする)
のいずれかになる。

137 名前:nobodyさん mailto:sage [2008/03/18(火) 11:07:18 ID:???]
小難しく考えるなよ
stat使えばいいだろ

138 名前:nobodyさん [2008/03/18(火) 17:51:36 ID:yz+TlyvN]
お世話になっております。

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

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

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

以上 ご助力いただけますとありがたいです。


139 名前:nobodyさん mailto:sage [2008/03/18(火) 18:20:21 ID:???]
>>138
デバッグの基本、$fugaをprintしてみる

140 名前:nobodyさん mailto:sage [2008/03/18(火) 18:25:39 ID:???]
>>138
$hoge と $fuga に数字がきちんと入ってたら、最初に文字列として認識してようと、
+= の段階で数字として扱ってくれるだろ…。他の部分のミスじゃね?

141 名前:nobodyさん mailto:sage [2008/03/18(火) 18:26:00 ID:???]
$hogeか$fugaに数字以外の記号(改行とか)が混じっていると予想

142 名前:138 [2008/03/18(火) 18:30:10 ID:yz+TlyvN]
RESありがとうございますっ

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

num $fuga
int $fuga
などで数字と明言する方法があったような気がするのですが
私の勘違いでしょうか???

143 名前:nobodyさん mailto:sage [2008/03/18(火) 18:35:55 ID:???]
勘違い。
っつーかデバッグして調べろよ



144 名前:nobodyさん mailto:sage [2008/03/18(火) 19:26:34 ID:???]
内容が多いハッシュの値があって、それをデータベースに格納するのに、
そのままSQL文を書くと長いので
 my ( @n, @q, @p );
 foreach my $key ( keys %hash ) {
  push @n, $key;
  push @q, '?';
  push @p, $hash{$key};
 }
 my $sth=$dbh->prepare('INSERT INTO test('.join(',',@n).') VALUES('.join(',',@q).')');
 $sth->execute(@p);
という形でSQL文を構築してデータを格納しているのですが、
もう少しスマートな方法は無いでしょうか?

145 名前:nobodyさん mailto:sage [2008/03/18(火) 19:50:13 ID:???]
 my $sth=$dbh->prepare('INSERT INTO test('.join(',',keys %data).') VALUES('.join(',',map{'?'}(keys %data)).')');
 $sth->execute(map{$data{$_}}(keys %data));
適当にmapで記述したら、ここまで短くなりましたが、map{'?'}(keys %data)の辺りは、
もうちょっとスマートな方法がありそう…。

146 名前:nobodyさん mailto:sage [2008/03/18(火) 20:25:49 ID:???]
>>145
スマートな方法より可読性を選んだら?
keys %data を三回も呼ぶんだったらアレイに突っ込むだろ。
ついでに、join ',' も二回あるんだったらサブルーチンかなんかにしちまえ。<= 嘘。
sub foo { return join ',', @_ ;} ;
@arr = keys %data ;
my $sth=$dbh->prepare('INSERT INTO test('. &foo( @arr ) .') VALUES('. &foo( ('?') x @arr) ).')');
$sth->execute( @data{ @arr } );

てきとーに書いたから、' とか抜けてても勘弁。

147 名前:nobodyさん mailto:sage [2008/03/18(火) 21:49:40 ID:???]
>>138
#!/usr/bin/perl -w
use strict;
use Scalar::Util qw(looks_like_number);
test(@ARGV);
test(map looks_like_number($_) ? $_ : 0, @ARGV);
sub test {
  my($hoge, $fuga) = @_;
  print "hoge:[$hoge] fuga:[$fuga] ";
  $hoge += $fuga;
  print "result:[$hoge]\n";
}

>>144
my $col = join ',', my @col = keys %hash;
my $phs = join ',', ('?') x @col;
my $sth = $dbh->prepare("INSERT INTO test($col) VALUES($phs)");
$sth->execute(values %hash);

148 名前:138 [2008/03/19(水) 16:21:54 ID:uoUGbd4u]
>147さん RESありがとうございます。
>143さん おっしゃるとおりでした。
すいません。デバッグしてみますと整数になっていなかった訳ではなくバグでした。
下記のようなプログラムでタブ区切りのファイル内の$filename
(フォーマットは「名前\t\t\t\t\t\t\t数\t\n」)
でハッシュデータで $hash{名前}->数
とやろうとして下記のようにプログラムを組んでみました。
----------------
open(FH,"$filename"); my @data = <FH>; close(FH);
my %hash = ();
foreach(@data){
my @splitdata= split(/\t/);
if(defined $hash{$splitdata[7]}){
print "<>$splitdata[7]no$hash{$splitdata[7]} ha mouaru<><br>";
}else{
$hash{$splitdata[7]} = 0;
print "$splitdata[7] wo sengen<br>";
}
}
my $key;
foreach $key ( keys %hash ) {
print "$key<br>";
foreach(@data){
my @splitdata= split(/\t/);
if($key eq $splitdata[7]){
print "$hash{$key} ni $splitdata[10] tumari $hash{$key} += $splitdata[10];wo tasu<br>";
$hash{$key} += $splitdata[10];
print "$hash{$key} : $hash{$splitdata[7]}<br>";
}
}
}
(続く)

149 名前:138 [2008/03/19(水) 16:23:18 ID:uoUGbd4u]
(続き)
----------------
それで出力が
print "$hash{$key} ni $splitdata[10] tumari $hash{$key} += $splitdata[10];wo tasu<br>";
$hash{$key} += $splitdata[10];
print "$hash{$key} : $hash{$splitdata[7]}<br>";
の所が
0 ni 2 tumari 0 += 2 ;wo tasu
0 : 0となっていたのですが どのようにすれば
ハッシュデータで $hash{名前}->数
とのハッシュデータを取得できますでしょうか?

以上 ご助力をいただけますとありがたいです。


150 名前:nobodyさん mailto:sage [2008/03/19(水) 16:44:42 ID:???]
日本語で

151 名前:nobodyさん mailto:sage [2008/03/19(水) 16:56:44 ID:???]
ひどすぎワロタwww

152 名前:nobodyさん mailto:sage [2008/03/19(水) 17:13:34 ID:???]
$hash{名前}->数ってこれはリファレンス的な意味じゃないよね?
$hash{名前} = 数で取り出したいってこと?
$splitdata[10]てなに?空じゃないの?
$hashには$hash{$splitdata[7]} = 0; この部分でしか入れてないよね?


153 名前:nobodyさん mailto:sage [2008/03/19(水) 17:20:14 ID:???]
> (フォーマットは「名前\t\t\t\t\t\t\t数\t\n」)

$splitdata[0] が「名前」
$splitdata[7] が「数」
に見える。

コードは
$splitdata[7] が「名前」
$splitdata[10] が「数」
っぽいことになってるし、いつのまにか $splitdata[10] に 2 が入ってるし、よくわかんない。

(exists $hash{$splitdata[0]}) かどうか調べて、なかったら用意して
$hash{$splitdata[0] += $splitdata[7] したいんじゃないのかな。



154 名前:153 mailto:sage [2008/03/19(水) 17:21:25 ID:???]
最後の行 $hash{

155 名前:153 mailto:sage [2008/03/19(水) 17:23:29 ID:???]
すみません。} を打とうとしたら shift + enter を押して鬱。
$hash{$splitdata[0]} の } が抜けてました。

156 名前:nobodyさん mailto:sage [2008/03/19(水) 17:28:37 ID:???]
map { $hash->{$_->[0]} += $_->[7]; } map { chomp; [split(/\t/)]; } @data;

157 名前:nobodyさん mailto:sage [2008/03/19(水) 23:15:18 ID:???]
このスレが相応しいかわかりませんが質問させてください。

perl 5.8.4
mysql 4.1.11
OS debian

上記の環境でお勉強目的で BBS を作成しています。
データ自体は utf8 で格納出来ているはずですが、 perl 取得した結果を print した
際に文字化けが発生してしまいます。何処を注意すべきでしょうか?

# やってる内容をかいつまんで記入します
use DBI;use utf8;use Encode;
binmode STDIN, ":encoding(utf8)";
binmode STDOUT, ":encoding(utf8)";
$db = DBI->connect("DBI:mysql:database:localhost:$port", "hoge", "hoge");
$db->prepare("set character set utf8");
あとはセレクトして print しているだけ

# DB の中身は dump したファイルが utf8 で出力されていたのでデータは utf8 のはずです

158 名前:nobodyさん mailto:sage [2008/03/19(水) 23:41:08 ID:???]
>>157
OSの設定はutf-8か、日本語が表示できるシェルを使ってるか

159 名前:nobodyさん mailto:sage [2008/03/19(水) 23:45:37 ID:???]
BBSなんだからHTML吐いてるんじゃないの?
それでメタタグの文字コード宣言が違うとか

160 名前:157 mailto:sage [2008/03/20(木) 12:29:10 ID:???]
おはようございます。
apache を使ってブラウザ上に表示させてます。
メタタグには一応 utf-8 って記入してます。

ブラウザ側の文字コードも utf-8 になってました


161 名前:nobodyさん mailto:sage [2008/03/20(木) 12:38:21 ID:???]
BOM付いてる希ガス

162 名前:nobodyさん mailto:sage [2008/03/20(木) 13:03:57 ID:???]
for ($i=0; $i<6; $i++) {

for ($j=0+$i*10; $j<10+$i*10; $j++) {

$box[$i][$j] = $j;

};
};

print "$box[0][0]\n";
print "$box[0][1]\n";
print "$box[0][2]\n";
print "$box[0][3]\n";
print "$box[0][4]\n";
print "$box[0][5]\n";
print "$box[0][6]\n";
print "$box[0][7]\n";
print "$box[0][8]\n";
print "$box[0][9]\n";
print "$box[1][0]\n";
print "$box[1][1]\n";
print "$box[1][2]\n";
print "$box[1][3]\n";
print "$box[1][4]\n";
print "$box[1][5]\n";
print "$box[1][6]\n";
print "$box[1][7]\n";
print "$box[1][8]\n";
print "$box[1][9]\n";

上記のプログラムを実行すると、$box[1][x]が表示されないのはなぜ?

163 名前:nobodyさん mailto:sage [2008/03/20(木) 13:33:56 ID:???]
print "$box[1][0+$i*10]\n";だから。



164 名前:nobodyさん mailto:sage [2008/03/20(木) 13:41:13 ID:???]
$box[$i][$j] = $j;

の行の次に

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

入れて表示してみ

165 名前:nobodyさん mailto:sage [2008/03/20(木) 13:42:25 ID:???]
$box[$i][$j] = $i * 10 + $j;
期待する動作はこれかな?

166 名前:nobodyさん mailto:sage [2008/03/20(木) 13:43:46 ID:???]
>>163
俺には理解不能だ
もうちと、噛み砕いておしえてくれ

167 名前:162 mailto:sage [2008/03/20(木) 13:44:57 ID:???]
みなさん、レスありがと。
今、飯食ってるから
終わったら試してみる。

168 名前:nobodyさん mailto:sage [2008/03/20(木) 13:54:36 ID:???]
>>164
意図した動きになってる。
iもjもちゃんと入れ子になって
ループしている

169 名前:nobodyさん mailto:sage [2008/03/20(木) 13:56:38 ID:???]
>>164
あ!ごめんなさい
ちと、おかしい

170 名前:nobodyさん mailto:sage [2008/03/20(木) 14:02:32 ID:???]
>>165
そうでした。

171 名前:162 mailto:sage [2008/03/20(木) 14:03:22 ID:???]
皆様、ありがとうございます。
解決できました。

PG久しぶりなんで、
頭が退化してたようです。

172 名前:nobodyさん mailto:sage [2008/03/20(木) 14:11:42 ID:???]
10 x 10 の箱に連番を入れたかっただけだけど、配列のインクリメントでちとボケてただけですね
まぁ俺もたまに似たようなミスするのであまりコケにできないwww

173 名前:nobodyさん mailto:sage [2008/03/20(木) 15:57:38 ID:???]
またお願いします。

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

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

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

それとも連続空白を表す記号みたいな物は
あるのでしょうか?



174 名前:nobodyさん mailto:sage [2008/03/20(木) 16:03:28 ID:???]
webブラウザが半角スペースをつぶしちゃうからとかじゃなくて?

175 名前:nobodyさん mailto:sage [2008/03/20(木) 16:12:49 ID:???]
>>174
げ!、ソースを見たらちゃんと空白が入ってました。
ブラウザで表示すると空白がなくなっちゃう。。。
これはなんでですか?

176 名前:nobodyさん mailto:sage [2008/03/20(木) 16:43:28 ID:???]
ブラウザの仕様

177 名前:nobodyさん mailto:sage [2008/03/20(木) 17:00:56 ID:???]
ブラウザで桁をそろえたいなら、表示する部分のフォントを
font-family: monospace;
にしたうえで空白を   にすればいいです。

178 名前:nobodyさん [2008/03/20(木) 20:32:02 ID:cqY9pHpE]
<pre></pre>

179 名前:162 mailto:sage [2008/03/20(木) 22:32:36 ID:???]
>>178
それは、クライアントの読み込みが遅くなるので
あきらめました。
 にしました。

180 名前:162 mailto:sage [2008/03/20(木) 22:33:29 ID:???]
& n b s p ;

に、しました。

181 名前:nobodyさん mailto:sage [2008/03/20(木) 23:06:14 ID:???]
「&amp;nbsp;にしました」と書けばok

182 名前:nobodyさん mailto:sage [2008/03/20(木) 23:17:39 ID:???]
>>181
むぅ、また、難しいことを言うな。
明日、調べます。

183 名前:nobodyさん mailto:sage [2008/03/20(木) 23:33:13 ID:???]
>>182
いやいや、難しい話でなく。>>181が言ってるのは
「&amp;nbsp;にしました」と入力して投稿すれば
「&nbsp;にしました」と表示されるからスペース不要ってだけの話だと思うよ。

# でも確か専ブラによって表示が違ったはず。<エンティティ方面



184 名前:nobodyさん mailto:sage [2008/03/21(金) 10:02:10 ID:???]
nbsp;でも詰まるよ
HTMLでalign=rightのほうがいいんじゃない?

185 名前:nobodyさん mailto:sage [2008/03/21(金) 10:37:17 ID:???]
それはプロポーショナルたからな
桁そろえるのにHTMLのブロック要素を使わなかったり
固定幅フォントを使わないのはバカだゆん

186 名前:157 mailto:sage [2008/03/21(金) 11:32:07 ID:???]
>>157 です
自己解決決しました。

SQL を実行する前に SET NAMES utf8 を実行する必要があったみたいです。
一旦 SET NAMES utf8 を実行した後で select/insert/etc... を実行しないと
化けてしまうようです。
ナゼ化けるのかは理解できていませんが・・・。
# たぶん utf-8 以外で MySQL から出力しようとして化けてしまうとは思いますが理解できていません。


187 名前:nobodyさん mailto:sage [2008/03/21(金) 13:27:45 ID:???]
ふと>>144の解答で疑問に思ったのですが…

ハッシュ値の並び方が呼び出しのタイミング等で
一致しないのは知ってますが、keys %hash と values %hash の
並び方って必ず組み合わせが一致するのでしょうか?

188 名前:nobodyさん mailto:sage [2008/03/21(金) 13:31:00 ID:???]
keys使ってからをvaluesを使うまでにハッシュの内容を変えなかった場合一致するよ

189 名前:nobodyさん mailto:sage [2008/03/21(金) 18:55:25 ID:???]
どなたか、10進数を26進数(使える文字はAからZ)に変換するサブルーチンを教えてください

190 名前:nobodyさん mailto:sage [2008/03/21(金) 21:10:27 ID:???]
>>189

my $Number10 = 1234; # 10進数

# 2進数
#my @digits = ('0','1');
# 16進数
#my @digits = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
# 8進数
#my @digits = ('0','1','2','3','4','5','6','7','8');
# 26進数
my @digits = ('A'..'Z');

print &to_base($Number10,\@digits);

sub to_base {
my $num = shift;
my $digits = shift;
my $dignum = @{$digits};
my $result = '';
while ($num > 0) {
substr($result,0,0) = $$digits[ $num % $dignum ];
$num = int ($num / $dignum);
}
return length $result ? $result : $$digits[0];
}

191 名前:nobodyさん mailto:sage [2008/03/21(金) 21:33:13 ID:???]
>>189
sub conv($){
my $alpha = 'A' ;
$alpha ++ for 1 .. $_[0] ;
return $alpha ;
}
printf "%d\t%s\n", $_, conv $_ for 0 .. 200 ;

192 名前:nobodyさん mailto:sage [2008/03/21(金) 21:53:29 ID:???]
191は取り消し

193 名前:nobodyさん mailto:sage [2008/03/21(金) 23:12:27 ID:???]
my $alpha = q{A} ;
my %table2 = map { $_, $_ } 0..1 ;
my %table8 = map { $_, $_ } 0..7 ;
my %table16 = ( ( map {$_, $_ } 0..9 ), map{ $_, $alpha ++ } 10..15 );
$alpha = q{A} ;
my %table26 = map{ $_, $alpha ++ } 0 .. 25 ;

sub trans($$){
  my %table = %{ shift @_ } ;
  my $num = shift ;
  my $int = keys %table ;
  my $res = q{} ;
  until( $num / $int <1){
  $res = $table{ $num % $int } . $res ;
  $num = int ( $num / $int) ;
  }
  return $table{$num}. $res ;
}
for ( 0 .. 1000 ){
  print $_ . qq{\t}
  . ( trans \%table26, $_ ) . qq{\t}
  . ( trans \%table2, $_ ) . qq{\t}
  . ( sprintf "%b", $_ ) . qq{\t}
  . ( trans \%table8, $_ ) . qq{\t}
  . ( sprintf "%o", $_ ) . qq{\t}
  . ( trans \%table16, $_ ) . qq{\t}
  . ( sprintf "%x", $_ ) . qq{\n}
  ;
}



194 名前:nobodyさん mailto:sage [2008/03/22(土) 07:21:59 ID:???]
>>190-193

ありがとうございます。
さっぱり分かりませんが、
使ってみます。


195 名前:nobodyさん mailto:sage [2008/03/22(土) 07:40:27 ID:???]
>>190
教えて頂いて申し訳ないですが、
Zの次がBAになってしまいます。
Zの次はAAにしたいのです。

196 名前:nobodyさん mailto:sage [2008/03/22(土) 08:02:49 ID:???]
>>195
それだったら191使えば?

197 名前:nobodyさん mailto:sage [2008/03/22(土) 08:39:40 ID:???]
>>196

>>191は取り消しって書いてあるから、
試してなかったんだけど、
試したら、うまくいってると思う。
なんで、取り消したんだろう???

198 名前:nobodyさん mailto:sage [2008/03/22(土) 08:46:28 ID:???]
>>197
Excel式の26進数もどきだから。

199 名前:nobodyさん mailto:sage [2008/03/22(土) 08:53:15 ID:???]
>>198
よく分からんが、ありがと。
しかし、>>191の処理速度は遅いね。

200 名前:nobodyさん mailto:sage [2008/03/22(土) 09:14:56 ID:???]
>>193
は、なんかエラーが出て動かないorz

201 名前:nobodyさん mailto:sage [2008/03/22(土) 09:21:39 ID:???]
>>190をなんとか改造できないだろうか。
ちと、考えてみる。
でも、自分には無理な気がする。

202 名前:nobodyさん mailto:sage [2008/03/22(土) 09:22:10 ID:???]
>>191は、26進数じゃない。使うな。
10進数676は、26進数では、
676/26 = 26 余り0
26/26 = 1 余り0
で、1 0 0(BAAが正しい)が、
>>191だとZAになる。

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



203 名前:nobodyさん mailto:sage [2008/03/22(土) 09:38:25 ID:???]
>>202

ありがと。
>>191は、遅い理由も含めて、使用しないことにする。
>>191さん、申し訳ない。



204 名前:nobodyさん mailto:sage [2008/03/22(土) 09:44:17 ID:???]
>>193

zの次がbaになるorz

205 名前:nobodyさん mailto:sage [2008/03/22(土) 09:45:28 ID:???]
>>203
202=191=193=俺なので気にするな。

206 名前:nobodyさん mailto:sage [2008/03/22(土) 10:17:00 ID:???]
Math::BaseCalcモジュールでも使えば良いんでないか?

207 名前:nobodyさん mailto:sage [2008/03/22(土) 10:39:29 ID:???]
>>206
まず、インストールのいかたが分からないので、
そこから、調べてみる

208 名前:nobodyさん mailto:sage [2008/03/22(土) 10:39:45 ID:???]
インストールのしかた

209 名前:nobodyさん mailto:sage [2008/03/22(土) 10:54:33 ID:???]
ppm install Math-BaseCalc

210 名前:nobodyさん mailto:sage [2008/03/22(土) 10:57:42 ID:???]
インストールできました。

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

これもzの次にbaが出るorz


211 名前:nobodyさん mailto:sage [2008/03/22(土) 11:22:42 ID:???]
当り前だろ、A=0 B=0扱いなんだから
おまいがやりたい事は26進とは言わない

212 名前:nobodyさん mailto:sage [2008/03/22(土) 11:23:35 ID:???]
B=1だ orz

213 名前:nobodyさん mailto:sage [2008/03/22(土) 11:32:56 ID:???]
うぅーん、そうなると
私が意図したものは
どう書けばいいのだろうか???



214 名前:nobodyさん mailto:sage [2008/03/22(土) 12:54:31 ID:???]
出来た!実に単純だった。

my @digits = ('A'..'Z');

print &to_base($Number10,\@digits);

sub to_base {
my $num = shift;
my $digits = shift;
my $dignum = @{$digits};
my $result = '';
while ($num > 0) {
substr($result,0,0) = $$digits[ $num % $dignum ];
$num = int ($num / $dignum) - 1;
}
return length $result ? $result : $$digits[0];
}

215 名前:nobodyさん mailto:sage [2008/03/22(土) 13:06:15 ID:???]
間違えた、こうだ。

my @digits = ('A'..'Z');

print &to_base($Number10,\@digits);

sub to_base {
my $num = shift;
my $digits = shift;
my $dignum = @{$digits};
my $result = '';
while ($num >= 0) {
substr($result,0,0) = $$digits[ $num % $dignum ];
$num = int ($num / $dignum) - 1;
}
return length $result ? $result : $$digits[0];
}

216 名前:nobodyさん mailto:sage [2008/03/22(土) 14:55:10 ID:???]
ブルートフォースアタックに使えそうなコードだなw


217 名前:138 [2008/03/24(月) 22:18:54 ID:wHKnZ0l2]
お世話になっております。
スイマセン。色々試しましたがヤハリ分からないのでコチラに書き込みをさせていただきます。
「名前\t数\t」というデータ(@arrangeData)から
$hash{名前}=合計数とのhashデータを作成したいのです。
# データを宣言
foreach(@arrangeData){
my @splitdata = split(/\t/);
if(defined $hash{$splitdata[0]}){
}else{
$hash{$splitdata[0]} = 0;
}
}
my $key;
print "取得した数を数える。<br>";
# 取得した数を合計する。
foreach(@arrangeData){
my @splitdata= split(/\t/);
foreach $key ( keys %hash ) {
if($key eq $splitdata[0]){
print "$hash{ $key } ni $splitdata[1] tumari $hash{$key} += $splitdata[1];wo tasu<br>";
$hash{$key} += $splitdata[1];
print "$key : $hash{$key}<br>";
}
}
}
とのプログラムでは何故か
$hash{$key} += $splitdata[1];
print "$key : $hash{$key}<br>";
が0で数値が入りません。
どうしてでしょうか?


218 名前:nobodyさん mailto:sage [2008/03/24(月) 22:49:38 ID:???]
レスあっただろ

219 名前:nobodyさん mailto:sage [2008/03/24(月) 22:52:29 ID:???]
>>138
#!/usr/bin/perl -w
use strict;

# use Scalar::Util qw(looks_like_number);
sub looks_like_number { $_[0] =~ /([0-9]+)/ ? $1 : 0 }

my @arrangeData = (
  "name1\t1\t", "name2\t2\t", "name3\t\t", "name4\t4\t",
  "name1\t10\t", "name2\t20\t", "name3\t\t", "name4\t40\t",
);

my %hash;
for (@arrangeData) {
  my($name, $num) = split /\t/;
  $hash{$name} += looks_like_number($num) ? $num : 0;
}

print "key:[$_] value:[$hash{$_}]\n" for sort keys %hash;

220 名前:nobodyさん mailto:sage [2008/03/24(月) 23:29:25 ID:???]
>>219
その @arrangeData を >>217 のコードに食わせても
 name1 : 11
 name2 : 22
 name3 : 0
 name4 : 44
になるんよね。"name3\tぱ\t" にしたりしても。

データのフォーマットが本人の説明と違うように思う。
という指摘が前回もあったような。

221 名前:nobodyさん mailto:sage [2008/03/26(水) 00:57:12 ID:???]
質問です。ある文字列の集合を集計して出現頻度の高い順に取り出すため、
対象の集合をそのままハッシュのキーにして値を++したんですが、
ハッシュはソートできませんよね。配列を使うしかないでしょうか。


222 名前:nobodyさん mailto:sage [2008/03/26(水) 01:00:59 ID:???]
sort { $hash{$b} <=> $hash{$a} } keys %hash;

223 名前:nobodyさん mailto:sage [2008/03/26(水) 01:01:47 ID:???]
>>221
質問が漠然とし過ぎてるんで、この辺一通り読んでから来て。
www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html
perldoc.jp/docs/perl/5.8.8/perldsc.pod



224 名前:nobodyさん mailto:sage [2008/03/26(水) 01:05:19 ID:???]
>>222さんのでわかりました!
>>223さんのも読んでおきます!
どうもでした!!

225 名前:nobodyさん [2008/03/26(水) 09:29:51 ID:LilkylgS]
CGI.pmを使ってアップロードされたファイルの途中まで読んで
そこで終わりにしたい場合はどうしたらいいでしょうか?

どうも全部読むか、失敗かの選択しかないみたいなんですが。。

226 名前:nobodyさん mailto:sage [2008/03/26(水) 14:32:04 ID:???]
そんな需要は稀なんだろ
一旦保存してから読み直せば?

227 名前:nobodyさん mailto:sage [2008/03/26(水) 14:47:06 ID:???]
>>225
httpd が受け取る/受け取らないという話でなく、
プログラム中の処理の流れでという意味なら
perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod
の「ファイル・アップロード・フィールドの作成」の項

228 名前:nobodyさん [2008/03/26(水) 22:35:17 ID:OE9DSfjk]
しつもん

定数なんかを別ファイルに置いてそこから取得したい。

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

---main.cgi---(ヘッダとかは略)
use strict;
require "./const.pl";
print $x;


とするとGlobal symbol "$x" requires explicit package nameという
$xが定義されていませんエラーになります。
use strict外すと$xは空白です。

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


他にこんなところで迷ってる人居ないから環境の問題なんだろうか?
CoLinux,perl5.8.6

229 名前:nobodyさん mailto:sage [2008/03/26(水) 22:45:43 ID:???]
同じ変数でも名前空間が異なれば別物

230 名前:nobodyさん mailto:sage [2008/03/26(水) 22:57:38 ID:???]
>>228
<q cite="perldoc.jp/docs/perl/5.10.0/perlfunc.pod#item_my_EXPR_my">
my はリストアップされた変数を、囲っているブロック、ファイル、eval の中で
ローカルな (レキシカルな) ものにします。
</q>

www.kt.rim.or.jp/%7Ekbk/perl5.005/perlmod.html#Perl_Modules

231 名前:nobodyさん mailto:sage [2008/03/26(水) 23:12:52 ID:???]
my と use strict を取っ払ってみると print されたり。
変数の局所化とか strict とは無縁になるけど。

はてなでやり取りしてる人らはそうしてるんじゃないかな。

232 名前:nobodyさん mailto:sage [2008/03/27(木) 01:07:20 ID:???]
local

233 名前:nobodyさん [2008/03/27(木) 01:23:34 ID:R/qLdwoI]
>>228
hoge.pm

package hoge;
sub kaze_hiita{
"hayaku neru"
}
our $x = 1;
1;

foo.pl
use hoge;
print hoge::kaze_hiita; -> 早く寝る
print $hoge::x; -> 1
$hoge::x = 10;
print $hoge::x; -> 10

関数のときのみ::じゃなくて->が使えるんだぜ。
あと関数の尻尾には();って書いてあると俺はうれしい。
ハッシュで渡すとさらにうれしい。

あと、そゆのがコンフィグを一杯つかうなら
普通に Auto-Config使うべし。
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

当然だがファイル間は文字コードは統一しとけよ
それでしんだひとをみたことがあります。>俺自身



234 名前:nobodyさん mailto:sage [2008/03/27(木) 10:30:16 ID:???]
>>233
説明で「 -> 1」とかを使ったら混乱するだろjk

235 名前:nobodyさん mailto:sage [2008/03/27(木) 12:35:04 ID:???]
正直すまんかった
234が責任を持って書き換えます。おながい。

236 名前:nobodyさん mailto:sage [2008/03/27(木) 12:36:10 ID:???]
>>228
こうするのさ。

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

---main.cgi---
use strict;
our $x;
require "./const.pl";
print $x;

237 名前:nobodyさん mailto:sage [2008/03/27(木) 16:59:46 ID:???]
our wwwwwwwwwwwwwwwwwwwwwwwwww

238 名前:nobodyさん mailto:sage [2008/03/27(木) 19:04:51 ID:???]
○|_|| ̄ wwwwwwwwwwwwwww

239 名前:nobodyさん mailto:sage [2008/03/27(木) 22:17:48 ID:???]
oL/

240 名前:228 [2008/03/27(木) 23:49:16 ID:OO8NUyXN]
>>229-236
さっぱりわからんがサンクス。調べてみる
iniファイルやPHPみたいに簡単に取得できる方法はないのかのう・・・

241 名前:nobodyさん mailto:sage [2008/03/27(木) 23:56:27 ID:???]
>iniファイルやPHPみたいに簡単に取得できる方法
だからモジュール紹介されてるやんけwww

242 名前:nobodyさん mailto:sage [2008/03/28(金) 00:17:56 ID:???]
ワロタ

243 名前:233 mailto:sage [2008/03/28(金) 00:26:56 ID:???]
>>240
感想でいいからくれ
何がさっぱりわからんと思ったか書いてくれれば分かりやすくもういっかい書くよ。

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

スレ汚しならすまん。ちょっと個人的に技法よりも心理障壁に興味がある。



244 名前:nobodyさん mailto:sage [2008/03/28(金) 10:02:51 ID:???]
新人教育かw

245 名前:nobodyさん [2008/03/28(金) 15:01:30 ID:jpsDmJfA]
ログに保存されている日付を以下のように整形するにはどうしたらいいんでしょう?

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

08/3/28 9:30


246 名前:nobodyさん mailto:sage [2008/03/28(金) 15:33:52 ID:???]
>>245
sub reduce_date {
  my @date = split /\D+/, $_[0];
  $date[0] -= 2000;
  sprintf '%02d/%d/%d %d:%d', @date[0..4];
}

print reduce_date('2008/03/28(金) 09:30:08');

247 名前:nobodyさん mailto:sage [2008/03/28(金) 15:36:13 ID:???]
use strict;

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

printf("%02d/%02d/%02d %02d:%02d:%02d", @splitdata);


248 名前:nobodyさん mailto:sage [2008/03/28(金) 15:46:09 ID:???]
s{\d\d(\d\d/\d+/\d+)[^ ]+( \d+:\d+):\d+}{$1$2};

249 名前:nobodyさん mailto:sage [2008/03/28(金) 15:48:45 ID:???]
指定がないけど %02d/%d/%d %d:%02d を期待されてそうな気がする

250 名前:nobodyさん mailto:sage [2008/03/28(金) 15:57:20 ID:???]
なるほど。

s{\d\d(\d\d)/0?(\d+)/0?(\d+)[^ ]+ 0?(\d+):(\d+):\d+}{$1/$2/$3 $4:$5};

251 名前:nobodyさん mailto:sage [2008/03/28(金) 16:45:45 ID:???]
my @splitdata = $orgdate =~ /(\d{1,2})+/g;
my $datetime = sprintf("%02d/%d/%d %d:%d:%d", @splitdata);


252 名前:nobodyさん mailto:sage [2008/03/28(金) 16:49:23 ID:???]
間違えた

my @splitdata = $orgdate =~ /(\d{1,2})+/g;
my $datetime = sprintf("%02d/%d/%d %d:%d", @splitdata);
print $datetime;

253 名前:nobodyさん mailto:sage [2008/03/28(金) 16:59:35 ID:???]
2008/03/28(金) 09:30:08から08/3/28(Fri) 9:30にするにはどうする?





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



255 名前:nobodyさん mailto:sage [2008/03/28(金) 19:09:17 ID:???]
javascriptのプログラムをPerlに移植しようとしていて、複合代入演算子の挙動が違うのでとまどっています。
例えばjavascriptで
var c=1;alert(c=c+(c*=10)+(c*=100));
は1011
Perlで
my $c=1;print($c=$c+($c*=10)+($c*=100));
は1020
になります。
そこで、この問題について載っているサイトがあれば教えてください。


256 名前:nobodyさん mailto:sage [2008/03/28(金) 20:04:35 ID:???]
式の途中で値を変えるやり方がまずいとは思うけどね

257 名前:nobodyさん mailto:sage [2008/03/28(金) 23:58:05 ID:???]
加算の評価順は定義されてないという事を知らずに
> var c=1;alert(c=c+(c*=10)+(c*=100));
こう書くのはクズグラマー。

258 名前:nobodyさん mailto:sage [2008/03/29(土) 03:54:49 ID:???]
>>255
www.st.rim.or.jp/~phinloda/cqa/cqa7.html

259 名前:nobodyさん mailto:sage [2008/03/29(土) 04:33:29 ID:???]
>>253
年を二桁にしたら100年後に困るぞ!

260 名前:nobodyさん mailto:sage [2008/03/29(土) 08:45:59 ID:???]
>>253
s/^\d\d//;
s/^(\d\d\/)0/$1/;
s/金/Fri/;
s/:\d\d$//;

261 名前:nobodyさん mailto:sage [2008/03/29(土) 14:59:25 ID:???]
>>259
19xxから20xxに変わったが、2桁で困ってないので100年後も同様に困らない。

262 名前:nobodyさん mailto:sage [2008/03/29(土) 17:09:47 ID:???]
>>259
百年後なんて俺等死んでるから気にする必要ないw

263 名前:nobodyさん mailto:sage [2008/03/29(土) 17:56:41 ID:???]
そういう屑のせいで困る人たちもいるわけだ



264 名前:nobodyさん mailto:sage [2008/03/29(土) 19:27:22 ID:???]
>>262
医学の進歩は目覚しいから、お前のような底辺奴隷はむしろ死ねないかもしれない。

265 名前:259 mailto:sage [2008/03/30(日) 22:02:27 ID:???]
ジョークを真に受ける馬鹿がこんなに多いとは・・・

266 名前:nobodyさん mailto:sage [2008/03/30(日) 23:27:37 ID:???]
>>265
更にジョークを真に受けた馬鹿の登場ですか?

267 名前:nobodyさん mailto:sage [2008/03/30(日) 23:58:51 ID:???]
>>266
言っとくけど俺をあまりナメないほうがいいよ
vipでコテハンやってるしこのスレ潰すくらいの影響力は持ってるから
くだらないことで刺激して後悔しないようにね

268 名前:nobodyさん mailto:sage [2008/03/31(月) 01:08:05 ID:???]
>>267
そのコピペには、もう飽きた\(^o^)/

269 名前:259 mailto:sage [2008/03/31(月) 07:25:32 ID:???]
>>266
後出しジャソケソカコワルイ

270 名前:nobodyさん mailto:sage [2008/03/31(月) 10:11:33 ID:???]
どっちが後出しだよw

271 名前:nobodyさん mailto:sage [2008/03/31(月) 12:02:54 ID:???]
中出しの方が気持ちいいぞ。

272 名前:nobodyさん mailto:sage [2008/04/01(火) 21:14:09 ID:???]
HTML::Templateっていうモジュールを使おうとしたら
鯖管理してる人が入れたくないです。っていうので
HTML::Templateの代わりになるような標準モジュールって何かありますかね?
個人的にはHTML::Templateの<TMPL_IF>みたいなのが使えれば大満足なんだけども

自分で作っちゃったほうが早いかな?

273 名前:nobodyさん mailto:sage [2008/04/02(水) 01:00:40 ID:???]
普通にディレクトリでも作って放り込んで、useで使うのは駄目なん?



274 名前:nobodyさん mailto:sage [2008/04/02(水) 10:50:31 ID:???]
HTML::TemplateはPurePerlだからディレクトリ作ってほうりこめばおk

275 名前:nobodyさん mailto:sage [2008/04/02(水) 14:04:47 ID:???]
昨日からperlに興味持っています
perlには大きくわけて2つあると聞きました

1:恐らくActivePerlの為に書かれたであろうソースをcygwinで動かしたい
(書いた方はどちらのperlと言うこともなく消えちゃいました。他の方が「それperlだよ」と教えてくれました)

2:1行目に書かれていた 「 #!/perl/bin/perl 」 を 「 #!/cygwin/bin/perl 」 に書き換えた
  2行目にあった 「 # /usr/bin/perl はないはず 」 を削除した
 読み込ませるファイルをcgi-binフォルダーに置いた

3: Internet Explorer ではこのページは表示できません

cygwinとActiveperlは書き換える箇所があるのですか?
基本は同じと聞いたのですが細かく言うと変更すべきところもあるんでしょうか?

どなたかよろしくお願い致します


276 名前:nobodyさん mailto:sage [2008/04/02(水) 14:28:33 ID:???]
>>275
>perlには大きくわけて2つある
ファイルを置けば動くPurePerlと、installが必要なバイナリの2種類かな?

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

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

> Internet Explorer ではこのページは表示できません
このエラーが出るってことはおそらくパーミッション

277 名前:nobodyさん mailto:sage [2008/04/02(水) 15:21:24 ID:???]
>>275
書いた人です。「それは Perl だ」と言ったのも自分。

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

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

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

ただ、glob() に2万ファイル食わせるのはやめといたほうがいいと思うな。

278 名前:nobodyさん mailto:sage [2008/04/02(水) 15:33:03 ID:???]
直接やれwww

279 名前:nobodyさん mailto:sage [2008/04/02(水) 15:40:45 ID:???]
元ネタはここか
pc11.2ch.net/test/read.cgi/hp/1205922529/100

ほんとか?

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

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

板違いになるのかーショボーン
どこに行けばいいのか・・・
みなさんありがとうございました

281 名前:277 mailto:sage [2008/04/02(水) 16:00:03 ID:???]
スレ汚しまくりで、本当にごめんなさい。 > all
とりあえず、物凄い勢いで板違い。>>275さんには、教えてgoo辺りがお勧め。
当分消えよう。

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

>>279
そこで正解です…。

282 名前:nobodyさん mailto:sage [2008/04/02(水) 17:09:09 ID:???]
winならActivePerlでいいやん。

283 名前:nobodyさん mailto:sage [2008/04/02(水) 21:09:16 ID:???]
おまえらstrawberryperl知らんのか



284 名前:nobodyさん mailto:sage [2008/04/03(木) 00:13:59 ID:???]
知らないかダメダメだから話題に出ない
それぐらい察してくれるとありがたい

285 名前:nobodyさん [2008/04/03(木) 03:38:43 ID:x8vlzbgB]
colinuxでいいじゃん

286 名前:nobodyさん mailto:sage [2008/04/03(木) 10:28:20 ID:???]
いろいろ出すと混乱しちゃうぉw

287 名前:nobodyさん mailto:sage [2008/04/03(木) 13:05:14 ID:???]
colinuxとクリネックスて似てるね

288 名前:nobodyさん mailto:sage [2008/04/03(木) 14:21:42 ID:???]
初心者ならActivePerl、中級者以降ならStrawberry Perlだな。

289 名前:nobodyさん mailto:sage [2008/04/03(木) 16:36:19 ID:???]
超上級者ですが ActivePerl 使ってます

290 名前:nobodyさん mailto:sage [2008/04/03(木) 18:06:58 ID:???]
perl開発者ですがperl使ってません

291 名前:nobodyさん mailto:sage [2008/04/03(木) 19:03:25 ID:???]
自分はStrawberryPerlが有り難すぎるのだけど、前はActivePerl使ってた。
StrawberryPerlと比べてActivePerlはどういうメリットがあるのかな。
PPMが便利なこともあるけど、CPANが使いやすいStrawberryPerlの方が自分は便利。
ActivePerlの方を推す方の意見を聞きたいです。

292 名前:nobodyさん mailto:sage [2008/04/03(木) 19:56:47 ID:???]
ActivePerl に一致する日本語のページ 約 560,000 件中 1 - 50 件目 (0.04 秒)
Strawberry Perl に一致する日本語のページ 約 13,000 件中 1 - 50 件目 (0.37 秒)

ActivePerl入れっぱなしだから特に探さなかった

293 名前:nobodyさん mailto:sage [2008/04/03(木) 20:05:15 ID:???]
じゃ、今のActivePerl使ってみな。



294 名前:nobodyさん mailto:sage [2008/04/03(木) 20:05:58 ID:???]
>>293>>291

295 名前:nobodyさん mailto:sage [2008/04/03(木) 22:08:39 ID:???]
おーこんなんあったのか
存在すらしらなかった

296 名前:nobodyさん mailto:sage [2008/04/03(木) 22:33:14 ID:???]
ActivePerlにはppmがあるし、最近は日本人がやってるppmリポジトリ(tcool)があるから
何かあっても日本語で済ませられるからなぁ。あそこだとCatalyst+DBIC+TT2もJiftyもPlaggerもそろってるし。

297 名前:nobodyさん mailto:sage [2008/04/04(金) 04:20:23 ID:???]
winでweb開発するならvmwareとかcolinuxとかいれるだろ情交

298 名前:nobodyさん mailto:sage [2008/04/04(金) 10:07:57 ID:???]
>>297
たしかにそれはもっともなんだが、クライアントの要望でWinで動かなきゃだめ、ってのでも
対応できて助かる。ほんと。

299 名前:nobodyさん mailto:sage [2008/04/04(金) 14:10:52 ID:???]
vmwareとかcolinuxって何に必要なんだ?
特殊なことをするのでなければ、cronとSpeedyCGIぐらいしか思いつかない。

300 名前:nobodyさん mailto:sage [2008/04/04(金) 16:49:23 ID:???]
サーバ機のOSにwin使うの?それならば何も言わんけど

301 名前:nobodyさん mailto:sage [2008/04/04(金) 17:29:46 ID:???]
話がどんどんズレてるぞおまいら。

302 名前:nobodyさん mailto:sage [2008/04/05(土) 00:28:43 ID:???]
PerlからDBI::ODBCでMS Accessに接続しようと思います。
SQLに日本語が混じっているときSJISだとうまくいくのですが
UTF8だと文字化けしてエラーになってしまいます。
Unicodeでも文字化けしない方法はないでしょうか?

303 名前:nobodyさん mailto:sage [2008/04/05(土) 03:41:48 ID:???]
DB 側に文字コードを指定できたはず



304 名前:nobodyさん [2008/04/07(月) 18:30:35 ID:/Zogy0zf]
もの凄く抽象的な質問ですがご容赦ください。


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

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


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

参考になるサイトや書籍などでも構いません。
英語でも頑張って読んでみようとは思いますが、理解できるかどうかは甚だ怪しいです。


305 名前:nobodyさん mailto:sage [2008/04/07(月) 19:21:31 ID:???]
プロを雇いなさい。

306 名前:nobodyさん mailto:sage [2008/04/07(月) 19:50:42 ID:???]
修正前は全く問題なかったのなら修正部分見るだけで簡単に解かるから楽ジャン

307 名前:nobodyさん [2008/04/07(月) 21:42:21 ID:TcHrwP/2]
元に戻す

308 名前:nobodyさん mailto:sage [2008/04/07(月) 23:10:26 ID:???]
svn revert -R

309 名前:nobodyさん mailto:sage [2008/04/07(月) 23:27:22 ID:???]
ちゃんと初期化、解放したったらえーんとちゃうのん?

310 名前:nobodyさん mailto:sage [2008/04/08(火) 03:52:16 ID:???]
一定回数の呼び出しでリブートするしかなかったっけか。

311 名前:nobodyさん [2008/04/08(火) 06:53:24 ID:O35wAre8]
あるオブジェクトが属するクラス名(パッケージ名)はどこに入っているのでしょうか。
特定のオブジェクトを外部から判定したいとしたときなど、
文字列(ClassName=HASHxxxなど)を見て判断できるとも思いますが、
文字列変換が値の出力にオーバーライドされていたりするとダメですし・・

例えば、あるサブルーチンの引数をClassNameオブジェクトに限る、といったときに判定したいのです。
よろしくお願いします。

312 名前:311 mailto:sage [2008/04/08(火) 07:27:45 ID:???]
すみません見つかりました。判定に関しては
if ($obj->isa('ClassName')) {・・・}
この辺から探っていけそうでしたので、311の質問は一旦取り下げますm(_ _)m

313 名前:nobodyさん mailto:sage [2008/04/08(火) 09:05:59 ID:???]
>309
してます。
今回の場合に限りますが、解放されてないリソースが溜まり続けると言うより、1回の必要量が大きすぎた模様。

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

>306-309
質問文は後半だ。




314 名前:nobodyさん mailto:sage [2008/04/08(火) 09:13:08 ID:???]
>>313
>>1
【激速】mod_perl SpeedyCGI FastCGI【激速】
pc11.2ch.net/test/read.cgi/php/1149505269/

315 名前:nobodyさん mailto:sage [2008/04/08(火) 12:45:16 ID:???]
>>304
mod_perlかcgiかに関係なく
strictを付ける
サイズの予想できないデータは一括取り込みしない
ってのは当たり前だと思うんだが・・・

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



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

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



こういうのを、topコマンドでリアルタイムに監視する以外の方法があれば教えてください。

317 名前:nobodyさん mailto:sage [2008/04/08(火) 19:19:20 ID:???]
4倍で落ちるってどんだけだよ

318 名前:nobodyさん mailto:sage [2008/04/08(火) 19:20:40 ID:???]
Devel::Sizeでどの変数がメモリ食ってるか調べてみれば?

319 名前:nobodyさん mailto:sage [2008/04/08(火) 19:26:09 ID:???]
search.cpan.org/perldoc?Devel::Size
perl.apache.org/docs/1.0/guide/performance.html#Measuring_the_Memory_of_the_Process

参考リンク

320 名前:nobodyさん mailto:sage [2008/04/08(火) 20:31:28 ID:???]
>317
単純計算ですが、総計にしてメモリ1GBほど増加です。

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

>319
ちょうど英語にひぃひぃ言いながら読んでたところです。

321 名前:nobodyさん mailto:sage [2008/04/08(火) 20:55:45 ID:???]
メモリ量が4倍になったならMaxClientsを1/4にすりゃいいじゃん。


とりあえずこのへんも参考にするといい
iandeth.dyndns.org/mt/ian/archives/000624.html
www.typemiss.net/blog/kounoike/20060212-64

322 名前:nobodyさん mailto:sage [2008/04/08(火) 22:02:45 ID:???]
>>313
数100MBのデータを気軽に読み込んじゃうのは素人なんだってば。
だからプロを雇えと。

323 名前:nobodyさん [2008/04/08(火) 23:49:56 ID:ng1N9SG/]
与えられた文字列がutf8として正しいかどうか判断するのに
utf8::decode($str);
if ($str =~ /\P{IsASCII}/ and not (utf8::is_utf8($str))) {
### エラー
}
ってやってみましたが、あってますか?



324 名前:nobodyさん mailto:sage [2008/04/11(金) 10:40:16 ID:???]
モジュールがPurePerlかどうかはどうやって判断すれば良いでしょうか?

325 名前:nobodyさん mailto:sage [2008/04/11(金) 11:53:06 ID:???]
それは機械的に?
それとも手動で?

326 名前:nobodyさん mailto:sage [2008/04/14(月) 15:21:25 ID:???]
watalog.jugem.jp/?eid=135
↑の人と同じ悩みなんですが、jugem.jpのRSSをLWP::Simple::mirrorでミラーリングしようとすると、
RSSの内容ではなく、HTMLの内容が帰ってくるのは、どうしてですか?

RSSは以下のURLなのですが、引数を渡しているURLは、LWP::Simpleでは対応できないってでしょうか?
watalog.jugem.jp/?mode=rss

327 名前:訂正 mailto:sage [2008/04/14(月) 15:22:02 ID:???]
watalog.jugem.jp/?eid=135
↑の人と同じ悩みなんですが、jugem.jpのRSSをLWP::Simple::mirrorでミラーリングしようとすると、
RSSの内容ではなく、HTMLの内容が帰ってくるのは、どうしてですか?

RSSは以下のURLなのですが、引数を渡しているURLは、LWP::Simpleでは対応できないってことでしょうか?
watalog.jugem.jp/?mode=rss


328 名前:nobodyさん mailto:sage [2008/04/14(月) 16:19:57 ID:???]
>>327
UAで判定してる模様。
$ua = LWP::UserAgent->new(agent=>'IEみたいなUA');
でやってみ。

329 名前:nobodyさん mailto:sage [2008/04/14(月) 16:25:16 ID:???]
>>328
ありがとうございます。いやらしいことしますね…
LWP::Simple::mirrorを使っているので、全部書き直すか、例外処理を作るしかなさそうですねorz

330 名前:nobodyさん mailto:sage [2008/04/14(月) 16:33:55 ID:??? BE:212256083-DIA(100004)]
LWP::Simple は $ua を Export 出来る

331 名前:nobodyさん mailto:sage [2008/04/14(月) 16:52:36 ID:???]
>>328の一行を追加すればいけるということでしょうか。
オブジェクト指向的な話(->とか)が全くわからないので、そういうところを避けながらコーディングしてきたのですが厳しいですね。


332 名前:327 mailto:sage [2008/04/14(月) 19:32:33 ID:???]
結局、LWP::UserAgentでUA偽装して、ミラーリングさせました。
今後はSimpleではなくて、こっちを使おう…

333 名前:nobodyさん [2008/04/14(月) 21:28:37 ID:vhVZb6UQ]
CGI::Application を使ってみようかと考えてるPerl初心者です。
Web上でいろいろサンプルコードを見ていたんですが、
使いたいモジュールがある場合は
CGI::Application::Plugin として利用するのがお決まりのように見えます。
実際、それが推奨スタイルなんでしょうか?
Log::Handler が使いたかったのですが、
単純に use Log::Handler; して使うと何か不都合があるのでしょうか?



334 名前:nobodyさん [2008/04/15(火) 07:46:19 ID:m7oSRbUq]
再利用しやすいようにPluginにぶら下げてるだけなんじゃないの?
好きにしたらいいと思うよ

335 名前:nobodyさん [2008/04/15(火) 11:53:04 ID:7+9bkjp8]
ありがとうございます!

336 名前:いしはら [2008/04/15(火) 18:41:44 ID:y4DgL3Q4]
------------------------------------------------
☆簡易CTIサービス(1万5千円)
s1s.jp/CTI/


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


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

------------------------------------------------
 ヽ('A`)ノ
  (  )  大金星!!
  ノω|

337 名前:nobodyさん mailto:sage [2008/04/16(水) 14:37:06 ID:???]
二項分布で確率1/AをB回の試行でちょうどC回引く確率を計算したいのですが、
これらをperlかPHPで計算する方法が分かる方いましたらアドバイス頂けないでしょうか。
式は見ても理解できないのでサンプルソースを頂けると助かります。

338 名前:nobodyさん mailto:sage [2008/04/16(水) 15:16:19 ID:???]
式を見ても理解できないとコーディングなんてできないだろw

339 名前:nobodyさん mailto:sage [2008/04/16(水) 16:03:06 ID:???]
「二項分布 perl」でぐぐれ

340 名前:nobodyさん mailto:sage [2008/04/16(水) 17:57:49 ID:???]
最初の方に出て来るJUG7のソースいじりましたが、
サイコロ10000回投げて1が1666回出る確率とかだそうとする際に
数値が大きすぎるのかバグります…。
以前調べた時のソースも、数値が小さければ問題無いものの、
規模を大きくすると1.#INFというエラーが返ったり。


341 名前:nobodyさん [2008/04/16(水) 21:19:23 ID:WbXSl+I/]
お願いします。
与えられた文字列が大小文字同一視でハッシュのキーとして存在するかどうか、
調べる方法はないでしょうか。ハッシュキーは膨大な数あるので、配列にコピーとかは
したくないです。よろしくお願いし明日。

342 名前:nobodyさん mailto:sage [2008/04/16(水) 21:28:03 ID:???]
1 hashを作るときに小文字(あるいは大文字)に変換して作る。
2 tieで1と同じ事を行う。
好きなほうをどうぞ。

343 名前:nobodyさん mailto:sage [2008/04/16(水) 21:32:57 ID:???]
>>341
大小文字の区別はされるけどexistsって関数がある



344 名前:nobodyさん mailto:sage [2008/04/16(水) 21:39:38 ID:???]
なるほど、ありがとうございます。
実は、元の正しい表記を後で取り出したいんですが、
ハッシュのvalueは空いてるので、そこに元の表記を入れておいて
キーを大文字統一にしてみようと思います。
コピーするのと変わらないかもしれませんが。

345 名前:nobodyさん [2008/04/17(木) 04:13:49 ID:CjUpsUhE]
お世話になります。
All UTF-8 でやってます。
さらに USE CGI しないURLデコードをやってみたところ、マルチバイト文字が文字化けするようになりました。
全部□になります。
?#!c:/user/local/bin/perl510/bin/perl.exe
use utf8;
use encoding "utf8";
# ↓UTF8でPOSTされた情報を想定
my $str = '%E8%8C%B6%E6%B1%B2%E5%85%BC%E9%9B%91%E7%94%A8%E4%BF%82';
# ↓URLデコード(今回$strに+はないのでそのへんは省略)
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1)/eg;
# ↓出力
print "Content-type: text/html; charset=UTF-8\n\n";
print "テスト // START // $str<br>\n";
これでHTML全体としては正しく表示されているんですが、$str部分のみが文字化けします。
ウェブで原因を調べること丸1日、これについてどこにも情報がありませんでした……

346 名前:nobodyさん mailto:sage [2008/04/17(木) 07:21:16 ID:???]
use utf8;
use encoding "utf8";
# ↓UTF8でPOSTされた情報を想定(内部ではワイドキャラクタとして格納されてます)
my $str = '%E8%8C%B6%E6%B1%B2%E5%85%BC%E9%9B%91%E7%94%A8%E4%BF%82';
utf8::encode($str); # 一旦UTF-8フラグを落として
# ↓URLデコード(今回$strに+はないのでそのへんは省略)
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1)/eg;
utf8::decode($str); # UTF-8フラグを付け直す

347 名前:nobodyさん mailto:sage [2008/04/17(木) 09:58:36 ID:???]
>>345,>>346
> # ↓UTF8でPOSTされた情報を想定(内部ではワイドキャラクタとして格納されてます) 
> my $str = '%E8%8C%B6%E6%B1%B2%E5%85%BC%E9%9B%91%E7%94%A8%E4%BF%82'; 
それデコードしたら、バイナリ(utf8フラグoff)のUTF-8文字列。

とりあえず、use utf8;とuse encoding "utf8"を外して、そのままprintしてみ。

ちゅうか、use utf8 とuse encoding "utf8"両方してる意味がわからん。

348 名前:nobodyさん [2008/04/17(木) 14:34:42 ID:FD3bsXbG]
>>345です
解決しました。情報に感謝します。
>>346の内容を、Encode::〜でやりました。
こういうのって結構な落とし穴ですね。フラグのことはわかっているつもりでしたが……

349 名前:nobodyさん [2008/04/17(木) 20:17:29 ID:2zzFnXWL]
教えて君でスマンが、分かる人がいたら助けて。

CGI::Applicationパッケージを使っているんだけど、
param() 関数で、数字だけの長い「文字列」を受け取ると
数値リテラルとして、しかも丸められた値が返されちゃうんだけど、
文字リテラルとしてそのまま受け取れるよい方法ないかな?

350 名前:349 mailto:sage [2008/04/17(木) 22:21:21 ID:???]
自己レスです。
CGI.pmにまでさかのぼって調べた結果、
query()->param()は文字リテラルで返してました。
自分が書いた、表示する際の処理のバグでした。orz

351 名前:nobodyさん [2008/04/18(金) 00:03:02 ID:qXgVgrBZ]
いつもすみません。
自分で作ったhash refの配列がデリファレンスできません。
$array[0]->{key}
$array[0]{key}
${$array[0]}->{key}
とか書いてみましたが様々なエラーが出ました。どう書いたらいいですか?

352 名前:nobodyさん mailto:sage [2008/04/18(金) 00:07:12 ID:???]
すみません。問題を取り違えていました。デリファレンスはできてました。
ソートをしようと思い、下記のように書いたらhash refを配列扱いするなと言われます。
my @sorted = sort {$array[$b]->{score} <=> $array[$a]->{score}} @array;
よろしくお願いします。

353 名前:nobodyさん mailto:sage [2008/04/18(金) 00:20:08 ID:???]
ものすごく勘違いしてました。こういうことでした。
my @sorted = sort {$b->{score} <=> $a->{score}} @array;




354 名前:nobodyさん mailto:sage [2008/04/18(金) 10:01:49 ID:???]
そういうときもあるよ

355 名前:nobodyさん [2008/04/18(金) 18:42:42 ID:J/rLxrZJ]
前に2項分布について質問した者ですが、
これだけでも教えてくれると助かります…。
1.#INF の意味はなんですか?インフィニティ?
検索しても#は検索対象にならないらしく、
*.INFの設定ファイルや関係無いものが出て来るばかりで…。

356 名前:nobodyさん mailto:sage [2008/04/18(金) 19:06:45 ID:???]
知らんがな

357 名前:nobodyさん mailto:sage [2008/04/19(土) 09:40:11 ID:???]
インフォメーションじゃね?
それかインフォーラム
もしくはインフェルノ

358 名前:nobodyさん [2008/04/19(土) 12:48:02 ID:n4AN2xdT]
www.semblog.org/wiki/?rna で配布されている、
RNAというアンテナソフトを使っています。
すでに動作してるのですが、summary部分のhtmlタグを除去したいと思います。

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なので、なんとか改造して使い続けたいと思っています。
どうかご教示願います。

359 名前:nobodyさん mailto:sage [2008/04/20(日) 00:00:52 ID:???]
いくら何でも冷たすぎじゃないかお前ら。

>>355
備長炭 自殺方法 でぐぐれ。それでダメなら二項分布 オーバーフローとか。

360 名前:nobodyさん mailto:sage [2008/04/20(日) 01:46:25 ID:???]
>>358
現物ソース確認したわけじゃないけど
ttp://naoya.dyndns.org/~naoya/mt/archives/000611.html
の下の方にある remove_html を試してみたらどうかな。

361 名前:nobodyさん mailto:sage [2008/04/20(日) 02:10:18 ID:???]
>>358
そのモジュールについては詳しくはわからないけど、もともとのソースをいぢるんじゃなくて、
それが吐き出したものを、自前で書き換えればいいんじゃね?

362 名前:nobodyさん mailto:sage [2008/04/20(日) 02:30:50 ID:???]
元のコード見なくても

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

って書いてるんだから

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

こういうことじゃないの。

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

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

とやっても変数が展開されません。
仕方ないのでハッシュにデリファンスしてますが、
方法があったら教えてください。



364 名前:nobodyさん mailto:sage [2008/04/20(日) 17:36:03 ID:???]
本当はシングルクォートで括ってね?

365 名前:nobodyさん [2008/04/20(日) 20:52:48 ID:tHisgd6U]
オリジナルの携帯サイトアクセスランキングを作っています。

OUTをカウントするためなんすけど、アンカーから自前のCGIページを通過させてリンク先を表示させるにはどうすればいいですか?


366 名前:nobodyさん mailto:sage [2008/04/21(月) 00:00:18 ID:???]
自前のCGIページを通過させるアンカーを出力すればよいと思います。

367 名前:nobodyさん mailto:sage [2008/04/21(月) 18:56:21 ID:???]
>>363
my $h = {name=>'john', mail=>'john@example.net'};
my $text =<<EOL;
name = $h->{'name'}
mail = $h->{'mail'}
EOL
print $text;

こんな感じ。

368 名前:358 mailto:sage [2008/04/23(水) 09:11:49 ID:???]
>>360, >>361, >>362

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

# 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();
としてみましたが変わらずでした。

369 名前:nobodyさん mailto:sage [2008/04/23(水) 12:47:07 ID:???]
m_unit.plというライブラリがほしいんですがググっても出てきません
どこで手に入れる事ができるでしょうか?

370 名前:nobodyさん mailto:sage [2008/04/23(水) 13:05:00 ID:???]
>>369
ググっって出てくる奴とは違う物?

371 名前: mailto:sage [2008/04/23(水) 13:08:34 ID:???]
ごめんなさい間違えました(><)

372 名前:nobodyさん mailto:sage [2008/04/24(木) 18:43:40 ID:???]
ABCXXXDEF
という文字列から
ABCとDEFを削除してXXXのみを表示させたい場合はどうすればよいのでしょうか?

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

print "$ansです\n"

という具合でいいんでしょうか?
このABCとDEFを消す処理の部分がわかりません。

373 名前:nobodyさん mailto:sage [2008/04/24(木) 18:47:46 ID:???]
$moji =~ tr/ABCDEF//d;
print $moji;



374 名前:nobodyさん mailto:sage [2008/04/24(木) 18:48:17 ID:???]
>>372
$moji =~ s/ABC|DEF//g;
$ans = $moji

375 名前:nobodyさん mailto:sage [2008/04/24(木) 18:50:21 ID:???]
>>373>>374
ありがとうございました。
助かります。

376 名前:nobodyさん [2008/04/26(土) 13:15:07 ID:flUVuiqJ]
basenameでファイル名を取り出したいのですが、ブラウザが動いているOSの種類によって、
区切りが/であったり\であったりとまちまちです。
perlはLinux上で動いているので、デフォルトでは、/で区切られている場合しか、ファイル名を取り出せません。
\で区切られている場合でも、取り出せるようにするにはどのようにしたらよいのでしょうか?
fileparse_set_fstypeでMSWin32を指定してしまうと今度は、Unixからアクセスしてきた場合にうまくいきません。


377 名前:nobodyさん mailto:sage [2008/04/26(土) 13:19:19 ID:???]
んなもんアクセスしてきたOSの種類で使いわけりゃいい話だろボケ
こんなもん中学生でも分かるぞカス死ね

378 名前:nobodyさん [2008/04/26(土) 16:13:45 ID:flUVuiqJ]
もしブラウザがOSに関する情報を送ってこなかったらどうすればよいのでしょうか?

379 名前:nobodyさん mailto:sage [2008/04/26(土) 16:23:13 ID:???]
>>378
ファイルの有無を判断して、
どっちのデリミタで切るか、
判断したら?

380 名前:nobodyさん mailto:sage [2008/04/26(土) 17:01:10 ID:???]
アクセスしてきたOSは関係ない。
Perlが動いているサーバーのOSが関係する。
そして、basenameは動いているOSによって区切りを/か\か自動的に
判断してくれるので便利に使える。
サーバーがWindowsでもLinuxでもbasenameは正しく動いてファイル名を取り出せる。
取り出せない場合は、何か別の原因。

381 名前:nobodyさん mailto:sage [2008/04/26(土) 19:45:43 ID:???]
type=fileで送られてくるファイル名の話じゃないのか?

382 名前:nobodyさん [2008/04/26(土) 21:48:20 ID:vQRq4Omz]
だいたいみなさんの、perl普通にコード書き込みできるまでに要した
時間と日数おしえてもらえませんか?時間とか1日何時間くらいしてます?

383 名前:nobodyさん mailto:sage [2008/04/26(土) 22:09:54 ID:???]
意味が。



384 名前:nobodyさん mailto:sage [2008/04/26(土) 22:14:17 ID:???]
>>382
もっと、日本語を勉強した方がいいよ

385 名前:nobodyさん mailto:sage [2008/04/26(土) 22:49:57 ID:???]
>>382
皆さんは「週何日、1日当たり何時間」なんていう時間割みたいな方式で
取り組んできたわけじゃないので、そういうのはよくわかんないのです。
そりゃ、そんな方式で堅苦しく取り組んできた人もいるかもしれないけど。

あなたが今までにちんちんを何ストロークしてきたかが不明なのと似てます。

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

見るからに初心者ですが、どうかよろしくお願いします。

387 名前:nobodyさん mailto:sage [2008/04/27(日) 01:20:29 ID:???]
>>386
不可能。

388 名前:386 [2008/04/27(日) 02:55:07 ID:G3KB/HmG]
>>387
そうですか・・
諦めて他に方法がないか試行錯誤してみます
ありがとうございました。

389 名前:nobodyさん mailto:sage [2008/04/27(日) 23:26:09 ID:???]
>>382
10時間ぐらいかな。
もっとも、Perl以前にawk, sed, C
などの下地があったわけだが。

390 名前:nobodyさん mailto:sage [2008/04/27(日) 23:35:33 ID:???]
普通がどの程度か全く分からないけど、とりあえず動く掲示板を作るのに1日1〜2時間ほど
コード書いて1週間かかった気がする

そんな自分は C (すっかり書けないけど、ポインタで躓くまでは書いてた)、VB (アプリをいくつか作ってた) の経験ありです。

391 名前:nobodyさん mailto:sage [2008/04/27(日) 23:39:03 ID:???]
Perlでバッチ処理を書くのはすぐ出来るけど、
Webアプリ(cgi)は時間がかかると思う。

392 名前:nobodyさん mailto:sage [2008/04/27(日) 23:44:48 ID:???]
そんな貴方にCGI.pmですよ

393 名前:nobodyさん [2008/04/30(水) 17:01:56 ID:9OxUbc+M]
あの、乱数についてなのですが、100~150までの間でランダムな数をスカラー変数に格納するにはどうすればいいでしょうか?



394 名前:nobodyさん mailto:sage [2008/04/30(水) 17:13:24 ID:???]
my $rndnum = rand(51) + 100

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

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


以上

395 名前:nobodyさん mailto:sage [2008/04/30(水) 17:14:49 ID:???]
int

396 名前:nobodyさん mailto:sage [2008/04/30(水) 17:19:40 ID:???]
my $rndnum = int(rand(51)) + 100;

397 名前:nobodyさん mailto:sage [2008/04/30(水) 17:19:49 ID:???]
忘れてたw
>>395
thx

my $rndnum = int(rand(51) + 100);


398 名前:nobodyさん mailto:sage [2008/04/30(水) 18:11:00 ID:???]
>>393の質問ではintなしの>>394が正解とすべきなんじゃないか?
質問者の質問が悪いところまでフォローして手取り足取りするのが役目?

399 名前:>>393 [2008/04/30(水) 18:26:54 ID:9OxUbc+M]
皆さんどうもありがとうございます。
確かに>>398さんの言うとおりです。わざわざフォローして下さった親切なお二方に感謝します。

400 名前:nobodyさん mailto:sage [2008/04/30(水) 18:38:47 ID:???]
すいません。
どうも下記例のforeachのループの中で、さらにwhileのループを
回せないのですが、たぶん簡単な理由だとは思うのですが、
お助け下さい。

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

foreach $number(@number){


while (<F2>) {
print "$number\n";
if (/$number/)
{
print "マッチしました\n";
print F3;
}
}
}

401 名前:nobodyさん mailto:sage [2008/04/30(水) 19:09:01 ID:???]
>>400
<F2>で同じ行数を複数回とりだしたい感じ?
だとしたらヒント:seek

402 名前:nobodyさん mailto:sage [2008/04/30(水) 19:10:23 ID:???]
>>400
1回目のforeachが終わったときに<F2>が空になる

403 名前:nobodyさん mailto:sage [2008/04/30(水) 19:48:00 ID:???]
whileに入る前に開きなおすのも手だな



404 名前:nobodyさん [2008/04/30(水) 20:17:59 ID:GavbPT5W]
一回目のループで開いてるファイルのファイル位置が終端にあるため
2周目はファイルを読み込むループが発生しません

解決法は2つ
・While の直前でファイルを開くようにする
・While の直前で seek を使ってファイル位置を先頭に戻す
です。
負荷は後者の方が幾分か軽いです

405 名前:nobodyさん mailto:sage [2008/04/30(水) 20:28:06 ID:???]
my @lines = <F2>;

場合によってはこれもありかなと思った。無駄にメモリ食うけど。

406 名前:nobodyさん mailto:sage [2008/04/30(水) 20:47:41 ID:???]
whileの中でforeachじゃ駄目なん?

407 名前:400 mailto:sage [2008/04/30(水) 23:43:57 ID:???]
すいません。seekというのは初めて知りました。
1回目のforeachが終わったときに<F2>が空になる ってマジですか。
例のループにseekを追加して、動くようにしていただけませんか?
お願いします。

408 名前:nobodyさん mailto:sage [2008/05/01(木) 01:39:53 ID:???]
>>400
初めてのPerlと続・初めてのPerl買えばいいよ。

409 名前:nobodyさん mailto:sage [2008/05/01(木) 12:48:54 ID:???]
コストの高い I/O をメインにループさせたほうがいいっすね

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

close(F2);


410 名前:nobodyさん mailto:sage [2008/05/01(木) 13:18:21 ID:???]
>>407
自分でやれ。
できないなら金払って業者つかえ。
代行するところじゃなく、自分で作るためのヒントを与えるところだ。
ここまでヒントがそろったらあとは調べながらできる。

411 名前:nobodyさん mailto:sage [2008/05/01(木) 13:51:56 ID:???]
あとね、初心者なんだから記述を略すな
ちゃんと意味がわかってから略すように汁

412 名前:400 mailto:sage [2008/05/01(木) 23:38:01 ID:???]
>409 Thx 明日試してみます。seek(F2, 0, 0)では動かなかった。
>410 GW中くらい、自宅警備を止めてみたら?
>411 省略ハァ? 汁?

413 名前:409,411 mailto:sage [2008/05/01(木) 23:46:36 ID:???]
そういう口調ならてめぇで解決しろよ能無しチンカス糞野郎



414 名前:nobodyさん mailto:sage [2008/05/02(金) 00:07:00 ID:???]
> 省略ハァ? 汁?
ワロタ

415 名前:nobodyさん mailto:sage [2008/05/02(金) 05:46:04 ID:???]
まあ、なんだ
「ものを学ぶ姿勢」ってやつを身に着けないと成長できないよね

416 名前:nobodyさん mailto:sage [2008/05/02(金) 08:12:32 ID:???]
きっとこの人はこれからさきの人生も困ったら自分の力で解決しようとせず人を頼りにして生きていくんだろうな。
これ10代だったら笑って流せるけど、20代以上で本気で言ってたら深刻ww

417 名前:nobodyさん mailto:sage [2008/05/02(金) 10:22:44 ID:???]
定期的に沸くから慣れろwww

418 名前:nobodyさん mailto:sage [2008/05/02(金) 10:32:20 ID:???]
自分の書いてるのが略記だって事すらも気がついてないんだろうな

あと、これはおそらくは宿題だなw

419 名前:nobodyさん mailto:sage [2008/05/02(金) 11:18:57 ID:???]
延々と質問者を叩く・・・キモッ
とっくに質問者は消えてることに気づけよ禿げ

420 名前:nobodyさん mailto:sage [2008/05/02(金) 12:28:02 ID:???]
>>419
僕の予想が確かなら、質問者なら君のパソコンのモニタの前に居るよ。

421 名前:nobodyさん mailto:sage [2008/05/02(金) 12:37:17 ID:???]
>>420
はぁ?俺か?
ちゃうっちゅーねん
あほか

422 名前:nobodyさん mailto:sage [2008/05/02(金) 13:12:28 ID:???]
ノリが一緒でわろたwww

423 名前:nobodyさん mailto:sage [2008/05/02(金) 13:34:20 ID:???]
お前の粘着っぷりのほうがおもろい
医者いったほうがええんちゃうかw
リアルでアレかw



424 名前:nobodyさん mailto:sage [2008/05/02(金) 13:43:58 ID:???]
日本語が変でござるよ

425 名前:nobodyさん mailto:sage [2008/05/02(金) 14:15:25 ID:???]
ネット上での似非関西弁って餓鬼が凄む時に巻き舌になるのに似てる

426 名前:nobodyさん mailto:sage [2008/05/02(金) 14:47:41 ID:???]
それは言わないのが優しさだったのに・・・

427 名前:nobodyさん mailto:sage [2008/05/02(金) 15:08:52 ID:???]
質問者以外が必死になる理由が見つからない

428 名前:nobodyさん mailto:sage [2008/05/02(金) 18:44:35 ID:???]
ぼくが一番、perlをうまく操れるんだ!

429 名前:nobodyさん mailto:sage [2008/05/02(金) 23:07:56 ID:???]
>>427
思い込み激しいとか言われへん?
回りに迷惑かけても気づかないタイプだな
回答もしないのに罵倒するのはお前だけやろ
頭変すぎてわからんかw

430 名前:nobodyさん mailto:sage [2008/05/02(金) 23:28:43 ID:???]
>>429
そんならお前が回答してやれよ。 出来るもんなら。www

431 名前:nobodyさん mailto:sage [2008/05/02(金) 23:45:27 ID:???]
>>429
なんでそんなに必死なん?

432 名前:nobodyさん mailto:sage [2008/05/02(金) 23:59:11 ID:???]
GWで暇なんだろ

433 名前:nobodyさん mailto:sage [2008/05/03(土) 02:50:47 ID:???]
GW、通勤とか会社の中とか人が少なくていいよね。



434 名前:nobodyさん mailto:sage [2008/05/03(土) 03:07:39 ID:???]
いいですよね。客からの電話も鳴りませんし。

435 名前:nobodyさん mailto:sage [2008/05/03(土) 10:04:09 ID:???]
泣いてませんか?

436 名前:nobodyさん mailto:sage [2008/05/03(土) 18:44:15 ID:???]
内線もならないよね。

437 名前:nobodyさん mailto:sage [2008/05/03(土) 19:02:10 ID:???]
でもトイレに花子さん居るよね。

438 名前:フー子 [2008/05/04(日) 19:36:48 ID:798fbSDd]
Perl の CGI::Base とか CGI::Request モジュールって、
何のためにあるの?どうやって使うの?

439 名前:nobodyさん mailto:sage [2008/05/04(日) 19:50:31 ID:???]
>>398
初心者質問スレで何言ってるんだ。

440 名前: ◆TWARamEjuA mailto:sage [2008/05/04(日) 20:01:51 ID:??? BE:3267465-2BP(7082)]
>>438
君かわいいね。

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

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

例文を眺めればだいたい何がしたいのかが見えてくるかと。
英文は無理に読まなくてもよろしいかと。

441 名前:nobodyさん mailto:sage [2008/05/04(日) 20:22:15 ID:???]
pmという拡張子、ガクブル

442 名前:nobodyさん [2008/05/05(月) 14:08:42 ID:GD7pTJpy]
CGI掲示板を自作していますが、書き込み送信メールのSendmailによる送信処理でつまづきました。

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

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

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

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


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



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

Errors-Toヘッダはobsoluteだった気がします。
envelopeアドレスを指定するべし。sendmailに-fオプションに続けてアドレスを指定する。
ttp://sonic64.com/2004-11-07.html



444 名前:nobodyさん mailto:sage [2008/05/05(月) 16:36:56 ID:???]
つーか、今時、open(MAIL,"| $sendmail -t")やErrors-To:とか前世紀に
書かれた古文書を元にCGI作るな。めーわくだ。

445 名前:nobodyさん mailto:sage [2008/05/05(月) 18:19:44 ID:???]
批判だけならゾウリムシにもできる
例文または参考 URL ぐらい提示すればいいじゃない

446 名前:nobodyさん mailto:sage [2008/05/05(月) 19:20:18 ID:???]
ただでは断る。

447 名前:nobodyさん mailto:sage [2008/05/05(月) 20:15:30 ID:???]
>>446
しね

448 名前:nobodyさん mailto:sage [2008/05/05(月) 21:17:57 ID:???]
役立たずなテキストに騙される処を指摘してやったのに随分な言い草だな。

449 名前:BEET mailto:X [2008/05/05(月) 21:36:20 ID:???]
z-z.jp/index.cgi ここのスクリプト抜きたいんですけど、どうしたらいいのですか?

450 名前:nobodyさん mailto:sage [2008/05/05(月) 21:39:44 ID:???]
>>449
むり

451 名前:nobodyさん mailto:sage [2008/05/05(月) 21:57:12 ID:???]
>>449
ハッキングすればできるかもしれない。

452 名前:nobodyさん mailto:sage [2008/05/05(月) 22:16:06 ID:???]
スクリプト抜くってどういう意味なんですか?

453 名前:nobodyさん mailto:sage [2008/05/05(月) 22:44:54 ID:???]
ハァハァするんじゃないかな。



454 名前:nobodyさん [2008/05/05(月) 23:21:45 ID:V/xhfGfA]
ftpで接続しないとスクリプトは抜けないでしょう

455 名前:BEET mailto:BEET [2008/05/06(火) 00:42:09 ID:???]
回答ありがとう。 ハッキングって.. 簡単なのかな? ソフトはできるだけ使いたくないな

456 名前:BEET mailto:progammer.co.jp [2008/05/06(火) 00:45:09 ID:???]
追記なんですけど
このレンタル掲示板の管理パスをクラックされて、改竄されたんだけど、どうやってクラックしてるのかな?


457 名前:nobodyさん [2008/05/06(火) 00:49:33 ID:fJq/GBDg]
(`・ω・´)??

458 名前:nobodyさん mailto:sage [2008/05/06(火) 00:50:15 ID:???]
>>455-456
>>1を100回声を出して読め。
読み終わったら610と三ポールのミックスカクテル飲め。

459 名前:nobodyさん [2008/05/06(火) 00:51:09 ID:fJq/GBDg]
(`・ω・´)ソフト使ってるだろww

460 名前:nobodyさん mailto:sage [2008/05/06(火) 09:09:26 ID:???]
Windowsローカルに入れたActivePerlで
cpan > install XML::ATOM::Feed
したのに、それを500エラーになってしまいます
(useしてるところをコメントアウトすると通る)
moduschで見たら「存在しないか、ロード出来ない」っぽい
なぜでしょうか…?

461 名前:nobodyさん mailto:sage [2008/05/06(火) 16:59:23 ID:???]
>>442
BCCで目的は達成できると思うけど、
自分のメールアドレスを、スパムを送りたい先などにされると
簡単にスパムの踏み台になるから気をつけてね。

462 名前:nobodyさん [2008/05/06(火) 22:50:17 ID:wGWcI8Lv]
AUTOLOADってのを初めて使ってみたんです。
未定義の関数を読んだら無事AUTOLOADが呼ばれたんですが、
変数$AUTOLOADを参照するとGlobal symbol〜っていうエラーが出てしまいます。
AUTOLOADを使う場合はno strictしていいものでしょうか。

463 名前:nobodyさん mailto:sage [2008/05/07(水) 00:05:35 ID:???]
use strict;
use warnings;

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

foo();




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

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

これに転送するまでHTMLの<meta content="x">みたいに
一定時間ウェイトかける事って出来るのでしょうか?

465 名前:nobodyさん mailto:sage [2008/05/10(土) 23:19:01 ID:???]
いいえ

466 名前: ◆TWARamEjuA mailto:sage [2008/05/11(日) 01:16:36 ID:???]
転送するまでひと寝入りする。

467 名前:nobodyさん mailto:sage [2008/05/11(日) 02:11:14 ID:???]
>>464
いい事いうじゃねえか。
出来るんだな?
今すぐ頼むぞ。

468 名前:nobodyさん [2008/05/11(日) 13:18:10 ID:yMOlxpUv]
print qq{あいうえお @{[1+1]} かきくけこ };

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

\$()
無名スカラーって存在しないんですかね。
いやそもそも@{[]}に式を埋め込めるのはそこをクォート内ではないと認識するからなわけで。
いや、う〜ん。確かこれなんかいい方法があったような期がするんですが。

469 名前:nobodyさん [2008/05/11(日) 23:02:44 ID:Vy6R2X5C]
Perlスクリプトの処理が全て完了する前に
クライアントとの接続を明示的にクローズする方法は
ありませんでしょうか?

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


#!/usr/bin/perl

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

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

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

exit;


470 名前:nobodyさん [2008/05/12(月) 01:08:40 ID:CYOIx0A2]
perlで重い処理をさせるのが困ります。
例えばパソコンの30%の能力だけ使わせるとかってできませんか?

471 名前:nobodyさん mailto:sage [2008/05/12(月) 01:16:51 ID:???]
>>470
それは知らないけど、nice付けて起動とかしてみては?

472 名前:nobodyさん mailto:sage [2008/05/12(月) 03:09:36 ID:???]
>>468

qq{  ${\do {1+3}}  }


473 名前:nobodyさん mailto:sage [2008/05/12(月) 04:50:44 ID:???]
>>469
close(STDOUT);



474 名前:nobodyさん mailto:sage [2008/05/12(月) 10:21:48 ID:???]
>>469
fork

475 名前:nobodyさん mailto:sage [2008/05/12(月) 16:03:50 ID:???]
WindowsXPでActivePerlを使って
クリップボードにあるテキストに処理を加えて
クリップボードに戻すプログラムを作ろうとしています。
Win32::Clipboardを使用しているのですが、Unicodeだと化けてしまいます。
Unicodeでも化けないで処理できる方法はあるでしょうか?

476 名前:nobodyさん [2008/05/12(月) 16:08:19 ID:CYOIx0A2]
>>472
思い出した!

print qq{ ${ \(1+1)} };
でしたね。
なるほどなるほど。${}これでデリファレンスができるというわけだ。

477 名前:nobodyさん mailto:sage [2008/05/12(月) 17:20:30 ID:???]
Win32::Clipboard が受け取るのは Shift_JIS 固定っぽいです
Encode でShift_JIS にして渡してみたらどうりますか?

478 名前:nobodyさん mailto:sage [2008/05/12(月) 18:00:21 ID:???]
>>477
回答ありがとうございます。
Shift_JISにない文字も処理したかったので
Win32::Clipboardでは無理と言うことですね。
Win32::Clipboard以外でクリップボードを利用できるものはありますか?

479 名前:nobodyさん mailto:sage [2008/05/12(月) 20:22:51 ID:???]
文字化けしないようにする方法教えてください
use LWP::Simple;
my $page = get('hogehogehoge.jp/');
getprint('hogehogehoge.jp/');
print $page


480 名前:nobodyさん mailto:sage [2008/05/12(月) 21:36:53 ID:???]
>>479
ヒント:Jcode

481 名前:nobodyさん mailto:sage [2008/05/13(火) 01:04:45 ID:???]
perl 文字化け でググれカス

482 名前:479 mailto:sage [2008/05/13(火) 03:44:42 ID:???]
エスジス保存しておいたソースファイルをEUCに変更保存してみたけど
何も変わんないですよ

483 名前:nobodyさん mailto:sage [2008/05/13(火) 06:45:22 ID:???]
>>482
「ソースファイル」ってのが上の us-ascii で足りそうなコードのことだったら
SJIS → EUC しても何も変わんないですよ。

環境その他も書かれてないし、変換に興味なさそうなので
perl hoge.pl > test.html
して「まともなエディタで見れば文字化けしない」でいいのかも。



484 名前:nobodyさん mailto:sage [2008/05/13(火) 13:57:38 ID:???]
>>464
Location:を表示する前にwaitをいれればおk

485 名前:nobodyさん mailto:sage [2008/05/17(土) 19:31:00 ID:???]
$obj = new Class;
$obj = Class->new();

この二つの違いは何ですか?

486 名前:nobodyさん mailto:sage [2008/05/17(土) 20:03:56 ID:???]
おんなじ。どっちのClassクラスのコンストラクタを呼んでるだけ。
Classってサブルーチンが定義されてるときに問題がおきることがあるので、
$obj = Class->new;
の形式のほうが推奨されるけど。

487 名前:nobodyさん mailto:sage [2008/05/17(土) 23:09:13 ID:???]
>486
ありがとんです

488 名前:nobodyさん mailto:sage [2008/05/18(日) 11:25:25 ID:???]
俺はコンストラクタを呼び出すときだけはnew Classってしてあとはぜんぶ$obj->sub()ってするかな。

489 名前:nobodyさん mailto:sage [2008/05/19(月) 06:36:14 ID:???]
なんだか、急にCPANでエラーで全く動かなくなったので、いろいろ調べてみたら、
ERRNO.pmが、MSWin32-x86-multi-thread-5.00(Windows Updateでいつの間にか変わってた)を弾いてた。

とりあえず、ERRNO.pmを書き換える(!)ことで対処したんだけど、
他に同じトラブルあってる人いません?

490 名前:がんちゃん mailto:sage [2008/05/19(月) 10:02:27 ID:???]
perlでImage::MagickのAnnotateを使って画像と文字を合成できたのですが
出来上がった画像を右クリックして保存しましたが
そのファイルが開けません。
何が原因でしょうか。宜しくお願いします。

491 名前:nobodyさん mailto:sage [2008/05/19(月) 11:27:27 ID:???]
>>490
開けないとは具体的にどういうこと?
単に、変なファイル名(拡張子)で保存してしまって、ダブルクリックしても関連づけの問題で開けないってことではなくて?


492 名前:がんちゃん mailto:sage [2008/05/19(月) 12:15:34 ID:???]
うっせーよ!それぐらい分かるっての!腐った回答してんじゃねぇよwww

493 名前:がんちゃん mailto:sage [2008/05/19(月) 12:29:05 ID:???]
     *      *
  *     +  うそです
     n ∧_∧ n
 + (ヨ(* ´∀`)E)
      Y     Y    *



494 名前:がんちゃん mailto:sage [2008/05/19(月) 12:32:08 ID:???]
なんだここの人たちはこれぐらいの質問も答えられないの?
回答者が初心者のスレだったのか・・・

495 名前:がんちゃん mailto:sage [2008/05/19(月) 12:35:01 ID:???]
     *      *
  *     +  うそです
     n ∧_∧ n
 + (ヨ(* ´∀`)E)
      Y     Y    *

496 名前:nobodyさん mailto:sage [2008/05/19(月) 14:06:12 ID:???]
print "Content-type: image/jpeg\n\n";
binmode STDOUT;
$image->Write('jpeg:-');

ソース晒せや。

497 名前:nobodyさん mailto:sage [2008/05/19(月) 14:11:40 ID:???]
なにこの流れ・・・

498 名前:nobodyさん mailto:sage [2008/05/19(月) 15:48:41 ID:???]
質問の仕方も知らないというか、質問の文章すら正しく書けない馬鹿が多すぎ
Perl云々の前に日本語学校行け

499 名前:nobodyさん mailto:sage [2008/05/19(月) 15:59:52 ID:???]
\E

500 名前:nobodyさん mailto:sage [2008/05/19(月) 16:39:50 ID:???]
はい、次

501 名前:nobodyさん mailto:sage [2008/05/19(月) 16:41:56 ID:???]
>>498
お前の文章が一番変だわ

502 名前:nobodyさん [2008/05/19(月) 18:36:38 ID:82E4EJS9]
すみません。ド素人です。
質問です。
Can't locate GD/Image.pm in @INC (@INC contains: C:/perl/site/lib C:/perl/lib .)
というソフトウェアエラーが出て、CGIを実行できません。
どうかどうか、教えてください。

503 名前:nobodyさん mailto:sage [2008/05/19(月) 18:38:59 ID:???]
GD を入れてください

はい次



504 名前:nobodyさん [2008/05/19(月) 18:39:34 ID:82E4EJS9]
GDは入れてるんですけど、image.pmってのがなにか、わかんないんです。。。

505 名前:nobodyさん mailto:sage [2008/05/19(月) 18:44:49 ID:???]
GD-Image-Thumbnail でも居れておきゃえぇんとちゃうのん?

506 名前:nobodyさん [2008/05/19(月) 18:45:58 ID:82E4EJS9]
505さん ありがとうございますぅやってみます。

507 名前:nobodyさん mailto:sage [2008/05/19(月) 18:47:44 ID:???]
search.cpan.org/~lds/GD-2.39/GD/Image.pm.PLS

508 名前:nobodyさん [2008/05/19(月) 18:54:23 ID:82E4EJS9]
507さん。。ありがとうです。
けど、このページの、なにをどうすればいいのか。
わかりません
どうしようもない素人なので。。

509 名前:nobodyさん mailto:sage [2008/05/19(月) 19:12:16 ID:???]
*.pmってのはPerlモジュール
エラーの内容は「このモジュールがみつからないよパパ」
→インスコor場所確認
とりあえずモジュールが入ってるか確認する
→ぐぐる
入っていない場合、モジュールをインスコする
→ぐぐる
入っている場合、パスを確認する
→ぐぐる

510 名前:nobodyさん mailto:sage [2008/05/19(月) 19:26:15 ID:???]
GDのバージョンを2.39に上げれば解決。

511 名前:nobodyさん mailto:sage [2008/05/19(月) 19:58:48 ID:???]
「初心者」「素人」は分からないからフルサポートしてもらえる理由になりません。

512 名前:nobodyさん [2008/05/19(月) 20:03:39 ID:82E4EJS9]
GD2.39の中のGD.pmとGDフォルダを /perl/libの中にドラック&ドロップしてるんです。
これは、どこかのサイトに書いてあったので。しました。
そしたら、エラーがでて。GD/Image.pmがどうのこうのとなってまして。
505さん507さん509さん510さんの言葉も、正直、理解しきれてない状況です。
まず、インスコというのが、コマンドプロンプトでするらしいとどこかに書いてて、
してみたんですけど。まず、「ppm」とすると、perlpackagemanagerが起動して、
その中に、GDがなくて。どやってインストールしていいのかも、わかんない感じです。
すみません長々と。どうかお助け願います。。

513 名前:nobodyさん mailto:sage [2008/05/19(月) 20:03:43 ID:???]
ローカルで試そうとしてるやつが、
どうしようもない素人を名乗るなよ。
向上心ねぇのか



514 名前:nobodyさん mailto:sage [2008/05/19(月) 20:16:06 ID:???]
>>512
www.bribes.org/perl/ppmdir.html
ここへいってら。

それができたら、こっちも回っておくように。
theoryx5.uwinnipeg.ca/ppms/


515 名前:nobodyさん [2008/05/19(月) 20:18:47 ID:82E4EJS9]
514さんありがとうございます。
読んでます。

516 名前:nobodyさん [2008/05/19(月) 21:08:55 ID:82E4EJS9]
やっぱりエラーになります(涙

517 名前:nobodyさん mailto:sage [2008/05/19(月) 21:35:03 ID:???]
リポジトリを増やしたのだからインストールできるはずだが。

掲示板なんだから、レスに主語と述語をはっきり書いてくれ。
とりあえず、頭にエラーが出たのか?

518 名前:nobodyさん mailto:sage [2008/05/19(月) 22:17:16 ID:???]
良く読んでないけど、
スタート→すべてのプログラム→ActivePerl→Perl Package Managerで
必要なものをクリック、クリック!した方が楽で簡単だよ。

519 名前:nobodyさん [2008/05/19(月) 23:01:51 ID:82E4EJS9]
perl package managerの中に GDが見当たらないんです。
コマンドプロンプトで CPANから install GDってしても
できないんです。
GD/image.pmが@INCに無いっていうエラーが出るんです。517さん。

520 名前:nobodyさん mailto:sage [2008/05/19(月) 23:13:22 ID:???]
>>519
>>514サイトをよく読んでppmにリポジトリを追加すると、GD 2.39がインストールできるようになる。
ちゃんとリポジトリを追加したか?
それでも出ないというのなら、ppmに問題があることになる。

521 名前:nobodyさん mailto:sage [2008/05/19(月) 23:23:58 ID:???]
ttp://mikiho.jp/memo/?log=20070111_141552

serach のとろを

s GD

としてくださいな

これでも出来なければ諦めてください
サポートしきれないです

522 名前:nobodyさん mailto:sage [2008/05/20(火) 01:25:53 ID:???]
pub.ne.jp/wakapon/?entry_id=82091
Perl 5.8ならなんか面倒そうなんだけどこれかな?

523 名前:nobodyさん [2008/05/20(火) 03:52:12 ID:U/T3y6km]
ここ見て、Win用のGD-2.39来てるのかと思い、threory58に行くも2.35しかないじゃないか!?ぷんぷん。
ふと、PPM-Repositoriesを0.14に上げて見るとbribesなるレポがあるので、これを見に行くと、
おおー、結構新しいの来てるじゃないか〜と、調子にのってperl areaのmoduleもUpしまくる。
しかし、Compress-ZlibをUpすると、Bandleされてたversionを上書きしてしまい、
それ以降ppmがtar.gzファイルを展開できなくなってしまった。(今まで見たことないエラーでPPMが落ちる)

とゆうことで、今やっと再インストールと、(自分のよく使う)各種モジュールのインストール、最新版へのUpデートが終わった。
なんとか、Compress-Zlibも2.010に上げる事ができた。
ふう、疲れたぜ・・・・。



524 名前:nobodyさん mailto:sage [2008/05/20(火) 04:15:25 ID:???]
そうなんだお疲れちゃん

525 名前:nobodyさん [2008/05/20(火) 14:16:09 ID:XrCi5l42]
519です。
いろいろサポートいただいて、できました。
ほんとに感謝してます。ありがとうです。

526 名前:nobodyさん mailto:sage [2008/05/21(水) 00:33:37 ID:???]
phpのexplodeみたいに、
正規表現を使わずに高速に動作するsplitの代わりはないでしょうか?

527 名前:nobodyさん mailto:sage [2008/05/21(水) 01:39:24 ID:???]
substrでループさせる自前の関数でも作れば?

528 名前:nobodyさん mailto:sage [2008/05/21(水) 01:41:57 ID:???]
それって速いのかな。。
indexとsubstrを併用してちょっと試してみるか。

529 名前:nobodyさん [2008/05/21(水) 11:18:20 ID:crauFAgn]
モジュールが一切入っていないレンタルサーバで、xmlを読み込もうとしています。
ググってみると、どこもXMLとLWPというモジュールを読み込む事が前提になっているようなのですが、
何も無い状態でXML

530 名前:529 mailto:sage [2008/05/21(水) 11:19:42 ID:???]
すみません途中で送信してしまいました…orz

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

宜しくお願いします。

531 名前:nobodyさん mailto:sage [2008/05/21(水) 12:00:10 ID:???]
ソケット使ってゴリゴリ書くしか無いんじゃないかな

532 名前:nobodyさん mailto:sage [2008/05/21(水) 12:06:34 ID:???]
モジュールが一切入っていないレンタルサーバでソケットが使えるようにインストールされてる
とはとても思えないが・・

533 名前:nobodyさん mailto:sage [2008/05/21(水) 12:14:45 ID:???]
xmlそのものについても調べてる状態なんですが、
どうも事実上無理っぽいということですかね…orz
お騒がせしました、ありがとうございました。



534 名前:nobodyさん mailto:sage [2008/05/21(水) 13:46:16 ID:???]
php が動くなら php 普通にネットワーク経由でファイル開けるので php も考慮してみれば?

535 名前:nobodyさん mailto:sage [2008/05/21(水) 23:33:50 ID:???]
>>529,530
XMLを読み込むだけなら、XML::TreePPでXMLが読める。
別サイト上にあるXMLを読むならLWP等が必要。


536 名前:nobodyさん mailto:sage [2008/05/22(木) 08:42:14 ID:???]
質問です。Snアップローダー(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等試してみましたが上手く行きませんでした

どなたか分かる方宜しくお願いします

537 名前:nobodyさん mailto:sage [2008/05/22(木) 10:13:46 ID:???]
改造スレいけ

538 名前:nobodyさん mailto:sage [2008/05/22(木) 12:40:41 ID:???]
$buff .= qq|Download <a href="./$filename">$filename</a>|;

こういう書き方もあるんだ。勉強になったw

539 名前:nobodyさん mailto:sage [2008/05/22(木) 13:18:50 ID:???]
毎行クォート変えるくらいならヒアドキュメント使えよ

540 名前:nobodyさん mailto:sage [2008/05/22(木) 13:25:55 ID:???]
ヒアドキュメントもコーディングの桁揃えと、HTMLの桁揃えでタブを使うと、すっきりする方法
がなかなか見つからない。

541 名前:nobodyさん mailto:sage [2008/05/22(木) 13:40:38 ID:???]
>if文で$filename等試してみましたが上手く行きませんでした
どう試して、どういう結果になったのか書かないと。
基本だと思うが。

542 名前:nobodyさん mailto:sage [2008/05/22(木) 17:17:18 ID:???]
>>540
普通に cookbook にある解ではダメなのか?
ttp://www.unix.com.ua/orelly/perl/cookbook/ch01_12.htm


543 名前:nobodyさん [2008/05/24(土) 13:22:00 ID:CztaXqIN]
セッション変数の受け渡しについての質問です。

print <<EOT
<form action="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');
などとすればセッション変数として受け取れる事は分かったのですが、
フォームからの受け渡し方が分かりません…。

よろしくお願いします。



544 名前:nobodyさん mailto:sage [2008/05/24(土) 13:38:27 ID:???]
hiddenで投げれ

545 名前:nobodyさん mailto:sage [2008/05/24(土) 13:41:36 ID:???]
>>543
どれがセッション変数なの?

546 名前:543 [2008/05/24(土) 13:47:45 ID:CztaXqIN]
>>544
hiddenフィールドを利用すればセッション変数として受け渡されるのでしょうか?

>>545
「お名前」や「メール」フォームに入力された文字列をセッション変数として
session.cgiで受け取りたいと考えています。

547 名前:nobodyさん mailto:sage [2008/05/24(土) 13:47:48 ID:???]
CGI.pmでデータを受け取るところから勉強を始めるべき。
セッションはその後。

548 名前:nobodyさん mailto:sage [2008/05/24(土) 13:49:52 ID:???]
・hidden
・GET
・cookie

わざわざCGI::session使うくらいなんだから、普通はcookie使うんじゃね?

549 名前:543 [2008/05/24(土) 13:53:40 ID:CztaXqIN]
>>547
すいません。>>543の書き込み微妙に間違っています。
$hoge=$cgi->$session->param('namae'); のところ

通常データの受け取りは
$hoge=$cgi->param('namae');
セッションでの受け取りは
$hoge=$session->param('namae');
の間違いです。


550 名前:nobodyさん mailto:sage [2008/05/24(土) 14:04:47 ID:???]
>>549
受け渡しの情報が知りたいって言ってるのに、
受け取りのソース書いてるから、それを指摘されてるんだよ。

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

ヒント: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

551 名前:543 [2008/05/24(土) 14:05:03 ID:CztaXqIN]
cookieにセッションIDやもっておきたいデータ(今回の場合、お名前やメール)を記述しておき、
サーバ側から要求があった時点でクライアントはそのcookieのデータを受け渡す

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

うぅ、難しい。。。

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

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

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



553 名前:nobodyさん mailto:sage [2008/05/24(土) 14:14:00 ID:???]
>>551
正直、目的に対して技術が足りなすぎる。イヤミじゃなくてね。
トラブル起こす前に、オライリーのCGIプログラミング読破オススメ。



554 名前:nobodyさん mailto:sage [2008/05/24(土) 14:18:21 ID:???]
>>552
>受け取るソースがsession.cgiだと認識してるのですが…。
少なくてもこのソース中でセッションIDはどこにも発行してないでしょ?
後は調べなさい。

555 名前:554 mailto:sage [2008/05/24(土) 14:19:15 ID:???]
ごめんミスった。

 × >受け取るソースがsession.cgiだと認識してるのですが…
 ○ >データを受け渡す側のソースが>>543

556 名前:543 [2008/05/24(土) 14:19:38 ID:CztaXqIN]
すいません。もう少し勉強しなおしてきます。
みなさん、有難うございましたー・・・

557 名前:543 [2008/05/24(土) 14:23:19 ID:CztaXqIN]
>>554
あ、ソースの一部分しか乗せてなかったためです!

use CGI::Session qw/-ip_match/;

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

my $cgi=CGI->new;

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




558 名前:543 [2008/05/24(土) 14:24:17 ID:CztaXqIN]
続き

print <<EOT
<form action="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

すいません…!

559 名前:nobodyさん mailto:sage [2008/05/24(土) 14:27:18 ID:???]
めんどくさいし、合ってる保証ないけど、適当にフォローしてみる

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

× my $session=CGI::Session->new(undef,undef,{Directory=>'./session'});
○ my $session=CGI::Session->new(undef, $cgi, {Directory=>'./session'});

560 名前:nobodyさん mailto:sage [2008/05/25(日) 02:16:54 ID:???]
htmlのフォームデータをセッション変数に格納して利用するには

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

の流れがいるのでは?




自信ないけど

561 名前:nobodyさん [2008/05/25(日) 19:58:56 ID:sAYmYKjS]
perlのセッション管理はphpに比べるとかなりめんどい
もちろん細かく制御するには向いてるんだが始めとっつきにくいかもなー

562 名前:nobodyさん mailto:sage [2008/05/26(月) 13:29:09 ID:???]
>>561
>>543の質問を分かりやすくPHPで説明すると、
$_REQUESTの内容を$_SESSIONで受け取るにはどうしたらいいんですか?
ということ。

563 名前:nobodyさん [2008/05/26(月) 19:00:45 ID:BXwqNwjP]
すみません。質問です。
Global symbol "%in" requires explicit package name at C:/ApacheGroup/〜〜.cgi line 375, <DATA> line 855.
というソフトウェアエラーが出続けてるんですが。
どうすればいいでしょう。
どなたか教えてください〜。



564 名前:nobodyさん [2008/05/26(月) 19:09:34 ID:fmVA2Qe8]
先生方! 質問よろしいでしょうか!

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

今はこのように通常のテキストでログの上書き保存をしているのですが、
私はgzipで圧縮して上書き保存をしたいのです!
しかしどれだけGoogle先生に訊いてもgzipでの保存方法を教えてもらえません! あの先生はケチです!
もう先生方だけが頼りなんです! 一体どうすればgzipでの保存が可能になるんでしょうか!

565 名前:nobodyさん mailto:sage [2008/05/26(月) 19:18:18 ID:???]
>>563
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
xn--lckja1b6r.jp/%70%65%72%6C%20%67%7A%69%70

566 名前:nobodyさん mailto:sage [2008/05/26(月) 19:32:47 ID:???]
Archive perl でググればでてくるじゃないの

567 名前:nobodyさん mailto:sage [2008/05/26(月) 23:41:19 ID:???]
>>563
英語が読めないなら駱駝本を買うべきだ。

568 名前:nobodyさん mailto:sage [2008/05/27(火) 11:06:43 ID:???]
ラクダを漢字で書かれると困ります (><;)

569 名前:nobodyさん mailto:sage [2008/05/27(火) 19:27:42 ID:???]
{
$global_foo = $foo;
$global_bar = $bar;
my $foo;
my $bar;
$foo = $_[0];
$bar = $_[1];
$foo = $global_foo if $foo eq undef;
$bar = $global_bar if $bar eq undef;
}
をコンパクトにまとめたいが、バグが混入しそうでいやん。

570 名前:nobodyさん mailto:sage [2008/05/27(火) 19:44:24 ID:???]
{
my $global_foo = $foo;
my $global_bar = $bar;
$foo = shift || $global_foo;
$bar = shift || $global_bar;
}

571 名前:nobodyさん mailto:sage [2008/05/27(火) 19:55:45 ID:???]
>>569-570
$foo eq undef もたいがいだが
shift || $global_foo だと $_[0] が '0' の時に挙動変わるな。

572 名前:nobodyさん mailto:sage [2008/05/27(火) 20:06:24 ID:???]
{
my $global_foo = $foo;
my $global_bar = $bar;
$foo = defined( $_[0] ) ? $_[0] : $global_foo;
$bar = defined( $_[1] ) ? $_[1] : $global_bar;
}

こうか?

573 名前:nobodyさん mailto:sage [2008/05/27(火) 20:06:58 ID:???]
あ、三項演算子逆だ。すまん。



574 名前:nobodyさん mailto:sage [2008/05/27(火) 20:33:00 ID:???]
defined関数の存在が頭から抜けてたorz
$foo = $global_foo if $foo eq undef;
$bar = $global_foo if $bar eq undef;
ではなく
$foo = $global_foo unless defined $foo;
$bar = $global_foo unless defined $bar;
でお願いします。あと>>570-573サンクス、参考になります。

575 名前:nobodyさん mailto:sage [2008/05/27(火) 20:38:51 ID:???]
つーか、>>569だとまともに動かんよ。

初期化するためにmy使っちゃってるように見えるけど、
この場合、ブロックスコープになるから、
ブロック内の$foo, $barと、グローバル変数$foo, $barは別物になる。

576 名前:nobodyさん mailto:sage [2008/05/27(火) 20:54:18 ID:???]
myの仕様間違えて覚えてたか…
$global_foo = $foo;
$global_bar = $bar;
{
my $foo;
my $bar;
$foo = $_[0];
$bar = $_[1];
$foo = $global_foo unless defined $foo;
$bar = $global_foo unless defined $bar;
}
欲しい動作はこうかな…

577 名前:nobodyさん mailto:sage [2008/05/27(火) 20:56:48 ID:???]
いやいやいやいやw
「perl スコープ 変数」でググっみ。

578 名前:nobodyさん mailto:sage [2008/05/27(火) 21:53:15 ID:???]
全然わかってないわかってないwww

579 名前:nobodyさん mailto:sage [2008/05/27(火) 22:34:53 ID:???]
my $foo = 1;

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


ex :
$foo = func( $foo, 10 ); # $foo = 10
$foo = func( $foo ); $foo = 1

580 名前:nobodyさん mailto:sage [2008/05/28(水) 00:31:36 ID:???]
早くdefined-or演算子実装されないかな…


581 名前:nobodyさん mailto:sage [2008/05/28(水) 01:24:48 ID:???]
今日が今月の何週目か求めるにはどうしたらよいでしょうか

582 名前:576 mailto:sage [2008/05/28(水) 01:29:54 ID:???]
$global_foo = $foo = 1;
$global_bar = $bar = 2;
@_ = (3,4); #@_に値あり
{
my $foo;
my $bar;
$foo = $_[0];
$bar = $_[1];
$foo = $global_foo unless defined $foo;
$bar = $global_bar unless defined $bar;
print "point 1: foo=$foo bar=$bar\n";
}
print "point 2: foo=$foo bar=$bar\n";

出力結果
point 1: foo=3 bar=4
point 2: foo=1 bar=2

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



584 名前:nobodyさん mailto:sage [2008/05/28(水) 01:34:02 ID:???]
ぎゃー、>>583張り間違えた

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

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

orz 120秒規制が若干きつい…

585 名前:nobodyさん mailto:sage [2008/05/28(水) 01:35:51 ID:???]
Date::Calc

586 名前:nobodyさん mailto:sage [2008/05/28(水) 01:46:51 ID:???]
>>576
目的が分からん。そもそも何がしたいの?
説明する気あるのか?

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

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

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


587 名前:nobodyさん mailto:sage [2008/05/28(水) 01:47:41 ID:???]
>>585
感動した ありがとう

588 名前:576 mailto:sage [2008/05/28(水) 01:58:37 ID:???]
>>586
サブルーチン冒頭にて、引数リスト > デフォルト値(グローバル変数の値とか)
の優先順でmy変数値を設定したいことはよくあるから、
perlなら… perlならきっとすごくスマートに書く方法があるに違いない…

という夢を見たけど、幻だったみたいですね…
変数ひとつずつシコシコとunless definedを当てることにします。

589 名前:nobodyさん mailto:sage [2008/05/28(水) 02:00:25 ID:???]
いや、日本語でおk
お前の望むようなことは確実にできると思うんだけど、
なにぶん言いたいことがよく分からんw

590 名前:nobodyさん mailto:sage [2008/05/28(水) 02:16:48 ID:???]
my $global_foo = my $foo = 1;
my $global_bar = my $bar = 2;

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

結局、最初に提案されてる回答をアレンジすれば、
>>582-584をシンプルかつ可読性も保ったまま実現できるんだが。
これじゃいかんの?

591 名前:nobodyさん mailto:sage [2008/05/28(水) 02:25:18 ID:???]
>>590
そのへんが限界みたいですね…ありがとうございます。
私の欲求そのものが十分特殊だったのかな…

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

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

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

みなさんありがとうございました。

592 名前:nobodyさん mailto:sage [2008/05/28(水) 02:30:59 ID:???]
殺してぇ……。日記じゃねぇんだよ。

593 名前:nobodyさん mailto:sage [2008/05/28(水) 06:17:52 ID:???]
>>580
もう実装されてるよ?
search.cpan.org/dist/perl/pod/perl5100delta.pod#Defined-or_operator



594 名前:nobodyさん mailto:sage [2008/05/28(水) 06:40:31 ID:???]
>>576みたいに、自分のプライド保つために
当初の目的をすり替えて、自分は違うもの作ってました的な発言するやつは質問にくるなよ。

当初は「>>569をコンパクトにしたい」って言ってただけなのに、
どんな解が提示されても、
どんどん違う方向に勝手に転換して善意のレスすら流し読み。
こういう奴は、治らないから本当に放置すべきだと思うよ。

595 名前:nobodyさん mailto:sage [2008/05/28(水) 07:18:42 ID:???]
>>594
それは違うんだけど、あなたへの説得は無理かな。
ひどく機嫌を損ねてしまったのは悪いと思ってるが。

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

ただ、このスレッドにはしばらく書き込みを自粛します。さよなら。

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足してるだけじゃないの?

697 名前:nobodyさん [2008/06/07(土) 21:25:47 ID:8brPzE2o]
>>696
ですが4つとは限らないんです。
このビデオは4つですが、者によっては8つとかになります。
それをどうやって特定してるのかがわかりません。

698 名前:nobodyさん mailto:sage [2008/06/07(土) 21:33:39 ID:???]
>>697
youkufireかなんかAPI使ってるんだろ。
Perlとは関係ないな。

699 名前:nobodyさん [2008/06/07(土) 21:43:36 ID:8brPzE2o]
>>698
???
それではyoukufireではどうやってやってるんでしょうか?

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


アドバイスお願いします

700 名前:nobodyさん mailto:sage [2008/06/07(土) 22:34:21 ID:???]
HTTPに関して勉強して下さい。
全くのスレ違いです。

701 名前:nobodyさん [2008/06/07(土) 22:55:37 ID:8brPzE2o]
http???
他で質問してみます。ありがとうございました。

702 名前:nobodyさん mailto:sage [2008/06/07(土) 23:03:35 ID:???]
いや、どこで質問しても無駄だと思うよ。
結局、HTTPレスポンスを解析する必要があるから。

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

この意味が分からない次元じゃ、到底ムリ。

703 名前:nobodyさん [2008/06/07(土) 23:36:39 ID:8brPzE2o]
なるほど。
www.kasai.fm/perlHTTP/
www.kasai.fm/perlHTTP/decode.html
からとりあえずそのhttpレスポンスとやらを実際に見てみようと思いましたが。

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

MINE::Base64って自分でコンパイル?でしたっけができないとダメなものなのでしょうか。




704 名前:nobodyさん [2008/06/07(土) 23:53:12 ID:8brPzE2o]
すいません
getHTTPの

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

use MIME::Base64;
#require('BASE64');
にしたらエラーが出ませんでした。動いてるかはわかりませんが。

705 名前:nobodyさん mailto:sage [2008/06/08(日) 00:05:22 ID:???]
MIME::Base64は標準モジュールだ。
というか、質問内容が初心者未満の単なる教えて君だぞ。
最低限、ドキュメント読むかググってから書き込め。

706 名前:nobodyさん [2008/06/08(日) 00:14:24 ID:Mcg1bojL]
そうなんですか。とりあえずperlでwebページを読み込む実験は成功しました。
そこからフラッシュのURLを抜き出すところまではできそうです。

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

これを検索とか意味を探してきます。

707 名前:nobodyさん mailto:sage [2008/06/08(日) 14:55:02 ID:???]
オブジェクトにメソッドを足すにはどうしたらいいでしょうか?

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

アレ?

708 名前:nobodyさん mailto:sage [2008/06/08(日) 16:56:29 ID:???]
>>707
基本から一通り勉強し直したらいいんじゃないかな。
www.kt.rim.or.jp/~kbk/perl5.005/perlmod.html
www.kt.rim.or.jp/~kbk/perl5.005/perlobj.html

709 名前:nobodyさん mailto:sage [2008/06/08(日) 18:03:33 ID:???]
>>708
サンクス

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

ワロタ

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

bar{1}

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

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

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

勉強してきます
しかしあんま資料ないっぽい

711 名前:nobodyさん mailto:sage [2008/06/08(日) 18:52:18 ID:???]
OOPじゃなくて、perlの基本からやり直しては。
*{foo::hoge::bar} じゃなくて *{foo::bar}
hogeなんていうpackage作ってないし。



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

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

ってのが自動的に生成されると思ってた。


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

と思ったけどもう一度勉強した方が良さげだね



714 名前:nobodyさん mailto:sage [2008/06/08(日) 20:20:35 ID:???]
Perl DBI MySQL

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

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

もし他に改善策があれば教えてください。
一応、SELECTの段階で20件だけを取り出す方法を思いつきました。

715 名前:nobodyさん mailto:sage [2008/06/08(日) 20:39:35 ID:???]
>> 714 @array の展開はコスト食うのでやめたほうがいいかもね。
@arrayの高速操作が必要ならスライス操作とか調べてみると吉
SELECTで絞れるなら断然そっちのほうが早いと思うよ。





716 名前:nobodyさん mailto:sage [2008/06/08(日) 22:10:54 ID:???]
>>715
ありがとうございます。
スライス操作調べてみました。SELECTでLIMITつければいいんですかね?
これで必要な分だけのフェッチですみましたが、どうも時間がかかるようです。
ちょっと複雑なSQL文なんでそっちのほうがボトルネックのようですorz
SQL文のほうを考え直そうと思います。

717 名前:nobodyさん mailto:sage [2008/06/09(月) 12:35:45 ID:???]
SELECT SQL_CALC_FOUND_ROWS * FROM $table LIMIT ( $page*20+1 ), 20;
SELECT FOUND_ROWS();

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

SQL文はスレ違い。

718 名前:nobodyさん mailto:sage [2008/06/09(月) 15:41:11 ID:???]
もうメンドクセーから、bind_columns()とfetch()にすれば?
生えーぞ。

719 名前:nobodyさん mailto:sage [2008/06/09(月) 16:00:10 ID:???]
生いいよね

720 名前:nobodyさん [2008/06/09(月) 19:29:41 ID:BYZvhcIN]
LIMITしらねーとか そんなレベルなら
其の都度ひっかかって質問するより勉強したほうがはやいよ
リファレンスページみっけてプリントアウトしとけ

721 名前:nobodyさん mailto:sage [2008/06/09(月) 23:24:50 ID:???]
122
11
11000
↑これをソートすると

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

11
122
11000
↑こんな感じで大きい順にソートする方法を教えてください。

722 名前:nobodyさん mailto:sage [2008/06/09(月) 23:26:19 ID:???]
sort { $a <=> $b } ( 122, 11, 11000 ) ;

723 名前:nobodyさん mailto:sage [2008/06/09(月) 23:36:47 ID:???]
>>722さん、ありがとうございました。



724 名前:nobodyさん mailto:sage [2008/06/13(金) 02:38:01 ID:???]
ファイルのアップロードについて質問です

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

*** form.cgi ***
use CGI;
$q = new CGI;
@names = $q->param();
foreach $name (@names) {
 $value = $q->param($name);
 if (input type が file だったら ) {
  ファイル受信処理
 }
 なんらかの配列に格納
}
と、したいのですが、
inputのtypeは調べられないのでしょうか?
inputのnameで判断するしかないのでしょうか?

725 名前:nobodyさん mailto:sage [2008/06/13(金) 09:17:11 ID:???]
>>724
ブラウザから渡されるデータ自体に type 属性の値が含まれて
いないのだから、CGI プログラム上から調べる事はできない。

ref $value でアタリを付ける事はできる。
perldoc.jp/docs/perl/5.10.0/perlfunc.pod#item_ref_EXPR_ref_reference
perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod
(「ファイル・アップロード・フィールドの作成」の項)

726 名前:nobodyさん mailto:sage [2008/06/13(金) 10:25:57 ID:???]
@id には ( '101','106','112','130','150') などと入っており
$unit->{101}->{point} = 2.5;
$unit->{130}->{point} = 6.2;
$unit->{150}->{point} = 3.2;

と代入してあります

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

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

とまで考えて、$aや$bをどのように使ったら良いのか分らなくなりました
よろしかったらどのように表記したら良いのか教えてください


727 名前:nobodyさん mailto:sage [2008/06/13(金) 10:51:23 ID:???]
>>726
>>3

728 名前:726 mailto:sage [2008/06/13(金) 11:00:28 ID:???]
ありがとうございます
Perlメモはいつも参考にさせて頂いてまして
・複数の項目でソートする
・自分で決めた順番でソートする
の応用でなんとかなるかと思ったのですが
どうにも分らずこちらでお伺いしました次第です
どの辺りを応用すればよろしいでしょうか?

729 名前:726 mailto:sage [2008/06/13(金) 11:18:24 ID:???]
・複数の項目でソートするを応用して(まんまかも)
先にmapでポイントの配列を作る事でなんとか出来ました

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

ありがとうございました
そしてお騒がせ致しました


730 名前:nobodyさん mailto:sage [2008/06/13(金) 11:37:27 ID:???]
@id = sort { $unit->{$a}->{point} <=> $unit->{$b}->{point} } @id

731 名前:724 mailto:sage [2008/06/13(金) 12:09:38 ID:???]
>>725
やはりtypeは知りようがないのですね。
ご回答ありがとうございました。

732 名前:726 mailto:sage [2008/06/13(金) 12:41:47 ID:???]
なるほど、$_ がキーになる場合はそこが$a,$bの対象になるんですね
コードがすっきりしました
>>730さん、ありがとうございます


733 名前:nobodyさん mailto:sage [2008/06/13(金) 12:51:42 ID:???]
>>732
sortでなんで$_がでてくるのかわからない。$aと$bしかないだろ。
grepやmapと混乱してないか?



734 名前:726 mailto:sage [2008/06/13(金) 13:06:56 ID:???]
Perlメモのを応用しようとしていじくりまわして
>>726のソースに間違えて辿り付いたので勘違いしてました
てっきり配列の要素を引っ張り出したらそれが$_になるのかと・・・
で、$a,$bはそれが直接比較の対象にならないといけないのかと勘違いしてました orz


735 名前:nobodyさん mailto:sage [2008/06/14(土) 03:33:00 ID:???]
俺も今多次元ハッシュ使ってるけどコツがわかると便利で気に入ってる。

736 名前:nobodyさん mailto:sage [2008/06/15(日) 00:12:38 ID:???]
ちょっとした構造体風の物を作るのにいいよね
リファレンスで受け渡しも簡単だし


737 名前:nobodyさん mailto:sage [2008/06/15(日) 01:14:21 ID:???]
WinXPPro+Cygwin、iswebでperlを作成しています。
普段は問題なく動いているのですが、自宅で試したperlをiswebにアップロードする作業が面倒でたまりません。
そこで質問なのですが、
#!/usr/local/bin/perl
とかの表記を書き換えずとも、上記二つの環境の両方で動くように出来ないでしょうか。
毎度毎度アップロードするときに、全cgiを書き換えているので、そこだけでも何とかしたいんです。
もしくは、専用のFTPソフトみたいなので、アップと同時に書き換えてくれるような奴があると良いなぁって思ってます。

どなたか、よろしくお願いいたします。

738 名前:nobodyさん mailto:sage [2008/06/15(日) 01:43:19 ID:???]
それこそローカルと同期させる専用FTPクライアントをPerlで作れよw
Net::FTP使えば、30分程度で作れるだろ。

739 名前:nobodyさん mailto:sage [2008/06/15(日) 01:43:42 ID:???]
っ coLinux
っ ActivePerl をC:\usr\local\以下にインストール

っ 「メンドクセーっ! 頭 #!perl に統一してやんよ。」(Path通ってなかったら知らん)

740 名前:738 mailto:sage [2008/06/15(日) 01:45:20 ID:???]
単純にPerlのパスが違うって問題なら、
XPでエイリアス作れるようにするソフト使って、iswebに合わせればいい。

741 名前:nobodyさん mailto:sage [2008/06/15(日) 01:52:33 ID:???]
>>737

■サーバー

#!/usr/local/bin/perl

require "example.cgi";

■ローカル

#!C:/perl/bin/perl

require "example.cgi";


これなら、example.cgi をアップするだけでOKです。
(意味が違うでしょうか??)


742 名前:nobodyさん mailto:sage [2008/06/15(日) 02:10:08 ID:???]
>>738-741
どうも、有難うございます。
>>741さんのが一番楽そうなので、それでいこうと思います。

どうもありがとうございました。

743 名前:nobodyさん mailto:sage [2008/06/15(日) 14:41:47 ID:???]
Perlでコードを書き始めたばかりの物なのですが、基本が少し分からないので質問させて下さい。

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

宜しくお願いします。




744 名前:nobodyさん mailto:sage [2008/06/15(日) 14:43:16 ID:???]
>hiddenで、フォーム別の値を持っておきその値によって分岐
これが一番一般的で分かり易いと思うよ

745 名前:nobodyさん mailto:sage [2008/06/15(日) 15:43:06 ID:???]
ところでお前ら、
postとらgetを使うときのデバッグってどうしてる?
コマンドラインからPOSTを設定する方法とかあるの?

めちゃめちゃ大変なんだが

746 名前:nobodyさん mailto:sage [2008/06/15(日) 17:13:16 ID:???]
>>743

仕様によりますが、動作の種類によって、
スクリプトそのものを分けてしまうのはどうでしょう。


747 名前:nobodyさん mailto:sage [2008/06/15(日) 17:51:51 ID:???]
受け取った値も表示するようにするかテキストに吐かせてるだけだけど、
そんなに面倒?

748 名前:nobodyさん mailto:sage [2008/06/15(日) 17:55:33 ID:???]
何をやってるのかよくわかんないけど、どうやってコーディングするかという問題より、
postでもgetでも、与えられる引数をちゃんとチェックすることで、自然と動作の分岐が行えると思うんだけど

749 名前:nobodyさん mailto:sage [2008/06/16(月) 02:30:03 ID:???]
質問者の想定とは違うかもしれないが、


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

みたいな感じなら、submit に文字列を仕込むという方法が。

750 名前:nobodyさん mailto:sage [2008/06/16(月) 10:59:18 ID:???]
でも文字化けという問題が...
ラジオかセレクト使えばいいと思う。
それかAjaxか

751 名前:nobodyさん mailto:sage [2008/06/16(月) 11:58:23 ID:???]
>>745
普通はユニットテスト用のロボット作るんじゃね?
使ってないけど、モジュールも何種類かあるはず。

752 名前:nobodyさん mailto:sage [2008/06/16(月) 12:17:52 ID:???]
じゃあ、まずは画面を見て情報を処理しキーボード操作する
ロボットのAIの開発からしなきゃだな。

753 名前:nobodyさん mailto:sage [2008/06/16(月) 12:26:02 ID:???]
>>752
そのAIのデバッグはどうするんですか。




754 名前:nobodyさん mailto:sage [2008/06/16(月) 12:53:21 ID:???]
ニワトリが先か タマゴが先か

755 名前:nobodyさん mailto:sage [2008/06/16(月) 23:32:06 ID:???]
真ん中をとってヒヨコが先だ

756 名前:nobodyさん mailto:sage [2008/06/17(火) 00:45:20 ID:???]
>>745
CGI.pm を使うなら
use CGI qw(-debug);

757 名前:nobodyさん mailto:sage [2008/06/17(火) 10:41:46 ID:???]
>>745

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

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


コマンドライン POSTで検索:
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=

758 名前:nobodyさん mailto:sage [2008/06/17(火) 12:33:48 ID:???]
>>757
500が帰ってきたとき、どこが悪いかどう見当つけてるかってはなしでしょ

759 名前:nobodyさん mailto:sage [2008/06/17(火) 14:47:07 ID:???]
なんでTest関係のモジュール使わないの?マゾなの?

760 名前:nobodyさん mailto:sage [2008/06/17(火) 16:37:40 ID:???]
世の中には君の環境と違う環境の人もいるのだよ

761 名前:nobodyさん mailto:sage [2008/06/17(火) 18:26:54 ID:???]
> 世の中には君の環境と違う環境の人もいるのだよ

意地はってないで、「わかりません!教えてください!」っていうのがオトナだよ

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

意地はってないで、「詳しいことはわかりません!!」っていうのがオトナだよ


763 名前:nobodyさん mailto:sage [2008/06/17(火) 18:53:23 ID:???]
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



764 名前:nobodyさん mailto:sage [2008/06/18(水) 12:33:38 ID:???]
つまらん('A`)1

765 名前:nobodyさん mailto:sage [2008/06/18(水) 14:54:32 ID:???]
Encode::guess_encoding の結果が shiftjis or euc-jp ってなったときで困ってます。
guess_encoding のあとに $utf8 = $enc->decode($inputkeyword); とやってるのですが、エラーとなります。
「 or 」 で split して
my $utf8 = Encode::decode($EncType[0], $inputkeyword);
のようにしたりするのが一般的なんでしょうか?

それとも Encode::decode する際に優先順位を決めたり出来て、それで decode できちゃったりするもんでしょうか?

766 名前:nobodyさん mailto:sage [2008/06/18(水) 15:02:39 ID:???]
>>765
一般的かどうかは知らんが、俺は JEncode::_func_getcode() みたいな
ラッパーを書いて使っている。
www.donzoko.net/source/JEncode/JEncode.pm

767 名前:nobodyさん mailto:sage [2008/06/18(水) 15:25:31 ID:???]
>>766
ありがとうございます。
_func_getcode と _ambiguous、_test_mojicode を見ながら実装します。

768 名前:nobodyさん mailto:sage [2008/06/20(金) 01:13:32 ID:???]
@X0(a,b,c);
@X1(d,e,f);
と二つリストを作って、
$Y = int(rand(2));
で$Yに0か1を入れて、それに対応したリストを使いたいのですが、どうすればいいですか?
print "$X"$Y"[1]";
のような感じにしたいのですが…。

769 名前:nobodyさん mailto:sage [2008/06/20(金) 01:41:21 ID:???]
print @{'X'.$Y};

770 名前:nobodyさん mailto:sage [2008/06/20(金) 01:43:48 ID:???]
あ、スライスか
print @{'X'.$Y}[1];

771 名前:nobodyさん mailto:sage [2008/06/20(金) 01:53:59 ID:???]
>>770
カッコイー

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

横からスマソ

772 名前:768 mailto:sage [2008/06/20(金) 02:20:58 ID:???]
>>769-771
素早い回答ありがとうございます。

773 名前:nobodyさん mailto:sage [2008/06/20(金) 08:10:04 ID:???]
>>769-771
今時シンボリックリファレンスはやめとけ。
use strict;
my @X = [[a,b,c], [d,e,f]];
print $X[0]->[1]; # ==b ($X[0][1] とも書ける)
print $X[1]->[2]; # ==f



774 名前:770 mailto:sage [2008/06/20(金) 12:31:24 ID:???]
>>773
>>768に言ってくれ
前提条件に合わせてわかりやすく書いただけだ

775 名前:768 mailto:sage [2008/06/21(土) 17:41:30 ID:???]
昔やってたEBSってゲームを引っ張り出して弄ってる初心者なので、
バカの一つ覚え状態でかいてます><
>>773の書き方は始めてみました。
ありがとうございます。

776 名前:nobodyさん mailto:sage [2008/06/21(土) 17:48:55 ID:???]
ここらへんにいる連中にへりくだる必要ないと思うよ。

777 名前:nobodyさん mailto:sage [2008/06/21(土) 23:46:21 ID:???]
配列やハッシュでリファレンスを使うことを覚えると、かな〜り違うよ。


778 名前:nobodyさん mailto:sage [2008/06/22(日) 01:48:39 ID:???]
>>773
s[\[\[.*\]\]][([$1])]

779 名前:778 mailto:sage [2008/06/22(日) 01:49:38 ID:???]
s[\[\[(.*)\]\]][([$1])] # キャプチャし忘れたorz


780 名前:nobodyさん mailto:sage [2008/06/22(日) 02:10:15 ID:???]
perlにjavaの.propertiesファイルみたいなのはないでしょうか?
ちょっとしたデータをファイルの中にまとめておければ便利だと思っているのですが、
そのような奴があれば、助かります。どなたかご教授ください。

781 名前:nobodyさん mailto:sage [2008/06/22(日) 02:24:11 ID:???]
>>780
Data::Properties

782 名前:nobodyさん mailto:sage [2008/06/22(日) 13:05:18 ID:???]
外部コマンドの出力結果の取り込みがうまくいきません、なぜなんでしょうか?

open(COM_RET, "ping -n 10 192.168.100.1 |");
while ($data_line = <COM_RET>) {
print $data_line;
};
close(COM_RET);


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





784 名前:782 mailto:sage [2008/06/22(日) 13:28:07 ID:???]
すみません。
プログラムの保存先を間違えていました。

785 名前:nobodyさん mailto:sage [2008/06/25(水) 22:01:59 ID:???]
Google Wireless Transcoder経由でアクセスされるとpostで送信されてくる
フォームのデータがおかしくなってたことありませんか?
たとえば、なにも入力しなかったinputフォームの値が全て文字列の"VALUE"に
なったり・・・

786 名前:rubi [2008/06/26(木) 00:32:36 ID:P35F8OvT]
system関数で外部コマンドを実行する際、その引数にプログラム内で使用しているスカラ変数の内容を指定するのにはどうすればいいのでしょうか?


787 名前:nobodyさん mailto:sage [2008/06/26(木) 00:55:50 ID:???]
system($cmd $arg1 $arg2 ・・・);

引数中にスペース等ある時は、
system qq($cmd "$arg1" "$arg2" ・・・);

788 名前:nobodyさん mailto:sage [2008/06/27(金) 16:35:38 ID:???]
すみません知恵を貸してください。
こんなファイルがあります → 項目\tデータ\n

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

同じ項目は一つで良いので一番データの短い100\t百\nを残して
残りの長い二行を削除したいと考えています。
何か良い方法は無いでしょうか。
短いデータのみ残したいので配列の重複削除サンプルは
そのままでは利用不可でした。

789 名前:788 mailto:sage [2008/06/27(金) 16:38:10 ID:???]
…と、そもそも重複ではないですね。
重複サンプル〜以下は忘れてください。

790 名前:nobodyさん mailto:sage [2008/06/27(金) 17:02:39 ID:???]
とりあえず書いてみろ

791 名前:788 mailto:sage [2008/06/27(金) 17:30:24 ID:???]
普段はスカラーと配列くらいしか使ってません。
項目もデータもバラバラなので方法が思いつかなくて。

792 名前:nobodyさん mailto:sage [2008/06/27(金) 17:41:01 ID:???]
連想配列

793 名前:788 mailto:sage [2008/06/27(金) 17:59:26 ID:???]
初めは$DATA{項目} = データ; で一つだけ残そうと考えました。
そうじゃなくて、連想配列にしてデータサイズでソートとかあるんでしょうか?
分かりません(><)



794 名前:nobodyさん mailto:sage [2008/06/27(金) 18:21:02 ID:???]
連想配列にしてデータサイズでソートすりゃいいだろ

795 名前:nobodyさん mailto:sage [2008/06/27(金) 18:27:40 ID:???]
書かないってことはまだなにも書けない状態ってこと?
まずはopenでファイル開けるの解かる?

796 名前:788 mailto:sage [2008/06/27(金) 18:50:29 ID:???]
>>795
連想配列に入れてみました。

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

データサイズでソートは後でググってみます。
項目ごとに最短データだけ残す方法は今の時点で想像できません。。

797 名前:nobodyさん mailto:sage [2008/06/27(金) 19:15:25 ID:???]
そこまで出来てるならあとは場合わけでしょ

if (exists $DATA{$key}){
length($DATA{$key}) > length($value) and $DATA{$key}= $value;
} else {
$DATA{$key}= $value;
}

798 名前:nobodyさん mailto:sage [2008/06/27(金) 19:47:44 ID:???]
>>797
食事してて遅れました。
そのままコピペしたのですが望むとおりです完璧です。
項目ごとに一番小さいデータが残る。凄い考え付かない。
本当にありがとうございました。

799 名前:nobodyさん mailto:sage [2008/06/28(土) 13:36:15 ID:???]
◆◆◆◆◆◆◆◆◆毎日新聞社による日本人への誹謗中傷◆◆◆◆◆◆◆◆◆

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

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

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

つまり日本人なら
www.vipper.net/vip552788.jpg

800 名前:nobodyさん [2008/06/29(日) 21:21:31 ID:ib7dTQ8m]
シンタックスハイライト用のモジュールでオススメってありますか?
Syntax::Highlight::Engine::Kateはちょっと好みじゃなかったのと、
Text::Highlightは今のところ使い方が分からないの。


801 名前:nobodyさん mailto:sage [2008/06/29(日) 21:37:01 ID:???]
Text::VimColor

802 名前:nobodyさん mailto:sage [2008/06/29(日) 23:14:30 ID:???]
ありがとう。日本語が上手くいかず。

803 名前:nobodyさん [2008/07/03(木) 04:34:06 ID:N0WlacZt]
日本人がイスラム過激派に狙われる可能性もあります

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

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

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

★祭り★ 「日本の母は息子の性処理係」毎日新聞が捏造記事41
human7.2ch.net/test/read.cgi/ms/1215003832/
★祭り★ 【毎日・変態報道】 毎日新聞、「2ちゃんねる」を名指し…「女性社員中傷書きこみで法的措置」で★26
mamono.2ch.net/test/read.cgi/newsplus/1215016627/
【記者】毎日新聞の英語版記事で日本を侮辱【豪人】
academy6.2ch.net/test/read.cgi/english/1213971760/
【Daily】毎日新聞英語版がひどすぎる 3【WaiWai】
society6.2ch.net/test/read.cgi/mass/1214603376/
【毎日新聞】 iチャネル解約スレ 【変態報道】
hobby11.2ch.net/test/read.cgi/keitai/1214802475/








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前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