アプリ版:「スタンプのみでお礼する」機能のリリースについて

$line[0]='a,1,2,3,4,5';
$line[1]='b,1,2,3,4,5';
$line[2]='c,1,2,3,4,5';
$line[3]='d,1,2,3,4,5';
$line[4]='e,1,2,3,4,5';
$line[5]='f,1,2,3,4,5';

for($i=0;$i<=$#line;$i++){
($a,$b,$c,$d,$e,$f)=split(/\,/,$line[$i]);
push(@str,$a);
}

for($i=0;$i<=$#str;$i++){
print '$str',"[$i] = ","$str[$i]\n";
}

print "\n\n";

@str="";

for($i=0;$i<=$#line;$i++){
($a,$b,$c,$d,$e,$f)=split(/\,/,$line[$i]);
push(@str,$a);
}

for($i=0;$i<=$#str;$i++){
print '$str',"[$i] = ","$str[$i]\n";
}

__END__

実行結果

$str[0] = a
$str[1] = b
$str[2] = c
$str[3] = d
$str[4] = e
$str[5] = f


$str[0] =
$str[1] = a
$str[2] = b
$str[3] = c
$str[4] = d
$str[5] = e
$str[6] = f

二回目は$str[0]から入らないのですね。

@str="";
にその様にさせる意味があったのでしょうか?

pushなので、変数(@str)をクリアして使おうとしたら、こんな事になっていました。

A 回答 (2件)

配列を初期化するには


  @str = ();      # 空リストの代入
とするか、あるいは
  undef @str;     # 配列領域のクリア
とします。
また、あまりやりませんが
  $#str = -1;     # 要素の切り詰め
なんて方法もあります。

普通は1番目の方法を使うことが多いです。

  @str = "";
というのは、「空文字列」1つからなるリストを代入する、という意味(つまり、@str = (""); と同じ)なので、@str の0番目に "" が入っていることになります。
このため、2回目の処理では0番目を飛ばして push されたように見えたのです。
    • good
    • 0
この回答へのお礼

@str=""; で初期化できると思っていました。(^_^;
初期化の方法を教えていただきまして有り難うございます。

お礼日時:2003/04/01 22:35

@がつくものをリスト変数っていいます。


このリスト変数,初期化のやりかたをみたら分かりやすいと思います。
例)
@menu=("定食", "うどん", "カレー", "ラーメン");
とすると,
menu[0]="定食";
menu[1]="うどん";
menu[2]="カレー";
menu[3]="ラーメン";
となります。

質問文の場合,
@str="";
ですから;
str[0]="";
が入るわけです。
そして,
for($i=0;$i<=$#line;$i++){
($a,$b,$c,$d,$e,$f)=split(/\,/,$line[$i]);
push(@str,$a);
}
によって配列strの後ろからa,b,c,d,e,fを順に代入したからそのような結果になったと思われます。
    • good
    • 0
この回答へのお礼

@str=""; で初期化できると思っていました。(^_^;
有り難うございます。

お礼日時:2003/04/01 22:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!