質問

できる人については正確に文字列"0がtrue"Perl?どんなゼロの整数型に比較、評価をtrueに使用することができます。すが、いかがでしょうか?これは通常の行動の言語ではこの特殊文字列として扱われ、特別な場合の通訳?

役に立ちましたか?

解決

で通常行動の開されたものの翻訳であります。引用の perlsyn manpage:

の数 0, の文字列 '0'"", は、空のリスト (), は、 undef が全て偽の場合、boolean型のコンテキストすべてのその他の値はtrueです。否定 の真の価値 ! または not を返します特別falseの場合の値です。時として評価文字列として扱われ "", もともかなりの手間をかけている。 として扱われ 0.

このため、することが考えられており戻 0 システムから通話する期待を返す 0 として(成功)は戻り値に残る信号故障の場合は、実際に返falseの場合の値です。 "0 but true" している。

他のヒント

でのハードコードのPerlコアに取り扱うことをしています。このhackへのPerlの条約 ioctl's"規約と一緒に遊べ;から perldoc -f ioctl:

の戻り値 ioctlfcntl は以下のとおりです。

if OS returns:      then Perl returns:

    -1              undefined value
     0              string "0 but true"
anything else       that number

このようにPerlを返しますtrueに成功falseの場合失敗していくのか、 でも容易に決定、実際の値によって返される 経営システム

$retval = ioctl(...) || -1;
printf "System returned %d\n", $retval;

特殊文字列 "0 but true" の対象外であり、 -w 苦情 て不適切な数値変換式

このほどその他、 "0 but true" は特殊なケース入りでな警告を数値コンテクスト:

$ perl -wle 'print "0 but true" + 3'
3
$ perl -wle 'print "0 but crazy" + 3'
Argument "0 but crazy" isn't numeric in addition (+) at -e line 1.
3

の価値 0 but true 特別な場合にはPerlです。はご単に必殺技で目にするものではありませんのように番号、およびすべて知ることPerlの理解になっているのです。

せいことがPerl互に0を返すのです値は常に失敗返され、falseの場合の値です。

想像してい型を返すの和二番号:

die "You can only add two numbers\n" if (not add(3, -2));
die "You can only add two numbers\n" if (not add("cow", "dog"));
die "You can only add two numbers\n" if (not add(3, -3));

最初の決算な金型の型を返します。 1.素排出量を定義しています。第二次決死ので、互いを追加することができ .

と、第三に。

う~ん、で追加できま 3-3.私たちは 0, ものの、その後の私のプログラムで金型のもの add 互にあります。

この、Perlと考えて 0 but true きます。私の場合 追加 型を返しまな 0, ものの、 0はtrue, 私の第三算します。

ものではあ 0はtrue 数字のゼロ?うことが、この

my $value = "0 but true";
print qq(Add 1,000,000 to it: ) . (1_000_000 + $value) . "\n";
print "Multiply it by 1,000,000: " . 1_000_000 * $value . "\n";

そうだ、ゼロ!

index 型は非常に古い作品のPerl、前の概念 0はtrue した。であるかを返しの部分文字列内の文字列:

index("barfoo", "foo");   #This returns 3
index("barfoo", "bar");   #This returns 0
index("barfoo", "fu");    #This returns ...uh...

最後のstatmentを返します -1.合かったのです:

if ($position = index($string, $substring)) {
   print "It worked!\n";
}
else {
   print "If failed!\n";
}

私は標準機能するのではない。場合に使用した"barfoo"と"バー"のようになったの文書によって、 else 条項が実行した場合使用した"barfoo"の"福"としての第三に、 if 条項が実行できます。なってきた。

ただし、 index 互に返される 0はtrue 第二次決 undef 第算書、 if/else 項思います。

また、文字列 "0E0"使用Perlコード, では、同じ物が0E0ん0書指数表記です。●しかし、Perlのみを考慮し"0","はundefとしてfalseであると評価がtrueでbooleanトします。

このハードコーディングのPerlのソースコードは、具体的には、 Perl_grok_number_flags数値.c.

読書コードまたは文字列"infinity"(大文字と小文字を区別しません)をlooks_like_number試験です。したことがなかったので知られる。

整数型的には、この評価に0の数値部分の初めの文字列)がゼロになります。るスカラーの文脈では空値ではtrueです。

  • if (int("0 but true")) { print "zero"; }

    (出力なし)

  • if ("0 but true") { print "true"; }

    (版画true)

