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


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

Perlについての質問箱 30箱目



1 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:54:12 ]
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。

CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 pc8.2ch.net/php/ )

CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。

www.perl.org/get.html
● 2006/12/21現在の最新版: 5.8.8
● 2006/12/21現在の開発版: 5.9.3

前スレ
Perlについての質問箱 29箱目
pc11.2ch.net/test/read.cgi/tech/1166708139/

リンク集は>>2-3
過去スレは>>4

654 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 17:20:46 ]
その機能入ったのはつい最近(といっても5年前だが)だから、古い本だったら書いてないだろうし、
厚みで値段稼いでるような本なら、そのあたりいい加減でも不思議じゃないな。

655 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 17:45:13 ]
>>654
なるほど、確かに初版第1刷が2003年ってなってる。


初心者質問ですが
my@b=("$a[1]","$a[2]","$a[3]","$a[4]","$a[5]","$a[6]","$a[7]","$a[8]");

こういう書き方をもっと短く書けませんか?
既に@aには$a[0]や$a[9]から先にも変数が入ってる状態で、$a[1]〜$a[8]までを@bに入れたいです。

$a[1〜8]みたいな表現が存在するなら表現方法を教えてほしいです。

656 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 17:57:06 ]
>655
@a[1..8] で OK。
キーワードはスライス。

ところで、なんで "" で囲ってるの?

657 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 17:58:21 ]
文字列化する必要があるんじゃね?

my @b = map "$_", @a[1..8];

658 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 18:14:52 ]
>>656>>657
激しくトンクス!
そういえばfor(0..7)とか使ってました。
@a[1..8]という書き方があったとは。


659 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 18:23:29 ]
$a   @a
^これや^これの名前ってなんだっけ?

660 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 18:39:44 ]
普通にドルとアットでいいんじゃない?
なんか$でプレフィクスとか見つけたけど。

@は配列ArrayのAを表し
$は・・・なんだっけ?Sからはじまるなんかの単語じゃなかったっけ?
%は/の左の丸がキーで、/の右の丸が値を示すんだっけ?
なんかそんな感じ。
どうせ声出して読まないし気にするまでも無いような・・・

661 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 18:45:22 ]
ファニー文字?

662 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 18:57:19 ]
ああ、思い出した。$はスカラーのS。



663 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 18:59:10 ]
>>659,660,661
sigil だと思う。
sigilsと複数形にすることも多いが


664 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 19:10:35 ]
ネットショップなんかで自動監視・購入できるスクリプトが組めるらしいのですが
どういったものなんでしょう。
役に立ちそうなサイトがあったら教えてください。

665 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 19:44:38 ]
>>663
あーそれそれ。さんくす

666 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 20:34:14 ]
なんかPerlスゲー人が書く魔法みたいなコードなんか紹介してください
友達が言ってたんですが他の言語だと20行くらいかかりそうな処理も1行で記述できるくらい魔法ちっくなことができるって聞いたんですが本当ですか?

667 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 20:51:05 ]
本当です
すべてが魔法なので紹介しきれません

668 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 21:07:49 ]
少なくともCOBOLで20行文の命令を1行にまとめることはできるよ。

669 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 21:14:04 ]
確かにPerlを使えばどんな複雑な処理でも一行でかけるなw

670 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 21:31:15 ]
何行で書けるとかPerlたん変態っぷりはそんなことじゃないだろ

671 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 21:36:44 ]
python見習え

672 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 21:46:12 ]
>>667-668
もっとやさしく!!

>>669
a + b; b + c; c + d; ... はい1行wwwwwとかは禁止なんです

>>670
もっとやらしく!!



673 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 22:03:30 ]
>>666
では、とっておきの電卓プログラムを紹介しようか。
C++で書くと、何十ステップも必要だろう。

while(<>){print eval($_)}

674 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 22:23:07 ]
>>673
カレントディレクトリ以下のファイルがすべて消えました!><

675 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 22:43:53 ]
>>672
きもい

676 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 22:50:56 ]
それも計算によって実現してるからな

677 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 22:55:32 ]
>>674がマジなのか気になる。
>>673をしたらキーボードからどんな文も実行できてしまうよな?
>>674を書いて実行してキーボード触らずにマウスで閉じたら何も起きないよな?

恐怖体験アンビリーバブー

678 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 22:56:20 ]
ちょっと安価ミスしたが気にしないでくれorz

679 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 23:18:11 ]
1行で書けるかれしれんが、書く人の労力は20行だよ。

680 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 23:30:26 ]
でも短く書く技術は知っておきたいかも。
サブルーチンは、多少汚くても短くまとめたいし。
なんか良いサイト無い?

681 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 23:31:39 ]
結局、正規表現アクロバットきぼんってこと何でしょw

682 名前:クロニクル ◆ob60wHXQlc [2007/05/20(日) 23:32:46 ]
VISTAでACTIVE PERLをインストールしたいんですが、

Build 820 setup

CustomsetUP のところでInnstlationErroが出るんです。
初心者なのでわからないことがたくさんあります。
以前XPで何度かインストールしたのですが、VISTAになったとたんできなくて
苦労しております。どうかご教授お願いいたします。





683 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 23:34:48 ]
>>680
一子相伝も特殊技術だから。

684 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 23:45:25 ]
正規表現使ってアクロバットするのと、正規表現使わずに少し長いの書くのって、
正規表現使ったほうが早いとかある?

685 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 23:48:10 ]
そんなの場合によるとしか言いようがないだろ。

686 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 23:51:35 ]
>>680
このスレの前の方だけでもいくつかあると思うよ。
過去ログ辿ればもっとあるし。

687 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 00:12:00 ]
結城浩の『Perlクイズ』の過去ログ漁ってみるとか
(結城さんではなく回答者が時々アクロバティック)

688 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 15:57:04 ]
>>667のコメントだけで、後はスルーすれば良かったのにな

689 名前: [2007/05/21(月) 16:50:18 ]
CGIを自由に使えるようになりたくて独学で勉強しようとしたのですがCGIはPERL
記述?だからと思いPERLの詳しくなればわかると思いこの板にきました。
PERLに強くなるにはなにを学べばいいですか?ラクダ本というのがいいとどっかで
見たのですが間違いないですか?
そもそもCGIを自由に使えるようになるのはPERLを詳しくなっても意味ないですか?
CGIを自由に扱えるようになりたいので勉強の仕方わかる方お願いします。

690 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 16:54:26 ]
日本語がお上手ですね!

691 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 16:57:15 ]
>>1
> CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
> CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
> (WEBプログラミング板 pc8.2ch.net/php/ )

692 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 18:50:54 ]
>>691
向こうでも相手にされていない件についてw



693 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:01:22 ]
>689
かわいそうだからマヂレスしてあげるよ

勉強しなほうが身のため

694 名前:8 [2007/05/21(月) 19:01:30 ]
気長に待ちますよ^^

695 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:01:48 ]
相手にできる最低レベルってのはあるからな

