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

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2008/02/25(月) 19:25:51ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

お勧めサイトは >2 以降

前スレ http://pc11.2ch.net/test/read.cgi/php/1189939783/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0896nobodyさん2008/07/22(火) 19:00:27ID:???
あとおまえら、perlのIDE何使ってるのか教えてよ。

ttteditみたいのがいいんだけど。

たとえばforeachって選ぶと、自動で

foreach 変数 リスト {

}

ってテンプレが出てくるようなのがいい。
0897nobodyさん2008/07/22(火) 19:08:48ID:???
>>894
そんなもんで混乱するなよw
0898nobodyさん2008/07/22(火) 19:12:00ID:???
あとperlって音出してほしいよね。
ファイルのオープンに成功した時とか、

「ファイル オープン!」
「ギュイイイン」

みたいな。
0899nobodyさん2008/07/22(火) 20:54:22ID:???
出るよ
0900nobodyさん2008/07/22(火) 20:54:33ID:???
データベース接続!
ガショォォォォオオオン!
09018842008/07/22(火) 21:30:20ID:???
>>885
注意が足りなかった点、謝罪するとともに、説明しなおす試みです。

この場合、元のパターンを真偽反転させると分かりやすいかもです。
文字クラス [.-z] は、 [a-zA-Z0-9./] よりも広い範囲を指している点をご理解いただきたい。
つまり s/[.-z]/./g の後でも、[a-zA-Z0-9./] 以外の文字が一部残ってしまう可能性があるわけです。

併せて、ちったあ試してみてくれよ、とお願いしてみます。
>>884 にテストの例も挙げています、ってーか自分の至れり尽くせりっぷりに泣けてきた。
0902nobodyさん2008/07/23(水) 02:20:55ID:???
>>896
秀丸+マクロでおk
0903nobodyさん2008/07/23(水) 07:57:47ID:???
初心者スレで無ければほっとくんだが…
>>892
python ですら実装してしまった三項演算子にケチを付けてどうする。
>>894
\a はアラームじゃねえか? \A だろ?しかも \A と ^ は挙動が違うし。
>>895
perl5.10 にしろ。指定が無い場合は勝手に文字列か数値か決めてソート
してくれるらしい。
0904nobodyさん2008/07/23(水) 08:56:46ID:???
>>903
本当?

% perl --version

This is perl, v5.10.0 built for i486-linux-gnu-thread-multi

Copyright 1987-2007, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

% perl -e 'print join(",", sort 1,2,10,5), "\n"'
1,10,2,5
0905nobodyさん2008/07/23(水) 10:47:15ID:???
おもいっくそ文字列じゃないw
0906nobodyさん2008/07/23(水) 12:14:10ID:???
>>896
Eclipse
0907nobodyさん2008/07/23(水) 21:52:41ID:???
>>906 糞重い
0908nobodyさん2008/07/23(水) 22:01:45ID:???
Open Perl IDEはどう?

Open Perl IDE
http://sourceforge.net/projects/open-perl-ide
0909nobodyさん2008/07/23(水) 23:15:34ID:???
いや、「どう?」とかじゃなくて、
おまえらが実際に使っていて、そして
満足しているものを教えて欲しいの。
0910nobodyさん2008/07/23(水) 23:17:21ID:???
漢は黙ってvimを使う
0911nobodyさん2008/07/24(木) 01:54:37ID:???
自分がイメージしてるのわぁ〜

メニューに、ループ、ってのがあって、
そのループってのをクリックすると、
forとかwhileとかforeachとかが出てきて、
そのなかで例えばforeachを選ぶと、自動で

foreach 変数 リスト {

}

とかテンプレみたいに出てきて、あとは
その中の処理を書いていく、っていう。

ようはVBみたいなのが欲しいんだけど、
そういうのってある?
0912nobodyさん2008/07/24(木) 02:06:09ID:???
エディタのマクロか、それこそコピペで済むようなことじゃないかそれ?
0913nobodyさん2008/07/24(木) 02:26:23ID:???
>>912
さいしょっから、そういう風になってないといやなんだよ!
0914nobodyさん2008/07/24(木) 02:27:08ID:???
さて、別の質問です。

