川合孝典です。
----- Original Message -----
From: "藤岡和夫" <kazuf@...>
To: <TSperl@...>
Sent: Sunday, May 02, 2004 3:53 PM
Subject: [TSperl:371] for と foreachの違い
> @flds = ("","a","b",0,1,2);
> for($i=0;$i<=$#flds;$i++){
> if($flds[$i]){
> print $flds[$i], "\n";
> }
> }
> foreach (@flds){
> if($flds[$_]){
> print $flds[$_], "\n";
> }
> }
>
> 結果は、
(中略)
> のようになるのですが、なぜ?
どのような結果をお望みでしょう?
まずPerlではforとforeachは同じもの(The foreach keyword is
actually a synonym for the for keyword)なので、反対にしても
変わりはありません。
@flds = ("","a","b",0,1,2);
foreach($i=0;$i<=$#flds;$i++){
if($flds[$i]){
print $flds[$i], "\n";
}
}
for (@flds){
if($flds[$_]){
print $flds[$_], "\n";
}
}
結果のうちa,b,1,2は上のループ、続くa,bは下のループで
出力されています。
上のループは@fldsを順に出力していきますが、値がtrueと
判定されない""と0が出力されません。
また下のループでは$_に配列の値が入ります。
そのため$fld[$_]と配列の指定して有効になるケース0,1,2のうち、
0の場合には値がtrueと判定されないために1、2の値である
a,bが出力されています。
私がforeachで上のループを書くなら、こんな感じかなと。
foreach my $sItem (@flds){
print $sItem, "\n" if($sItem);
}
===================================================
川合 孝典 (Hippo2000)
DBI日本語メーリングリスト管理人、Kansai.pm所属
kwitknr@... GCD00051@...
http://member.nifty.ne.jp/hippo2000、http://www.hippo2000.info/
perldocの日本語情報ならperldocjp:翻訳してみませんか?
http://perldocjp.sourceforge.jp/
===================================================