696 名前:8 [2007/05/21(月) 19:02:41 ]
勉強しなほうが身のため
なぜ!?



697 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:03:45 ]
日本語でおk

698 名前:8 [2007/05/21(月) 19:07:37 ]
相手にできる最低レベルってのはあるからな
悲しいこと言うなぁ・・

699 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:08:32 ]
しゃぶれよ

700 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:11:06 ]
とりあえず句読点を勉強しる!

701 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:37:26 ]
こういう低レベルな質問はwebprogでやれよ

702 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:39:59 ]
お前が >>8 氏でないことだけは確かだ。名前欄の詐称を止めろ
CGI を覚えるより何より、ここの使い方をまず真鍋



703 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 19:50:23 ]
そして>699

704 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 21:19:43 ]
>>689
マジレスするのもどうかと思うが、
CGIを勉強したいならラクダ本よりネズミ本がオヌヌメ。
Perlをきちんと習得したいなら、ラクダ本よりリャマ本をまず嫁。
リャマ→ラクダ→ネズミの順で読むといい。
後はWebProg板逝け。

705 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 21:23:45 ]
逝く前にしゃぶれよ

706 名前:8 [2007/05/21(月) 21:24:52 ]
ここは恐いインターネッツですね

707 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 21:38:57 ]
リャマの次にラクダ読んだら死ぬって

タダで読めるPerl本
ttp://www.perl.org/books/library.html
ネズミ(初版)
ttp://www.oreilly.com/openbook/cgi/

ただリャマだけは小遣い溜めてでも買うべきだと思うんです

708 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 23:06:21 ]
個人的にはリャマの次にCookbookでもいいと思う。
ラクダも読み物として面白いけど、Cookbookのほうが実践的なテクニックを身に付けられるんでないかな。

709 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 23:57:50 ]
CookbookもいいけどPBPも読んだほうがいいと思う
なんつーか、その、K○NTクローンが増えても困るっつーか

710 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 00:20:38 ]
中途半端な伏字を使うやつは大抵頭が悪い

711 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 00:38:13 ]
やっぱ王道は
○ャ○から入って、○○○と○○○○○○○○を併用さ。
ラクダ?○○○○○○c で十分



…中途半端じゃない伏せ字も頭悪い。

712 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 00:52:26 ]
Perl Hacksでハァハァする



713 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 00:56:24 ]
>>711
> ○ャ○から入って、○○○と○○○○○○○○を併用さ。
ジャバ、コボル、N88BASIC?

> ラクダ?○○○○○○c で十分
わがんね。

本題のほうは「なんでバレバレの伏せ字を使う人がいるのか」が昔から不思議。

714 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 01:04:42 ]
perldoc

715 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 01:08:17 ]
>>713
あえて理由付けするなら、検索に引っかからないため。
まぁ、やってる方の心理としては○○だと思うがw

716 名前:713 mailto:sage [2007/05/22(火) 01:20:11 ]
>>714
ボケが思いつかなくて「わがんね」でした。手間をかけさせてごめんなさい。

>>715
うーん、検索ですか。なるほど。
でも、△△△にする○○の大半は××なだけなんでしょうね。

717 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 01:51:29 ]
○○○○、○○○○○○○○。

718 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 02:37:09 ]
はじめまして。最近Perlを使い始めた初心者です。

useを使用し、下位ディレクトリにあるモジュールを読み込むには

use ディレクトリ名::モジュール名;

なのはどの初級者本にも書いてあるのですが、
上位ディレクトリにあるモジュールの読み込み方が分かりません。
パスはどう書けばよろしいのでしょうか?


719 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 03:48:18 ]
use lib

720 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 07:22:32 ]
>>710
十代後半の女オタクの馴れ合いみたいで気持ち悪いよね。

721 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 08:20:44 ]
○まん○

722 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 13:39:11 ]
○ま○こ



723 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 15:24:14 ]
○まんこ

724 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 15:43:31 ]
8まんこ

725 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 15:58:39 ]
レベルの低い会話はwebprogでやれ

726 名前:デフォルトの名無しさん [2007/05/22(火) 16:30:10 ]
>>719
ありがとうございました。できました。

727 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 18:07:33 ]
>>725
爆笑

728 名前:デフォルトの名無しさん [2007/05/22(火) 18:08:03 ]
cgiでPOSTされたデータを標準入力から一度取得した後
同じプログラム内で再度、標準入力から取得することは可能ですか?

既存のプログラムに、入力チェックを追加したいのですが、2回目はデータが空になります(当たり前?
一応、seekしてみたのですが、うまく戻りそうにありません
バカな質問している気がしていますが、「そんなことできるワケねぇだろ、バカ」でも良いのでアドバイス下さい

729 名前:デフォルトの名無しさん [2007/05/22(火) 18:11:19 ]
ワークの変数にとっといたらいいんじゃないの?

730 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 18:23:30 ]
>>728
>>1

731 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 18:25:33 ]
標準入力がSEEKで戻れたらすごいな
過去に戻れるなんて素敵だぜ

732 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 18:26:16 ]
なるほど、WEBプログラミング板で聞くのが良かった内容でしたか
すみませんでした
そちらで質問してみます



733 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 18:41:44 ]
>>731
このコメントだけで十分な説明になってるな

734 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 19:03:04 ]
CPAN探せばありそうだが普通に変数に入れといたほうが楽だろうな

735 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 20:34:55 ]
リャマ本なんであんなに高いの?

736 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 20:36:07 ]
古本買え

737 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 20:45:58 ]
2版の厚さがちょうどよかったよね(´・ω・)

738 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 21:49:02 ]
-P オプション で使えるCのプリプロセッサですが
起動が多少遅くなるので
別な方法がないか教えてもらえませんか

使用用途としては
下記のようなものです
単にifで分けると モジュール部もすべて読み込むようなので
両方ともないとエラーになりました
evalで囲めばそれっぽくうごきますが
しっくりきません。

#ifdef HOGEHOGE
use HOGEHOGE;
〜〜〜
#else
use HOGEHOGE2;
〜〜〜
#endif


739 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 22:51:27 ]
>>738
UNIVERSAL::require 使えば解決するようなコトじゃないかな?


740 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 22:52:13 ]
質問では、条件で分けたいのはuseだけじゃないっぽいけど:

use $ENV{'HOGEHOGE'};
とかして環境変数HOGEHOGEから渡せないかなと思ったがダメだった。


741 名前:738 mailto:sage [2007/05/22(火) 22:58:53 ]
>>739-740
趣旨的には 740のとおり useだけじゃなくて
汎用的に使える方法がないかと(まぁ -Pで出来るんですがあんまり標準的じゃないような気がして)

目的としては、環境がある程度違っても
ソースを複数管理するのは面倒なので同一ソースで動かしたいです
下記のようなのも出来ると非常に助かります

#ifdef hogehoge
while(1) {
#endif
〜〜〜〜〜
#ifdef hogehoge
}
#endif


742 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 23:39:45 ]
evelじゃちょっと違うよな



