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


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

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



1 名前:nobodyさん mailto:sage [2007/09/16(日) 19:49:43 ID:???]
Perlのコーディングで困ってる人のスレです。

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

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

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

お勧めサイトは >2 以降

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

651 名前:nobodyさん mailto:sage [2007/12/16(日) 18:41:45 ID:???]
perlで2ちゃんねるの専用ブラウザみたいなのって作れるんでしょうか。


652 名前:nobodyさん mailto:sage [2007/12/16(日) 19:23:33 ID:???]
ネットワークをサポートしていて、文章の出力が出来るなら大抵の言語で可能だと思うよ。

653 名前:642 [2007/12/17(月) 11:34:49 ID:FgX+pG+l]
>>644
37行目は一番最後のprintの部分です。

654 名前:nobodyさん mailto:sage [2007/12/18(火) 10:34:57 ID:???]
たとえば、sample.plに、

require('lib/lib.pl');
&dosomething();

と書いておいて、lib/lib.plに、

sub dosomething{
  open(FH, '>> baka.log');
  print FH time."\n";
  close(FH);
}

とすると、lib/の中にファイルができるのではなく、ひとつ上にできてしまいます。
これをlib/の中に保存したいのですが、ライブラリからの相対パスで保存する方法はないでしょうか。
または絶対パスを使うしかないのでしょうか。
ヒントだけでもお願いします。

655 名前:nobodyさん mailto:sage [2007/12/18(火) 11:18:35 ID:???]
>>654
じゃあ、ヒントだけ…
つ %INC

656 名前:654 mailto:sage [2007/12/18(火) 16:52:48 ID:???]
>>655
ありがとう!
こーゆー用途に使うのな。

657 名前:nobodyさん mailto:sage [2007/12/19(水) 01:05:36 ID:???]
ハッシュ配列の各要素をリファレンスとして関数の引数に渡したいのですが
よくわからなくて試行錯誤の末下のような方法にたどり着きました

$AA{'name'} = '1234';
$BB[0]{'name'} = 'abc';
$BB[1]{'name'} = 'ああああ';
$BB[2]{'name'} = '!?';

kansuu( \%AA );
$tmp = \@BB;
kansuu( ${\$tmp->[0]} );
kansuu( ${\$tmp->[1]} );
kansuu( ${\$tmp->[2]} );

sub kansuu
{
  my $h = $_[0];
  print "$h->{'name'}<br>";
}

BBの要素を kansuu() に入れるために
もっとスマートな方法(っていうか正しい書式)がありましたら教えていただけないでしょうか?

658 名前:nobodyさん mailto:sage [2007/12/19(水) 01:14:31 ID:???]
my %AA = ( name => 1234 );
my @BB = (
{name => 'abc'}, #$BB[0]に無名ハッシュ(リファレンス)をいれる
{name => 'ああああ'}, #$BB[1]に〃
{name => '!?'} #$BB[2]に〃
);
kansuu( \%AA ); #\をつけることで%AAのリファレンスがわたる
kansuu( $bb[0] ); #$bb[0]の無名ハッシュリファレンスを渡す
kansuu( $bb[1] );
kansuu( $bb[2] );

sub kansuu {
printf('%s<br>',shift->{name});#ハッシュリファレンスは->をつけて要素を取り出す
}


659 名前:nobodyさん mailto:sage [2007/12/19(水) 02:00:39 ID:???]
$,@,%,\と(),{},[]と->の組み合わせで大抵何とかなる。
正直スカラーのリファレンスの説明は自身がないけどおよそあってると思う
my $scalar = 'abc'; #スカラー
my $scalar_ref = \$scalar; #スカラーのリファレンス
my $anon_scalar_ref = \do {my $anon;}; #微妙に無名じゃないけど
my @array = (1,2,3); #配列
my $array_ref = \@array; #配列のリファレンス
my $anon_array_ref = [1,2,3]; #無名配列のリファレンス
my %hash = (a=>1,b=>2,c=>3); #ハッシュ
my $hash_ref = \%hash; #ハッシュのリファレンス
my $anon_hash_ref = {a=>1,b=>2,c=>3}; #無名ハッシュのリファレンス
my $slacar_object = bless $scalar_ref => __PACKAGE__; # スカラー使ったオブジェクト
my $array_object = bless $array_ref => __PACKAGE__; # 配列使ったオブジェクト
my $hash_object = bless $hash_ref => __PACKAGE__; # ハッシュ使ったオブジェクト
#素直に取り出せる
printf "scalar=%s\n",$scalar;
printf "array=%s\n",$array[0];
printf "scalar=%s\n",$hash{a};
#アドレスっぽいのがとれる
printf "scalar_ref=%s\n",$scalar_ref;
printf "array_ref=%s\n",$array_ref;
printf "scalar_ref=%s\n",$hash_ref;
#リファレンス先の値書き換えたり取り出したり
$$scalar_ref = '書き換えちゃった';printf "scalar=%s\n",$$scalar_ref;
$array_ref->[1] = '書き換えちゃった';printf "array=%s\n",$array_ref->[1];
$hash_ref->{b} = '書き換えちゃった';printf "scalar=%s\n",$hash_ref->{b};
#デリファレンスする(copyが作られる)
my $scalar2 = ${$scalar_ref};
my @array2 = @{$array_ref};
my %hash2 = %{$hash_ref};




660 名前:nobodyさん mailto:sage [2007/12/19(水) 07:53:49 ID:???]
CGI.pmでmetaを出力したいのですがうまくいきません。
↓これを出力したいのですが・・・
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

ttp://www.geocities.co.jp/SiliconValley-Sunnyvale/6128/perl/cgipm.html

このページの解説によると、

use CGI;
my $q = CGI->new;

