Kaip naudoti „Boolean“ kintamuosius „Perl“?

Bandžiau:

 $var = false; $var = FALSE; $var = False; 

Nė vienas iš šių darbų neveikia. Gaunu klaidą

  Bareword „false“ neleidžiama naudoti „griežtus subs“. 
210
24 июня '09 в 7:08 2009-06-24 07:08 Čadas DeShonas paklausė birželio 24 d., 09:08, 2009-06-24 07:08
@ 8 atsakymai

Perlyje sąlyginė išraiška vertinama kaip klaidinga:

 0 '0' undef '' # Empty scalar () # Empty list ('') 

Likusi dalis yra teisinga. Nėra paprastų žodžių true ar false .

273
24 июня '09 в 7:10 2009-06-24 07:10 atsakymą pateikė Alan Haggai Alavi , birželio 24 d., 07:10, 2009-06-24 07:10

Išsamesnė ir glausta klaidinga, su kuria susidūriau, apibrėžimas:

Viskas, kas nurodo tuščią eilutę arba eilutę „0“, yra klaidinga. Visa kita yra tiesa.

Todėl šios vertės yra klaidingos:

  • Tuščia linija
  • Nulinė vertė
  • Nenustatyta vertė
  • Objektas su perkrautu loginiu operatoriumi, kuris įvertina vieną iš pirmiau minėtų.
  • Magija kintamasis, kuris vertina vieną iš pirmiau minėtų būdų.

Turėkite omenyje, kad tuščias sąrašo žodynas vertina neapibrėžtą skalaro kontekstą, todėl vertina kažką klaidingą.


Pastaba apie „tikrus nulius“

Nors numeriai, sukurti iki 0 yra klaidingi, eilutės, kurių skaičius yra nulis, yra neprivalomos. Vienintelės klaidingos eilutės yra 0 ir tuščios eilutės. Bet kokia kita eilutė, net jei ji yra, yra teisinga.

Toliau pateikiamos eilutės, kurios yra teisingos kaip loginės ir nulinės.

  • Be įspėjimo:
    • "0.0"
    • "0E0"
    • "00"
    • "+0"
    • "-0"
    • " 0"
    • "0\n"
    • ".0"
    • "0."
    • "0 but true"
    • "\t00"
    • "\n0e1"
    • "+0.e-9"
  • Su įspėjimu:
    • Bet kokia eilutė, kuriai Scalar::Util::looks_like_number grąžina klaidingą. (pvz., "abc" )
67
13 апр. Atsakymas, kurį pateikė ikegami balandžio 13 d 2011-04-13 23:53 '11 11:53 val. 2011-04-13 23:53

Perl neturi natūralaus boolean tipo, bet galite naudoti sveikųjų skaičių ar styginių palyginimą, kad gautumėte tą patį elgesį. Alano pavyzdys yra geras būdas tai padaryti, naudojant sveikojo skaičiaus palyginimą. Čia yra pavyzdys

 my $boolean = 0; if ( $boolean ) { print "$boolean evaluates to true\n"; } else { print "$boolean evaluates to false\n"; } 

Vienas dalykas, kurį padariau kai kuriose mano programose, prideda tą patį elgesį kaip ir konstanta:

 #!/usr/bin/perl use strict; use warnings; use constant false => 0; use constant true => 1; my $val1 = true; my $val2 = false; print $val1, "  ", $val2; if ( $val1  $val2 ) { print " evaluates to true.\n"; } else { print " evaluates to false.\n"; } print $val1, " || ", $val2; if ( $val1 || $val2 ) { print " evaluates to true.\n"; } else { print " evaluates to false.\n"; } 

Linijos, pažymėtos „naudoti konstantą“, apibrėžia konstantišką pavadinimą tiesa, kuri visada vertinama kaip 1, ir konstanta, pavadinta false, kuri visada įvertinama iki 0. Dėl Perl apibrėžtų konstantų šios kodo eilutės neveikia taip pat:

 true = 0; true = false; 

Klaidos pranešimas turėtų pasakyti kažką panašaus į „Nepavyko pakeisti konstantos skalarei priskirti“.

