Perlコーディング初心者質問スレ Part 59
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/02/16(月) 11:42:29ID:gvPTpodw【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >2 以降
前スレ http://pc11.2ch.net/test/read.cgi/php/1218030872/
0222nobodyさん
2009/03/05(木) 19:52:52ID:???ネタじゃないなら、もうソースも恥部もさらけ出せよ
0223nobodyさん
2009/03/05(木) 20:40:48ID:???0224nobodyさん
2009/03/05(木) 20:43:15ID:???0225nobodyさん
2009/03/05(木) 20:53:49ID:???0227nobodyさん
2009/03/06(金) 00:19:12ID:???if文を100個も並べるようなコードは、おそらくif文などほとんど使わずに書けると思うよ。
コード以前に、仕様定義を日本語で整理することに頭と時間使った方が結局近道。
どういう処理をさせたいか日本語で表せない(他人に伝えられない)のにコーディングできるはずがない。
例えば
if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua > 10 and $tensuua < 20) {$ranka = 2;} else {$ranka = 1;}
のコードは、$tensuua == 10 のとき、意図しない結果となると思う。
条件式は、混乱するんだったら、表を書いてでも整理すべし。
0228nobodyさん
2009/03/06(金) 00:29:04ID:???0229nobodyさん
2009/03/06(金) 01:14:19ID:???0230nobodyさん
2009/03/06(金) 01:57:58ID:???NCNRでお願いします。
0231nobodyさん
2009/03/06(金) 05:12:13ID:???3万でいいよ
0232nobodyさん
2009/03/06(金) 13:15:46ID:???制作は規模にもよるけど3ヶ月以内を約束で。
0233nobodyさん
2009/03/06(金) 14:24:55ID:???なんかのフレームワークかな?とか。
……俺だけ?
0235nobodyさん
2009/03/06(金) 18:09:13ID:???0236nobodyさん
2009/03/06(金) 22:21:27ID:???創刊号 ifブロック特集
第2号 elseブロック特集
第3号 elsifブロック特集
第4号 unlessブロック特集
第5号 whileブロック特集
第6号 untileブロック特集
第7号 forブロック特集
第8号 if修飾詞特集
第9号 unless修飾詞特集
第10号 while修飾詞特集
第11号 until修飾詞特集
第12号 for修飾詞特集
第13号 if演算子(?:)特集
第14号 範囲演算子(..)特集
第15号 範囲演算子(...)特集
第16号 論理積演算子(&&)特集
第17号 論理和演算子(||)特集
第18号 論理積演算子(and)特集
第19号 論理和演算子(or)特集
第20号 排他的論理和演算子(xor)特集
第21号 grep関数特集
第22号 evalブロック特集
第23号 Switchモジュール特集
最終号 はじめてのPerlプログラミング
0237nobodyさん
2009/03/06(金) 23:18:44ID:???if の歴史
からいこうぜ
0238nobodyさん
2009/03/06(金) 23:27:43ID:???0239nobodyさん
2009/03/06(金) 23:36:05ID:???0240nobodyさん
2009/03/07(土) 00:03:23ID:???まともにやってたら中級の入り口に立ってるはずなのにw
0241nobodyさん
2009/03/07(土) 02:52:57ID:???0242nobodyさん
2009/03/07(土) 02:58:51ID:???むしろツッコミどころは第23号じゃね?
0243nobodyさん
2009/03/07(土) 14:31:06ID:???0245nobodyさん
2009/03/07(土) 15:05:38ID:???0246nobodyさん
2009/03/07(土) 18:31:27ID:???0248nobodyさん
2009/03/08(日) 01:43:51ID:???0249nobodyさん
2009/03/08(日) 11:38:53ID:???0251nobodyさん
2009/03/08(日) 21:55:46ID:???あの辺のクラスタは10年経ってもずっとやってそう
0252nobodyさん
2009/03/08(日) 22:16:42ID:???0255nobodyさん
2009/03/09(月) 01:19:00ID:???$hogeがaとb以外のときに実行するには
if ($hoge ne 'a' or $hoge ne 'b' ){
print "oik";
}
で合ってますか?
0256nobodyさん
2009/03/09(月) 01:26:29ID:???その場合だと、「a以外」または「b以外」のときに真となるので、常に成立することになる。
「aまたはb」という条件式を作り、それをさらに否定するといい。
0257nobodyさん
2009/03/09(月) 01:27:09ID:???0258nobodyさん
2009/03/09(月) 01:28:42ID:???orじゃなくて、andじゃないとマズくね?
0259nobodyさん
2009/03/09(月) 01:30:03ID:???0260nobodyさん
2009/03/09(月) 01:40:09ID:???$hoge = 'c';
if ($hoge ne 'a' and $hoge ne 'b' ){
print "ok";
}
なら ok で、このとき $hoge = 'b' ならなにもしないんですよね?
0261nobodyさん
2009/03/09(月) 01:46:15ID:???おっけー。
あと、既に知ってるかもしれないが
「ド・モルガンの法則」でぐぐってみると勉強になるかも
0264nobodyさん
2009/03/09(月) 04:12:13ID:???0265nobodyさん
2009/03/09(月) 04:36:41ID:???月刊ifの全て第18号には、こんな用例がのっているはずw
$hoge = 'c';
$hoge ne 'a' and $hoge ne 'b' and print "ok";
0266nobodyさん
2009/03/09(月) 19:03:15ID:???0267nobodyさん
2009/03/09(月) 23:14:05ID:???初めてflockを使ってみたのですが、実際にflockを間違えずに入れれてるかどうか
確認するにはどうすればいいでしょうか。
0268nobodyさん
2009/03/10(火) 00:01:48ID:???たとえば純粋にカウントアップするスクリプト書いて、
ab で 30 のクライアントで 10000 回もぶん回せば結果は出るかと思うよ
0269nobodyさん
2009/03/10(火) 11:58:59ID:???ワクワクを百倍にしてヤフオクの主役になろう♪
0270nobodyさん
2009/03/10(火) 11:59:31ID:???0271nobodyさん
2009/03/11(水) 22:07:23ID:???abってモジュールがあるのでしょうか?
ググッて見たけど、ソートの$a<=>$bとかばっかりひっかかってわかりませんでした。
検索語にapacheも追加すると幸せになるかもしれません。
0274nobodyさん
2009/03/12(木) 16:37:21ID:???範囲演算子の「..」と「...」をスカラーコンテキストとして評価して
状態遷移処理をするプログラムを活用している人はいるのだろうか?
0275nobodyさん
2009/03/12(木) 17:06:33ID:???0276nobodyさん
2009/03/12(木) 19:29:47ID:???なるほど
試しに使ってみたけど論理が混乱して変数でフラグ持たせるやりかたで未だにやっているけど
実際に嫌と言うほど使っている人がいるってことは、俺がバカだったというだけみたいだな出直してきます
0277nobodyさん
2009/03/14(土) 16:39:37ID:???0278nobodyさん
2009/03/14(土) 20:53:02ID:???ソースを参考に、こんなの書いたけど駄目でした。
package Hoge;
use strict;
use warnings;
sub import {
strict->import;
warnings->import;
}
package main;
use Hoge;
$hoge=1; # ここでエラーになって欲しい
0281nobodyさん
2009/03/16(月) 00:10:49ID:???フレームワークにTripletailを使いたいのですが、
どうやっても
DBI connect('test:localhost','user',...) failed: Can't create TCP/IP socket (10106) at C:/Perl/site/lib/Tripletail/DB.pm line 1102と
エラーが出てしまって…
コードはiniのDB設定以外Tripletailのチュートリアルにあるものそのままだし
DBのユーザー名やパス等も間違いないと思うのですが。
誰かTripletail使ってる人いませんか?
0283nobodyさん
2009/03/23(月) 00:31:29ID:???多くの場面で使われているということだけでは、何も評価したことにならんよ。
「あれがいいってみんなが言ってるよ。」
0284nobodyさん
2009/03/23(月) 01:06:40ID:???直接言えよ
Module::CoreListに載っていればいいのか、
Plaggerとかの有名どころで使われているモジュールがいいのか、
CPANに上がってりゃそれでいいのか、
場末のコードスニペットがいいのか、
判断どころは色々だろ
0285Nobodyさん
2009/03/24(火) 02:30:18ID:???redapple 432235
redstrawberry 2934
こんな感じで文字列と数字で構成された行を数字の高い順(降順)
でソートして↓のようにするにはどのようにすればいいでしょうか?
redapple 432235
redstrawberry 2934
yellowlemon 234
0286nobodyさん
2009/03/24(火) 04:35:51ID:???http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#how_do_i_sort_an_array_by__anything_
my @sorted = map "$_->[0]\n",
sort { $b->[1] <=> $a->[1] }
map [ $_, / ([0-9]+)/ ],
('yellowlemon 234', 'redapple 432235', 'redstrawberry 2934')
;
0287nobodyさん
2009/03/24(火) 06:28:56ID:???my @targets = ('yellowlemon 234', 'redapple 432235', 'redstrawberry 2934');
y @sorted_targets = sort {
(split ' ', $b)[1] <=> (split ' ', $a)[1];
} @targets;
0288nobodyさん
2009/03/24(火) 16:58:27ID:???> ソートするものの一部を取り出す必要があるような複雑な関数を使うのなら、
> ソート関数の内側でそれを使ってはいけません。最初にその関数で使う部分を
> 取り出します。なぜなら、sort のBLOCKは同じ要素に対して何度も何度も
> 呼び出される可能性があるからです。
sort() が比較要素をキャッシュしてくれるようにでもなっているのなら、
{ (split ' ', $b)[1] <=> (split ' ', $a)[1] } でいいけどね。
0289287
2009/03/24(火) 20:07:04ID:???アドバイス、サンクス。
確かに考えてみたら、比較の度にsplitが実行されて287の方が遅そうな感じだな。
でも、気になってベンチ(ランダムに作った100要素の@targetsを各functionでソート。これを1000000回実行して結果取得)をとってみたら意外な結果だった。
287で書いたコードの方が455倍速いという結果に。。。
これってsplitの処理がたまたま、map=>sort=>mapのデータ渡しや正規表現処理より速いってこと???
Rate without_split_in_block with_split_in_block
without_split_in_block 3982/s -- -100% (286で書かれたcode)
with_split_in_block 1818182/s 45558% -- (287で書かれたcode)
0290nobodyさん
2009/03/24(火) 22:20:58ID:iEyVm5itこのまま実行してもできない。。
誰か教えてくれんか?perlの知識がまったくないのでわからんのです。
ちなみに環境はXPです。
while(<>){
s/<(\/)?([\w]+)/<$1\L$2/g; #要素タイプ名を小文字に
s/ (\w+)="/ \L$1="/g; #属性名を小文字に
#空要素タグを /> で閉じる
s/<(br|hr|img|link|input|col|base|meta|area|param)(.*?)>/<$1$2 \/>/g;
s/<a name="(.*?)"/<a name="$1" id="$1"/g; #id属性を加える
print;
}
0291nobodyさん
2009/03/25(水) 04:28:21ID:???ようはフィルタでしょ?
スクリプトをfoo.plとか適当な名前で保存して、
フィルタに掛けたいファイルを用意して(例えばbar.txt)
perl foo.pl bar.txt
すりゃいいだけかと
ファイルに吐かせたいなら
perl foo.pl bar.txt > out.txt
0292nobodyさん
2009/03/25(水) 04:53:50ID:???CPANでモジュールをインストールしようとすると、
Alert: While trying to 'parse' YAML file
'C:\usr\cpan\FTPstats.yml'
with 'YAML::XS' the following error was encountered:
ってばかり吐かれて死にそう。
ググったらFTPstats.ymlを削除すればとあってやってみたけど効果なし。
何か策があれば教えてください。
0293nobodyさん
2009/03/25(水) 08:15:32ID:???ベンチコードが分からんと追試しようが無い。
http://boobar.hp.infoseek.co.jp/bench/sort.txt
0294287
2009/03/25(水) 10:10:31ID:???わざわざサンクス。
293のコードで俺の環境でやってみた結果。V
GRT: 6 wallclock secs ( 5.00 usr + 0.00 sys = 5.00 CPU) @ 2713378.60/s (n=13566893)
ST: 6 wallclock secs ( 5.27 usr + 0.00 sys = 5.27 CPU) @ 2560283.68/s (n=13492695)
split: 4 wallclock secs ( 5.08 usr + 0.00 sys = 5.08 CPU) @ 2935626.97/s (n=14912985)
テスト環境:(perl) v5.10.0 (OS) Ubuntu desktop 8.10 32bit (CPU) Core2Quad Q9650 (メモリ) DDR2-6400 2GBx2
で次のレスが、289で使用したコードV
0295287
2009/03/25(水) 10:12:20ID:???use Benchmark qw(cmpthese);
use String::Random;
my @targets;
for (0 .. 100) {
push @targets, get_a_line();
}
cmpthese(1_000_000, { with_split_in_block => sub { with_split(@targets) },
without_split_in_block => sub { without_split(@targets) }, });
sub with_split { return sort { (split ' ', $b)[1] <=> (split ' ', $a)[1]; } @_; }
sub without_split {
return map "$_->[0]",
sort { $b->[1] <=> $a->[1] }
map [ $_, / ([0-9]+)/ ], @_;
}
sub get_a_line {
my $string_random = new String::Random();
$string_random->{'A'} = ['a'..'z'];
my $label = $string_random->randpattern('AAAAAAA');
$string_random->{'N'} = [0..9];
my $score = $string_random->randpattern('NNNNNNN');
return $label . q{ } . $score;
}
0296287
2009/03/25(水) 10:26:31ID:???ARGV[0] = 1000
Benchmark: running GRT, ST, split for at least 5 CPU seconds...
GRT: 5 wallclock secs ( 5.32 usr + 0.00 sys = 5.32 CPU) @ 339.85/s (n=1808)
ST: 6 wallclock secs ( 5.29 usr + 0.00 sys = 5.29 CPU) @ 269.19/s (n=1424)
split: 5 wallclock secs ( 5.14 usr + 0.00 sys = 5.14 CPU) @ 90.86/s (n=467)
0297287
2009/03/25(水) 11:00:33ID:???0298nobodyさん
2009/03/25(水) 22:28:41ID:V8wgPxlAありがとう!おかげで助かった。
0299nobodyさん
2009/03/25(水) 22:41:59ID:???0302nobodyさん
2009/03/26(木) 01:34:45ID:???http://ja.wikipedia.org/wiki/Hello_world
まず画面上に "Hello, world!"、と表示することから始めるんだ。
0303nobodyさん
2009/03/26(木) 11:24:01ID:???さっそくどこかで使ってやろう
0304nobodyさん
2009/03/26(木) 12:07:44ID:???シャチ泳ぎの方が何かと好きだけど、覚えとこ。
実際にはそこまで処理時間にシビアな仕事はしてないけどw
0305nobodyさん
2009/03/26(木) 14:19:19ID:???0306nobodyさん
2009/03/26(木) 15:38:08ID:???AのサーバーにあるCGIから
BのサーバーにあるCGIへPOSTする方法を探しています。
HTMLのformタグのmethod=postと同じことをCGIで実行出来ないでしょうか?
0307nobodyさん
2009/03/26(木) 15:49:55ID:???あるいはJavaScriptでブラウザにPOSTさせるとか
というのは嘘で、無理だから諦めろ
0308nobodyさん
2009/03/26(木) 16:00:49ID:???ご返答ありがとうございます。
よそのサーバーのCGIに処理を実行させるのは危ないなぁとも考えていましたが、無理でしたか。
同一のサーバーでしたら可能でしょうか?
0309nobodyさん
2009/03/26(木) 17:29:37ID:???0310nobodyさん
2009/03/26(木) 23:43:53ID:???0312nobodyさん
2009/03/27(金) 01:22:46ID:???やり方書いてあるんだから。
0313nobodyさん
2009/03/27(金) 07:22:34ID:???http://www.seshop.com/detail.asp?pid=6160
『10日でおぼえる Perl /CGI入門教室 第2版 』2005/9/5発売。
を購入しようと思っています。
この書籍が出た時点のバージョンのPerlをWindowz Vistaで
動かすことは可能でしょうか?バクがでたりエラーなどは大丈夫でしょうか?
これからPerlを勉強するので詳しいことはわかりません。
なお、PHP関連の書籍に付録で付いていたXAMPP1.6.5はインストール済みで
少なくともVistaで動作確認済みとPHPの書籍にありました。
どなたか回答よろしくお願いいたします。
0314nobodyさん
2009/03/27(金) 08:24:05ID:???そんなのが出たのか。
0315nobodyさん
2009/03/27(金) 09:14:42ID:???VistaならActivePerl 5.8.8を入れておけば問題ない
0318nobodyさん
2009/03/27(金) 20:16:13ID:???ほんっとの初心者は Apache、PHP、MySQL それぞれを個別に入れれ
0319nobodyさん
2009/03/27(金) 21:58:01ID:???例のoverload絡みのバグへの対応は他ディストリより糞遅かったけど
0320nobodyさん
2009/03/28(土) 00:42:44ID:mucWI58Rある文字列UTF-8を、指定の文字数で分割し、配列に格納したいと思います
例)UTF-8の文字列を5文字ずつ分けたいと思い↓のコードを書きました
$string = "民主党支持団体=jichiro,山口組、ブラクカイドウ、韓国民潭";
@output = $string =~ m/.{5/g;
print $_, "\n" foreach @output;
↑の結果は↓のようにしたいのですが、今のままだと途中で文字化けをしてしまいます
--------------
民主党支持
団体=ji
chiro
,山口組、
ブラクカ
イドウ、
韓国民潭
--------------
文字化けをしないようにする方法を教えてください
0321nobodyさん
2009/03/28(土) 00:53:26ID:???use Encode;
$string = decode('utf-8', $string);
my @output = $string =~ m/.{5}/g;
print encode('utf-8',$_), "\n" foreach @output;
% perl 2ch.pl
民主党支持
団体=ji
chiro
,山口組、
ブラクカイ
ドウ、韓国
■ このスレッドは過去ログ倉庫に格納されています