自作CGIを評価するスレ (672レス)
1-

539: ager [age] 04/07/09 18:40 ID:??? AAS
age
540
(8): 04/10/08 20:39 ID:HUGW4EIR(1) AAS
タイトル::時刻::内容\n

というようなデータが数行あるような場合
それらを読んできて切り分けるって処理を
してます。
これの評価お願いします。

sub split_data{

my @ref,@tmp,%hush;
@tmp = @_;

for (@tmp){
chomp;
省12
541
(2): 04/10/09 00:21 ID:??? AAS
>>540
myで複数宣言するときは()がいる
hushじゃなくてたぶんhashね. 連想配列っていみなら

ハッシュのスライスを使うとエレガントかも
@hash{qw/title time contents/} = split /::/;

foreachつかえよ
for(...$#ref)
542
(3): 540 04/10/09 02:08 ID:??? AAS
541>

>ハッシュのスライスを使うとエレガントかも
>@hash{qw/title time contents/} = split /::/;

ありがと、参考になりました。

my は複数でも()いりませんよ。バージョンによるだろうけど
最後に、今更foreach使ってる人いるんですか?w
543
(1): 04/10/09 02:43 ID:??? AAS
>>542
#--- test.p ---
use strict;
my $foo, $bar, $baz;
__END__

> /usr/local/bin/perl -v
This is perl, v5.8.5 built for i386-freebsd-64int
<snip>
> /usr/local/bin/perl -wc test.p
Parentheses missing around "my" list at test.p line 2.
省11
544
(1): 04/10/09 03:20 ID:??? AAS
>>541 >foreachつかえよ
>>542 >今更foreach使ってる人いるんですか?w

for と foreach は単なるシノニムなので、その表現は正しくないな。
foreach (LIST) BLOCK を for (LIST) BLOCK と略せるのと同様に、
for (EXPR; EXPR; EXPR) BLOCK を foreach (EXPR; EXPR; EXPR)
BLOCK と書いてもエラーにならない。

foreach ループを意味するところで foreach と「書け」という >>541
アドヴァイスは論拠の確かな正しいものだ。しかし Perl では C 風の
for ループを使う機会が foreach ループに比べて圧倒的に少ない上、
人間の目からも for ループと foreach ループの区別は容易なので、
省1
545
(1): 04/10/09 05:06 ID:??? AAS
>>540
%hush(多分hash?)の宣言の位置。
GCのコストを考慮した場合に、変数の再利用をするはあるけど...、
ループないで初期化してないとフィールドの数が少ない時に困るよ。

split/::/の代わりに正規表現を使ってデータを切り出すと、
データのチェックとsplitを同時にできて便利。

chompはデータ格納前に済ませておいた方が良いんじゃないかな。chomp(@tmp)
もしくは、大抵はファイルから読み込むだろうからその時に。
546
(2): 540 04/10/09 05:35 ID:??? AAS
>>544
どうもありがとう。foreachは普通に使えるんだろうけど、
大抵forで済ませてしまうのです。言い方悪かったです、スイマセン。

>>545
ありがとうございます。

>ループないで初期化してないとフィールドの数が少ない時に困るよ。
というのは、forのループ内で undef(%hush); (ほんとはhashでしたw)
でいいですか?
あと、フィールドの数が少ない時というのはどういうことでしょうか?

>split/::/の代わりに正規表現を使ってデータを切り出すと
省7
547: 541 04/10/09 11:14 ID:??? AAS
言いたかったのはforeach (@ref)にしろよってことね
別にfor (@ref)でもいいかもしれんが
あと>>543読んだか? myは複数宣言するときは()いる

>>546
>ループ内で初期化
for(hoge){
my %hash;
statement;
}
こういう事だと思う
548
(1): 540 04/10/09 12:28 ID:??? AAS
my () つけなくてもエラー出てないです。 という事は
省略も可って事ではないでしょうか?
549: 04/10/09 14:26 ID:??? AAS
>>548
エラーにならないのは strict 'vars' 宣言が無いからだ。
my $foo, $bar, $baz; という文自体は文法的には間違いじゃないが、
my は , より優先順位が高いので、my($foo), $bar, $baz; と書くのと
等価になる。

#--- test.p ---
my $foo, $bar, $baz;
print defined $main::{$_} ? "'$_' is global.\n" : "'$_' is rexical.\n"
  for qw(foo bar baz);
__END__
省9
550
(1): 04/10/09 17:41 ID:??? AAS
>>546
> あと、フィールドの数が少ない時というのはどういうことでしょうか?
これは、今回のケースでは問題なかったです。

でも、変数を再利用する時は気を付けないと、前の値が残っていたり、
意図しない場所の値を書き換えてしまったりするので注意。
例えば、pushの所を \%hash とりファレンスを使うように変更した場合。

my (@ref, %hash);
foreach (@_) {
# @refの中の前の値を上書きすることになる
# {%hash}とした場合は、@refにはいってる値はコピーなので影響ない
省16
551
(1): 04/10/09 18:04 ID:??? AAS
ここってものすごいでかいスクリプトでも細かい所まで見てくれるの?
552: 04/10/09 18:09 ID:??? AAS
>>550 何かおかしな日本語だった。訂正
s/他の方に/他の方からも/

あと、正規表現を使った方法を書き忘れてたのでついでに、、
例えば time が整数の場合の例

if (/^(.+)::(\d+)::(.+)$/) {
@hash{qw/title time contents/} = ($1, $2, $3)
}
553
(1): 04/10/09 19:39 ID:??? AAS
>>551
読むに耐えうる書き方&内容ならな。
KENTレベルなら却下
554: 04/10/09 22:16 ID:??? AAS
>>553
オブジェクト指向とか頑張ってやってみたけど中途半端になったようなのでも大丈夫ですか?
555: 04/10/09 22:37 ID:??? AAS
何書いたって叩かれるんだから、結城出していいと思う
556: 540 04/10/09 23:53 ID:??? AAS
ほんとにこんなに色々な方が、教えてくださるとは思ってませんでした。
どうもありがとうございます。
特にエレガントな方法を教えてくださった542氏
ハイレベルな(少なくとも今の私には)指摘をしてくれた
545=550=552氏には感謝します。
その他あのようなケチなコードに意見を下さった方々ありがとう。

またお世話になるかもしれません。m(_ _)m
557
(1): 04/10/10 20:44 ID:??? AAS
> my は複数でも()いりませんよ。バージョンによるだろうけど
> 最後に、今更foreach使ってる人いるんですか?w
こんなこと言うやつはもう来なくていい
558
(1): 540 04/10/11 01:40 ID:21NinhME(1) AAS
ごめんね
1-
あと 114 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.151s*