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

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

■ このスレッドは過去ログ倉庫に格納されています
00019882005/12/08(木) 22:48:27ID:???
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
02072042005/12/22(木) 13:00:30ID:???
>>205-206
ありがとうございます!
02082042005/12/22(木) 13:05:37ID:iSEjIkIt
204-205を参考に
拡張子が重複する(フォルダは無視)場合は表示しないようにするプログラムを作ってたんだけど、
うまくいきません

例えば
start.exe
hogehoge/
readme.txt
stop.exe
index.html
readme.html

と並んでいたら、
.exe
.txt
.html
のように抜き出したいのですけど、、

センスないのかなorz・・・
0209nobodyさん2005/12/22(木) 13:11:55ID:???
>208
日記はチラシの裏にでも書いてろ
0210nobodyさん2005/12/22(木) 13:15:55ID:???
このスレって実績ある?
0211nobodyさん2005/12/22(木) 13:16:55ID:???
あるよ。
0212nobodyさん2005/12/22(木) 13:37:43ID:???
>>208
Perlをなめてんのか?
連想配列にでも突っ込めよ
02132042005/12/22(木) 14:43:03ID:iSEjIkIt
出来ました
if(-f $file){
push @extensions, (split(/\./, $file))[-1];
$fext = (split(/\./, $file))[-1];
}

foreach $extension (@extensions) {
$ext{$extension} = $ext{$extension} +1;
}
($key,$value) = each %ext;
while(($key,$value) = each(%ext)){
print $key, " - ", $value, "\n";
}

>>212のアドバイスがききました
ありがとうございました
0214nobodyさん2005/12/22(木) 16:51:29ID:9N6o95FW
CGI::Application を使ったモジュール内でエラーが起こった時に、
出力を CGI::Carp qw(fatalsToBrowser) のようにするには
どうすればよいんでせう?

0215nobodyさん2005/12/22(木) 16:57:57ID:???
こういうのは?つCGI::Application::Plugin::DebugScreen
02162142005/12/22(木) 17:14:18ID:???
>>215
早速ありがとう!
dependecies にひっかかってなかなかインストールできなかったけど
無理やり動かせた。
開発効率かなりあがりそうだ。