パッケージと、
モジュールと、
ライブラリは
どう違うの?
0915nobodyさん2008/07/24(木) 02:29:34ID:???
それとまた別の質問です。

参考書を読んでいたら、
シフトJISでは、
/(全角のスラッシュ)や、
・(なかぐろてん)や、
タ(はんかくのた)
などを返還しようとすると、
エラーになる、と書いてあるのですが、
その理由として、上記の文字をアスキーコードで
あらわすと、2バイト目が、5Eになっていて、この5Eというのは
^(ハット)のことを表すので、どうやらそれが原因らしいと。

しかし、EUCで書けばこの問題は回避できると。
このように書いてあるのですが、これであってますか?
0916nobodyさん2008/07/24(木) 03:41:54ID:???
あっていないと疑う理由は何だ?
0917nobodyさん2008/07/24(木) 07:21:59ID:???
自分で試す前に、あってることが確認できてないといやなんだよ。
0918nobodyさん2008/07/24(木) 13:08:24ID:???
>>913
マクロの方が柔軟に変更できていいだろ
0919nobodyさん2008/07/24(木) 16:47:52ID:???
もうね、クリックとか抜かしてる時点でうんこ
0920nobodyさん2008/07/24(木) 20:59:14ID:???
パッケージは、名前空間にクラスやサブルーチン、変数を縛る機構のこと。
モジュールは、クラスや、メソッド、サブルーチンを一塊にして、再利用しやすくしたもの。
ライブラリは、モジュールを集めたもの。集積した場所。Perlでは曖昧な概念になってる。

適当に検索したが、この辺でも読んどけ。
http://www.rfs.jp/sb/perl/04/01.html

あと、クリックとか抜かしてる時点でうんこ
0921nobodyさん2008/07/24(木) 21:57:32ID:???
zshやvim7の補完機能は便利すぎてコマンドやモジュール名、メソッド名が憶えられなくなるよ
あと、クリックとか抜かしてる時点でうんこ
0922nobodyさん2008/07/24(木) 22:37:43ID:???
ちゃんと読んで無いけどクリックとか抜かしてる時点でうんこ
0923nobodyさん2008/07/25(金) 00:30:17ID:???
>>920
糞サイトに直リンするなんて、
クリックと抜かしてるうんこ
0924nobodyさん2008/07/25(金) 01:48:34ID:???
なんだこの流れ
クリックうんこ
0925nobodyさん2008/07/25(金) 11:10:09ID:???
なにこの流れ?
とりあえず、クリんこ
0926nobodyさん2008/07/25(金) 11:37:17ID:???
なにこの流れ?
クリックして脱がせてる時点でうんこ
0927nobodyさん2008/07/25(金) 13:18:17ID:???
クリックしてうんこを流せ
0928nobodyさん2008/07/25(金) 13:42:17ID:???
うんこをクリックしろ
0929nobodyさん2008/07/25(金) 19:29:09ID:???
とりあえずまったり質問を待とうぜ
クリックうんこ
0930nobodyさん2008/07/28(月) 12:23:50ID:???
コマンドラインからperlスクリプトを実行しています。
同じ処理を何度も繰り返すのですが、過剰に走らせるとシステムが落ちてしまうので
1回の処理につき10秒間sleepさせています。
そのスリープを目に見える形で表してみようと一つ処理が終わるごとに以下のようにしてみました。

print "sleep";
foreach(0 .. 10){
print '.';
sleep(1);
}
print "\n";

1秒ごとにピリオドがprintされることを期待してたのですが、10秒後に
「sleep..........」
とまとめて出力されます。
なぜなのでしょうか?

0931nobodyさん2008/07/28(月) 12:27:42ID:???
>>930
典型的なバッファリング問題ですな。$|について調べてみんさい。
0932nobodyさん2008/07/28(月) 13:30:26ID:???
調べてっていわれても$|じゃ検索できんだろ。
頭悪いヤツは消えな。
0933nobodyさん2008/07/28(月) 13:38:19ID:IfOXe7Fq
perl バッファリング