743 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 23:41:58 ]
BEGIN { eval }
かと思ったけどなんか違うよね

744 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 00:20:43 ]
よく判らんのだが、
-P 使うからには、pure perl じゃなく C 関係?
それとも pure perl でホスト毎に挙動を変更したいの?

前者だったら、 Inline::C と後述を噛み合わせて…
後者だったら、ベタだけど Sys::Hostname で hostname ゲットして
BEGIN{if ( $hostname ...){}else{} } あたり?
後者なら、もっとべたべたにソース全般で挙動を分けられるし、
実際やってるけど、前者だったらやろうと云う気にもならぬ。
って素人の口出しすまぬ。

745 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 00:29:53 ]
OOで書いて環境依存部分はサブクラスに分けるが良いよ

746 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 00:52:02 ]
俺は環境依存部分は、モジュール化して突っ込んであるなあ
ソコでSys::Hostnameは使っているけど、もっと良い手があれば知りたいものだ

747 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 01:16:42 ]
俺はwindowsローカル時はbatファイルで適当に環境変数設定して
その環境変数によってunix系の時と動作変えてる。

748 名前:738 mailto:sage [2007/05/23(水) 08:38:37 ]
>>744
当面の目標としては
PurePerlでmod_perl2(ModPerl::RegistryPrefork)とFastCGIで
同一ソースを使えるようにしたいと思ってます
FastCGI対応にするためには
読み込みモジュールの差し替え(CGI->CGI::Fast)とループ処理が増えるので
738,741のようなことができないかなと思った次第です、
良い方法がないかなと

749 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 09:35:25 ]
そんな用途かよ
Catalystあたりを参考にしれ

750 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 09:49:31 ]
なるほどFastCGIか。
Rubyだとわりと簡単にFastCGI対応できるみたい。
Perlでも同じようにできないかな?

既存のCGIを変更無しでFastCGIに
ttp://sugi.nemui.org/wiki/%B4%FB%C2%B8%A4%CECGI%A4%F2%CA%D1%B9%B9%CC%B5%A4%B7%A4%C7FastCGI%A4%CB

751 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 09:55:29 ]
てか、CatalystとかCGI::Applicationとかのフレームワーク使えばいいじゃん。

Catalyst::Engine::FastCGI
search.cpan.org/~mramberg/Catalyst-Runtime-5.7007/lib/Catalyst/Engine/FastCGI.pm

CGI::Application::FastCGI
search.cpan.org/~naoya/CGI-Application-FastCGI-0.02/lib/CGI/Application/FastCGI.pm

752 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 12:07:10 ]
>>738がなんでわざわざWebProg板からこっちに着たのかわからない




753 名前:デフォルトの名無しさん [2007/05/23(水) 14:12:31 ]
すみませんが 質問させてください

あるファイル(数万行の数字データ)の上から1行ずつ順番に読み込んで
最終行になるとまた1行目に戻って・・・という作業をしたいのです
途中でプログラムを閉じて再開したときも次の行から開始が可能であれば
もう言うことナシですが,残念ながら自分では何とも出来ず

丸2日間ネット上で調べに調べ

srand();
open(FILE, "data.txt");
rand($.) < 1 and $line = $_ while <FILE>;
close(FILE);
$line =~ s/\n//g;

とランダムで1行読み込む仕様で妥協するのが限界でした
もし上記作業がperlで可能でしたら申し訳ないですが
教えていただけないでしょうか

可能な方いらっしゃいましたら どうかお願いします。

754 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 14:13:46 ]
いつ終わるんだそれは

755 名前:753 mailto:sage [2007/05/23(水) 14:27:55 ]
すみません
イカのような感じで半永久的に作業が続くわけでして・・・^^;

print <<"_HTML_";
Content-type: text/html

<html><head>
<meta http-equiv="refresh" content="5; url=aaa.cgi">

756 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 14:34:48 ]
何行目まで読んだかどこかに書いとけばいいじゃん。

757 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 14:38:03 ]
>>755の「イカ」がどっから出てくるのかがわからん。

とりあえずCGIは置いといて、まずファイルの入力の基本をググって調べればいいんじゃね

758 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 14:38:30 ]
以下、だろ。

759 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 14:47:34 ]
イカ=以下、がわからんじゃなくて
イカ=print <<・・、がどこから出て来たかわからん、ってことだよ

760 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 14:52:37 ]
続きでなんか書こうとしてるんじゃないの?

761 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 14:54:09 ]
>>759
以下のように、が、"<meta http-equiv="refresh" content="5; url=aaa.cgi">" を指してるんじゃないの?
大体、何を言わんとしてるかはわかる

762 名前:753 mailto:sage [2007/05/23(水) 14:56:30 ]
わかんないヤツが説明すると伝わりにくいですね
すみません・・・

えーっと
5秒おきにaaa.cgiにアクセスしてIEの画面に数字を順番に
表示させたいだけなんです

753で書いた方法で $line の数値を表示させるだけと言えば
伝わりますかね・・・





763 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 15:02:20 ]
webprogの所轄だが、行数をどこかに保存すればいいだけだろう?
CookieやURIのクエリ部分だとか、サーバ上のファイルとかメモリとか。

764 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 15:02:57 ]
とりあえずWebProg板いってこいな

765 名前:753 mailto:sage [2007/05/23(水) 15:05:13 ]
板違いでしたか すみません
どっちか悩んだあげくこっちに書いてしまいました

お邪魔しました

766 名前:764 mailto:sage [2007/05/23(水) 15:06:45 ]
大体、数万行のテキストデータだとしてもかなりの容量になるだろ
対象マシンのメモリ可哀想だな。 しかも、IEがそのデータを表示仕切る前に
IE落ちるだろうし、表示仕切る前に5秒経って更新かかるだろうな。
しかも、更新しようにもかなりの負荷がかかってるからモッサリ。

ブラウザクラッシャーでも作ろうとしてるのか?

767 名前:753 mailto:sage [2007/05/23(水) 15:10:09 ]
いえ 表示自体はその数万行のうち上から1行ずつでいいんです
1行目表示して5秒後には2行目・・・みたいな感じで。
順番に表示されるのを見て 手元のデータと比較していくだけの
単調な作業なんです

768 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 15:26:28 ]
表示した行数を覚えておく方法は>>763でほぼ答えが出てるけど、ファイルの指定行を読むところはTie::Fileとか使えば楽だと思うよ。

769 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 15:56:50 ]
ちょっ待って! さっきまで>>753が居た場所がイカ臭い

770 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 16:12:49 ]
753のやりたいことを考えると、サーバ上で処理させず、
数万行のデータを手元に持ってきてjavascriptで順次表示させた方が増しな気がする。
何行目を表示させているかも、少し離して表示させておけば、中断したときには手書きでメモれば十分だろう。
表示開始行数は引数で与えれば再開できるし。

771 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 17:25:55 ]
perlでいいじゃん

772 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 17:34:38 ]
"Black Perl"

