Perlコーディング初心者質問スレ Part 57
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん
2008/02/25(月) 19:25:51ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
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:???オレらの業界って気軽に試せないのね。
ダムがあったとして
「ここにもし10cmくらいの穴を開けたらどうなるだろう?」
みたいなところなんで、
「いきなり実行する」
っていうのはキチガイ扱いされてクビになるのね。
0832nobodyさん
2008/07/17(木) 00:39:50ID:???&は消える。
参考書のほうが間違ってたわ。
0833nobodyさん
2008/07/17(木) 00:55:40ID:???出版元に問い合わせてみたら?
0834nobodyさん
2008/07/17(木) 02:41:15ID:???1は消えてるんだけど、
2は残ってるの。
余計混乱するわ。
0835nobodyさん
2008/07/17(木) 03:23:04ID:???0836nobodyさん
2008/07/17(木) 05:31:29ID:???「普通は」消えるが正解。正規表現内で()でトラップすりゃ残る。
$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:???0841809
2008/07/17(木) 09:39:10ID:???すまんこすまんこ。さらに遅レスすまんこ
Spreadsheet::WriteExcelでセルの結合に悩んでるヤシは
ttp://www.koders.com/perl/fid09386E1C3E183B96174D224B87445AE647A32B23.aspx
ここを見れ!
例文が載ってたわ。
0843nobodyさん
2008/07/17(木) 22:27:51ID:???そういうのの、一覧表がのってる
ページをおしえて
0844nobodyさん
2008/07/17(木) 22:29:43ID:???0845nobodyさん
2008/07/18(金) 01:28:58ID:???0847nobodyさん
2008/07/18(金) 09:49:50ID:???0848nobodyさん
2008/07/19(土) 10:24:55ID:???教えてください。
$salt =~ s/[^\.-z]/\./go;
0849nobodyさん
2008/07/19(土) 10:33:23ID:???0851nobodyさん
2008/07/19(土) 18:39:57ID:???$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.
0854nobodyさん
2008/07/19(土) 20:59:09ID:???> なんかのソフトでそうやって
> 自動で解説が出るの?
自動で解説できるモジュールあったら便利そうだね!
0855nobodyさん
2008/07/19(土) 21:46:02ID:???>>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こことか
0860nobodyさん
2008/07/19(土) 22:39:51ID:???処理を始めるようだけど、そうしてもダメだったの?
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では動作しないのかは、よくわかりません。
誰か教えて下され・・・。
0864nobodyさん
2008/07/20(日) 02:16:15ID:???くだすれのほうにもちょっと前に書いたけど、
$|=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:???0867nobodyさん
2008/07/20(日) 06:30:33ID:???ググってもよく分からんのですよ。
.からzまで以外の文字があったら.(そのままって意味かな?)に変換する。
gオプションだから1回マッチしてもそのあとも処理を行う。
oオプションだからパターンを1回しかコンパイルしない。
だと思うのですが、目的が分からないのです。
あと、oオプションの意味もよく分からないし。
0868nobodyさん
2008/07/20(日) 09:51:06ID:???.からz以外の文字は、
./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
以外の文字
gオプションが無いと最初の1回マッチするだけで、有るとあるだけマッチを繰り返す
0869nobodyさん
2008/07/20(日) 14:38:39ID:???crypt(3)の標準的な実装では、第二引数(salt)は[a-zA-Z0-9./]からなる二文字です。ここではそれを得るための変換処理の一部過程として置換式を用いています。man crypt も参照。
ここから先は Perl の話題ではなくなりますが、知っていて損もないのでぼちぼちがんばってください。
0870869
2008/07/20(日) 14:58:22ID:???> あと、oオプションの意味もよく分からないし。
>>868 が一行目で書いているけれど補足。
/o 修飾子は実行時に変化する部分が含まれている正規表現の再コンパイルを抑制します。
例えばパターンに変数が含まれているケースで /o 付きの式が複数回実行されてもパターンは再評価されません。
初回評価時の値のままマッチングが行われます。パターンが変化しない旨を明示することで実行時性能の向上を図る機能です。
今回のケースではパターンは [^\.-z] ですから変化する部分はありません。>>868 の言う「無意味」というのはそういうことです。
perldoc perlretut 及び perldoc perlop の Regexp Quote-Like Operators の項も見てみてください。
0871nobodyさん
2008/07/20(日) 16:50:44ID:???回答ありがとうございます。
しかしよく分かりません。。。
[a-zA-Z0-9./]以外にマッチ=ひらがなとか漢字とか?にマッチしたら、
その文字を、そのまま使う???
そうなると、saltが許されるのは[a-zA-Z0-9./]だけなので?????
ん??????????????
俺、アホなのかな?
0872nobodyさん
2008/07/20(日) 19:57:43ID:???パーミッションで、
グループを6とかにすると、
もしそのサーバーが、シェルを使える
サーバーだった場合、
その同じサーバーを使ってる人が
シェルで勝手に入ってきてデータ-を
書き換えられたり、消されたりするので、
グループは0にしなければいけない、と
さっき読んだ参考書に書いてあるのですが、
それであってますか?
0873869
2008/07/20(日) 20:39:57ID:???s/正規表現のぱたーん/左のパターンにマッチした部分を置き換える文字列/
[^\.-z] は一文字幅で /g 修飾子付きだから、マッチする一文字を見つけるたびに、置換文字列で置き換えられます。
置き換える文字列はこの場合 "." だから……。
要は s/// の右半分では "." はメタキャラクタじゃない、つまり何ら特別な意味がないということです。
がんばって気付け。
869 は自覚的なアホを応援しています。
0874nobodyさん
2008/07/20(日) 20:49:41ID:???ちょっとは参考書を信用してもいいんでね?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:???0880nobodyさん
2008/07/21(月) 10:10:27ID:???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:???大筋で合ってるけど微妙に違います。
元のパターンは [^.-z] なので、[a-zA-Z0-9./] 以外にもマッチ。
下記のワンライナーで Let's 実験。
perl -ple "s/[^.-z]/./g"
0885879
2008/07/22(火) 07:08:38ID:???自分で書いた
[a-zA-Z0-9./]以外にマッチしたらピリオドに置き換えろ
と
[a-zA-Z0-9./] 以外にもマッチ
の違いが分かりません。???
0886nobodyさん
2008/07/22(火) 11:13:09ID:???LWP::UserAgentを使って出来そうなのですが、
どうコーディングしていいか分かりません。
よろしくお願いします。
やりたいことは、タイムアウト値を指定して
あるURLにアクセスした場合、
httpステータスコードが404を返しても
それは生きていると判定したいのです。
0887886
2008/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:???わざわざそんなことせんでも。。。
0889nobodyさん
2008/07/22(火) 14:50:40ID:???0890nobodyさん
2008/07/22(火) 15:02:22ID:???0891nobodyさん
2008/07/22(火) 18:38:20ID:???技術評論社
アーク・シンク・タンク 三島 俊司
↑ちょっとわかりやすいね。
意味不明な記述も半分くらいあるけど。
0892nobodyさん
2008/07/22(火) 18:40:05ID:???ifの代わりとしての?は使わない方がいいね。
だって?は正規表現とかでも使うから、
?があると、
「正規表現としての?かな?
それとも、ifの代わりの?かな?」
って考えないといけない。それが時間の無駄なので
?は使わずにifを使うようにしましょう。
0893nobodyさん
2008/07/22(火) 18:41:11ID:???0894nobodyさん
2008/07/22(火) 18:52:12ID:???これ、^があると、「正規表現の行頭の意味なのか?
それとも、否定の意味なのか?」
って一瞬、混乱するし、なるべく使わないほうがいいと
思うんだけど、行頭の意味だと、¥aっていう、代替表現が
あるんだよね。
0895nobodyさん
2008/07/22(火) 18:53:27ID:???数値としてソートしたいときは、スペースシップ演算子を使って
$a <=> $b
とかって書かないといけないけど、そんなのめんどいので、
「数値ソート」
って関数をデフォルトで入れておいてくれないかな?
0896nobodyさん
2008/07/22(火) 19:00:27ID:???ttteditみたいのがいいんだけど。
たとえばforeachって選ぶと、自動で
foreach 変数 リスト {
}
ってテンプレが出てくるようなのがいい。
0898nobodyさん
2008/07/22(火) 19:12:00ID:???ファイルのオープンに成功した時とか、
「ファイル オープン!」
「ギュイイイン」
みたいな。
0899nobodyさん
2008/07/22(火) 20:54:22ID:???0900nobodyさん
2008/07/22(火) 20:54:33ID:???ガショォォォォオオオン!
0901884
2008/07/22(火) 21:30:20ID:???注意が足りなかった点、謝罪するとともに、説明しなおす試みです。
この場合、元のパターンを真偽反転させると分かりやすいかもです。
文字クラス [.-z] は、 [a-zA-Z0-9./] よりも広い範囲を指している点をご理解いただきたい。
つまり s/[.-z]/./g の後でも、[a-zA-Z0-9./] 以外の文字が一部残ってしまう可能性があるわけです。
併せて、ちったあ試してみてくれよ、とお願いしてみます。
>>884 にテストの例も挙げています、ってーか自分の至れり尽くせりっぷりに泣けてきた。
0903nobodyさん
2008/07/23(水) 07:57:47ID:???>>892
python ですら実装してしまった三項演算子にケチを付けてどうする。
>>894
\a はアラームじゃねえか? \A だろ?しかも \A と ^ は挙動が違うし。
>>895
perl5.10 にしろ。指定が無い場合は勝手に文字列か数値か決めてソート
してくれるらしい。
0904nobodyさん
2008/07/23(水) 08:56:46ID:???本当?
% 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:???0908nobodyさん
2008/07/23(水) 22:01:45ID:???Open Perl IDE
http://sourceforge.net/projects/open-perl-ide
0909nobodyさん
2008/07/23(水) 23:15:34ID:???おまえらが実際に使っていて、そして
満足しているものを教えて欲しいの。
0910nobodyさん
2008/07/23(水) 23:17:21ID:???0911nobodyさん
2008/07/24(木) 01:54:37ID:???メニューに、ループ、ってのがあって、
そのループってのをクリックすると、
forとかwhileとかforeachとかが出てきて、
そのなかで例えばforeachを選ぶと、自動で
foreach 変数 リスト {
}
とかテンプレみたいに出てきて、あとは
その中の処理を書いていく、っていう。
ようはVBみたいなのが欲しいんだけど、
そういうのってある?
0912nobodyさん
2008/07/24(木) 02:06:09ID:???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:???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:???あと、クリックとか抜かしてる時点でうんこ
0922nobodyさん
2008/07/24(木) 22:37:43ID:???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を超えると表示できなくなるよ。