- 締切済み
perlの質問です
論理演算子 複数の条件を組み合わせて、より複雑な条件を表すときに使います。 &&,and かつ ($a>=10)&&($a<50) $aは10以上かつ50未満 ||,or または ($a==1)||($a==100) $aは1または100 !,not ~ではない !($a==100) $aは100ではない $aは5以上1000未満である (5<=$a)&&($a<1000) $aは0でも1でもない !(($a==0)||($a==1)) $a=0または$a=1ではない !($a==0)&& !($a==1) $=0ではなく、$b=1でもない ($a!=0)&&($a!=1) $a≠0かつ$a≠1である 条件付き実行 条件式&&処理 条件式が真なら処理を行い、 偽なら処理を行いません。 条件式||処理 条件式が真なら処理を行わず、 偽なら処理を行います。 $a=4; 変数$aに4を代入する。 ($a<10)&&(print "\$aは10未満\n"); 変数$aに4を入れると条件式が真なので $aは10未満 を表示させる。 ($a<10)||(print "\$aは10以上\n"); 変数$aに4を入れてくらべると条件式は真なので処理は行いません。 $a=($a!=0)&&($a*2); ($a==10)&&(print "\$aの値は10\n"); 変数$aは8なので条件式は偽であるため処理は行われない。 ($a !=8)||(print "\$aの値は8\n"); 変数$aは8なので条件式は偽のため $aの値は8 を表示させる。 あっていますでしょうか。 それから $a=($a!=0)&&($a*2); の意味がわかりません。 実行してみたら一応動きます。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- sakusaker7
- ベストアンサー率62% (800/1280)
> こんなんがでましたが今の私では理解不能です。 $a = 0: $a = $VAR1 = ''; コロンの前の $aの値は && 含む文を実行する前の値で コロンの後は文を実行した後の$aの値です。 $VAR1 = はData::Dumperによる出力で、分かりやすく変数の内容を 出力するために使っています。 上記の例では、実行前は0で、実行後は空文字列になっているということです。 なぜかというと、$a!=0 が成り立たないので &&の後にある部分は 実行されず、この条件式の値そのものが$aに代入されます。その結果が 空文字列になっているということです。$aが0以外であれば $a*2が実行されるので、$aを2倍した値が$aの新しい値になるという次第です。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>$a=($a!=0)&&($a*2); の意味がわかりません。 「0でなければ、2倍する」の意味だと思います。 Perl では、($a!=0)&&($a*2) の全体が真か偽かという値が返るのではなくて最後に評価した値になるのでそのようになります。 この場合問題になるのは、$a=0 の時ですが、0ではなく偽('':空文字)になります。 その他の場合は、容易に確かめられると思うので省略
- sakusaker7
- ベストアンサー率62% (800/1280)
> !($a==100) > $aは100ではない $a != 100 のほうがよくある書き方でしょう。 > $aは0でも1でもない > !(($a==0)||($a==1)) $a!=0 && $a!=1 > $a=0または$a=1ではない > !($a==0)&& !($a==1) $a!=0 || $a!=1 だと思うのですが、何かの練習ですか? ド・モルガンの法則使えば簡単に導けはしますけど… あと、意味が同じで優先順が同じ and or という演算子があります。 今回のあとのほうの例はこれらを使えばカッコを減らせます。 > $a=($a!=0)&&($a*2); use Data::Dumper; foreach my $foo (0,1,2,3,4,5) { $a = $foo; print "\$a = $a: "; $a=($a!=0)&&($a*2); print "\$a = $a\n"; print Dumper($a); } を実行してみればわかる通り、$aに0が入っていれば空文字列0が、 そうでなければそれを2倍した値が$aの新しい値になります。
お礼
--- 実行開始 [>perl dumper.pl] $a = 0: $a = $VAR1 = ''; $a = 1: $a = 2 $VAR1 = 2; $a = 2: $a = 4 $VAR1 = 4; $a = 3: $a = 6 $VAR1 = 6; $a = 4: $a = 8 $VAR1 = 8; $a = 5: $a = 10 $VAR1 = 10; こんなんがでましたが今の私では理解不能です。