BEFOREHAND: close door, each window & exit; wait until time.
open spellbook, study, read (scan, select, tell us);
write it, print the hex while each watches,
reverse its length, write again;
kill spiders, pop them, chop, split, kill them.
unlink arms, shift, wait & listen (listening, wait),
sort the flock (then, warn the "goats" & kill the "sheep");
kill them, dump qualms, shift moralities,
values aside, each one;
die sheep! die to reverse the system
you accept (reject, respect);
next step,
kill the next sacrifice, each sacrifice,
wait, redo ritual until "all the spirits are pleased";
do it ("as they say").
do it(*everyone***must***participate***in***forbidden**s*e*x*).
return last victim; package body;
exit crypt (time, times & "half a time") & close it,
select (quickly) & warn your next victim;
AFTERWORDS: tell nobody.
wait, wait until time;
wait until next year, next decade;
sleep, sleep, die yourself,
die at last
# Larry Wall

これどういう意味?暇だったら訳してくれ



773 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 17:35:38 ]
Webサーバー(Webブラウザ)使うのが必要条件なのかにもよるな。
Excelでも十分かもしれん。

774 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 17:42:02 ]
local環境でいいんなら、1行読んで、25行ぐらい改行してからprintするだけじゃないの?
で、sleep(5)とか

775 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 18:14:28 ]
>>773
excel だけど win は一万行平気で開く?

cat -n hoge.log | more で十分だったりw

776 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 18:26:06 ]
>>772
ラクダ本3版Volume2に訳が出てるお

777 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 18:39:22 ]
>>774
本当はそんな感じ(と、行番号カウンタか)でいいんだと思うよ。
Web鯖に吐かせるべき理由があるんだかどーなんだか。

778 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 18:45:09 ]
webprog板でgrepとmapだとgrepの方が早いという意見があり確認してみました。
for >= grep > mapって感じみたいなのですがなんでmapだけこんなに遅いのでしょう?

■テストコード
use Benchmark qw/cmpthese/;
use strict;
use warnings;
my $LOOP = 100;
my @SEED = ('a'..'z','A'..'Z',0..9);
my @DATA = map {$SEED[int rand @SEED]} 1..10000;
my %TABLE = map {$_=>$SEED[int rand @SEED]} @SEED;
cmpthese($LOOP, {
#非破壊
'map1' => sub {my @hoge = map { $TABLE{$_} } @DATA; 1;},
'grep1' => sub {my @hoge;grep push(@hoge,$TABLE{$_}),@DATA;1;},
'for1' => sub {my @hoge;push(@hoge,$TABLE{$_}) for(@DATA);1;},
#破壊
'map2' => sub {map {$_=$TABLE{$_}} @DATA ;1;},
'grep2' => sub {grep $_=$TABLE{$_},@DATA;1;},
'for2' => sub {$_ = $TABLE{$_} for(@DATA);1;},
});


779 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 18:47:30 ]
■結果 1回目
Rate map1 map2 for1 grep1 grep2 for2
map1 25.8/s -- -14% -32% -33% -66% -69%
map2 30.1/s 17% -- -21% -22% -60% -64%
for1 38.0/s 48% 26% -- -2% -50% -54%
grep1 38.6/s 50% 28% 2% -- -49% -53%
grep2 75.8/s 194% 152% 99% 96% -- -8%
for2 82.6/s 221% 174% 117% 114% 9% --
■結果 2回目
Rate map1 map2 grep1 for1 grep2 for2
map1 24.6/s -- -16% -33% -33% -71% -71%
map2 29.2/s 19% -- -20% -21% -65% -66%
grep1 36.6/s 49% 26% -- -1% -56% -57%
for1 36.9/s 50% 27% 1% -- -56% -57%
grep2 83.3/s 239% 186% 127% 126% -- -3%
for2 85.5/s 248% 193% 133% 132% 3% --
■結果 3回目
Rate map1 map2 grep1 for1 grep2 for2
map1 23.3/s -- -17% -33% -37% -72% -73%
map2 27.9/s 20% -- -20% -25% -66% -67%
grep1 35.0/s 50% 25% -- -6% -57% -59%
for1 37.0/s 59% 33% 6% -- -55% -56%
grep2 82.0/s 252% 193% 134% 121% -- -3%
for2 84.7/s 264% 203% 142% 129% 3% --


780 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 19:28:11 ]
map1が遅いのはでかいリスト返してるから。
一つだけ全く別のことやってりゃそりゃ遅い罠。
map2が遅いのはfor2grep2と違ってブロック評価してるからだと思う。

とりあえず
'map1' => sub { my @hoge; map { push @hoge, $TABLE{$_} } @DATA; 1; },
'map2' => sub { map $_ = $TABLE{$_} , @DATA; 1; },
に書き換えたらグループごとの速度は大差なくなるはず。

関係ないけど最近のPerlのmapは
同じことやるforeachより速くなったりするのでびっくり。
古いバージョンなら戻り値使わない時は絶対forって言えたんだけどな。

781 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 19:30:42 ]
一応貼っておく
Rate grep1 for1 map1 grep2 map2 for2
grep1 19.8/s -- -1% -3% -64% -64% -65%
for1 20.0/s 1% -- -2% -64% -64% -65%
map1 20.4/s 3% 2% -- -63% -63% -64%
grep2 55.2/s 179% 176% 171% -- -1% -3%
map2 55.5/s 180% 177% 172% 1% -- -3%
for2 57.0/s 188% 185% 180% 3% 3% --

782 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 20:02:21 ]
その後の調べで
map2はsub {map {$_=$TABLE{$_};1;} @DATA ;1;}
とすると順位があがりました。余計なメモリコピーが発生してたみたいです。

さらに>>780さんの指摘を受けて
'map1' => sub {my @hoge;map push(@hoge,$TABLE{$_}),@DATA; 1;},
'map2' => sub {map $_=$TABLE{$_},@DATA ;1;},
に変更したところ若干forが優勢っぽいですがほとんど同じ結果になるようになりました。

組み込みの関数なのでperlのバージョンによって変わってくる部分もありそうですね。
テスト環境はperl v5.8.5でした。(書き忘れ)

大変わかりやすい説明ありがとうございました。




783 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 20:05:52 ]
良くわからんがデータベース使え。

784 名前:738 mailto:sage [2007/05/23(水) 21:51:32 ]
>>751
Catalystみてみます、サンクス

785 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 01:12:04 ]
あーの、恐縮ですが質問なんですけど、
Perlでは初めてオブジェクト指向のコードを書いているのですが、
下記のようなコードでアロー演算子と行入力演算子が併用できなくて困っています。
一度他のローカル変数にファイルハンドルを代入してやればうまくいくのですが、
もっとスマートに、オブジェクトが持つファイルハンドルから行入力する方法はあるのでしょうか。

use strict;

sub parse
{
my $this = shift;
my @data = <$this->{fh_lex}>; # 文法エラー
# 下のコードなら成功
# my $fh = $this->{fh_lex};
# my @data = <$fh>;

for (@data) {
;# 省略
}

}