print $q->start_html(
              -head=>meta({'http-equiv' => 'Content-Type'
              -content=>"text/html; charset=$CharSet"}
),

このようなコードになるはずなのですが、やってみると
Undefined subroutine &main::meta called
というエラーがでます。meta()がメインのサブルーチンだと解釈されてるみたいです。



661 名前:660 続き mailto:sage [2007/12/19(水) 07:54:19 ID:???]
print $q->start_html(
              -head=>$q->meta({'http-equiv' => 'Content-Type'
              -content=>"text/html; charset=$CharSet"}
),

とやると一応うまくいくのですが、なぜか
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />


このようにもう一つ余計なメタが出てしまいます。どうすればいいのでしょうか?
CGI.pmは3..31です。


662 名前:nobodyさん mailto:sage [2007/12/19(水) 10:23:45 ID:???]
>>660-661
perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod

my $q = CGI->new;
$q->charset('UTF-8');

663 名前:660 mailto:sage [2007/12/19(水) 23:37:11 ID:???]
>>662

ありがとうございました!

664 名前:657 mailto:sage [2007/12/20(木) 08:31:41 ID:???]
>>658-659
ありがとうございます!
超わかりやすくて助かりました
今のプログラムの色んなところがもっと簡潔に書けそうです

665 名前:nobodyさん mailto:sage [2007/12/20(木) 10:28:40 ID:???]
> 超わかりやすくて助かりました
> 今のプログラムの色んなところがもっと簡潔に書けそうです

本当はわかってないくせに。

666 名前:nobodyさん mailto:sage [2007/12/20(木) 13:33:18 ID:???]
>>658-659ですべてが理解できれば天才

667 名前:nobodyさん mailto:sage [2007/12/20(木) 13:39:25 ID:???]
最低限は書かれてて分かりやすいとは思ったぞ


668 名前:nobodyさん mailto:sage [2007/12/20(木) 16:21:00 ID:???]
読む気もしねぇよ

669 名前:nobodyさん mailto:sage [2007/12/21(金) 21:13:42 ID:???]
でもああやって思いつく限りの書き方試して要素やハッシュ値見てればなんとなくでもわかってくるはず。
めんどいけど。



670 名前:nobodyさん mailto:sage [2007/12/22(土) 18:50:11 ID:???]
あんな変な列挙を眺めるんじゃなくて、続初めてのPerl読むべきだろ。

671 名前:nobodyさん mailto:sage [2008/01/02(水) 06:47:19 ID:???]
perl5.10 に移行した人います?

672 名前:nobodyさん mailto:sage [2008/01/02(水) 20:07:21 ID:???]

依存コードは書いてないけど

673 名前:nobodyさん mailto:sage [2008/01/03(木) 00:16:04 ID:???]
ノシ
cygwinで5.10入れてみた
use 5.10;で書いてみてる

674 名前:nobodyさん mailto:sage [2008/01/05(土) 22:21:41 ID:???]
変数の中身を展開せずに確認したい場合ってどうすればいいんでしょうか?

$test = "今日は\n いい天気です $wether";

こんな変数があるとして、$test自体は展開してほしいんですが、
中身の\nや$wetherは展開せずに出力したいのです。

675 名前:nobodyさん mailto:sage [2008/01/05(土) 22:58:36 ID:???]
'

ちなみに、weather?

676 名前:nobodyさん mailto:sage [2008/01/06(日) 03:58:05 ID:???]
>>674
$testに代入した時点で展開しちゃってるでそ
そもそも確認したい意図は何?

リファレンスにしてアドレスを確認する手もあるけど

677 名前:674 mailto:sage [2008/01/06(日) 14:08:20 ID:???]
うーん、無理みたいですね。諦めます。一応問題は解決しましたので

>>675
そうです;
>>676
なるほど・・・
意図は正規表現でゴチャゴチャいじったあとの文字列が
どうしてもめちゃくちゃくになってしまうので、変数の位置関係を調べたかったのです。

678 名前:nobodyさん mailto:sage [2008/01/06(日) 16:36:10 ID:???]
>>674はなぜ>>675の一行目を無視するんだ?
それが答えじゃないか。
>>676はそれもわかってないみたいだが。

679 名前:nobodyさん [2008/01/06(日) 23:12:25 ID:wcb81UNa]
$kekka = int(200 * 0.29);
print "$kekka";

このような計算をしたら、結果が57になりました。
intって小数点が発生した時に切り落とすはずですよね?
えと、なぜこんなことになるのか意味が分からないのですが、
誰かご教授お願いします



680 名前:nobodyさん mailto:sage [2008/01/07(月) 01:59:09 ID:???]
>>679
www.tt.rim.or.jp/~rudyard/torii009.html

681 名前:nobodyさん mailto:sage [2008/01/07(月) 11:17:24 ID:???]
それ、今じゃ間違いじゃないってのが一般的。
語源の知識としてはありだけど、誤用が定着するなんていくらでもあることだから。

いつもいつも空気読めない人が指摘するよな。

682 名前:nobodyさん mailto:sage [2008/01/07(月) 11:27:36 ID:???]
>>679
$kekka = int(((my $n=200 * 0.29)=~/(.*)/)[0]);
print "$kekka";

こう書けばOK

683 名前:nobodyさん mailto:sage [2008/01/07(月) 11:29:04 ID:???]
>>681
誤用でない方が一般的だとする根拠は?

684 名前:nobodyさん mailto:sage [2008/01/07(月) 11:38:36 ID:???]
回答にはなってないけれど、こちらの環境でもいくつか試してみた
ので、その結果を書いておく。
何でこんな風な結果になるのだろうか。私も分からなかった。

$kekka = 200 * 0.29;
print "$kekka";
出力:58

$kekka = 200 * 0.29;
$kekka = int($kekka);
print "$kekka";
出力:57

$kekka = int(200 * 0.29);
print "$kekka";
出力:57

$kekka = int(2 * 29);
print "$kekka";
出力:58

685 名前:nobodyさん mailto:sage [2008/01/07(月) 12:30:31 ID:???]
浮動少数の扱いの問題。
use bignum; これで解決。

686 名前:nobodyさん [2008/01/07(月) 21:15:48 ID:XSyaqzwg]
>>685
おぉ いきました!
詳しい原因はよくわからないですが、ありがとうございました。

687 名前:nobodyさん mailto:sage [2008/01/07(月) 21:22:49 ID:???]
ためしにPerlじゃなくてLispで
(* 200 0.29)
ってしてみたら57.99999999999999だってさ。機械の計算って難しいことがあるな


688 名前:nobodyさん mailto:sage [2008/01/07(月) 22:41:02 ID:???]
誤差については、がっこで習うものだと思ってたけど、そうでもない?


689 名前:nobodyさん mailto:sage [2008/01/07(月) 22:44:33 ID:???]
俺は習ったけど、もしかしたら教えてないところも少なくないかもしれん



690 名前:nobodyさん mailto:sage [2008/01/07(月) 23:59:36 ID:???]
情報工学を扱う授業でもなきゃ教わらないんじゃね?
少なくとも俺は浮動小数点の丸め誤差については習ったことない。

あと高校の世界史も。

691 名前:nobodyさん mailto:sage [2008/01/08(火) 00:07:25 ID:???]
>>683
>>681じゃないがなんかの辞書に載ってた気がする
ソースはない


692 名前:nobodyさん [2008/01/08(火) 00:31:05 ID:k+nta2fc]
丸め誤差の知識はありますけど、
コンピュータの中で200*0.29ってどうやって計算してるか分からない
そもそも結果が57.9999・・・・になると言われても、どういう計算をしているのか
さっぱりw

693 名前:nobodyさん mailto:sage [2008/01/08(火) 00:34:28 ID:???]
しかも
(* 20 0.29)
これは5.8って表示されるから困るw

694 名前:nobodyさん mailto:sage [2008/01/08(火) 00:38:53 ID:???]
自前のショッピングカートの消費税を int($sum * 0.05) みたいに計算してるんだけど、大丈夫だろうか…

695 名前:nobodyさん mailto:sage [2008/01/08(火) 07:14:24 ID:???]
>>694
>>685にすれば大丈夫かと

696 名前:nobodyさん mailto:sage [2008/01/08(火) 08:15:35 ID:???]
俺は一番最初の質問者ではないが、浮動小数点の丸め誤差については、
wikipediaにも載ってたね。
問題の解決には、 use bignum; つかえばいいわけで、それでいい
のは分かるけれど、それとは別の話で、小数を100倍して整数で演算をして、
あとで100で割ったりする方法だったらちゃんとでるから
use bignum; しなくてもいいんだよね?

697 名前:nobodyさん mailto:sage [2008/01/08(火) 22:01:08 ID:???]
>>696
0.29が有効数字2桁だとあらかじめ分かっているなら100倍すればいいけどなあ。
既知でないときにはuse bignum;じゃないか?

698 名前:nobodyさん mailto:sage [2008/01/09(水) 00:10:32 ID:???]
>>697
レスサンクス。
いや、意味の無い部分の考えかなと思ったんだけど、
そっちの方がメモリが少なくて済み、処理が早くなったりするのかなとか
思ったのよね。ま、すごく小さな世界をいっているんだろうけれど。

699 名前:nobodyさん mailto:sage [2008/01/09(水) 01:01:57 ID:???]
うーん、俺も難しいことはわからんけど、
俺は細かい実行時間を気にしてミスをするより、コードの可読性を優先したいな。と思った。
大量のデータを扱う人から見ればふざけた態度かもしれないけどね。



700 名前:nobodyさん mailto:sage [2008/01/09(水) 02:01:45 ID:???]
LL的には人間にとっての最適化(コードの可読性)のほうが重要だからそれでいいと思うな

701 名前:nobodyさん [2008/01/09(水) 03:08:01 ID:480klIK2]
リーダビリティ重要。(高橋メソッド風に)

702 名前:nobodyさん mailto:sage [2008/01/10(木) 23:51:33 ID:???]
IPを10進数に変換したものと、
サブネットマスク形式のリストをマッチングさせたいんですが、
どんなループさせればいいですかね?

#判定ルーチン内
foreach (@list) {
 my ($min,$max) = subnetMinMax($_);
 return ($ip >= $min and $ip <= $max) ? 1 : 0;
}
としてるんですが、grep等を使ったほうが良いんでしょうか?
ループ内でサブルーチン呼ぶのがちょっと気になります。

703 名前:nobodyさん mailto:sage [2008/01/11(金) 00:04:09 ID:???]
訂正orz

x: return ($ip >= $min and $ip <= $max) ? 1 : 0;
o: return 1 if($ip >= $min and $ip <= $max);

704 名前:nobodyさん mailto:sage [2008/01/11(金) 11:44:26 ID:???]
@listの中にマッチするものが複数存在する可能性があって
何にマッチしたか全て取りたいならgrepだけど
有るか無いかだけでいいならループ回して見つけ次第結果返していいんじゃない?


705 名前:nobodyさん mailto:sage [2008/01/11(金) 16:30:20 ID:???]
return $ip >= $min and $ip <= $max;


706 名前:nobodyさん mailto:sage [2008/01/11(金) 20:31:41 ID:???]
>>704
なるほど。このままにしますありがとうございました。

>>705
そっか、そうですよね。
聞いてみて良かったです。

707 名前:nobodyさん mailto:sage [2008/01/12(土) 13:10:11 ID:???]
「うんこ」を含む行の最後に「出る」と追加することってできますか?
「うんこ」の前後は英数字・日本語交じりで文字数は不定です。
$_ =~ s/(うんこ)/$1でる/;
だと、うんこ〜出るの間の文字が文末にきてしまいます。
文末指定は$みたいなので
$_ =~ s/(うんこ)/$1でる$/;
としてperlを実行させると、エラーなのか、プログラムが終わりません。

708 名前:nobodyさん mailto:sage [2008/01/12(土) 13:13:01 ID:???]
if ( $うんこ =~ /うんこ/ ) {
 $うんこ .= ’でる’


709 名前:nobodyさん mailto:sage [2008/01/12(土) 13:38:43 ID:???]
「うんこを含む行」「改行」 ⇒ 「うんこを含む行」「でる」「改行」

if (index($_, 'うんこ') >= 0){ $_=~ s/$/でる/; }



710 名前:707 mailto:sage [2008/01/12(土) 13:54:47 ID:???]
>>708
全角を半角にしてやってみたりしましたが、エラーでした。

>>709
できました。ありがとうございます。
ただ、>=0の意味が分かりません。
改行は\nじゃないんですか?

711 名前:nobodyさん mailto:sage [2008/01/12(土) 18:35:26 ID:???]
なにこのうんこスレ

712 名前:nobodyさん mailto:sage [2008/01/12(土) 19:18:44 ID:???]
>>710
index

713 名前:707 mailto:sage [2008/01/12(土) 22:50:20 ID:???]
>>712
すみません、わかりました。ありがとうございました。

714 名前:nobodyさん [2008/01/13(日) 13:16:41 ID:rzzkvCmj]
怠惰が美徳だの
エロエロ言語だの
言うけどさ
俺が習ってきた主な4つの言語のなかじゃ
間違いなく一番習得が苦しかった

つまり、学習コストは高い
Perlより習得が難しい言語ってあるの?

私見では達人レベルを目指すならC++が全言語のなかで一番習得困難
そこそこのプロレベルを目指すならPerlが一番困難(C++はそこそこのプロならまだ簡単)

715 名前:nobodyさん [2008/01/13(日) 13:17:19 ID:rzzkvCmj]
スレ間違えた( ゚д゚ )

716 名前:nobodyさん mailto:sage [2008/01/13(日) 21:52:12 ID:???]
配布用のスクリプトを書く予定なんですが、
変数名のつけ方で悩んでいます。
たとえば、
my $title;
my $script_content_title;
my $ScriptContentTitle;
sub param{}
sub parse_URL_encoded_string{}
sub ParseURLEncodedString{}
等、色々書き方ありますが
短い方が良いのか、わかりやすい名前が良いのか、
又、大文字、小文字を混ぜて使うべきか、覚えやすい名前にするべきか、
意見ください。
賛否両論あると思いますが、極力万人受けするものを選びたいです。

長文すみません

717 名前:nobodyさん mailto:sage [2008/01/13(日) 21:53:50 ID:???]
配布スクリプトの中身の変数名なんて誰も見ねぇよ

718 名前:nobodyさん mailto:sage [2008/01/13(日) 21:56:06 ID:???]
>>717
学習、改造用として配布したいんです。

719 名前:nobodyさん mailto:sage [2008/01/13(日) 22:43:42 ID:???]
perldoc perlstyle



720 名前:nobodyさん mailto:sage [2008/01/13(日) 23:03:26 ID:???]
変数や関数の名前の付け方は、どんなプログラムを書こうとしている
かというところもあるからな。
例えば、関数名で html_ をつけるとそうでないものとの区別がついて
分かりやすくなるけれど、全部の関数に html_ がついてたら
逆に無意味に長いだけとなる。
ここでアドバイスが欲しかったら、その書こうとしているプログラムや
ソースをもう少し具体的にだすとかしないと話は進まないと思う。

721 名前:716 mailto:sage [2008/01/13(日) 23:22:17 ID:???]
>>719
ありがとうございます。全部読みました。

基本的にはアンダースコアを使うべきだそうです。
スコープによって使い分けるのが良いみたいですね。
$Global_Data #グローバル
$tmp    #局所
$LOCK_KIND #定数

>>720
プログラムの種類によって書き方が変わる、変えられるのがperlの利点かもしれませんね。
>全部の関数にhtml_
そういうのはパッケージにまとめればOKですかね。

おかげ様で書き方が頭に浮かんできました。ありがとうございました。

722 名前:nobodyさん mailto:sage [2008/01/14(月) 02:09:11 ID:???]
Perlプログラマは"不精"なので面倒なタイピングはしません。
でもPerlプログラマは"傲慢"なので他人のコーディングスタイルを気にしません。
こんなイメージ。

723 名前:nobodyさん mailto:あげ [2008/01/14(月) 02:26:48 ID:???]
怠惰と傲慢と短気だっけなラリーの三原則。

ネーミング重要。(高橋メソッド風に)

でも職人芸的なところあるよねネーミングセンスって。
なかなかそこは難しい。

724 名前:nobodyさん mailto:sage [2008/01/14(月) 04:10:53 ID:???]
果たして自閉症の描くイメージとは

725 名前:nobodyさん mailto:sage [2008/01/14(月) 04:15:16 ID:???]
>>716
もう解決したみたいだけど、Perlベストプラクティスもおすすめ
ダミアン先生の盲信はいけないけど、かなりためになるYo

726 名前:nobodyさん mailto:sage [2008/01/14(月) 17:41:01 ID:???]
ダミアン先生はPerl界屈指のハッカーだが、著作物での記述にクセが全くないわけではないからね。

一般論としては、上を目指すならいろんなハッカーのコードや文章にたくさん触れることが必要。
これがなかなか大変だし難しい。
そのためにはネット上のコミュニティーやリアルのイベントにこまめに参加したり
ブログを定期的にチェックし続けないといけないから。
そういうことをしてない自称Perl使いが結構俺の周りにはいて、
そういう奴らは我流のあまりエレガントじゃないスタイルから抜け出せないでいる。

727 名前:nobodyさん [2008/01/14(月) 18:57:12 ID:4AKnbZN2]
ファイルに入っている文字を出力するつもりなのですが、
メタ字が混ざっていることもあり、ちゃんと出力できません。
あらかじめファイルの中のメタ字に\を振って置くとしても、かなりの手間になりそうですし、
何か効率の良いメタ字対策はないでしょうか?

728 名前:727 [2008/01/14(月) 19:02:23 ID:4AKnbZN2]
すみません。微妙に文書が狂っていました。
ファイルに入っている文字からの出力の際の
文字化けする文字の対策をお願いします。

729 名前:716 mailto:sage [2008/01/14(月) 20:00:43 ID:???]
>>725-726
オライリーファンの俺には最高の本かもです。
>>727-728
余計な事してるからじゃないですかね?
quotemetaなんてのはどうですか?
文字コードなんかも書くと返事もらえるかも。








730 名前:nobodyさん mailto:sage [2008/01/14(月) 20:08:53 ID:???]
>>727
情報不足です。
「ファイルに入っている文字」…どんな文字? 文字コードは何?
「出力するつもり」…どこに出力するの?
「メタ字」…具体的にどの文字ですか?
「ちゃんと出力できません」…具体的にどのように出力できないのですか?

ありがちなのは、ファイルの中と、コンソールの文字コードの設定が異なっていて、文字化けしたように見えるとか。
メタ文字をいったん解釈してしまっているとか。
ヌル文字とかタブとか垂直タブとかグループセパレータとかasciiの制御コードはそもそも「文字」ではないですし。
「文字」をどう「出力」したいのかにもよります。

コードを示してはどうですか。

731 名前:727 [2008/01/14(月) 20:18:57 ID:4AKnbZN2]
$i = 0;
while($list = <IN>){
 (undef,$name[$i],undef) = split(/:/, $list);
 $i++;
}
@name = sort(@name);
while($line = <@name>){
 print "<option value='$line'>$line</option>";
}
えーっと、コードはこのような感じです。
ファイルのDBにアクセスして、その中の一部を取り出しソートしてhtmlで出力するという形です。


732 名前:nobodyさん mailto:sage [2008/01/14(月) 20:21:10 ID:???]
メタ文字がhtmlの解釈の問題を引き起こしてるんじゃないよね?

733 名前:nobodyさん mailto:sage [2008/01/14(月) 20:23:30 ID:???]
metaタグで宣言している文字コードと異なるとか…
html中で使われてる文字コードと出力してる変数の文字コードの不一致とか…

734 名前:727 mailto:sage [2008/01/14(月) 20:30:22 ID:???]
>>733
タグで宣言しているコードは関係ないのではと思います。
出力するとき、一部の文字がうまく表示出来ていませんから。


735 名前:727 mailto:sage [2008/01/14(月) 20:32:56 ID:???]
現状としてはファイルの中の「ソ」とかに\を付けていけば表示はうまくいくのですが、
ファイルをその後書き換えたりするとそれも出来なくなるのではないかと思っております。

736 名前:nobodyさん mailto:sage [2008/01/14(月) 20:40:00 ID:???]
これか?www.kentweb.jp/pubc/jcode/

737 名前:nobodyさん mailto:sage [2008/01/14(月) 20:46:05 ID:???]
>>735
use utf8;
binmode STDIN, ':encoding(shiftjis)';
binmode STDOUT, ':encoding(shiftjis)';
# windowsなら shiftjis -> cp932

↑やってみて
ソース中に日本語文字列書くならutf8で保存してね。


738 名前:nobodyさん mailto:sage [2008/01/14(月) 20:54:55 ID:???]
あw
binmode IN, ':encoding(shiftjis)';
かな?

739 名前:nobodyさん mailto:sage [2008/01/14(月) 20:57:33 ID:???]
>>731
DBにアクセスしているのにファイルハンドルから@nameに格納しているとはいかに?
@nameへの格納の仕方が心許ないです。せめて以下のようにするとか。
my @name = map { (split(/:/))[1] } <IN>;
splitの対象が全角のコロンですが、perlソースと取り扱うデータの文字コードが合っていないと
間違いの元ですよ。

で、optionタグで書き出すべき文字列のリストが@nameに入っていて、それをどうしてグロブ
演算子を使っているのかわかりません。私はこんなこと一度もしたことありませんが…。
ここで、@nameの各要素がいったん解釈されてしまっていて、カタカナのソなどSJISの2バイト目の
\x5cが取り除かれてしまっています。単に
for (sort @name) {
  print qq{<option value="$_">$_</option>\n};
}
でいいと思うのですが。



740 名前:nobodyさん mailto:sage [2008/01/16(水) 00:34:21 ID:???]
CGI::Applicationで index.cgi?rm=<デタラメなキー> のように
run_modesで定義されなかったrun_modeを指定するとエラーが発生させられてしまうのですが
未定義の場合デフォルトのrunmodeを起動させる方法は無いでしょうか?

741 名前:nobodyさん mailto:sage [2008/01/16(水) 02:08:57 ID:???]
$self->run_modes(
    AUTOLOAD => \&catch_my_exception,
);

742 名前:nobodyさん mailto:sage [2008/01/16(水) 02:17:14 ID:???]
>>741
ありがとうございます!試してみます。

743 名前:nobodyさん [2008/01/16(水) 04:59:20 ID:FWbaTTLj]
5.005です。
以下のような、引数が省略可能なサブルーチンがあるとします。

 sub Func(;$\@\%) { (省略) }

このとき、引数が渡されたのか、それとも省略されたのかを
Func内で判断する方法を教えてください。

なお、そのままifに入れると偽となるような値(例えばスカラーの値が0)の場合も、
引数が渡されていると判断します。

744 名前:nobodyさん mailto:sage [2008/01/16(水) 05:29:59 ID:???]
>>743
引数の数から判定
sub Func(;$\@\%) { print scalar @_ }
Func(); # 0
Func(undef); # 1
Func(1, @hoge); # 2

745 名前:nobodyさん mailto:sage [2008/01/16(水) 05:44:10 ID:???]
>744
ありがとうございます。
なるほど、サブルーチンを使う時は常に@_を意識しないとダメだってことですね。

746 名前:nobodyさん mailto:sage [2008/01/16(水) 11:29:46 ID:???]
@_ ってカタツムリみたいだよね。

@_ii

747 名前:nobodyさん [2008/01/16(水) 14:19:16 ID:Z4nycbhz]
かたつむり大作戦

748 名前:nobodyさん [2008/01/16(水) 20:06:54 ID:L/Qn1HzA]
質問です!

入門書を見ながら「URLにパラメータを加える」というのをやりました。

〜〜/test.cgi?list=man

とURLにパラメーターをくっつけ、cgiで

&ReadParse( *form );
$sex = $form{ 'list' };

と受け取ったつもりだったのですが、結果をprintしてみると

manman

と2回表示されてしまいます。これは何が悪いのでしょうか?

749 名前:nobodyさん mailto:sage [2008/01/16(水) 20:30:55 ID:???]
いるんだよ、自分で勝手に照会用のコードを切り詰める奴



750 名前:748 mailto:sage [2008/01/16(水) 20:51:36 ID:???]
失礼しました。手当たりしだい試してたら解決しました。
なんだか色々と間違ってたようです。

751 名前:nobodyさん [2008/01/16(水) 22:40:40 ID:QOevDgBW]
CGIモジュール等を使わない、
一般的なuriデコードのバグってどんな事ですか?

同じkeyに複数のvalがある場合の対処はしてます。

752 名前:nobodyさん mailto:sage [2008/01/17(木) 00:41:41 ID:???]
>>751
区切り文字が & でなく ; のときとか、マルチタイプで送られてきたときとか、XSS対策とかかな?

753 名前:nobodyさん mailto:SAGE [2008/01/17(木) 12:39:49 ID:???]
ちょっと考えてみてほしい
ドラゴンボールというのは、集めれば願いがかなうアイテムだ
それに対して、
ウンコは、いくらドッサリ集めてもウンコにしかならない
このように両者は一見似ているようで本質的に異なる


754 名前:nobodyさん mailto:sage [2008/01/17(木) 12:41:44 ID:???]
>>751
巨大なクエリーとか、lengthがでたらめとかかな?
# httpdの仕様にもよるな

755 名前:nobodyさん mailto:sage [2008/01/17(木) 17:15:28 ID:???]
uriデコード?とは関係ないけど
CGI.pm使うとmod_perl環境(Apache::RegistryやModPerl::Registry)で
-ParseHeadersやPerlSendHeader offしてあってもheaderを正しく扱えるので
CGIでもmod_perlでも動きます。ってプログラムが作りやすくなる。


756 名前:nobodyさん mailto:sage [2008/01/17(木) 17:17:24 ID:???]
>>751
バグってどういうこと?

引数には、ある程度想定されるものしか入らないはずなんだから、
$form{'hoge'} とか、引数として使う値に想定される正しい値が入っているかのチェックを行えばいいんじゃないの?

757 名前:751 mailto:sage [2008/01/17(木) 18:58:22 ID:???]
>>752
区切り文字はCGI.pmでも&か:ですよね。

>>754
cgi側では解決できないような感じしますね。

>>755
それは良いコト聞いた。

>>756
オライリーの本読んでたら一般的にバグがあるとの事です。
CGI..pm使えとの一点張りです。
なので、どこにバグがあるのかなと ← いまここ

みなさんレスありがとうございます。

758 名前:nobodyさん mailto:sage [2008/01/17(木) 23:23:09 ID:???]
とりあえず>>751がド初心者だということは分かった。

759 名前:nobodyさん mailto:sage [2008/01/18(金) 00:48:01 ID:???]
>>758
スレタイ読めカス



760 名前:nobodyさん [2008/01/18(金) 12:04:46 ID:Z4Jr4bli]
ファイルをサーバにアップロードしたいCGIがほしいのですが
どこかいいサンプルないでしょうか?

アップロードしたいファイルはエクセルファイルです

761 名前:nobodyさん mailto:sage [2008/01/18(金) 12:15:45 ID:???]
ぐぐれかす

762 名前:nobodyさん mailto:sage [2008/01/18(金) 12:39:13 ID:???]
アップロードされたファイルのを受信するCGIなのか、
それともファイルをアップロードするCGIなのか知らんけど
search.cpan.org/~gaas/libwww-perl-5.808/lib/HTTP/Request/Common.pm
search.cpan.org/~lds/CGI.pm-3.33/CGI.pm#CREATING_A_FILE_UPLOAD_FIELD

763 名前:nobodyさん mailto:sage [2008/01/18(金) 12:51:11 ID:???]
>>760
ちゃんとした日本語で

764 名前:nobodyさん mailto:sage [2008/01/18(金) 14:27:48 ID:???]
アップロードしたがってるCGIが欲しいんだろ

765 名前:nobodyさん mailto:sage [2008/01/18(金) 15:13:46 ID:???]
意思を持つCGIコワス

766 名前:nobodyさん mailto:sage [2008/01/18(金) 16:38:38 ID:???]
>>760 こんな感じですか?
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use CGI qw/:standard/;
use constant MAX_WAIT => 10;
my $q = new CGI;
$q->charset('utf8');
my $wait = rand(MAX_WAIT);
my @mind = qw(uploadしたい uploadしたくない uploadしてもいい);
my $mind = $mind[ int( rand(scalar @mind) ) ];
print start_html(
-head => meta({-http_equiv=>'refresh', -content=>"10; URL=$ENV{SCRIPT_NAME}"}),
-title => 'CGIの気持ち'
),$mind,end_html;


767 名前:nobodyさん mailto:sage [2008/01/19(土) 01:06:12 ID:???]
>>766
$waitは、どこで使ってるの?
-head => meta({-http_equiv=>'refresh', -content=>"$wait; URL=$ENV{SCRIPT_NAME}"}),
とかやりたかったのか?

768 名前:nobodyさん [2008/01/19(土) 14:38:24 ID:gMv3rNuv]
すみません、少し数学の話になるかもしれませんが、
100%の確率のうち30%が当たりという設定をして
くじを引かせる場合、

my $rate = 30;
my $atari = int((rand(100))) + 1;
if($atari <= $rate){
 print "あたり\n";
}

これで30%ということに理屈ではいえるのでしょうか。
それとも上か下かなので2分の1になるのでしょうか。

ご教示いただけますと幸いです。

769 名前:nobodyさん mailto:sage [2008/01/19(土) 15:04:56 ID:???]
算数のレベルだぞ



770 名前:nobodyさん mailto:sage [2008/01/19(土) 15:25:31 ID:???]
すみません

771 名前:nobodyさん mailto:sage [2008/01/19(土) 16:00:15 ID:???]
>>768
そういうときは、そのコードを何万回か繰り返してあたりとはずれのカウントを取って、
実際に30%くらいになるかを調べればいいんですよ。

772 名前:nobodyさん mailto:sage [2008/01/19(土) 17:54:09 ID:???]
>>768
極東連合乙

773 名前:nobodyさん mailto:sage [2008/01/19(土) 18:03:47 ID:???]
>>768
10000回だけ繰り返してみた。

あたり=3031
はずれ=6969

774 名前:nobodyさん mailto:sage [2008/01/19(土) 21:24:36 ID:???]
>>771
ありがとうございます。

>>773
実行有難うございます。
私の方でもやってみましたが、平均値が30%になりました。
安心しました。

775 名前:nobodyさん mailto:sage [2008/01/19(土) 23:16:40 ID:???]
#!/usr/bin/env perl
use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use POSIX qw(strftime);
my $q = new CGI;
print $q->header(), $q->start_html();
#print $q->dump; # for debug
my $outputdir = "log"; # ファイルを置く先 (ディレクトリ)
my $fh = $q->param('uploaded_file');
my ($ex) = ($fh =~ m|(\.[^./\\]+)$|); # 拡張子
if ($fh ne "") {
my $timestamp = strftime "%y%m%d%H%M%S", localtime;
my $outputfn = "$outputdir/$timestamp$ex";
open(F, "> $outputfn") or die;
flock(F, 2);
if (defined $fh) {
while (<$fh>) {
print F $_;
}
}
close F;
print qq{saved as <a href="$outputfn">$outputfn</a>};
}
print $q->start_multipart_form(-name => 'myform'),
$q->filefield(-name => 'uploaded_file'),
$q->submit("OK"),
$q->endform,
$q->end_html(), "\n";

776 名前:760 mailto:sage [2008/01/19(土) 23:18:40 ID:???]
ファイルをアップロードするCGIを探してます。
日本語おかしかったですね、すいません。
サンプルを探したんですが
>>775のままだったら
ファイルをアップしたときにファイル名が
アップロードした日付になってしまいます。
ファイル名を変更することなくアップロードするにはどうすればいいでしょうか?

777 名前:nobodyさん [2008/01/20(日) 00:14:39 ID:1RDcSYMg]
my $outputfn = "$outputdir/$timestamp$ex";
のところを、そうじゃなくすれば良い。

778 名前:nobodyさん mailto:sage [2008/01/20(日) 00:15:00 ID:???]
>>776
マルチタイプを分割して、そのヘッダ部分に名前あるよ。

779 名前:nobodyさん mailto:sage [2008/01/20(日) 02:12:08 ID:???]
ついでにフォルダ名も表示してやれば、閑古鳥鳴くこと間違い無し。



780 名前:nobodyさん mailto:sage [2008/01/20(日) 03:03:09 ID:???]
サーバにファイル名を任意に保存出来るって危険じゃね?
同名ファイルの処理が必要になるし、文字化けとかあるし。
文字化けとかしたら、ダウソとか出来なくなる場合もあるし、
削除とかはsshログインして * とか使って消さないといけなく
なる場合もある。(解決は出来るから問題なしともいえるのだが)
日本語はファイルと一緒にコメントとして管理すべきだと思うけど、
どうかな?

781 名前:nobodyさん mailto:sage [2008/01/20(日) 10:25:46 ID:???]
>>780
間違いなく正しい。

782 名前:nobodyさん [2008/01/20(日) 19:19:48 ID:xw354eHR]
上の人とは別人だけどファイルのアップロードに関して質問

open(OUT, ">$filename");
binmode(OUT);
while (read($fh, $buf, 1024)) { print OUT $buf; }
close(OUT);
close($fh);

上記なソースをよく見かけるんだけど、
三行目で一気に処理するんじゃなくて、
1024バイトずつ取り出して処理する理由って何?

783 名前:nobodyさん mailto:sage [2008/01/20(日) 19:21:07 ID:???]
1000MBのバッファ蓄えろというのか

784 名前:775 mailto:sage [2008/01/20(日) 19:37:21 ID:???]
>>777
具体的にどうかえればいいのでしょうか?
教えてくださいとはいいません。
やってください

>>780
ご意見ありがとうございます。

785 名前:nobodyさん mailto:sage [2008/01/20(日) 20:21:40 ID:???]
完全に自分専用とかなら別なんだろうけどな。

786 名前:nobodyさん mailto:sage [2008/01/20(日) 22:56:33 ID:???]
>782-783 に関連した便乗質問で悪いけど、
レン鯖とかも考えた時の常識的なメモリ使用量ってどのくらい?
シュワルツ変換とか使っていいものかいつも悩む。

787 名前:nobodyさん mailto:sage [2008/01/20(日) 23:26:35 ID:???]
>>786
「レンタルサーバ メモリ使用量」でぐぐってみたらどうかな?
ま、突き詰めるとそのサービスの仕様次第となるだろう。
シュワルツ変換も「やってはいけない処理」ではなく、重たい処理
でしかないからな。それだけの質問では何もいえない。
具体的なソースを出して、この負荷は問題ないか?とかなら分かるが。

788 名前:nobodyさん [2008/01/21(月) 21:15:32 ID:29cYlZ80]
input type=file で送るファイルを指定しますが、
この場合のファイル名そのものを取得するようにするには
どのようにしたらよいですか?

789 名前:nobodyさん mailto:sage [2008/01/21(月) 21:26:25 ID:???]
>>788
HTTP_CONTENT_TYPEを見て、boundaryで区切って分割して、そのヘッダを読む。



790 名前:nobodyさん [2008/01/21(月) 22:20:09 ID:29cYlZ80]
>>789
有り難うございます
よく分かりませんが、ヒントを元にくぐってみます

791 名前:nobodyさん [2008/01/21(月) 22:33:12 ID:MggCWroJ]
toolkitについての質問です。

toolkitのテンプレートを利用ユーザに編集させてたいと思っているのですが、
[% myheader = 'my/index.cgi' %]
[% INCLUDE myheader %]
などされるとソースが見えてしまいます。
なんとか規制できないでしょうか?
phpのsmartyであれば以下のように、テンプレートからのインクルードを規制することができます。
同等の機能はあるのでしょうか?
$this->security = true;
$this->security_settings["INCCLUDE_ANY"] = false;
$this->security_dir = "/path/to/templates";
$this->trustes_dir = "/path/to/php";

または、テンプレート内で使える関数を指定できるとかありますでしょうか?

日本語マニュアル見てみましたが、それらしいものがありませんでした。
www.hakoniwa.net/tt/


792 名前:nobodyさん mailto:sage [2008/01/21(月) 23:09:44 ID:???]
>>787
亀レスですみません。ぐぐってみました。
>782-783 のような流れをたまに見るので業界の暗黙知が
あるのかと思いましたが特に無いようですね。
会社毎に見ていくと具体的な数字を出している所は少なかったですが、
少ないところで2MBと10Mb(=1.25MB?)でした。

793 名前:nobodyさん mailto:sage [2008/01/21(月) 23:29:51 ID:???]
ムーアの法則があるので、数値は出しにくいところがある。
あるサーバで5秒くらいかかっていたのが、最新のでは1秒くらいで終わるので、
ぜんぜん問題にならなくなったとか。

でも、1分を1秒にするのはムーアの法則でも5年以上はかかるわけで、
そのくらいの規模はどう頑張っても無理だろという話だ。

794 名前:nobodyさん mailto:sage [2008/01/22(火) 09:20:05 ID:???]
>>791
INCLUDE自体を抑制するやり方はわからんが、

If a BLOCK definition is not currently visible then the template
name should be a file relative to one of the INCLUDE_PATH directo-
ries, or an absolute or relative file name if the ABSOLUTE/RELATIVE
options are appropriately enabled.

これを利用すれば普通は十分じゃねーの?

795 名前:nobodyさん mailto:sage [2008/01/22(火) 10:10:27 ID:???]
テンプレート編集自体はtoolkit使うわけじゃないだろ?
そこでチェックすりゃいいんじゃね?

796 名前:791 [2008/01/23(水) 00:37:55 ID:fM6ljyqY]
>>794
>もし、ブロック定義が見つからない場合は、テンプレート名はINCLUDE_PATHのディレクトリにあるファイルか、ABSOLUTE/RELATIVEオプションが付いていれば絶対/相対パスにあるファイルを対象とします。
とのことですが、相対・絶対でスクリプト指定できてしまうということですよね?
考えても理解できませんでした、具体的にどのように利用すれば大丈夫なんでしょうか?

>>795
たしかにテンプレート編集時にinclude等、使わせたくない文言を削除する方法もあるのですが、
入れようとしているシステムが銀行ほどではないんですけど、絶対にユーザにソースが漏れてはいけないシステムなんです。
(今後のシステム拡張等も含んで)チェックミスが出てきやすい作りで作るのはあまり好ましくないと考えています。
html-templateでも、includeなど規制する機能はなさそうですし・・・。

使いたい機能はifとloopだけなんですけど、
perlでセキュリティ完備したテンプレートエンジンほかにあるのでしょうか?

797 名前:nobodyさん mailto:sage [2008/01/23(水) 09:55:40 ID:???]
>>796
HTML::Template には no_includes ってオプションがあるけど?

798 名前:nobodyさん mailto:sage [2008/01/23(水) 10:07:27 ID:???]
INCLUDE_PATH以下に見られちゃいけないファイル置かないという選択肢はないの?

799 名前:nobodyさん mailto:sage [2008/01/23(水) 10:27:22 ID:???]
>>796
そんな大事なシステムをお前程度のスキルの人間が任されていることに
激しく不安を感じるのだが...




800 名前:nobodyさん mailto:sage [2008/01/23(水) 11:28:58 ID:???]
INCLUDE_PATHに関数渡すと・・・

801 名前:nobodyさん mailto:sage [2008/01/23(水) 11:58:33 ID:???]
>>796
anond.hatelabo.jp/20071030153111

802 名前:nobodyさん mailto:sage [2008/01/23(水) 14:51:21 ID:???]
データベースにutf8でデータを入れて、携帯の絵文字対応のsjisで取り出そうとしようと思っています。

$s = Unicode::Japanese->new;
$s->set($aaa);
$str = $s->sjis-imode;

という風に、perlで記述したところ、0という値しか返ってきません。ちなみに$aaaをそのままprintすると、文字化けします。
何がいけないのかよくわかりません。どなたかお答えいただけるとうれしいです。

803 名前:nobodyさん mailto:sage [2008/01/23(水) 14:59:42 ID:???]
sjis-imodeが悪いと思うよ。sjis_imodeだろ。

$str = ($s->sjis) - 'imode';

と書いたのと同じだな。いちおうエラーにはならないが、
use strictとuse warningsを使ってればいろいろ怒られる
のではまらないですむパターンの間違いなので、なぜ
使わなかったのかよく反省しとけ。



804 名前:nobodyさん mailto:sage [2008/01/23(水) 15:07:11 ID:???]
さっそくのご返答ありがとうございます。
試してみましたところ、こんどは??????という文字列が返ってきました。
いま現在、iモードシュミレータを使って表示させているのですが、これは携帯を使ってテストしないのが悪いのでしょうか?


805 名前:nobodyさん mailto:sage [2008/01/23(水) 15:27:16 ID:???]
>>804

iモードシミュレータとなるとそれはもはやPerlの話題ではないな。
適切なところへいって質問するほうがお互いのため。

その前に$strを16進ダンプ表示してみて期待したバイト列になってるか
どうかぐらいは確認しといた方がいいとは思うが。


806 名前:791 [2008/01/23(水) 21:46:29 ID:fM6ljyqY]
>>797-802
いろいろな案有難うございます。
一つづつ試してみます。
どうもありがとうございました。

807 名前:nobodyさん [2008/01/23(水) 23:17:40 ID:FgvU3OwA]
だれか
>>775をいじってくれる
心のやさしくて暇なやつはおらんのか
サーバに日本語のファイルをUPしたいんだ

808 名前:nobodyさん mailto:sage [2008/01/23(水) 23:18:24 ID:???]
するなといわれてそれを納得しておいてなんだそれはw

809 名前:プログラミング歴2ヶ月 [2008/01/23(水) 23:19:54 ID:bNex267N]
ローカルホストで動かしたときに、mkdirでディレクトリを生成できていたのに
いざwebにアップロードしてみると、ディレクトリの生成をやってくれません。
この場合、原因として何が考えられるのでしょうか。
ちなみにperlのパスはあっています。

mkdirなどでググって見ても、よくわかりませんでした。。。
ヒントだけでもいいんで、どなたかよろしくお願いします。(_ _)



810 名前:nobodyさん mailto:sage [2008/01/23(水) 23:27:24 ID:???]
>>809
まずはパーミッションの確認からだろうな。

811 名前:nobodyさん mailto:sage [2008/01/23(水) 23:52:28 ID:???]
>>809
他には2階層以上のディレクトリはmkdirで作れないとかかな?

812 名前:プログラミング歴2ヶ月 [2008/01/24(木) 00:03:36 ID:+24Wb9Pu]
>>810,811 さん
ご親切にご教授いただきありがとうございます。
先ほど、パーミッションを変更したところ解決いたしまして、とても感謝しております。
しかしそれと同時に新たな問題が浮上してきまして、困っています。。。

mkdirを行った後に、とあるdatファイルに文章を出力しているのですが、
出力した後の改行コードが■になってしまいます。。。
こっちもローカルホストではうまくいっていたのに、なぜなんでしょう??

813 名前:nobodyさん mailto:sage [2008/01/24(木) 00:05:46 ID:???]
改行コードの違いかな?
ttp://www.tohoho-web.com/wwwxx011.htm

814 名前:nobodyさん mailto:sage [2008/01/24(木) 00:28:39 ID:???]
>>812
ヒント
・UNIXではLF、WindowsではCRLF。
・\nはLR、\r\nがCRLF。
・FTPのアスキーモードで転送すると自動相互変換してくれる。

815 名前:プログラミング歴2ヶ月 [2008/01/24(木) 00:53:36 ID:+24Wb9Pu]
>>813,814さん

解決しました。ありがとうございました!
マジに感謝してます。

816 名前:nobodyさん mailto:sage [2008/01/24(木) 10:27:32 ID:???]
>>815
例えばxyzzyみたいに、改行コードを確認したり、変更できる
テキストエディタを入れておいたほうがいいよ。

817 名前:nobodyさん mailto:sage [2008/01/24(木) 10:41:34 ID:???]
サクラエディタおすすめ。

818 名前:nobodyさん mailto:sage [2008/01/26(土) 19:03:18 ID:???]
保守

819 名前:nobodyさん [2008/01/28(月) 12:09:42 ID:fVIm37qB]
Perl初心者です。
簡単なPerl/CGIのプログラム(掲示板など)が書ける程度のレベルです。

mod_perlの超初心者向けの解説本、ウェブサイトがあれば教えてください。
できれば日本語でお願いします。


あと、今は退社された方が書いたらしい、現在稼動中のプログラムのソースを入手したんですが、
ソースの最後に

 exit;

って思いっきり書いてたりするんですが、これって大丈夫なのでしょうか?





820 名前:nobodyさん mailto:sage [2008/01/28(月) 12:53:50 ID:???]
multix.jp/html/memo/030526.html#00010801

821 名前:nobodyさん [2008/01/28(月) 15:21:58 ID:eRROoQGz]
ありがとうございます。

これに関して、オーバーライドを利用したコードを書いているとき、
ある関数(この場合はexit)が、どのパッケージに属しているかを調べる方法があればお願いします。

822 名前:nobodyさん [2008/01/28(月) 16:14:02 ID:Fd8GryNX]
ときどき見かけるcodepageというのはどういうものなんでしょうか。
たとえば、TeraTermPro with SSHの設定でcodepageというのがあります。
ほかにもありますがこれを例にとります。
ヘルプやgoogle検索で調べても引っかからないのでここでおたずねします。

locale=japanese codepage=932
だとどうもShift-jisの設定をなんらかの形でやるみたいです(付属ヘルプ)。
locale=japanese codepage=65001
だとutf-8みたいです。
それで、私のマシンはWindowsなので、codepage=932で統一しておけばいいんでしょうか。
ケースバイケースなのでしょうか。
相手マシンがFreeBSDで通信することがあるのですが、その場合は、
設定の漢字受信/送信ともutf-8でokですか??
unixだとeucとも聞きますが、最近はutf-8化したほうがいいようなことも聞きます。
ので、よくわかりません。

もちろん、ソースを何で書くかはケースバイケースなのは知っています。
分からないのは、TeraTermの設定で
漢字受信/送信 と codepage という2つのよく分からない項目がある点です。

TeraTermは有名なので当然スレがあるかと思ったらありませんでした。
それにperlプログラミングでよく登場するので、ここで質問させていただきました

823 名前:nobodyさん mailto:sage [2008/01/28(月) 16:22:56 ID:???]
exitはダメだけどexit(0)なら大丈夫、
実はそう言われてるけど逆で、exit(0)はダメだけどexitなら問題ない、
最近のヤツはどっちでもいい(具体的なバージョンはか書かれてない)、

色々と情報が混ざってて、調べれば調べるほど混乱してきた orz

824 名前:nobodyさん mailto:sage [2008/01/28(月) 17:37:21 ID:???]
動いてんならいいじゃない

825 名前:nobodyさん mailto:sage [2008/01/28(月) 18:19:41 ID:???]
そうします。

826 名前:nobodyさん mailto:sage [2008/01/28(月) 18:33:58 ID:???]
UTF8の文字列で、全角ひらがなが入ってきた場合、全角カタカナに変換しようとしているのですが
思うように行きません。

$name =~ tr/ぁ-ん/ァ-ン/

一度、sjisやらecuやらに変換して、文字コードで置換させないと駄目でしょうか

827 名前:nobodyさん mailto:sage [2008/01/28(月) 18:39:31 ID:???]
UTF8ならむしろ文字コード変換しないほうが置換しやすくないか?

828 名前:nobodyさん mailto:sage [2008/01/28(月) 18:55:50 ID:???]
>>826
そんなことはない。

use utf8してないとかdecodeしてなくて$nameがバイトのままとか
そういうあたりじゃねーの?

use utf8;
binmode STDOUT, ":encoding(utf8)";

foreach (ord('ぁ') .. ord('ん')) {
my $h = my $k = chr($_);
$k =~ tr/ぁ-ん/ァ-ン/;

printf "%x %s %s\n", $_, $h, $k;
}


829 名前:nobodyさん mailto:sage [2008/01/28(月) 19:04:20 ID:???]
>>822
> TeraTermは有名なので当然スレがあるかと思ったらありませんでした。

テラターム
pc11.2ch.net/test/read.cgi/linux/1012915309/



830 名前:nobodyさん mailto:sage [2008/01/28(月) 19:21:58 ID:???]
>>829
誘導thx!! いやースレタイ検索で引っかからなかったもんで。



831 名前:nobodyさん mailto:sage [2008/01/28(月) 21:13:04 ID:???]
確かにこりゃ罠だな……

832 名前:nobodyさん [2008/01/30(水) 17:37:10 ID:irpAKk1D]
ActiveperlでローカルPC上に作成したWEBサイトにIE等でアクセスし、
その処理結果をファイルにしてデスクトップ上に出力したいのですが、
デスクトップまでのパスをどう取得すればいいか分かりません。
ログインユーザ毎にデスクトップのパスが変わってしまうので、
そのあたりを上手く解決できる方法があれば知りたいです。

833 名前:nobodyさん mailto:sage [2008/01/30(水) 18:10:39 ID:???]
perlとは関係ないがユーザ毎に環境変数ってのが存在する

834 名前:nobodyさん mailto:sage [2008/01/30(水) 18:43:24 ID:???]
use strict;use warnings;
use Win32::OLE;
my $sh = Win32::OLE->new('WScript.Shell');
print $sh->SpecialFolders("Desktop");


use strict;use warnings;
use Win32 qw/CSIDL_DESKTOP/;
print Win32::GetFolderPath( &CSIDL_DESKTOP );


835 名前:nobodyさん [2008/01/30(水) 21:04:32 ID:FClDhuIR]
require Hoge;
は通るんですが、
no strict 'refs'; require "Hoge";
が通りません。Can't locateとなります。
文字列からrequireするにはどう書いたらよいでしょうか。

836 名前:nobodyさん mailto:sage [2008/01/30(水) 21:12:10 ID:???]
Hogeってのを用意すればいい

837 名前:nobodyさん mailto:sage [2008/01/30(水) 21:17:18 ID:???]
どうもです。
Hogeはあるつもりなんですが、前者と後者は同じものを指してないですか?

838 名前:nobodyさん mailto:sage [2008/01/30(水) 21:29:04 ID:???]
拡張子を省略していたせいだった気がしました。ありがとうございました。

839 名前:832 mailto:sage [2008/01/30(水) 21:59:46 ID:???]
>>833
システム環境変数とユーザー環境変数ってやつですよね。
ここにあらかじめデスクトップへのパスを設定するという事でしょうか?

>>834
ソースありがとうございます。
実際に実行してみたんですが、CGIとして実行すると
SYSTEM ユーザ名義で実行され、ログインユーザでのパスが取れませんでした。
DOS窓から実行するとバッチリなんですが…。

少し調べた所、WMIで実現できそうな気がしてきたので
そちらを当たってみようと思います。ありがとうございました。



840 名前:nobodyさん mailto:sage [2008/01/30(水) 22:29:21 ID:???]
3年ぶりくらいにPerlを使ってみたのですが、
以前は日本語の検索の時、EUCを使わなくてはいけないとかあったと
思いますが、普通にshift-jisで書いて、パターンマッチも問題なし
だったのですが、今のバージョンのPerlは文字コードとか気にしなくて
良くなりました?それともたまたま文字化けしなかっただけ?

841 名前:nobodyさん mailto:sage [2008/01/30(水) 22:53:08 ID:???]
>>840
これを実行してみたらどうなる?
print "表現";
print '表現';

842 名前:nobodyさん mailto:sage [2008/01/30(水) 23:05:02 ID:???]
>841
だめっすね。
まだjcode.plとか使ってるんですかね。
実は全てunicodeで問題なくなったりしてますか?

日本語のパターンマッチで注意することとかまとめた
いいページ知ってたら教えてください。

843 名前:nobodyさん mailto:sage [2008/01/30(水) 23:12:08 ID:???]
>>842
一部の文字列を使う時だけ注意をして、POSTで受け取った文字列を
jcode.pl 使うという程度でも、Shift-JISでいけることはいける。
ttp://www.shtml.jp/mojibake/sjis_cgi.html

844 名前:nobodyさん mailto:sage [2008/01/30(水) 23:19:37 ID:???]
>843
thxです。しばらく離れていましたが、少し思い出しました。
結局Perlはその間進化していなかったのね。

845 名前:nobodyさん mailto:sage [2008/01/30(水) 23:19:46 ID:???]
クライアント、サーバ共にWindowsで、SQLServerとVB使っている
システムでも記号とか入力しようとすると駄目な場合もあるからな。
シビアに全部に対応とか考えなくても良いのではと思ったり。

846 名前:nobodyさん mailto:sage [2008/01/30(水) 23:22:28 ID:???]
>>844
Perl は 5 が出てから結構経っているはずだよ。
3 年前に触ったのも 5 じゃないかな?
そこまで大きな変化が無いからこそ、という
メリットももあるんだけどね。

次に 6 には、構文とか大きな変化があるらしいから
そっちに期待だなw

847 名前:nobodyさん mailto:sage [2008/01/30(水) 23:45:06 ID:???]
たとえば This is a pen.という入力があって、
「This」にマッチしたら、
htmlの色のタグを付けて<font color>This</font>と置換する場合、
これをやると次に「This is」に色を付けたい場合マッチしなくなる
のですが、上手いやり方あります? 先に「This is」の置換を
する位しか思いつかない。

848 名前:nobodyさん mailto:sage [2008/01/31(木) 01:44:59 ID:???]
検索に使うデータは別に持っておくというのはどうだろうか。

Thisにマッチしたとき、
いきなり This → <tag>This</tag> と変換するのではなく、例えば「1番目の単語にマッチした」という情報だけ保存しておく。
で、最後にまとめて置換する。

Perlの持つ強力な文字列操作が活かされないという欠点はあるが。


849 名前:nobodyさん mailto:sage [2008/01/31(木) 07:23:10 ID:???]
$in_str = "This is a pen.";
$out_str = '<font color="red">' . $in_str . "</font>";
ここで $str に検索対象の文章を入れる。
$str =~ s/$in_str/$out_str/g;



850 名前:nobodyさん mailto:sage [2008/01/31(木) 09:05:07 ID:???]
>849
それ同一箇所を何度も置換する場合でも大丈夫?

851 名前:nobodyさん mailto:age [2008/01/31(木) 09:23:09 ID:???]
>>850
具体的にどういう場合?

852 名前:nobodyさん mailto:sage [2008/01/31(木) 09:59:40 ID:???]
>849
<tag>This</tag> is a pen.
が$strに入ったら、次にThis isは一致しないでしょ?

853 名前:nobodyさん mailto:sage [2008/01/31(木) 10:21:21 ID:???]
優先度つけて順番にやるしかない
その優先度はあなた次第だもの。

854 名前:nobodyさん mailto:sage [2008/01/31(木) 12:45:35 ID:???]
s/This is|This/REPLACEMENT/gみたいなことしたいんだろうか?
一括してやるなら長い方を先にすればいい

855 名前:nobodyさん mailto:sage [2008/01/31(木) 13:03:27 ID:???]
This is a pen.
  ↓
<tag>This is</tag> a pen.

このあとに、「tag」というフレーズで検索する可能性は否定できない。
いや、細かくマッチ条件つければ別だろうけど。

856 名前:nobodyさん [2008/01/31(木) 21:12:55 ID:ZyBf2Z6K]
配列と文字を引数とする場合の書き方がよく分かりません。できるのでしょうか?
以下のようにやってもだめでした。
&subtest(@arr,$str,@arr2);
function () {
my (@arr,$str,@arr2) = @_;

}

857 名前:nobodyさん mailto:sage [2008/01/31(木) 22:22:57 ID:???]
>>856
(@arr,$str,@arr2)は新しい配列として扱われるので、サブルーチン側では区切りが分からん。
arrとarr2は参照を渡すとか、要素数が分かってるならサブルーチン側で@_をspliceするとかがいいかも

858 名前:nobodyさん mailto:sage [2008/02/01(金) 00:10:05 ID:???]
>845

長い方を先にした場合、
ThisとThis isとis a penがあって、
結論は<font>This is a pen</font>に色を付けたいのだ。

848の方法かなぁ。
ただ、入力テキストが100M位、マッチする検索リストが1万個とかなので、
動かせるか・・・。

Perlよりwordマクロとかの方がいいのかなぁ。
wordなら何度重なって色付けても問題ないし・・・。

859 名前:nobodyさん mailto:sage [2008/02/01(金) 00:32:08 ID:???]
>>856
ヒント:リファレンス



860 名前:1/2 mailto:sage [2008/02/01(金) 03:03:29 ID:???]
>>858
途中まで書いてまじめにやると面倒だという事は分かった。
あとは頑張ってくれ。

#!/usr/bin/perl -w
use strict;
my $str = 'This... This is, This is a pen.';
my @target = ('This', 'This is', 'is a pen');
my $tag_o = '<font color="#ffff00">';
my $tag_c = '</font>';
my $tag_r = qr|</?font[^>]*>|;
my $tag_e = qr/(?:(?!$tag_r).)*/s;
for (@target) {
my $re = join qr/(?:$tag_r)*/o, split /(\s+)/;
$str =~ s/($re)/add_tag($1)/eg;
}
print $str;

861 名前:2/2 mailto:sage [2008/02/01(金) 03:04:31 ID:???]
sub add_tag {
my $substr = $_[0];
if ($substr !~ /$tag_r/o) {
$substr = "$tag_o$substr$tag_c";
} elsif ($substr !~ /\Q$tag_o\E/o) {
$substr =~ s/(\Q$tag_c\E)/$1$tag_o/go;
$substr .= $tag_c;
} elsif ($substr !~ /\Q$tag_c\E/o) {
$substr =~ s/(?=\Q$tag_o\E)/$tag_c/go;
substr($substr, 0, 0) = $tag_o;
} elsif ($substr =~ /^($tag_e)\Q$tag_c\E($tag_e)\Q$tag_o\E($tag_e)\z/o) {
$substr = "$1$2$3";
} elsif ($substr =~ /^($tag_e)\Q$tag_o\E($tag_e)\Q$tag_c\E($tag_e)\z/o) {
$substr = "$tag_o$1$2$3$tag_c";
} else {
die $substr; # ココを頑張ってくれ。
}
$substr =~ s/\Q$tag_c$tag_o\E//go;
$substr;
}

862 名前:nobodyさん [2008/02/01(金) 04:53:15 ID:hS8kNEG7]
if(A1 < B1 && A2 < B2 && A3 < B3 && A3 < B3 && A4 < B4)
{
$page_dsp .= <<"EOM";
<tr>
<td colspan="2" >
<form action="????.cgi" method="post" onSubmit="return send_check()">
<select name=ku class=slc>
<option value="no">
EOM

#この中の条件式(ifの条件付オプション)は省略
{$page_dsp .= "<option value=\"1\">\n"; }

$page_dsp .= <<"EOM";
</select>
<input type=hidden name=back value="no">
<input type=hidden name=id value="$kid">
<input type=hidden name=pass value="$kpass">
<input type=hidden name=mode value="ku">
<input type=submit class=btn value="オン">
</td></form></tr>
EOM
}
else{$page_dsp .= "<tr><td colspan=2 align=center>終わり</td></tr>\n";
}

以上のように、最初の5つの条件
(各々全部の、左の数値が右の数値と同じかそれ以上の時にセレクトを非表示)
で動かしたいのですけど、5つの条件中3つの条件しか満たしてないのに非表示に
なります。
条件が5つ揃ってから非表示にするにはどうすればいいですか?
ご教授お願いします。

863 名前:nobodyさん mailto:sage [2008/02/01(金) 05:30:16 ID:???]
落ち着け

864 名前:nobodyさん mailto:sage [2008/02/01(金) 07:45:40 ID:???]
>>862
それはない。他にミスがあるはず。

865 名前:nobodyさん [2008/02/01(金) 16:52:45 ID:hS8kNEG7]
命令が作動しなかったのは今回は説明で省略した命令(ifの条件付オプション)と
最初の5つの命令との相性が悪かったからかもしれませんね。

省略した部分内には、最初の5つの命令を一個ずつ(計5個)指定して、条件が満たされるごとに
オプション項目が一つずつ消えていき、全部満たしたら最初の5つの命令でセレクト
ごと非表示にするつもりでいたんです。

866 名前:nobodyさん mailto:sage [2008/02/01(金) 16:54:10 ID:???]
相性とな?

867 名前:nobodyさん mailto:sage [2008/02/01(金) 16:55:34 ID:???]
バルクメモリさしたら動かなかった
相性が悪かったということだな

868 名前:nobodyさん mailto:sage [2008/02/01(金) 19:03:10 ID:???]
>>862
まずは、配列の勉強頑張れ。

869 名前:nobodyさん mailto:sage [2008/02/02(土) 05:09:34 ID:???]
修士出たら就職を考えている現在3回生の情報の学生でperlが一番すきですが、
今年に入ってからいろいろと求人情報を集めてみたところperlの仕事少ないですね
噂には聞いてましたが、僕は何が何でもperlを仕事にしたいのです
まあそれはおいといて、perlを仕事としてみたときどんな感じですかね?
皆さま先輩方の多くはperlを仕事としていらっしゃると思ったので、
是非とも業務内容、他言語と比べたときの待遇、仕事のやりがいなどなど、
ポジティブな意見(勧め)もネガティブな意見(愚痴)も生の声としてお聞かせ願えればと存じます。



870 名前: ◆TWARamEjuA mailto:sage [2008/02/02(土) 07:42:12 ID:???]
perlを仕事にするところはほとんど無いと断言できるです。
仕事の中でperlを使うことはたくさんの現場であるです。

おいらは今、製造業の中でperlを利用しています。
昨今の機器はLANでデータを採取できたりします。
それを高ぁーいWindows専用のアプリでデータ加工することなく、unix(含むlinux)なサーバにてcronでデータ採取・計算・加工してDB(DB_Fileで充分)に登録。(もちろんperlで)
そいつを拾ってエクセルに貼り付けるだけ(もしくはSpreadsheet::Writeで書き込むも良し)でもデータの共有が出来たりします。
記録計のようなグラフを作るにしてもGDだけで充分。

部品の計測をするのでも、今時のマイクロメータは数値をUSBで送ってくれる物があったりします。(USBテンキーみたいな出力をしたりする)
それをExcelにちまちま放り込むよりか、単純テキスト(csvでも良いけれども)で保存して、perlを使っていろんな形や計算をさせることも出来たりします。

以前勤めていたWEB屋(主にデザインやHTML書き)でも、Excelのデータを1件1HTMLファイルに変換する作業がありました。
(その求人に応募したのだ(照))
3000件近いデータを変換すると云うことで、2-3か月近い工程を組まれていたことがありました。
どうやら手動で書き換え作業をと目論んでいたようです。
けれどもデータ構造と特性を見極めるのに2日、それを変換するperlスクリプトを2日、変換作業たったの10秒って事がありました。
その当時、その部署の長は目を丸くしていましたです。
まだまだperl=CGIっていう感覚で居られたからです。
その後、ちまちまと元データ(Excel)の修正が入ってきても数秒で修正完了。
デザイン変更があってもテンプレートを書き換えるだけでおしまい。
あまった2-3か月の期間、他の仕事を色々とこなしていました。

ようは仕事に使う道具の1つとしてperlというのを持っていればどんな業種にでも使えるんじゃないかな。

そんなこともあって製造業の現場であるにもかかわらず、おいらのところにだけは使い慣れたMacOSX(iMacG5)なんてのを無理を聴いて貰って備え付けましたですです♪

871 名前:nobodyさん mailto:sage [2008/02/02(土) 11:18:13 ID:???]
perlを仕事で使うなら修士はオーバースペック。
高卒で十分な土方に好き好んで修士雇う経営者がいるのか?

872 名前:nobodyさん mailto:sage [2008/02/02(土) 11:21:37 ID:???]
修士雇う経営者がいないなら高卒って言えばいいだけのこと
そんなこともわからないのか?

873 名前:nobodyさん mailto:sage [2008/02/02(土) 12:03:51 ID:???]
perl土方は頭悪いな。
高卒で足りる仕事には高卒の賃金しか払わないという事だよ。

874 名前:nobodyさん mailto:sage [2008/02/02(土) 13:18:25 ID:???]
>>872
それ、学歴詐称にあたるんじゃないの?
ちょっと前、問題になったでしょ。

875 名前:nobodyさん mailto:sage [2008/02/02(土) 13:33:00 ID:???]
perl土方は新聞を読まない。

876 名前:nobodyさん mailto:sage [2008/02/02(土) 13:46:46 ID:???]
WEB系いきゃいいんじゃないの?
個人的にはなにがなんでもPerlとかいってるPerl使いは嫌だけど

877 名前:nobodyさん mailto:sage [2008/02/02(土) 14:25:02 ID:???]
Perlがちょっとくらいできても仕事ねえぜ、と修士出の自宅警備員が言ってみる。

>>874
それ公務員ね。試験区分に対象の学歴があってそれに沿うことが望ましいとされてるから。

というかこれマ板のネタだろ。

878 名前:perl好き情報3回生(本物) ◆qqt5.0NxB6 mailto:sage [2008/02/02(土) 14:40:08 ID:???]
ちょっと失礼します。
僕はWebprog板に>>869と同一内容の書き込みをした者です。
>>869は偽者であって僕がマルチポストをしたのではないことを明言しておきます。
トリップをつけたので本物しか相手をしないようお願いいたします。
迷惑をおかけして申し訳ありません。
お騒がせしました。

879 名前:nobodyさん mailto:sage [2008/02/02(土) 15:45:41 ID:???]
質問です。XML::RSSを使って、外部から取得したRSSを加工してHTML(euc-jp)に出力しているのですが、
一部の記号(それも機種依存文字含む)が文字化けします。

− → \x{ff0d}
o → \x{339c}

機種依存文字に関しては、根本的に対応することに意味があるのか疑問ですが、せめてwindowsな環境で
文字化けしないようにしたいのです。どうしたらいいでしょうか?

あんまし分かっていませんが、重要そうな部分だけ。
use XML::RSS;
use LWP::Simple;
use encoding 'euc-jp', STDOUT => 'euc-jp';
use open IN => ":encoding(euc-jp)";
use open OUT => ":encoding(euc-jp)";
binmode OUT => ":encoding(euc-jp)";

my $rss = new XML::RSS;
$rss->parsefile($site_file);
my $item_list = $rss->{'items'};
$item = ${$item_list}[0];
my $desc = $item->{'description'};

#一応対策っぽいことをやって一部の記号には対応できた
$desc =~ tr/\x{005C}\x{00A5}\x{2014}\x{203E}\x{2225}\x{FF0D}\x{FF5E}\x{FFE0}\x{FFE1}\x{FFE2}/
\x{FF3C}\x{FFE5}\x{2015}\x{FFE3}\x{2016}\x{2212}\x{301C}\x{00A2}\x{00A3}\x{00AC}/;



880 名前:879 mailto:sage [2008/02/02(土) 15:48:16 ID:???]
ちなみに、
〜 → \x{FF5E} に化ける問題は、一番下に書いた置換で解決したのですが、\x{FF0D}は何故かそのまま
文字化けしたままです…

881 名前:879 mailto:sage [2008/02/02(土) 15:55:11 ID:???]
すいません、>>880は単純ミスでした、取り消します。

882 名前:879 mailto:sage [2008/02/02(土) 15:57:31 ID:???]
忘れていました。エラーメッセージが出ます。
hogehoge.cgi: "\x{ff0d}" does not map to euc-jp at hogehoge.cgi line 183.

883 名前:nobodyさん mailto:sage [2008/02/03(日) 01:13:34 ID:???]
求人ってほとんどPHPだよなぁ。プラスDreamWeaverの使用をセットで。
perl使ってるところはライブドアとかはてなとか高レベルに使いこなしてるところばっかり。
初〜中級のところは全部PHPになってしまった。


884 名前:nobodyさん mailto:sage [2008/02/03(日) 03:35:42 ID:???]
モバイルならPerlも使ってるとこそこそこあるんでないか

885 名前:nobodyさん mailto:sage [2008/02/03(日) 11:14:58 ID:???]
正規表現とか以外なら、構文同じなんだからすぐに移植できるだろ。
あとはPEARとかを使いこなせればいいわけだから、Perlの基礎がある
のなら、1週間程度で、出来るといえるんでね?
Perlで作ったコードをPHPに移植して、これ、私が作りました、みたいな。

886 名前:nobodyさん mailto:sage [2008/02/03(日) 12:57:34 ID:???]
PEARってperlでいうCGI.pmみたいなもん?

887 名前:質問 [2008/02/03(日) 13:04:56 ID:34/ZwImQ]
このスレでよいかわかりませんが・・・

項目を選択しボタンをクリックすると、あるページには選択した項目の画像ファイルを表示し、
もうひとつのページにはその選択した項目を表示させたいのですがどうしたらよいでしょうか?

最初のページには
<form action="A.cgi" target="表示させたいページ">
を埋め込んでいるのですが、当たり前ですがこれだと"表示させたいページ"にしか表示できません。

A.cgiのなかでさらにこの部分だけは他のページへ表示させるとかできませんか?


888 名前:nobodyさん mailto:sage [2008/02/03(日) 14:09:58 ID:???]
>>886
CPANじゃね?

889 名前:nobodyさん mailto:sage [2008/02/03(日) 14:12:18 ID:???]
>>887
それは、Perlの話じゃなくて、htmlの話じゃないの?
フレームタグを使って区切るか、テーブルタグを使って全部を表示させる方法がある。
板違いなので、これ以上の質問はしないように。



890 名前:nobodyさん mailto:sage [2008/02/04(月) 03:22:50 ID:???]
>>879
メッセージのとおりで、変換表に該当するものがないんでしょ。
euc-jpMSとか使わないといけないんじゃないの?


891 名前:nobodyさん mailto:sage [2008/02/07(木) 12:55:00 ID:???]
perl 5.8.5
CentOS 5.1

「out of memory」のときのエラーハンドリングの方法を教えてください。
dieのときは
$::SIG{__DIE__} = sub {〜〜〜};
でいけることまではわかったのですが
「out of memory」がハンドリングできないのです。
よろしくおねがいします

892 名前:nobodyさん mailto:sage [2008/02/07(木) 15:49:01 ID:???]
OSの制限だから、ハンドリング考えるよりコード見直す。
それができないのなら、OSの制限上げる。メモリ積む。



893 名前:nobodyさん mailto:sage [2008/02/07(木) 19:10:28 ID:???]
perl5.8

my @value=(0,1,3,8);  #任意のkey
my @hoge=('hoge1','hoge2','hoge3'....);  #表示用配列
my $disp;
foreach (@value)
{
 $disp .= ',' if $disp;
 $disp .= $hoge[$_];
}

という処理をしているんですが、これってJOINでできませんか?
map使ってもこれより簡単に書けないですよね?



894 名前:nobodyさん mailto:sage [2008/02/07(木) 19:28:15 ID:???]
こういうこと?

my @value = (0, 1, 3, 8);
my @hoge = ('hoge1', 'hoge2', 'hoge3', 'hoge4', 'hoge5', 'hoge6', 'hoge7', 'hoge8', 'hoge9');

print join ',', @hoge[@value];


895 名前:nobodyさん mailto:sage [2008/02/07(木) 20:34:51 ID:???]
>>894
おお。ありがとうございます。コードがすっきりします^^


896 名前:nobodyさん mailto:sage [2008/02/08(金) 09:47:17 ID:???]
すいません。もう一点。

my $value = "0,1,3,8";
my @hoge = ('hoge1', 'hoge2', 'hoge3', 'hoge4', 'hoge5', 'hoge6', 'hoge7', 'hoge8', 'hoge9');

これは
join ',',@hoge[sprit',',$value];

ですよね?
splitしてjoinして勿体無い感じ。。

897 名前:nobodyさん mailto:sage [2008/02/08(金) 10:08:10 ID:???]
splitとspliceは別物

898 名前:nobodyさん mailto:sage [2008/02/09(土) 18:24:58 ID:???]
valueがスカラーで入れなきゃ一回joinで済む話。

899 名前:nobodyさん [2008/02/11(月) 09:15:09 ID:7AZat8M4]
ファイルの最後の行番号を取得したいんですが、
my $endline = $. while (<FH>);
としてとりえず取得できたんですが、
その後
seek FH,0,0;
として、また1行目から別の処理したいんですがうまくできません。
seekの戻り値をprintしてみると1を返してますが、先頭には戻ってないようです。
windows環境なのが原因でしょうか?



900 名前:nobodyさん mailto:sage [2008/02/11(月) 09:31:45 ID:???]
my $endlineだと局所化されて外側で取得できなくない?
seekしても$.はリセットされないから先頭に巻き戻したら$.= undefとかすればいい

901 名前:nobodyさん mailto:sage [2008/02/11(月) 11:26:23 ID:???]
>>900さんレスありがとうございます。

>局所化
あ、ほんとだ。ミスってました。

undef $.;
reset $.;
それぞれ試してみましたが変化ありませんでした。

その後に
while (<FH>) {
  if ($. == $bigin .. $. == $end) {
といった処理をしたいんですが、どうもうまくいきません。

902 名前:nobodyさん mailto:sage [2008/02/11(月) 11:49:03 ID:???]
$. = 0;としたらうまくいきました。
ありがとうございました。

903 名前:nobodyさん mailto:sage [2008/02/12(火) 21:28:15 ID:???]
文字コードについて質問します。

utf-8から7bitJISへの変換なのですが、(メール送信のため)

Encode.pmもJcode.pmもローマ数字をJISにしてくれません。
Encodeでは「\x{2160}」と変換不可の場合のユニコード値に変換され、
Jcodeでは「?」になります

T(ローマ数字1)
\xE2\x85\xA0 utf8 → \x1B\x24\x42\x2D\x35 JIS

と手動で変換してやれば良いのですが、escシーケンスの処理がどうしたものかと・・・


904 名前:nobodyさん mailto:sage [2008/02/12(火) 23:23:01 ID:???]
use lib '../lib';
のように相対パスを使うと出来るけど
use lib '/i/cgi-bin/lib';
のように絶対パスを使うと動かなくなります
サーバーの設定によって絶対パスだと読み込めなかったりするんでしょうか
普通のリンクだと絶対パスでリンクできます

905 名前:nobodyさん mailto:sage [2008/02/12(火) 23:31:03 ID:???]
>>904
本当にそれが絶対パスであれば使えると思うのだが、おそらく違うんだと思う。

906 名前:nobodyさん mailto:sage [2008/02/13(水) 02:37:13 ID:???]
>>904
perlから使う絶対パスはwebサイト上の絶対パスじゃないよ。
・ http鯖がルートとして扱うディレクトリからの絶対パス
・ 鯖のOSの絶対パス
の違いを理解しような。


907 名前:nobodyさん mailto:sage [2008/02/13(水) 02:39:50 ID:???]
>>903
JISとかISO-2022-JPにはローマ数字はないから。

Encode::EUCJPMS - Microsoft Compatible Encodings for Japanese - search.cpan.org
search.cpan.org/~naruse/Encode-EUCJPMS-0.07/EUCJPMS.pm

あたりをいれて、cp50220 とか cp50221 で変換する。


908 名前:906 mailto:sage [2008/02/13(水) 10:48:35 ID:???]
有難うございます
調べてみます

909 名前:904 mailto:sage [2008/02/13(水) 10:49:51 ID:???]
>>906でした



910 名前:nobodyさん mailto:sage [2008/02/13(水) 12:25:12 ID:???]
>>907
ありがとうございます
Encode::EUCJPMSモジュールをいれて、

use Encode::EUCJPMS;
use Encode;
my $cp50220_str = Encode::from_to( $utf8_str , "UTF8" , "CP50220" );

で良いのでしょうか?
実はフォーム入力はShiftJISでして、CP932からutf-8に一旦エンコードしています。
これで問題はないでしょうか?


911 名前:nobodyさん mailto:sage [2008/02/14(木) 02:49:22 ID:???]
>>910
UTF-8に変換するときにエラーになってなきゃ大丈夫なんじゃない?
〜 あたりが微妙ではあるけど。


912 名前:nobodyさん [2008/02/14(木) 10:56:12 ID:AY3pAm1W]
教えてください。サーバではなくて、自分のPCにPerlをインストールしています。

#!/usr/bin/perl

use strict;
print "IEを起動します...\n";
system("C:/Program Files/Internet Explorer/iexplore.exe");
exit;

__END__

上のようにすると、IEは起動するのですが、コマンドプロンプトは残ったままで
タスクマネージャーにも perl.exetが残っています。(残るというか待ってるようですが…)
IEを起動したあとはPerlも終了して欲しくて検索したらexecというのがあったので
exec("C:/Program Files/Internet Explorer/iexplore.exe");としたら起動しませんでした。
IE起動後速やかにPerlを終了させるにはどうすれば良いでしょうか。
PerlはActivePerl 5.8.8をインストールしました。

もう一つは、my $url = 'www.google.co.jp/'; とした時に
IEにこの$urlを開かせるにはどうすればよいのでしょうか。よろしくお願いします。

913 名前:nobodyさん mailto:sage [2008/02/14(木) 11:58:11 ID:???]
ヒント: system("start", $url);

914 名前:nobodyさん mailto:sage [2008/02/14(木) 12:23:37 ID:???]
>>913
うわぁぁ。ありがとうございました!

915 名前:nobodyさん mailto:sage [2008/02/14(木) 12:27:34 ID:???]
    /\___/ヽ   ヽ
   /    ::::::::::::::::\ つ
  . |  ,,-‐‐   ‐‐-、 .:::| わ
  |  、_(o)_,:  _(o)_, :::|ぁぁ
.   |    ::<      .::|あぁ
   \  /( [三] )ヽ ::/ああ
   /`ー‐--‐‐―´\ぁあ

916 名前:910 mailto:sage [2008/02/14(木) 12:58:24 ID:???]
>>911
ありがとうございます。
「〜」は手動でE3 80 9Cに置き換えています。

では教えていただいた方法でやってみようと思います。

917 名前:nobodyさん mailto:sage [2008/02/14(木) 15:13:40 ID:???]
fedora8なマシンで監視装置をでっち上げようとしています

Net::SMTPについて教えて下さい

use Net::SMTP;

my $smtp = Net::SMTP->new( $mailhost );
$smtp->mail( $MailFrom );
$smtp->to( $MailTo );
$smtp->data();
$smtp->datasend( "From: $MailFrom\n" );
$smtp->datasend( "To: $MailTo\n" );
$smtp->datasend( "Subject: $e_subject\n" );
$smtp->datasend( "Mime-Version: 1.0\n" );
$smtp->datasend( "Content-type: text/plain; charset=ISO-2022-1\n" );
$smtp->datasend( "Content-transfer-encoding: 7bit\n" );
$smtp->datasend( "Reply-to: $MailFrom\n" );
$smtp->datasend( "$body\n" );

ここでbodyに例えばtestdataと入れると$bodyもメールとして届くのですが、
$bodyをtest:dataとする(半角コロンが入っている)と、$bodyが送られません

何が悪いのかご教示下さい


918 名前:nobodyさん mailto:sage [2008/02/14(木) 15:18:19 ID:???]
半角コロン

919 名前:nobodyさん mailto:sage [2008/02/14(木) 15:28:13 ID:???]
つ[ $smtp->datasend( "\n$body\n" ); ]




920 名前:917 mailto:sage [2008/02/14(木) 15:31:16 ID:???]
>>919
できました
ありがとう ( ;∀;)

921 名前:919 mailto:sage [2008/02/14(木) 15:57:21 ID:???]
>>920
よかったな。
バグった状態だと$bodyが送られてこないんじゃなくヘッダに入ってたはず。
メールヘッダと本文の切り分けは「半角コロンが入ってない行が登場した所から本文」って事になってるから、
どんな文が入るか分からん時は、ヘッダの最後に空行を入れれば桶。基本なんで覚えとくと便利。

922 名前:917 mailto:sage [2008/02/14(木) 16:25:19 ID:???]
>>919
覚えておきます
ありがとうございました(^^
これで沈みます


923 名前:nobodyさん mailto:sage [2008/02/17(日) 21:47:50 ID:???]
>>921
ヘッダと本文は空行で分けられます。
ついでに言うと、改行は CRLF (\r\n) にすること。
MTA によっては受け付けてくれません。

924 名前:exe [2008/02/19(火) 11:44:47 ID:L1DAdjnk]
ファイルにaからz、AからZを交互に連続で出力し、最後に改行して、この処理を10回繰り返す方法を教えてください。
aAbBcCdDeE・・・yYzZ のような形です。お願いします。


925 名前:nobodyさん mailto:sage [2008/02/19(火) 12:05:44 ID:???]
宿題は自分でやろうな。

926 名前:nobodyさん mailto:sage [2008/02/19(火) 12:06:11 ID:???]
print "aAbB.....yYzZ\n";

を10個コピペでおk


927 名前:exe [2008/02/19(火) 14:24:58 ID:L1DAdjnk]
すいません。10回出力はわかるんですが、for文を使ってaAbBcC...zZの表示方がわからないのでどなたかお願いします。

928 名前:nobodyさん mailto:sage [2008/02/19(火) 14:25:28 ID:???]
for(1..10) {
  for(65..90) {
    print pack("C*",$_);
    print pack("C*",$_+32);
  }
  print "\n";
}


929 名前:exe [2008/02/19(火) 14:42:37 ID:L1DAdjnk]
nobody さんありがとうございます。

ちなみに↓の形で書くと、どうしたらよいでしょうか。
何度もすいません。

open (FILE, '>test1.txt') or die "$!";

for my $count (0..9) {
for my $i ("a".."z") {


}
print FILE "\n";
}

close(FILE);



930 名前:nobodyさん mailto:sage [2008/02/19(火) 14:59:33 ID:???]
#
# $countってなんぞ?
#
open (FILE, '>', 'test1.txt') or die "$!";
binmode(FILE);
for my $count (0..9) {
  for my $i('a'..'z') {
    print $i;
    print uc($i);
  }
  print FILE "\n";
}
close(FILE);


931 名前:nobodyさん mailto:sage [2008/02/19(火) 15:01:42 ID:???]
#
# ↑はウソ
#
open (FILE, '>', 'test1.txt') or die "$!";
binmode(FILE);
for my $count (0..9) {
  for my $i('a'..'z') {
    print FILE $i;
    print FILE uc($i);
  }
  print FILE "\n";
}
close(FILE);

932 名前:exe [2008/02/19(火) 15:06:17 ID:L1DAdjnk]
ありがとうございます。$Countは適当においてる変数です。

933 名前:exe [2008/02/19(火) 15:54:07 ID:L1DAdjnk]
先ほど↑で作ったファイルを出力として、小文字のみを取り除いた結果を標準出力に表示するにはどうしたらよいでしょうか?
自力でやらないといけないのはわかっているのですが、時間がなくて・・どなたかお願いします。

934 名前:nobodyさん mailto:sage [2008/02/19(火) 16:04:55 ID:???]
#
# そういうウンコみたいな仕事を漏れにも回してくれよ
#
$sent = 'dTgZtyYthSGetLt';
$sent =~ s/[a-z]//g;
print $sent;

935 名前:nobodyさん mailto:sage [2008/02/19(火) 16:31:12 ID:???]
馬鹿だな、まずはおっぱいうpしてからだろjk・・・

936 名前:exe [2008/02/19(火) 16:55:41 ID:L1DAdjnk]
仕事では無いです。笑われてるかもしれませんが初心者の
自分にとっては色々難しくて。時間もありませんでしたので・・

937 名前:nobodyさん mailto:sage [2008/02/19(火) 17:15:11 ID:???]
perlで外部サーバー上のファイルを読み込む方法はありますか?

OPEN("www.aa.com/a.cgi") みたいにして
a.cgiの出力結果を元にさらに処理をしたいと思っています



938 名前:nobodyさん [2008/02/19(火) 17:30:48 ID:gLoGL0Ae]
>>937
いい手じゃないが、Linuxでwgetが入ってる状態で漏れが使ってる方法

$foo = `wget -O- www.aa.com/a.cgi`;


939 名前:nobodyさん mailto:sage [2008/02/19(火) 17:45:18 ID:???]
いやそれが最強。wgetのWIN版もあるからな。-qも付けると良い。



940 名前:nobodyさん mailto:sage [2008/02/19(火) 17:55:56 ID:???]
LWP

941 名前:937 mailto:sage [2008/02/19(火) 19:26:35 ID:???]
>>938
ありがとうございました
無事 取得することが出来ました。
あと[`]でくくるのはなぜなのでしょう?


942 名前:938 mailto:sage [2008/02/19(火) 20:13:58 ID:???]
>939
モジュール使った方が互換性高いし、そっちの方が良いと思ったんで。
>940のLWPを使うのが最良だと思うが、使い方調べてる気分的な余裕がないんで、
wget使ってそのまま今に至る感じだ。

>941
外部コマンド実行だから。``で囲むと外部コマンドを実行して標準出力が戻ってくる。

ちなみに"perl -T"でやってると、そのままじゃ外部コマンド動かない事があるんで注意。
$ENV{'IFS'}, $ENV{'CDPATH'}, $ENV{'ENV'}, $ENV{'BASH_ENV'}, $ENV{'PATH'}を
退避・削除してから外部コマンドを実行し戻す必要がある。

943 名前:nobodyさん mailto:sage [2008/02/19(火) 20:26:04 ID:???]
LWP

944 名前:nobodyさん mailto:sage [2008/02/20(水) 08:23:23 ID:???]
>>937-942
search.cpan.org/~gaas/libwww-perl-5.808/lib/LWP/Simple.pm

945 名前:937 mailto:sage [2008/02/20(水) 12:35:11 ID:???]
>>938-944
ありがとうございます。
LWPも使えました 研究してみます。


946 名前:nobodyさん mailto:sage [2008/02/20(水) 13:15:09 ID:???]
@urlの中に500くらいのサイトのURLが入っています。
そのURLのページにキーワードか書かれているかどうか調べるとき、

foreach (@url) {
  LWPで取得してキーワードが見つかったら、$count++;
}

みたいにすると一つずつなので物凄く時間が掛かります。
10個くらい一気に取得する方法はないでしょうか?

947 名前:nobodyさん mailto:sage [2008/02/20(水) 13:35:03 ID:???]
同じプログラムを10個並列に走らせてそれぞれに50サイトずつ担当させるのが一番楽だと思うよ。


948 名前:nobodyさん mailto:sage [2008/02/20(水) 13:43:09 ID:???]
こういう場合ってほとんどはLWPで取得するのが一番時間かかってるのかな?

949 名前:nobodyさん mailto:sage [2008/02/20(水) 13:59:11 ID:???]
>>947
そうですか…分割してみます。

>>948
応答待ちが長いと停止状態です。



950 名前:nobodyさん mailto:sage [2008/02/20(水) 14:34:00 ID:???]
fork

951 名前:nobodyさん mailto:sage [2008/02/20(水) 15:01:34 ID:???]
プロセスで並列化するとプロセスAは終わってるけど
プロセスBは重いサイトがリストにあって終わってないとか
無駄に待ち時間増えるから、threads使える環境ならthreadsのが楽でない?


952 名前:nobodyさん mailto:sage [2008/02/20(水) 15:03:07 ID:???]
JISの文から携帯電話の絵文字部分を退避させたいと思っています。
正規表現について教えてください。

通常の2バイト文字と同様に絵文字[\x75-\x7B][\x21-\x7E]がエスケープシーケンス
\x1b\x24\x42と\x1b\x28\x42に囲まれます。

エスケープシーケンスをそれぞれ
$esc_in = "\x1b\x24\x42";
$esc_out = "\x1b\x28\x42";
とし、絵文字を
$emoji = "[\x75-\x7B][\x21-\x7E]";
とします。

元の文を
$str="今日は晴れでした■気温は10度です。";(■は笑顔の絵文字 \x79\x79 )

この$strは
$esc_in今日は晴れでした■気温は$esc_out10$esc_in度です。$esc_out
とエスケープされます。

やりたい事はこれを
$esc_in今日は晴れでした$esc_out[7979]$esc_in気温は$esc_out10$esc_in度です。$esc_out

というように[]で絵文字コードを囲い、エスケープシーケンスの整合性をとるというものです。

どなたかご教授いただけないでしょうか?

953 名前:nobodyさん mailto:sage [2008/02/21(木) 00:49:43 ID:???]
それのどこがWeb Programmingなんだ?

954 名前:nobodyさん mailto:sage [2008/02/21(木) 02:07:00 ID:???]
JISコードは加工には向かないので、Encode::JP::Mobileあたり使って
いったんutf8文字列にしてから加工して戻す方がたぶん見通しいいよ。


955 名前:952 mailto:sage [2008/02/21(木) 03:31:08 ID:???]
>>954

ありがとうございます。そちらの方で検討させていただきます。

このような複雑な置換について私は苦手でして、もしこれがお分かりになられるなら後学のためにも教えていただきたいのですが、ご無理でしょうか?



956 名前:nobodyさん mailto:sage [2008/02/21(木) 10:36:05 ID:???]
マッチした文字列の前後は$esc_inで囲って
マッチした文字列はルールに沿って変換
ってことかな?

957 名前:nobodyさん mailto:sage [2008/02/21(木) 10:36:46 ID:???]
×$esc_inで囲って
○$esc_inと$esc_outで囲って

958 名前:nobodyさん mailto:sage [2008/02/21(木) 10:39:56 ID:???]
無理に書くとこんな感じ? 全くお勧めしない。

# 絵文字部分を1文字ずつ加工。
# 1バイトずれてマッチしたり、ascii部分にマッチしないようにしてるので面倒
$str =~ s{
(
(?:\G | ^[^\1b]*\x1b\x24\x42)
(?:[^\x1b]{2}|\x1b\x28\x42[^\x1b]*\x1b\x24\x42)*?
)
([\x75-\x7b])([\x21-\x7e])
}{
sprintf "%s\x1b\x28\x42[%02x%02x]\x1b\x24\x42", $1, ord($2), ord($3)
}gex;

# 冗長なエスケープシーケンスの並びを除去
$str =~ s/(\x1b\x24\x42)+/$1/g;
$str =~ s/(\x1b\x28\x42)+/$1/g;
$str =~ s/\x1b\x28\x42\x1b\x24\x42//g;
$str =~ s/\x1b\x24\x42\x1b\x28\x42//g;


959 名前:952 mailto:sage [2008/02/21(木) 14:20:04 ID:???]
>>958
ありがとうございます。
やはりすごい複雑になってしまうんですね。
(
(?:\G | ^[^\1b]*\x1b\x24\x42)
(?:[^\x1b]{2}|\x1b\x28\x42[^\x1b]*\x1b\x24\x42)*?
)

を見てもさっぱり理解できません。
これが絵文字でない文字を指すというのはわかるのですが、詳しく教えていただけないでしょうか?
または参考になる書籍などがありましたら教えていただけないでしょうか。



960 名前:952 mailto:sage [2008/02/21(木) 14:25:02 ID:???]
書き忘れましたが、Encode::JP::Mobileを使い無事utf8にできました。

これを作った方すごいですね。こんな便利なものがあると知りませんでした。



961 名前:初心者 [2008/02/21(木) 14:43:22 ID:eHzrHpy8]
perlでカレンダーを作るのですが、プログラミングする内容としては何がひつようでしょうか?
何から書いていいやらとっかかりがわかりません。どなたかアドバイス等をお願いします。

962 名前:nobodyさん mailto:sage [2008/02/21(木) 14:48:53 ID:???]
ggrks

963 名前:nobodyさん mailto:sage [2008/02/21(木) 14:49:53 ID:???]
とりあえず以下のサブルーチンを作る

1. 本日の年・月・日・曜日を返す
2. x年y月z日の曜日を返す
3. x年y月1日の曜日を返す
4. x年y月の月末日を返す
5. x年y月の前月を返す
6. x年y月の翌月を返す
7. x年y月z日の前日を返す
8. x年y月z日の翌日を返す

964 名前:初心者 [2008/02/21(木) 15:13:33 ID:eHzrHpy8]
ありがとうございます。

965 名前:初心者 [2008/02/21(木) 15:26:58 ID:eHzrHpy8]
今年のようなうるう年かどうかを調べるにはどうしたらよいのでしょうか?

966 名前:nobodyさん [2008/02/21(木) 15:35:05 ID:/bZGgDSr]
閏年の定義に当てはまるかどうかを調べればよい。>>965
西暦が4で割り切れて、100で割り切れなければ閏年。
西暦が4で割り切れて、400でも割り切れれば、100で割り切れても閏年。

967 名前:nobodyさん mailto:sage [2008/02/21(木) 15:35:25 ID:???]
いちいち相手にするからググればわかるような質問が絶えないんだよな

968 名前:nobodyさん [2008/02/21(木) 15:38:45 ID:/bZGgDSr]
悪かった。今は反省している。

969 名前:nobodyさん mailto:sage [2008/02/21(木) 16:23:42 ID:???]
閏年を知る必要は無いはず。
月末=翌月1日の1日前( x年y月の月末日=(x年y+1月1日)-1日 )だから、
PerlインタプリタとOSとライブラリにバグがなけりゃ閏年だろうが、平年だろうが
関係なく計算できる。

Date::Calc使って計算すりゃ一発で出るだろ。



970 名前:nobodyさん mailto:sage [2008/02/21(木) 16:35:43 ID:???]
ググっても分からないような初心者質問って?

971 名前:nobodyさん mailto:sage [2008/02/21(木) 17:03:05 ID:???]
>>1

972 名前:nobodyさん mailto:sage [2008/02/21(木) 18:08:27 ID:???]
>>969
ggrksには同意だが、
たとえば誕生日の入力で2/29が妥当かどうかってのは閏年を判別しなきゃいかんだろ。

質問者の意図は知らんが。

973 名前:969 mailto:sage [2008/02/21(木) 18:13:29 ID:???]
>>972
名前: 初心者 ID:eHzrHpy8 が継続的に質問してるんで、
ID:eHzrHpy8 : 「>961 カレンダーを作りたい。」
nobodyさん: 「>963」
ID:eHzrHpy8 : 「>965 月末日を知るのに閏年を知りたい」

って一連の流れだと思ったんだが、違うのか?

974 名前:nobodyさん mailto:sage [2008/02/21(木) 18:21:25 ID:???]
要するに2月のカレンダーを作るときには、3月1日の日付から−1してやって、日付を取得すれば
いいってことを>>969は言ってるんだね。

カレンダーを書くルーチンを考えたことないから、参考になるね。

975 名前:nobodyさん mailto:sage [2008/02/21(木) 19:03:40 ID:???]
localtime使う前提だよね?
末日計算を前提としてる話とごっちゃになっとる

976 名前:nobodyさん mailto:sage [2008/02/21(木) 19:18:16 ID:???]
もちろん。

でもさ、カレンダーを書くcgiくらい、散々ソースが転がっていそうな気がするんだけどね。
その辺の中から、適当に拾ってアレンジすれば目的は果たせるんじゃないの?

977 名前:nobodyさん mailto:sage [2008/02/21(木) 19:26:16 ID:???]
自分が使うカレンダーならどっかから拾ってくればいいが、
課題ともなるとそうもいかないんじゃない?

978 名前:nobodyさん mailto:sage [2008/02/21(木) 19:33:08 ID:???]
というか、今更perlの課題とか出す大学とかあるの?

979 名前:nobodyさん mailto:sage [2008/02/21(木) 20:55:28 ID:???]
>>952とまったく同じ文章が今日MLに流れてきてたけど、同一人物?



980 名前:nobodyさん mailto:sage [2008/02/21(木) 23:37:02 ID:???]
>>978
専門学校とかじゃね?

981 名前:ID消し挑戦w mailto:000 [2008/02/23(土) 16:05:17 ID:???]
テスト^^;

982 名前:nobodyさん mailto:sage [2008/02/23(土) 16:40:22 ID:???]
自分用モジュールつくってるんだけどさ

package hoge;

use strict;

my $test = 'ABC';

sub new {
 my $pkg = shift;
 bless { hoge => $test, },$pkg;
}

みたいに先頭で定数定義してメソッド内で使いまくるのって問題ありますか?
これならuse strictしない方が良かったりする?

983 名前:nobodyさん mailto:sage [2008/02/23(土) 16:46:25 ID:???]
外部値で初期化したいなら引数として渡せば?

984 名前:nobodyさん mailto:sage [2008/02/23(土) 17:07:54 ID:???]
>>982
問題ないとおも。
ただ、定数として明示したければ、
use Readonly;
Readonly my $test = 'ABC';
しといた方が

985 名前:nobodyさん mailto:sage [2008/02/23(土) 17:09:32 ID:???]
定数は大文字にする習し

986 名前:nobodyさん mailto:sage [2008/02/23(土) 18:07:36 ID:???]
(・∀・)

987 名前:nobodyさん mailto:sage [2008/02/23(土) 18:54:14 ID:???]
>>983
箱から出したくないしので、blessに絡めたくないんです。
ちなみに全メソッドで使います。

>>984
CPAN配布物ですかね?
名前からして便利そうですが、標準で入ってないのは遠慮したいです。

>>985
おk

コールバックあたりも調べてみます。

とりあえずみなさんありがとうです。

988 名前:nobodyさん mailto:sage [2008/02/23(土) 19:03:14 ID:???]
use Vars, oursなんてあったのか。

989 名前:nobodyさん mailto:sage [2008/02/23(土) 19:57:03 ID:???]
>>987
標準ならconstantプラグマ



990 名前:nobodyさん mailto:sage [2008/02/23(土) 21:32:08 ID:???]
以前は値を返すだけのsub使ってた。

991 名前:nobodyさん mailto:sage [2008/02/23(土) 21:46:40 ID:???]
>>987
CPAN配布物だけど、純Perlソースだから、インスコしなくても、
下記からダウソして自分のモジュールと同じディレクトリに入れればよさげ。
search.cpan.org/src/ROODE/Readonly-1.03/Readonly.pm


992 名前:nobodyさん mailto:sage [2008/02/23(土) 21:47:49 ID:???]
空のプロトタイプ付きサブルーチンはコンパイル時に展開されるので
効率はいい。constant プラグマはいわばその構文糖。
www.kt.rim.or.jp/~kbk/perl5.005/perlsub.html#Constant_Functions

変数展開コンテキストに埋め込みたいなら、リテラルのリファレンスに
名前を付ける方法もある。
www.kt.rim.or.jp/~kbk/perl5.005/perlmod.html#Symbol_Tables

パッケージグローバルな my 変数も、そのパッケージ内でうっかり
書き換える心配が無いのなら別に悪い選択肢じゃない。

993 名前:982 mailto:sage [2008/02/23(土) 22:24:31 ID:???]
>>991
ダウソしました。できるだけ理解してから使ってみます。

>>990,>>992
サブルーチンでやるならsub Readonly () { 'ABC' }でおkですね。
とりあえず自分用はそうします。

もし他人に配布するような事があれば>>989,>>991が良いっす

短時間ですごい勉強になりました。ありがとう

994 名前:nobodyさん mailto:sage [2008/02/24(日) 18:30:29 ID:???]
保 守

995 名前:nobodyさん mailto:sage [2008/02/25(月) 16:37:54 ID:???]
 次スレ希望

996 名前:nobodyさん mailto:sage [2008/02/25(月) 17:52:22 ID:???]
テンプレ貼るなら立ててやるよ

997 名前:nobodyさん mailto:sage [2008/02/25(月) 19:27:13 ID:???]
ほらよ

Perlコーディング初心者質問スレ Part 57
pc11.2ch.net/test/read.cgi/php/1203935151/

998 名前:nobodyさん mailto:sage [2008/02/25(月) 20:00:31 ID:???]
乙です。
埋め

999 名前:nobodyさん mailto:sage [2008/02/25(月) 20:07:07 ID:???]
埋め



1000 名前:nobodyさん mailto:sage [2008/02/25(月) 20:07:31 ID:???]
埋め

1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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