でググれカス
0934nobodyさん2008/07/28(月) 14:49:30ID:???
>>930
>>864読んで見て。
09359302008/07/28(月) 18:42:39ID:???
$| = 1
とやったら期待通り動きました。

>>931,932,933,934
どうもありがとうございました。
0936nobodyさん2008/07/28(月) 22:19:52ID:???
>>932
Perlって検索できない用語多いよね。
6,000ページのマニュアルを
「全ページ」
暗記して使うようなことが期待されていたのだろうか>設計当時
0937nobodyさん2008/07/28(月) 23:04:53ID:???
検索できない用語って例えば?
0938nobodyさん2008/07/28(月) 23:55:13ID:???
やっぱ特殊変数じゃね?perldocで探せるしそれぞれ名前が付いてて検索も出来るんだけどな
っつってもその名前覚えてなきゃ同じだけど
0939nobodyさん2008/07/29(火) 00:37:41ID:???
正規表現の論理積って、表現できませんか?
論理和ができて、なぜ論理積ができないのか・・・うーん
0940nobodyさん2008/07/29(火) 00:50:19ID:???
>>938
なにげにちょこちょこと12年間ほとんど毎日のように使っているが、いまだに検索できんよ、俺は。
0941nobodyさん2008/07/29(火) 01:01:06ID:???
>>940
それはやっぱり名前をおぼえていないから検索できないってこと?
0942nobodyさん2008/07/29(火) 01:01:40ID:???
perldocっていうのがPerlのマニュアルなの?
それはWEBのどこで読めるの?
0943nobodyさん2008/07/29(火) 03:19:51ID:???
Windows
スタート→プログラム→ActivePerl 5.x.x build xxx→Documentation
コマンドライン→perldoc

Web
http://perldoc.perl.org/
と >>2
0944nobodyさん2008/07/29(火) 14:30:05ID:fy3kWC2s
質問 ノ

オープンしたソケットにノンブロッキングモードで connect した時、
“Connection refused”を検出するにはどうしたらいいですか?
0945nobodyさん2008/07/29(火) 15:08:40ID:i5c/JUZY
noopが帰ってくるかどうか
0946nobodyさん2008/07/30(水) 15:01:51ID:d+B9EpcH
その noop というのはどうしたら得られますか?
0947nobodyさん2008/07/30(水) 15:56:41ID:8tDIA2ts
ここでいいのかわかりませんが、スレ違いなら誘導ください。
Apache2.0+ActivePerl588の環境です。
これをIIS5.0で運用するかも的な話が出てきまして、IISで動作をテストしています。
Apacheでは、warn "hoge=$hoge"で、Apacheのエラーログにワーニング情報を出力していましたが、
IISではwarnによる結果が表示されません。
IISでは表示できないのでしょうか?あるいは設定次第で表示されたりします?
何か他の方法があれば教えてもらえませんか?
0948nobodyさん2008/07/30(水) 16:08:44ID:???
動作とは全然関係ないけど
普通ウォーニングって言わね?
0949nobodyさん2008/07/30(水) 16:15:21ID:???
タイムアウトの検出なら、selectにタイムアウト設定してループで検出やるんじゃないの?
どんな設計してるのか知らないけど。
0950nobodyさん2008/07/30(水) 16:16:16ID:???
>>949は944宛て
0951nobodyさん2008/07/30(水) 16:38:08ID:???
>>944
connect(2)のEINPROGRESSの説明をよく読め。

EINPROGRESS
ソケットが非停止 (non-blocking) に設定されていて、接続をすぐに完了することができない。
  その場合、 select(2) や poll(2) を使ってそのソケットが書き込み可能になるのを待つことで、
  接続の完了を知ることができる。 select(2) で書き込み可能になった後に、 getsockopt(2) を
  使って SOL_SOCKET レベルで SO_ERROR オプションを読み出すことにより、 connect() が
  成功したか、失敗したかを判断できる。成功の場合 SO_ERROR が 0 であり、失敗の場合
  SO_ERROR がここのリストにあるいずれかのエラーコードであり、それにより失敗の原因が
  分かる。