786 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 01:59:16 ]
<>をファイル読み込みとして認識させるには、
括弧の中を $fh のような形をしたスカラ変数にしないとダメだから、
一時的に変数を作るしかないね。

my @data = sub{$_=shift;<$_>}->($this->{fh_lex}); とかw

787 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 02:08:24 ]
ヒント:<()>

788 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 02:09:52 ]
<()> はファイルグロブ。

789 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 02:22:28 ]
<${this->{fh_lex}}>
とかダメ? 試してないけど。

790 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 02:31:13 ]
>>789
ダメだよ。やってみたw

<>を放棄した技だけどw
my @data = readline $$this{fh_lex} ;

791 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 02:37:14 ]
普通に<>の内部関数のreadline使って、
my @data = readline $this->{fh_lex};
でよかろ。

792 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 04:08:38 ]
>>785
別に無理に1行に書かなくても地味に$fhに代入した方がよっぽど明示的で
よいコードに見える。
どうしてもっていうんなら、$thisがオブジェクトならオーバーロードを使ってみては?



793 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 18:39:22 ]
遅レスだが

>>780
search.cpan.org/~nwclark/perl-5.8.8/pod/perl581delta.pod#Miscellaneous_Enhancements
> map in void context is no longer expensive. map is now context aware,
> and will not construct a list if called in void context.

perlstyle でやるなって言われてるのに、悪い癖を直そうとしない子が
あまりに多いから実装側でフォローした、と俺は解釈してる。

794 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 18:48:26 ]
見た目すっきりするからついやっちゃうんだよね・・・

795 名前:デフォルトの名無しさん [2007/05/25(金) 19:11:11 ]
俺すごいだろって思ってついやっちゃうんだよな・・・

796 名前:785 mailto:sage [2007/05/25(金) 22:27:59 ]
>>786-792
みなさんどうもありがとうございます。
やはりPerlとはいえ表記上の制約はあるんですね。
にも関わらず他の方法がいくつもあると言うのはさすがですが。
どれを使おうか迷ったのですが、とりあえず今回は、readlineを使うのが一番綺麗に見えたので、それを使わせてもらおうと思います。
本当に勉強になりました。

797 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 02:42:48 ]
 長文にて失礼します。
 以下の[data.csv]ようなカンマ区切りのデータがあるとします。
 横軸がX座標、縦がY座、各格子の数値がZ座標(標高)を示しています。
 このデータを、[out.csv]のように変換したいのですが、2次元配列でつまずいてしまい、途方に暮れてしまいました。
 どなたかお知恵を授けて下さい。よろしくお願いします。
 あと、入力データのうち行頭が"#"で始まる行は無視する、というのはどうすればできるのでしょうか。合わせてご教授いただけると助かります。よろしくお願いします。

[data.csv]
, 1, 2, 3, 4
5, 12.63 , 33.82 , 31.71 , 29.73
4, 34.75 , 32.14 , 29.31 , 26.70
3, 33.55 , 30.27 , 27.17 , 23.43
2, 31.02 , 29.42 , 26.65 , 23.61
1, 28.00 , 27.04 , 25.39 , 22.60

[out.csv]
X,Y,Z
1,1,28.00
1,2,27.04
1,3,25.39
1,4,22.60
2,1,31.02
2,1,27.04
(中略)
5,3,31.71
5,4,29.73



798 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 03:41:35 ]
>>797
宿題乙^^

799 名前:デフォルトの名無しさん [2007/05/26(土) 04:09:08 ]
>>797
さてコレをどれくらい短くできるだろうか

use strict;
open FILE, "data.csv";
my @data;
my @index;
my @ys;

for my $line (<FILE>) {
chomp $line;
unless (@index) {
@index = split(/\s*,\s*/, $line);
shift @index;
next;
}
my($y, @d) = split(/\s*,\s*/, $line);
push(@ys, $y);
for (my $i=0; $i < @d; $i++) {
$data[ $index[$i] ][ $y ] = $d[$i];
}
}
close FILE;

open FILE, ">out.csv";
for my $x (@index) {
for my $y (@ys) {
print FILE "$x, $y, $data[$x][$y]\n";
}
}

800 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 08:04:48 ]
>>799
use strict;
open FILE, "data.csv";
my(@data, @index, @ys);
while(<FILE>) {
chomp;
my($y, @d) = split /\s*,\s*/;
@index = @d, next unless @index;
push @ys, $y;
$data[ $index[$_] ][$y] = $d[$_] for 0..@d-1;
}
open FILE, ">", "out.csv";
for my $x (sort {$a <=> $b} @index) {
for my $y (sort {$a <=> $b} @ys) {
print FILE "$x, $y, $data[$x][$y]\n";
}
}
close FILE;

801 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 08:26:14 ]
一応質問者の為に一行サービスしといたけど。本嫁本。
こんなの例題に出てくるだろが。

open IN, "data.csv" ;
open OUT, ">", "out.csv" ;
print OUT "X,Y,Z\n" ;
(undef,my @index ) = split /,/, do{ $_ = <IN> ; s/\s+//g ; $_ } ;
for ( reverse (<IN>) ){
 s/\s+//g ;
 next if /^#/ ;
 my ( $index, @dat ) = split /,/ ;
 for my $i ( 0 .. $#dat ){
  print OUT join "," ,$index,$index[$i],$dat[$i] . "\n" ;
 }
}
close IN ;
close OUT ;

802 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 10:48:45 ]
>>799-801
おまいらやさしいな



803 名前:797 mailto:sage [2007/05/26(土) 13:30:30 ]
>>799-801
 皆さん、どうもありがとうございます。
 教えていただいたコードを読んで勉強します。
 ところで、私のような初心者向けの本にはどんなものがありますか?
現在手元には、「Perlの絵本」といわゆる「らくだ本」の2冊がありますが、前者はまったくの初心者向けで今回の質問の答えは見いだせません。
一方、後者は私には取っつきにくくて、ヒントが書いてあるのかも知れませんが、見つけられませんでした。
 なお、Visual BASICとTurbo PASCALはある程度勉強しました。
 近くに大きな本屋がないので、現物を手にとって見比べることができません。アドバイスをいただければ幸いです。よろしくお願いします。


804 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 14:26:34 ]
リャマ本かクックブックあたり嫁

805 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 15:31:12 ]
/(\b\w+)\1/
という正規表現が
hogehogeにマッチして
/(\b\w+\b)\1/
という正規表現が
hoge hogeにマッチしないのは何故なんでしょうか?

806 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 15:36:26 ]
* キャプチャされるのは、正規表現ではなくマッチした文字列
* \b は文字を消費しない。

807 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 16:15:33 ]
>>803
時間をかけて、「らくだ本」じっくりと2回読めばいい。
1回目は、解らない部分には「?」印を付けて、深追いしない。
2回目は、「?」印を付けた部分を重点的に読む。
その過程がなければ、らくだ本を辞書のように使うことはできない。