0 とはfalse Perlや他の言語に関すに、合理的な行動です。その他の言語(ユーザのためのインスタンスに扱え 0 としてtrueを別の東建コーポレーション(しばしば nil または false)を表すのに非真の値です。

一例が、Perlうな仕事では戻したいときには多くの関数が処理に失敗した場合何らかの理由で、falseの場合の値です。例えばうな関数を書くの行を読み込んでファイルから文字数を返しまにます。共通の機能があるようなもの:

while($c = characters_in_line($file)){
    ...
};

通知した場合には、文字数に特定のラインは0になるため、 ながら ループを終了前のファイルです。その characters_in_line 機能は特別な場合を0文字に戻す '0がtrue' です。そのように機能すことを意図してい ながら ループのものを返し正しい答えていくべきなので使用します。

なお、このではないの言語です。とについてPerlの能力を解釈する文字列として。その他のstingsができるようにしております。 DBI 用途 "0E0", を備えています。た数字の文脈れますが、 0, がbooleanの文脈で、 false.

れるものはfalse:

  • "".
  • "0".
  • こstringifyと変わらないことが分かった。

"0 but true" はなfalseです。

さらに、Perlを返します "0 but true" が期待されるために信号機に成功したもので返されるゼロになります。 sysseek 例のような機能です。以降の値となることが想定される数値として、Perlで分けると考えられています。その結果、警告を発行した場合として使用されている番号 looks_like_number("0 but true") はtrueを返します。

その他の"true"ゼロ"です http://www.perlmonks.org/?node_id=464548.

別の例を"0が"true:

は、DBIモジュールの使用"0E0"の戻り値として更新または削除するクエリかに影響を与えます。この評価をtrueにbooleanトコンテキストのクエリを実行した正)と0の数字の文脈でないことを示す記録を変更したモードです。

いつもりでしたが証明する文字列"0がtrue"はactiallyタに組み込のような人がここで答え:

$ strings /usr/lib/perl5/5.10.0/linux/CORE/libperl.so | grep -i true
Perl_sv_true
%-p did not return a true value
0 but true
0 but true

だいたい書ける機能を返しますのいずれかの整数値、または false または undef (のエラーの場合)それまでの値をゼロになります。帰国の場合な表示エラーの状態で返却0がtrue"を関数の戻り値がtrueを通過後の値がゼロの場合の数学を行います。

"0がtrue"は文字列というのがそうであるようになperlの書式でに役立つ、すなわち帰整数値からゼロ機能なしの場合は"false"(perlす。

の文字列ある必要はない"0がtrueになります。"0はfalse"はい"true"をbooleanです。

発生していると考えること

if(x)

for x:        yields:
1             -> true
0             -> false
-1            -> true
"true"        -> true
"false"       -> true
"0 but true"  -> true
int("0 but true") ->false

の殺のことができる:

sub find_x()

は、このコードを印刷することはでき"0"として出力:

if($x = find_x)
{
   print int($x) . "\n";
}

文字列`0がtrue"は、特別の場合:

for arg in "'0 but true'" "1.0*('0 but true')" \
           "1.0*('0 but false')" 0 1 "''" "0.0" \
           "'false'" "'Ja'" "'Nein'" "'Oui'" \
           "'Non'" "'Yes'" "'No'" ;do
    printf "%-32s: %s\n" "$arg" "$(
        perl -we '
            my $ans=eval $ARGV[0];
            $ans=~s/^(Non?|Nein)$//;
            if ($ans) {
                printf "true:  |%s|\n",$ans
            } else {
                printf "false: |%s|", $ans
          };' "$arg"
        )"
    done

以下のように:(注の`警告"!)

'0 but true'                    : true:  |0 but true|
1.0*('0 but true')              : false: |0|
Argument "0 but false" isn't numeric in multiplication (*) at (eval 1) line 1.
1.0*('0 but false')             : false: |0|
0                               : false: |0|
1                               : true:  |1|
''                              : false: ||
0.0                             : false: |0|
'false'                         : true:  |false|
'Ja'                            : true:  |Ja|
'Nein'                          : false: ||
'Oui'                           : true:  |Oui|
'Non'                           : false: ||
'Yes'                           : true:  |Yes|
'No'                            : false: ||

...んでRTFM!

man -P'less +"/0 but [a-z]*"' perlfunc

       ... "fcntl".  Like "ioctl", it maps a 0 return from the system call
           into "0 but true" in Perl.  This string is true in boolean
           context and 0 in numeric context.  It is also exempt from the
           normal -w warnings on improper numeric conversions. ...
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top