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

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

レス数が900を超えています。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/
0830nobodyさん2008/07/16(水) 23:54:09ID:???
>>829
オレらの業界って気軽に試せないのね。

ダムがあったとして
「ここにもし10cmくらいの穴を開けたらどうなるだろう?」

みたいなところなんで、

「いきなり実行する」

っていうのはキチガイ扱いされてクビになるのね。
0831nobodyさん2008/07/17(木) 00:14:28ID:???
>>829が言ってるのはむしろ試作の方だがな。
0832nobodyさん2008/07/17(木) 00:39:50ID:???
自分で試したらわかった

&は消える。

参考書のほうが間違ってたわ。
0833nobodyさん2008/07/17(木) 00:55:40ID:???
敢えて残るってわざわざ記述されてるってことはミスプリントなのか?
出版元に問い合わせてみたら?
0834nobodyさん2008/07/17(木) 02:41:15ID:???
例題が2つあって、
1は消えてるんだけど、
2は残ってるの。
余計混乱するわ。
0835nobodyさん2008/07/17(木) 03:23:04ID:???
そらむしろ必要な情報だろw
0836nobodyさん2008/07/17(木) 05:31:29ID:???
>>832
「普通は」消えるが正解。正規表現内で()でトラップすりゃ残る。
$str = 'a&b&c&d&' ;
split /&/, $str ; # <= 消える。
split /(&)/, $str ; # <= 残る。
split /(?:&)/, $str ; # <= 消える。
なんで態々解説したかと言うと、区切り文字「列」を二つ使う場合に(|)使ってトラップさせて
「消えないんすけど」って質問された事があったから。
split /(&|:)/, 'a&b&c&d:e:f:g' ; # 本来は区切り文字列ね。
0837nobodyさん2008/07/17(木) 05:57:35ID:???
なんかむずかしいことはよくわかんないけど、
こういうつまんないことってフレームワークに全部お任せすればよくね。
0838nobodyさん2008/07/17(木) 06:17:36ID:???
フレームワーク使ったこと無い。
0839nobodyさん2008/07/17(木) 06:48:41ID:???
鼠駆除すんのにナパーム弾を使うのか
0840nobodyさん2008/07/17(木) 09:33:43ID:???
>>839
ナパーム弾どころか地球破壊爆弾を使おうとした例もありますが
08418092008/07/17(木) 09:39:10ID:???
>>811
すまんこすまんこ。さらに遅レスすまんこ