808 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 17:09:49 ]
リャマ本の第四版まだかなー
本家だと2005年に出てるんだよね
ラクダさんも早く新しいの出して欲しいな

809 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 18:15:30 ]
そういえば新しいの出るね。
"Mastering Perl" By brian d foy
ttp://www.oreilly.com/catalog/9780596527242/

810 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 19:24:22 ]
大変にスマソ
ひょっとして use encoding でコード指定すると \w が日本語(文字)にもマッチする仕様?

811 名前:803 mailto:sage [2007/05/26(土) 20:02:47 ]
>>807
 アドバイス、ありがとうございます。
 昔やった受験勉強と同じことですね。腰を据えて勉強します。

812 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 20:17:05 ]
>>810
perl + 日本語には興味無いんで調べたが、perlunicode にまんま書いてあるぞ。
o Character classes in regular expressions match characters instead
of bytes and match against the character properties specified in
the Unicode properties database. "\w" can be used to match a
Japanese ideograph, for instance.




813 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 20:27:38 ]
>>810
基本的には空白や記号類ではないような文字にマッチする。
通常は全ての言語の文字にマッチするけど、
use locale;すればロカールである程度は制御できるね。

814 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 20:39:14 ]
>>812-813
おお、すまそ。そしてありがd
今更だけど jcode.pl からの乗り換えに躓いてました
精進してきます

815 名前:デフォルトの名無しさん [2007/05/26(土) 21:20:04 ]
懐かしいな jcode.pl ってまだあったんだ

cgiのもなんかライブラリあったな

816 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 21:22:41 ]
cgi-lib.plナツカシス

817 名前:デフォルトの名無しさん [2007/05/26(土) 23:38:11 ]
>>816

ああ、それそれ!
名前忘れる位懐かしいw

818 名前:気まぐれアナスイ mailto:お腹いっぱい@気まぐれアナスイ [2007/05/27(日) 01:28:48 ]
…。perl…。
perl.といえば、perldl-command.が…
!(-_Φ+){yes, So sexy.}


819 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 04:04:33 ]
ログファイルを合成する処理で、困っています。

@log=("1.txt","2.txt","3.txt","4.txt");
foreach $filename(@log)
{
open(LOG,$filename) || &er_("Can't open $filename");
@lines = <LOG>;
close(LOG);
}

@linesの中に、全てのテキスト内容を合成させた物が
入ってほしいのですが、最後に代入した4.txtの内容しか
入ってくれません。なぜでしょうか。

また、foreachで廻すのを条件として、
改造案を指南いただけると嬉しいです。

820 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 04:22:02 ]
@lines = <LOG>;

の部分を

my @tmplines = <LOG>;
push(@lines, @tmplines);

の2行に置き換えてください。
千奈美に最後のやつしか残らないのは、

@lines = <LOG>;

が上書きしてるからです。
だから最後の結果しか残らない。


821 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 06:28:04 ]
>>820
ありがとうございます!できました。

822 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 18:20:34 ]
cpanで
>Are you ready for manual configuration? [yes]
毎回、noを答えるんですけど、これ抑制できないんですか?




823 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 00:37:04 ]
>>822
> Are you ready for manual configuration?
俺は個人macもsolarisもyes選択してカスタマイズしたから、
最初にnoを選んだ時の挙動は分らんが、抑制もくそもこれって
最初の一回きりだろ?俺の環境だと出てこないんだけど。

何か変な事やってないか?

824 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 15:48:16 ]
>>546 の
sub flatten(@) { map { ref $_ eq "ARRAY" ? flatten(@$_) : $_ } @_ }」

flatten(@)は配列以外を引数に取れないということでしょうか?

あと
@deff = grep{ !{map{$_,1}@FileA }->{$_}}@FileB;
のmap{$_,1}@FileAなのですが{$_,1}はどういう式なのでしょうか

825 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 16:55:50 ]
>>824
1) プロトタイプの@は残りの引数をすべてリストとして取り込むという意味。
  (@) にはあまり意味がないんだけど、perlsubでも読んどき。

2) map の引数のBLOCKはリストコンテキストで評価されるから、
  $_, 1 は $_ と 1 からなるリスト。

826 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 10:44:52 ]
はじめまして、 Perl 5.005_03 の世界から来ました。こんにちは。

最近の Perl でコマンドラインオプションの処理をする場合の標準を教えてください。

827 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 11:02:55 ]
>>826
Getopt::StdかGetopt::Longを使うのがいいよ。どっちも標準モジュール。
Getopt::LongはGetopt::Stdの機能も含むからGetopt::Longのほうがおすすめ。

828 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 11:04:23 ]
@_ で済まなかったっけか

829 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 12:00:06 ]
>>828
自分でちまちまとオプション解析するならそれでいいけどな。

830 名前:829 mailto:sage [2007/06/01(金) 12:01:08 ]
いや、そんなことない。だまされるところだった。

831 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 13:21:53 ]
>>827
早速 Getopt::Long 使ってみました。使いやすそうですね。
御回答ありがとうございます。

>>828
すみません、ちょっと私には意味わからなかったのでスルーさせてくださいー。

832 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 16:08:31 ]
>>825
ありがとうございます



833 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 16:39:29 ]
my $text = join '', <>;
$text =~ s/\s*//g;

を1行でする方法ないですか.
1行でなくとも見た目がよければいいです。


あとファイルの最初にmy宣言すると、その後のサブルーチン内でも
使えてしまうのですが、これは何か対策はありますでしょうか

834 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 16:51:36 ]
(my $text = join '', <>) =~ s/\s*//g;
とか出来んわけではないが分けて書いたほうが見た目はよいだろ。

> あとファイルの最初にmy宣言すると、その後のサブルーチン内でも
> 使えてしまうのですが、これは何か対策はありますでしょうか
ファイルスコープのmyはグローバル変数だから、そういうもの。
嫌なら中括弧で囲っとけばいい。

835 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 16:58:41 ]
なるほど、ありがとうございました

836 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 17:06:21 ]
my $text = join '', map {s/\s*//g; $_} (<>);
このぐらいなら、まあいい?

837 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 17:10:06 ]
$/使った方が速いと思うけど、2文にならざるを得ないな。

838 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 17:17:50 ]
my $text = do{ local $/ ; $_ = <> ; s/\s*//g ; $_ } ;
実質4行w

839 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 19:21:13 ]
s/\s*//g, $text.=$_ for <>;

840 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 19:23:33 ]
ああ、my付けなきゃいけないのか
my $text = join "", map { s/\s*//;$_} <>;

841 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 19:43:02 ]
(my $text = do {local $/; <>}) =~ s/\s+//g;


842 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 20:35:25 ]
>>837
pu



843 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 23:04:43 ]
ぶっちゃけ遊びとしても「1行で書く」っていうのは意味ないと思うw

844 名前:デフォルトの名無しさん [2007/06/01(金) 23:14:33 ]
>>826-831

@ARGV を使うだけなのにご苦労様