でも、この画面ユーザには見せたくないね。
やっぱエラー処理はちゃんと書かないとダメそうだ。
0217nobodyさん2005/12/23(金) 10:26:25ID:???
>>214
CGI::Applicationのpod見れ
0218nobodyさん2005/12/23(金) 16:23:03ID:???
読んだんなら引用すればいいのに(*´・д・)(・д・`*)ネー
0219nobodyさん2005/12/23(金) 17:31:00ID:???
m9(^Д^) ・・・
0220nobodyさん2005/12/24(土) 19:39:16ID:???
( ^ω^)・・・
0221nobodyさん2005/12/24(土) 23:29:23ID:???
encodingの話ですが、
use encodings "cp932";
を指定しているとき、 URLエンコードされたものが、正常にデコード
できません。

#!/usr/bin/perl

use strict;
use encoding "cp932"; #ここをコメントすれば上手くいく
binmode STDERR, ":encoding(cp932)";

print "Content-Type: text/html; charset=Shift_JIS\r\n\r\n";
my $value;
$value = '%95%5C%8E%A6'; #表示
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
print "しふとじす\n";
print $value;

肝心の$valueが、ちゃんと"表示"に戻りません。
use encodingsの指定をやめると正常に動きます。

原因は何となくわかる (内部はutf-8で処理しているから?)
のですが、対処方法がわかりません。

ここ嫁 でも結構ですので、教えていただけませんか?
0222nobodyさん2005/12/24(土) 23:34:37ID:???
>>221
encoding、PerlIO::encoding、perlunicode を見ろ。
02232212005/12/24(土) 23:34:41ID:???
書き忘れました。
やりたいことは、ソースコードをShift_Jis(cp932)で統一したいのと、
実際に、CGI.pmを使った場合でも、GET、POSTされた Shift_Jisのデータ、
正確には、URLエンコードされたもの、が正常に取得できないので、
これをどうにかしたい、ということです。
0224nobodyさん2005/12/24(土) 23:35:46ID:???
>>221
これだけだと不親切だな。>>8 にある Unicode 関連のところも読め。
0225nobodyさん2005/12/25(日) 10:06:00ID:MhkrUB/B
環境変数で(環境変数でなくてもいいけど)httpであるのか、httpsであるのか見分ける関数ってありますか?
0226nobodyさん2005/12/25(日) 10:50:26ID:sTNGkhi5
https で接続されたときには環境変数 HTTPS に値がセットされると思った
02272212005/12/25(日) 12:10:36ID:???
>>222,224
ありがとうございます。podの方はまだ少ししか読んでませんが、
>>8 の方は読んでみました。
というか、以前から読んでいましたが、理解できていなかった...

#!/usr/bin/perl
use strict;
use Encode;
use encoding "cp932";
binmode STDERR, ":encoding(cp932)";

my $wc = '%95%5C%8E%A6'; #表示
#ただのアスキーコードだけど、utf8フラグがたつ

my $nwc = Encode::encode('cp932',$wc);
#1Byte単位でpackするために、utf8フラグを落とす

$nwc =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
#utf8フラグの立っていない$nwcに対してpackする。1Byte単位で扱える
#$nwcには、cp932の生バイナリが入る

$wc = Encode::decode('cp932', $nwc);
#$nwcのままでは表示できないので、再びutf8フラグを付ける。

print $wc;
#$wcはutf8フラグが立っているので、STDOUT出力時に
#Encode::encode('cp932',$wc)が内部的には動いている


こんな理解で大体OKでしょうか?
だけど、ずいぶんと回りくどいことしていると思います。
0228nobodyさん2005/12/25(日) 17:27:10ID:???
> だけど、ずいぶんと回りくどいことしていると思います。
よく分かってるじゃないか。

encoding は一見お手軽に見えるけど、使い勝手悪いよ。
日本語は全て外部ファイルに追い出すのが遥かに楽。
02292212005/12/25(日) 18:24:14ID:???
>>228
実はencodingをはじめて知ったとき、『これは使える』と思ったのですが、
URLデコードのところで躓いて、導入をあきらめていました。
そのときは、ソースに日本語べた書きでしたが、やっぱり外部ファイルに分離
するのがいいですね。

encodingを使えば、=~(マッチ演算)などで、半角カナなど(何も考えず)上手く処理できる?
print "本能"; などが文法エラーにならないなど、メリットはありますが...
逆に使えなくなるモジュール等を考えると、デメリット(副作用)の方が多いような。

あと、何かとデバックのために Data::Dumperを使って表示するのですが、
Dumperを使って日本語(の入った変数)を表示した場合、Perl内部コードがそのまま
表示されるので、不便といえば不便ですな。
0230nobodyさん2005/12/25(日) 18:25:21ID:???
例えば$commentに
てすとhttp://hoge.hoge/index.htmlてすと
が入っていたとします。
そこで$resultに上記のURLを変換(置換)して
てすと<A HREF="http://hoge.hoge/index.html" TARGET="_blank">http://hoge.hoge/index.html<;/A>てすと
としたいのですがどうしたらよいのでしょうか?
ググったら正規表現とか出てきたのですが、良く分かりませんでした。

自分でやってみたこと
$result = $comment =~ s/(http:\/\/[^ \"\r\n\<]+)/\<a href=\"$1\" target=\_blank\>$1\<\/a\>/g;
print <<END;
$result
END

これをやったら$resultには何も入りませんでした・・・。
0231nobodyさん2005/12/25(日) 19:29:51ID:???
>>229
必要な所にno encoding入れれば、それほど面倒でもなくなるよ。
それも結構、落とし穴があったりするけど。

>>230
(my $result = $comment) =~ s/ (以下略
それと正規表現も修正。
02322312005/12/25(日) 20:09:43ID:???
あっと、>>229宛てのは勘違いしてました。
スマソ。
02332302005/12/26(月) 00:25:11ID:???
>>231さんありがとうございました。
(my $result = $comment)
にしたら無事できました。
あとは正規表現を修正しようかと思って
ttp://www.din.or.jp/%7Eohzaki/perl.htm#httpURL
こちらを参考に
s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+
この正規表現を使わせて頂いたのですが
今度はURLのみ表示されません・・・。
どうしたらよいでしょうか?
0234nobodyさん2005/12/26(月) 01:03:13ID:???
HTML::Templateを使っています。

TMPL_VAR で、改行コードを含んだ文字列を置換するとき
改行コードを<br>や<br/>に変換する便利な方法は無いのでしょうか。
要求される仕様上、<pre>やスタイルシートなど、<br>以外で改行させる方法は不可とします。

現状:
改行コードが自動的に置換されないので、ブラウザ上では改行されて見えない

やってみた方法:
(1) 自前で改行コードを<br>に変換、HTML::Templateのサニタイジング機能を使う
  → <br>というタグが見えてしまう
(2) 自前で改行コードを<br>に変換、HTML::Templateのサニタイジング機能を使わない
  → 正常に改行されるが、セキュリティ上かなりやばい
(3) 自前でサニタイジング、HTML::Templateのサニタイジング機能を使わない
  → とりあえず問題なく動くが面倒&重い。他の方法はないものか?

Perlのバージョンは5。
HTML::Templateのバージョンは不明。(申し訳ない、比較的新しいとは聞いた
02352302005/12/26(月) 01:19:00ID:???
試行錯誤した結果、正規表現を
(s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$%#]+)
にしたら上手くいきました。
変更点は
(1) ()で挟んだ
(2) 後ろの方の$と%の間の,を無くした
です。
何でこうなるのかまだ理解してないので自信ないのですが
これであってますよね?
0236nobodyさん2005/12/26(月) 02:03:15ID:???
>>234
出力する文字列を配列にしてTMPL_LOOPで回すのは無し?
サニタイズぐらい自分でやれよって気はする。

>>235
括弧で挟むのは、置換するところで$1として使ってるから。
カンマは有っても動きそうだけど。
02372342005/12/26(月) 02:10:56ID:???
>>236
まあ、サニタイジングくらい自分でやるですよ。
これくらいHTML::Templateの機能にあっても良さそうなもんなんですけどね。

02382302005/12/26(月) 02:18:17ID:???
あれ?今やったらカンマ有りでもできました。
できなかったのは他に原因があったのかな・・・。
何はともあれありがとうございました。
0239nobodyさん2005/12/26(月) 10:03:49ID:???
>>237
Template Toolkitならhtml_line_breakというフィルタがあるので

[% foo | html | html_line_break %]

てな感じでいけるんだけどね。

use strict;
use Template;

my $t = Template->new();

my $input = <<INPUT;
[% foo | html | html_line_break %]
INPUT

my %vars = (
foo => "foo<>\nbar\n&hoge\n",
);

$t->process(\$input, \%vars);
0240nobodyさん2005/12/26(月) 19:53:21ID:w9go55d/
Perlは初心者なんだが、開発環境がちょっと不足気味だな。

俺は、VC++で自分でつくったやつ使ってるよ。

上半分はエディタで、「実行」をおすと、下半分のブラウザに実行結果がでてくれるんだよ。

だれか、ほしいやついる?いるなら、Vectorにでもうpするけど。
0241nobodyさん2005/12/26(月) 19:59:15ID:???
いらん
0242nobodyさん2005/12/26(月) 20:09:20ID:???
いらんいらん
0243nobodyさん2005/12/26(月) 20:15:02ID:???
いんらん
0244nobodyさん2005/12/26(月) 20:20:26ID:???
いんりん
0245nobodyさん2005/12/26(月) 20:21:04ID:???
エディタが限定されるってのが問題じゃないか、と
0246nobodyさん2005/12/26(月) 20:42:19ID:???
今、CGI::ReadParse を使って test.cgi?name=XXX といったようにGETでデータを受けているんですが、
nameの部分は変わることがないので、これを test.cgi?XXX とゆふうに使えるようにしたいんですが
どうすればいいでしょうか?
0247nobodyさん2005/12/26(月) 21:01:43ID:???
nameが不変ならReadParseしなくてもQUERY_STRINGをそのまま使ってしまってもいいんじゃないか
0248nobodyさん2005/12/26(月) 21:09:20ID:???
$ENV{'QUERY_STRING'} ですね
できました!ありがとうございました!!
0249nobodyさん2005/12/27(火) 14:36:05ID:???
文字列にソが含まれている時に「含まれています」と表示させてたいんですが
my $so='ソ\';
if(/\Qソ\E/){
print "含まれています。";
}
これを実行してもソがひっかかりません。
どうしてですか?
02502492005/12/27(火) 14:36:55ID:???
×表示させてたいんですが
○表示させたいんですが
すいません。ミスりました。
0251nobodyさん2005/12/27(火) 15:07:40ID:???
>>249-250
if (/\Qソ\E/) { は if ($so =~ /\Qソ\E/) { の間違いとして、
'ソ\' は "\x83\x5C" 、
qr/\Qソ\E/ は \Q\x83\\E → \x83\x5C\x5C\x45 。
よってマッチしない。

参考: http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
02522492005/12/27(火) 15:10:51ID:???
釣られるやつ居ねぇか。
\x83\x5cだよな。
0253nobodyさん2005/12/27(火) 15:48:24ID:???
単純なマッチならindex使えよ
0254nobodyさん2005/12/27(火) 18:30:24ID:???
indexより正規表現の方が速いよ
0255nobodyさん2005/12/27(火) 23:40:00ID:???
うんにゃ。index()の方が数段速い。
0256nobodyさん2005/12/28(水) 00:47:06ID:???
case by case
0257nobodyさん2005/12/28(水) 01:30:43ID:rgfSZuvi
普通にindexの方が早いんじゃねーの?
0258nobodyさん2005/12/28(水) 02:00:31ID:???
単純な?正規表現は、indexと同じアルゴリズム使ってコンパイルするそうな。
そって>>256
0259nobodyさん2005/12/28(水) 02:01:04ID:???
orz そって → よって
0260nobodyさん2005/12/28(水) 09:22:40ID:???
はいはいワロスワロス。
0261nobodyさん2005/12/28(水) 09:27:39ID:???
ベンチ取ってから言えよ
少なくとも>>249のケースでは正規表現の方が速い
3倍ほどな
0262nobodyさん2005/12/28(水) 09:55:45ID:???
せっかくベンチとったんなら結果晒しキボン
0263nobodyさん2005/12/28(水) 10:10:27ID:???
#!/usr/bin/perl
use Benchmark;

$buf = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

timethese(10000000, {
1 => sub { if($buf =~ /JKL/){} },
2 => sub { if(index($buf, 'JKL')){} },
});

----------------------------------------------------------------------

Benchmark: timing 10000000 iterations of 1, 2...
1: 5 wallclock secs ( 4.53 usr + 0.01 sys = 4.55 CPU) @ 2199736.03/s
(n=10000000)
2: 3 wallclock secs ( 1.97 usr + 0.03 sys = 2.00 CPU) @ 4997501.25/s
(n=10000000)
0264nobodyさん2005/12/28(水) 10:34:42ID:???
>>263
その結果だと261の言ってることとは反対にindexの方が倍以上速いな。
0265nobodyさん2005/12/28(水) 10:34:57ID:???
やっぱり index の方が速いですね。3倍ほど…。
>>254 や >>261 は同じ人ですか?
あまり関係無いですが、if(index($buf, 'JKL')){} なんて書くのはバグの元ですよ
0266nobodyさん2005/12/28(水) 10:38:06ID:???
ベンチの為ならこれで充分だろう・・・神経質なヤツだな
02672652005/12/28(水) 10:53:48ID:???
ベンチとしてどうか、っていうと普通に駄目です。
index と正規表現の速さの違いを比べるなら支障は無いので
あまり関係無いと書いたんですが、異なる機構を比較してるのは事実ですし、
やはり目的が何であれベンチとして駄目なものは駄目、と書いた方が良かったですね。
0268nobodyさん2005/12/28(水) 10:59:44ID:???
思いっきり釣られた…orz
0269nobodyさん2005/12/28(水) 11:04:31ID:???
なんか出遅れたがせっかく測ったので貼っとく。
http://boobar.hp.infoseek.co.jp/bench/index_vs_m.txt

UTF8 フラグがかんできたりするとまた違うのかも知れん。
02702532005/12/28(水) 11:40:27ID:???
こんなに議論してたんかよ。。

おれの意図としては速さ以前に、簡単な正規表現を正しく書けないようなら
index使えと言うほうに比重を置いたつもりだったんだが。
0271nobodyさん2005/12/28(水) 12:31:39ID:???
ttp://www002.upp.so-net.ne.jp/wing-net/support/

ここのMulti Wing BBSをDLして設定してうpまで
終わったんですが、メインのwingmulti.cgiにアクセスして
設定したパスワードを入力しても、パスワードエラーと出ます。

何度設定しなおしてもパスワードエラーに引っかかるんですが
これって単なるバグでしょうか?

分かる方いたら、試してもらえませんか?
0272nobodyさん2005/12/28(水) 12:33:32ID:VO6oi9GX
>271
スレ (´∀`( ´∀`) チガイ
0273nobodyさん2005/12/28(水) 12:44:59ID:???
>>272
どこスレいけばいいかな?
0274nobodyさん2005/12/28(水) 12:54:31ID:???
>>273
設置に関する質問ならこちらへ

CGI設置について質問 【Part2】
http://pc8.2ch.net/test/read.cgi/php/1104624784
0275nobodyさん2005/12/28(水) 12:59:45ID:???
>>274
間に合わなかったようだ
彼は上級者スレに逝ってしまった
0276nobodyさん2005/12/28(水) 13:09:23ID:???
>>274
うは、すっげぇ、ありがとう
マルチポストはしないほうがいいよね?
0277nobodyさん2005/12/28(水) 13:10:29ID:VO6oi9GX
誘導されてきました。
って一言書いておけばいいと思う。
0278nobodyさん2005/12/28(水) 13:14:22ID:RY3kh/X5
>>277
ありがとう。あなた達、本当に人が出来ているね。
0279nobodyさん2005/12/28(水) 21:13:55ID:FTSvjaED
eval "require $self->{App}; 1;";

では大丈夫だけど、

eval {
   require $self->{App};
   1;
};

では出来ないのってなんでですか?
0280nobodyさん2005/12/28(水) 21:36:23ID:???
仕様
0281nobodyさん2005/12/29(木) 01:45:17ID:fGeDbioe
んと、
<うにゃ> <うにゃ>

にたいして、<と>に挟まれた部分すべて(この場合3カ所)に対して処理したいのですが、どうすればいいんですか?

最短でも最長でもなく、すべてにマッチさせたいのです。
0282nobodyさん2005/12/29(木) 02:01:56ID:???
>>281
print join('/', /(?<=[<>])([^<>]*)(?=[<>])/g), "\n" for qw(
  a<b>c<d>e
  a>b<c>d<e
  a<b<c<d<e
  a>b>c>d>e
);
0283nobodyさん2005/12/29(木) 02:20:00ID:???
>>279
普通にできるが。

#--- foo.pl ---
print "foo!\n";
__END__

#!/usr/local/bin/perl -w
use strict;
my $self = { App => 'foo.pl' };
eval { require $self->{'App'} } or die $@;
eval { do $self->{'App'} } or die $@;
delete $INC{ $self->{'App'} };
eval "require '$self->{'App'}'" or die $@;
eval "do '$self->{'App'}'" or die $@;
__END__

http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_do_EXPR
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_require_VERSION
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_use_Module_VERSION_LIST
0284nobodyさん2005/12/29(木) 08:24:52ID:fGeDbioe
>>282
舌足らずでした。すみません。
>>281は
<はげ> <ほげ>
に対して

はげ
はげ> <ほげ
ほげ

をマッチさせたいのです。
0285nobodyさん2005/12/29(木) 09:12:37ID:???
>>284
sub match {
  my($str, $match, $flag) = @_;
  my $re = $flag
    ? qr/ (?<=<).*(?=>) | ^.*(?=>) | (?<=<).*\z /x
    : qr/ (?<=<).*(?=>) /x
  ;
  if (my @str = $str =~ /$re/g) {
    push @{$match}, @str;
    match($_, $match, 1) for @str;
  }
}
for (qw(
  a<b>c<d>e  a>b<c>d<e  a<b<c<d<e
  a>b>c>d>e  <a>b<c<d>e>f<g>
)) {
  my @match;
  match($_ => \@match);
  print join(' / ', @match), "\n";
}

Perlでリクに答えるスクリプトを作るスレ
http://pc8.2ch.net/test/read.cgi/tech/1086143976/

■こんなCGI作ってください■ Part.2
http://pc8.2ch.net/test/read.cgi/php/1133361560/
0286nobodyさん2005/12/29(木) 12:43:26ID:???
最近perl弄り始めたばかりなのだけど、use strictって積極的に覚えて使った方がいい?
あとみんな使ってるもの?
普通にちょっと弄って使ってる程度の人なら使わなくてもいいものかな。

今までは情報としてへ〜使った方が良いんだぐらいに考えてたんだけど、
cgi改造してたらこういうときに便利なのかなって初めて思ったので質問してみる。
0287nobodyさん2005/12/29(木) 12:46:04ID:???
>>286
規模にもよるけど、変数のスコープでバグ出すことはなくなるので使う。
ただ、改造にはあまり有用でない。(元がstrictで作られているならともかく)
0288nobodyさん2005/12/29(木) 12:57:29ID:???
うんち
うんち
しっこ
うんち
しっこ

みたいなテキストを、
うんち*3
しっこ*2

とゆうふうにカウントしたいんですが、どうすればいいかわかりません。
切り出した文字列を変数にしてカウントアップすればいいんでしょうか?
方法があればおしえてください。
0289nobodyさん2005/12/29(木) 13:00:02ID:???
>>288
ハッシュ
0290nobodyさん2005/12/29(木) 13:11:47ID:6Q9kRgBG
foreach (@obutsulist){
  $obutsu{$_}++;
}

これでおけだけど、コレからは“例”にも気を付けた方がいいかと思う。
0291nobodyさん2005/12/29(木) 15:32:15ID:???
>>287
なるほど。
こなれた人が1から組んでく時には有効って感じで考えるぐらいでよさげだね。
こまめに動作確認したり、規模が大きくなければ特に問題なそうだ。
サンクス。
0292nobodyさん2005/12/29(木) 15:39:42ID:???
>>285
ありがとうです。
0293nobodyさん2005/12/29(木) 21:23:37ID:???
汚物リストワロタ
0294nobodyさん2005/12/29(木) 22:54:07ID:???
>>291
そのへんの判断はもちろん自由だけれど、Perl を始めたばかりということなら何も考えずに use strict と use warnings の使用をおすすめしておく。
02952942005/12/29(木) 22:58:10ID:???
これらを使わずに書いたプログラムに後から付け加えるという使い方には向いてないので、改造などにはもちろん向かない。
と一応補足。
0296nobodyさん2005/12/30(金) 02:50:44ID:???
use strictで無い屑スクリプトは改造するに値しない。
0297nobodyさん2005/12/30(金) 04:40:27ID:???
そうでもない
0298nobodyさん2005/12/30(金) 05:19:31ID:???
K●NTとか・・・
0299nobodyさん2005/12/30(金) 05:53:13ID:???
KE●Tとか
0300nobodyさん2005/12/30(金) 05:59:16ID:???
KENTがいかに優れたコーディングをしてるからって、
妬み丸出しのレスはカッコ悪いぞ>>298-299よ
0301nobodyさん2005/12/30(金) 07:48:55ID:???
>>300
今後の参考にしたいと思いますので、
優れた点をご享受いただけないでしょうか?
0302nobodyさん2005/12/30(金) 07:53:10ID:???
>>301
KENT WEB 総合スレ Part2
http://pc8.2ch.net/test/read.cgi/php/1078991985/
0303nobodyさん2005/12/30(金) 15:49:53ID:???
KENTで育ち漠然と教科書にしていると俺みたいな腐ったPerl書きになるから注意な!
動けばイイや程度で書いてるとソースが汚いし無駄ばかり
挙げ句に処理も遅く回りくどいことをして回りからはバカにされる
俺のポジションはアイデアの参照スクリプトだけで他の奴が清書する
情けないポジション「抜けようか?」と言うと、それはマジに困ると言うから
何か晒し者のように顔色を伺いながらメンバーに居る感じである。
スキルのチョイとある新参の中堅に笑われて不用みたいに言われ続けハゥゥ
0304nobodyさん2005/12/30(金) 18:16:33ID:???
>>303
プログラム言語の最低限の知識だけのプログラマ
http://pc8.2ch.net/test/read.cgi/prog/1135701242/

■■■技術を習得するのが辛い■■■
http://pc8.2ch.net/test/read.cgi/prog/1118856179/

ぐち0x13 〜分かったから仕事させてくれ〜
http://pc8.2ch.net/test/read.cgi/prog/1131375876/

年末年始の休み雑談
http://pc8.2ch.net/test/read.cgi/prog/1135924708/
0305nobodyさん2005/12/31(土) 00:50:18ID:LK7Aj/aS
失礼します。

------------------
#[0]は一意なid
my @a = ('aioue', 'sdfgsdf', 100, 'dsfhsf', 2);
my @b = ('noriri', 'sdfgsdf', 100, 'dsfhsf', 2);
my @c = ('nanndemoi-', 'sdfgsdf', 100, 'dsfhsf', 2);

my @arrr;
push @arrr, (\@a, \@b, \@c);
------------------

上記の@arrrのような二次元配列から、
例えば配列の頭に「noriri」が格納されている行を取り出したい場合、
どのようにして該当する行を求めるのが好ましいでしょうか。

ベタベタに考えると
------------------
my $stmp = 'noriri';
my $pt;
foreach (@arrr) {
 if ($${$_}[0] eq $stmp) {
   $pt = $_;
 }
}
------------------
という感じになってしまうのですが…
もっと効率のいい方法は、ありますでしょうか?

ご教授お願いしますm(_ _)m
0306nobodyさん2005/12/31(土) 01:48:39ID:???
>>305
[0] が一意である事が保証されるなら最初からハッシュで持てばいい。
もしくはそのように加工後、$arrr{$stmp} のようにアクセス。
順序が必要なら順序のデータを持たせればいい。

my %arrr = (
  aioue => [ 0, 'sdfgsdf', 100, 'dsfhsf', 2 ],
  noriri => [ 1, 'sdfgsdf', 100, 'dsfhsf', 2 ],
  'nanndemoi-' => [ 2, 'sdfgsdf', 100, 'dsfhsf', 2 ],
);

これらの前処理に問題があるなら素直に君が書いたように処理。
0307nobodyさん2005/12/31(土) 02:22:54ID:???
>>306
ありがとうございます。
とりあえず構造改革できるかどうかやってみます…
■ このスレッドは過去ログ倉庫に格納されています