09529442008/07/30(水) 18:06:58ID:d+B9EpcH
>>951
でwwwけwwwたwwwww

そのとてつもなく親切なmanは一体どこのww
JMの成果物かしら?
うちのmanはそんな丁寧に書いてないですw

ググったら POSIX を適切に use するようにしておけばコードに対応するエラーメッセージが得られる事も分かりました
果てしなくありがとう♪


>>949-950
うん。
タイムアウト付きでselectしてconnect自体は完了してもconnectに成功したかどうかを調べる方法を知らなかったんだ
0953nobodyさん2008/07/30(水) 18:10:55ID:???
>>952
linuxの日本語マニュアルだからたぶんJMだね
0954nobodyさん2008/07/30(水) 18:42:46ID:???
なんという質問の後出し。
0955nobodyさん2008/07/31(木) 01:58:02ID:oOtEPfmn
mod_perlについて質問させてください。
debian Etch、Perl5.8.8 mod_perl2.0です。
初めてmod_perlを試してみたんですが、CGIの動作がうまくいきません。
レスポンスヘッダを出力して欲しくないのに出力されてしまい、
しかもContent-typeがtext/plainになっています。
.htaccessで下記のように設定しています。

SetHandler perl-script
PerlResponseHandler ModPerl::RegistryPrefork
PerlSendHeader Off
Options +ExecCGI

通常のCGIとして正しく動いていて、mod_perlにしてもヘッダが
オカシイ以外は正しく動いている風です。

何かアドバイスをお願いします!
0956nobodyさん2008/07/31(木) 16:52:57ID:???
mod_perl2でファイルが開けません。
エラーログ見ると、
Permission denied
とあります。普通のCGIだとファイルが開けるのにmod_perl2だと開けないというのは
何か特別な作法のようなものがあるのでしょうか。
超困っているのでお助けを・・・
0957nobodyさん2008/07/31(木) 23:29:50ID:???
>>956
mod_perl のプロセスオーナと CGI (の Perl スクリプト実行の際に呼ばれる perl) のプロセスオーナが異なっているからでしょう。たぶんね。
09589552008/08/01(金) 00:03:22ID:???
なんか色々勘違いしてました。PerlSendHeaderはonが通常動作なんですね。
ステータスコードを自分で吐きたいときもあるんで、と思ったんですが、
別にONで構わないんですね。ただ、OFFにしてヘッダを頭から出力しても
うまくいかないのはよく分からず。

>>956
カレントディレクトリの食い違いじゃないですよね。定番なのに僕は嵌りました。
ユーザー違いはsuExec。whoamiで確認。昨日かじった程度の知識です。
0959nobodyさん2008/08/05(火) 02:44:01ID:dDXLNQi4
Basic認証なんだけど、.htpasswdファイルってどのくらいまでパスワード登録できるのかしら?
例えば1万件とか、どうでしょう?
0960nobodyさん2008/08/05(火) 08:41:47ID:???
>>959
スレチだけどいいや。
1万件なら独自に認証システム作った方が良いと思う。
0961nobodyさん2008/08/05(火) 09:13:10ID:???
>>959
できるけど普通はやらない。
09629592008/08/05(火) 09:13:45ID:dDXLNQi4
いや、Perlで認証システム作っているんだけど、
どっちみちBasic認証だと.htpasswd使わないとダメでしょ?
0963nobodyさん2008/08/05(火) 10:31:58ID:???
日本語で
0964nobodyさん2008/08/05(火) 12:53:10ID:????2BP(1)
自分の知ってる限り普通のテキスト形式の.htpasswdだと
766550件ってのが一番多いが問題なく動いてる。

せめてDBMかSQLiteかmySQLあたりにしたほうがいいかなとは思う