845 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 23:45:56 ]
>>844
>826 名前:デフォルトの名無しさん:2007/06/01(金) 10:44:52
>はじめまして、 Perl 5.005_03 の世界から来ました。こんにちは。
>
>最近の Perl でコマンドラインオプションの処理をする場合の標準を教えてください。


>コマンドラインオプションの処理をする
>コマンドラインオプションの処理をする
>コマンドラインオプションの処理をする

846 名前:デフォルトの名無しさん mailto:sage [2007/06/02(土) 00:07:52 ]
おまんこライン

847 名前:デフォルトの名無しさん [2007/06/02(土) 01:45:09 ]
>>845

え!?もっと詳しく!!

848 名前:デフォルトの名無しさん mailto:sage [2007/06/02(土) 02:56:27 ]
単純にコマンドライン引数を見たいなら@ARGVを順番に見ていけばいいけど、
>>826は -Rrt -l --color=auto とかのコマンドラインオプションをパースしたいってことだろ。
学習目的ならいざ知らずそんなもんいちいち自前で処理する奴はマゾ。

849 名前:デフォルトの名無しさん mailto:sage [2007/06/02(土) 12:28:03 ]
そうそう、Perl 5.005_03が先端だった頃の、
use Getopt::Stdするだけでプラス0.4秒
という時代とは違うんだから。


850 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 18:25:59 ]
文字列の全角英数→半角変換って
$j =~ tr/0-9a-zA-Z/0-9a-zA-Z/;
じゃダメなん?
5.8.4で文字列はutf-8なんだけど。

851 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 18:42:50 ]
>>850
use utf8 した上でなら、それでいいんじゃね? 確かめてないけど。


852 名前:850 mailto:sage [2007/06/03(日) 19:02:08 ]
>>851
英数以外が化けるんだよなぁ…



853 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 19:13:39 ]
化けてるってのはどうやって確認してるの?

854 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 19:15:52 ]
日本語のマルチバイトはsjis、euc-jp、utf-8(他にもいろいろ)あるわけで、
スクリプトのソースや$jに入っているcharsetが何かがわかんないと答えようがないわな。


855 名前:850 mailto:sage [2007/06/03(日) 19:28:12 ]
853>>
入力と出力をprintして見比べてるけどマズかった?

856 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 19:31:18 ]
それは大いにマズい。
$jの文字コード/UTFフラグの有無で挙動が変わってくる。

857 名前:850 mailto:sage [2007/06/03(日) 19:37:59 ]
>>854
入力、ソースはutf-8(のつもり)。
もしかしたら違うかもしれないから、入力のエンコード方式の調べ方があるなら教えてくれ。

>>856
マズいのか。


858 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 19:49:23 ]
use Devel::Peek;
Dump $j;

859 名前:850 mailto:sage [2007/06/03(日) 20:02:10 ]
>>858
dumpの出力の読み方は?
ググってみたけど、どう読んでいいのかサッパリ。

860 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 20:06:37 ]
なんか要領がつかめないんだけど、
入力ソースはなんなわけ?

861 名前:850 mailto:sage [2007/06/03(日) 20:13:48 ]
>>860
適当なサイトから拾ってきたフィード。

862 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 20:18:46 ]
binmodeでストリームに適当なレイヤをかぶせるか、
Encode::decodeに通して適切にutf-8フラグが立つようにせにゃならん。



863 名前:850 mailto:sage [2007/06/03(日) 22:06:39 ]
>>862
$j = decode('utf-8', $j);
の1行通したらうまくいった。ありがと。

864 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 13:51:27 ]

ねえ。これから態度の悪い質問者には答えない様にしろよ。
付け上がって調子乗ってくるのがオチなんだからさ。

865 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 14:05:21 ]
俺が正規表現でボコボコにしてやんよ
 ∧_∧
 ( ・ω・)=つ≡つ
 (っ ≡つ=つ
 /   ) s/.*/ババババ/g
 ( / ̄∪

866 名前:デフォルトの名無しさん [2007/06/04(月) 14:35:29 ]
>>864
付け上がっているのはどっちですか?
ここは質問箱でしょ?
質問してください、というスレなんでしょ?
質問者あってのスレなんですよ。
そんな逆切れ見たいなことを言っていないで、
質問してもらったら「質問してくださってありがとう」くらい言ったらどうですか!

867 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 15:48:30 ]
これは酷い釣り糸

868 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 16:27:29 ]
>>866
とっとと質問せんかボケ

869 名前:デフォルトの名無しさん [2007/06/04(月) 17:02:53 ]
>>868
質問があったら質問しますよ。
自分の至らなさを指摘されたからって、急に喧嘩腰にならないでください。
頭の悪い人はいちいち無駄な書き込みをしなくていいです。

870 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 17:07:09 ]
>>866
何が質問者あってだよ。回答者があってだろ。
回答者が居ないと何も出来ない癖に。
>>1 にも書いてあるけどここは "Perlの奥深さについて皆で語り合い、追求する"スレ。
低レベルな質問と会話はwebprog板でお願いします。

871 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 17:14:03 ]
>>869
無いんなら今すぐ作れや
俺は無職で一日中暇なんじゃアホ

872 名前:デフォルトの名無しさん [2007/06/04(月) 17:15:39 ]
>>1 にも書いてあるけど」などという書き出しで
あたかも「みんなの意見」であるように強調しておきながら、
結局はラスト1行で単なる頭の悪い煽り屋さんであることをばらしてしまっていますね。

何だかんだいいつつ、自分の「低レベルな会話」は全面的に許してしまっている時点で、
説得力はゼロですね。修行を積んで出直しましょう。



873 名前:デフォルトの名無しさん [2007/06/04(月) 17:19:05 ]
>>871
暇なら自分で質問を作って自分で回答していればいいじゃないですか。
内容によっては決して無意味ではありませんよ。
高度な質問と高度な回答をセットで提供するぶんには、結構喜ばれると思います。

とはいえ、無職の能無しがそういう問答を自演するのは難しいでしょうが…。

874 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 17:21:42 ]

皆の意見として言ったつもりは無いな。建前のような物。
ついでに俺は許してないよ? WebProgに案内してるだけ。
お前も個人叩きをするタダの頭の悪い煽り屋にしか
見えないんだが、本文に対する反論は結局ナシなのかな?

875 名前:デフォルトの名無しさん [2007/06/04(月) 17:28:38 ]
>>874
なるほど、自分で自分を許していないのですね。
ではあなたが黙れば解決です。あなたにできる最大の「低レベルな会話の排除」ですね!

あと、「本文」というのは面白い言い方だと思います。
相手に突っ込まれて、いかに馬鹿なことを言っていたかが自覚できた途端に
そこを蜥蜴の尻尾みたいに切り捨てて、「ノーダメージだよーん」ということにするのですね。

876 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 17:34:27 ]
どうでもいい議論はよそでやれよ。

877 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 17:40:23 ]
定期的に沸いてる奴だろw
ほっとけ

