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

【Perl】初心者コーナー Part17

■ このスレッドは過去ログ倉庫に格納されています
0001 ◆Go4ZKngPGE 02/10/14 17:24ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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

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

CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/

過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0002nobodyさん02/10/14 17:25ID:???
2
0003 ◆Go4ZKngPGE 02/10/14 17:29ID:???
[過去ログ]
Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
 DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
 DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 知らん
Part15 http://pc.2ch.net/test/read.cgi/php/1028816385/
Part16 http://pc.2ch.net/test/read.cgi/php/1032070299/

[ひまぢん氏のミラー]
Part1 http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.html
Part2 http://www.angelfire.com/ak5/2ch-web-program/kako/971817087.html
Part3 http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
Part4 http://www.angelfire.com/ak5/2ch-web-program/kako/984430156.html
Part5 http://www.angelfire.com/ak5/2ch-web-program/kako/988728069.html

コピペしただけなんで誰かフォローおながいすます。
0004前の97302/10/14 17:39ID:???
http://www.perlpress.com/perl/gres
例の通りに実行しても全然動かないのですけど、どうやれば動くのでしょうか?
以下は何もおきずに終わります。
perl gres.pl -e 's!and!or!g' *.txt

以下は"Processed 0 files." と表示されて終わります。
perl gres.pl -v -e 's!and!or!g' *.txt

ファイルを見つけられないのかとファイル名を直接指定すると、
perl gres.pl -e 's!and!or!g' readme.txt
GLOB(XXXX) ←こんなのが画面いっぱいに表示されて、readme.txt は 0 バイトになってしまいます。