Mačiau ją viename iš komentarų, kuriuos paklausėte apie eilutės palyginimą. Turėtumėte žinoti, kad, nes Perl sujungia eilutes ir skaitmeninius tipus skalių kintamuosiuose, turite skirtingą sintaksę lyginant eilutes ir skaičius:

 my $var1 = "5.0"; my $var2 = "5"; print "using operator eq\n"; if ( $var1 eq $var2 ) { print "$var1 and $var2 are equal!\n"; } else { print "$var1 and $var2 are not equal!\n"; } print "using operator ==\n"; if ( $var1 == $var2 ) { print "$var1 and $var2 are equal!\n"; } else { print "$var1 and $var2 are not equal!\n"; } 

Skirtumas tarp šių operatorių yra labai dažnas painiavos „Perl“ šaltinis.

58
24 июня '09 в 10:24 2009-06-24 10:24 Atsakymą davė Jamesas Thompsonas birželio 24 d., 09:24, 2009-06-24 10:24

Aš rekomenduoju use boolean; . Jums reikia įdiegti loginį modulį iš cpan.

16
03 мая '10 в 14:16 2010-05-03 14:16 atsakymas pateikiamas xenoterracide 03 gegužės 10 d. 14:16 2010-05-03 14:16

Mano mėgstamiausi visada buvo

 use constant FALSE => 1==0; use constant TRUE => not FALSE; 

kuri yra visiškai nepriklausoma nuo vidinio atstovavimo.

10
08 окт. atsakymas pateikiamas syck 08 okt. 2015-10-08 14:00 '15 14:00 val. 2015-10-08 14:00

Aš atėjau per pamoką, kuri gerai paaiškina, kokios vertės yra teisingos ir klaidingos perl . Jame teigiama, kad:

Toliau pateiktos skaliarinės vertės laikomos klaidingomis:

  • undef - neapibrėžtos vertės
  • 0 numeris, net jei rašote jį kaip 000 arba 0,0
  • '' tuščia eilutė.
  • '0' eilutė, kurioje yra vienas skaitmuo 0.

Visos kitos skaliarinės vertės, įskaitant šias, yra teisingos:

  • 1 bet koks ne numeris
  • ' ' eilutė su tarpu
  • '00' dvi ar daugiau 0 simbolių eilutėje
  • "0\n" a 0, po kurios eina nauja eilutė
  • 'true'
  • 'false' taip, netgi „eilutė“ yra netikra.

Yra dar viena gera pamoka, kurioje paaiškinama, kad Perl yra teisingas ir klaidingas .

7
13 апр. atsakymas duotas serenesat Bal 13 2015-04-13 15:56 '15 15:56 2015-04-13 15:56

Gražus bobfo paaiškinimas dėl loginių vertybių: tiesa arba klaidinga? Greito naudojimo vadovas

Tikrieji skirtingų verčių testai

  Result of the expression when $var is: Expression | 1 | '0.0' | a string | 0 | empty str | undef --------------------+--------+--------+----------+-------+-----------+------- if( $var ) | true | true | true | false | false | false if( defined $var ) | true | true | true | true | true | false if( $var eq '' ) | false | false | false | false | true | true if( $var == 0 ) | false | true | true | true | true | true 
5
27 нояб. Atsakymą pateikė Bharatas lapkričio 27 d. 2013-11-27 14:32 '13, 14:32, 2013-11-27 14:32

naudokite šį failo priešdėlį, jis pridės jūsų perl scenarijų eTRUE ir eFALSE, jis tikrai bus tikras (!) teisingas ir klaidingas (kaip ir java)

 #!/usr/bin/perl use strict; use warnings; use constant { #real true false, compatible with encode_json decode_json for later (we don't want field:false... will be field:0...) eTRUE => bless( do{\(my $o = 1)}, 'JSON::PP::Boolean' ), eFALSE => bless( do{\(my $o = 0)}, 'JSON::PP::Boolean' ) }; 

Iš tikrųjų yra keletas priežasčių, kodėl turėtumėte tai naudoti.

Mano priežastis yra tai, kad dirbau su „JSON“, turiu 0 ir 1 raktų reikšmes, tačiau šis įsilaužimas užtikrins, kad jūsų scenarijuje būtų saugomos teisingos vertės.

0
15 янв. Atsakymą pateikė user257319 15 sausis 2014-01-15 13:48 '14, 13:48 2014-01-15 13:48

Kiti klausimai apie žymes arba užduoti klausimą