0965nobodyさん2008/08/05(火) 13:06:09ID:???
mod_authn_dbmとかあるからな。ぜんぜんperl関係ないけど
0966nobodyさん2008/08/05(火) 14:17:26ID:???
766550件もどうやって管理してるの?
0967nobodyさん2008/08/05(火) 14:52:27ID:???
同時アクセスが少ないうちはいけるだろうな
09689592008/08/05(火) 16:22:30ID:???
いろいろ、参考になりました。どうもです。

766550件もあると、MySql使ってても、どうなんでしょう。うまくいくのかしら。
0969nobodyさん2008/08/05(火) 16:56:41ID:???
会員管理するシステムはある。DBはsybase。

0970nobodyさん2008/08/05(火) 17:02:04ID:???
MySQL は単純な key <=> value のデータなら 2億8千万件でも動く。
つーか運用してる( Web じゃないけどね。)。データ形式が違えど 76万件
なんて少ない方だと思うが…。
実行速度なんかは index 作製の有無に顕著に依存するがな。

そっちのスレ行ってみれば?
0971nobodyさん2008/08/05(火) 19:53:36ID:???
perlスクリプト上から自身が実行されてるperlランタイムのバージョンを知る方法はないでしょうか?
スクリプトはmod_perl上で動作しています。
0972nobodyさん2008/08/05(火) 20:20:50ID:???
print $];
こういうこと?
09739712008/08/05(火) 20:35:02ID:???
>>972
それですそれです。ありがとうございました。

チラ、5.006002‥‥‥(゚д゚)
0974nobodyさん2008/08/05(火) 20:39:02ID:???
11歳でFカップかよ・・・
0975nobodyさん2008/08/05(火) 20:53:00ID:???
何その入江紗綾
0976jark'use2008/08/05(火) 21:29:26ID:???
perlでz-z.jpのトリップ作るために
http://z-z.jp/のbbs.cgiスクリプトをnull(ry
[禁止用語]で抜こうと思います。
そこでパラメータにいろいろあてはめてますがうまく抜けません。
実際に抜いた人はnullを使ってたみたいです。
あまり詳しくは公開できない情報ですのでヒントを教えてください
0977nobodyさん2008/08/05(火) 22:42:26ID:???
>>976
板違いです。
ネットワーク板へどうぞ。

http://pc11.2ch.net/hack/
0978nobodyさん2008/08/06(水) 02:10:44ID:tTNUWkPT
ファイル名の配列をディレクトリの浅い順に並べるのに

@files = sort {scalar split('/', $a) <=> scalar split('/', $b)} @files;

って書いたら

Use of implicit split to @_ is deprecated

て言われました。どう書くのが今時ですか?
0979nobodyさん2008/08/06(水) 06:35:34ID:???
>>978
splitをscalarで使うと文句を言われるから、tr/\///などで数える方法に切り替える。
あと、シュウォーツ変換を使うと効率が上がる。
0980nobodyさん2008/08/06(水) 12:03:05ID:???
「今時」てえのは知らんが、やり方なんざ山程あるぜ。
@_ のなんたるかを理解してるなら
sort { ( @_ = split m{/}, $a ) <=> ( @_ = split m{/}, $b ) } @files ;
でもいいし、普通に捨て配列作ってもいいしTMTOWTDI。
sort { ( my @A = split m{/}, $a ) <=> ( my @B = split m{/}, $b ) } @files ;
sort { @{[ split m{/}, $a ]} <=> @{[ split m{/}, $b ]} } @files ;
sort { sub { split m{/}, $_[0] }->($a) <=> sub { split m{/}, $_[0] }->($b) } @files ;
0981nobodyさん2008/08/06(水) 12:28:12ID:???
山程あるならたった4例だけじゃなくて山のほうを紹介してよ
0982nobodyさん2008/08/06(水) 12:40:22ID:???
>>981
ググれ
0983nobodyさん2008/08/06(水) 13:43:13ID:???
「今時」を考えると効率を多少犠牲にしても
見やすく書いたほうがいいんじゃないかな
0984nobodyさん2008/08/06(水) 13:55:55ID:+ukCpM4+
今時でもファイルが万あると考慮すべき問題です
DISK I/O のコストを甘く見ないほうがいい
0985nobodyさん2008/08/06(水) 14:03:20ID:???
$a = @aでいいものを$a=scalar @aとか$a= @{[ @a ]}とか$a=sub{@_}->(@a)とかバカだろ。
そういうのはTMTOWTDIとはいわない。
0986nobodyさん2008/08/06(水) 15:45:53ID:???
978〜の流れでDISK IOなんか発生してないし
犠牲にするのが多少じゃないんだったら考慮するのはあたりまえじゃ
0987nobodyさん2008/08/06(水) 17:10:27ID:???
perl -w -le '$a = split m{/}, q{/hoge/foo} ;'
でワーニングが出るって事をすっとばしてる奴がいるなあ。
perl -w -le '$a = @_ = split m{/}, q{/hoge/foo} ;'

