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

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

レス数が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/
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:???
きがついてるが放置してるか
気が付いてないかはちがうんじゃないかな
0996nobodyさん2008/08/06(水) 20:30:17ID:???
>>995
実際に落とし穴に嵌ったときに、気付かなくなるよ。
どうしてもというなら、必要な箇所に no warnings; を入れるべき。
0997nobodyさん2008/08/06(水) 22:36:24ID:???
>>994
言葉足らずと言うか真意が違ったすまん
ワーニングなら気付くんだ、俺か誰かが
で、ラインナンバーまで解るから解決は早い
他の人の担当であっても指摘しやすい
そもそも自分のコーディングの時気付くw

上のトラブルの時はスパゲティーの中だったんで、
苦しいのなんのって…
0998nobodyさん2008/08/06(水) 22:50:23ID:???
次スレ立ててもいいですか?
0999nobodyさん2008/08/06(水) 22:54:16ID:???
てか聞いてる余裕はあまり多くないようですね、レス数的に。
立てます。
1000nobodyさん2008/08/06(水) 22:55:25ID:???

         .∧__,,∧
        (´・ω・`)
         (つ終と)
         `u―u´
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。