878 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 17:53:57 ]
>>875
んーそうじゃないな。あくまでwebprog板でやれと希望してるだけだ。
本文って言い方そんなに面白いかな? お前に言われた事は自覚した、
とする。その次の段階の話だ。その次の話が出来なければただの
煽り合いで終わってしまうだろう? 後俺は120%黙る気は無いので宜しく。

879 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 17:55:19 ]
>>864-878
お前らまとめて詞ね

880 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:01:04 ]
>>878
低レベルな質問と会話はwebprog板でお願いします。

881 名前:デフォルトの名無しさん [2007/06/04(月) 18:07:51 ]
まぁ、こんなもんでしょう。
「ここは "Perlの奥深さについて皆で語り合い、追求する"スレ」であるという理由で
「低レベルな質問と会話はwebprog板でお願い」していた人間も、
つまらないプライドをちょっと傷つけられたら、Perlの奥深さとまるで関係のない低レベルな会話だと自覚しつつも
「120%黙る気は無い」とまで言い切ってしまうのですよ。

俺はやっていいけどお前はダメ、の精神で物事を動かせると思ってるボクちゃんってこんな感じなんです。

882 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:14:12 ]
スーパーキチガイタイム



883 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:14:54 ]

なんか、ここぞとばかりに言い負かそうとしてるが、それも違う。
俺は毎回このスレで変な奴が出る度に相手してやってるし、
俺自身もwebprogに行く気なんかハナから無い訳で。本音と建前ってやつだな。
ついでに言うとさっさと僕の"本文"に反論してくれませんか。

884 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:17:40 ]
webprog板じゃなくてもいいから議論なら他スレでやれよ

885 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:18:35 ]
>>883
相手すんないっとるんじゃボケ。

886 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:34:14 ]
> 俺は毎回このスレで変な奴が出る度に相手してやってるし、

やめてください。

887 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:43:06 ]
>>883
> 俺は毎回このスレで変な奴が出る度に相手してやってるし、

かんべんして(><;)

888 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 19:08:39 ]
これだな。
ttp://www.so-net.ne.jp/vivre/kokoro/psyqa1087.html

889 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 19:33:07 ]
自分が一番変な奴だという自覚が無いんだなw

こんだけ嫌われまくってもきづかないほうに賭ける

890 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 20:04:26 ]
殆ど一人でやってるように見えるんだけど。

891 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 20:18:16 ]
>>890
ということにしたいわけですね。


892 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 20:22:43 ]
バレたか・・・



893 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 21:33:09 ]
バロスw

894 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 21:50:35 ]
自演荒らしのImageMagick君ってこれと同一人物っぽいなw
www.gac.jp/article/index.php?stats=question&category=12&id=20208&command=msg
2chなんかに来ずにここで教えてクン続けてればよかったのに

895 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 21:59:04 ]
さすがにそこまでストーキングっぽいことしなくてもいいのに・・・

896 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 22:45:50 ]
>>894
どっちもImage-Magi'c'になっててワラタ
借りてる鯖はlolipopかな?

897 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 23:15:20 ]
質問します!

open FH,"/hoge/hoge.txt" #hoge.txtを開く
while (<FH>) { #FHファイルを行単位で読み込んでいく
   $Str = $_; #変数Strにデフォルトで入力やパターンマッチになる特殊変数を代入
if( $Str =~ /__\w+__/g ){ #@???
if( $Str =~ /__KEYWORD__/ ){ #A???
$Str =~ s/__KEYWORD__/KEY/; #__KEYWORD__をKEYに置換する
}
}
print $str;
}
close FH;

コメントの部分の@とAの説明がうまくできません。
@は=~の部分がわからず、Aは/と/で挟まなくて__KEYWORD__だけでも
同じ結果が返ってくるのではないかと思って悩んでいます。
よろしかった教えて頂けないでしょうか?

898 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 23:24:58 ]
%hoge;

$age = {%hoge};

というコードがあった場合、最後の代入で行われているのは
無名ハッシュコンストラクタの中でハッシュを評価することで、ハッシュのキーと値
からなるリストが生成され、それらを要素とする無名ハッシュが生成されて、そのリファレンスが
$ageに代入される。つまり%hogeのコピーのリファレンスを代入しているという考えでいいんでしょうか?

899 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 23:46:46 ]
>>897
Perl 正規表現でググればウンザリするほど答えが見つかると思います

>>898
そうです

900 名前:デフォルトの名無しさん [2007/06/04(月) 23:47:18 ]
なるほど、自分で自分を許していないのですね。
ではあなたが黙れば解決です。あなたにできる最大の「低レベルな会話の排除」ですね!

あと、「本文」というのは面白い言い方だと思います。
相手に突っ込まれて、いかに馬鹿なことを言っていたかが自覚できた途端に
そこを蜥蜴の尻尾みたいに切り捨てて、「ノーダメージだよーん」ということにするのですね。


901 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 00:05:57 ]
>>897
なんかすごい無駄だらけなソースだなあ・・・

902 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 00:31:50 ]
ノーダメージだよーん



903 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 00:33:23 ]
>>900
なんかすごい無駄だらけな文だなあ・・・


904 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 00:42:53 ]
なんかすごい無駄だらけなスレだなあ・・・

905 名前:デフォルトの名無しさん [2007/06/05(火) 00:48:01 ]
粘着荒らし酷いな

906 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 00:52:00 ]
粘着した方が勝ち!

907 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 01:14:38 ]
ノーダメージだよーん

908 名前:デフォルトの名無しさん [2007/06/05(火) 01:34:33 ]
荒らしはやめてー><

909 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 04:03:09 ]
変な奴が現れたら一人も漏らさず全部相手するように
それがこのスレのお約束

910 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 09:34:09 ]
>>909
お前、もう帰っていいぞ。

911 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 10:21:08 ]
次スレのテンプレのことについて、次の提案があるのだが、どうだろうか?

1.過去スレを入れるのはやめる。(前スレだけがあればよいと思う)
2.「エラーなどの問題への対処の相談には、問題が再現する完全かつ最短のソースを
  作成して下さい。作成する過程で問題が解決する場合も多いです。」
との注意書きを >>1 に入れる。
(質問者が必要な情報を小出しにするのを防ぐため)
3.>>10をテンプレを入れる(但し、内容は、以下のように少し変更する)。
---------------------------------------------------------
#  【Perl 日本語処理の基礎の基礎】
# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。
# 入出力ともシフトJIS形式のファイルまたはDOS窓を想定しています。
# まず、以下の行を先頭に入れて下さい。
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
# 次に、あなたが実行したい処理の内容を入れて下さい。
print "SJISには、「十表貼申予暴」のようなダメ文字がある。\n";
sleep(1);
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。


912 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 11:44:29 ]
あれ?過去スレ保管所みたいなのなかったっけ?



913 名前:デフォルトの名無しさん [2007/06/06(水) 12:20:20 ]
ttp://namahage.dip.jp/blog/archive/2007/06/06/98399.aspx






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

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

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