元の質問に「コストも計算して」ってのがあったら、
シュワルツかシャチ泳ぎの二択になるんだけど
my %tb ;
sort { ( $tb{$a} ||= split m{/}, $a ) <=> ( $tb{$b} ||= split m{/}, $b ) } @files ;

0988nobodyさん2008/08/06(水) 17:33:19ID:???
979が指摘したtrで数えたほうがいいという件についてはスルーですか?

それにスカラーコンテキストのsplitでなぜ警告が出るか理解してる?
@_を書き換える副作用があるからなんだけど。

シュワルツ使うのもシャチ泳ぎ使うのもいいけど、splitで数えるのは
おすすめできない。
0989nobodyさん2008/08/06(水) 17:53:17ID:???
>>988
>それにスカラーコンテキストのsplitでなぜ警告が出るか理解してる?
だからリストコンテキストにして明示的に@_に代入してんじゃんw
>>985の「$a=@aは、元質問では直接使えない」って指摘しただけだよ。

tr///もs///gも書き換えを行なってるんだから、ここで変な人為ミスが入る可能性
が高いよ。俺は使うし好きにしたらいい。
元質問からsplitで説明しただけだから。
0990nobodyさん2008/08/06(水) 18:06:15ID:???
まあ、元の変数には影響が無いけどワーニングは出るかもってのと
元の変数で書き換えが起こるってのじゃあなあ
 1000万文字の内のTのカウント
とかだと実行速度の問題もあってsplitは使わんが、コメント必須
にしてるなあ、実際先人の件の人為ミスで酷いことになった事あるし
0991nobodyさん2008/08/06(水) 18:12:39ID:???
なんか難しい議論が進んでるけど、俺は動けば何でもいいやw
だって初心者だもん

webprogの目的は、狭義には見て貰う人のユーザービリティーを高めるとか
サイトの付加価値を高めるのが目的なんであって、perlで動いていようが、phpだろうが
利用者には関係のないこと。

ましてや、どう書くかなんて見えないわけで、そりゃ自分の手技向上のためにいろいろ
議論する価値はわかるけど、エンドポイント(サイトの付加価値を高めるなど)を
忘れて、単に技巧にだけ走ってしまうのは好きではないな。

やりたいことが、自分の技量の範囲の中でできれば、それで目的は達成できるじゃん。
0992nobodyさん2008/08/06(水) 18:17:08ID:???
tr/hoge//のように2つ目のところを空にして使う分には置換なんて起きませんが、
コメントしないとわかってもらえないレベルの人がいるんじゃ大変だなぁ。javaとか
使った方がいいんじゃない?
0993nobodyさん2008/08/06(水) 18:24:39ID:???
>>992
知ってるってw
それを知らない人がtr/T/t/しちゃったんだよ
貴方の様に知ってる人間ばかりだったら、コメントしないよ
予期しないバグをなるべく排除したいだけなんだ、共同開発してるから
ワーニングだけで済むならそれにこしたことは無いし
0994nobodyさん2008/08/06(水) 20:01:34ID:???
warningを無視するぐらいなら、最初から付けなければいいのに。
0995nobodyさん2008/08/06(水) 20:06:03ID:???
きがついてるが放置してるか
気が付いてないかはちがうんじゃないかな
レス数が950を超えています。1000を超えると書き込みができなくなります。