【Perl,PHP】LLバトルロワイヤル4【Ruby,Python】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/02/15(日) 03:18:33エントリーは、
Perl、PHP、Python、Ruby、JavaScript・・・
さあ、死ぬまで語りやがれ!!!
0352デフォルトの名無しさん
2009/03/01(日) 02:37:01鯖見てる人がPerl使える人だから上司もそうか、じゃぁ仕方ないで俺に来るんだよね。
メールは、ライブラリ入れてるんだけど動かないっていう状態。 俺はパイプとかさっぱり。
普通にPHPの文法でDBから引っ張ってきてメール送信するように書き直してるだけ。
PHPもDB入れ替えたからSQL全部書き換えなんだが全く手が付けられん状態。。。
0353デフォルトの名無しさん
2009/03/01(日) 06:00:02文字の取り扱いが大きく変わってるからその辺りだろうね。
直すのにそれほどの手間じゃないと思うけどそれを出来ない人に任すような会社であれば
どのみちPHPにしてしまった方がいいかもね。
0354デフォルトの名無しさん
2009/03/01(日) 07:07:35PHPは誰でも使えるJavaとかC#みたいな感じ。
しかし、仕様の変さでハマりどころの多さVBやVBA並w
0355デフォルトの名無しさん
2009/03/01(日) 08:45:27馬鹿じゃね
0356デフォルトの名無しさん
2009/03/01(日) 09:38:27プログラミングを学ぶにはパイソンかルビーのどちらかが良いと聞いて3日ほど調べてるんだけど
ルビーの方がわかりやすい解説を見つけられるんでルビーにします
0357デフォルトの名無しさん
2009/03/01(日) 10:04:040358デフォルトの名無しさん
2009/03/01(日) 10:32:400359デフォルトの名無しさん
2009/03/01(日) 11:02:50ルビーに比べたらパイソンの資料が少ないのは否めないな。
レンタルサーバーへのインストールはどっちも少なくてガッカリするが。
0360デフォルトの名無しさん
2009/03/01(日) 11:58:250361デフォルトの名無しさん
2009/03/01(日) 12:18:04この二つから選んだ次第です
0362デフォルトの名無しさん
2009/03/01(日) 12:34:04趣味なら何でもいいんじゃないか。
0363デフォルトの名無しさん
2009/03/01(日) 12:54:45重要なのは中身さ。
英語ふくめればPythonの濃さは異常だぞ!
濃さ(マニアックさ?)で言えば最強はperlだと思うけどw
0364デフォルトの名無しさん
2009/03/01(日) 13:02:14全部受け止めた上で「だがそれがいい」って自然体で言ってのけるからな。
指摘に対して必死になりがちなRuby信者やPython信者には無い強さがあるw
0365デフォルトの名無しさん
2009/03/01(日) 13:02:31やるならforthをやれ
0366デフォルトの名無しさん
2009/03/01(日) 13:02:330367デフォルトの名無しさん
2009/03/01(日) 13:03:070368デフォルトの名無しさん
2009/03/01(日) 13:21:07私も読みやすいというのは大きな利点じゃないかとは思ったんですよね
すでにあるものをもう一度一から作るような真似は避けろともありましたし
0369デフォルトの名無しさん
2009/03/01(日) 14:24:48PHP→Python←いまここ
PHPから入ると組み込み関数に頼りすぎて他の言語をやる時に散々なことになる。
0370デフォルトの名無しさん
2009/03/01(日) 14:25:04あのインデントが総てにおいて正しい、とまでは流石に言わないが
かなりの場面で通用する、それなりに正しいインデントが身につく
0371デフォルトの名無しさん
2009/03/01(日) 17:21:39プログラムできるとかいう以前の問題だろ
俺のスクリプトルート
BASIC→C→C++→VB→VBA→Perl→PHP←いまここ
文字列関数とか連想配列とかどんだけ便利(ry
0372デフォルトの名無しさん
2009/03/01(日) 18:29:08インデントって...。どんなエディタつかってんだよ
作りたいものがないのに入門したいなら、Cとscheme。異論は認めない。
0373デフォルトの名無しさん
2009/03/01(日) 19:11:28まあプログラムがどう実行されるかを理解するなら両者が基本だよね。
それ以前のプログラミング手習いの段階なら多分Py,R,JSあたりで打鍵に抵抗なくした方がいいが。
0374デフォルトの名無しさん
2009/03/02(月) 09:36:59どなたかご利用の方いらっしゃいましたら使用感を教えてください
0375デフォルトの名無しさん
2009/03/02(月) 09:43:310376デフォルトの名無しさん
2009/03/02(月) 09:44:33バージョン通りの動きをするだろ。
WEBシステムの実装言語として使うなら、本体よりもむしろFastCGIやmod_**の方の
設定の可否などが大きいはず。そういうことを聞いてるのかな?
0377デフォルトの名無しさん
2009/03/02(月) 09:46:38レンタルサーバの使用感ならhosting板、
CGIのバックとしての使用感ならwebprog板で訊いて下さい。
0378デフォルトの名無しさん
2009/03/02(月) 13:54:25取りになったので、いろんな言語でやってみたくなった。
ある大きな連想配列から、いくつかのキーを持つ要素だけを取り出した、部分
連想配列を作りたい。
// PHP版
$request = array('hoge'=>1, 'fuga'=>2, 'piyo'=>...
//これからキーが hoge, fuga の物だけを取り出すとすると、
foreach (array('hoge', 'fuga') as $param) {
$a[$param] = $request[$param];
}
これ、いろんな言語で、なるべく簡潔に書くにはどうしたらいいだろう?
0379デフォルトの名無しさん
2009/03/02(月) 14:11:16Perlで
my %request = ('hoge'=>1, 'fuga'=>2, 'piyo'=>3);
my %a = (); my @keys = ('hoge', 'fuga');
@a{@keys} = @request{@keys};
ググってサンプルを見ながら適当に。なんかおかしいorもっと簡潔に書けるかも。
0380デフォルトの名無しさん
2009/03/02(月) 15:00:14Perl って、
・連想配列の引数に、配列を与えられるのか。すげー。
・変数名のプレフィックスが型によって違うから、目がちかちかするのう。
Perl講座 2章 [変数]
http://www.site-cooler.com/kwl/perl/2.htm
0381デフォルトの名無しさん
2009/03/02(月) 15:02:53PHP@プログラム板
http://pc11.2ch.net/test/read.cgi/tech/1232712334/341-
Pythonのお勉強 Part32
http://pc11.2ch.net/test/read.cgi/tech/1234716330/275-
0382デフォルトの名無しさん
2009/03/02(月) 15:07:09Rubyはなんかメソッドうにょうにょでできそうだけど、俺は知らね。
0383デフォルトの名無しさん
2009/03/02(月) 15:08:14配列周りでぼんぼことフラット化する癖は……
0384デフォルトの名無しさん
2009/03/02(月) 15:32:05http://www.aoky.net/articles/steve_yegge/tour_de_babel.htm
> Perlは夏の台湾の通りの上で破裂したマッコウクジラだ。はらわたがそこら
> 中に飛び散って、車や自転車や歩行者を覆っている。それがPerlだ。本当に
> チャーミングだ 。
(略)
> Perlがリスト処理をできないのは、リストを自動的に平坦にするという救い
> がたく愚かな決断をラリーが初期にしたことによる。そのため(1, 2, (3,
> 4))は不思議なことに(1, 2, 3, 4)に変わってしまう。あなたはこんな風になっ
> てほしいと思ったことはないだろう。しかしラリーがある日たまたま何かの
> 問題でそうなるのが都合が良かったため、それ以来Perlのデータ構造はまっ
> たくの破裂したクジラとなってしまったのだ。
0385デフォルトの名無しさん
2009/03/02(月) 15:38:56釣れますか?
0386デフォルトの名無しさん
2009/03/02(月) 15:55:14irb(main):001:0> request = {'hoge'=>1, 'fuga'=>2, 'piyo'=>3}
=> {"fuga"=>2, "hoge"=>1, "piyo"=>3}
irb(main):002:0> a = {}
=> {}
irb(main):003:0> ["hoge", "fuga"].map{|x| a[x] = request[x]}
=> [1, 2]
irb(main):004:0> a
=> {"fuga"=>2, "hoge"=>1}
これではforループがmapに変わっただけだな。
0387デフォルトの名無しさん
2009/03/02(月) 16:20:28request = { 'hoge' => 1, 'fuga' => 2, 'piyo' => 3 }
keys = ['hoge', 'fuga']
a = Hash[*keys.zip(request.values_at(*keys)).flatten]
0388デフォルトの名無しさん
2009/03/02(月) 16:26:37*keys の * ってなにをするものなの?
良かったら教えて。ググりようがないので。
0389デフォルトの名無しさん
2009/03/02(月) 16:38:22中を展開すると理解してる。ちょっと違うかもしれないけど。
こうすると分かりやすいと思う。
p [1, 2, 3]
p *[1, 2, 3]
0390デフォルトの名無しさん
2009/03/02(月) 16:53:460391デフォルトの名無しさん
2009/03/02(月) 16:56:04ごめん、やっぱりよく分からない。
p *[1, 2, 3] は動くけど、
*[1, 2, 3] は動かない。どうなってるの?
リファレンスのどこに載ってるか、教えてもらえるととてもうれしい。
http://www.ruby-lang.org/ja/man/html/
0392デフォルトの名無しさん
2009/03/02(月) 16:57:470393デフォルトの名無しさん
2009/03/02(月) 17:40:45> メソッド呼び出し のところ
そういうことか!やっとわかった。ありがとう。
メソッド呼び出し - Rubyリファレンスマニュアル
http://www.ruby-lang.org/ja/man/html/_A5E1A5BDA5C3A5C9B8C6A4D3BDD0A4B7.html
ちなみに Pythonだと、* で配列の展開、** で連想配列の展開になる。
>>> def hoge(a, b, c):
... return a
>>> hoge(*['a', 'b', 'c'])
'a'
>>> hoge(**{'a':1, 'b':2, 'c':3})
1
4. その他の制御フローツール
http://www.python.jp/doc/release/tut/node6.html#SECTION006720000000000000000
なるほどRubyにもあったのか。
正直に言うと、Hash[], Enumerable#zip, Hash#values_at とか、全部知らなかった。
Rubyってホントにメソッドが山盛りだな。
まあ俺が無知なだけか。
0394デフォルトの名無しさん
2009/03/02(月) 17:42:26>>392さんの通り。
http://www.ruby-lang.org/ja/man/html/_A5E1A5BDA5C3A5C9B8C6A4D3BDD0A4B7.html
多重代入でも最後のメンバー限定で展開できたり。
a, b, c = [1, *[2, 3]]
p a, b, c
http://www.ruby-lang.org/ja/man/html/_B1E9BBBBBBD2BCB0.html#a.c2.bf.bd.c5.c2.e5.c6.fe
多重代入の左辺と、メソッドの仮引数で意味が変わったりする謎アイテム。
0395デフォルトの名無しさん
2009/03/02(月) 17:44:060396デフォルトの名無しさん
2009/03/02(月) 18:00:39するような。
0397デフォルトの名無しさん
2009/03/02(月) 18:21:30標準ライブラリのtemplateをひっかきまわすのは面倒そうなのでこれで。
int[string] request = ["hoge":1, "fuga":2, "piyo":3];
auto keys = ["hoge", "fuga"];
typeof(request) result;
foreach(i; keys) if(i in request) result[i] = request[i];
0398デフォルトの名無しさん
2009/03/02(月) 18:51:45何かと思ったが、これは C++0x か!
すげえ、こんな風に書けるようになるのか!
0399デフォルトの名無しさん
2009/03/02(月) 19:09:040400デフォルトの名無しさん
2009/03/02(月) 19:22:370xだとdecltypeだったりstd::for_eachだったりunordered_mapだったりすると思うわけだが。
ロジックはまるっきり同じ。
組み込みの連想配列を持っていてfor .. in相当の構文がある言語ならなんでもこの形式で書けるんじゃないのかな
0401デフォルトの名無しさん
2009/03/02(月) 19:25:21['hoge','fuga'].inject({}){|x, y| x[y]=request[y]; x}
0402デフォルトの名無しさん
2009/03/02(月) 19:40:53def func(x, y):
x[y]=request[y];
return x
reduce(func, ['hoge', 'fuga'], {})
なんで無名関数使わないのかって?
Pythonのlambdaは代入とかできないんだようるせえな。
いいんだよPythonでは名前空間の不足に困ったりしないから。
あと何でも一行で書こうとするのは悪い習慣。
0403デフォルトの名無しさん
2009/03/02(月) 19:56:39> いや、D。
なんだそうか。C++に連想配列リテラルが組み込まれたかと思って驚いちゃった
よ。恥ずかしいな。
D vs C++0x - プログラミング言語 D 2.0
http://www.kmonos.net/alang/d/2.0/cpp0x.html#initializer-lists
0404デフォルトの名無しさん
2009/03/02(月) 19:59:170405デフォルトの名無しさん
2009/03/02(月) 20:10:250406デフォルトの名無しさん
2009/03/02(月) 20:17:38$request = @{hoge=1; "fuga"=2; 'piyo'=3}
$a = @{};
echo hoge,'fuga' | % { $a.$_ = $request[$_] }
0407デフォルトの名無しさん
2009/03/02(月) 20:22:05dict(reduce(lambda x, y: x + [(y, request[y])], ['b','c'], []))
0408デフォルトの名無しさん
2009/03/02(月) 20:24:010410デフォルトの名無しさん
2009/03/02(月) 20:40:140411デフォルトの名無しさん
2009/03/02(月) 20:40:260412デフォルトの名無しさん
2009/03/02(月) 20:53:220413デフォルトの名無しさん
2009/03/02(月) 21:00:10Perlっぽいが、動くとは思えん。これ何?
0414デフォルトの名無しさん
2009/03/02(月) 21:00:57知らんけど、無さそうだね。
hoge['key'] = value じゃ駄目?
3.8 マップ型
http://www.python.jp/doc/release/lib/typesmapping.html
0415デフォルトの名無しさん
2009/03/02(月) 21:03:00最後にdictを使うのなら、injectじゃなくて、リスト内包表記やmapの方が素直
じゃね?Python本スレではそうなってた。
0416デフォルトの名無しさん
2009/03/02(月) 21:07:51PowerShellですよ
どうせならはっきりキモイと言ってくれても私は一向に構わん
% は Foreach-Object というコマンドのエイリアスで
ハッシュテーブルへは配列表記プロパティ表記どちらでも可能なのでこんな感じでキモく書けます
0417デフォルトの名無しさん
2009/03/02(月) 21:16:02{}.__setitem__(k, v)
0418デフォルトの名無しさん
2009/03/02(月) 21:16:44>>414
hoge.__setitem__(key, value)
無理やりreduceで書くなら例えば
reduce(lambda d, x: d.__setitem__(x, request[x]) or d, ['hoge','fuga'],{})
こんな書き方になると思うけど、Python使いはこの例を普通こんな風には書かない
dict((k, request[k]) for k in ['hoge','fuga'])
のほうがずっと素直で短く読みやすいからね
0419デフォルトの名無しさん
2009/03/02(月) 22:00:38なるほど、キモいけど面白れー!
0420デフォルトの名無しさん
2009/03/02(月) 22:15:29内包記法はうらやましい
0421341
2009/03/02(月) 22:30:41ちなみに元の言語であるPHPにも、forループしかないわけじゃなくて、むやみ
やたらと沢山のarray関連関数がある。
http://jp2.php.net/manual/ja/book.array.php
これを利用したら簡潔にならないかと思ったんだが、
array_intersect_key($request, array_flip(array('hoge', 'fuga')));
関数名の長いせいもあって、どうも垢抜けないのう。
0422デフォルトの名無しさん
2009/03/02(月) 22:47:33Perl とか Ruby とか、もっと面白いことできないの?
0423デフォルトの名無しさん
2009/03/02(月) 22:52:030424デフォルトの名無しさん
2009/03/02(月) 23:00:41Hash[*['hoge','fuga'].map {|x| [x, request[x]]}.flatten]
個人的には、リスト内包表記より、Rubyのmapとブロックのほうが好きだな。
0425デフォルトの名無しさん
2009/03/02(月) 23:06:06Rubyはさておき、Perl だったら、とにかく変態的なことをしてほしい。
ほかの言語だったらありえないようなこと。
0426デフォルトの名無しさん
2009/03/02(月) 23:13:37http://pc11.2ch.net/test/read.cgi/tech/1231856193/412
>中二設定豊富
0427デフォルトの名無しさん
2009/03/02(月) 23:15:50>>379の縦横無尽の記号乱舞リスト展開くらいではまだ足らんと申すか
0428デフォルトの名無しさん
2009/03/02(月) 23:21:58いや、逆。あれで火がついちゃった。Perlすげえ。
もっと何か見せてほしい。
0429デフォルトの名無しさん
2009/03/02(月) 23:26:580430デフォルトの名無しさん
2009/03/02(月) 23:30:32> 個人的には、リスト内包表記より、Rubyのmapとブロックのほうが好きだな。
ブロック内に複数行でも書けるから、凝ったことがやりやすいよね。
Pythonのリスト内包表記だと、長くなるとだんだん読み書きしづらくなる。
そのうち業を煮やして、手作業でforループに書き換えることに。
そのときの面倒さと言ったら。
これって俺だけ?
0431デフォルトの名無しさん
2009/03/02(月) 23:31:11リファレンスでごちゃごちゃしたって簡潔にも面白くもならんだろうし。
他の例のようにループ(?)にするとこんな感じかな。
my %a = map { ($_, $request{$_}) } ('hoge', 'fuga');
0432デフォルトの名無しさん
2009/03/02(月) 23:31:22面白そうなので俺も書いてみた。
for(keys %request){if(/hoge/||/fuga/){$r{$_}=$request{$_};}}
grepで出来んかな
0433デフォルトの名無しさん
2009/03/02(月) 23:32:24ええそうです。手段のためなら目的を選びませんとも!
0434デフォルトの名無しさん
2009/03/02(月) 23:43:30「継続渡し」スタイルだ。
だから副作用の書けないPythonのlambdaでも、ちゃんと結果を累積できるんだ。
>>426
Haskell わかんないから君が書いてよ。
0435デフォルトの名無しさん
2009/03/02(月) 23:45:22my %a = map {$_, $request{$_}} grep {/^hoge|fuga$/} keys %request;
0436デフォルトの名無しさん
2009/03/02(月) 23:58:08すげえ、もう意味が分からない。
0437デフォルトの名無しさん
2009/03/02(月) 23:58:43おお、さすがム版!
grep版がすぐに出てきて、個人的に満足した。ありがとう。
0438378
2009/03/03(火) 01:45:34実はオチに使おうと思って用意していた言語がある。
R。R言語やGNU Rとも呼ばれる、統計用ベクトル言語。基本的にすべてのデータ
がベクトル。
> request <- c(hoge=1, fuga=2, piyo=3)
> request[c('hoge', 'fuga')]
hoge fuga
1 2
ご覧の通り、変数の添え字にベクトルを与えられるので、きわめて簡潔、と言
うかそのまんまに書ける。これ以上簡潔というと、話に聞くAPLぐらいしか思い
つかない。まあAPLに連想配列があるか知らんけど。
--
プログラミング言語というものは、使用目的が固定された場合、
ライブラリ → フレームワーク → DSL
という形で進化していくものだと思う。効率ではDSLが最高で、汎用言語は絶対
に追いつけない。例えば、RDBをSQLじゃなくてCで直接操作するのは鬼のように
大変。
しかしDSLは、習得は容易だが自由度が低くて、やろうとしたことができないこ
とも多い。だから一般的に、人気の出たDSLはだんだん汎用言語化していく。
PL/SQLとか。R なんか、行き過ぎるくらい汎用言語化している。
つうことで、言語の進化には、汎用言語<-->専用言語の逆向きの流れが同時に
存在していて、人が言語の良し悪しについて議論する場合、どっちを重視する
かが人によって違うのが、話のかみ合わない一因じゃないかなと思っている。
0439378
2009/03/03(火) 01:54:26えられて、用意した結論がいきなり疑わしくなってしまった。Perlは存在が反則。
つうことで、いろんなコードが見られて自分は面白かったです。皆さんありがとう。
0440デフォルトの名無しさん
2009/03/03(火) 02:42:390441デフォルトの名無しさん
2009/03/03(火) 02:45:32なんかよくわからんこと書いてるな。
fold, inject, reduce 自体が継続渡しスタイルなんだよ。
>>407は、副作用無しに作れて、あとで連想配列に変えられるような
処理結果の累積方法を見つけたのが偉いの。
あとこれは、連想配列にある要素を加えた結果を作る式が、たまたまPythonには
なかったというだけの話。それをlambdaで与えれば、dictは要らなかった。
0442デフォルトの名無しさん
2009/03/03(火) 03:04:48> request[c('hoge', 'fuga')] で値だけじゃなくキーも返すっていうのは良いのか悪いのか
問題ない。
キーを持つベクトルと、持たないベクトルとで、そのまま演算できるから、
値だけの場合と同様に扱える。
> (c(hoge=1, fuga=2) + c(10, 20))
hoge fuga
11 22
0443デフォルトの名無しさん
2009/03/03(火) 03:09:09c(hoge=1, fuga=2) + c(10, 20)
0444デフォルトの名無しさん
2009/03/03(火) 03:18:45あー、いわゆる"配列"と"連想配列"を差別しないのが"ベクトル"なわけかな
0445デフォルトの名無しさん
2009/03/03(火) 03:47:46まあそんな感じ。
もう少し言うと、ベクトルは基本的には、自然数が添え字の単なる配列。
だけど「キー」を付けると、キーの値でも要素にアクセスできるようになる。
連想配列としては擬似的なもの。
だから、「キー」(正確には「name属性」)を持つベクトル同士を足すと、
> c(hoge=1, fuga=2) + c(fuga=10, piyo=20)
hoge fuga
11 22
単に要素の順番で足されて、後者のname属性は結果には残らない。
この辺はちょっとガッカリ?
真に配列と連想配列をうまく統合したのは、PHPだと思う。
0446デフォルトの名無しさん
2009/03/03(火) 04:56:46無駄に汎用言語化するという流れは、まああるだろうね。
PerlとPHPは別にオブジェクト指向なんか実装する必要はなかったと思うし、
まあ実際無理に汎用言語化された機能の使われ方も微妙。
0447デフォルトの名無しさん
2009/03/03(火) 06:15:54SQLのUNIONみたいなもんですかね
0448デフォルトの名無しさん
2009/03/03(火) 21:24:22多重代入くらいにはメジャーだと思ってた
0449デフォルトの名無しさん
2009/03/03(火) 23:58:33>もう少し言うと、ベクトルは基本的には、自然数が添え字の単なる配列。
>だけど「キー」を付けると、キーの値でも要素にアクセスできるようになる。
>連想配列としては擬似的なもの。
擬似ハッシュ(Pseudo-Hash)なら、Perlにもv5.005の頃からあったけど、
そのデータ構造上、メモリ効率やパフォーマンスに悪影響があるということで、
v5.9.5で廃止された。これ豆
0450デフォルトの名無しさん
2009/03/04(水) 11:57:12Perlってほんとに何でもあるなあ。
Perlの言語仕様って、それ以外の言語全部を合わせたぐらいあるんじゃないか?
あ、C++があるか。あれもC++以外の言語の仕様を全部合わせたぐらいあるな。
0451デフォルトの名無しさん
2009/03/04(水) 11:58:39> 配列の添え字に配列渡せるって割と珍しいの?
> 多重代入くらいにはメジャーだと思ってた
よかったらPerl以外にどんな言語があるか教えてよ。
■ このスレッドは過去ログ倉庫に格納されています