Perlコーディング初心者質問スレ Part 53
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/11/26(日) 14:38:23ID:SlmGsFMB【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >>2-10
前スレ http://pc8.2ch.net/test/read.cgi/php/1153987463/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0004nobodyさん
2006/11/26(日) 14:41:45ID:???CGI: Common Gateway Interface part 13
http://pc8.2ch.net/test/read.cgi/php/1126436361/
【Perl,CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/
【Perl】ファイルロック(排他処理)について語ろう
http://pc8.2ch.net/test/read.cgi/php/1024795138/
★負荷軽減対策委員会(Perl、PHP)★
http://pc8.2ch.net/test/read.cgi/php/1034645635/
CGIに依存しないPerlの話題一般/Part2
http://pc8.2ch.net/test/read.cgi/php/1030548610/
★三 【 スクリプト改造工房 PART 9 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1143834740/
【 スクリプト改造依頼スレ 】(丸投げ) part5
http://pc8.2ch.net/test/read.cgi/php/1141174205/
0005nobodyさん
2006/11/26(日) 14:51:35ID:tkb0DDKs00061
2006/11/26(日) 17:42:11ID:???0007nobodyさん
2006/11/26(日) 17:50:07ID:???jcode::convert(\$Line,'euc');
0008nobodyさん
2006/11/26(日) 19:05:37ID:???0009nobodyさん
2006/11/26(日) 22:01:06ID:???0010nobodyさん
2006/11/26(日) 22:46:05ID:???0011nobodyさん
2006/11/26(日) 23:15:07ID:???Time::HiRes 使ってるです♪
0015nobodyさん
2006/11/27(月) 01:47:56ID:VGuJADoD0016nobodyさん
2006/11/27(月) 04:01:18ID:???0や-1を返す場合が多いと思いますが、undefにしない理由って何かあるんでしょうか。
undefなら0と同じくfunc() or dieなんて呼び方もできるし、undefの可能性ありと
常に思っておけばprint func()なんて不用意に書かなくなるかなと思ったんですが。
use warningでundefをprintするなと大量に警告されて、関数の書き方間違ったかなと
思ったりしました。
0017nobodyさん
2006/11/27(月) 09:39:53ID:???私は以前から 0 or DATA で返してるので、今からそのクセを治すのに苦労しそう・・・
0018nobodyさん
2006/11/27(月) 11:28:23ID:???0019nobodyさん
2006/11/27(月) 11:43:26ID:???なんて記述もよく見かけるけど、これは
・リストコンテキストなら空リスト
・スカラコンテキストならundef
になるって事でおk?
0021nobodyさん
2006/11/27(月) 15:21:54ID:???0022nobodyさん
2006/11/27(月) 16:19:33ID:???どのようにすればいいでしょうか?
0023nobodyさん
2006/11/27(月) 16:26:08ID:w7/znFw60024nobodyさん
2006/11/27(月) 18:28:22ID:???横だけど、
処理を意識して書くか perl に任せるかの違いじゃね?
呼び出し元にとってみればどっちも同じ挙動でしょ。
0025nobodyさん
2006/11/27(月) 18:34:15ID:???0026nobodyさん
2006/11/27(月) 18:53:55ID:???分ってる人もいるっぽいが、
return () ; or return ; の二択しかないよ(実質一択)。
かなり有名なネタだ。
初心者スレなので参考 URL を。
ttp://d.hatena.ne.jp/hyuki/20060406
0027nobodyさん
2006/11/27(月) 19:13:29ID:???↑このようなほうほうで暗号可したのですが
アルファベットのほかに、どのような記号が使われるのでしょうか?
リストがのってるサイトがあったらお願いします。
0030nobodyさん
2006/11/27(月) 20:00:40ID:???perlでは決まっていないので使用するシステムのcryptライブラリのマニュアルなどを
参照。たとえばこんなの。
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/crypt.3.html
0032nobodyさん
2006/11/27(月) 21:24:09ID:???CGIファイルの中身って見ることってできるんでしょうか?
HTMLは見れますが
CGIの中身って見れませんよね?
CGIの中身というのは、.cgiファイルのうp前の状態です。
0033nobodyさん
2006/11/27(月) 21:27:54ID:???0034nobodyさん
2006/11/27(月) 21:56:02ID:???返信ありがとうございます。
どのような設定をすれば見れなくできますかね?
有料鯖なのですが
わたしでもその設定はいじれるのでしょうか?
0035nobodyさん
2006/11/27(月) 22:10:03ID:???または全ディレクトリにindex.htmlを
0036nobodyさん
2006/11/27(月) 22:14:13ID:???とりあえず>>34の使っている鯖がCGI可なのかどうかが問題だ。
そういえばちょっと前にCGI不可の鯖に.cgiで置いてソース晒してた椰子が居たなあ…。
003716
2006/11/27(月) 22:21:07ID:???特に>>25,>>26 ありがとう
今日まさにこんなことやりそうになってました。undef返したら真なんですね。
(@array = &func()) or 〜
return;と書くとリストコンテキストでは空の配列を、スカラコンテキストでは
undefを返す、つまり
return wantarray ? () : undef;
と書くのといっしょってことですね。危うく間違った理解で突き進むところでした。
0038nobodyさん
2006/11/27(月) 22:23:31ID:???0039nobodyさん
2006/11/27(月) 22:58:38ID:???どうもありがとうございます。
.htaccessで設定できるのでしょうか?
やりかたがのってるサイトが見つからないので
よかったら教えてください
0042nobodyさん
2006/11/27(月) 23:19:09ID:???ブラウザでアクセスしていきなりソース丸見えという事はないと思うよ。
0043nobodyさん
2006/11/27(月) 23:19:55ID:???0045nobodyさん
2006/11/27(月) 23:26:52ID:???004616
2006/11/27(月) 23:35:54ID:???大方htaccessの設定だったんだろうなあ。下記とかかな。
AddHandler cgi-script .cgi
0048nobodyさん
2006/11/28(火) 00:15:03ID:???おまえ酷すぎ
0049nobodyさん
2006/11/28(火) 00:40:58ID:???httpd.confの設定をhtaccessで上書きするってこと。
全然はずしてるかもしれないけど、CGIは基本的にcgi-bin内で実行、
それ以外はhtaccessいじってね、っていう仕様なのかもね。
0050nobodyさん
2006/11/28(火) 00:43:31ID:???0051nobodyさん
2006/11/28(火) 00:44:27ID:???0052nobodyさん
2006/11/28(火) 00:45:28ID:5n8a+rNmある場合true、ない場合falseを返す変数があったら教えてください。
0053nobodyさん
2006/11/28(火) 00:46:41ID:???0054nobodyさん
2006/11/28(火) 00:47:22ID:???0055nobodyさん
2006/11/28(火) 00:48:20ID:???0056nobodyさん
2006/11/28(火) 02:23:57ID:???#いろいろな項目入力
<INPUT type="submit" value="実行a">
</FORM>
実行aボタンを押すと、a.cgiが実行されますが、
実行aボタンを押して同時に下のb.cgiを実行する
方法ありますでしょうか。
<FORM action="b.cgi" method="POST">
#いろいろな項目入力
<INPUT type="submit" value="実行b">
</FORM>
a.cgiの処理コードの中に、b.cgiの処理コードを
書くぐらいしか思いつきません。
よろしくお願いします。
0057nobodyさん
2006/11/28(火) 05:30:21ID:PG2nYwJ4phpで例えば<?php include("○○.php"); ?>というのがあります。
これは○○.phpを上の記述を書いたphpに表示させることができます。
perl(cgi)も同様なことできますでしょうか?
index.cgiにabc.cgiを表示させたいんですけど。
やり方ありましたら教えて下さい m(_ _"m)ペコリ
0058nobodyさん
2006/11/28(火) 09:44:54ID:???一つの体で、別々の場所に行く電車に乗れますか?
自分で思いついた方法で大丈夫です。
>>57
つ require、or module
0059nobodyさん
2006/11/28(火) 10:10:33ID:???レスありがとうございます
軽くしらべてみたんですが難しいですね
それでできればいいんですが・・・
がんばってみます
0061nobodyさん
2006/11/28(火) 10:54:01ID:???0062nobodyさん
2006/11/28(火) 14:47:00ID:???こういう文に置換 - s/ / / -を組み合わせたいのですが出力が上手く表示できません
どうしたらよいでしょうか?
0063nobodyさん
2006/11/28(火) 15:01:43ID:???0064nobodyさん
2006/11/28(火) 15:08:26ID:???0065nobodyさん
2006/11/28(火) 15:13:05ID:???0066nobodyさん
2006/11/28(火) 15:16:09ID:???これでもおk?
006766
2006/11/28(火) 15:21:19ID:???push(@grepedarray)
じゃなくて
push(@grepedarray, $_)
じゃないとだめかも
0068nobodyさん
2006/11/28(火) 15:55:32ID:???0070nobodyさん
2006/11/28(火) 19:56:25ID:???0071nobodyさん
2006/11/28(火) 20:59:18ID:???@grepedarray = grep { s/ / / ; /^[A-Z]/ } @array ;
@grepedarray = grep { $flag ++ if /^[A-Z]/ ; s/ / / ; $flag } @array ;
じゃ駄目なのか?(適当に書いたが)
0072nobodyさん
2006/11/28(火) 21:04:48ID:???007371
2006/11/28(火) 21:17:03ID:???そうだ罠。(実際書く時には当然もっと丁寧に if 文書くけどさw)
ただ @array に grep でアクセスした後、map or foreach で
アクセスするなら実質 2 回のループなわけで…。
そっちも十分に無駄っぽいよね。
0074nobodyさん
2006/11/28(火) 21:34:23ID:???もっと富豪的に
0075nobodyさん
2006/11/28(火) 21:43:35ID:???/^[A-Z]/
? s/ / /
? 1
: 1
: undef
} @array;
0077nobodyさん
2006/11/28(火) 22:05:24ID:???0078nobodyさん
2006/11/28(火) 22:10:11ID:???メモリのbenchってどうやんだ?やる方法ある?
0079nobodyさん
2006/11/28(火) 22:24:28ID:???そう来るならこっちの方がもっとスマート
grep { /^[A-Z]/ ? s/ / / || 1 : undef } @array;
0080nobodyさん
2006/11/28(火) 22:39:36ID:???0081nobodyさん
2006/11/28(火) 22:43:03ID:???0082nobodyさん
2006/11/28(火) 22:48:03ID:???Windowsじゃ動かんし使ったことも無いのだけれど、
forkしてから走らせて使用メモリサイズを調べるmemchならあるね…
ttp://search.cpan.org/~salva/Memchmark-0.01/lib/Memchmark.pm
freeで確保した領域をOSに返しちゃうタイプのライブラリだとそもそも成立しない方法っぽい
それから、Perlをデバッグオプションつきでコンパイルしておけば、
色々メモリ関連情報が調べられるんだったと記憶しているけれど、
どの程度できるのかよく知らんです。
0084nobodyさん
2006/11/29(水) 00:11:52ID:YenD9j36以下のようなプログラムを書きました。
my %no;
for (my $cnt = 1; $cnt <= 10000000; $cnt++) {
my $s_no = main::create_no();
$no{$s_no} = 1;
if(!open(FH, ">>./no.csv")){
print "Error " . __LINE__ . "\n";
exit;
}
flock(FH, 2);
print FH $s_no . "\r\n";
flock(FH, 8);
close(FH);
}
create_no内では
if(not exists $no{$c_no}){ return $c_no; }
このようにハッシュのexsistsを使用して重複チェックをかけているのですが、
やはりメモリを大量に消費してしまうため、900万あたりからものすごい時間が
かかってしまいます。
効率的な方法があればどうかご教示ください。
恐れ入りますが宜しくお願いいたします。
0085nobodyさん
2006/11/29(水) 00:19:15ID:???桁数が決まってるのでバイナリアクセスで
filepos1 = rnd * 総レコード数
filepos2 = rnd * 総レコード数
この pos1 と pos2 を入れ替え
あとは好きな回数だけswapすればいいかと思います
すべての件をメモリに保持しないので仕様メモリは極小で済みますが、
ディスクI/O がかなり発生します。
0087nobodyさん
2006/11/29(水) 01:15:11ID:???1000万回ライト
50万回シーク
50万回リード
50万回シーク
50万回ライト
って感じです
0088nobodyさん
2006/11/29(水) 01:15:58ID:???http://blog.livedoor.jp/dankogai/archives/50681645.html
0091nobodyさん
2006/11/29(水) 23:58:32ID:???$cnt = grep(/win/,@array);
print "大文字\n@grepedarray\n計$cnt個\n";
この文で$cntの部分が 計0個とでてしまんですが何が問題なんでしょう?
0092nobodyさん
2006/11/30(木) 00:14:17ID:???grep{} 内の $_ は元 array の要素のエイリアスだから、
一行目にて $_ を直接変更してしまっている。それがやなら
@grepedarray = map { $foo = $_ ; $foo =〜 s/win/BIG/ ; $foo } grep { /win/ } @array ;
てなかんじで map 中で $foo にいったん代入してから変更する事
ちなみに上の map 中の $_ も @array の要素のエイリアス( s/// したら変更されちまう)
0093nobodyさん
2006/11/30(木) 00:17:52ID:???ブロックで囲っちゃえばいいじゃんとか思うのだが
0094nobodyさん
2006/11/30(木) 00:18:50ID:???○一行目にて元要素を直接変更してしまっている。それがやなら
0096nobodyさん
2006/11/30(木) 00:32:28ID:???例を挙げるとシュワルツ変換には必須。
my @array = ( '1,2', '2,1' ) ;
my @sorted = map { $_->[0] }
sort { $a->[1]<=>$b->[1] }
map { [ $_, (split /,/, $_ )[1]] } @array ;
上を普通の for 文で書くと捨て array を数個書くはめになり、7 行以上になることは確定。
とは言いながらも使うかどうかは完全に趣味の問題
0098nobodyさん
2006/11/30(木) 02:58:21ID:???たとえばだけど、ハッシュを引数に取るサブルーチンに
foo( map { $_ => $hash{$_} =~ /^\d+$/ ? $hash{$_} * 2 : "str".$hash{$_} } keys %hash);
などと使えて便利。
map {
$_->[0] += 1900;
$_->[1]++;
@$_
} [(localtime)[5,4,3]];
0100nobodyさん
2006/11/30(木) 08:57:31ID:???…さすがにそれは普通に sub に渡すだろ
my $Now_date = sprintf qq|%04d/%02d/%02d|,
sub { $_[5]+1900, $_[4]+1, $_[3]}->(localtime) ;
もしくは
my $Now_date
= sub{ sprintf qq|%04d/%02d/%02d|, $_[5]+1900, $_[4]+1, $_[3]}->(localtime) ;
0101nobodyさん
2006/11/30(木) 10:53:04ID:???Jcode.pm は知らんけど、Encode.pm は重い。
一般的な掲示板CGIで use Encode; しただけで、2〜3割CPU負荷が高くなった。
0102nobodyさん
2006/11/30(木) 10:55:09ID:???open(FILEHANDLE, ">> filename") ;
という書き方をしますよね。
この書き方はファイル名がダブルクォーテーションで囲われないのでいまいち好きになれません。
例えば、ファイル名が " test.txt" (半角スペースが左にある) だった場合にはどうすればいいんでしょうか?
■ このスレッドは過去ログ倉庫に格納されています