Spreadsheet::WriteExcelでセルの結合に悩んでるヤシは
ttp://www.koders.com/perl/fid09386E1C3E183B96174D224B87445AE647A32B23.aspx
ここを見れ!
例文が載ってたわ。
0842nobodyさん2008/07/17(木) 19:35:57ID:???
>>836
消える場合と消えない場合が
あるってことか。
0843nobodyさん2008/07/17(木) 22:27:51ID:???
gはグローバルの略だとか、
そういうのの、一覧表がのってる
ページをおしえて
0844nobodyさん2008/07/17(木) 22:29:43ID:???
あと無料のIDEも教えてね
0845nobodyさん2008/07/18(金) 01:28:58ID:???
知っているがおまえの態度が(ry
0846nobodyさん2008/07/18(金) 01:41:55ID:???
>>843
作ってダーリン

>>844
好きに調べれダーリン
0847nobodyさん2008/07/18(金) 09:49:50ID:???
もってけ!IDE
0848nobodyさん2008/07/19(土) 10:24:55ID:???
トリップを生成する仕組みの以下の部分の意味が分かりません。
教えてください。

$salt =~ s/[^\.-z]/\./go;
0849nobodyさん2008/07/19(土) 10:33:23ID:???
5本の指が入る Perl hacker に聞けばいいだろ。
0850nobodyさん2008/07/19(土) 18:10:50ID:???
>>848
s///
[A-Z]
と分けて考えないとダメ。
0851nobodyさん2008/07/19(土) 18:39:57ID:???
>>848
$salt =~ # Apply following pattern to $salt
s/ # Start substitution expression
[ # Start difine charactor class
^ # This is negated class
\.-z # Range: "." .. "z" by charactor-code
] # End define charactor class
/ # End pattern and start substitution string
\. # Means "." (NOTE: "\" is meaningless here)
/gox; # Modifiers
# g: global matching
# o: compile the pattern only once
## (x: extended)

>>849
> 5本の指が入る # So loose, and so non-useful for hacking.
0852nobodyさん2008/07/19(土) 20:43:57ID:???
>>850-851

すみません、噛み砕いて教えてください。
0853nobodyさん2008/07/19(土) 20:44:03ID:???
>>851
なにそれ
なんかのソフトでそうやって
自動で解説が出るの?
0854nobodyさん2008/07/19(土) 20:59:09ID:???
>>853
> なんかのソフトでそうやって
> 自動で解説が出るの?

自動で解説できるモジュールあったら便利そうだね!
0855nobodyさん2008/07/19(土) 21:46:02ID:???
>>852
>>851はかみ砕いて解説してあるよ。部品ごとにいちいち説明してあるじゃん。
(教えてくんにまともに教えるの癪だからわざわざ英語にしたんだと思うけど)
辞書引くくらいすれば?
perl 置換 パターンマッチ 正規表現 s演算子 でぐぐればいくらでも解説があるよ。
0856nobodyさん2008/07/19(土) 21:50:14ID:???
じゃ、このスレいらないやん
0857nobodyさん2008/07/19(土) 22:20:45ID:QBlnT4Mv

重い処理をする時に、ブラウザを待たせる必要がないので、
セッションを閉じようと思い、どうすればよいのかwebであさっていたら、
標準出力を閉じるとよいみたいな感じで書いていたので試してみましたが、
処理が待たされます。なぜでしょう?


print "a";
close(STDOUT);
sleep 20;

20秒またされたのち、ブラウザが開放されます。
0858nobodyさん2008/07/19(土) 22:30:40ID:???
どこに書いてあったの?
0859nobodyさん2008/07/19(土) 22:33:59ID:QBlnT4Mv
http://www.tohoho-web.com/lng/199910/99100140.htm
こことか
0860nobodyさん2008/07/19(土) 22:39:51ID:???
そこ見た感じだと$|=1やってforkしたときに子プロセス側で先にcloseして
処理を始めるようだけど、そうしてもダメだったの?
0861nobodyさん2008/07/19(土) 22:46:03ID:QBlnT4Mv
バッファはやった。
子プロはまだ作ってない。

そこのリンクの
http://www.tohoho-web.com/lng/199909/99090185.htm
環境によるようだね。

こうゆう時の処理はこうだよみたいに書いてあったんで(昔どっかのページで見た)、
普通に出来る処理と思ってた・・・。
0862nobodyさん2008/07/19(土) 23:04:25ID:???
自己レス

普通のperlではちゃんと、動作しました。
mod_perlでの環境では動作しないようです。

なぜ、mod_perlでは動作しないのかは、よくわかりません。
誰か教えて下され・・・。
0863nobodyさん2008/07/19(土) 23:48:52ID:???
>>862
coderepos かどこかにソース晒せば、5本の指が入る Perl hacker に教えてもらえるよ。
0864nobodyさん2008/07/20(日) 02:16:15ID:???
>>862
くだすれのほうにもちょっと前に書いたけど、
$|=1にしても、たしか256byteまでは自動でキャッシュが効くとか昔調べた時にどこかに書いてあった。
(昔自分がやったのは、数秒sleep毎に文字列を書き出して、一定時間でexitする。って処理だったけど・・。)

なので自分は、Content-Typeヘッダ出力の直後に、print " " x 256; を書くようにしたらそれで出来た。
あんまりスマートなやり方ではないけど、これ以外に知らない。
(向こうでは、Apacheがキャッシュするって書いたけど、実は自分の思い違いだったかも知れん。
ブラウザとか鯖環境によってはバッファされるbyte数が違うとか言うのも聞いたことがあるのを思い出した。
詳しく調べてないんでよく分からんし、どこに書いてあったかも覚えてない。)

mod_perlについては、printもcloseもexitも全て内部用の関数にoverrideされてるはず。
それに実行されるのは、対象のスクリプトのみではなく、またmodperl::RegistryにしてもPerl Handlreにしても、
実行してるのはApacheプロセスそのものなので、IO周りやsignal周りはApacheの内部実装によると思われる。
それでも上の方法で、ウチの環境では、上のcgiで実行したのと同じ処理ができた。
(すまんが、自分もApacheとかmod_perlの内装知ってるわけではないので、詳しくはわかりません。)
0865nobodyさん2008/07/20(日) 03:26:59ID:???
孫プロセスでやればいいだけの話だと思うが
0866nobodyさん2008/07/20(日) 03:56:52ID:???
gearman とか使えばいいんじゃね。
0867nobodyさん2008/07/20(日) 06:30:33ID:???
>>855
ググってもよく分からんのですよ。

.からzまで以外の文字があったら.(そのままって意味かな?)に変換する。
gオプションだから1回マッチしてもそのあとも処理を行う。
oオプションだからパターンを1回しかコンパイルしない。

だと思うのですが、目的が分からないのです。
あと、oオプションの意味もよく分からないし。
0868nobodyさん2008/07/20(日) 09:51:06ID:???
oオプションを>>848のケースで使うのは無意味だからそりゃ意味わからなくて当然

.からz以外の文字は、
./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
以外の文字

gオプションが無いと最初の1回マッチするだけで、有るとあるだけマッチを繰り返す
0869nobodyさん2008/07/20(日) 14:38:39ID:???
>>867
crypt(3)の標準的な実装では、第二引数(salt)は[a-zA-Z0-9./]からなる二文字です。ここではそれを得るための変換処理の一部過程として置換式を用いています。man crypt も参照。
ここから先は Perl の話題ではなくなりますが、知っていて損もないのでぼちぼちがんばってください。
08708692008/07/20(日) 14:58:22ID:???
>>867
> あと、oオプションの意味もよく分からないし。

>>868 が一行目で書いているけれど補足。
/o 修飾子は実行時に変化する部分が含まれている正規表現の再コンパイルを抑制します。
例えばパターンに変数が含まれているケースで /o 付きの式が複数回実行されてもパターンは再評価されません。
初回評価時の値のままマッチングが行われます。パターンが変化しない旨を明示することで実行時性能の向上を図る機能です。

今回のケースではパターンは [^\.-z] ですから変化する部分はありません。>>868 の言う「無意味」というのはそういうことです。
perldoc perlretut 及び perldoc perlop の Regexp Quote-Like Operators の項も見てみてください。
0871nobodyさん2008/07/20(日) 16:50:44ID:???
>>869-870

回答ありがとうございます。
しかしよく分かりません。。。

[a-zA-Z0-9./]以外にマッチ=ひらがなとか漢字とか?にマッチしたら、
その文字を、そのまま使う???
そうなると、saltが許されるのは[a-zA-Z0-9./]だけなので?????

ん??????????????
俺、アホなのかな?
0872nobodyさん2008/07/20(日) 19:57:43ID:???
質問

パーミッションで、
グループを6とかにすると、
もしそのサーバーが、シェルを使える
サーバーだった場合、
その同じサーバーを使ってる人が
シェルで勝手に入ってきてデータ-を
書き換えられたり、消されたりするので、
グループは0にしなければいけない、と
さっき読んだ参考書に書いてあるのですが、
それであってますか?
08738692008/07/20(日) 20:39:57ID:???
>>871
s/正規表現のぱたーん/左のパターンにマッチした部分を置き換える文字列/

[^\.-z] は一文字幅で /g 修飾子付きだから、マッチする一文字を見つけるたびに、置換文字列で置き換えられます。
置き換える文字列はこの場合 "." だから……。
要は s/// の右半分では "." はメタキャラクタじゃない、つまり何ら特別な意味がないということです。
がんばって気付け。
869 は自覚的なアホを応援しています。
0874nobodyさん2008/07/20(日) 20:49:41ID:???
>872
ちょっとは参考書を信用してもいいんでね?w
0875nobodyさん2008/07/20(日) 23:09:24ID:???
質問

EUCだと、タイトルに日本語使えない、
って参考書に書いてあるんだけど、そうなの?
0876nobodyさん2008/07/20(日) 23:20:40ID:???
タイトルとは何のタイトルですか?
HTMLのTITLEタグのことですか?
でしたらヘッダで適切な文字コードを指定すれば使えますよ
0877nobodyさん2008/07/21(月) 00:13:22ID:???
巨大配列を属性にセットしたオブジェクトを繰り返し生成すると、
なんだかブラウザの動きがもっさりしてくるんですが、
これはPerlが無駄にメモリを浪費してるからですか?
0878nobodyさん2008/07/21(月) 02:01:53ID:???
そうです。はい次。
0879nobodyさん2008/07/21(月) 05:10:19ID:???
>>873
あ、意味分かった。
[a-zA-Z0-9./]以外にマッチしたらピリオドに置き換えろ
って意味ですね?
0880nobodyさん2008/07/21(月) 10:10:27ID:???
definitely
0881nobodyさん2008/07/21(月) 17:58:17ID:???
頭悪い奴と初心者は解答してくれなくていいよ。
0882nobodyさん2008/07/21(月) 18:15:23ID:???
上級者のレスは只じゃないよ
0883nobodyさん2008/07/21(月) 18:38:24ID:???
ネットでの質疑応答にボランティア参加するかしないかの違いは、単に暇か忙しいかの違いであって、上級者か初心者かの違いではない。
0884nobodyさん2008/07/21(月) 20:58:45ID:???
>>879
大筋で合ってるけど微妙に違います。
元のパターンは [^.-z] なので、[a-zA-Z0-9./] 以外にもマッチ。
下記のワンライナーで Let's 実験。

perl -ple "s/[^.-z]/./g"
08858792008/07/22(火) 07:08:38ID:???
>>884
自分で書いた
[a-zA-Z0-9./]以外にマッチしたらピリオドに置き換えろ
と
[a-zA-Z0-9./] 以外にもマッチ
の違いが分かりません。???
0886nobodyさん2008/07/22(火) 11:13:09ID:???
perlで外部wwwサーバの生死が知りたいです。
LWP::UserAgentを使って出来そうなのですが、
どうコーディングしていいか分かりません。
よろしくお願いします。

やりたいことは、タイムアウト値を指定して
あるURLにアクセスした場合、
httpステータスコードが404を返しても
それは生きていると判定したいのです。
08878862008/07/22(火) 11:24:14ID:???
自己解決しました。
こんな感じで出来ました。

use LWP::UserAgent;

$url = "http://www.yahoo.co.jp/";

$ua = LWP::UserAgent->new;
$ua->timeout(10);
$req = HTTP::Request->new(GET => $url);
$res = $ua->request($req);
print $res->status_line;
0888nobodyさん2008/07/22(火) 13:31:20ID:???
telnet 相手先 80でいいじゃないか。
わざわざそんなことせんでも。。。
0889nobodyさん2008/07/22(火) 14:50:40ID:???
HEAD 使ってあげればいいのに・・・
0890nobodyさん2008/07/22(火) 15:02:22ID:???
仕様が不十分な以上はどれが良いとも決められないな
0891nobodyさん2008/07/22(火) 18:38:20ID:???
CGIのための実践入門Perl
技術評論社
アーク・シンク・タンク 三島 俊司

↑ちょっとわかりやすいね。
意味不明な記述も半分くらいあるけど。
0892nobodyさん2008/07/22(火) 18:40:05ID:???
質問

ifの代わりとしての?は使わない方がいいね。

だって?は正規表現とかでも使うから、
?があると、

「正規表現としての?かな?
それとも、ifの代わりの?かな?」

って考えないといけない。それが時間の無駄なので
?は使わずにifを使うようにしましょう。
0893nobodyさん2008/07/22(火) 18:41:11ID:???
質問なのかアドバイスなのかハッキリしろ糞バカヤロウw
0894nobodyさん2008/07/22(火) 18:52:12ID:???
同様の混乱事例として^があるよね

これ、^があると、「正規表現の行頭の意味なのか?
それとも、否定の意味なのか?」
って一瞬、混乱するし、なるべく使わないほうがいいと
思うんだけど、行頭の意味だと、¥aっていう、代替表現が
あるんだよね。
0895nobodyさん2008/07/22(火) 18:53:27ID:???
それとsortはデフォルトで文字列ソートだけど、
数値としてソートしたいときは、スペースシップ演算子を使って
$a <=> $b
とかって書かないといけないけど、そんなのめんどいので、
「数値ソート」
って関数をデフォルトで入れておいてくれないかな?
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:???
とりあえずまったり質問を待とうぜ
クリックうんこ
レス数が900を超えています。1000を超えると表示できなくなるよ。