未解決なので引き続きおながいします。
まだ動かないので...
0005 ◆hhGmOG73gc 02/10/14 18:29ID:???
                            / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
             ┷===〓□┘ ∧=∧  <  コテは皆殺しだゴルァ!
                 _┗ __(゚Д゚ )__\__________________
   ____        / ̄ ̄ > 7 /   /==|=== ̄||
  〇 )))) )) ̄ ̄ ̄ ̄ ) ̄))  // Г/ 〇)./ ▽  |  ⇒⊥______
    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|回 ̄] (( /_7  " /     | ☆ / \  >   ヽ
            __ >――ゝ __ /____ |__\_ノ__ ノ__ノ
          ∠__ / ̄ ̄ ∠___// ̄ ̄◎ ̄ ̄◎ ̄ ̄ ̄◎ ̄ ̄¬}
           〈==={\ ̄ ̄ 〈==={ (◎)                (◎)/
            ゝ==\\_  ゝ== > ((◎) ((◎) ((◎) ((◎)((◎) /
              ゝ==ヽー ̄ ̄ ゝ==ヽ===========
0006nobodyさん02/10/14 18:33ID:???
固定=低スキル
0007nobodyさん02/10/14 18:34ID:???
歴代固定は糞ばっか
0008デフォルトの名無しさん02/10/14 20:09ID:???
コテハンだったって、何も目くじら立てることないと思うけどな。
0009nobodyさん02/10/14 20:20ID:BFM6g6aW
2chのsubject.txtを取得してcgiが置いてあるフォルダにコピーしたいのですが
soket→connectでsubject.txtの内容を$aに格納してclose
フォルダにあるsubject.txtに$aを書き込むと言う形をとろうとしても
subject.txtには何も書き込まれていないと言う状況です。
どのようにしたらいいのでしょうか?
0010nobodyさん02/10/14 20:31ID:???
system('wget','-O path/file','www.2ch.net/xxx/subject.txt');
0011902/10/14 20:58ID:b64mpFF2
>>10
ありがとうございます。
システムコマンドは全く解らないんですが
システムコマンドを使う場合コピーはどうしたらいいんでしょうか?
0012nobodyさん02/10/14 21:51ID:???

>>1

   お い テ メ エ

       ち ょ ー し の ん な よ ! ! ! ! ! ! !

00131@ ◆Go4ZKngPGE 02/10/14 22:20ID:???
前スレに書いたけど、このトリップは
#コテハン
だよ。スレ立てのためだけに使ったんだよ。
そんなに必死にならなくてもボク自身は初心者だよ。
コテハン使いたかったキミもそうでないキミも
みんなで仲良く使えばいいじゃん。ネ。
#コテハン
0014nobodyさん02/10/14 22:32ID:???
system関数は、そのPerlが動いているシステムに依存するから
一般的なことは書けない。WindowsなのかLinux|Unixなのかで
違いますから。
0015nobodyさん02/10/14 22:41ID:???
>>11
wgetというコマンドラインのダウンロードソフトを
呼び出しているだけ。
0016質問!02/10/14 23:38ID:9ZSiyech
http://tohoho.wakusei.ne.jp/wwwperl1.htm
の下のほう(ライブラリ)のところ・・・

>コメントを記述する場合は
>シャープ( # )の前にセミコロン( ; )を追記する必要がある場合もあるそうです。

とありますが具体的にどういう場合でしょう?
(jcode.plにはセミコロンついてますね)
0017nobodyさん02/10/14 23:41ID:???
>>16
過去レス嫁
0018nobodyさん02/10/14 23:53ID:???
死ねョ禿
0019質問!02/10/14 23:56ID:???
>>17
既出でしたか、すいません(・・;
0020nobodyさん02/10/15 00:01ID:???
どこよ?
0021nobodyさん02/10/15 00:05ID:???
データ落ちしてるよ。でもキミにはプリプロ関係ないだろ
0022nobodyさん02/10/15 00:17ID:???
貼り付け希望
0023デフォルトの名無しさん02/10/15 00:17ID:???
>>21
プリプロって何よ。
0024nobodyさん02/10/15 00:41ID:???
>>23
プリンタプロファイラ
0025nobodyさん02/10/15 00:55ID:???
>>24がネタかマジレスか分からんオレには関係なさそうだな。
0026 ◆Rr7AiK6DvQ 02/10/15 01:02ID:???
プリプロセッサ−
0027nobodyさん02/10/15 01:23ID:???
厨な質問します。
掲示板作るにCGI使いたいのですが、
HTMLに埋め込む形でテーブルの中に掲示板を入れることってできるでしょうか。
0028デフォルトの名無しさん02/10/15 01:47ID:???
>>24
っんだよ。変な言葉覚えちゃったよ。ちょっと:

      人
    (__)
  \(__)/ ウソコー!
   ( ´A` )
0029nobodyさん02/10/15 01:47ID:???
http://pc.2ch.net/test/read.cgi/php/1030151932/422
0030nobodyさん02/10/15 02:01ID:???
マルチポストはレスしてくれた人の善意を踏みにじりかねない
0031nobodyさん02/10/15 02:08ID:???
>>30
失礼いたしやした。
むこうで一本化します。
0032nobodyさん02/10/15 02:39ID:nVvEr8H/
2ちゃんねるのスクリプトに極めて近い掲示板を探していますが、
ありませんでしょうか?
0033nobodyさん02/10/15 02:40ID:???
>>32
自作すれば? 処理の流れは察しがつくから簡単だよ
0034nobodyさん02/10/15 03:02ID:???
>>16 貼り付けて!
0035nobodyさん02/10/15 03:41ID:???
>>32
いっぱいあるよ。
【スレッド】2ch型掲示板 その6【フロート型】
http://pc.2ch.net/test/read.cgi/php/1028384308/
0036nobodyさん02/10/15 04:20ID:???
>>34
自分で探そうや
そんなに前でもなかったと思うし
0037nobodyさん02/10/15 13:43ID:0TY8yVdT
前スレ888です。httpdのエラーログの見方をやっと覚えました。
“Premature end of script headers”でInternal Server Errorになります。
ヘッダの終わりが早すぎる? やっぱりわかりません。
Mac OS Xでローカルマシンで実行しています。
perlのパスは間違っていないはずです。何が悪いんでしょう?

#!/usr/bin/perl

use CGI qw(:satndard);
print header;
print start_html('Hello');
print h1('This is hello.cgi');
print end_html;
0038nobodyさん02/10/15 14:20ID:???
satndard ⇒ standard
0039nobodyさん02/10/15 14:22ID:???
>>37 =~ s/satndard/standard/;
ネタですか?
0040nobodyさん02/10/15 14:42ID:0TY8yVdT
>>38-39
ありがとうございます。解決しました。
すみやかに回線切って逝ってまいります。
0041nobodyさん02/10/15 15:07ID:1tgEM8TW
日本語をひらがなで区切って、出現単語をカウントするものってご存じでしょうか?
自分で作れっていわれそうですが、先人のプログラムがあれば是非利用してみたいです。
英単語をカウントするものはごろごろ落ちてるんですが、日本語のものってちょっと見つからなくて困っています。

例)
一番は一番で三番は四番。
↓

一番 2
三番 1
四番 1

0042nobodyさん02/10/15 15:09ID:???
文字を云々する際は、文字コードぐらいは・・・
0043nobodyさん02/10/15 16:08ID:???
>>41
ひらがなで単語を区切る?
じゃあ、これはどうよ。←
「これはどうよ」が一単語かよ。
日本語を単語に区切るにはchasenなどの形態素解析ソフトが必要。
00444102/10/15 16:45ID:???
>42さん、43さん
ご返答ありがとうございます。
茶筅も調べてみたのですが、細かく区切り過ぎてしまうようです。
一連の単語として区切るようなオプションがあれば一番なのですが。。

茶筅例)
拉致被害者→拉致 被害 者

拉致被害者→拉致被害者の一単語としてカウントしたい。

そこで、ひらがな、もしくは記号(、。「」等)で区切ることができればと考えています。
あくまで漢字、カタカナのみで、ひらがなの単語はカウントしないと考えています。
0045nobodyさん02/10/15 16:51ID:???
>44
「これはどうよ」はさ、「これは どうよ」なのか「これ はどうよ」なのかの判断はどうさせる気よ?
すでにPerlの問題でもない気がするけど。

こないだ見たプロジェクトXのワープロ開発の話を思い出したさ。
00464202/10/15 16:52ID:???
>>44
文字コード書いてないからSJIS対応で書いた。不完全だけと十分だろ。

map($set{$_}++, split(/(?:\x82[\x9f-\xf1])+/));
00474302/10/15 17:06ID:???
>>46
おおすばらし!大洲薔薇師!
たいなし!→他伊那市
0048login:Penguin02/10/15 19:40ID:???
Perl DBI 詳しく紹介したサイト教えて 英語でもOK
また、PerldBIで構築したサイト教えて下さい

また、強化書ですが、 oreilly の perl dbi が
がいいですか
それともascii のperl DBIの本がいいですか?
0049nobodyさん02/10/15 20:18ID:???
>>48
http://pc.2ch.net/test/read.cgi/php/1030209573/
0050nobodyさん02/10/15 20:34ID:???
前スレの続きになりますけど、
push@log,$_ while<LOG>;
と
@log=<LOG>;
とで、スピード的、メモリ的な違いは出ませんかね。
調べられないもので。
0051nobodyさん02/10/15 20:38ID:???
>>50
メモリは結局同じこと、スピードはベンチマークとらないと・・・
0052nobodyさん02/10/15 20:43ID:???
>>50
<LOG>から1行づつ読んで処理するとメモリ的に優しくなる。
00535102/10/15 20:46ID:???
>>50
スピードは大差ない

Benchmark: timing 1000 iterations of code1, code2...
  code1: 1 wallclock secs ( 1.43 usr + 0.00 sys = 1.43 CPU)
  code2: 2 wallclock secs ( 1.43 usr + 0.00 sys = 1.43 CPU)
00545002/10/15 20:51ID:???
あらま。<スピードは大差ない
じゃぁメモリに優しそうな前者を使うのがベターってことですかね。
00555102/10/15 20:53ID:???
>>54
前者が優しいということではないです。>>52さんの言う優しいとは以下のように
すること。

while (<LOG>){
処理
}
00565002/10/15 20:59ID:???
>>55
じゃ配列に格納する2つの例は結局違いはないとなりますな。
調べてくれてありがとございますた
0057nobodyさん02/10/15 23:01ID:???
>>53
何を測りたいベンチなの?
意味のある数字が出ていない気がするが。

--- bench ---
#!/usr/bin/perl
use Benchmark;
timethese( 5, {
 handle => q{
  open F, '<./test.log' or die;
  my @log = (); @log = <F>;
  close F;
 },
 while1 => q{
  open F, '<./test.log' or die;
  my @log = (); push @log, $_ while <F>;
  close F;
 },
 while2 => q{
  open F, '<./test.log' or die;
  my @log = (); while (<F>) { push @log, $_ }
  close F;
 },
});
__END__

> perl -e 'print map { "$_\n" } (0..999_999);' > test.log
> perl bench
Benchmark: timing 5 iterations of handle, while1, while2...
 handle: 19 wallclock secs (14.92 usr + 3.61 sys = 18.53 CPU)
 while1: 10 wallclock secs (10.52 usr + 0.19 sys = 10.70 CPU)
 while2: 12 wallclock secs (11.11 usr + 0.13 sys = 11.24 CPU)
00585002/10/15 23:56ID:???
>>57
おおう。省略形のwhileが最速ってことですかこれは。
省略形の方が速いんすね。
そして @log = <F> が一番遅いとは思いませなんだ。

結論として push @log, $_ while <F>; っていう記述が一番よろしいカンジですか。
0059 ◆hG4XfSMGTg 02/10/16 00:42ID:???
その程度の差はどうでもいいと思うが。
0060nobodyさん02/10/16 01:13ID:???
この程度の差を突き詰めていくもんなんじゃないのperlは
0061nobodyさん02/10/16 02:10ID:???
Perlでは一気にファイルをメモリにいれる方法はあるけど、そのやり方同士で
ベンチを競うほどでもないし、自分が好きなやり方でやったほうがいい。
やり方は何通りもあるってやつです。

速度が気になるのなら、
while (<LOG>) {
 処理
}
とやるか、いっそCで書き直すというほうがマシでしょ。
00625702/10/16 04:13ID:???
>>59-61
>>57 の数字を信じるなら、100万行*5で せいぜい10秒の差だ。
数千行のファイルをたまに触るだけの人が気にしなきゃいけない
数字じゃない。しかし日常的に数十万行のファイルを*Perlで*
扱っているなら、知っておくべき実験結果だろうな。

やり方は色々ある。どんな風に書くも自由だ。
だけど状況によって最適解は変わる事を常に意識しなきゃだめだ。
0063nobodyさん02/10/16 05:58ID:???
至極当たり前のことを。書いてて恥ずかしくないか?
0064nobodyさん02/10/16 07:32ID:???
>>62
まあ、数十万行のファイルを触るときに数千行と同じやりかたをするのか?って疑問を
もって欲しいもんだ。
# しかもそれが日常的な場合だと特に。
0065nobodyさん02/10/16 07:42ID:???
つか10.70 CPUと18.53 CPUじゃ2倍近い差なんだから
普通に効率のいい方を使えばいいっていうだけの話ちゃうの
0066 ◆hMJAPH9PWA 02/10/16 08:05ID:???
100万行のファイルに対してで@log = <LOG>;なんてことを行ったらマシン止まりそうな気がする
0067nobodyさん02/10/16 11:11ID:???

localtime の逆関数みたいのないですか?
$year $mon $mday $hour $min $sec --> $epoc にしてくるようなの。
0068nobodyさん02/10/16 11:28ID:4mkRoll6
>67
use Time::Local;

$epoc = &timelocal($sec, $min, $hour, $mday, $mon, $year);
0069nobodyさん02/10/16 11:36ID:4mkRoll6
>68
補足
年は4ケタ(2002とか)、それ以外はlocaltimeと同じでつ。
曜日は求めた値をlocaltimeにかけると分かるです。
不正な値はエラーになっちゃうんでうまく対策してください。
0070nobodyさん02/10/16 11:54ID:???
>>68
&timelocalの'&'は要らないと思う。
00716702/10/16 12:01ID:???

ありがとうございます。
助かります。
00725102/10/16 12:58ID:???
>>57
>何を測りたいベンチなの?
>意味のある数字が出ていない気がするが。

前レスを受けてのベンチだからわかると思ったんだけど・・・

意味のある数字? timing 1000 でとったんだけど・・・
0073nobodyさん02/10/16 13:15ID:???
>>72
だからさ、高負荷をかける状況になる場合、ファイル丸ごと変数に取り込む
ようなことしないよね。ってことから意味のある数字かどうか考えたらいいんじゃないか?
東京大阪間を最短で歩くコースを考えてくれても、「なんで新幹線乗らないの?」って
言われたらおしまい。これと同じこと。
0074nobodyさん02/10/16 13:27ID:???
全角数字を半角数字に直すにはどうしたら良いですか。
$hoge =~ s/0/0/g;
$hoge =~ s/1/1/g;
$hoge =~ s/2/2/g;
これを9まで続けるでいいでしょうか。
00755102/10/16 13:29ID:???
>>73
意味がわからないんだけど・・・
0076nobodyさん02/10/16 13:40ID:???
>74
ttp://www.din.or.jp/~ohzaki/perl.htm#JP_Z2H

まぁ、そのやり方が一番楽だと思うよ。
■ このスレッドは過去ログ倉庫に格納されています